"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getUnsupportedTargets = getUnsupportedTargets; exports.default = void 0; var _data = _interopRequireDefault(require("caniuse-db/fulldata-json/data-2.0.json")); var _Versioning = require("../Versioning"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // $FlowFixMe: Flow import error /** * Take a target's id and return it's full name by using `targetNameMappings` * ex. {target: and_ff, version: 40} => 'Android FireFox 40' */ function formatTargetNames(target) { const name = _Versioning.STANDARD_TARGET_NAME_MAPPING[target.target] || target.target; return `${name} ${target.version}`; } /** * Check if a browser version is in the range format * ex. 10.0-10.2 */ function versionIsRange(version) { return version.includes("-"); } /** * Parse version from caniuse and compare with parsed version from browserslist. */ function areVersionsEqual(targetVersion, statsVersion) { return targetVersion === parseFloat(statsVersion); } /* * Check the CanIUse database to see if targets are supported * * If no record could be found, return true. Rules might not * be found because they could belong to another provider */ function isSupportedByCanIUse(node, { version, target, parsedVersion }) { const data = _data.default.data[node.caniuseId]; if (!data) return true; const { stats } = data; if (!(target in stats)) return true; const targetStats = stats[target]; if (versionIsRange(version)) { return Object.keys(targetStats).some(statsVersion => versionIsRange(statsVersion) && areVersionsEqual(parsedVersion, statsVersion) ? !targetStats[statsVersion].includes("y") : true); } // @TODO: This assumes that all versions are included in the cainuse db. If this is incorrect, // this will return false negatives. To properly do this, we have to to range comparisons. // Ex. given query for 50 and only version 40 exists in db records, return true if (!(version in targetStats)) return true; if (!targetStats[version]) return true; return targetStats[version].includes("y"); } /** * Return an array of all unsupported targets */ function getUnsupportedTargets(node, targets) { return targets.filter(target => !isSupportedByCanIUse(node, target)).map(formatTargetNames); } const CanIUseProvider = [// new ServiceWorker() { caniuseId: "serviceworkers", astNodeType: "NewExpression", object: "ServiceWorker" }, { caniuseId: "serviceworkers", astNodeType: "MemberExpression", object: "navigator", property: "serviceWorker" }, // document.querySelector() { caniuseId: "queryselector", astNodeType: "MemberExpression", object: "document", property: "querySelector" }, // IntersectionObserver { caniuseId: "intersectionobserver", astNodeType: "NewExpression", object: "IntersectionObserver" }, // ResizeObserver { caniuseId: "resizeobserver", astNodeType: "NewExpression", object: "ResizeObserver" }, // PaymentRequest { caniuseId: "payment-request", astNodeType: "NewExpression", object: "PaymentRequest" }, // Promises { caniuseId: "promises", astNodeType: "NewExpression", object: "Promise" }, { caniuseId: "promises", astNodeType: "MemberExpression", object: "Promise", property: "resolve" }, { caniuseId: "promises", astNodeType: "MemberExpression", object: "Promise", property: "all" }, { caniuseId: "promises", astNodeType: "MemberExpression", object: "Promise", property: "race" }, { caniuseId: "promises", astNodeType: "MemberExpression", object: "Promise", property: "reject" }, // fetch { caniuseId: "fetch", astNodeType: "CallExpression", object: "fetch" }, // document.currentScript() { caniuseId: "document-currentscript", astNodeType: "MemberExpression", object: "document", property: "currentScript" }, // URL { caniuseId: "url", astNodeType: "NewExpression", object: "URL" }, // URLSearchParams { caniuseId: "urlsearchparams", astNodeType: "NewExpression", object: "URLSearchParams" }, // performance.now() { caniuseId: "high-resolution-time", astNodeType: "MemberExpression", object: "performance", property: "now" }, { caniuseId: "typedarrays", astNodeType: "NewExpression", object: "TypedArray" }, { caniuseId: "typedarrays", astNodeType: "NewExpression", object: "Int8Array" }, { caniuseId: "typedarrays", astNodeType: "NewExpression", object: "Uint8Array" }, { caniuseId: "typedarrays", astNodeType: "NewExpression", object: "Uint8ClampedArray" }, { caniuseId: "typedarrays", astNodeType: "NewExpression", object: "Int16Array" }, { caniuseId: "typedarrays", astNodeType: "NewExpression", object: "Uint16Array" }, { caniuseId: "typedarrays", astNodeType: "NewExpression", object: "Int32Array" }, { caniuseId: "typedarrays", astNodeType: "NewExpression", object: "Uint32Array" }, { caniuseId: "typedarrays", astNodeType: "NewExpression", object: "Float32Array" }, { caniuseId: "typedarrays", astNodeType: "NewExpression", object: "Float64Array" }].map(rule => ({ ...rule, getUnsupportedTargets, id: rule.property ? `${rule.object}.${rule.property}` : rule.object, protoChainId: rule.property ? `${rule.object}.${rule.property}` : rule.object, protoChain: rule.property ? [rule.object, rule.property] : [rule.object] })); var _default = CanIUseProvider; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlcnMvQ2FuSVVzZVByb3ZpZGVyLmpzIl0sIm5hbWVzIjpbImZvcm1hdFRhcmdldE5hbWVzIiwidGFyZ2V0IiwibmFtZSIsIlNUQU5EQVJEX1RBUkdFVF9OQU1FX01BUFBJTkciLCJ2ZXJzaW9uIiwidmVyc2lvbklzUmFuZ2UiLCJpbmNsdWRlcyIsImFyZVZlcnNpb25zRXF1YWwiLCJ0YXJnZXRWZXJzaW9uIiwic3RhdHNWZXJzaW9uIiwicGFyc2VGbG9hdCIsImlzU3VwcG9ydGVkQnlDYW5JVXNlIiwibm9kZSIsInBhcnNlZFZlcnNpb24iLCJkYXRhIiwiY2FuSVVzZVJlY29yZHMiLCJjYW5pdXNlSWQiLCJzdGF0cyIsInRhcmdldFN0YXRzIiwiT2JqZWN0Iiwia2V5cyIsInNvbWUiLCJnZXRVbnN1cHBvcnRlZFRhcmdldHMiLCJ0YXJnZXRzIiwiZmlsdGVyIiwibWFwIiwiQ2FuSVVzZVByb3ZpZGVyIiwiYXN0Tm9kZVR5cGUiLCJvYmplY3QiLCJwcm9wZXJ0eSIsInJ1bGUiLCJpZCIsInByb3RvQ2hhaW5JZCIsInByb3RvQ2hhaW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUE7O0FBQ0E7Ozs7QUFGQTs7QUFlQTs7OztBQUlBLFNBQVNBLGlCQUFULENBQTJCQyxNQUEzQixFQUFtRDtBQUNqRCxRQUFNQyxJQUFJLEdBQUdDLHlDQUE2QkYsTUFBTSxDQUFDQSxNQUFwQyxLQUErQ0EsTUFBTSxDQUFDQSxNQUFuRTtBQUNBLFNBQVEsR0FBRUMsSUFBSyxJQUFHRCxNQUFNLENBQUNHLE9BQVEsRUFBakM7QUFDRDtBQUVEOzs7Ozs7QUFJQSxTQUFTQyxjQUFULENBQXdCRCxPQUF4QixFQUFrRDtBQUNoRCxTQUFPQSxPQUFPLENBQUNFLFFBQVIsQ0FBaUIsR0FBakIsQ0FBUDtBQUNEO0FBRUQ7Ozs7O0FBR0EsU0FBU0MsZ0JBQVQsQ0FDRUMsYUFERixFQUVFQyxZQUZGLEVBR1c7QUFDVCxTQUFPRCxhQUFhLEtBQUtFLFVBQVUsQ0FB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LEVBQUFBLFNBQVMsRUFBRSxhQURiO0FBRUVXLEVBQUFBLFdBQVcsRUFBRSxlQUZmO0FBR0VDLEVBQUFBLE1BQU0sRUFBRTtBQUhWLENBNUltQyxFQWlKbkM7QUFDRVosRUFBQUEsU0FBUyxFQUFFLGFBRGI7QUFFRVcsRUFBQUEsV0FBVyxFQUFFLGVBRmY7QUFHRUMsRUFBQUEsTUFBTSxFQUFFO0FBSFYsQ0FqSm1DLEVBc0puQ0gsR0F0Sm1DLENBc0ovQkssSUFBSSxLQUFLLEVBQ2IsR0FBR0EsSUFEVTtBQUViUixFQUFBQSxxQkFGYTtBQUdiUyxFQUFBQSxFQUFFLEVBQUVELElBQUksQ0FBQ0QsUUFBTCxHQUFpQixHQUFFQyxJQUFJLENBQUNGLE1BQU8sSUFBR0UsSUFBSSxDQUFDRCxRQUFTLEVBQWhELEdBQW9EQyxJQUFJLENBQUNGLE1BSGhEO0FBSWJJLEVBQUFBLFlBQVksRUFBRUYsSUFBSSxDQUFDRCxRQUFMLEdBQWlCLEdBQUVDLElBQUksQ0FBQ0YsTUFBTyxJQUFHRSxJQUFJLENBQUNELFFBQVMsRUFBaEQsR0FBb0RDLElBQUksQ0FBQ0YsTUFKMUQ7QUFLYkssRUFBQUEsVUFBVSxFQUFFSCxJQUFJLENBQUNELFFBQUwsR0FBZ0IsQ0FBQ0MsSUFBSSxDQUFDRixNQUFOLEVBQWNFLElBQUksQ0FBQ0QsUUFBbkIsQ0FBaEIsR0FBK0MsQ0FBQ0MsSUFBSSxDQUFDRixNQUFOO0FBTDlDLENBQUwsQ0F0SjJCLENBQXJDO2VBOEplRixlIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbi8vICRGbG93Rml4TWU6IEZsb3cgaW1wb3J0IGVycm9yXG5pbXBvcnQgY2FuSVVzZVJlY29yZHMgZnJvbSBcImNhbml1c2UtZGIvZnVsbGRhdGEtanNvbi9kYXRhLTIuMC5qc29uXCI7XG5pbXBvcnQgeyBTVEFOREFSRF9UQVJHRVRfTkFNRV9NQVBQSU5HIH0gZnJvbSBcIi4uL1ZlcnNpb25pbmdcIjtcbmltcG9ydCB0eXBlIHsgTm9kZSwgVGFyZ2V0cywgVGFyZ2V0IH0gZnJvbSBcIi4uL0xpbnRUeXBlc1wiO1xuXG50eXBlIENhbklVc2VTdGF0cyA9IHtcbiAgW2Jyb3dzZXI6IHN0cmluZ106IHtcbiAgICBbdmVyc2lvbjogc3RyaW5nXTogc3RyaW5nXG4gIH1cbn07XG5cbnR5cGUgQ2FuSVVzZVJlY29yZHMgPSB7XG4gIGRhdGE6IENhbklVc2VTdGF0c1xufTtcblxuLyoqXG4gKiBUYWtlIGEgdGFyZ2V0J3MgaWQgYW5kIHJldHVybiBpdCdzIGZ1bGwgbmFtZSBieSB1c2luZyBgdGFyZ2V0TmFtZU1hcHBpbmdzYFxuICogZXguIHt0YXJnZXQ6IGFuZF9mZiwgdmVyc2lvbjogNDB9ID0+ICdBbmRyb2lkIEZpcmVGb3ggNDAnXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFRhcmdldE5hbWVzKHRhcmdldDogVGFyZ2V0KTogc3RyaW5nIHtcbiAgY29uc3QgbmFtZSA9IFNUQU5EQVJEX1RBUkdFVF9OQU1FX01BUFBJTkdbdGFyZ2V0LnRhcmdldF0gfHwgdGFyZ2V0LnRhcmdldDtcbiAgcmV0dXJuIGAke25hbWV9ICR7dGFyZ2V0LnZlcnNpb259YDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGJyb3dzZXIgdmVyc2lvbiBpcyBpbiB0aGUgcmFuZ2UgZm9ybWF0XG4gKiBleC4gMTAuMC0xMC4yXG4gKi9cbmZ1bmN0aW9uIHZlcnNpb25Jc1JhbmdlKHZlcnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmVyc2lvbi5pbmNsdWRlcyhcIi1cIik7XG59XG5cbi8qKlxuICogUGFyc2UgdmVyc2lvbiBmcm9tIGNhbml1c2UgYW5kIGNvbXBhcmUgd2l0aCBwYXJzZWQgdmVyc2lvbiBmcm9tIGJyb3dzZXJzbGlzdC5cbiAqL1xuZnVuY3Rpb24gYXJlVmVyc2lvbnNFcXVhbChcbiAgdGFyZ2V0VmVyc2lvbjogbnVtYmVyLFxuICBzdGF0c1ZlcnNpb246IHN0cmluZ1xuKTogYm9vbGVhbiB7XG4gIHJldHVybiB0YXJnZXRWZXJzaW9uID09PSBwYXJzZUZsb2F0KHN0YXRzVmVyc2lvbik7XG59XG5cbi8qXG4gKiBDaGVjayB0aGUgQ2FuSVVzZSBkYXRhYmFzZSB0byBzZWUgaWYgdGFyZ2V0cyBhcmUgc3VwcG9ydGVkXG4gKlxuICogSWYgbm8gcmVjb3JkIGNvdWxkIGJlIGZvdW5kLCByZXR1cm4gdHJ1ZS4gUnVsZXMgbWlnaHQgbm90XG4gKiBiZSBmb3VuZCBiZWNhdXNlIHRoZXkgY291bGQgYmVsb25nIHRvIGFub3RoZXIgcHJvdmlkZXJcbiAqL1xuZnVuY3Rpb24gaXNTdXBwb3J0ZWRCeUNhbklVc2UoXG4gIG5vZGU6IE5vZGUsXG4gIHsgdmVyc2lvbiwgdGFyZ2V0LCBwYXJzZWRWZXJzaW9uIH06IFRhcmdldFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRhdGEgPSAoY2FuSVVzZVJlY29yZHM6IENhbklVc2VSZWNvcmRzKS5kYXRhW25vZGUuY2FuaXVzZUlkXTtcblxuICBpZiAoIWRhdGEpIHJldHVybiB0cnVlO1xuICBjb25zdCB7IHN0YXRzIH0gPSBkYXRhO1xuICBpZiAoISh0YXJnZXQgaW4gc3RhdHMpKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCB0YXJnZXRTdGF0cyA9IHN0YXRzW3RhcmdldF07XG5cbiAgaWYgKHZlcnNpb25Jc1JhbmdlKHZlcnNpb24pKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRhcmdldFN0YXRzKS5zb21lKChzdGF0c1ZlcnNpb246IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAgIHZlcnNpb25Jc1JhbmdlKHN0YXRzVmVyc2lvbikgJiZcbiAgICAgIGFyZVZlcnNpb25zRXF1YWwocGFyc2VkVmVyc2lvbiwgc3RhdHNWZXJzaW9uKVxuICAgICAgICA/ICF0YXJnZXRTdGF0c1tzdGF0c1ZlcnNpb25dLmluY2x1ZGVzKFwieVwiKVxuICAgICAgICA6IHRydWVcbiAgICApO1xuICB9XG5cbiAgLy8gQFRPRE86IFRoaXMgYXNzdW1lcyB0aGF0IGFsbCB2ZXJzaW9ucyBhcmUgaW5jbHVkZWQgaW4gdGhlIGNhaW51c2UgZGIuIElmIHRoaXMgaXMgaW5jb3JyZWN0LFxuICAvLyAgICAgICAgdGhpcyB3aWxsIHJldHVybiBmYWxzZSBuZWdhdGl2ZXMuIFRvIHByb3Blcmx5IGRvIHRoaXMsIHdlIGhhdmUgdG8gdG8gcmFuZ2UgY29tcGFyaXNvbnMuXG4gIC8vICAgICAgICBFeC4gZ2l2ZW4gcXVlcnkgZm9yIDUwIGFuZCBvbmx5IHZlcnNpb24gNDAgZXhpc3RzIGluIGRiIHJlY29yZHMsIHJldHVybiB0cnVlXG4gIGlmICghKHZlcnNpb24gaW4gdGFyZ2V0U3RhdHMpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKCF0YXJnZXRTdGF0c1t2ZXJzaW9uXSkgcmV0dXJuIHRydWU7XG5cbiAgcmV0dXJuIHRhcmdldFN0YXRzW3ZlcnNpb25dLmluY2x1ZGVzKFwieVwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgb2YgYWxsIHVuc3VwcG9ydGVkIHRhcmdldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVuc3VwcG9ydGVkVGFyZ2V0cyhcbiAgbm9kZTogTm9kZSxcbiAgdGFyZ2V0czogVGFyZ2V0c1xuKTogQXJyYXk8c3RyaW5nPiB7XG4gIHJldHVybiB0YXJnZXRzXG4gICAgLmZpbHRlcih0YXJnZXQgPT4gIWlzU3VwcG9ydGVkQnlDYW5JVXNlKG5vZGUsIHRhcmdldCkpXG4gICAgLm1hcChmb3JtYXRUYXJnZXROYW1lcyk7XG59XG5cbmNvbnN0IENhbklVc2VQcm92aWRlcjogQXJyYXk8Tm9kZT4gPSBbXG4gIC8vIG5ldyBTZXJ2aWNlV29ya2VyKClcbiAge1xuICAgIGNhbml1c2VJZDogXCJzZXJ2aWNld29ya2Vyc1wiLFxuICAgIGFzdE5vZGVUeXBlOiBcIk5ld0V4cHJlc3Npb25cIixcbiAgICBvYmplY3Q6IFwiU2VydmljZVdvcmtlclwiXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwic2VydmljZXdvcmtlcnNcIixcbiAgICBhc3ROb2RlVHlwZTogXCJNZW1iZXJFeHByZXNzaW9uXCIsXG4gICAgb2JqZWN0OiBcIm5hdmlnYXRvclwiLFxuICAgIHByb3BlcnR5OiBcInNlcnZpY2VXb3JrZXJcIlxuICB9LFxuICAvLyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKClcbiAge1xuICAgIGNhbml1c2VJZDogXCJxdWVyeXNlbGVjdG9yXCIsXG4gICAgYXN0Tm9kZVR5cGU6IFwiTWVtYmVyRXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJkb2N1bWVudFwiLFxuICAgIHByb3BlcnR5OiBcInF1ZXJ5U2VsZWN0b3JcIlxuICB9LFxuICAvLyBJbnRlcnNlY3Rpb25PYnNlcnZlclxuICB7XG4gICAgY2FuaXVzZUlkOiBcImludGVyc2VjdGlvbm9ic2VydmVyXCIsXG4gICAgYXN0Tm9kZVR5cGU6IFwiTmV3RXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJJbnRlcnNlY3Rpb25PYnNlcnZlclwiXG4gIH0sXG4gIC8vIFJlc2l6ZU9ic2VydmVyXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwicmVzaXplb2JzZXJ2ZXJcIixcbiAgICBhc3ROb2RlVHlwZTogXCJOZXdFeHByZXNzaW9uXCIsXG4gICAgb2JqZWN0OiBcIlJlc2l6ZU9ic2VydmVyXCJcbiAgfSxcbiAgLy8gUGF5bWVudFJlcXVlc3RcbiAge1xuICAgIGNhbml1c2VJZDogXCJwYXltZW50LXJlcXVlc3RcIixcbiAgICBhc3ROb2RlVHlwZTogXCJOZXdFeHByZXNzaW9uXCIsXG4gICAgb2JqZWN0OiBcIlBheW1lbnRSZXF1ZXN0XCJcbiAgfSxcbiAgLy8gUHJvbWlzZXNcbiAge1xuICAgIGNhbml1c2VJZDogXCJwcm9taXNlc1wiLFxuICAgIGFzdE5vZGVUeXBlOiBcIk5ld0V4cHJlc3Npb25cIixcbiAgICBvYmplY3Q6IFwiUHJvbWlzZVwiXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwicHJvbWlzZXNcIixcbiAgICBhc3ROb2RlVHlwZTogXCJNZW1iZXJFeHByZXNzaW9uXCIsXG4gICAgb2JqZWN0OiBcIlByb21pc2VcIixcbiAgICBwcm9wZXJ0eTogXCJyZXNvbHZlXCJcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogXCJwcm9taXNlc1wiLFxuICAgIGFzdE5vZGVUeXBlOiBcIk1lbWJlckV4cHJlc3Npb25cIixcbiAgICBvYmplY3Q6IFwiUHJvbWlzZVwiLFxuICAgIHByb3BlcnR5OiBcImFsbFwiXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwicHJvbWlzZXNcIixcbiAgICBhc3ROb2RlVHlwZTogXCJNZW1iZXJFeHByZXNzaW9uXCIsXG4gICAgb2JqZWN0OiBcIlByb21pc2VcIixcbiAgICBwcm9wZXJ0eTogXCJyYWNlXCJcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogXCJwcm9taXNlc1wiLFxuICAgIGFzdE5vZGVUeXBlOiBcIk1lbWJlckV4cHJlc3Npb25cIixcbiAgICBvYmplY3Q6IFwiUHJvbWlzZVwiLFxuICAgIHByb3BlcnR5OiBcInJlamVjdFwiXG4gIH0sXG4gIC8vIGZldGNoXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwiZmV0Y2hcIixcbiAgICBhc3ROb2RlVHlwZTogXCJDYWxsRXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJmZXRjaFwiXG4gIH0sXG4gIC8vIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQoKVxuICB7XG4gICAgY2FuaXVzZUlkOiBcImRvY3VtZW50LWN1cnJlbnRzY3JpcHRcIixcbiAgICBhc3ROb2RlVHlwZTogXCJNZW1iZXJFeHByZXNzaW9uXCIsXG4gICAgb2JqZWN0OiBcImRvY3VtZW50XCIsXG4gICAgcHJvcGVydHk6IFwiY3VycmVudFNjcmlwdFwiXG4gIH0sXG4gIC8vIFVSTFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInVybFwiLFxuICAgIGFzdE5vZGVUeXBlOiBcIk5ld0V4cHJlc3Npb25cIixcbiAgICBvYmplY3Q6IFwiVVJMXCJcbiAgfSxcbiAgLy8gVVJMU2VhcmNoUGFyYW1zXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwidXJsc2VhcmNocGFyYW1zXCIsXG4gICAgYXN0Tm9kZVR5cGU6IFwiTmV3RXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJVUkxTZWFyY2hQYXJhbXNcIlxuICB9LFxuICAvLyBwZXJmb3JtYW5jZS5ub3coKVxuICB7XG4gICAgY2FuaXVzZUlkOiBcImhpZ2gtcmVzb2x1dGlvbi10aW1lXCIsXG4gICAgYXN0Tm9kZVR5cGU6IFwiTWVtYmVyRXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJwZXJmb3JtYW5jZVwiLFxuICAgIHByb3BlcnR5OiBcIm5vd1wiXG4gIH0sXG4gIHtcbiAgICBjYW5pdXNlSWQ6IFwidHlwZWRhcnJheXNcIixcbiAgICBhc3ROb2RlVHlwZTogXCJOZXdFeHByZXNzaW9uXCIsXG4gICAgb2JqZWN0OiBcIlR5cGVkQXJyYXlcIlxuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInR5cGVkYXJyYXlzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IFwiTmV3RXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJJbnQ4QXJyYXlcIlxuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInR5cGVkYXJyYXlzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IFwiTmV3RXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJVaW50OEFycmF5XCJcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogXCJ0eXBlZGFycmF5c1wiLFxuICAgIGFzdE5vZGVUeXBlOiBcIk5ld0V4cHJlc3Npb25cIixcbiAgICBvYmplY3Q6IFwiVWludDhDbGFtcGVkQXJyYXlcIlxuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInR5cGVkYXJyYXlzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IFwiTmV3RXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJJbnQxNkFycmF5XCJcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogXCJ0eXBlZGFycmF5c1wiLFxuICAgIGFzdE5vZGVUeXBlOiBcIk5ld0V4cHJlc3Npb25cIixcbiAgICBvYmplY3Q6IFwiVWludDE2QXJyYXlcIlxuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInR5cGVkYXJyYXlzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IFwiTmV3RXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJJbnQzMkFycmF5XCJcbiAgfSxcbiAge1xuICAgIGNhbml1c2VJZDogXCJ0eXBlZGFycmF5c1wiLFxuICAgIGFzdE5vZGVUeXBlOiBcIk5ld0V4cHJlc3Npb25cIixcbiAgICBvYmplY3Q6IFwiVWludDMyQXJyYXlcIlxuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInR5cGVkYXJyYXlzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IFwiTmV3RXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJGbG9hdDMyQXJyYXlcIlxuICB9LFxuICB7XG4gICAgY2FuaXVzZUlkOiBcInR5cGVkYXJyYXlzXCIsXG4gICAgYXN0Tm9kZVR5cGU6IFwiTmV3RXhwcmVzc2lvblwiLFxuICAgIG9iamVjdDogXCJGbG9hdDY0QXJyYXlcIlxuICB9XG5dLm1hcChydWxlID0+ICh7XG4gIC4uLnJ1bGUsXG4gIGdldFVuc3VwcG9ydGVkVGFyZ2V0cyxcbiAgaWQ6IHJ1bGUucHJvcGVydHkgPyBgJHtydWxlLm9iamVjdH0uJHtydWxlLnByb3BlcnR5fWAgOiBydWxlLm9iamVjdCxcbiAgcHJvdG9DaGFpbklkOiBydWxlLnByb3BlcnR5ID8gYCR7cnVsZS5vYmplY3R9LiR7cnVsZS5wcm9wZXJ0eX1gIDogcnVsZS5vYmplY3QsXG4gIHByb3RvQ2hhaW46IHJ1bGUucHJvcGVydHkgPyBbcnVsZS5vYmplY3QsIHJ1bGUucHJvcGVydHldIDogW3J1bGUub2JqZWN0XVxufSkpO1xuXG5leHBvcnQgZGVmYXVsdCBDYW5JVXNlUHJvdmlkZXI7XG4iXX0=