mirror of
https://github.com/DOI-DO/j40-cejst-2.git
synced 2025-02-23 10:04:18 -08:00
1 line
No EOL
2.5 MiB
1 line
No EOL
2.5 MiB
(self.webpackChunkjustice40_tool=self.webpackChunkjustice40_tool||[]).push([[143],{7228:function(module){eval("function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanM/NWE0MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHNCQUF5QixtQkFBbUIseUJBQXlCIiwiZmlsZSI6IjcyMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXk7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7228\n")},3646:function(module,__unused_webpack_exports,__webpack_require__){eval("var arrayLikeToArray = __webpack_require__(7228);\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzPzIyMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXREO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUF5QixtQkFBbUIseUJBQXlCIiwiZmlsZSI6IjM2NDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3646\n")},1506:function(module){eval("function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcz8zYzk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiIxNTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1506\n")},676:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _arrayLikeToArray; }\n/* harmony export */ });\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzPzZiNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjs7QUFFQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiNjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///676\n')},1788:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _inheritsLoose; }\n/* harmony export */ });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4665);\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__/* .default */ .Z)(subClass, superClass);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzPzc0OGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFpRDtBQUNsQztBQUNmO0FBQ0E7QUFDQSxFQUFFLG9FQUFjO0FBQ2hCIiwiZmlsZSI6IjE3ODguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1788\n')},4665:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _setPrototypeOf; }\n/* harmony export */ });\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcz9iMzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI0NjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4665\n')},7329:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": function() { return /* binding */ _toConsumableArray; }\n});\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\nvar arrayLikeToArray = __webpack_require__(676);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return (0,arrayLikeToArray/* default */.Z)(arr);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\nvar unsupportedIterableToArray = __webpack_require__(2961);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js\nfunction _nonIterableSpread() {\n throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\n\n\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || (0,unsupportedIterableToArray/* default */.Z)(arr) || _nonIterableSpread();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcz82MDA1Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcz9kYjkwIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzPzM0MjciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanM/MjkwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBcUQ7QUFDdEM7QUFDZixpQ0FBaUMsbUNBQWdCO0FBQ2pELEM7O0FDSGU7QUFDZjtBQUNBLEM7Ozs7QUNGZTtBQUNmO0FBQ0EsQzs7QUNGdUQ7QUFDSjtBQUNzQjtBQUNsQjtBQUN4QztBQUNmLFNBQVMsa0JBQWlCLFNBQVMsZ0JBQWUsU0FBUyw2Q0FBMEIsU0FBUyxrQkFBaUI7QUFDL0ciLCJmaWxlIjoiNzMyOS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7329\n')},2961:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _unsupportedIterableToArray; }\n/* harmony export */ });\n/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(676);\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__/* .default */ .Z)(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__/* .default */ .Z)(o, minLen);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcz8wNmM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBcUQ7QUFDdEM7QUFDZjtBQUNBLG9DQUFvQyxzRUFBZ0I7QUFDcEQ7QUFDQTtBQUNBO0FBQ0Esc0ZBQXNGLHNFQUFnQjtBQUN0RyIsImZpbGUiOiIyOTYxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2961\n')},7154:function(module){eval("function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n module.exports.default = module.exports, module.exports.__esModule = true;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanM/YTU1OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFLHNCQUF5QixtQkFBbUIseUJBQXlCO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI3MTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHM7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7154\n")},5354:function(module,__unused_webpack_exports,__webpack_require__){eval("var setPrototypeOf = __webpack_require__(9489);\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inheritsLoose;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzTG9vc2UuanM/NTViNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBcUIsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUF5QixtQkFBbUIseUJBQXlCIiwiZmlsZSI6IjUzNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzTG9vc2U7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5354\n")},5318:function(module){eval('function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n "default": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcz80ZWE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI1MzE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdDtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5318\n')},6860:function(module){eval('function _iterableToArray(iter) {\n if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcz8xMWIwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUF5QixtQkFBbUIseUJBQXlCIiwiZmlsZSI6IjY4NjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6860\n')},8206:function(module){eval('function _nonIterableSpread() {\n throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n}\n\nmodule.exports = _nonIterableSpread;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlU3ByZWFkLmpzPzA2NzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXlCLG1CQUFtQix5QkFBeUIiLCJmaWxlIjoiODIwNi5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8206\n')},7316:function(module){eval("function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/ZjBlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI3MzE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2U7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7316\n")},9489:function(module){eval("function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n module.exports.default = module.exports, module.exports.__esModule = true;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzPzRhNGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLHNCQUF5QixtQkFBbUIseUJBQXlCO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI5NDg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9489\n")},319:function(module,__unused_webpack_exports,__webpack_require__){eval("var arrayWithoutHoles = __webpack_require__(3646);\n\nvar iterableToArray = __webpack_require__(6860);\n\nvar unsupportedIterableToArray = __webpack_require__(379);\n\nvar nonIterableSpread = __webpack_require__(8206);\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzPzQ0OGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0JBQXdCLG1CQUFPLENBQUMsSUFBd0I7O0FBRXhELHNCQUFzQixtQkFBTyxDQUFDLElBQXNCOztBQUVwRCxpQ0FBaUMsbUJBQU8sQ0FBQyxHQUFpQzs7QUFFMUUsd0JBQXdCLG1CQUFPLENBQUMsSUFBd0I7O0FBRXhEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUF5QixtQkFBbUIseUJBQXlCIiwiZmlsZSI6IjMxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xuXG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcblxudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheTtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///319\n")},379:function(module,__unused_webpack_exports,__webpack_require__){eval('var arrayLikeToArray = __webpack_require__(7228);\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzPzY2MTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiIzNzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5O1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///379\n')},7625:function(n,I,g){var t={"./en":4574,"./en.js":4574,"./es":3745,"./es.js":3745,"./ses":6867,"./ses.js":6867};function e(n){var I=B(n);return g(I)}function B(n){if(!g.o(t,n)){var I=new Error("Cannot find module '"+n+"'");throw I.code="MODULE_NOT_FOUND",I}return t[n]}e.keys=function(){return Object.keys(t)},e.resolve=B,n.exports=e,e.id=7625},7991:function(n){"use strict";n.exports=JSON.parse('{"data":{"en-001":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}}},"en-150":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}}},"en-AU":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yrs"},"past":{"one":"{0} yr ago","other":"{0} yrs ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yrs"},"past":{"one":"{0} yr ago","other":"{0} yrs ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtrs"},"past":{"one":"{0} qtr ago","other":"{0} qtrs ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtrs"},"past":{"one":"in {0} qtr ago","other":"{0} qtrs ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wks"},"past":{"one":"{0} wk ago","other":"{0} wks ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wks"},"past":{"one":"{0} wk ago","other":"{0} wks ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hrs"},"past":{"one":"{0} hr ago","other":"{0} hrs ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hrs"},"past":{"one":"{0} hr ago","other":"{0} hrs ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins"},"past":{"one":"{0} min. ago","other":"{0} mins ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins"},"past":{"one":"{0} min. ago","other":"{0} mins ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs"},"past":{"one":"{0} sec. ago","other":"{0} secs ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs"},"past":{"one":"{0} sec. ago","other":"{0} secs ago"}}},"en-CA":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr.","other":"in {0} yrs."},"past":{"one":"{0} yr. ago","other":"{0} yrs. ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr.","other":"in {0} yrs."},"past":{"one":"{0} yr. ago","other":"{0} yrs. ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mos."},"past":{"one":"{0} mo. ago","other":"{0} mos. ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mos."},"past":{"one":"{0} mo. ago","other":"{0} mos. ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk.","other":"in {0} wks."},"past":{"one":"{0} wk. ago","other":"{0} wks. ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk.","other":"in {0} wks."},"past":{"one":"{0} wk. ago","other":"{0} wks. ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hrs."},"past":{"one":"{0} hr. ago","other":"{0} hrs. ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hrs."},"past":{"one":"{0} hr. ago","other":"{0} hrs. ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins."},"past":{"one":"{0} min. ago","other":"{0} mins. ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins."},"past":{"one":"{0} min. ago","other":"{0} mins. ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs."},"past":{"one":"{0} sec. ago","other":"{0} secs. ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs."},"past":{"one":"{0} sec. ago","other":"{0} secs. ago"}}},"en-SG":{"quarter-short":{"0":"this qtr","1":"next qtr","future":{"one":"in {0} qtr","other":"in {0} qtrs"},"past":{"one":"{0} qtr ago","other":"{0} qtrs ago"},"-1":"last qtr"},"quarter-narrow":{"0":"this qtr","1":"next qtr","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr"},"month-short":{"0":"this mth","1":"next mth","future":{"one":"in {0} mth","other":"in {0} mth"},"past":{"one":"{0} mth ago","other":"{0} mth ago"},"-1":"last mth"}},"en":{"nu":["latn"],"year":{"0":"this year","1":"next year","future":{"one":"in {0} year","other":"in {0} years"},"past":{"one":"{0} year ago","other":"{0} years ago"},"-1":"last year"},"year-short":{"0":"this yr.","1":"next yr.","future":{"one":"in {0} yr.","other":"in {0} yr."},"past":{"one":"{0} yr. ago","other":"{0} yr. ago"},"-1":"last yr."},"year-narrow":{"0":"this yr.","1":"next yr.","future":{"one":"in {0} yr.","other":"in {0} yr."},"past":{"one":"{0} yr. ago","other":"{0} yr. ago"},"-1":"last yr."},"quarter":{"0":"this quarter","1":"next quarter","future":{"one":"in {0} quarter","other":"in {0} quarters"},"past":{"one":"{0} quarter ago","other":"{0} quarters ago"},"-1":"last quarter"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"month":{"0":"this month","1":"next month","future":{"one":"in {0} month","other":"in {0} months"},"past":{"one":"{0} month ago","other":"{0} months ago"},"-1":"last month"},"month-short":{"0":"this mo.","1":"next mo.","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo."},"month-narrow":{"0":"this mo.","1":"next mo.","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo."},"week":{"0":"this week","1":"next week","future":{"one":"in {0} week","other":"in {0} weeks"},"past":{"one":"{0} week ago","other":"{0} weeks ago"},"-1":"last week"},"week-short":{"0":"this wk.","1":"next wk.","future":{"one":"in {0} wk.","other":"in {0} wk."},"past":{"one":"{0} wk. ago","other":"{0} wk. ago"},"-1":"last wk."},"week-narrow":{"0":"this wk.","1":"next wk.","future":{"one":"in {0} wk.","other":"in {0} wk."},"past":{"one":"{0} wk. ago","other":"{0} wk. ago"},"-1":"last wk."},"day":{"0":"today","1":"tomorrow","future":{"one":"in {0} day","other":"in {0} days"},"past":{"one":"{0} day ago","other":"{0} days ago"},"-1":"yesterday"},"day-short":{"0":"today","1":"tomorrow","future":{"one":"in {0} day","other":"in {0} days"},"past":{"one":"{0} day ago","other":"{0} days ago"},"-1":"yesterday"},"day-narrow":{"0":"today","1":"tomorrow","future":{"one":"in {0} day","other":"in {0} days"},"past":{"one":"{0} day ago","other":"{0} days ago"},"-1":"yesterday"},"hour":{"0":"this hour","future":{"one":"in {0} hour","other":"in {0} hours"},"past":{"one":"{0} hour ago","other":"{0} hours ago"}},"hour-short":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hr."},"past":{"one":"{0} hr. ago","other":"{0} hr. ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hr."},"past":{"one":"{0} hr. ago","other":"{0} hr. ago"}},"minute":{"0":"this minute","future":{"one":"in {0} minute","other":"in {0} minutes"},"past":{"one":"{0} minute ago","other":"{0} minutes ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} min."},"past":{"one":"{0} min. ago","other":"{0} min. ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} min."},"past":{"one":"{0} min. ago","other":"{0} min. ago"}},"second":{"0":"now","future":{"one":"in {0} second","other":"in {0} seconds"},"past":{"one":"{0} second ago","other":"{0} seconds ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} sec."},"past":{"one":"{0} sec. ago","other":"{0} sec. ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} sec."},"past":{"one":"{0} sec. ago","other":"{0} sec. ago"}}}},"availableLocales":["en-001","en-150","en-AE","en-AG","en-AI","en-AS","en-AT","en-AU","en-BB","en-BE","en-BI","en-BM","en-BS","en-BW","en-BZ","en-CA","en-CC","en-CH","en-CK","en-CM","en-CX","en-CY","en-DE","en-DG","en-DK","en-DM","en-ER","en-FI","en-FJ","en-FK","en-FM","en-GB","en-GD","en-GG","en-GH","en-GI","en-GM","en-GU","en-GY","en-HK","en-IE","en-IL","en-IM","en-IN","en-IO","en-JE","en-JM","en-KE","en-KI","en-KN","en-KY","en-LC","en-LR","en-LS","en-MG","en-MH","en-MO","en-MP","en-MS","en-MT","en-MU","en-MW","en-MY","en-NA","en-NF","en-NG","en-NL","en-NR","en-NU","en-NZ","en-PG","en-PH","en-PK","en-PN","en-PR","en-PW","en-RW","en-SB","en-SC","en-SD","en-SE","en-SG","en-SH","en-SI","en-SL","en-SS","en-SX","en-SZ","en-TC","en-TK","en-TO","en-TT","en-TV","en-TZ","en-UG","en-UM","en-US-POSIX","en-US","en-VC","en-VG","en-VI","en-VU","en-WS","en-ZA","en-ZM","en-ZW","en"],"aliases":{},"parentLocales":{"en-150":"en-001","en-AG":"en-001","en-AI":"en-001","en-AU":"en-001","en-BB":"en-001","en-BM":"en-001","en-BS":"en-001","en-BW":"en-001","en-BZ":"en-001","en-CA":"en-001","en-CC":"en-001","en-CK":"en-001","en-CM":"en-001","en-CX":"en-001","en-CY":"en-001","en-DG":"en-001","en-DM":"en-001","en-ER":"en-001","en-FJ":"en-001","en-FK":"en-001","en-FM":"en-001","en-GB":"en-001","en-GD":"en-001","en-GG":"en-001","en-GH":"en-001","en-GI":"en-001","en-GM":"en-001","en-GY":"en-001","en-HK":"en-001","en-IE":"en-001","en-IL":"en-001","en-IM":"en-001","en-IN":"en-001","en-IO":"en-001","en-JE":"en-001","en-JM":"en-001","en-KE":"en-001","en-KI":"en-001","en-KN":"en-001","en-KY":"en-001","en-LC":"en-001","en-LR":"en-001","en-LS":"en-001","en-MG":"en-001","en-MO":"en-001","en-MS":"en-001","en-MT":"en-001","en-MU":"en-001","en-MW":"en-001","en-MY":"en-001","en-NA":"en-001","en-NF":"en-001","en-NG":"en-001","en-NR":"en-001","en-NU":"en-001","en-NZ":"en-001","en-PG":"en-001","en-PH":"en-001","en-PK":"en-001","en-PN":"en-001","en-PW":"en-001","en-RW":"en-001","en-SB":"en-001","en-SC":"en-001","en-SD":"en-001","en-SG":"en-001","en-SH":"en-001","en-SL":"en-001","en-SS":"en-001","en-SX":"en-001","en-SZ":"en-001","en-TC":"en-001","en-TK":"en-001","en-TO":"en-001","en-TT":"en-001","en-TV":"en-001","en-TZ":"en-001","en-UG":"en-001","en-VC":"en-001","en-VG":"en-001","en-VU":"en-001","en-WS":"en-001","en-ZA":"en-001","en-ZM":"en-001","en-ZW":"en-001","en-AT":"en-150","en-BE":"en-150","en-CH":"en-150","en-DE":"en-150","en-DK":"en-150","en-FI":"en-150","en-NL":"en-150","en-SE":"en-150","en-SI":"en-150"}}')},7684:function(n){"use strict";n.exports=JSON.parse('{"data":{"es-419":{"week-short":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. pas."},"week-narrow":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. pas."}},"es-AR":{"day-short":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} días","other":"dentro de {0} días"},"past":{"one":"hace {0} días","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-narrow":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} días","other":"dentro de {0} días"},"past":{"one":"hace {0} días","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"second-short":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}},"second-narrow":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}}},"es-MX":{"year":{"0":"este año","1":"el año próximo","future":{"one":"dentro de {0} año","other":"dentro de {0} años"},"past":{"one":"hace {0} año","other":"hace {0} años"},"-1":"el año pasado"},"year-short":{"0":"este año","1":"el próximo año","future":{"one":"en {0} a","other":"en {0} a"},"past":{"one":"hace {0} a","other":"hace {0} a"},"-1":"el año pasado"},"year-narrow":{"0":"este año","1":"el próximo año","future":{"one":"en {0} a","other":"en {0} a"},"past":{"one":"-{0} a","other":"-{0} a"},"-1":"el año pasado"},"quarter":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"en {0} trimestre","other":"dentro de {0} trimetres"},"past":{"one":"hace {0} trimestre","other":"hace {0} trimestres"},"-1":"el trimestre pasado"},"quarter-short":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"en {0} trim.","other":"en {0} trim"},"past":{"one":"hace {0} trim.","other":"hace {0} trim."},"-1":"el trimestre pasado"},"quarter-narrow":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"en {0} trim.","other":"en {0} trim."},"past":{"one":"-{0} T","other":"-{0} T"},"-1":"el trimestre pasado"},"month":{"0":"este mes","1":"el mes próximo","future":{"one":"en {0} mes","other":"en {0} meses"},"past":{"one":"hace {0} mes","other":"hace {0} meses"},"-1":"el mes pasado"},"month-short":{"0":"este mes","1":"el próximo mes","future":{"one":"en {0} m","other":"en {0} m"},"past":{"one":"hace {0} m","other":"hace {0} m"},"-1":"el mes pasado"},"month-narrow":{"0":"este mes","1":"el próximo mes","future":{"one":"+{0} m","other":"+{0} m"},"past":{"one":"-{0} m","other":"-{0} m"},"-1":"el mes pasado"},"week":{"0":"esta semana","1":"la semana próxima","future":{"one":"dentro de {0} semana","other":"dentro de {0} semanas"},"past":{"one":"hace {0} semana","other":"hace {0} semanas"},"-1":"la semana pasada"},"week-short":{"0":"esta sem.","1":"próx. sem.","future":{"one":"en {0} sem.","other":"en {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. pas."},"day-short":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"en {0} día","other":"en {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-narrow":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"+{0} día","other":"en {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"hour-short":{"0":"esta hora","future":{"one":"en {0} h","other":"en {0} n"},"past":{"one":"hace {0} h","other":"hace {0} h"}},"minute-short":{"0":"este minuto","future":{"one":"en {0} min","other":"en {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"minute-narrow":{"0":"este minuto","future":{"one":"en {0} min","other":"en {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"second-short":{"0":"ahora","future":{"one":"en {0} s","other":"en {0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}},"second-narrow":{"0":"ahora","future":{"one":"+{0} s","other":"+{0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}}},"es-PY":{"second-short":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}},"second-narrow":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}}},"es-SV":{"day":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"antier","-1":"ayer"}},"es-US":{"year":{"0":"este año","1":"el año próximo","future":{"one":"dentro de {0} año","other":"dentro de {0} años"},"past":{"one":"hace {0} año","other":"hace {0} años"},"-1":"el año pasado"},"quarter":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trimetre","other":"dentro de {0} trimetres"},"past":{"one":"hace {0} trimestre","other":"hace {0} trimestres"},"-1":"el trimestre pasado"},"month":{"0":"este mes","1":"el mes próximo","future":{"one":"dentro de {0} mes","other":"dentro de {0} meses"},"past":{"one":"hace {0} mes","other":"hace {0} meses"},"-1":"el mes pasado"},"week":{"0":"esta semana","1":"la semana próxima","future":{"one":"dentro de {0} semana","other":"dentro de {0} semanas"},"past":{"one":"hace {0} semana","other":"hace {0} semanas"},"-1":"la semana pasada"}},"es":{"nu":["latn"],"year":{"0":"este año","1":"el próximo año","future":{"one":"dentro de {0} año","other":"dentro de {0} años"},"past":{"one":"hace {0} año","other":"hace {0} años"},"-1":"el año pasado"},"year-short":{"0":"este año","1":"el próximo año","future":{"one":"dentro de {0} a","other":"dentro de {0} a"},"past":{"one":"hace {0} a","other":"hace {0} a"},"-1":"el año pasado"},"year-narrow":{"0":"este año","1":"el próximo año","future":{"one":"dentro de {0} a","other":"dentro de {0} a"},"past":{"one":"hace {0} a","other":"hace {0} a"},"-1":"el año pasado"},"quarter":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trimestre","other":"dentro de {0} trimestres"},"past":{"one":"hace {0} trimestre","other":"hace {0} trimestres"},"-1":"el trimestre pasado"},"quarter-short":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trim.","other":"dentro de {0} trim."},"past":{"one":"hace {0} trim.","other":"hace {0} trim."},"-1":"el trimestre pasado"},"quarter-narrow":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trim.","other":"dentro de {0} trim."},"past":{"one":"hace {0} trim.","other":"hace {0} trim."},"-1":"el trimestre pasado"},"month":{"0":"este mes","1":"el próximo mes","future":{"one":"dentro de {0} mes","other":"dentro de {0} meses"},"past":{"one":"hace {0} mes","other":"hace {0} meses"},"-1":"el mes pasado"},"month-short":{"0":"este mes","1":"el próximo mes","future":{"one":"dentro de {0} m","other":"dentro de {0} m"},"past":{"one":"hace {0} m","other":"hace {0} m"},"-1":"el mes pasado"},"month-narrow":{"0":"este mes","1":"el próximo mes","future":{"one":"dentro de {0} m","other":"dentro de {0} m"},"past":{"one":"hace {0} m","other":"hace {0} m"},"-1":"el mes pasado"},"week":{"0":"esta semana","1":"la próxima semana","future":{"one":"dentro de {0} semana","other":"dentro de {0} semanas"},"past":{"one":"hace {0} semana","other":"hace {0} semanas"},"-1":"la semana pasada"},"week-short":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. ant."},"week-narrow":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. ant."},"day":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-short":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-narrow":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"hour":{"0":"esta hora","future":{"one":"dentro de {0} hora","other":"dentro de {0} horas"},"past":{"one":"hace {0} hora","other":"hace {0} horas"}},"hour-short":{"0":"esta hora","future":{"one":"dentro de {0} h","other":"dentro de {0} h"},"past":{"one":"hace {0} h","other":"hace {0} h"}},"hour-narrow":{"0":"esta hora","future":{"one":"dentro de {0} h","other":"dentro de {0} h"},"past":{"one":"hace {0} h","other":"hace {0} h"}},"minute":{"0":"este minuto","future":{"one":"dentro de {0} minuto","other":"dentro de {0} minutos"},"past":{"one":"hace {0} minuto","other":"hace {0} minutos"}},"minute-short":{"0":"este minuto","future":{"one":"dentro de {0} min","other":"dentro de {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"minute-narrow":{"0":"este minuto","future":{"one":"dentro de {0} min","other":"dentro de {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"second":{"0":"ahora","future":{"one":"dentro de {0} segundo","other":"dentro de {0} segundos"},"past":{"one":"hace {0} segundo","other":"hace {0} segundos"}},"second-short":{"0":"ahora","future":{"one":"dentro de {0} s","other":"dentro de {0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}},"second-narrow":{"0":"ahora","future":{"one":"dentro de {0} s","other":"dentro de {0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}}}},"availableLocales":["es-419","es-AR","es-BO","es-BR","es-BZ","es-CL","es-CO","es-CR","es-CU","es-DO","es-EA","es-EC","es-GQ","es-GT","es-HN","es-IC","es-MX","es-NI","es-PA","es-PE","es-PH","es-PR","es-PY","es-SV","es-US","es-UY","es-VE","es"],"aliases":{},"parentLocales":{"es-AR":"es-419","es-BO":"es-419","es-BR":"es-419","es-BZ":"es-419","es-CL":"es-419","es-CO":"es-419","es-CR":"es-419","es-CU":"es-419","es-DO":"es-419","es-EC":"es-419","es-GT":"es-419","es-HN":"es-419","es-MX":"es-419","es-NI":"es-419","es-PA":"es-419","es-PE":"es-419","es-PR":"es-419","es-PY":"es-419","es-SV":"es-419","es-US":"es-419","es-UY":"es-419","es-VE":"es-419"}}')},8385:function(n){"use strict";n.exports=JSON.parse('{"data":{"ses":{"nu":["latn"],"year":{"0":"this year","1":"next year","future":{"other":"+{0} y"},"past":{"other":"-{0} y"},"-1":"last year"},"year-short":{"0":"this year","1":"next year","future":{"other":"+{0} y"},"past":{"other":"-{0} y"},"-1":"last year"},"year-narrow":{"0":"this year","1":"next year","future":{"other":"+{0} y"},"past":{"other":"-{0} y"},"-1":"last year"},"quarter":{"0":"this quarter","1":"next quarter","future":{"other":"+{0} Q"},"past":{"other":"-{0} Q"},"-1":"last quarter"},"quarter-short":{"0":"this quarter","1":"next quarter","future":{"other":"+{0} Q"},"past":{"other":"-{0} Q"},"-1":"last quarter"},"quarter-narrow":{"0":"this quarter","1":"next quarter","future":{"other":"+{0} Q"},"past":{"other":"-{0} Q"},"-1":"last quarter"},"month":{"0":"this month","1":"next month","future":{"other":"+{0} m"},"past":{"other":"-{0} m"},"-1":"last month"},"month-short":{"0":"this month","1":"next month","future":{"other":"+{0} m"},"past":{"other":"-{0} m"},"-1":"last month"},"month-narrow":{"0":"this month","1":"next month","future":{"other":"+{0} m"},"past":{"other":"-{0} m"},"-1":"last month"},"week":{"0":"this week","1":"next week","future":{"other":"+{0} w"},"past":{"other":"-{0} w"},"-1":"last week"},"week-short":{"0":"this week","1":"next week","future":{"other":"+{0} w"},"past":{"other":"-{0} w"},"-1":"last week"},"week-narrow":{"0":"this week","1":"next week","future":{"other":"+{0} w"},"past":{"other":"-{0} w"},"-1":"last week"},"day":{"0":"Hõo","1":"Suba","future":{"other":"+{0} d"},"past":{"other":"-{0} d"},"-1":"Bi"},"day-short":{"0":"Hõo","1":"Suba","future":{"other":"+{0} d"},"past":{"other":"-{0} d"},"-1":"Bi"},"day-narrow":{"0":"Hõo","1":"Suba","future":{"other":"+{0} d"},"past":{"other":"-{0} d"},"-1":"Bi"},"hour":{"0":"this hour","future":{"other":"+{0} h"},"past":{"other":"-{0} h"}},"hour-short":{"0":"this hour","future":{"other":"+{0} h"},"past":{"other":"-{0} h"}},"hour-narrow":{"0":"this hour","future":{"other":"+{0} h"},"past":{"other":"-{0} h"}},"minute":{"0":"this minute","future":{"other":"+{0} min"},"past":{"other":"-{0} min"}},"minute-short":{"0":"this minute","future":{"other":"+{0} min"},"past":{"other":"-{0} min"}},"minute-narrow":{"0":"this minute","future":{"other":"+{0} min"},"past":{"other":"-{0} min"}},"second":{"0":"now","future":{"other":"+{0} s"},"past":{"other":"-{0} s"}},"second-short":{"0":"now","future":{"other":"+{0} s"},"past":{"other":"-{0} s"}},"second-narrow":{"0":"now","future":{"other":"+{0} s"},"past":{"other":"-{0} s"}}}},"availableLocales":["ses"],"aliases":{},"parentLocales":{}}')},1666:function(n,I,g){var t={"./en":8079,"./en.js":8079,"./en.json":7991,"./es":4033,"./es.js":4033,"./es.json":7684,"./ses":9584,"./ses.js":9584,"./ses.json":8385};function e(n){var I=B(n);return g(I)}function B(n){if(!g.o(t,n)){var I=new Error("Cannot find module '"+n+"'");throw I.code="MODULE_NOT_FOUND",I}return t[n]}e.keys=function(){return Object.keys(t)},e.resolve=B,n.exports=e,e.id=1666},3012:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar intl_utils_1 = __webpack_require__(2650);\n\nfunction validateInstance(instance, method) {\n if (!(instance instanceof PluralRules)) {\n throw new TypeError(\"Method Intl.PluralRules.prototype.\" + method + \" called on incompatible receiver \" + String(instance));\n }\n}\n/**\n * https://tc39.es/ecma402/#sec-torawprecision\n * @param x\n * @param minPrecision\n * @param maxPrecision\n */\n\n\nfunction toRawPrecision(x, minPrecision, maxPrecision) {\n var m = x.toPrecision(maxPrecision);\n\n if (~m.indexOf('.') && maxPrecision > minPrecision) {\n var cut = maxPrecision - minPrecision;\n\n while (cut > 0 && m[m.length - 1] === '0') {\n m = m.slice(0, m.length - 1);\n cut--;\n }\n\n if (m[m.length - 1] === '.') {\n return m.slice(0, m.length - 1);\n }\n }\n\n return m;\n}\n/**\n * https://tc39.es/ecma402/#sec-torawfixed\n * @param x\n * @param minInteger\n * @param minFraction\n * @param maxFraction\n */\n\n\nfunction toRawFixed(x, minInteger, minFraction, maxFraction) {\n var cut = maxFraction - minFraction;\n var m = x.toFixed(maxFraction);\n\n while (cut > 0 && m[m.length - 1] === '0') {\n m = m.slice(0, m.length - 1);\n cut--;\n }\n\n if (m[m.length - 1] === '.') {\n m = m.slice(0, m.length - 1);\n }\n\n var int = m.split('.')[0].length;\n\n if (int < minInteger) {\n var z = '';\n\n for (; z.length < minInteger - int; z += '0') {\n ;\n }\n\n m = z + m;\n }\n\n return m;\n}\n\nfunction formatNumericToString(internalSlotMap, pl, x) {\n var minimumSignificantDigits = intl_utils_1.getInternalSlot(internalSlotMap, pl, 'minimumSignificantDigits');\n var maximumSignificantDigits = intl_utils_1.getInternalSlot(internalSlotMap, pl, 'maximumSignificantDigits');\n\n if (minimumSignificantDigits !== undefined && maximumSignificantDigits !== undefined) {\n return toRawPrecision(x, minimumSignificantDigits, maximumSignificantDigits);\n }\n\n return toRawFixed(x, intl_utils_1.getInternalSlot(internalSlotMap, pl, 'minimumIntegerDigits'), intl_utils_1.getInternalSlot(internalSlotMap, pl, 'minimumFractionDigits'), intl_utils_1.getInternalSlot(internalSlotMap, pl, 'maximumFractionDigits'));\n}\n\nvar PluralRules =\n/** @class */\nfunction () {\n function PluralRules(locales, options) {\n // test262/test/intl402/RelativeTimeFormat/constructor/constructor/newtarget-undefined.js\n // Cannot use `new.target` bc of IE11 & TS transpiles it to something else\n var newTarget = this && this instanceof PluralRules ? this.constructor : void 0;\n\n if (!newTarget) {\n throw new TypeError(\"Intl.PluralRules must be called with 'new'\");\n }\n\n var requestedLocales = intl_utils_1.getCanonicalLocales(locales);\n var opt = Object.create(null);\n var opts = options === undefined ? Object.create(null) : intl_utils_1.toObject(options);\n intl_utils_1.setInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'initializedPluralRules', true);\n var matcher = intl_utils_1.getOption(opts, 'localeMatcher', 'string', ['best fit', 'lookup'], 'best fit');\n opt.localeMatcher = matcher;\n intl_utils_1.setInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'type', intl_utils_1.getOption(opts, 'type', 'string', ['cardinal', 'ordinal'], 'cardinal'));\n intl_utils_1.setNumberFormatDigitOptions(PluralRules.__INTERNAL_SLOT_MAP__, this, opts, 0, 3);\n var r = intl_utils_1.createResolveLocale(PluralRules.getDefaultLocale)(PluralRules.availableLocales, requestedLocales, opt, PluralRules.relevantExtensionKeys, PluralRules.localeData);\n intl_utils_1.setInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'locale', r.locale);\n }\n\n PluralRules.prototype.resolvedOptions = function () {\n var _this = this;\n\n validateInstance(this, 'resolvedOptions');\n var opts = Object.create(null);\n opts.locale = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'locale');\n opts.type = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'type');\n ['minimumIntegerDigits', 'minimumFractionDigits', 'maximumFractionDigits', 'minimumSignificantDigits', 'maximumSignificantDigits'].forEach(function (field) {\n var val = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, _this, field);\n\n if (val !== undefined) {\n opts[field] = val;\n }\n });\n opts.pluralCategories = __spreadArrays(PluralRules.localeData[opts.locale].categories[opts.type]);\n return opts;\n };\n\n PluralRules.prototype.select = function (val) {\n validateInstance(this, 'select');\n var locale = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'locale');\n var type = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'type');\n return PluralRules.localeData[locale].fn(formatNumericToString(PluralRules.__INTERNAL_SLOT_MAP__, this, Math.abs(Number(val))), type == 'ordinal');\n };\n\n PluralRules.prototype.toString = function () {\n return '[object Intl.PluralRules]';\n };\n\n PluralRules.supportedLocalesOf = function (locales, options) {\n return intl_utils_1.supportedLocales(PluralRules.availableLocales, intl_utils_1.getCanonicalLocales(locales), options);\n };\n\n PluralRules.__addLocaleData = function () {\n var data = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n\n var _loop_1 = function _loop_1(datum) {\n var availableLocales = Object.keys(__spreadArrays(datum.availableLocales, Object.keys(datum.aliases), Object.keys(datum.parentLocales)).reduce(function (all, k) {\n all[k] = true;\n return all;\n }, {}));\n availableLocales.forEach(function (locale) {\n try {\n PluralRules.localeData[locale] = intl_utils_1.unpackData(locale, datum);\n } catch (e) {\n if (intl_utils_1.isMissingLocaleDataError(e)) {\n // If we just don't have data for certain locale, that's ok\n return;\n }\n\n throw e;\n }\n });\n };\n\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var datum = data_1[_a];\n\n _loop_1(datum);\n }\n\n PluralRules.availableLocales = Object.keys(PluralRules.localeData);\n\n if (!PluralRules.__defaultLocale) {\n PluralRules.__defaultLocale = PluralRules.availableLocales[0];\n }\n };\n\n PluralRules.getDefaultLocale = function () {\n return PluralRules.__defaultLocale;\n };\n\n PluralRules.localeData = {};\n PluralRules.availableLocales = [];\n PluralRules.__defaultLocale = 'en';\n PluralRules.relevantExtensionKeys = [];\n PluralRules.polyfilled = true;\n PluralRules.__INTERNAL_SLOT_MAP__ = new WeakMap();\n return PluralRules;\n}();\n\nexports.PluralRules = PluralRules;\n\ntry {\n // https://github.com/tc39/test262/blob/master/test/intl402/PluralRules/length.js\n Object.defineProperty(PluralRules, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true\n }); // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/length.js\n\n Object.defineProperty(PluralRules.prototype.constructor, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true\n }); // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/supportedLocalesOf/length.js\n\n Object.defineProperty(PluralRules.supportedLocalesOf, 'length', {\n value: 1,\n writable: false,\n enumerable: false,\n configurable: true\n });\n} catch (ex) {// Meta fixes for test262\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2NvcmUuanM/NjIxMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7O0FBRUEsc0NBQXNDLFFBQVE7QUFDOUMsb0RBQW9ELFFBQVE7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDOztBQUVGLG1CQUFtQixtQkFBTyxDQUFDLElBQXNCOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsVUFBVSw2QkFBNkI7QUFDdkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQUk7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxtQ0FBbUMsb0JBQW9CO0FBQ3ZEOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLGFBQWE7QUFDZCIsImZpbGUiOiIzMDEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX3NwcmVhZEFycmF5cyA9IHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cyB8fCBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuICAgIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgfVxuXG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKykge1xuICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKSB7XG4gICAgICByW2tdID0gYVtqXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcjtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBpbnRsX3V0aWxzXzEgPSByZXF1aXJlKFwiQGZvcm1hdGpzL2ludGwtdXRpbHNcIik7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5zdGFuY2UoaW5zdGFuY2UsIG1ldGhvZCkge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIFBsdXJhbFJ1bGVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNZXRob2QgSW50bC5QbHVyYWxSdWxlcy5wcm90b3R5cGUuXCIgKyBtZXRob2QgKyBcIiBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIFwiICsgU3RyaW5nKGluc3RhbmNlKSk7XG4gIH1cbn1cbi8qKlxuICogaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy10b3Jhd3ByZWNpc2lvblxuICogQHBhcmFtIHhcbiAqIEBwYXJhbSBtaW5QcmVjaXNpb25cbiAqIEBwYXJhbSBtYXhQcmVjaXNpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvUmF3UHJlY2lzaW9uKHgsIG1pblByZWNpc2lvbiwgbWF4UHJlY2lzaW9uKSB7XG4gIHZhciBtID0geC50b1ByZWNpc2lvbihtYXhQcmVjaXNpb24pO1xuXG4gIGlmICh+bS5pbmRleE9mKCcuJykgJiYgbWF4UHJlY2lzaW9uID4gbWluUHJlY2lzaW9uKSB7XG4gICAgdmFyIGN1dCA9IG1heFByZWNpc2lvbiAtIG1pblByZWNpc2lvbjtcblxuICAgIHdoaWxlIChjdXQgPiAwICYmIG1bbS5sZW5ndGggLSAxXSA9PT0gJzAnKSB7XG4gICAgICBtID0gbS5zbGljZSgwLCBtLmxlbmd0aCAtIDEpO1xuICAgICAgY3V0LS07XG4gICAgfVxuXG4gICAgaWYgKG1bbS5sZW5ndGggLSAxXSA9PT0gJy4nKSB7XG4gICAgICByZXR1cm4gbS5zbGljZSgwLCBtLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLXRvcmF3Zml4ZWRcbiAqIEBwYXJhbSB4XG4gKiBAcGFyYW0gbWluSW50ZWdlclxuICogQHBhcmFtIG1pbkZyYWN0aW9uXG4gKiBAcGFyYW0gbWF4RnJhY3Rpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvUmF3Rml4ZWQoeCwgbWluSW50ZWdlciwgbWluRnJhY3Rpb24sIG1heEZyYWN0aW9uKSB7XG4gIHZhciBjdXQgPSBtYXhGcmFjdGlvbiAtIG1pbkZyYWN0aW9uO1xuICB2YXIgbSA9IHgudG9GaXhlZChtYXhGcmFjdGlvbik7XG5cbiAgd2hpbGUgKGN1dCA+IDAgJiYgbVttLmxlbmd0aCAtIDFdID09PSAnMCcpIHtcbiAgICBtID0gbS5zbGljZSgwLCBtLmxlbmd0aCAtIDEpO1xuICAgIGN1dC0tO1xuICB9XG5cbiAgaWYgKG1bbS5sZW5ndGggLSAxXSA9PT0gJy4nKSB7XG4gICAgbSA9IG0uc2xpY2UoMCwgbS5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHZhciBpbnQgPSBtLnNwbGl0KCcuJylbMF0ubGVuZ3RoO1xuXG4gIGlmIChpbnQgPCBtaW5JbnRlZ2VyKSB7XG4gICAgdmFyIHogPSAnJztcblxuICAgIGZvciAoOyB6Lmxlbmd0aCA8IG1pbkludGVnZXIgLSBpbnQ7IHogKz0gJzAnKSB7XG4gICAgICA7XG4gICAgfVxuXG4gICAgbSA9IHogKyBtO1xuICB9XG5cbiAgcmV0dXJuIG07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE51bWVyaWNUb1N0cmluZyhpbnRlcm5hbFNsb3RNYXAsIHBsLCB4KSB7XG4gIHZhciBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcGwsICdtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMnKTtcbiAgdmFyIG1heGltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBwbCwgJ21heGltdW1TaWduaWZpY2FudERpZ2l0cycpO1xuXG4gIGlmIChtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgIT09IHVuZGVmaW5lZCAmJiBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0b1Jhd1ByZWNpc2lvbih4LCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMsIG1heGltdW1TaWduaWZpY2FudERpZ2l0cyk7XG4gIH1cblxuICByZXR1cm4gdG9SYXdGaXhlZCh4LCBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcGwsICdtaW5pbXVtSW50ZWdlckRpZ2l0cycpLCBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcGwsICdtaW5pbXVtRnJhY3Rpb25EaWdpdHMnKSwgaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIHBsLCAnbWF4aW11bUZyYWN0aW9uRGlnaXRzJykpO1xufVxuXG52YXIgUGx1cmFsUnVsZXMgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQbHVyYWxSdWxlcyhsb2NhbGVzLCBvcHRpb25zKSB7XG4gICAgLy8gdGVzdDI2Mi90ZXN0L2ludGw0MDIvUmVsYXRpdmVUaW1lRm9ybWF0L2NvbnN0cnVjdG9yL2NvbnN0cnVjdG9yL25ld3RhcmdldC11bmRlZmluZWQuanNcbiAgICAvLyBDYW5ub3QgdXNlIGBuZXcudGFyZ2V0YCBiYyBvZiBJRTExICYgVFMgdHJhbnNwaWxlcyBpdCB0byBzb21ldGhpbmcgZWxzZVxuICAgIHZhciBuZXdUYXJnZXQgPSB0aGlzICYmIHRoaXMgaW5zdGFuY2VvZiBQbHVyYWxSdWxlcyA/IHRoaXMuY29uc3RydWN0b3IgOiB2b2lkIDA7XG5cbiAgICBpZiAoIW5ld1RhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludGwuUGx1cmFsUnVsZXMgbXVzdCBiZSBjYWxsZWQgd2l0aCAnbmV3J1wiKTtcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdGVkTG9jYWxlcyA9IGludGxfdXRpbHNfMS5nZXRDYW5vbmljYWxMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHZhciBvcHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBvcHRzID0gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IGludGxfdXRpbHNfMS50b09iamVjdChvcHRpb25zKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0SW50ZXJuYWxTbG90KFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ2luaXRpYWxpemVkUGx1cmFsUnVsZXMnLCB0cnVlKTtcbiAgICB2YXIgbWF0Y2hlciA9IGludGxfdXRpbHNfMS5nZXRPcHRpb24ob3B0cywgJ2xvY2FsZU1hdGNoZXInLCAnc3RyaW5nJywgWydiZXN0IGZpdCcsICdsb29rdXAnXSwgJ2Jlc3QgZml0Jyk7XG4gICAgb3B0LmxvY2FsZU1hdGNoZXIgPSBtYXRjaGVyO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUGx1cmFsUnVsZXMuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAndHlwZScsIGludGxfdXRpbHNfMS5nZXRPcHRpb24ob3B0cywgJ3R5cGUnLCAnc3RyaW5nJywgWydjYXJkaW5hbCcsICdvcmRpbmFsJ10sICdjYXJkaW5hbCcpKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgb3B0cywgMCwgMyk7XG4gICAgdmFyIHIgPSBpbnRsX3V0aWxzXzEuY3JlYXRlUmVzb2x2ZUxvY2FsZShQbHVyYWxSdWxlcy5nZXREZWZhdWx0TG9jYWxlKShQbHVyYWxSdWxlcy5hdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHQsIFBsdXJhbFJ1bGVzLnJlbGV2YW50RXh0ZW5zaW9uS2V5cywgUGx1cmFsUnVsZXMubG9jYWxlRGF0YSk7XG4gICAgaW50bF91dGlsc18xLnNldEludGVybmFsU2xvdChQbHVyYWxSdWxlcy5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdsb2NhbGUnLCByLmxvY2FsZSk7XG4gIH1cblxuICBQbHVyYWxSdWxlcy5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YWxpZGF0ZUluc3RhbmNlKHRoaXMsICdyZXNvbHZlZE9wdGlvbnMnKTtcbiAgICB2YXIgb3B0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgb3B0cy5sb2NhbGUgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ2xvY2FsZScpO1xuICAgIG9wdHMudHlwZSA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoUGx1cmFsUnVsZXMuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAndHlwZScpO1xuICAgIFsnbWluaW11bUludGVnZXJEaWdpdHMnLCAnbWluaW11bUZyYWN0aW9uRGlnaXRzJywgJ21heGltdW1GcmFjdGlvbkRpZ2l0cycsICdtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMnLCAnbWF4aW11bVNpZ25pZmljYW50RGlnaXRzJ10uZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgIHZhciB2YWwgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgX3RoaXMsIGZpZWxkKTtcblxuICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wdHNbZmllbGRdID0gdmFsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG9wdHMucGx1cmFsQ2F0ZWdvcmllcyA9IF9fc3ByZWFkQXJyYXlzKFBsdXJhbFJ1bGVzLmxvY2FsZURhdGFbb3B0cy5sb2NhbGVdLmNhdGVnb3JpZXNbb3B0cy50eXBlXSk7XG4gICAgcmV0dXJuIG9wdHM7XG4gIH07XG5cbiAgUGx1cmFsUnVsZXMucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YWxpZGF0ZUluc3RhbmNlKHRoaXMsICdzZWxlY3QnKTtcbiAgICB2YXIgbG9jYWxlID0gaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChQbHVyYWxSdWxlcy5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdsb2NhbGUnKTtcbiAgICB2YXIgdHlwZSA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoUGx1cmFsUnVsZXMuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAndHlwZScpO1xuICAgIHJldHVybiBQbHVyYWxSdWxlcy5sb2NhbGVEYXRhW2xvY2FsZV0uZm4oZm9ybWF0TnVtZXJpY1RvU3RyaW5nKFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgTWF0aC5hYnMoTnVtYmVyKHZhbCkpKSwgdHlwZSA9PSAnb3JkaW5hbCcpO1xuICB9O1xuXG4gIFBsdXJhbFJ1bGVzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgSW50bC5QbHVyYWxSdWxlc10nO1xuICB9O1xuXG4gIFBsdXJhbFJ1bGVzLnN1cHBvcnRlZExvY2FsZXNPZiA9IGZ1bmN0aW9uIChsb2NhbGVzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGludGxfdXRpbHNfMS5zdXBwb3J0ZWRMb2NhbGVzKFBsdXJhbFJ1bGVzLmF2YWlsYWJsZUxvY2FsZXMsIGludGxfdXRpbHNfMS5nZXRDYW5vbmljYWxMb2NhbGVzKGxvY2FsZXMpLCBvcHRpb25zKTtcbiAgfTtcblxuICBQbHVyYWxSdWxlcy5fX2FkZExvY2FsZURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRhdGEgPSBbXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICBkYXRhW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuXG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiBfbG9vcF8xKGRhdHVtKSB7XG4gICAgICB2YXIgYXZhaWxhYmxlTG9jYWxlcyA9IE9iamVjdC5rZXlzKF9fc3ByZWFkQXJyYXlzKGRhdHVtLmF2YWlsYWJsZUxvY2FsZXMsIE9iamVjdC5rZXlzKGRhdHVtLmFsaWFzZXMpLCBPYmplY3Qua2V5cyhkYXR1bS5wYXJlbnRMb2NhbGVzKSkucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGspIHtcbiAgICAgICAgYWxsW2tdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGFsbDtcbiAgICAgIH0sIHt9KSk7XG4gICAgICBhdmFpbGFibGVMb2NhbGVzLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFBsdXJhbFJ1bGVzLmxvY2FsZURhdGFbbG9jYWxlXSA9IGludGxfdXRpbHNfMS51bnBhY2tEYXRhKGxvY2FsZSwgZGF0dW0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGludGxfdXRpbHNfMS5pc01pc3NpbmdMb2NhbGVEYXRhRXJyb3IoZSkpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGp1c3QgZG9uJ3QgaGF2ZSBkYXRhIGZvciBjZXJ0YWluIGxvY2FsZSwgdGhhdCdzIG9rXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9hID0gMCwgZGF0YV8xID0gZGF0YTsgX2EgPCBkYXRhXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICB2YXIgZGF0dW0gPSBkYXRhXzFbX2FdO1xuXG4gICAgICBfbG9vcF8xKGRhdHVtKTtcbiAgICB9XG5cbiAgICBQbHVyYWxSdWxlcy5hdmFpbGFibGVMb2NhbGVzID0gT2JqZWN0LmtleXMoUGx1cmFsUnVsZXMubG9jYWxlRGF0YSk7XG5cbiAgICBpZiAoIVBsdXJhbFJ1bGVzLl9fZGVmYXVsdExvY2FsZSkge1xuICAgICAgUGx1cmFsUnVsZXMuX19kZWZhdWx0TG9jYWxlID0gUGx1cmFsUnVsZXMuYXZhaWxhYmxlTG9jYWxlc1swXTtcbiAgICB9XG4gIH07XG5cbiAgUGx1cmFsUnVsZXMuZ2V0RGVmYXVsdExvY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUGx1cmFsUnVsZXMuX19kZWZhdWx0TG9jYWxlO1xuICB9O1xuXG4gIFBsdXJhbFJ1bGVzLmxvY2FsZURhdGEgPSB7fTtcbiAgUGx1cmFsUnVsZXMuYXZhaWxhYmxlTG9jYWxlcyA9IFtdO1xuICBQbHVyYWxSdWxlcy5fX2RlZmF1bHRMb2NhbGUgPSAnZW4nO1xuICBQbHVyYWxSdWxlcy5yZWxldmFudEV4dGVuc2lvbktleXMgPSBbXTtcbiAgUGx1cmFsUnVsZXMucG9seWZpbGxlZCA9IHRydWU7XG4gIFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXyA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiBQbHVyYWxSdWxlcztcbn0oKTtcblxuZXhwb3J0cy5QbHVyYWxSdWxlcyA9IFBsdXJhbFJ1bGVzO1xuXG50cnkge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL3Rlc3QvaW50bDQwMi9QbHVyYWxSdWxlcy9sZW5ndGguanNcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBsdXJhbFJ1bGVzLCAnbGVuZ3RoJywge1xuICAgIHZhbHVlOiAwLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Rlc3QyNjIvYmxvYi9tYXN0ZXIvdGVzdC9pbnRsNDAyL1JlbGF0aXZlVGltZUZvcm1hdC9jb25zdHJ1Y3Rvci9sZW5ndGguanNcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGx1cmFsUnVsZXMucHJvdG90eXBlLmNvbnN0cnVjdG9yLCAnbGVuZ3RoJywge1xuICAgIHZhbHVlOiAwLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Rlc3QyNjIvYmxvYi9tYXN0ZXIvdGVzdC9pbnRsNDAyL1JlbGF0aXZlVGltZUZvcm1hdC9jb25zdHJ1Y3Rvci9zdXBwb3J0ZWRMb2NhbGVzT2YvbGVuZ3RoLmpzXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBsdXJhbFJ1bGVzLnN1cHBvcnRlZExvY2FsZXNPZiwgJ2xlbmd0aCcsIHtcbiAgICB2YWx1ZTogMSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufSBjYXRjaCAoZXgpIHsvLyBNZXRhIGZpeGVzIGZvciB0ZXN0MjYyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3012\n")},4574:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.PluralRules && typeof Intl.PluralRules.__addLocaleData === \'function\') {\n Intl.PluralRules.__addLocaleData({\n "data": {\n "en": {\n "categories": {\n "cardinal": ["one", "other"],\n "ordinal": ["one", "two", "few", "other"]\n },\n "fn": function fn(n, ord) {\n var s = String(n).split(\'.\'),\n v0 = !s[1],\n t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1),\n n100 = t0 && s[0].slice(-2);\n if (ord) return n10 == 1 && n100 != 11 ? \'one\' : n10 == 2 && n100 != 12 ? \'two\' : n10 == 3 && n100 != 13 ? \'few\' : \'other\';\n return n == 1 && v0 ? \'one\' : \'other\';\n }\n }\n },\n "aliases": {},\n "parentLocales": {\n "en-150": "en-001",\n "en-AG": "en-001",\n "en-AI": "en-001",\n "en-AU": "en-001",\n "en-BB": "en-001",\n "en-BM": "en-001",\n "en-BS": "en-001",\n "en-BW": "en-001",\n "en-BZ": "en-001",\n "en-CA": "en-001",\n "en-CC": "en-001",\n "en-CK": "en-001",\n "en-CM": "en-001",\n "en-CX": "en-001",\n "en-CY": "en-001",\n "en-DG": "en-001",\n "en-DM": "en-001",\n "en-ER": "en-001",\n "en-FJ": "en-001",\n "en-FK": "en-001",\n "en-FM": "en-001",\n "en-GB": "en-001",\n "en-GD": "en-001",\n "en-GG": "en-001",\n "en-GH": "en-001",\n "en-GI": "en-001",\n "en-GM": "en-001",\n "en-GY": "en-001",\n "en-HK": "en-001",\n "en-IE": "en-001",\n "en-IL": "en-001",\n "en-IM": "en-001",\n "en-IN": "en-001",\n "en-IO": "en-001",\n "en-JE": "en-001",\n "en-JM": "en-001",\n "en-KE": "en-001",\n "en-KI": "en-001",\n "en-KN": "en-001",\n "en-KY": "en-001",\n "en-LC": "en-001",\n "en-LR": "en-001",\n "en-LS": "en-001",\n "en-MG": "en-001",\n "en-MO": "en-001",\n "en-MS": "en-001",\n "en-MT": "en-001",\n "en-MU": "en-001",\n "en-MW": "en-001",\n "en-MY": "en-001",\n "en-NA": "en-001",\n "en-NF": "en-001",\n "en-NG": "en-001",\n "en-NR": "en-001",\n "en-NU": "en-001",\n "en-NZ": "en-001",\n "en-PG": "en-001",\n "en-PH": "en-001",\n "en-PK": "en-001",\n "en-PN": "en-001",\n "en-PW": "en-001",\n "en-RW": "en-001",\n "en-SB": "en-001",\n "en-SC": "en-001",\n "en-SD": "en-001",\n "en-SG": "en-001",\n "en-SH": "en-001",\n "en-SL": "en-001",\n "en-SS": "en-001",\n "en-SX": "en-001",\n "en-SZ": "en-001",\n "en-TC": "en-001",\n "en-TK": "en-001",\n "en-TO": "en-001",\n "en-TT": "en-001",\n "en-TV": "en-001",\n "en-TZ": "en-001",\n "en-UG": "en-001",\n "en-VC": "en-001",\n "en-VG": "en-001",\n "en-VU": "en-001",\n "en-WS": "en-001",\n "en-ZA": "en-001",\n "en-ZM": "en-001",\n "en-ZW": "en-001",\n "en-AT": "en-150",\n "en-BE": "en-150",\n "en-CH": "en-150",\n "en-DE": "en-150",\n "en-DK": "en-150",\n "en-FI": "en-150",\n "en-NL": "en-150",\n "en-SE": "en-150",\n "en-SI": "en-150"\n },\n "availableLocales": ["en"]\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2xvY2FsZS1kYXRhL2VuLmpzPzQ3N2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjQ1NzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlBsdXJhbFJ1bGVzICYmIHR5cGVvZiBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwiZW5cIjoge1xuICAgICAgICBcImNhdGVnb3JpZXNcIjoge1xuICAgICAgICAgIFwiY2FyZGluYWxcIjogW1wib25lXCIsIFwib3RoZXJcIl0sXG4gICAgICAgICAgXCJvcmRpbmFsXCI6IFtcIm9uZVwiLCBcInR3b1wiLCBcImZld1wiLCBcIm90aGVyXCJdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm5cIjogZnVuY3Rpb24gZm4obiwgb3JkKSB7XG4gICAgICAgICAgdmFyIHMgPSBTdHJpbmcobikuc3BsaXQoJy4nKSxcbiAgICAgICAgICAgICAgdjAgPSAhc1sxXSxcbiAgICAgICAgICAgICAgdDAgPSBOdW1iZXIoc1swXSkgPT0gbixcbiAgICAgICAgICAgICAgbjEwID0gdDAgJiYgc1swXS5zbGljZSgtMSksXG4gICAgICAgICAgICAgIG4xMDAgPSB0MCAmJiBzWzBdLnNsaWNlKC0yKTtcbiAgICAgICAgICBpZiAob3JkKSByZXR1cm4gbjEwID09IDEgJiYgbjEwMCAhPSAxMSA/ICdvbmUnIDogbjEwID09IDIgJiYgbjEwMCAhPSAxMiA/ICd0d28nIDogbjEwID09IDMgJiYgbjEwMCAhPSAxMyA/ICdmZXcnIDogJ290aGVyJztcbiAgICAgICAgICByZXR1cm4gbiA9PSAxICYmIHYwID8gJ29uZScgOiAnb3RoZXInO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHtcbiAgICAgIFwiZW4tMTUwXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFJXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFVXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJCXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJaXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNBXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNYXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLURHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLURNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUVSXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUZKXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUZLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUZNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdCXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdEXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdIXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdJXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUhLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlFXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlMXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlOXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlPXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUpFXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUpNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtFXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtJXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtOXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUxDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUxSXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUxTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1HXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1PXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1TXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1UXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1VXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1XXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1ZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5BXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5GXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5HXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5SXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5VXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5aXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBIXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBOXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVJXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNCXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNEXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNIXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNMXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNYXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNaXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRPXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRUXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRWXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRaXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVVHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVZDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVZHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVZVXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVdTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVpBXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVpNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVpXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFUXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLUJFXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLUNIXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLURFXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLURLXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLUZJXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLU5MXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLVNFXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLVNJXCI6IFwiZW4tMTUwXCJcbiAgICB9LFxuICAgIFwiYXZhaWxhYmxlTG9jYWxlc1wiOiBbXCJlblwiXVxuICB9KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4574\n')},3745:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.PluralRules && typeof Intl.PluralRules.__addLocaleData === \'function\') {\n Intl.PluralRules.__addLocaleData({\n "data": {\n "es": {\n "categories": {\n "cardinal": ["one", "other"],\n "ordinal": ["other"]\n },\n "fn": function fn(n, ord) {\n if (ord) return \'other\';\n return n == 1 ? \'one\' : \'other\';\n }\n }\n },\n "aliases": {},\n "parentLocales": {\n "es-AR": "es-419",\n "es-BO": "es-419",\n "es-BR": "es-419",\n "es-BZ": "es-419",\n "es-CL": "es-419",\n "es-CO": "es-419",\n "es-CR": "es-419",\n "es-CU": "es-419",\n "es-DO": "es-419",\n "es-EC": "es-419",\n "es-GT": "es-419",\n "es-HN": "es-419",\n "es-MX": "es-419",\n "es-NI": "es-419",\n "es-PA": "es-419",\n "es-PE": "es-419",\n "es-PR": "es-419",\n "es-PY": "es-419",\n "es-SV": "es-419",\n "es-US": "es-419",\n "es-UY": "es-419",\n "es-VE": "es-419"\n },\n "availableLocales": ["es"]\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2xvY2FsZS1kYXRhL2VzLmpzPzNmZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzc0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBnZW5lcmF0ZWQgKi9cbi8vIHByZXR0aWVyLWlnbm9yZVxuaWYgKEludGwuUGx1cmFsUnVsZXMgJiYgdHlwZW9mIEludGwuUGx1cmFsUnVsZXMuX19hZGRMb2NhbGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gIEludGwuUGx1cmFsUnVsZXMuX19hZGRMb2NhbGVEYXRhKHtcbiAgICBcImRhdGFcIjoge1xuICAgICAgXCJlc1wiOiB7XG4gICAgICAgIFwiY2F0ZWdvcmllc1wiOiB7XG4gICAgICAgICAgXCJjYXJkaW5hbFwiOiBbXCJvbmVcIiwgXCJvdGhlclwiXSxcbiAgICAgICAgICBcIm9yZGluYWxcIjogW1wib3RoZXJcIl1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmblwiOiBmdW5jdGlvbiBmbihuLCBvcmQpIHtcbiAgICAgICAgICBpZiAob3JkKSByZXR1cm4gJ290aGVyJztcbiAgICAgICAgICByZXR1cm4gbiA9PSAxID8gJ29uZScgOiAnb3RoZXInO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHtcbiAgICAgIFwiZXMtQVJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQk9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlpcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ0xcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ09cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1JcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1VcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRE9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRUNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtR1RcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtSE5cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTVhcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTklcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEFcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEVcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtU1ZcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVkVcIjogXCJlcy00MTlcIlxuICAgIH0sXG4gICAgXCJhdmFpbGFibGVMb2NhbGVzXCI6IFtcImVzXCJdXG4gIH0pO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3745\n')},6867:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.PluralRules && typeof Intl.PluralRules.__addLocaleData === \'function\') {\n Intl.PluralRules.__addLocaleData({\n "data": {\n "ses": {\n "categories": {\n "cardinal": ["other"],\n "ordinal": ["other"]\n },\n "fn": function fn(n, ord) {\n return \'other\';\n }\n }\n },\n "aliases": {},\n "parentLocales": {},\n "availableLocales": ["ses"]\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2xvY2FsZS1kYXRhL3Nlcy5qcz8yOTM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxpQkFBaUI7QUFDakIsdUJBQXVCO0FBQ3ZCO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjY4NjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlBsdXJhbFJ1bGVzICYmIHR5cGVvZiBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwic2VzXCI6IHtcbiAgICAgICAgXCJjYXRlZ29yaWVzXCI6IHtcbiAgICAgICAgICBcImNhcmRpbmFsXCI6IFtcIm90aGVyXCJdLFxuICAgICAgICAgIFwib3JkaW5hbFwiOiBbXCJvdGhlclwiXVxuICAgICAgICB9LFxuICAgICAgICBcImZuXCI6IGZ1bmN0aW9uIGZuKG4sIG9yZCkge1xuICAgICAgICAgIHJldHVybiAnb3RoZXInO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHt9LFxuICAgIFwiYXZhaWxhYmxlTG9jYWxlc1wiOiBbXCJzZXNcIl1cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6867\n')},2157:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar core_1 = __webpack_require__(3012);\n\nif (typeof Intl.PluralRules === 'undefined' || !Intl.PluralRules.polyfilled && new Intl.PluralRules('en', {\n minimumFractionDigits: 2\n}).select(1) === 'one') {\n Object.defineProperty(Intl, 'PluralRules', {\n value: core_1.PluralRules,\n writable: true,\n enumerable: false,\n configurable: true\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L3BvbHlmaWxsLmpzP2FkY2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDOztBQUVGLGFBQWEsbUJBQU8sQ0FBQyxJQUFROztBQUU3QjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjE1Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcblxuaWYgKHR5cGVvZiBJbnRsLlBsdXJhbFJ1bGVzID09PSAndW5kZWZpbmVkJyB8fCAhSW50bC5QbHVyYWxSdWxlcy5wb2x5ZmlsbGVkICYmIG5ldyBJbnRsLlBsdXJhbFJ1bGVzKCdlbicsIHtcbiAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAyXG59KS5zZWxlY3QoMSkgPT09ICdvbmUnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRsLCAnUGx1cmFsUnVsZXMnLCB7XG4gICAgdmFsdWU6IGNvcmVfMS5QbHVyYWxSdWxlcyxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2157\n")},3228:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("__webpack_require__(2157);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9wb2x5ZmlsbC5qcz8xYTM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsSUFBaUIiLCJmaWxlIjoiMzIyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vZGlzdC9wb2x5ZmlsbCcpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3228\n")},9905:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar __values = this && this.__values || function (o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n};\n\nvar __spread = this && this.__spread || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar intl_utils_1 = __webpack_require__(2650);\n\nfunction unpackData(locale, localeData) {\n var localeHierarchy = intl_utils_1.getLocaleHierarchy(locale, localeData.aliases, localeData.parentLocales);\n var dataToMerge = localeHierarchy.map(function (l) {\n return localeData.data[l];\n }).filter(Boolean);\n\n if (!dataToMerge.length) {\n throw new Error(\"Missing locale data for \\\"\" + locale + \"\\\", lookup hierarchy: \" + localeHierarchy.join(', '));\n }\n\n dataToMerge.reverse();\n return dataToMerge.reduce(function (all, d) {\n return __assign(__assign({}, all), d);\n }, {\n nu: []\n });\n}\n/**\n * https://tc39.es/proposal-intl-relative-time/#sec-singularrelativetimeunit\n * @param unit\n */\n\n\nfunction singularRelativeTimeUnit(unit) {\n intl_utils_1.invariant(typeof unit === 'string', \"unit must be a string, instead got \" + typeof unit, TypeError);\n if (unit === 'seconds') return 'second';\n if (unit === 'minutes') return 'minute';\n if (unit === 'hours') return 'hour';\n if (unit === 'days') return 'day';\n if (unit === 'weeks') return 'week';\n if (unit === 'months') return 'month';\n if (unit === 'quarters') return 'quarter';\n if (unit === 'years') return 'year';\n\n if (unit !== 'second' && unit !== 'minute' && unit !== 'hour' && unit !== 'day' && unit !== 'week' && unit !== 'month' && unit !== 'quarter' && unit !== 'year') {\n throw new RangeError(\"Invalid unit \" + unit);\n }\n\n return unit;\n}\n\nvar NUMBERING_SYSTEM_REGEX = /^[a-z0-9]{3,8}(-[a-z0-9]{3,8})*$/i;\n/**\n * https://tc39.es/proposal-intl-relative-time/#sec-makepartslist\n * @param pattern\n * @param unit\n * @param parts\n */\n\nfunction makePartsList(pattern, unit, parts) {\n var e_1, _a, e_2, _b;\n\n var patternParts = intl_utils_1.partitionPattern(pattern);\n var result = [];\n\n try {\n for (var patternParts_1 = __values(patternParts), patternParts_1_1 = patternParts_1.next(); !patternParts_1_1.done; patternParts_1_1 = patternParts_1.next()) {\n var patternPart = patternParts_1_1.value;\n\n if (intl_utils_1.isLiteralPart(patternPart)) {\n result.push({\n type: 'literal',\n value: patternPart.value\n });\n } else {\n intl_utils_1.invariant(patternPart.type === '0', \"Malformed pattern \" + pattern);\n\n try {\n for (var parts_1 = (e_2 = void 0, __values(parts)), parts_1_1 = parts_1.next(); !parts_1_1.done; parts_1_1 = parts_1.next()) {\n var part = parts_1_1.value;\n result.push({\n type: part.type,\n value: part.value,\n unit: unit\n });\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (parts_1_1 && !parts_1_1.done && (_b = parts_1.return)) _b.call(parts_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (patternParts_1_1 && !patternParts_1_1.done && (_a = patternParts_1.return)) _a.call(patternParts_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return result;\n}\n\nfunction objectIs(x, y) {\n if (Object.is) {\n return Object.is(x, y);\n } // SameValue algorithm\n\n\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } // Step 6.a: NaN == NaN\n\n\n return x !== x && y !== y;\n}\n\nfunction toString(arg) {\n return arg + '';\n}\n/**\n * PartitionRelativeTimePattern\n * @param rtf\n * @param value\n * @param unit\n */\n\n\nfunction partitionRelativeTimePattern(internalSlotMap, rtf, value, unit) {\n intl_utils_1.invariant(typeof value === 'number', \"value must be number, instead got \" + typeof value, TypeError);\n intl_utils_1.invariant(typeof unit === 'string', \"unit must be number, instead got \" + typeof value, TypeError);\n\n if (isNaN(value) || value === Infinity || value === -Infinity) {\n throw new RangeError(\"Invalid value \" + value);\n }\n\n var resolvedUnit = singularRelativeTimeUnit(unit);\n var fields = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'fields');\n var style = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'style');\n var entry = resolvedUnit;\n\n if (style === 'short') {\n entry = unit + \"-short\";\n } else if (style === 'narrow') {\n entry = unit + \"-narrow\";\n }\n\n if (!(entry in fields)) {\n entry = unit;\n }\n\n var patterns = fields[entry];\n var numeric = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'numeric');\n\n if (numeric === 'auto') {\n if (toString(value) in patterns) {\n return [{\n type: 'literal',\n value: patterns[toString(value)]\n }];\n }\n }\n\n var tl = 'future';\n\n if (objectIs(value, -0) || value < 0) {\n tl = 'past';\n }\n\n var po = patterns[tl];\n var pluralRules = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'pluralRules');\n var numberFormat = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'numberFormat');\n var fv = typeof numberFormat.formatToParts === 'function' ? numberFormat.formatToParts(Math.abs(value)) : // TODO: If formatToParts is not supported, we assume the whole formatted\n // number is a part\n [{\n type: 'literal',\n value: numberFormat.format(Math.abs(value)),\n unit: unit\n }];\n var pr = pluralRules.select(value);\n var pattern = po[pr];\n return makePartsList(pattern, resolvedUnit, fv);\n}\n\nvar RelativeTimeFormat =\n/** @class */\nfunction () {\n function RelativeTimeFormat(locales, options) {\n // test262/test/intl402/RelativeTimeFormat/constructor/constructor/newtarget-undefined.js\n // Cannot use `new.target` bc of IE11 & TS transpiles it to something else\n var newTarget = this && this instanceof RelativeTimeFormat ? this.constructor : void 0;\n\n if (!newTarget) {\n throw new TypeError(\"Intl.RelativeTimeFormat must be called with 'new'\");\n }\n\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat', true);\n var requestedLocales = intl_utils_1.getCanonicalLocales(locales);\n var opt = Object.create(null);\n var opts = options === undefined ? Object.create(null) : intl_utils_1.toObject(options);\n var matcher = intl_utils_1.getOption(opts, 'localeMatcher', 'string', ['best fit', 'lookup'], 'best fit');\n opt.localeMatcher = matcher;\n var numberingSystem = intl_utils_1.getOption(opts, 'numberingSystem', 'string', undefined, undefined);\n\n if (numberingSystem !== undefined) {\n if (!NUMBERING_SYSTEM_REGEX.test(numberingSystem)) {\n throw new RangeError(\"Invalid numbering system \" + numberingSystem);\n }\n }\n\n opt.nu = numberingSystem;\n var r = intl_utils_1.createResolveLocale(RelativeTimeFormat.getDefaultLocale)(RelativeTimeFormat.availableLocales, requestedLocales, opt, RelativeTimeFormat.relevantExtensionKeys, RelativeTimeFormat.localeData);\n var locale = r.locale,\n nu = r.nu;\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'locale', locale);\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'style', intl_utils_1.getOption(opts, 'style', 'string', ['long', 'narrow', 'short'], 'long'));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numeric', intl_utils_1.getOption(opts, 'numeric', 'string', ['always', 'auto'], 'always'));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'fields', RelativeTimeFormat.localeData[locale]);\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numberFormat', new Intl.NumberFormat(locales));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'pluralRules', new Intl.PluralRules(locales));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numberingSystem', nu);\n }\n\n RelativeTimeFormat.prototype.format = function (value, unit) {\n if (typeof this !== 'object') {\n throw new TypeError('format was called on a non-object');\n }\n\n if (!intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat')) {\n throw new TypeError('format was called on a invalid context');\n }\n\n return partitionRelativeTimePattern(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, Number(value), toString(unit)).map(function (el) {\n return el.value;\n }).join('');\n };\n\n RelativeTimeFormat.prototype.formatToParts = function (value, unit) {\n if (typeof this !== 'object') {\n throw new TypeError('formatToParts was called on a non-object');\n }\n\n if (!intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat')) {\n throw new TypeError('formatToParts was called on a invalid context');\n }\n\n return partitionRelativeTimePattern(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, Number(value), toString(unit));\n };\n\n RelativeTimeFormat.prototype.resolvedOptions = function () {\n if (typeof this !== 'object') {\n throw new TypeError('resolvedOptions was called on a non-object');\n }\n\n if (!intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat')) {\n throw new TypeError('resolvedOptions was called on a invalid context');\n } // test262/test/intl402/RelativeTimeFormat/prototype/resolvedOptions/type.js\n\n\n return {\n locale: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'locale'),\n style: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'style'),\n numeric: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numeric'),\n numberingSystem: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numberingSystem')\n };\n };\n\n RelativeTimeFormat.supportedLocalesOf = function (locales, options) {\n return intl_utils_1.supportedLocales(RelativeTimeFormat.availableLocales, intl_utils_1.getCanonicalLocales(locales), options);\n };\n\n RelativeTimeFormat.__addLocaleData = function () {\n var e_3, _a;\n\n var data = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n\n var _loop_1 = function _loop_1(datum) {\n var availableLocales = Object.keys(__spread(datum.availableLocales, Object.keys(datum.aliases), Object.keys(datum.parentLocales)).reduce(function (all, k) {\n all[k] = true;\n return all;\n }, {}));\n availableLocales.forEach(function (locale) {\n try {\n RelativeTimeFormat.localeData[locale] = unpackData(locale, datum);\n } catch (e) {// If we can't unpack this data, ignore the locale\n }\n });\n };\n\n try {\n for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n var datum = data_1_1.value;\n\n _loop_1(datum);\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n\n RelativeTimeFormat.availableLocales = Object.keys(RelativeTimeFormat.localeData);\n\n if (!RelativeTimeFormat.__defaultLocale) {\n RelativeTimeFormat.__defaultLocale = RelativeTimeFormat.availableLocales[0];\n }\n };\n\n RelativeTimeFormat.getDefaultLocale = function () {\n return RelativeTimeFormat.__defaultLocale;\n };\n\n RelativeTimeFormat.localeData = {};\n RelativeTimeFormat.availableLocales = [];\n RelativeTimeFormat.__defaultLocale = 'en';\n RelativeTimeFormat.relevantExtensionKeys = ['nu'];\n RelativeTimeFormat.polyfilled = true;\n RelativeTimeFormat.__INTERNAL_SLOT_MAP__ = new WeakMap();\n return RelativeTimeFormat;\n}();\n\nexports.default = RelativeTimeFormat;\n\ntry {\n // IE11 does not have Symbol\n if (typeof Symbol !== 'undefined') {\n Object.defineProperty(RelativeTimeFormat.prototype, Symbol.toStringTag, {\n value: 'Intl.RelativeTimeFormat',\n writable: false,\n enumerable: false,\n configurable: true\n });\n } // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/length.js\n\n\n Object.defineProperty(RelativeTimeFormat.prototype.constructor, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true\n }); // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/supportedLocalesOf/length.js\n\n Object.defineProperty(RelativeTimeFormat.supportedLocalesOf, 'length', {\n value: 1,\n writable: false,\n enumerable: false,\n configurable: true\n });\n} catch (e) {// Meta fix so we're test262-compliant, not important\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9jb3JlLmpzPzcyNDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQzs7QUFFRixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFzQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0MsSUFBSSxXQUFXLElBQUk7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLCtGQUErRix3QkFBd0I7QUFDdkg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQOztBQUVBO0FBQ0EseUZBQXlGLGlCQUFpQjtBQUMxRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQUk7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTLFlBQVk7QUFDckI7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxpRUFBaUUsZ0JBQWdCO0FBQ2pGOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLFlBQVk7QUFDYiIsImZpbGUiOiI5OTA1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2Fzc2lnbiA9IHRoaXMgJiYgdGhpcy5fX2Fzc2lnbiB8fCBmdW5jdGlvbiAoKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFyIF9fdmFsdWVzID0gdGhpcyAmJiB0aGlzLl9fdmFsdWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvcixcbiAgICAgIG0gPSBzICYmIG9bc10sXG4gICAgICBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBvICYmIG9baSsrXSxcbiAgICAgICAgZG9uZTogIW9cbiAgICAgIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xuXG52YXIgX19yZWFkID0gdGhpcyAmJiB0aGlzLl9fcmVhZCB8fCBmdW5jdGlvbiAobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLFxuICAgICAgcixcbiAgICAgIGFyID0gW10sXG4gICAgICBlO1xuXG4gIHRyeSB7XG4gICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGUgPSB7XG4gICAgICBlcnJvcjogZXJyb3JcbiAgICB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyO1xufTtcblxudmFyIF9fc3ByZWFkID0gdGhpcyAmJiB0aGlzLl9fc3ByZWFkIHx8IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIH1cblxuICByZXR1cm4gYXI7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgaW50bF91dGlsc18xID0gcmVxdWlyZShcIkBmb3JtYXRqcy9pbnRsLXV0aWxzXCIpO1xuXG5mdW5jdGlvbiB1bnBhY2tEYXRhKGxvY2FsZSwgbG9jYWxlRGF0YSkge1xuICB2YXIgbG9jYWxlSGllcmFyY2h5ID0gaW50bF91dGlsc18xLmdldExvY2FsZUhpZXJhcmNoeShsb2NhbGUsIGxvY2FsZURhdGEuYWxpYXNlcywgbG9jYWxlRGF0YS5wYXJlbnRMb2NhbGVzKTtcbiAgdmFyIGRhdGFUb01lcmdlID0gbG9jYWxlSGllcmFyY2h5Lm1hcChmdW5jdGlvbiAobCkge1xuICAgIHJldHVybiBsb2NhbGVEYXRhLmRhdGFbbF07XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICBpZiAoIWRhdGFUb01lcmdlLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIFxcXCJcIiArIGxvY2FsZSArIFwiXFxcIiwgbG9va3VwIGhpZXJhcmNoeTogXCIgKyBsb2NhbGVIaWVyYXJjaHkuam9pbignLCAnKSk7XG4gIH1cblxuICBkYXRhVG9NZXJnZS5yZXZlcnNlKCk7XG4gIHJldHVybiBkYXRhVG9NZXJnZS5yZWR1Y2UoZnVuY3Rpb24gKGFsbCwgZCkge1xuICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYWxsKSwgZCk7XG4gIH0sIHtcbiAgICBudTogW11cbiAgfSk7XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLXJlbGF0aXZlLXRpbWUvI3NlYy1zaW5ndWxhcnJlbGF0aXZldGltZXVuaXRcbiAqIEBwYXJhbSB1bml0XG4gKi9cblxuXG5mdW5jdGlvbiBzaW5ndWxhclJlbGF0aXZlVGltZVVuaXQodW5pdCkge1xuICBpbnRsX3V0aWxzXzEuaW52YXJpYW50KHR5cGVvZiB1bml0ID09PSAnc3RyaW5nJywgXCJ1bml0IG11c3QgYmUgYSBzdHJpbmcsIGluc3RlYWQgZ290IFwiICsgdHlwZW9mIHVuaXQsIFR5cGVFcnJvcik7XG4gIGlmICh1bml0ID09PSAnc2Vjb25kcycpIHJldHVybiAnc2Vjb25kJztcbiAgaWYgKHVuaXQgPT09ICdtaW51dGVzJykgcmV0dXJuICdtaW51dGUnO1xuICBpZiAodW5pdCA9PT0gJ2hvdXJzJykgcmV0dXJuICdob3VyJztcbiAgaWYgKHVuaXQgPT09ICdkYXlzJykgcmV0dXJuICdkYXknO1xuICBpZiAodW5pdCA9PT0gJ3dlZWtzJykgcmV0dXJuICd3ZWVrJztcbiAgaWYgKHVuaXQgPT09ICdtb250aHMnKSByZXR1cm4gJ21vbnRoJztcbiAgaWYgKHVuaXQgPT09ICdxdWFydGVycycpIHJldHVybiAncXVhcnRlcic7XG4gIGlmICh1bml0ID09PSAneWVhcnMnKSByZXR1cm4gJ3llYXInO1xuXG4gIGlmICh1bml0ICE9PSAnc2Vjb25kJyAmJiB1bml0ICE9PSAnbWludXRlJyAmJiB1bml0ICE9PSAnaG91cicgJiYgdW5pdCAhPT0gJ2RheScgJiYgdW5pdCAhPT0gJ3dlZWsnICYmIHVuaXQgIT09ICdtb250aCcgJiYgdW5pdCAhPT0gJ3F1YXJ0ZXInICYmIHVuaXQgIT09ICd5ZWFyJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB1bml0IFwiICsgdW5pdCk7XG4gIH1cblxuICByZXR1cm4gdW5pdDtcbn1cblxudmFyIE5VTUJFUklOR19TWVNURU1fUkVHRVggPSAvXlthLXowLTldezMsOH0oLVthLXowLTldezMsOH0pKiQvaTtcbi8qKlxuICogaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtcmVsYXRpdmUtdGltZS8jc2VjLW1ha2VwYXJ0c2xpc3RcbiAqIEBwYXJhbSBwYXR0ZXJuXG4gKiBAcGFyYW0gdW5pdFxuICogQHBhcmFtIHBhcnRzXG4gKi9cblxuZnVuY3Rpb24gbWFrZVBhcnRzTGlzdChwYXR0ZXJuLCB1bml0LCBwYXJ0cykge1xuICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcblxuICB2YXIgcGF0dGVyblBhcnRzID0gaW50bF91dGlsc18xLnBhcnRpdGlvblBhdHRlcm4ocGF0dGVybik7XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICB0cnkge1xuICAgIGZvciAodmFyIHBhdHRlcm5QYXJ0c18xID0gX192YWx1ZXMocGF0dGVyblBhcnRzKSwgcGF0dGVyblBhcnRzXzFfMSA9IHBhdHRlcm5QYXJ0c18xLm5leHQoKTsgIXBhdHRlcm5QYXJ0c18xXzEuZG9uZTsgcGF0dGVyblBhcnRzXzFfMSA9IHBhdHRlcm5QYXJ0c18xLm5leHQoKSkge1xuICAgICAgdmFyIHBhdHRlcm5QYXJ0ID0gcGF0dGVyblBhcnRzXzFfMS52YWx1ZTtcblxuICAgICAgaWYgKGludGxfdXRpbHNfMS5pc0xpdGVyYWxQYXJ0KHBhdHRlcm5QYXJ0KSkge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2xpdGVyYWwnLFxuICAgICAgICAgIHZhbHVlOiBwYXR0ZXJuUGFydC52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGxfdXRpbHNfMS5pbnZhcmlhbnQocGF0dGVyblBhcnQudHlwZSA9PT0gJzAnLCBcIk1hbGZvcm1lZCBwYXR0ZXJuIFwiICsgcGF0dGVybik7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBwYXJ0c18xID0gKGVfMiA9IHZvaWQgMCwgX192YWx1ZXMocGFydHMpKSwgcGFydHNfMV8xID0gcGFydHNfMS5uZXh0KCk7ICFwYXJ0c18xXzEuZG9uZTsgcGFydHNfMV8xID0gcGFydHNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0ID0gcGFydHNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBwYXJ0LnR5cGUsXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXJ0LnZhbHVlLFxuICAgICAgICAgICAgICB1bml0OiB1bml0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVfMl8xKSB7XG4gICAgICAgICAgZV8yID0ge1xuICAgICAgICAgICAgZXJyb3I6IGVfMl8xXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHBhcnRzXzFfMSAmJiAhcGFydHNfMV8xLmRvbmUgJiYgKF9iID0gcGFydHNfMS5yZXR1cm4pKSBfYi5jYWxsKHBhcnRzXzEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlXzFfMSkge1xuICAgIGVfMSA9IHtcbiAgICAgIGVycm9yOiBlXzFfMVxuICAgIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwYXR0ZXJuUGFydHNfMV8xICYmICFwYXR0ZXJuUGFydHNfMV8xLmRvbmUgJiYgKF9hID0gcGF0dGVyblBhcnRzXzEucmV0dXJuKSkgX2EuY2FsbChwYXR0ZXJuUGFydHNfMSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBvYmplY3RJcyh4LCB5KSB7XG4gIGlmIChPYmplY3QuaXMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmlzKHgsIHkpO1xuICB9IC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cblxuXG4gIGlmICh4ID09PSB5KSB7XG4gICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gIH0gLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cblxuXG4gIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKGFyZykge1xuICByZXR1cm4gYXJnICsgJyc7XG59XG4vKipcbiAqIFBhcnRpdGlvblJlbGF0aXZlVGltZVBhdHRlcm5cbiAqIEBwYXJhbSBydGZcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHBhcmFtIHVuaXRcbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnRpdGlvblJlbGF0aXZlVGltZVBhdHRlcm4oaW50ZXJuYWxTbG90TWFwLCBydGYsIHZhbHVlLCB1bml0KSB7XG4gIGludGxfdXRpbHNfMS5pbnZhcmlhbnQodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJywgXCJ2YWx1ZSBtdXN0IGJlIG51bWJlciwgaW5zdGVhZCBnb3QgXCIgKyB0eXBlb2YgdmFsdWUsIFR5cGVFcnJvcik7XG4gIGludGxfdXRpbHNfMS5pbnZhcmlhbnQodHlwZW9mIHVuaXQgPT09ICdzdHJpbmcnLCBcInVuaXQgbXVzdCBiZSBudW1iZXIsIGluc3RlYWQgZ290IFwiICsgdHlwZW9mIHZhbHVlLCBUeXBlRXJyb3IpO1xuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5IHx8IHZhbHVlID09PSAtSW5maW5pdHkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdmFsdWUgXCIgKyB2YWx1ZSk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZWRVbml0ID0gc2luZ3VsYXJSZWxhdGl2ZVRpbWVVbml0KHVuaXQpO1xuICB2YXIgZmllbGRzID0gaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIHJ0ZiwgJ2ZpZWxkcycpO1xuICB2YXIgc3R5bGUgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcnRmLCAnc3R5bGUnKTtcbiAgdmFyIGVudHJ5ID0gcmVzb2x2ZWRVbml0O1xuXG4gIGlmIChzdHlsZSA9PT0gJ3Nob3J0Jykge1xuICAgIGVudHJ5ID0gdW5pdCArIFwiLXNob3J0XCI7XG4gIH0gZWxzZSBpZiAoc3R5bGUgPT09ICduYXJyb3cnKSB7XG4gICAgZW50cnkgPSB1bml0ICsgXCItbmFycm93XCI7XG4gIH1cblxuICBpZiAoIShlbnRyeSBpbiBmaWVsZHMpKSB7XG4gICAgZW50cnkgPSB1bml0O1xuICB9XG5cbiAgdmFyIHBhdHRlcm5zID0gZmllbGRzW2VudHJ5XTtcbiAgdmFyIG51bWVyaWMgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcnRmLCAnbnVtZXJpYycpO1xuXG4gIGlmIChudW1lcmljID09PSAnYXV0bycpIHtcbiAgICBpZiAodG9TdHJpbmcodmFsdWUpIGluIHBhdHRlcm5zKSB7XG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgdHlwZTogJ2xpdGVyYWwnLFxuICAgICAgICB2YWx1ZTogcGF0dGVybnNbdG9TdHJpbmcodmFsdWUpXVxuICAgICAgfV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHRsID0gJ2Z1dHVyZSc7XG5cbiAgaWYgKG9iamVjdElzKHZhbHVlLCAtMCkgfHwgdmFsdWUgPCAwKSB7XG4gICAgdGwgPSAncGFzdCc7XG4gIH1cblxuICB2YXIgcG8gPSBwYXR0ZXJuc1t0bF07XG4gIHZhciBwbHVyYWxSdWxlcyA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBydGYsICdwbHVyYWxSdWxlcycpO1xuICB2YXIgbnVtYmVyRm9ybWF0ID0gaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIHJ0ZiwgJ251bWJlckZvcm1hdCcpO1xuICB2YXIgZnYgPSB0eXBlb2YgbnVtYmVyRm9ybWF0LmZvcm1hdFRvUGFydHMgPT09ICdmdW5jdGlvbicgPyBudW1iZXJGb3JtYXQuZm9ybWF0VG9QYXJ0cyhNYXRoLmFicyh2YWx1ZSkpIDogLy8gVE9ETzogSWYgZm9ybWF0VG9QYXJ0cyBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBhc3N1bWUgdGhlIHdob2xlIGZvcm1hdHRlZFxuICAvLyBudW1iZXIgaXMgYSBwYXJ0XG4gIFt7XG4gICAgdHlwZTogJ2xpdGVyYWwnLFxuICAgIHZhbHVlOiBudW1iZXJGb3JtYXQuZm9ybWF0KE1hdGguYWJzKHZhbHVlKSksXG4gICAgdW5pdDogdW5pdFxuICB9XTtcbiAgdmFyIHByID0gcGx1cmFsUnVsZXMuc2VsZWN0KHZhbHVlKTtcbiAgdmFyIHBhdHRlcm4gPSBwb1twcl07XG4gIHJldHVybiBtYWtlUGFydHNMaXN0KHBhdHRlcm4sIHJlc29sdmVkVW5pdCwgZnYpO1xufVxuXG52YXIgUmVsYXRpdmVUaW1lRm9ybWF0ID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVsYXRpdmVUaW1lRm9ybWF0KGxvY2FsZXMsIG9wdGlvbnMpIHtcbiAgICAvLyB0ZXN0MjYyL3Rlc3QvaW50bDQwMi9SZWxhdGl2ZVRpbWVGb3JtYXQvY29uc3RydWN0b3IvY29uc3RydWN0b3IvbmV3dGFyZ2V0LXVuZGVmaW5lZC5qc1xuICAgIC8vIENhbm5vdCB1c2UgYG5ldy50YXJnZXRgIGJjIG9mIElFMTEgJiBUUyB0cmFuc3BpbGVzIGl0IHRvIHNvbWV0aGluZyBlbHNlXG4gICAgdmFyIG5ld1RhcmdldCA9IHRoaXMgJiYgdGhpcyBpbnN0YW5jZW9mIFJlbGF0aXZlVGltZUZvcm1hdCA/IHRoaXMuY29uc3RydWN0b3IgOiB2b2lkIDA7XG5cbiAgICBpZiAoIW5ld1RhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludGwuUmVsYXRpdmVUaW1lRm9ybWF0IG11c3QgYmUgY2FsbGVkIHdpdGggJ25ldydcIik7XG4gICAgfVxuXG4gICAgaW50bF91dGlsc18xLnNldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnaW5pdGlhbGl6ZWRSZWxhdGl2ZVRpbWVGb3JtYXQnLCB0cnVlKTtcbiAgICB2YXIgcmVxdWVzdGVkTG9jYWxlcyA9IGludGxfdXRpbHNfMS5nZXRDYW5vbmljYWxMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHZhciBvcHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBvcHRzID0gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IGludGxfdXRpbHNfMS50b09iamVjdChvcHRpb25zKTtcbiAgICB2YXIgbWF0Y2hlciA9IGludGxfdXRpbHNfMS5nZXRPcHRpb24ob3B0cywgJ2xvY2FsZU1hdGNoZXInLCAnc3RyaW5nJywgWydiZXN0IGZpdCcsICdsb29rdXAnXSwgJ2Jlc3QgZml0Jyk7XG4gICAgb3B0LmxvY2FsZU1hdGNoZXIgPSBtYXRjaGVyO1xuICAgIHZhciBudW1iZXJpbmdTeXN0ZW0gPSBpbnRsX3V0aWxzXzEuZ2V0T3B0aW9uKG9wdHMsICdudW1iZXJpbmdTeXN0ZW0nLCAnc3RyaW5nJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuXG4gICAgaWYgKG51bWJlcmluZ1N5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIU5VTUJFUklOR19TWVNURU1fUkVHRVgudGVzdChudW1iZXJpbmdTeXN0ZW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBudW1iZXJpbmcgc3lzdGVtIFwiICsgbnVtYmVyaW5nU3lzdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcHQubnUgPSBudW1iZXJpbmdTeXN0ZW07XG4gICAgdmFyIHIgPSBpbnRsX3V0aWxzXzEuY3JlYXRlUmVzb2x2ZUxvY2FsZShSZWxhdGl2ZVRpbWVGb3JtYXQuZ2V0RGVmYXVsdExvY2FsZSkoUmVsYXRpdmVUaW1lRm9ybWF0LmF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdCwgUmVsYXRpdmVUaW1lRm9ybWF0LnJlbGV2YW50RXh0ZW5zaW9uS2V5cywgUmVsYXRpdmVUaW1lRm9ybWF0LmxvY2FsZURhdGEpO1xuICAgIHZhciBsb2NhbGUgPSByLmxvY2FsZSxcbiAgICAgICAgbnUgPSByLm51O1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ2xvY2FsZScsIGxvY2FsZSk7XG4gICAgaW50bF91dGlsc18xLnNldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnc3R5bGUnLCBpbnRsX3V0aWxzXzEuZ2V0T3B0aW9uKG9wdHMsICdzdHlsZScsICdzdHJpbmcnLCBbJ2xvbmcnLCAnbmFycm93JywgJ3Nob3J0J10sICdsb25nJykpO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ251bWVyaWMnLCBpbnRsX3V0aWxzXzEuZ2V0T3B0aW9uKG9wdHMsICdudW1lcmljJywgJ3N0cmluZycsIFsnYWx3YXlzJywgJ2F1dG8nXSwgJ2Fsd2F5cycpKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0SW50ZXJuYWxTbG90KFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdmaWVsZHMnLCBSZWxhdGl2ZVRpbWVGb3JtYXQubG9jYWxlRGF0YVtsb2NhbGVdKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0SW50ZXJuYWxTbG90KFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdudW1iZXJGb3JtYXQnLCBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlcykpO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ3BsdXJhbFJ1bGVzJywgbmV3IEludGwuUGx1cmFsUnVsZXMobG9jYWxlcykpO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ251bWJlcmluZ1N5c3RlbScsIG51KTtcbiAgfVxuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKHZhbHVlLCB1bml0KSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm9ybWF0IHdhcyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdpbml0aWFsaXplZFJlbGF0aXZlVGltZUZvcm1hdCcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmb3JtYXQgd2FzIGNhbGxlZCBvbiBhIGludmFsaWQgY29udGV4dCcpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0aXRpb25SZWxhdGl2ZVRpbWVQYXR0ZXJuKFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsIE51bWJlcih2YWx1ZSksIHRvU3RyaW5nKHVuaXQpKS5tYXAoZnVuY3Rpb24gKGVsKSB7XG4gICAgICByZXR1cm4gZWwudmFsdWU7XG4gICAgfSkuam9pbignJyk7XG4gIH07XG5cbiAgUmVsYXRpdmVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzID0gZnVuY3Rpb24gKHZhbHVlLCB1bml0KSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm9ybWF0VG9QYXJ0cyB3YXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmICghaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnaW5pdGlhbGl6ZWRSZWxhdGl2ZVRpbWVGb3JtYXQnKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm9ybWF0VG9QYXJ0cyB3YXMgY2FsbGVkIG9uIGEgaW52YWxpZCBjb250ZXh0Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRpdGlvblJlbGF0aXZlVGltZVBhdHRlcm4oUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgTnVtYmVyKHZhbHVlKSwgdG9TdHJpbmcodW5pdCkpO1xuICB9O1xuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Jlc29sdmVkT3B0aW9ucyB3YXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmICghaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnaW5pdGlhbGl6ZWRSZWxhdGl2ZVRpbWVGb3JtYXQnKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVzb2x2ZWRPcHRpb25zIHdhcyBjYWxsZWQgb24gYSBpbnZhbGlkIGNvbnRleHQnKTtcbiAgICB9IC8vIHRlc3QyNjIvdGVzdC9pbnRsNDAyL1JlbGF0aXZlVGltZUZvcm1hdC9wcm90b3R5cGUvcmVzb2x2ZWRPcHRpb25zL3R5cGUuanNcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2FsZTogaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnbG9jYWxlJyksXG4gICAgICBzdHlsZTogaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnc3R5bGUnKSxcbiAgICAgIG51bWVyaWM6IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ251bWVyaWMnKSxcbiAgICAgIG51bWJlcmluZ1N5c3RlbTogaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnbnVtYmVyaW5nU3lzdGVtJylcbiAgICB9O1xuICB9O1xuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YgPSBmdW5jdGlvbiAobG9jYWxlcywgb3B0aW9ucykge1xuICAgIHJldHVybiBpbnRsX3V0aWxzXzEuc3VwcG9ydGVkTG9jYWxlcyhSZWxhdGl2ZVRpbWVGb3JtYXQuYXZhaWxhYmxlTG9jYWxlcywgaW50bF91dGlsc18xLmdldENhbm9uaWNhbExvY2FsZXMobG9jYWxlcyksIG9wdGlvbnMpO1xuICB9O1xuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5fX2FkZExvY2FsZURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVfMywgX2E7XG5cbiAgICB2YXIgZGF0YSA9IFtdO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIGRhdGFbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG5cbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIF9sb29wXzEoZGF0dW0pIHtcbiAgICAgIHZhciBhdmFpbGFibGVMb2NhbGVzID0gT2JqZWN0LmtleXMoX19zcHJlYWQoZGF0dW0uYXZhaWxhYmxlTG9jYWxlcywgT2JqZWN0LmtleXMoZGF0dW0uYWxpYXNlcyksIE9iamVjdC5rZXlzKGRhdHVtLnBhcmVudExvY2FsZXMpKS5yZWR1Y2UoZnVuY3Rpb24gKGFsbCwgaykge1xuICAgICAgICBhbGxba10gPSB0cnVlO1xuICAgICAgICByZXR1cm4gYWxsO1xuICAgICAgfSwge30pKTtcbiAgICAgIGF2YWlsYWJsZUxvY2FsZXMuZm9yRWFjaChmdW5jdGlvbiAobG9jYWxlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVsYXRpdmVUaW1lRm9ybWF0LmxvY2FsZURhdGFbbG9jYWxlXSA9IHVucGFja0RhdGEobG9jYWxlLCBkYXR1bSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsvLyBJZiB3ZSBjYW4ndCB1bnBhY2sgdGhpcyBkYXRhLCBpZ25vcmUgdGhlIGxvY2FsZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGRhdGFfMSA9IF9fdmFsdWVzKGRhdGEpLCBkYXRhXzFfMSA9IGRhdGFfMS5uZXh0KCk7ICFkYXRhXzFfMS5kb25lOyBkYXRhXzFfMSA9IGRhdGFfMS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGRhdHVtID0gZGF0YV8xXzEudmFsdWU7XG5cbiAgICAgICAgX2xvb3BfMShkYXR1bSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZV8zXzEpIHtcbiAgICAgIGVfMyA9IHtcbiAgICAgICAgZXJyb3I6IGVfM18xXG4gICAgICB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZGF0YV8xXzEgJiYgIWRhdGFfMV8xLmRvbmUgJiYgKF9hID0gZGF0YV8xLnJldHVybikpIF9hLmNhbGwoZGF0YV8xKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChlXzMpIHRocm93IGVfMy5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBSZWxhdGl2ZVRpbWVGb3JtYXQuYXZhaWxhYmxlTG9jYWxlcyA9IE9iamVjdC5rZXlzKFJlbGF0aXZlVGltZUZvcm1hdC5sb2NhbGVEYXRhKTtcblxuICAgIGlmICghUmVsYXRpdmVUaW1lRm9ybWF0Ll9fZGVmYXVsdExvY2FsZSkge1xuICAgICAgUmVsYXRpdmVUaW1lRm9ybWF0Ll9fZGVmYXVsdExvY2FsZSA9IFJlbGF0aXZlVGltZUZvcm1hdC5hdmFpbGFibGVMb2NhbGVzWzBdO1xuICAgIH1cbiAgfTtcblxuICBSZWxhdGl2ZVRpbWVGb3JtYXQuZ2V0RGVmYXVsdExvY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVsYXRpdmVUaW1lRm9ybWF0Ll9fZGVmYXVsdExvY2FsZTtcbiAgfTtcblxuICBSZWxhdGl2ZVRpbWVGb3JtYXQubG9jYWxlRGF0YSA9IHt9O1xuICBSZWxhdGl2ZVRpbWVGb3JtYXQuYXZhaWxhYmxlTG9jYWxlcyA9IFtdO1xuICBSZWxhdGl2ZVRpbWVGb3JtYXQuX19kZWZhdWx0TG9jYWxlID0gJ2VuJztcbiAgUmVsYXRpdmVUaW1lRm9ybWF0LnJlbGV2YW50RXh0ZW5zaW9uS2V5cyA9IFsnbnUnXTtcbiAgUmVsYXRpdmVUaW1lRm9ybWF0LnBvbHlmaWxsZWQgPSB0cnVlO1xuICBSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fID0gbmV3IFdlYWtNYXAoKTtcbiAgcmV0dXJuIFJlbGF0aXZlVGltZUZvcm1hdDtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUmVsYXRpdmVUaW1lRm9ybWF0O1xuXG50cnkge1xuICAvLyBJRTExIGRvZXMgbm90IGhhdmUgU3ltYm9sXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWxhdGl2ZVRpbWVGb3JtYXQucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgIHZhbHVlOiAnSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQnLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL3Rlc3QvaW50bDQwMi9SZWxhdGl2ZVRpbWVGb3JtYXQvY29uc3RydWN0b3IvbGVuZ3RoLmpzXG5cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVsYXRpdmVUaW1lRm9ybWF0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciwgJ2xlbmd0aCcsIHtcbiAgICB2YWx1ZTogMCxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pOyAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL3Rlc3QvaW50bDQwMi9SZWxhdGl2ZVRpbWVGb3JtYXQvY29uc3RydWN0b3Ivc3VwcG9ydGVkTG9jYWxlc09mL2xlbmd0aC5qc1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWxhdGl2ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLCAnbGVuZ3RoJywge1xuICAgIHZhbHVlOiAxLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59IGNhdGNoIChlKSB7Ly8gTWV0YSBmaXggc28gd2UncmUgdGVzdDI2Mi1jb21wbGlhbnQsIG5vdCBpbXBvcnRhbnRcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9905\n")},8079:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.RelativeTimeFormat && typeof Intl.RelativeTimeFormat.__addLocaleData === \'function\') {\n Intl.RelativeTimeFormat.__addLocaleData({\n "data": {\n "en-001": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n }\n },\n "en-150": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n }\n },\n "en-AU": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yrs"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yrs ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yrs"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yrs ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtrs"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtrs ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtrs"\n },\n "past": {\n "one": "in {0} qtr ago",\n "other": "{0} qtrs ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wks"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wks ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wks"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wks ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hrs"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hrs ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hrs"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hrs ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins"\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins"\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs"\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs"\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs ago"\n }\n }\n },\n "en-CA": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yrs."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yrs. ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yrs."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yrs. ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mos."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mos. ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mos."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mos. ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wks."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wks. ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wks."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wks. ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hrs."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hrs. ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hrs."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hrs. ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins. ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins. ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs. ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs. ago"\n }\n }\n },\n "en-SG": {\n "quarter-short": {\n "0": "this qtr",\n "1": "next qtr",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtrs"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtrs ago"\n },\n "-1": "last qtr"\n },\n "quarter-narrow": {\n "0": "this qtr",\n "1": "next qtr",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr"\n },\n "month-short": {\n "0": "this mth",\n "1": "next mth",\n "future": {\n "one": "in {0} mth",\n "other": "in {0} mth"\n },\n "past": {\n "one": "{0} mth ago",\n "other": "{0} mth ago"\n },\n "-1": "last mth"\n }\n },\n "en": {\n "nu": ["latn"],\n "year": {\n "0": "this year",\n "1": "next year",\n "future": {\n "one": "in {0} year",\n "other": "in {0} years"\n },\n "past": {\n "one": "{0} year ago",\n "other": "{0} years ago"\n },\n "-1": "last year"\n },\n "year-short": {\n "0": "this yr.",\n "1": "next yr.",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yr."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yr. ago"\n },\n "-1": "last yr."\n },\n "year-narrow": {\n "0": "this yr.",\n "1": "next yr.",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yr."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yr. ago"\n },\n "-1": "last yr."\n },\n "quarter": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "one": "in {0} quarter",\n "other": "in {0} quarters"\n },\n "past": {\n "one": "{0} quarter ago",\n "other": "{0} quarters ago"\n },\n "-1": "last quarter"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "month": {\n "0": "this month",\n "1": "next month",\n "future": {\n "one": "in {0} month",\n "other": "in {0} months"\n },\n "past": {\n "one": "{0} month ago",\n "other": "{0} months ago"\n },\n "-1": "last month"\n },\n "month-short": {\n "0": "this mo.",\n "1": "next mo.",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo."\n },\n "month-narrow": {\n "0": "this mo.",\n "1": "next mo.",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo."\n },\n "week": {\n "0": "this week",\n "1": "next week",\n "future": {\n "one": "in {0} week",\n "other": "in {0} weeks"\n },\n "past": {\n "one": "{0} week ago",\n "other": "{0} weeks ago"\n },\n "-1": "last week"\n },\n "week-short": {\n "0": "this wk.",\n "1": "next wk.",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wk."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wk. ago"\n },\n "-1": "last wk."\n },\n "week-narrow": {\n "0": "this wk.",\n "1": "next wk.",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wk."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wk. ago"\n },\n "-1": "last wk."\n },\n "day": {\n "0": "today",\n "1": "tomorrow",\n "future": {\n "one": "in {0} day",\n "other": "in {0} days"\n },\n "past": {\n "one": "{0} day ago",\n "other": "{0} days ago"\n },\n "-1": "yesterday"\n },\n "day-short": {\n "0": "today",\n "1": "tomorrow",\n "future": {\n "one": "in {0} day",\n "other": "in {0} days"\n },\n "past": {\n "one": "{0} day ago",\n "other": "{0} days ago"\n },\n "-1": "yesterday"\n },\n "day-narrow": {\n "0": "today",\n "1": "tomorrow",\n "future": {\n "one": "in {0} day",\n "other": "in {0} days"\n },\n "past": {\n "one": "{0} day ago",\n "other": "{0} days ago"\n },\n "-1": "yesterday"\n },\n "hour": {\n "0": "this hour",\n "future": {\n "one": "in {0} hour",\n "other": "in {0} hours"\n },\n "past": {\n "one": "{0} hour ago",\n "other": "{0} hours ago"\n }\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hr."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hr. ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hr."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hr. ago"\n }\n },\n "minute": {\n "0": "this minute",\n "future": {\n "one": "in {0} minute",\n "other": "in {0} minutes"\n },\n "past": {\n "one": "{0} minute ago",\n "other": "{0} minutes ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} min."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} min. ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} min."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} min. ago"\n }\n },\n "second": {\n "0": "now",\n "future": {\n "one": "in {0} second",\n "other": "in {0} seconds"\n },\n "past": {\n "one": "{0} second ago",\n "other": "{0} seconds ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} sec."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} sec. ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} sec."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} sec. ago"\n }\n }\n }\n },\n "availableLocales": ["en-001", "en-150", "en-AE", "en-AG", "en-AI", "en-AS", "en-AT", "en-AU", "en-BB", "en-BE", "en-BI", "en-BM", "en-BS", "en-BW", "en-BZ", "en-CA", "en-CC", "en-CH", "en-CK", "en-CM", "en-CX", "en-CY", "en-DE", "en-DG", "en-DK", "en-DM", "en-ER", "en-FI", "en-FJ", "en-FK", "en-FM", "en-GB", "en-GD", "en-GG", "en-GH", "en-GI", "en-GM", "en-GU", "en-GY", "en-HK", "en-IE", "en-IL", "en-IM", "en-IN", "en-IO", "en-JE", "en-JM", "en-KE", "en-KI", "en-KN", "en-KY", "en-LC", "en-LR", "en-LS", "en-MG", "en-MH", "en-MO", "en-MP", "en-MS", "en-MT", "en-MU", "en-MW", "en-MY", "en-NA", "en-NF", "en-NG", "en-NL", "en-NR", "en-NU", "en-NZ", "en-PG", "en-PH", "en-PK", "en-PN", "en-PR", "en-PW", "en-RW", "en-SB", "en-SC", "en-SD", "en-SE", "en-SG", "en-SH", "en-SI", "en-SL", "en-SS", "en-SX", "en-SZ", "en-TC", "en-TK", "en-TO", "en-TT", "en-TV", "en-TZ", "en-UG", "en-UM", "en-US-POSIX", "en-US", "en-VC", "en-VG", "en-VI", "en-VU", "en-WS", "en-ZA", "en-ZM", "en-ZW", "en"],\n "aliases": {},\n "parentLocales": {\n "en-150": "en-001",\n "en-AG": "en-001",\n "en-AI": "en-001",\n "en-AU": "en-001",\n "en-BB": "en-001",\n "en-BM": "en-001",\n "en-BS": "en-001",\n "en-BW": "en-001",\n "en-BZ": "en-001",\n "en-CA": "en-001",\n "en-CC": "en-001",\n "en-CK": "en-001",\n "en-CM": "en-001",\n "en-CX": "en-001",\n "en-CY": "en-001",\n "en-DG": "en-001",\n "en-DM": "en-001",\n "en-ER": "en-001",\n "en-FJ": "en-001",\n "en-FK": "en-001",\n "en-FM": "en-001",\n "en-GB": "en-001",\n "en-GD": "en-001",\n "en-GG": "en-001",\n "en-GH": "en-001",\n "en-GI": "en-001",\n "en-GM": "en-001",\n "en-GY": "en-001",\n "en-HK": "en-001",\n "en-IE": "en-001",\n "en-IL": "en-001",\n "en-IM": "en-001",\n "en-IN": "en-001",\n "en-IO": "en-001",\n "en-JE": "en-001",\n "en-JM": "en-001",\n "en-KE": "en-001",\n "en-KI": "en-001",\n "en-KN": "en-001",\n "en-KY": "en-001",\n "en-LC": "en-001",\n "en-LR": "en-001",\n "en-LS": "en-001",\n "en-MG": "en-001",\n "en-MO": "en-001",\n "en-MS": "en-001",\n "en-MT": "en-001",\n "en-MU": "en-001",\n "en-MW": "en-001",\n "en-MY": "en-001",\n "en-NA": "en-001",\n "en-NF": "en-001",\n "en-NG": "en-001",\n "en-NR": "en-001",\n "en-NU": "en-001",\n "en-NZ": "en-001",\n "en-PG": "en-001",\n "en-PH": "en-001",\n "en-PK": "en-001",\n "en-PN": "en-001",\n "en-PW": "en-001",\n "en-RW": "en-001",\n "en-SB": "en-001",\n "en-SC": "en-001",\n "en-SD": "en-001",\n "en-SG": "en-001",\n "en-SH": "en-001",\n "en-SL": "en-001",\n "en-SS": "en-001",\n "en-SX": "en-001",\n "en-SZ": "en-001",\n "en-TC": "en-001",\n "en-TK": "en-001",\n "en-TO": "en-001",\n "en-TT": "en-001",\n "en-TV": "en-001",\n "en-TZ": "en-001",\n "en-UG": "en-001",\n "en-VC": "en-001",\n "en-VG": "en-001",\n "en-VU": "en-001",\n "en-WS": "en-001",\n "en-ZA": "en-001",\n "en-ZM": "en-001",\n "en-ZW": "en-001",\n "en-AT": "en-150",\n "en-BE": "en-150",\n "en-CH": "en-150",\n "en-DE": "en-150",\n "en-DK": "en-150",\n "en-FI": "en-150",\n "en-NL": "en-150",\n "en-SE": "en-150",\n "en-SI": "en-150"\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9sb2NhbGUtZGF0YS9lbi5qcz8zZTMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjgwNzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlJlbGF0aXZlVGltZUZvcm1hdCAmJiB0eXBlb2YgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuX19hZGRMb2NhbGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0Ll9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwiZW4tMDAxXCI6IHtcbiAgICAgICAgXCJ5ZWFyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB5clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ5ZWFyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB5clwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB5clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0geXIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHlyIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXRyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBxdHIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF0ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0ci5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0ciBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbW9cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IG1vXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbW9cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtbyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2sgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3a1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2tcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdrXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gd2tcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2tcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3ayBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2tcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvdXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1pbiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbnV0ZS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZW4tMTUwXCI6IHtcbiAgICAgICAgXCJ5ZWFyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB5clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ5ZWFyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB5clwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB5clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0geXIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHlyIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXRyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBxdHIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF0ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0ci5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0ciBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbW9cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IG1vXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbW9cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtbyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2sgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3a1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2tcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdrXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gd2tcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2tcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3ayBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2tcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvdXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1pbiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbnV0ZS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZW4tQVVcIjoge1xuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0geXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXJzIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0geXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXJzIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0cnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHF0ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gcXRycyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgcXRyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdHJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtby5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbW8uIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtby5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbW8uIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3a3MgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdrXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3a3MgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdrXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBoclwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBocnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IGhyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBocnMgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gaHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGhycyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW4uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW5zIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbnV0ZS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW4uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW5zIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwibm93XCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gc2VjLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBzZWNzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBzZWNzIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlYy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2Vjc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gc2VjLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gc2VjcyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZW4tQ0FcIjoge1xuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHlyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXJzLiBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB5clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5cnMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHlycy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF0ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0ci5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0cnMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBxdHJzLiBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgcXRyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0ci5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHF0ci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBxdHIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtby5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbW9zLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtb3MuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtb3MuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtby4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vcy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHdrXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB3a1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHdrLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a3MuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB3ay4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrcy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdrXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3ay5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2tzLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2suIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3a3MuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3a1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBob3VyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gaHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IGhyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHJzLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBob3VyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gaHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IGhyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHJzLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5zLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWlucy4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtaW51dGVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtaW4uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1pbnMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW4uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW5zLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlYy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2Vjcy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHNlYy4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlY3MuIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlYy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2Vjcy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHNlYy4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlY3MuIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlbi1TR1wiOiB7XG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdHJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0ciBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtdGhcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IG10aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG10aFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtdGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG10aCBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbXRoIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtdGhcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlblwiOiB7XG4gICAgICAgIFwibnVcIjogW1wibGF0blwiXSxcbiAgICAgICAgXCJ5ZWFyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHllYXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHllYXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB5ZWFyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHllYXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ZWFyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB5ZWFycyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeWVhclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB5ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5ci5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHlyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXIuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeXIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlyLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0geXIuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB5ci4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdWFydGVyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdWFydGVyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXVhcnRlclwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdWFydGVyc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXVhcnRlciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gcXVhcnRlcnMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF1YXJ0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgcXRyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0ci5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHF0ci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBxdHIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdHJzLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXRyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gcXRycy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vbnRoXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb250aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vbnRoXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1vbnRoc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW9udGggYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vbnRocyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9udGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW8uXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW8uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1vLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtby4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW8uXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW8uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1vLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtby4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vla1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3ZWVrXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB3ZWVrXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gd2Vla1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3ZWVrc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2VlayBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gd2Vla3MgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdlZWtcIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2suXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB3ay5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3ay5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2suXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB3ay4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrLiBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2suXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3ay5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdrLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHdrLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3ay5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gd2suIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3ay5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRheVwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidG9kYXlcIixcbiAgICAgICAgICBcIjFcIjogXCJ0b21vcnJvd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGRheVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBkYXlzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBkYXkgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGRheXMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJ5ZXN0ZXJkYXlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidG9kYXlcIixcbiAgICAgICAgICBcIjFcIjogXCJ0b21vcnJvd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGRheVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBkYXlzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBkYXkgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGRheXMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJ5ZXN0ZXJkYXlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRvZGF5XCIsXG4gICAgICAgICAgXCIxXCI6IFwidG9tb3Jyb3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBkYXlcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gZGF5c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gZGF5IGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBkYXlzIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwieWVzdGVyZGF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBob3VyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhvdXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBob3VyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBob3VycyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBoci5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gaHIuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBoci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGhyLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBob3VyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gaHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gaHIuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBoci4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pbnV0ZVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW51dGVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW51dGUgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1pbnV0ZXMgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pbi5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbWluLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pbi5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbWluLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlY29uZFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBzZWNvbmRzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWNvbmQgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlY29uZHMgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWMuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHNlYy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHNlYy4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYy4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwibm93XCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gc2VjLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBzZWMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBzZWMuIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImF2YWlsYWJsZUxvY2FsZXNcIjogW1wiZW4tMDAxXCIsIFwiZW4tMTUwXCIsIFwiZW4tQUVcIiwgXCJlbi1BR1wiLCBcImVuLUFJXCIsIFwiZW4tQVNcIiwgXCJlbi1BVFwiLCBcImVuLUFVXCIsIFwiZW4tQkJcIiwgXCJlbi1CRVwiLCBcImVuLUJJXCIsIFwiZW4tQk1cIiwgXCJlbi1CU1wiLCBcImVuLUJXXCIsIFwiZW4tQlpcIiwgXCJlbi1DQVwiLCBcImVuLUNDXCIsIFwiZW4tQ0hcIiwgXCJlbi1DS1wiLCBcImVuLUNNXCIsIFwiZW4tQ1hcIiwgXCJlbi1DWVwiLCBcImVuLURFXCIsIFwiZW4tREdcIiwgXCJlbi1ES1wiLCBcImVuLURNXCIsIFwiZW4tRVJcIiwgXCJlbi1GSVwiLCBcImVuLUZKXCIsIFwiZW4tRktcIiwgXCJlbi1GTVwiLCBcImVuLUdCXCIsIFwiZW4tR0RcIiwgXCJlbi1HR1wiLCBcImVuLUdIXCIsIFwiZW4tR0lcIiwgXCJlbi1HTVwiLCBcImVuLUdVXCIsIFwiZW4tR1lcIiwgXCJlbi1IS1wiLCBcImVuLUlFXCIsIFwiZW4tSUxcIiwgXCJlbi1JTVwiLCBcImVuLUlOXCIsIFwiZW4tSU9cIiwgXCJlbi1KRVwiLCBcImVuLUpNXCIsIFwiZW4tS0VcIiwgXCJlbi1LSVwiLCBcImVuLUtOXCIsIFwiZW4tS1lcIiwgXCJlbi1MQ1wiLCBcImVuLUxSXCIsIFwiZW4tTFNcIiwgXCJlbi1NR1wiLCBcImVuLU1IXCIsIFwiZW4tTU9cIiwgXCJlbi1NUFwiLCBcImVuLU1TXCIsIFwiZW4tTVRcIiwgXCJlbi1NVVwiLCBcImVuLU1XXCIsIFwiZW4tTVlcIiwgXCJlbi1OQVwiLCBcImVuLU5GXCIsIFwiZW4tTkdcIiwgXCJlbi1OTFwiLCBcImVuLU5SXCIsIFwiZW4tTlVcIiwgXCJlbi1OWlwiLCBcImVuLVBHXCIsIFwiZW4tUEhcIiwgXCJlbi1QS1wiLCBcImVuLVBOXCIsIFwiZW4tUFJcIiwgXCJlbi1QV1wiLCBcImVuLVJXXCIsIFwiZW4tU0JcIiwgXCJlbi1TQ1wiLCBcImVuLVNEXCIsIFwiZW4tU0VcIiwgXCJlbi1TR1wiLCBcImVuLVNIXCIsIFwiZW4tU0lcIiwgXCJlbi1TTFwiLCBcImVuLVNTXCIsIFwiZW4tU1hcIiwgXCJlbi1TWlwiLCBcImVuLVRDXCIsIFwiZW4tVEtcIiwgXCJlbi1UT1wiLCBcImVuLVRUXCIsIFwiZW4tVFZcIiwgXCJlbi1UWlwiLCBcImVuLVVHXCIsIFwiZW4tVU1cIiwgXCJlbi1VUy1QT1NJWFwiLCBcImVuLVVTXCIsIFwiZW4tVkNcIiwgXCJlbi1WR1wiLCBcImVuLVZJXCIsIFwiZW4tVlVcIiwgXCJlbi1XU1wiLCBcImVuLVpBXCIsIFwiZW4tWk1cIiwgXCJlbi1aV1wiLCBcImVuXCJdLFxuICAgIFwiYWxpYXNlc1wiOiB7fSxcbiAgICBcInBhcmVudExvY2FsZXNcIjoge1xuICAgICAgXCJlbi0xNTBcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQUdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQUlcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQVVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQkJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQlNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQldcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQlpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ0FcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ0NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ0tcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ01cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ1hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ1lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tREdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRE1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRVJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRkpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRktcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0JcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0RcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0dcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR01cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR1lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSEtcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSUVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSUxcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSU1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSU5cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSU9cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSkVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS0VcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS0lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS05cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS1lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTENcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTFJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTFNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTUdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTU9cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVRcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVlcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTkFcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTkZcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTkdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTlJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTlVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTlpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUEdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUEhcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUEtcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUE5cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUFdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUldcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0JcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0RcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0dcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0xcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU1NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU1hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU1pcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVENcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVEtcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVE9cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVFRcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVFZcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVFpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVUdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVkNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVkdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVlVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tV1NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tWkFcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tWk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tWldcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQVRcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tQkVcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tQ0hcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tREVcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tREtcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tRklcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tTkxcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tU0VcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tU0lcIjogXCJlbi0xNTBcIlxuICAgIH1cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8079\n')},4033:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.RelativeTimeFormat && typeof Intl.RelativeTimeFormat.__addLocaleData === \'function\') {\n Intl.RelativeTimeFormat.__addLocaleData({\n "data": {\n "es-419": {\n "week-short": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. pas."\n },\n "week-narrow": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. pas."\n }\n },\n "es-AR": {\n "day-short": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} días",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} días",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-narrow": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} días",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} días",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n }\n },\n "es-MX": {\n "year": {\n "0": "este año",\n "1": "el año próximo",\n "future": {\n "one": "dentro de {0} año",\n "other": "dentro de {0} años"\n },\n "past": {\n "one": "hace {0} año",\n "other": "hace {0} años"\n },\n "-1": "el año pasado"\n },\n "year-short": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "en {0} a",\n "other": "en {0} a"\n },\n "past": {\n "one": "hace {0} a",\n "other": "hace {0} a"\n },\n "-1": "el año pasado"\n },\n "year-narrow": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "en {0} a",\n "other": "en {0} a"\n },\n "past": {\n "one": "-{0} a",\n "other": "-{0} a"\n },\n "-1": "el año pasado"\n },\n "quarter": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "en {0} trimestre",\n "other": "dentro de {0} trimetres"\n },\n "past": {\n "one": "hace {0} trimestre",\n "other": "hace {0} trimestres"\n },\n "-1": "el trimestre pasado"\n },\n "quarter-short": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "en {0} trim.",\n "other": "en {0} trim"\n },\n "past": {\n "one": "hace {0} trim.",\n "other": "hace {0} trim."\n },\n "-1": "el trimestre pasado"\n },\n "quarter-narrow": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "en {0} trim.",\n "other": "en {0} trim."\n },\n "past": {\n "one": "-{0} T",\n "other": "-{0} T"\n },\n "-1": "el trimestre pasado"\n },\n "month": {\n "0": "este mes",\n "1": "el mes próximo",\n "future": {\n "one": "en {0} mes",\n "other": "en {0} meses"\n },\n "past": {\n "one": "hace {0} mes",\n "other": "hace {0} meses"\n },\n "-1": "el mes pasado"\n },\n "month-short": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "en {0} m",\n "other": "en {0} m"\n },\n "past": {\n "one": "hace {0} m",\n "other": "hace {0} m"\n },\n "-1": "el mes pasado"\n },\n "month-narrow": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "+{0} m",\n "other": "+{0} m"\n },\n "past": {\n "one": "-{0} m",\n "other": "-{0} m"\n },\n "-1": "el mes pasado"\n },\n "week": {\n "0": "esta semana",\n "1": "la semana próxima",\n "future": {\n "one": "dentro de {0} semana",\n "other": "dentro de {0} semanas"\n },\n "past": {\n "one": "hace {0} semana",\n "other": "hace {0} semanas"\n },\n "-1": "la semana pasada"\n },\n "week-short": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "en {0} sem.",\n "other": "en {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. pas."\n },\n "day-short": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "en {0} día",\n "other": "en {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-narrow": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "+{0} día",\n "other": "en {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "hour-short": {\n "0": "esta hora",\n "future": {\n "one": "en {0} h",\n "other": "en {0} n"\n },\n "past": {\n "one": "hace {0} h",\n "other": "hace {0} h"\n }\n },\n "minute-short": {\n "0": "este minuto",\n "future": {\n "one": "en {0} min",\n "other": "en {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "minute-narrow": {\n "0": "este minuto",\n "future": {\n "one": "en {0} min",\n "other": "en {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "en {0} s",\n "other": "en {0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "+{0} s",\n "other": "+{0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n }\n },\n "es-PY": {\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n }\n },\n "es-SV": {\n "day": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "antier",\n "-1": "ayer"\n }\n },\n "es-US": {\n "year": {\n "0": "este año",\n "1": "el año próximo",\n "future": {\n "one": "dentro de {0} año",\n "other": "dentro de {0} años"\n },\n "past": {\n "one": "hace {0} año",\n "other": "hace {0} años"\n },\n "-1": "el año pasado"\n },\n "quarter": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trimetre",\n "other": "dentro de {0} trimetres"\n },\n "past": {\n "one": "hace {0} trimestre",\n "other": "hace {0} trimestres"\n },\n "-1": "el trimestre pasado"\n },\n "month": {\n "0": "este mes",\n "1": "el mes próximo",\n "future": {\n "one": "dentro de {0} mes",\n "other": "dentro de {0} meses"\n },\n "past": {\n "one": "hace {0} mes",\n "other": "hace {0} meses"\n },\n "-1": "el mes pasado"\n },\n "week": {\n "0": "esta semana",\n "1": "la semana próxima",\n "future": {\n "one": "dentro de {0} semana",\n "other": "dentro de {0} semanas"\n },\n "past": {\n "one": "hace {0} semana",\n "other": "hace {0} semanas"\n },\n "-1": "la semana pasada"\n }\n },\n "es": {\n "nu": ["latn"],\n "year": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "dentro de {0} año",\n "other": "dentro de {0} años"\n },\n "past": {\n "one": "hace {0} año",\n "other": "hace {0} años"\n },\n "-1": "el año pasado"\n },\n "year-short": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "dentro de {0} a",\n "other": "dentro de {0} a"\n },\n "past": {\n "one": "hace {0} a",\n "other": "hace {0} a"\n },\n "-1": "el año pasado"\n },\n "year-narrow": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "dentro de {0} a",\n "other": "dentro de {0} a"\n },\n "past": {\n "one": "hace {0} a",\n "other": "hace {0} a"\n },\n "-1": "el año pasado"\n },\n "quarter": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trimestre",\n "other": "dentro de {0} trimestres"\n },\n "past": {\n "one": "hace {0} trimestre",\n "other": "hace {0} trimestres"\n },\n "-1": "el trimestre pasado"\n },\n "quarter-short": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trim.",\n "other": "dentro de {0} trim."\n },\n "past": {\n "one": "hace {0} trim.",\n "other": "hace {0} trim."\n },\n "-1": "el trimestre pasado"\n },\n "quarter-narrow": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trim.",\n "other": "dentro de {0} trim."\n },\n "past": {\n "one": "hace {0} trim.",\n "other": "hace {0} trim."\n },\n "-1": "el trimestre pasado"\n },\n "month": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "dentro de {0} mes",\n "other": "dentro de {0} meses"\n },\n "past": {\n "one": "hace {0} mes",\n "other": "hace {0} meses"\n },\n "-1": "el mes pasado"\n },\n "month-short": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "dentro de {0} m",\n "other": "dentro de {0} m"\n },\n "past": {\n "one": "hace {0} m",\n "other": "hace {0} m"\n },\n "-1": "el mes pasado"\n },\n "month-narrow": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "dentro de {0} m",\n "other": "dentro de {0} m"\n },\n "past": {\n "one": "hace {0} m",\n "other": "hace {0} m"\n },\n "-1": "el mes pasado"\n },\n "week": {\n "0": "esta semana",\n "1": "la próxima semana",\n "future": {\n "one": "dentro de {0} semana",\n "other": "dentro de {0} semanas"\n },\n "past": {\n "one": "hace {0} semana",\n "other": "hace {0} semanas"\n },\n "-1": "la semana pasada"\n },\n "week-short": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. ant."\n },\n "week-narrow": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. ant."\n },\n "day": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-short": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-narrow": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "hour": {\n "0": "esta hora",\n "future": {\n "one": "dentro de {0} hora",\n "other": "dentro de {0} horas"\n },\n "past": {\n "one": "hace {0} hora",\n "other": "hace {0} horas"\n }\n },\n "hour-short": {\n "0": "esta hora",\n "future": {\n "one": "dentro de {0} h",\n "other": "dentro de {0} h"\n },\n "past": {\n "one": "hace {0} h",\n "other": "hace {0} h"\n }\n },\n "hour-narrow": {\n "0": "esta hora",\n "future": {\n "one": "dentro de {0} h",\n "other": "dentro de {0} h"\n },\n "past": {\n "one": "hace {0} h",\n "other": "hace {0} h"\n }\n },\n "minute": {\n "0": "este minuto",\n "future": {\n "one": "dentro de {0} minuto",\n "other": "dentro de {0} minutos"\n },\n "past": {\n "one": "hace {0} minuto",\n "other": "hace {0} minutos"\n }\n },\n "minute-short": {\n "0": "este minuto",\n "future": {\n "one": "dentro de {0} min",\n "other": "dentro de {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "minute-narrow": {\n "0": "este minuto",\n "future": {\n "one": "dentro de {0} min",\n "other": "dentro de {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "second": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} segundo",\n "other": "dentro de {0} segundos"\n },\n "past": {\n "one": "hace {0} segundo",\n "other": "hace {0} segundos"\n }\n },\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} s",\n "other": "dentro de {0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} s",\n "other": "dentro de {0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n }\n }\n },\n "availableLocales": ["es-419", "es-AR", "es-BO", "es-BR", "es-BZ", "es-CL", "es-CO", "es-CR", "es-CU", "es-DO", "es-EA", "es-EC", "es-GQ", "es-GT", "es-HN", "es-IC", "es-MX", "es-NI", "es-PA", "es-PE", "es-PH", "es-PR", "es-PY", "es-SV", "es-US", "es-UY", "es-VE", "es"],\n "aliases": {},\n "parentLocales": {\n "es-AR": "es-419",\n "es-BO": "es-419",\n "es-BR": "es-419",\n "es-BZ": "es-419",\n "es-CL": "es-419",\n "es-CO": "es-419",\n "es-CR": "es-419",\n "es-CU": "es-419",\n "es-DO": "es-419",\n "es-EC": "es-419",\n "es-GT": "es-419",\n "es-HN": "es-419",\n "es-MX": "es-419",\n "es-NI": "es-419",\n "es-PA": "es-419",\n "es-PE": "es-419",\n "es-PR": "es-419",\n "es-PY": "es-419",\n "es-SV": "es-419",\n "es-US": "es-419",\n "es-UY": "es-419",\n "es-VE": "es-419"\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9sb2NhbGUtZGF0YS9lcy5qcz9mY2VlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHNCQUFzQixFQUFFO0FBQ3hCLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHNCQUFzQixFQUFFO0FBQ3hCLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QixXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjQwMzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlJlbGF0aXZlVGltZUZvcm1hdCAmJiB0eXBlb2YgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuX19hZGRMb2NhbGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0Ll9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwiZXMtNDE5XCI6IHtcbiAgICAgICAgXCJ3ZWVrLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIHBhcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIHBhcy5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlcy1BUlwiOiB7XG4gICAgICAgIFwiZGF5LXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJob3lcIixcbiAgICAgICAgICBcIjFcIjogXCJtYcOxYW5hXCIsXG4gICAgICAgICAgXCIyXCI6IFwicGFzYWRvIG1hw7FhbmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGTDrWFzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMlwiOiBcImFudGVheWVyXCIsXG4gICAgICAgICAgXCItMVwiOiBcImF5ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImhveVwiLFxuICAgICAgICAgIFwiMVwiOiBcIm1hw7FhbmFcIixcbiAgICAgICAgICBcIjJcIjogXCJwYXNhZG8gbWHDsWFuYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBkw61hc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gZMOtYXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0yXCI6IFwiYW50ZWF5ZXJcIixcbiAgICAgICAgICBcIi0xXCI6IFwiYXllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJhaG9yYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlZy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZWcuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiYWhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc2VnLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gc2VnLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBzZWcuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gc2VnLlwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlcy1NWFwiOiB7XG4gICAgICAgIFwieWVhclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBhw7FvXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgYcOxbyBwcsOzeGltb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBhw7FvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBhw7Fvc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBhw7FvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gYcOxb3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIGHDsW8gcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ5ZWFyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIGHDsW9cIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyBhw7FvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBhw7FvIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgYcOxb1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIGHDsW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBhXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiLXswfSBhXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBhw7FvIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSB0cmltZXN0cmVcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyB0cmltZXN0cmVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW1ldHJlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltZXN0cmVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCB0cmltZXN0cmUgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZW4gezB9IHRyaW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IHRyaW1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgdHJpbWVzdHJlIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgdHJpbWVzdHJlXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgcHLDs3hpbW8gdHJpbWVzdHJlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gdHJpbS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiLXswfSBUXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBUXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCB0cmltZXN0cmUgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBtZXNcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBtZXMgcHLDs3hpbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBtZXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbWVzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIG1lcyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1lc1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIG1lc1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZW4gezB9IG1cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgbWVzIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1lc1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIG1lc1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiK3swfSBtXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcIi17MH0gbVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgbWVzIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vla1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBzZW1hbmFcIixcbiAgICAgICAgICBcIjFcIjogXCJsYSBzZW1hbmEgcHLDs3hpbWFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc2VtYW5hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW1hbmFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbWFuYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNlbWFuYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhIHNlbWFuYSBwYXNhZGFcIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGEgc2VtLlwiLFxuICAgICAgICAgIFwiMVwiOiBcInByw7N4LiBzZW0uXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gc2VtLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIHBhcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiaG95XCIsXG4gICAgICAgICAgXCIxXCI6IFwibWHDsWFuYVwiLFxuICAgICAgICAgIFwiMlwiOiBcInBhc2FkbyBtYcOxYW5hXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMlwiOiBcImFudGVheWVyXCIsXG4gICAgICAgICAgXCItMVwiOiBcImF5ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImhveVwiLFxuICAgICAgICAgIFwiMVwiOiBcIm1hw7FhbmFcIixcbiAgICAgICAgICBcIjJcIjogXCJwYXNhZG8gbWHDsWFuYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiK3swfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGTDrWFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0yXCI6IFwiYW50ZWF5ZXJcIixcbiAgICAgICAgICBcIi0xXCI6IFwiYXllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gaFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGhcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBoXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1pbnV0b1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZW4gezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBtaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbWluXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbWluXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBtaW51dG9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gbWluXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IG1pblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiYWhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJhaG9yYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiK3swfSBzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImVzLVBZXCI6IHtcbiAgICAgICAgXCJzZWNvbmQtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImFob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNlZy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHNlZy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gc2VnLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNlZy5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJhaG9yYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlZy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZWcuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImVzLVNWXCI6IHtcbiAgICAgICAgXCJkYXlcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImhveVwiLFxuICAgICAgICAgIFwiMVwiOiBcIm1hw7FhbmFcIixcbiAgICAgICAgICBcIjJcIjogXCJwYXNhZG8gbWHDsWFuYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMlwiOiBcImFudGllclwiLFxuICAgICAgICAgIFwiLTFcIjogXCJheWVyXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZXMtVVNcIjoge1xuICAgICAgICBcInllYXJcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgYcOxb1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIGHDsW8gcHLDs3hpbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gYcOxb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gYcOxb3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gYcOxb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGHDsW9zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBhw7FvIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSB0cmltZXN0cmVcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyB0cmltZXN0cmVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gdHJpbWV0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW1ldHJlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltZXN0cmVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCB0cmltZXN0cmUgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBtZXNcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBtZXMgcHLDs3hpbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gbWVzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBtZXNlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtZXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtZXNlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgbWVzIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vla1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBzZW1hbmFcIixcbiAgICAgICAgICBcIjFcIjogXCJsYSBzZW1hbmEgcHLDs3hpbWFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc2VtYW5hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW1hbmFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbWFuYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNlbWFuYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhIHNlbWFuYSBwYXNhZGFcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlc1wiOiB7XG4gICAgICAgIFwibnVcIjogW1wibGF0blwiXSxcbiAgICAgICAgXCJ5ZWFyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIGHDsW9cIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyBhw7FvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGHDsW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGHDsW9zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGHDsW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBhw7Fvc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgYcOxbyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgYcOxb1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIGHDsW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gYVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBhXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gYVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgYcOxbyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIGHDsW9cIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyBhw7FvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIGHDsW8gcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW1lc3RyZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gdHJpbWVzdHJlXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gdHJpbWVzdHJlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgdHJpbWVzdHJlIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSB0cmltZXN0cmVcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyB0cmltZXN0cmVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHRyaW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gdHJpbS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIHRyaW1lc3RyZSBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSB0cmltLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gdHJpbS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgdHJpbWVzdHJlIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGhcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgbWVzXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgcHLDs3hpbW8gbWVzXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IG1lc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbWVzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIG1lcyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1lc1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIG1lc1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBtXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IG1cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBtZXMgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgbWVzXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgcHLDs3hpbW8gbWVzXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IG1cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIG1lcyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWtcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGEgc2VtYW5hXCIsXG4gICAgICAgICAgXCIxXCI6IFwibGEgcHLDs3hpbWEgc2VtYW5hXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNlbWFuYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gc2VtYW5hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBzZW1hbmFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW1hbmFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYSBzZW1hbmEgcGFzYWRhXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIGFudC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIGFudC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRheVwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiaG95XCIsXG4gICAgICAgICAgXCIxXCI6IFwibWHDsWFuYVwiLFxuICAgICAgICAgIFwiMlwiOiBcInBhc2FkbyBtYcOxYW5hXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGTDrWFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGTDrWFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0yXCI6IFwiYW50ZWF5ZXJcIixcbiAgICAgICAgICBcIi0xXCI6IFwiYXllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF5LXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJob3lcIixcbiAgICAgICAgICBcIjFcIjogXCJtYcOxYW5hXCIsXG4gICAgICAgICAgXCIyXCI6IFwicGFzYWRvIG1hw7FhbmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTJcIjogXCJhbnRlYXllclwiLFxuICAgICAgICAgIFwiLTFcIjogXCJheWVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXktbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJob3lcIixcbiAgICAgICAgICBcIjFcIjogXCJtYcOxYW5hXCIsXG4gICAgICAgICAgXCIyXCI6IFwicGFzYWRvIG1hw7FhbmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTJcIjogXCJhbnRlYXllclwiLFxuICAgICAgICAgIFwiLTFcIjogXCJheWVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIGhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gaG9yYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gaG9yYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gaG9yYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGhvcmFzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGhcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gaFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGhcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gaFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGVcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgbWludXRvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IG1pbnV0b1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gbWludXRvc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtaW51dG9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtaW51dG9zXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1pbnV0b1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1pbnV0b1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImFob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNlZ3VuZG9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHNlZ3VuZG9zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlZ3VuZG9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZWd1bmRvc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiYWhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImFob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJhdmFpbGFibGVMb2NhbGVzXCI6IFtcImVzLTQxOVwiLCBcImVzLUFSXCIsIFwiZXMtQk9cIiwgXCJlcy1CUlwiLCBcImVzLUJaXCIsIFwiZXMtQ0xcIiwgXCJlcy1DT1wiLCBcImVzLUNSXCIsIFwiZXMtQ1VcIiwgXCJlcy1ET1wiLCBcImVzLUVBXCIsIFwiZXMtRUNcIiwgXCJlcy1HUVwiLCBcImVzLUdUXCIsIFwiZXMtSE5cIiwgXCJlcy1JQ1wiLCBcImVzLU1YXCIsIFwiZXMtTklcIiwgXCJlcy1QQVwiLCBcImVzLVBFXCIsIFwiZXMtUEhcIiwgXCJlcy1QUlwiLCBcImVzLVBZXCIsIFwiZXMtU1ZcIiwgXCJlcy1VU1wiLCBcImVzLVVZXCIsIFwiZXMtVkVcIiwgXCJlc1wiXSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHtcbiAgICAgIFwiZXMtQVJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQk9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlpcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ0xcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ09cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1JcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1VcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRE9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRUNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtR1RcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtSE5cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTVhcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTklcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEFcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEVcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtU1ZcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVkVcIjogXCJlcy00MTlcIlxuICAgIH1cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4033\n')},9584:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.RelativeTimeFormat && typeof Intl.RelativeTimeFormat.__addLocaleData === \'function\') {\n Intl.RelativeTimeFormat.__addLocaleData({\n "data": {\n "ses": {\n "nu": ["latn"],\n "year": {\n "0": "this year",\n "1": "next year",\n "future": {\n "other": "+{0} y"\n },\n "past": {\n "other": "-{0} y"\n },\n "-1": "last year"\n },\n "year-short": {\n "0": "this year",\n "1": "next year",\n "future": {\n "other": "+{0} y"\n },\n "past": {\n "other": "-{0} y"\n },\n "-1": "last year"\n },\n "year-narrow": {\n "0": "this year",\n "1": "next year",\n "future": {\n "other": "+{0} y"\n },\n "past": {\n "other": "-{0} y"\n },\n "-1": "last year"\n },\n "quarter": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "other": "+{0} Q"\n },\n "past": {\n "other": "-{0} Q"\n },\n "-1": "last quarter"\n },\n "quarter-short": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "other": "+{0} Q"\n },\n "past": {\n "other": "-{0} Q"\n },\n "-1": "last quarter"\n },\n "quarter-narrow": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "other": "+{0} Q"\n },\n "past": {\n "other": "-{0} Q"\n },\n "-1": "last quarter"\n },\n "month": {\n "0": "this month",\n "1": "next month",\n "future": {\n "other": "+{0} m"\n },\n "past": {\n "other": "-{0} m"\n },\n "-1": "last month"\n },\n "month-short": {\n "0": "this month",\n "1": "next month",\n "future": {\n "other": "+{0} m"\n },\n "past": {\n "other": "-{0} m"\n },\n "-1": "last month"\n },\n "month-narrow": {\n "0": "this month",\n "1": "next month",\n "future": {\n "other": "+{0} m"\n },\n "past": {\n "other": "-{0} m"\n },\n "-1": "last month"\n },\n "week": {\n "0": "this week",\n "1": "next week",\n "future": {\n "other": "+{0} w"\n },\n "past": {\n "other": "-{0} w"\n },\n "-1": "last week"\n },\n "week-short": {\n "0": "this week",\n "1": "next week",\n "future": {\n "other": "+{0} w"\n },\n "past": {\n "other": "-{0} w"\n },\n "-1": "last week"\n },\n "week-narrow": {\n "0": "this week",\n "1": "next week",\n "future": {\n "other": "+{0} w"\n },\n "past": {\n "other": "-{0} w"\n },\n "-1": "last week"\n },\n "day": {\n "0": "Hõo",\n "1": "Suba",\n "future": {\n "other": "+{0} d"\n },\n "past": {\n "other": "-{0} d"\n },\n "-1": "Bi"\n },\n "day-short": {\n "0": "Hõo",\n "1": "Suba",\n "future": {\n "other": "+{0} d"\n },\n "past": {\n "other": "-{0} d"\n },\n "-1": "Bi"\n },\n "day-narrow": {\n "0": "Hõo",\n "1": "Suba",\n "future": {\n "other": "+{0} d"\n },\n "past": {\n "other": "-{0} d"\n },\n "-1": "Bi"\n },\n "hour": {\n "0": "this hour",\n "future": {\n "other": "+{0} h"\n },\n "past": {\n "other": "-{0} h"\n }\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "other": "+{0} h"\n },\n "past": {\n "other": "-{0} h"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "other": "+{0} h"\n },\n "past": {\n "other": "-{0} h"\n }\n },\n "minute": {\n "0": "this minute",\n "future": {\n "other": "+{0} min"\n },\n "past": {\n "other": "-{0} min"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "other": "+{0} min"\n },\n "past": {\n "other": "-{0} min"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "other": "+{0} min"\n },\n "past": {\n "other": "-{0} min"\n }\n },\n "second": {\n "0": "now",\n "future": {\n "other": "+{0} s"\n },\n "past": {\n "other": "-{0} s"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "other": "+{0} s"\n },\n "past": {\n "other": "-{0} s"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "other": "+{0} s"\n },\n "past": {\n "other": "-{0} s"\n }\n }\n }\n },\n "availableLocales": ["ses"],\n "aliases": {},\n "parentLocales": {}\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9sb2NhbGUtZGF0YS9zZXMuanM/Mjg4ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI5NTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGdlbmVyYXRlZCAqL1xuLy8gcHJldHRpZXItaWdub3JlXG5pZiAoSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQgJiYgdHlwZW9mIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0Ll9fYWRkTG9jYWxlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdC5fX2FkZExvY2FsZURhdGEoe1xuICAgIFwiZGF0YVwiOiB7XG4gICAgICBcInNlc1wiOiB7XG4gICAgICAgIFwibnVcIjogW1wibGF0blwiXSxcbiAgICAgICAgXCJ5ZWFyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHllYXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHllYXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSB5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSB5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHllYXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeWVhclwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeWVhclwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeWVhclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeWVhclwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeWVhclwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeWVhclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdWFydGVyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdWFydGVyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gUVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gUVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBxdWFydGVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF1YXJ0ZXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF1YXJ0ZXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF1YXJ0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF1YXJ0ZXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF1YXJ0ZXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF1YXJ0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vbnRoXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb250aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9udGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vbnRoXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb250aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9udGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb250aFwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9udGhcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vbnRoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHdlZWtcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdlZWtcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSB3XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSB3XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdlZWtcIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2Vla1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2Vla1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2Vla1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2Vla1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2Vla1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2Vla1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF5XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJIw7VvXCIsXG4gICAgICAgICAgXCIxXCI6IFwiU3ViYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcIkJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXktc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIkjDtW9cIixcbiAgICAgICAgICBcIjFcIjogXCJTdWJhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiQmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIkjDtW9cIixcbiAgICAgICAgICBcIjFcIjogXCJTdWJhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiQmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvdXJcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBoXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBoXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGVcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gbWluXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gbWluXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gbWluXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwibm93XCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImF2YWlsYWJsZUxvY2FsZXNcIjogW1wic2VzXCJdLFxuICAgIFwiYWxpYXNlc1wiOiB7fSxcbiAgICBcInBhcmVudExvY2FsZXNcIjoge31cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9584\n')},8709:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar core_1 = __webpack_require__(9905);\n\nif (!('RelativeTimeFormat' in Intl)) {\n Object.defineProperty(Intl, 'RelativeTimeFormat', {\n value: core_1.default,\n writable: true,\n enumerable: false,\n configurable: true\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9wb2x5ZmlsbC5qcz83ODNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQzs7QUFFRixhQUFhLG1CQUFPLENBQUMsSUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6Ijg3MDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5cbmlmICghKCdSZWxhdGl2ZVRpbWVGb3JtYXQnIGluIEludGwpKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRsLCAnUmVsYXRpdmVUaW1lRm9ybWF0Jywge1xuICAgIHZhbHVlOiBjb3JlXzEuZGVmYXVsdCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8709\n")},5316:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("__webpack_require__(8709);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvcG9seWZpbGwuanM/OWM0ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLElBQWlCIiwiZmlsZSI6IjUzMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL2Rpc3QvcG9seWZpbGwnKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5316\n")},2650:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "InternalSlotToken": function() { return /* reexport */ InternalSlotToken; },\n "SANCTIONED_UNITS": function() { return /* reexport */ SANCTIONED_UNITS; },\n "createResolveLocale": function() { return /* reexport */ createResolveLocale; },\n "defaultNumberOption": function() { return /* reexport */ defaultNumberOption; },\n "getAliasesByLang": function() { return /* reexport */ getAliasesByLang; },\n "getCanonicalLocales": function() { return /* reexport */ getCanonicalLocales; },\n "getInternalSlot": function() { return /* reexport */ getInternalSlot; },\n "getLocaleHierarchy": function() { return /* reexport */ getLocaleHierarchy; },\n "getMultiInternalSlots": function() { return /* reexport */ getMultiInternalSlots; },\n "getNumberOption": function() { return /* reexport */ getNumberOption; },\n "getOption": function() { return /* reexport */ getOption; },\n "getParentLocalesByLang": function() { return /* reexport */ getParentLocalesByLang; },\n "invariant": function() { return /* reexport */ invariant/* invariant */.k; },\n "isLiteralPart": function() { return /* reexport */ isLiteralPart; },\n "isMissingLocaleDataError": function() { return /* reexport */ isMissingLocaleDataError; },\n "isWellFormedCurrencyCode": function() { return /* reexport */ isWellFormedCurrencyCode; },\n "objectIs": function() { return /* reexport */ objectIs; },\n "partitionPattern": function() { return /* reexport */ partitionPattern; },\n "removeUnitNamespace": function() { return /* reexport */ removeUnitNamespace; },\n "selectUnit": function() { return /* reexport */ selectUnit; },\n "setInternalSlot": function() { return /* reexport */ setInternalSlot; },\n "setMultiInternalSlots": function() { return /* reexport */ setMultiInternalSlots; },\n "setNumberFormatDigitOptions": function() { return /* reexport */ setNumberFormatDigitOptions; },\n "supportedLocales": function() { return /* reexport */ supportedLocales; },\n "toObject": function() { return /* reexport */ toObject; },\n "toString": function() { return /* reexport */ polyfill_utils_toString; },\n "unpackData": function() { return /* reexport */ unpackData; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/diff.js\nvar __assign = undefined && undefined.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar MS_PER_SECOND = 1e3;\nvar SECS_PER_MIN = 60;\nvar SECS_PER_HOUR = SECS_PER_MIN * 60;\nvar SECS_PER_DAY = SECS_PER_HOUR * 24;\nvar SECS_PER_WEEK = SECS_PER_DAY * 7;\nfunction selectUnit(from, to, thresholds) {\n if (to === void 0) {\n to = Date.now();\n }\n\n if (thresholds === void 0) {\n thresholds = {};\n }\n\n var resolvedThresholds = __assign(__assign({}, DEFAULT_THRESHOLDS), thresholds || {});\n\n var secs = (+from - +to) / MS_PER_SECOND;\n\n if (Math.abs(secs) < resolvedThresholds.second) {\n return {\n value: Math.round(secs),\n unit: \'second\'\n };\n }\n\n var mins = secs / SECS_PER_MIN;\n\n if (Math.abs(mins) < resolvedThresholds.minute) {\n return {\n value: Math.round(mins),\n unit: \'minute\'\n };\n }\n\n var hours = secs / SECS_PER_HOUR;\n\n if (Math.abs(hours) < resolvedThresholds.hour) {\n return {\n value: Math.round(hours),\n unit: \'hour\'\n };\n }\n\n var days = secs / SECS_PER_DAY;\n\n if (Math.abs(days) < resolvedThresholds.day) {\n return {\n value: Math.round(days),\n unit: \'day\'\n };\n }\n\n var fromDate = new Date(from);\n var toDate = new Date(to);\n var years = fromDate.getFullYear() - toDate.getFullYear();\n\n if (Math.round(Math.abs(years)) > 0) {\n return {\n value: Math.round(years),\n unit: \'year\'\n };\n }\n\n var months = years * 12 + fromDate.getMonth() - toDate.getMonth();\n\n if (Math.round(Math.abs(months)) > 0) {\n return {\n value: Math.round(months),\n unit: \'month\'\n };\n }\n\n var weeks = secs / SECS_PER_WEEK;\n return {\n value: Math.round(weeks),\n unit: \'week\'\n };\n}\nvar DEFAULT_THRESHOLDS = {\n second: 45,\n minute: 45,\n hour: 22,\n day: 5\n};\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/aliases.js\n/* @generated */\n// prettier-ignore \n/* harmony default export */ var aliases = ({\n "aa-SAAHO": "ssy",\n "aam": "aas",\n "aar": "aa",\n "abk": "ab",\n "adp": "dz",\n "afr": "af",\n "aju": "jrb",\n "aka": "ak",\n "alb": "sq",\n "als": "sq",\n "amh": "am",\n "ara": "ar",\n "arb": "ar",\n "arg": "an",\n "arm": "hy",\n "art-lojban": "jbo",\n "asd": "snz",\n "asm": "as",\n "aue": "ktz",\n "ava": "av",\n "ave": "ae",\n "aym": "ay",\n "ayr": "ay",\n "ayx": "nun",\n "az-AZ": "az-Latn-AZ",\n "aze": "az",\n "azj": "az",\n "bak": "ba",\n "bam": "bm",\n "baq": "eu",\n "bcc": "bal",\n "bcl": "bik",\n "bel": "be",\n "ben": "bn",\n "bgm": "bcg",\n "bh": "bho",\n "bih": "bho",\n "bis": "bi",\n "bjd": "drl",\n "bod": "bo",\n "bos": "bs",\n "bre": "br",\n "bs-BA": "bs-Latn-BA",\n "bul": "bg",\n "bur": "my",\n "bxk": "luy",\n "bxr": "bua",\n "cat": "ca",\n "ccq": "rki",\n "cel-gaulish": "xtg-x-cel-gaulish",\n "ces": "cs",\n "cha": "ch",\n "che": "ce",\n "chi": "zh",\n "chu": "cu",\n "chv": "cv",\n "cjr": "mom",\n "cka": "cmr",\n "cld": "syr",\n "cmk": "xch",\n "cmn": "zh",\n "cnr": "sr-ME",\n "cor": "kw",\n "cos": "co",\n "coy": "pij",\n "cqu": "quh",\n "cre": "cr",\n "cwd": "cr",\n "cym": "cy",\n "cze": "cs",\n "dan": "da",\n "deu": "de",\n "dgo": "doi",\n "dhd": "mwr",\n "dik": "din",\n "diq": "zza",\n "dit": "dif",\n "div": "dv",\n "drh": "mn",\n "drw": "fa-af",\n "dut": "nl",\n "dzo": "dz",\n "ekk": "et",\n "ell": "el",\n "emk": "man",\n "eng": "en",\n "epo": "eo",\n "esk": "ik",\n "est": "et",\n "eus": "eu",\n "ewe": "ee",\n "fao": "fo",\n "fas": "fa",\n "fat": "ak",\n "fij": "fj",\n "fin": "fi",\n "fra": "fr",\n "fre": "fr",\n "fry": "fy",\n "fuc": "ff",\n "ful": "ff",\n "gav": "dev",\n "gaz": "om",\n "gbo": "grb",\n "geo": "ka",\n "ger": "de",\n "gfx": "vaj",\n "ggn": "gvr",\n "gla": "gd",\n "gle": "ga",\n "glg": "gl",\n "glv": "gv",\n "gno": "gon",\n "gre": "el",\n "grn": "gn",\n "gti": "nyc",\n "gug": "gn",\n "guj": "gu",\n "guv": "duz",\n "gya": "gba",\n "ha-Latn-GH": "ha-GH",\n "ha-Latn-NE": "ha-NE",\n "ha-Latn-NG": "ha-NG",\n "hat": "ht",\n "hau": "ha",\n "hbs": "sr-Latn",\n "hdn": "hai",\n "hea": "hmn",\n "heb": "he",\n "her": "hz",\n "him": "srx",\n "hin": "hi",\n "hmo": "ho",\n "hrr": "jal",\n "hrv": "hr",\n "hun": "hu",\n "hye": "hy",\n "i-ami": "ami",\n "i-bnn": "bnn",\n "i-hak": "hak",\n "i-klingon": "tlh",\n "i-lux": "lb",\n "i-navajo": "nv",\n "i-pwn": "pwn",\n "i-tao": "tao",\n "i-tay": "tay",\n "i-tsu": "tsu",\n "i-default": "en-x-i-default",\n "i-enochian": "und-x-i-enochian",\n "i-mingo": "see-x-i-mingo",\n "ibi": "opa",\n "ibo": "ig",\n "ice": "is",\n "ido": "io",\n "iii": "ii",\n "ike": "iu",\n "iku": "iu",\n "ile": "ie",\n "ilw": "gal",\n "in": "id",\n "ina": "ia",\n "ind": "id",\n "ipk": "ik",\n "isl": "is",\n "ita": "it",\n "iw": "he",\n "jav": "jv",\n "jeg": "oyb",\n "ji": "yi",\n "jpn": "ja",\n "jw": "jv",\n "kal": "kl",\n "kan": "kn",\n "kas": "ks",\n "kat": "ka",\n "kau": "kr",\n "kaz": "kk",\n "kgc": "tdf",\n "kgh": "kml",\n "khk": "mn",\n "khm": "km",\n "kik": "ki",\n "kin": "rw",\n "kir": "ky",\n "kk-Cyrl-KZ": "kk-KZ",\n "kmr": "ku",\n "knc": "kr",\n "kng": "kg",\n "knn": "kok",\n "koj": "kwv",\n "kom": "kv",\n "kon": "kg",\n "kor": "ko",\n "kpv": "kv",\n "krm": "bmf",\n "ks-Arab-IN": "ks-IN",\n "ktr": "dtp",\n "kua": "kj",\n "kur": "ku",\n "kvs": "gdj",\n "kwq": "yam",\n "kxe": "tvd",\n "ky-Cyrl-KG": "ky-KG",\n "kzj": "dtp",\n "kzt": "dtp",\n "lao": "lo",\n "lat": "la",\n "lav": "lv",\n "lbk": "bnc",\n "lii": "raq",\n "lim": "li",\n "lin": "ln",\n "lit": "lt",\n "llo": "ngt",\n "lmm": "rmx",\n "ltz": "lb",\n "lub": "lu",\n "lug": "lg",\n "lvs": "lv",\n "mac": "mk",\n "mah": "mh",\n "mal": "ml",\n "mao": "mi",\n "mar": "mr",\n "may": "ms",\n "meg": "cir",\n "mhr": "chm",\n "mkd": "mk",\n "mlg": "mg",\n "mlt": "mt",\n "mn-Cyrl-MN": "mn-MN",\n "mnk": "man",\n "mo": "ro",\n "mol": "ro",\n "mon": "mn",\n "mri": "mi",\n "ms-Latn-BN": "ms-BN",\n "ms-Latn-MY": "ms-MY",\n "ms-Latn-SG": "ms-SG",\n "msa": "ms",\n "mst": "mry",\n "mup": "raj",\n "mwj": "vaj",\n "mya": "my",\n "myd": "aog",\n "myt": "mry",\n "nad": "xny",\n "nau": "na",\n "nav": "nv",\n "nbl": "nr",\n "ncp": "kdz",\n "nde": "nd",\n "ndo": "ng",\n "nep": "ne",\n "nld": "nl",\n "nno": "nn",\n "nns": "nbr",\n "nnx": "ngv",\n "no": "nb",\n "no-bok": "nb",\n "no-BOKMAL": "nb",\n "no-nyn": "nn",\n "no-NYNORSK": "nn",\n "nob": "nb",\n "nor": "nb",\n "npi": "ne",\n "nts": "pij",\n "nya": "ny",\n "oci": "oc",\n "ojg": "oj",\n "oji": "oj",\n "ori": "or",\n "orm": "om",\n "ory": "or",\n "oss": "os",\n "oun": "vaj",\n "pa-IN": "pa-Guru-IN",\n "pa-PK": "pa-Arab-PK",\n "pan": "pa",\n "pbu": "ps",\n "pcr": "adx",\n "per": "fa",\n "pes": "fa",\n "pli": "pi",\n "plt": "mg",\n "pmc": "huw",\n "pmu": "phr",\n "pnb": "lah",\n "pol": "pl",\n "por": "pt",\n "ppa": "bfy",\n "ppr": "lcq",\n "prs": "fa-AF",\n "pry": "prt",\n "pus": "ps",\n "puz": "pub",\n "que": "qu",\n "quz": "qu",\n "rmy": "rom",\n "roh": "rm",\n "ron": "ro",\n "rum": "ro",\n "run": "rn",\n "rus": "ru",\n "sag": "sg",\n "san": "sa",\n "sca": "hle",\n "scc": "sr",\n "scr": "hr",\n "sgn-BE-FR": "sfb",\n "sgn-BE-NL": "vgt",\n "sgn-CH-DE": "sgg",\n "sh": "sr-Latn",\n "shi-MA": "shi-Tfng-MA",\n "sin": "si",\n "skk": "oyb",\n "slk": "sk",\n "slo": "sk",\n "slv": "sl",\n "sme": "se",\n "smo": "sm",\n "sna": "sn",\n "snd": "sd",\n "som": "so",\n "sot": "st",\n "spa": "es",\n "spy": "kln",\n "sqi": "sq",\n "sr-BA": "sr-Cyrl-BA",\n "sr-ME": "sr-Latn-ME",\n "sr-RS": "sr-Cyrl-RS",\n "sr-XK": "sr-Cyrl-XK",\n "src": "sc",\n "srd": "sc",\n "srp": "sr",\n "ssw": "ss",\n "sun": "su",\n "swa": "sw",\n "swc": "sw-CD",\n "swe": "sv",\n "swh": "sw",\n "tah": "ty",\n "tam": "ta",\n "tat": "tt",\n "tdu": "dtp",\n "tel": "te",\n "tgk": "tg",\n "tgl": "fil",\n "tha": "th",\n "thc": "tpo",\n "thx": "oyb",\n "tib": "bo",\n "tie": "ras",\n "tir": "ti",\n "tkk": "twm",\n "tl": "fil",\n "tlw": "weo",\n "tmp": "tyj",\n "tne": "kak",\n "tnf": "fa-af",\n "ton": "to",\n "tsf": "taj",\n "tsn": "tn",\n "tso": "ts",\n "ttq": "tmh",\n "tuk": "tk",\n "tur": "tr",\n "tw": "ak",\n "twi": "ak",\n "tzm-Latn-MA": "tzm-MA",\n "ug-Arab-CN": "ug-CN",\n "uig": "ug",\n "ukr": "uk",\n "umu": "del",\n "uok": "ema",\n "urd": "ur",\n "uz-AF": "uz-Arab-AF",\n "uz-UZ": "uz-Latn-UZ",\n "uzb": "uz",\n "uzn": "uz",\n "vai-LR": "vai-Vaii-LR",\n "ven": "ve",\n "vie": "vi",\n "vol": "vo",\n "wel": "cy",\n "wln": "wa",\n "wol": "wo",\n "xba": "cax",\n "xho": "xh",\n "xia": "acn",\n "xkh": "waw",\n "xpe": "kpe",\n "xsj": "suj",\n "xsl": "den",\n "ybd": "rki",\n "ydd": "yi",\n "yid": "yi",\n "yma": "lrr",\n "ymt": "mtm",\n "yor": "yo",\n "yos": "zom",\n "yue-CN": "yue-Hans-CN",\n "yue-HK": "yue-Hant-HK",\n "yuu": "yug",\n "zai": "zap",\n "zh-CN": "zh-Hans-CN",\n "zh-guoyu": "zh",\n "zh-hakka": "hak",\n "zh-HK": "zh-Hant-HK",\n "zh-min-nan": "nan",\n "zh-MO": "zh-Hant-MO",\n "zh-SG": "zh-Hans-SG",\n "zh-TW": "zh-Hant-TW",\n "zh-xiang": "hsn",\n "zh-min": "nan-x-zh-min",\n "zha": "za",\n "zho": "zh",\n "zsm": "ms",\n "zul": "zu",\n "zyb": "za"\n});\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/parentLocales.js\n/* @generated */\n// prettier-ignore \n/* harmony default export */ var parentLocales = ({\n "en-150": "en-001",\n "en-AG": "en-001",\n "en-AI": "en-001",\n "en-AU": "en-001",\n "en-BB": "en-001",\n "en-BM": "en-001",\n "en-BS": "en-001",\n "en-BW": "en-001",\n "en-BZ": "en-001",\n "en-CA": "en-001",\n "en-CC": "en-001",\n "en-CK": "en-001",\n "en-CM": "en-001",\n "en-CX": "en-001",\n "en-CY": "en-001",\n "en-DG": "en-001",\n "en-DM": "en-001",\n "en-ER": "en-001",\n "en-FJ": "en-001",\n "en-FK": "en-001",\n "en-FM": "en-001",\n "en-GB": "en-001",\n "en-GD": "en-001",\n "en-GG": "en-001",\n "en-GH": "en-001",\n "en-GI": "en-001",\n "en-GM": "en-001",\n "en-GY": "en-001",\n "en-HK": "en-001",\n "en-IE": "en-001",\n "en-IL": "en-001",\n "en-IM": "en-001",\n "en-IN": "en-001",\n "en-IO": "en-001",\n "en-JE": "en-001",\n "en-JM": "en-001",\n "en-KE": "en-001",\n "en-KI": "en-001",\n "en-KN": "en-001",\n "en-KY": "en-001",\n "en-LC": "en-001",\n "en-LR": "en-001",\n "en-LS": "en-001",\n "en-MG": "en-001",\n "en-MO": "en-001",\n "en-MS": "en-001",\n "en-MT": "en-001",\n "en-MU": "en-001",\n "en-MW": "en-001",\n "en-MY": "en-001",\n "en-NA": "en-001",\n "en-NF": "en-001",\n "en-NG": "en-001",\n "en-NR": "en-001",\n "en-NU": "en-001",\n "en-NZ": "en-001",\n "en-PG": "en-001",\n "en-PH": "en-001",\n "en-PK": "en-001",\n "en-PN": "en-001",\n "en-PW": "en-001",\n "en-RW": "en-001",\n "en-SB": "en-001",\n "en-SC": "en-001",\n "en-SD": "en-001",\n "en-SG": "en-001",\n "en-SH": "en-001",\n "en-SL": "en-001",\n "en-SS": "en-001",\n "en-SX": "en-001",\n "en-SZ": "en-001",\n "en-TC": "en-001",\n "en-TK": "en-001",\n "en-TO": "en-001",\n "en-TT": "en-001",\n "en-TV": "en-001",\n "en-TZ": "en-001",\n "en-UG": "en-001",\n "en-VC": "en-001",\n "en-VG": "en-001",\n "en-VU": "en-001",\n "en-WS": "en-001",\n "en-ZA": "en-001",\n "en-ZM": "en-001",\n "en-ZW": "en-001",\n "en-AT": "en-150",\n "en-BE": "en-150",\n "en-CH": "en-150",\n "en-DE": "en-150",\n "en-DK": "en-150",\n "en-FI": "en-150",\n "en-NL": "en-150",\n "en-SE": "en-150",\n "en-SI": "en-150",\n "es-AR": "es-419",\n "es-BO": "es-419",\n "es-BR": "es-419",\n "es-BZ": "es-419",\n "es-CL": "es-419",\n "es-CO": "es-419",\n "es-CR": "es-419",\n "es-CU": "es-419",\n "es-DO": "es-419",\n "es-EC": "es-419",\n "es-GT": "es-419",\n "es-HN": "es-419",\n "es-MX": "es-419",\n "es-NI": "es-419",\n "es-PA": "es-419",\n "es-PE": "es-419",\n "es-PR": "es-419",\n "es-PY": "es-419",\n "es-SV": "es-419",\n "es-US": "es-419",\n "es-UY": "es-419",\n "es-VE": "es-419",\n "pt-AO": "pt-PT",\n "pt-CH": "pt-PT",\n "pt-CV": "pt-PT",\n "pt-FR": "pt-PT",\n "pt-GQ": "pt-PT",\n "pt-GW": "pt-PT",\n "pt-LU": "pt-PT",\n "pt-MO": "pt-PT",\n "pt-MZ": "pt-PT",\n "pt-ST": "pt-PT",\n "pt-TL": "pt-PT",\n "zh-Hant-MO": "zh-Hant-HK"\n});\n// EXTERNAL MODULE: ./node_modules/@formatjs/intl-utils/lib/invariant.js\nvar invariant = __webpack_require__(5981);\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/polyfill-utils.js\n\n\n\n/**\n * https://tc39.es/ecma262/#sec-toobject\n * @param arg\n */\n\nfunction toObject(arg) {\n if (arg == null) {\n throw new TypeError(\'undefined/null cannot be converted to object\');\n }\n\n return Object(arg);\n}\n/**\n * https://tc39.es/ecma262/#sec-tostring\n */\n\nfunction polyfill_utils_toString(o) {\n // Only symbol is irregular...\n if (typeof o === \'symbol\') {\n throw TypeError(\'Cannot convert a Symbol value to a string\');\n }\n\n return String(o);\n}\n/**\n * https://tc39.es/ecma402/#sec-getoption\n * @param opts\n * @param prop\n * @param type\n * @param values\n * @param fallback\n */\n\nfunction getOption(opts, prop, type, values, fallback) {\n // const descriptor = Object.getOwnPropertyDescriptor(opts, prop);\n var value = opts[prop];\n\n if (value !== undefined) {\n if (type !== \'boolean\' && type !== \'string\') {\n throw new TypeError(\'invalid type\');\n }\n\n if (type === \'boolean\') {\n value = Boolean(value);\n }\n\n if (type === \'string\') {\n value = polyfill_utils_toString(value);\n }\n\n if (values !== undefined && !values.filter(function (val) {\n return val == value;\n }).length) {\n throw new RangeError(value + " is not within " + values.join(\', \'));\n }\n\n return value;\n }\n\n return fallback;\n}\n/**\n * https://tc39.es/ecma402/#sec-defaultnumberoption\n * @param val\n * @param min\n * @param max\n * @param fallback\n */\n\nfunction defaultNumberOption(val, min, max, fallback) {\n if (val !== undefined) {\n val = Number(val);\n\n if (isNaN(val) || val < min || val > max) {\n throw new RangeError(val + " is outside of range [" + min + ", " + max + "]");\n }\n\n return Math.floor(val);\n }\n\n return fallback;\n}\n/**\n * https://tc39.es/ecma402/#sec-getnumberoption\n * @param options\n * @param property\n * @param min\n * @param max\n * @param fallback\n */\n\nfunction getNumberOption(options, property, minimum, maximum, fallback) {\n var val = options[property];\n return defaultNumberOption(val, minimum, maximum, fallback);\n}\nfunction getAliasesByLang(lang) {\n return Object.keys(aliases).reduce(function (all, locale) {\n if (locale.split(\'-\')[0] === lang) {\n all[locale] = aliases[locale];\n }\n\n return all;\n }, {});\n}\nfunction getParentLocalesByLang(lang) {\n return Object.keys(parentLocales).reduce(function (all, locale) {\n if (locale.split(\'-\')[0] === lang) {\n all[locale] = parentLocales[locale];\n }\n\n return all;\n }, {});\n}\nfunction setInternalSlot(map, pl, field, value) {\n if (!map.get(pl)) {\n map.set(pl, Object.create(null));\n }\n\n var slots = map.get(pl);\n slots[field] = value;\n}\nfunction setMultiInternalSlots(map, pl, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var k = _a[_i];\n setInternalSlot(map, pl, k, props[k]);\n }\n}\nfunction getInternalSlot(map, pl, field) {\n return getMultiInternalSlots(map, pl, field)[field];\n}\nfunction getMultiInternalSlots(map, pl) {\n var fields = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n fields[_i - 2] = arguments[_i];\n }\n\n var slots = map.get(pl);\n\n if (!slots) {\n throw new TypeError(pl + " InternalSlot has not been initialized");\n }\n\n return fields.reduce(function (all, f) {\n all[f] = slots[f];\n return all;\n }, Object.create(null));\n}\nfunction isLiteralPart(patternPart) {\n return patternPart.type === \'literal\';\n}\nfunction partitionPattern(pattern) {\n var result = [];\n var beginIndex = pattern.indexOf(\'{\');\n var endIndex = 0;\n var nextIndex = 0;\n var length = pattern.length;\n\n while (beginIndex < pattern.length && beginIndex > -1) {\n endIndex = pattern.indexOf(\'}\', beginIndex);\n (0,invariant/* invariant */.k)(endIndex > beginIndex, "Invalid pattern " + pattern);\n\n if (beginIndex > nextIndex) {\n result.push({\n type: \'literal\',\n value: pattern.substring(nextIndex, beginIndex)\n });\n }\n\n result.push({\n type: pattern.substring(beginIndex + 1, endIndex),\n value: undefined\n });\n nextIndex = endIndex + 1;\n beginIndex = pattern.indexOf(\'{\', nextIndex);\n }\n\n if (nextIndex < length) {\n result.push({\n type: \'literal\',\n value: pattern.substring(nextIndex, length)\n });\n }\n\n return result;\n}\n/**\n * https://tc39.es/ecma402/#sec-setnfdigitoptions\n * https://tc39.es/proposal-unified-intl-numberformat/section11/numberformat_diff_out.html#sec-setnfdigitoptions\n * @param intlObj\n * @param opts\n * @param mnfdDefault\n * @param mxfdDefault\n */\n\nfunction setNumberFormatDigitOptions(internalSlotMap, intlObj, opts, mnfdDefault, mxfdDefault) {\n var mnid = getNumberOption(opts, \'minimumIntegerDigits\', 1, 21, 1);\n var mnfd = opts.minimumFractionDigits;\n var mxfd = opts.maximumFractionDigits;\n var mnsd = opts.minimumSignificantDigits;\n var mxsd = opts.maximumSignificantDigits;\n setInternalSlot(internalSlotMap, intlObj, \'minimumIntegerDigits\', mnid);\n\n if (mnsd !== undefined || mxsd !== undefined) {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'significantDigits\');\n mnsd = defaultNumberOption(mnsd, 1, 21, 1);\n mxsd = defaultNumberOption(mxsd, mnsd, 21, 21);\n setInternalSlot(internalSlotMap, intlObj, \'minimumSignificantDigits\', mnsd);\n setInternalSlot(internalSlotMap, intlObj, \'maximumSignificantDigits\', mxsd);\n } else if (mnfd !== undefined || mxfd !== undefined) {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'fractionDigits\');\n mnfd = defaultNumberOption(mnfd, 0, 20, mnfdDefault);\n var mxfdActualDefault = Math.max(mnfd, mxfdDefault);\n mxfd = defaultNumberOption(mxfd, mnfd, 20, mxfdActualDefault);\n setInternalSlot(internalSlotMap, intlObj, \'minimumFractionDigits\', mnfd);\n setInternalSlot(internalSlotMap, intlObj, \'maximumFractionDigits\', mxfd);\n } else if (getInternalSlot(internalSlotMap, intlObj, \'notation\') === \'compact\') {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'compactRounding\');\n } else {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'fractionDigits\');\n setInternalSlot(internalSlotMap, intlObj, \'minimumFractionDigits\', mnfdDefault);\n setInternalSlot(internalSlotMap, intlObj, \'maximumFractionDigits\', mxfdDefault);\n }\n}\nfunction objectIs(x, y) {\n if (Object.is) {\n return Object.is(x, y);\n } // SameValue algorithm\n\n\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } // Step 6.a: NaN == NaN\n\n\n return x !== x && y !== y;\n}\nvar NOT_A_Z_REGEX = /[^A-Z]/;\n/**\n * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping\n * @param str string to convert\n */\n\nfunction toUpperCase(str) {\n return str.replace(/([a-z])/g, function (_, c) {\n return c.toUpperCase();\n });\n}\n/**\n * https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-iswellformedcurrencycode\n * @param currency\n */\n\n\nfunction isWellFormedCurrencyCode(currency) {\n currency = toUpperCase(currency);\n\n if (currency.length !== 3) {\n return false;\n }\n\n if (NOT_A_Z_REGEX.test(currency)) {\n return false;\n }\n\n return true;\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/get-canonical-locales.js\n/**\n * IE11-safe version of getCanonicalLocales since it\'s ES2016\n * @param locales locales\n */\nfunction getCanonicalLocales(locales) {\n // IE11\n var getCanonicalLocales = Intl.getCanonicalLocales;\n\n if (typeof getCanonicalLocales === \'function\') {\n return getCanonicalLocales(locales);\n } // NOTE: we must NOT call `supportedLocalesOf` of a formatjs polyfill, or their implementation\n // will even eventually call this method recursively. Here we use `Intl.DateTimeFormat` since it\n // is not polyfilled by `@formatjs`.\n // TODO: Fix TypeScript type def for this bc undefined is just fine\n\n\n return Intl.DateTimeFormat.supportedLocalesOf(locales);\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/resolve-locale.js\nvar __extends = undefined && undefined.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar resolve_locale_assign = undefined && undefined.__assign || function () {\n resolve_locale_assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return resolve_locale_assign.apply(this, arguments);\n};\n\n\n\n\nfunction createResolveLocale(getDefaultLocale) {\n var lookupMatcher = createLookupMatcher(getDefaultLocale);\n var bestFitMatcher = createBestFitMatcher(getDefaultLocale);\n /**\n * https://tc39.es/ecma402/#sec-resolvelocale\n */\n\n return function resolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData) {\n var matcher = options.localeMatcher;\n var r;\n\n if (matcher === \'lookup\') {\n r = lookupMatcher(availableLocales, requestedLocales);\n } else {\n r = bestFitMatcher(availableLocales, requestedLocales);\n }\n\n var foundLocale = r.locale;\n var result = {\n locale: \'\',\n dataLocale: foundLocale\n };\n var supportedExtension = \'-u\';\n\n for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {\n var key = relevantExtensionKeys_1[_i];\n var foundLocaleData = localeData[foundLocale];\n (0,invariant/* invariant */.k)(typeof foundLocaleData === \'object\' && foundLocaleData !== null, "locale data " + key + " must be an object");\n var keyLocaleData = foundLocaleData[key];\n (0,invariant/* invariant */.k)(Array.isArray(keyLocaleData), "keyLocaleData for " + key + " must be an array");\n var value = keyLocaleData[0];\n (0,invariant/* invariant */.k)(typeof value === \'string\' || value === null, \'value must be string or null\');\n var supportedExtensionAddition = \'\';\n\n if (r.extension) {\n var requestedValue = unicodeExtensionValue(r.extension, key);\n\n if (requestedValue !== undefined) {\n if (requestedValue !== \'\') {\n if (~keyLocaleData.indexOf(requestedValue)) {\n value = requestedValue;\n supportedExtensionAddition = "-" + key + "-" + value;\n }\n } else if (~requestedValue.indexOf(\'true\')) {\n value = \'true\';\n supportedExtensionAddition = "-" + key;\n }\n }\n }\n\n if (key in options) {\n var optionsValue = options[key];\n (0,invariant/* invariant */.k)(typeof optionsValue === \'string\' || typeof optionsValue === \'undefined\' || optionsValue === null, \'optionsValue must be String, Undefined or Null\');\n\n if (~keyLocaleData.indexOf(optionsValue)) {\n if (optionsValue !== value) {\n value = optionsValue;\n supportedExtensionAddition = \'\';\n }\n }\n }\n\n result[key] = value;\n supportedExtension += supportedExtensionAddition;\n }\n\n if (supportedExtension.length > 2) {\n var privateIndex = foundLocale.indexOf(\'-x-\');\n\n if (privateIndex === -1) {\n foundLocale = foundLocale + supportedExtension;\n } else {\n var preExtension = foundLocale.slice(0, privateIndex);\n var postExtension = foundLocale.slice(privateIndex, foundLocale.length);\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n\n foundLocale = getCanonicalLocales(foundLocale)[0];\n }\n\n result.locale = foundLocale;\n return result;\n };\n}\n/**\n * https://tc39.es/ecma402/#sec-unicodeextensionvalue\n * @param extension\n * @param key\n */\n\nfunction unicodeExtensionValue(extension, key) {\n (0,invariant/* invariant */.k)(key.length === 2, \'key must have 2 elements\');\n var size = extension.length;\n var searchValue = "-" + key + "-";\n var pos = extension.indexOf(searchValue);\n\n if (pos !== -1) {\n var start = pos + 4;\n var end = start;\n var k = start;\n var done = false;\n\n while (!done) {\n var e = extension.indexOf(\'-\', k);\n var len = void 0;\n\n if (e === -1) {\n len = size - k;\n } else {\n len = e - k;\n }\n\n if (len === 2) {\n done = true;\n } else if (e === -1) {\n end = size;\n done = true;\n } else {\n end = e;\n k = e + 1;\n }\n }\n\n return extension.slice(start, end);\n }\n\n searchValue = "-" + key;\n pos = extension.indexOf(searchValue);\n\n if (pos !== -1 && pos + 3 === size) {\n return \'\';\n }\n\n return undefined;\n}\n\nvar UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\n/**\n * https://tc39.es/ecma402/#sec-bestavailablelocale\n * @param availableLocales\n * @param locale\n */\n\nfunction bestAvailableLocale(availableLocales, locale) {\n var candidate = locale;\n\n while (true) {\n if (~availableLocales.indexOf(candidate)) {\n return candidate;\n }\n\n var pos = candidate.lastIndexOf(\'-\');\n\n if (!~pos) {\n return undefined;\n }\n\n if (pos >= 2 && candidate[pos - 2] === \'-\') {\n pos -= 2;\n }\n\n candidate = candidate.slice(0, pos);\n }\n}\n\nfunction createLookupMatcher(getDefaultLocale) {\n /**\n * https://tc39.es/ecma402/#sec-lookupmatcher\n */\n return function lookupMatcher(availableLocales, requestedLocales) {\n var result = {\n locale: \'\'\n };\n\n for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {\n var locale = requestedLocales_1[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, \'\');\n var availableLocale = bestAvailableLocale(availableLocales, noExtensionLocale);\n\n if (availableLocale) {\n result.locale = availableLocale;\n\n if (locale !== noExtensionLocale) {\n result.extension = locale.slice(noExtensionLocale.length + 1, locale.length);\n }\n\n return result;\n }\n }\n\n result.locale = getDefaultLocale();\n return result;\n };\n}\n\nfunction createBestFitMatcher(getDefaultLocale) {\n return function bestFitMatcher(availableLocales, requestedLocales) {\n var result = {\n locale: \'\'\n };\n\n for (var _i = 0, requestedLocales_2 = requestedLocales; _i < requestedLocales_2.length; _i++) {\n var locale = requestedLocales_2[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, \'\');\n var availableLocale = bestAvailableLocale(availableLocales, noExtensionLocale);\n\n if (availableLocale) {\n result.locale = availableLocale;\n\n if (locale !== noExtensionLocale) {\n result.extension = locale.slice(noExtensionLocale.length + 1, locale.length);\n }\n\n return result;\n }\n }\n\n result.locale = getDefaultLocale();\n return result;\n };\n}\n\nfunction getLocaleHierarchy(locale, aliases, parentLocales) {\n var results = [locale];\n\n if (aliases[locale]) {\n locale = aliases[locale];\n results.push(locale);\n }\n\n var parentLocale = parentLocales[locale];\n\n if (parentLocale) {\n results.push(parentLocale);\n }\n\n var localeParts = locale.split(\'-\');\n\n for (var i = localeParts.length; i > 1; i--) {\n results.push(localeParts.slice(0, i - 1).join(\'-\'));\n }\n\n return results;\n}\n\nfunction lookupSupportedLocales(availableLocales, requestedLocales) {\n var subset = [];\n\n for (var _i = 0, requestedLocales_3 = requestedLocales; _i < requestedLocales_3.length; _i++) {\n var locale = requestedLocales_3[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, \'\');\n var availableLocale = bestAvailableLocale(availableLocales, noExtensionLocale);\n\n if (availableLocale) {\n subset.push(availableLocale);\n }\n }\n\n return subset;\n}\n\nfunction supportedLocales(availableLocales, requestedLocales, options) {\n var matcher = \'best fit\';\n\n if (options !== undefined) {\n options = toObject(options);\n matcher = getOption(options, \'localeMatcher\', \'string\', [\'lookup\', \'best fit\'], \'best fit\');\n }\n\n if (matcher === \'best fit\') {\n return lookupSupportedLocales(availableLocales, requestedLocales);\n }\n\n return lookupSupportedLocales(availableLocales, requestedLocales);\n}\n\nvar MissingLocaleDataError =\n/** @class */\nfunction (_super) {\n __extends(MissingLocaleDataError, _super);\n\n function MissingLocaleDataError() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = \'MISSING_LOCALE_DATA\';\n return _this;\n }\n\n return MissingLocaleDataError;\n}(Error);\n\nfunction isMissingLocaleDataError(e) {\n return e.type === \'MISSING_LOCALE_DATA\';\n}\nfunction unpackData(locale, localeData,\n/** By default shallow merge the dictionaries. */\nreducer) {\n if (reducer === void 0) {\n reducer = function reducer(all, d) {\n return resolve_locale_assign(resolve_locale_assign({}, all), d);\n };\n }\n\n var localeHierarchy = getLocaleHierarchy(locale, localeData.aliases, localeData.parentLocales);\n var dataToMerge = localeHierarchy.map(function (l) {\n return localeData.data[l];\n }).filter(Boolean);\n\n if (!dataToMerge.length) {\n throw new MissingLocaleDataError("Missing locale data for \\"" + locale + "\\", lookup hierarchy: " + localeHierarchy.join(\', \'));\n }\n\n dataToMerge.reverse();\n return dataToMerge.reduce(reducer, {});\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/units.js\n// https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_diff_out.html#sec-issanctionedsimpleunitidentifier\nvar SANCTIONED_UNITS = [\'angle-degree\', \'area-acre\', \'area-hectare\', \'concentr-percent\', \'digital-bit\', \'digital-byte\', \'digital-gigabit\', \'digital-gigabyte\', \'digital-kilobit\', \'digital-kilobyte\', \'digital-megabit\', \'digital-megabyte\', \'digital-petabyte\', \'digital-terabit\', \'digital-terabyte\', \'duration-day\', \'duration-hour\', \'duration-millisecond\', \'duration-minute\', \'duration-month\', \'duration-second\', \'duration-week\', \'duration-year\', \'length-centimeter\', \'length-foot\', \'length-inch\', \'length-kilometer\', \'length-meter\', \'length-mile-scandinavian\', \'length-mile\', \'length-millimeter\', \'length-yard\', \'mass-gram\', \'mass-kilogram\', \'mass-ounce\', \'mass-pound\', \'mass-stone\', \'temperature-celsius\', \'temperature-fahrenheit\', \'volume-fluid-ounce\', \'volume-gallon\', \'volume-liter\', \'volume-milliliter\']; // In CLDR, the unit name always follows the form `namespace-unit` pattern.\n// For example: `digital-bit` instead of `bit`. This function removes the namespace prefix.\n\nfunction removeUnitNamespace(unit) {\n return unit.replace(/^(.*?)-/, \'\');\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/number-types.js\nvar InternalSlotToken;\n\n(function (InternalSlotToken) {\n // To prevent collision with {0} in CLDR\n InternalSlotToken["compactName"] = "compactName";\n InternalSlotToken["compactSymbol"] = "compactSymbol";\n InternalSlotToken["currencyCode"] = "currencyCode";\n InternalSlotToken["currencyName"] = "currencyName";\n InternalSlotToken["currencyNarrowSymbol"] = "currencyNarrowSymbol";\n InternalSlotToken["currencySymbol"] = "currencySymbol";\n InternalSlotToken["minusSign"] = "minusSign";\n InternalSlotToken["number"] = "number";\n InternalSlotToken["percentSign"] = "percentSign";\n InternalSlotToken["plusSign"] = "plusSign";\n InternalSlotToken["scientificExponent"] = "scientificExponent";\n InternalSlotToken["scientificSeparator"] = "scientificSeparator";\n InternalSlotToken["unitName"] = "unitName";\n InternalSlotToken["unitNarrowSymbol"] = "unitNarrowSymbol";\n InternalSlotToken["unitSymbol"] = "unitSymbol";\n})(InternalSlotToken || (InternalSlotToken = {}));\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/index.js\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvZGlmZi5qcz83Y2M4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0Bmb3JtYXRqcy9pbnRsLXV0aWxzL2xpYi9hbGlhc2VzLmpzPzU5OTYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL3BhcmVudExvY2FsZXMuanM/ZTYzMCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvcG9seWZpbGwtdXRpbHMuanM/YzlkMiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvZ2V0LWNhbm9uaWNhbC1sb2NhbGVzLmpzP2VmMWMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL3Jlc29sdmUtbG9jYWxlLmpzPzQyNmQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL3VuaXRzLmpzPzEyYTYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL251bWJlci10eXBlcy5qcz85M2U0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0Bmb3JtYXRqcy9pbnRsLXV0aWxzL2xpYi9pbmRleC5qcz80MGYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZUFBZSxTQUFJLElBQUksU0FBSTtBQUMzQjtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtDQUErQyx1Q0FBdUM7O0FBRXRGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7QUNuR0E7QUFDQTtBQUNBLDRDQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFOztBQ3ZhRDtBQUNBO0FBQ0Esa0RBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFOzs7O0FDbkkrQjtBQUNZO0FBQ0o7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxTQUFTLHVCQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLHVCQUFRO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztB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QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQSxjQUFjLFFBQVE7QUFDdEIsY0FBYyxTQUFTO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBUSxDQUFDLHFCQUFRLEdBQUc7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVDQUF1QztBQUN2QyxDOztBQ3ZXQTtBQUNPLHN5QkFBc3lCO0FBQzd5Qjs7QUFFTztBQUNQO0FBQ0EsQzs7QUNOTzs7QUFFUDtBQUNBLGdDQUFnQyxFQUFFO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsOENBQThDLEc7O0FDbkJYO0FBQytSO0FBQ2hNO0FBQzNHO0FBQ087QUFDK0IiLCJmaWxlIjoiMjY1MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2Fzc2lnbiA9IHRoaXMgJiYgdGhpcy5fX2Fzc2lnbiB8fCBmdW5jdGlvbiAoKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFyIE1TX1BFUl9TRUNPTkQgPSAxZTM7XG52YXIgU0VDU19QRVJfTUlOID0gNjA7XG52YXIgU0VDU19QRVJfSE9VUiA9IFNFQ1NfUEVSX01JTiAqIDYwO1xudmFyIFNFQ1NfUEVSX0RBWSA9IFNFQ1NfUEVSX0hPVVIgKiAyNDtcbnZhciBTRUNTX1BFUl9XRUVLID0gU0VDU19QRVJfREFZICogNztcbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RVbml0KGZyb20sIHRvLCB0aHJlc2hvbGRzKSB7XG4gIGlmICh0byA9PT0gdm9pZCAwKSB7XG4gICAgdG8gPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgaWYgKHRocmVzaG9sZHMgPT09IHZvaWQgMCkge1xuICAgIHRocmVzaG9sZHMgPSB7fTtcbiAgfVxuXG4gIHZhciByZXNvbHZlZFRocmVzaG9sZHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgREVGQVVMVF9USFJFU0hPTERTKSwgdGhyZXNob2xkcyB8fCB7fSk7XG5cbiAgdmFyIHNlY3MgPSAoK2Zyb20gLSArdG8pIC8gTVNfUEVSX1NFQ09ORDtcblxuICBpZiAoTWF0aC5hYnMoc2VjcykgPCByZXNvbHZlZFRocmVzaG9sZHMuc2Vjb25kKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBNYXRoLnJvdW5kKHNlY3MpLFxuICAgICAgdW5pdDogJ3NlY29uZCdcbiAgICB9O1xuICB9XG5cbiAgdmFyIG1pbnMgPSBzZWNzIC8gU0VDU19QRVJfTUlOO1xuXG4gIGlmIChNYXRoLmFicyhtaW5zKSA8IHJlc29sdmVkVGhyZXNob2xkcy5taW51dGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IE1hdGgucm91bmQobWlucyksXG4gICAgICB1bml0OiAnbWludXRlJ1xuICAgIH07XG4gIH1cblxuICB2YXIgaG91cnMgPSBzZWNzIC8gU0VDU19QRVJfSE9VUjtcblxuICBpZiAoTWF0aC5hYnMoaG91cnMpIDwgcmVzb2x2ZWRUaHJlc2hvbGRzLmhvdXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IE1hdGgucm91bmQoaG91cnMpLFxuICAgICAgdW5pdDogJ2hvdXInXG4gICAgfTtcbiAgfVxuXG4gIHZhciBkYXlzID0gc2VjcyAvIFNFQ1NfUEVSX0RBWTtcblxuICBpZiAoTWF0aC5hYnMoZGF5cykgPCByZXNvbHZlZFRocmVzaG9sZHMuZGF5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBNYXRoLnJvdW5kKGRheXMpLFxuICAgICAgdW5pdDogJ2RheSdcbiAgICB9O1xuICB9XG5cbiAgdmFyIGZyb21EYXRlID0gbmV3IERhdGUoZnJvbSk7XG4gIHZhciB0b0RhdGUgPSBuZXcgRGF0ZSh0byk7XG4gIHZhciB5ZWFycyA9IGZyb21EYXRlLmdldEZ1bGxZZWFyKCkgLSB0b0RhdGUuZ2V0RnVsbFllYXIoKTtcblxuICBpZiAoTWF0aC5yb3VuZChNYXRoLmFicyh5ZWFycykpID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogTWF0aC5yb3VuZCh5ZWFycyksXG4gICAgICB1bml0OiAneWVhcidcbiAgICB9O1xuICB9XG5cbiAgdmFyIG1vbnRocyA9IHllYXJzICogMTIgKyBmcm9tRGF0ZS5nZXRNb250aCgpIC0gdG9EYXRlLmdldE1vbnRoKCk7XG5cbiAgaWYgKE1hdGgucm91bmQoTWF0aC5hYnMobW9udGhzKSkgPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBNYXRoLnJvdW5kKG1vbnRocyksXG4gICAgICB1bml0OiAnbW9udGgnXG4gICAgfTtcbiAgfVxuXG4gIHZhciB3ZWVrcyA9IHNlY3MgLyBTRUNTX1BFUl9XRUVLO1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBNYXRoLnJvdW5kKHdlZWtzKSxcbiAgICB1bml0OiAnd2VlaydcbiAgfTtcbn1cbmV4cG9ydCB2YXIgREVGQVVMVF9USFJFU0hPTERTID0ge1xuICBzZWNvbmQ6IDQ1LFxuICBtaW51dGU6IDQ1LFxuICBob3VyOiAyMixcbiAgZGF5OiA1XG59OyIsIi8qIEBnZW5lcmF0ZWQgKi9cbi8vIHByZXR0aWVyLWlnbm9yZSAgXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiYWEtU0FBSE9cIjogXCJzc3lcIixcbiAgXCJhYW1cIjogXCJhYXNcIixcbiAgXCJhYXJcIjogXCJhYVwiLFxuICBcImFia1wiOiBcImFiXCIsXG4gIFwiYWRwXCI6IFwiZHpcIixcbiAgXCJhZnJcIjogXCJhZlwiLFxuICBcImFqdVwiOiBcImpyYlwiLFxuICBcImFrYVwiOiBcImFrXCIsXG4gIFwiYWxiXCI6IFwic3FcIixcbiAgXCJhbHNcIjogXCJzcVwiLFxuICBcImFtaFwiOiBcImFtXCIsXG4gIFwiYXJhXCI6IFwiYXJcIixcbiAgXCJhcmJcIjogXCJhclwiLFxuICBcImFyZ1wiOiBcImFuXCIsXG4gIFwiYXJtXCI6IFwiaHlcIixcbiAgXCJhcnQtbG9qYmFuXCI6IFwiamJvXCIsXG4gIFwiYXNkXCI6IFwic256XCIsXG4gIFwiYXNtXCI6IFwiYXNcIixcbiAgXCJhdWVcIjogXCJrdHpcIixcbiAgXCJhdmFcIjogXCJhdlwiLFxuICBcImF2ZVwiOiBcImFlXCIsXG4gIFwiYXltXCI6IFwiYXlcIixcbiAgXCJheXJcIjogXCJheVwiLFxuICBcImF5eFwiOiBcIm51blwiLFxuICBcImF6LUFaXCI6IFwiYXotTGF0bi1BWlwiLFxuICBcImF6ZVwiOiBcImF6XCIsXG4gIFwiYXpqXCI6IFwiYXpcIixcbiAgXCJiYWtcIjogXCJiYVwiLFxuICBcImJhbVwiOiBcImJtXCIsXG4gIFwiYmFxXCI6IFwiZXVcIixcbiAgXCJiY2NcIjogXCJiYWxcIixcbiAgXCJiY2xcIjogXCJiaWtcIixcbiAgXCJiZWxcIjogXCJiZVwiLFxuICBcImJlblwiOiBcImJuXCIsXG4gIFwiYmdtXCI6IFwiYmNnXCIsXG4gIFwiYmhcIjogXCJiaG9cIixcbiAgXCJiaWhcIjogXCJiaG9cIixcbiAgXCJiaXNcIjogXCJiaVwiLFxuICBcImJqZFwiOiBcImRybFwiLFxuICBcImJvZFwiOiBcImJvXCIsXG4gIFwiYm9zXCI6IFwiYnNcIixcbiAgXCJicmVcIjogXCJiclwiLFxuICBcImJzLUJBXCI6IFwiYnMtTGF0bi1CQVwiLFxuICBcImJ1bFwiOiBcImJnXCIsXG4gIFwiYnVyXCI6IFwibXlcIixcbiAgXCJieGtcIjogXCJsdXlcIixcbiAgXCJieHJcIjogXCJidWFcIixcbiAgXCJjYXRcIjogXCJjYVwiLFxuICBcImNjcVwiOiBcInJraVwiLFxuICBcImNlbC1nYXVsaXNoXCI6IFwieHRnLXgtY2VsLWdhdWxpc2hcIixcbiAgXCJjZXNcIjogXCJjc1wiLFxuICBcImNoYVwiOiBcImNoXCIsXG4gIFwiY2hlXCI6IFwiY2VcIixcbiAgXCJjaGlcIjogXCJ6aFwiLFxuICBcImNodVwiOiBcImN1XCIsXG4gIFwiY2h2XCI6IFwiY3ZcIixcbiAgXCJjanJcIjogXCJtb21cIixcbiAgXCJja2FcIjogXCJjbXJcIixcbiAgXCJjbGRcIjogXCJzeXJcIixcbiAgXCJjbWtcIjogXCJ4Y2hcIixcbiAgXCJjbW5cIjogXCJ6aFwiLFxuICBcImNuclwiOiBcInNyLU1FXCIsXG4gIFwiY29yXCI6IFwia3dcIixcbiAgXCJjb3NcIjogXCJjb1wiLFxuICBcImNveVwiOiBcInBpalwiLFxuICBcImNxdVwiOiBcInF1aFwiLFxuICBcImNyZVwiOiBcImNyXCIsXG4gIFwiY3dkXCI6IFwiY3JcIixcbiAgXCJjeW1cIjogXCJjeVwiLFxuICBcImN6ZVwiOiBcImNzXCIsXG4gIFwiZGFuXCI6IFwiZGFcIixcbiAgXCJkZXVcIjogXCJkZVwiLFxuICBcImRnb1wiOiBcImRvaVwiLFxuICBcImRoZFwiOiBcIm13clwiLFxuICBcImRpa1wiOiBcImRpblwiLFxuICBcImRpcVwiOiBcInp6YVwiLFxuICBcImRpdFwiOiBcImRpZlwiLFxuICBcImRpdlwiOiBcImR2XCIsXG4gIFwiZHJoXCI6IFwibW5cIixcbiAgXCJkcndcIjogXCJmYS1hZlwiLFxuICBcImR1dFwiOiBcIm5sXCIsXG4gIFwiZHpvXCI6IFwiZHpcIixcbiAgXCJla2tcIjogXCJldFwiLFxuICBcImVsbFwiOiBcImVsXCIsXG4gIFwiZW1rXCI6IFwibWFuXCIsXG4gIFwiZW5nXCI6IFwiZW5cIixcbiAgXCJlcG9cIjogXCJlb1wiLFxuICBcImVza1wiOiBcImlrXCIsXG4gIFwiZXN0XCI6IFwiZXRcIixcbiAgXCJldXNcIjogXCJldVwiLFxuICBcImV3ZVwiOiBcImVlXCIsXG4gIFwiZmFvXCI6IFwiZm9cIixcbiAgXCJmYXNcIjogXCJmYVwiLFxuICBcImZhdFwiOiBcImFrXCIsXG4gIFwiZmlqXCI6IFwiZmpcIixcbiAgXCJmaW5cIjogXCJmaVwiLFxuICBcImZyYVwiOiBcImZyXCIsXG4gIFwiZnJlXCI6IFwiZnJcIixcbiAgXCJmcnlcIjogXCJmeVwiLFxuICBcImZ1Y1wiOiBcImZmXCIsXG4gIFwiZnVsXCI6IFwiZmZcIixcbiAgXCJnYXZcIjogXCJkZXZcIixcbiAgXCJnYXpcIjogXCJvbVwiLFxuICBcImdib1wiOiBcImdyYlwiLFxuICBcImdlb1wiOiBcImthXCIsXG4gIFwiZ2VyXCI6IFwiZGVcIixcbiAgXCJnZnhcIjogXCJ2YWpcIixcbiAgXCJnZ25cIjogXCJndnJcIixcbiAgXCJnbGFcIjogXCJnZFwiLFxuICBcImdsZVwiOiBcImdhXCIsXG4gIFwiZ2xnXCI6IFwiZ2xcIixcbiAgXCJnbHZcIjogXCJndlwiLFxuICBcImdub1wiOiBcImdvblwiLFxuICBcImdyZVwiOiBcImVsXCIsXG4gIFwiZ3JuXCI6IFwiZ25cIixcbiAgXCJndGlcIjogXCJueWNcIixcbiAgXCJndWdcIjogXCJnblwiLFxuICBcImd1alwiOiBcImd1XCIsXG4gIFwiZ3V2XCI6IFwiZHV6XCIsXG4gIFwiZ3lhXCI6IFwiZ2JhXCIsXG4gIFwiaGEtTGF0bi1HSFwiOiBcImhhLUdIXCIsXG4gIFwiaGEtTGF0bi1ORVwiOiBcImhhLU5FXCIsXG4gIFwiaGEtTGF0bi1OR1wiOiBcImhhLU5HXCIsXG4gIFwiaGF0XCI6IFwiaHRcIixcbiAgXCJoYXVcIjogXCJoYVwiLFxuICBcImhic1wiOiBcInNyLUxhdG5cIixcbiAgXCJoZG5cIjogXCJoYWlcIixcbiAgXCJoZWFcIjogXCJobW5cIixcbiAgXCJoZWJcIjogXCJoZVwiLFxuICBcImhlclwiOiBcImh6XCIsXG4gIFwiaGltXCI6IFwic3J4XCIsXG4gIFwiaGluXCI6IFwiaGlcIixcbiAgXCJobW9cIjogXCJob1wiLFxuICBcImhyclwiOiBcImphbFwiLFxuICBcImhydlwiOiBcImhyXCIsXG4gIFwiaHVuXCI6IFwiaHVcIixcbiAgXCJoeWVcIjogXCJoeVwiLFxuICBcImktYW1pXCI6IFwiYW1pXCIsXG4gIFwiaS1ibm5cIjogXCJibm5cIixcbiAgXCJpLWhha1wiOiBcImhha1wiLFxuICBcImkta2xpbmdvblwiOiBcInRsaFwiLFxuICBcImktbHV4XCI6IFwibGJcIixcbiAgXCJpLW5hdmFqb1wiOiBcIm52XCIsXG4gIFwiaS1wd25cIjogXCJwd25cIixcbiAgXCJpLXRhb1wiOiBcInRhb1wiLFxuICBcImktdGF5XCI6IFwidGF5XCIsXG4gIFwiaS10c3VcIjogXCJ0c3VcIixcbiAgXCJpLWRlZmF1bHRcIjogXCJlbi14LWktZGVmYXVsdFwiLFxuICBcImktZW5vY2hpYW5cIjogXCJ1bmQteC1pLWVub2NoaWFuXCIsXG4gIFwiaS1taW5nb1wiOiBcInNlZS14LWktbWluZ29cIixcbiAgXCJpYmlcIjogXCJvcGFcIixcbiAgXCJpYm9cIjogXCJpZ1wiLFxuICBcImljZVwiOiBcImlzXCIsXG4gIFwiaWRvXCI6IFwiaW9cIixcbiAgXCJpaWlcIjogXCJpaVwiLFxuICBcImlrZVwiOiBcIml1XCIsXG4gIFwiaWt1XCI6IFwiaXVcIixcbiAgXCJpbGVcIjogXCJpZVwiLFxuICBcImlsd1wiOiBcImdhbFwiLFxuICBcImluXCI6IFwiaWRcIixcbiAgXCJpbmFcIjogXCJpYVwiLFxuICBcImluZFwiOiBcImlkXCIsXG4gIFwiaXBrXCI6IFwiaWtcIixcbiAgXCJpc2xcIjogXCJpc1wiLFxuICBcIml0YVwiOiBcIml0XCIsXG4gIFwiaXdcIjogXCJoZVwiLFxuICBcImphdlwiOiBcImp2XCIsXG4gIFwiamVnXCI6IFwib3liXCIsXG4gIFwiamlcIjogXCJ5aVwiLFxuICBcImpwblwiOiBcImphXCIsXG4gIFwiandcIjogXCJqdlwiLFxuICBcImthbFwiOiBcImtsXCIsXG4gIFwia2FuXCI6IFwia25cIixcbiAgXCJrYXNcIjogXCJrc1wiLFxuICBcImthdFwiOiBcImthXCIsXG4gIFwia2F1XCI6IFwia3JcIixcbiAgXCJrYXpcIjogXCJra1wiLFxuICBcImtnY1wiOiBcInRkZlwiLFxuICBcImtnaFwiOiBcImttbFwiLFxuICBcImtoa1wiOiBcIm1uXCIsXG4gIFwia2htXCI6IFwia21cIixcbiAgXCJraWtcIjogXCJraVwiLFxuICBcImtpblwiOiBcInJ3XCIsXG4gIFwia2lyXCI6IFwia3lcIixcbiAgXCJray1DeXJsLUtaXCI6IFwia2stS1pcIixcbiAgXCJrbXJcIjogXCJrdVwiLFxuICBcImtuY1wiOiBcImtyXCIsXG4gIFwia25nXCI6IFwia2dcIixcbiAgXCJrbm5cIjogXCJrb2tcIixcbiAgXCJrb2pcIjogXCJrd3ZcIixcbiAgXCJrb21cIjogXCJrdlwiLFxuICBcImtvblwiOiBcImtnXCIsXG4gIFwia29yXCI6IFwia29cIixcbiAgXCJrcHZcIjogXCJrdlwiLFxuICBcImtybVwiOiBcImJtZlwiLFxuICBcImtzLUFyYWItSU5cIjogXCJrcy1JTlwiLFxuICBcImt0clwiOiBcImR0cFwiLFxuICBcImt1YVwiOiBcImtqXCIsXG4gIFwia3VyXCI6IFwia3VcIixcbiAgXCJrdnNcIjogXCJnZGpcIixcbiAgXCJrd3FcIjogXCJ5YW1cIixcbiAgXCJreGVcIjogXCJ0dmRcIixcbiAgXCJreS1DeXJsLUtHXCI6IFwia3ktS0dcIixcbiAgXCJrempcIjogXCJkdHBcIixcbiAgXCJrenRcIjogXCJkdHBcIixcbiAgXCJsYW9cIjogXCJsb1wiLFxuICBcImxhdFwiOiBcImxhXCIsXG4gIFwibGF2XCI6IFwibHZcIixcbiAgXCJsYmtcIjogXCJibmNcIixcbiAgXCJsaWlcIjogXCJyYXFcIixcbiAgXCJsaW1cIjogXCJsaVwiLFxuICBcImxpblwiOiBcImxuXCIsXG4gIFwibGl0XCI6IFwibHRcIixcbiAgXCJsbG9cIjogXCJuZ3RcIixcbiAgXCJsbW1cIjogXCJybXhcIixcbiAgXCJsdHpcIjogXCJsYlwiLFxuICBcImx1YlwiOiBcImx1XCIsXG4gIFwibHVnXCI6IFwibGdcIixcbiAgXCJsdnNcIjogXCJsdlwiLFxuICBcIm1hY1wiOiBcIm1rXCIsXG4gIFwibWFoXCI6IFwibWhcIixcbiAgXCJtYWxcIjogXCJtbFwiLFxuICBcIm1hb1wiOiBcIm1pXCIsXG4gIFwibWFyXCI6IFwibXJcIixcbiAgXCJtYXlcIjogXCJtc1wiLFxuICBcIm1lZ1wiOiBcImNpclwiLFxuICBcIm1oclwiOiBcImNobVwiLFxuICBcIm1rZFwiOiBcIm1rXCIsXG4gIFwibWxnXCI6IFwibWdcIixcbiAgXCJtbHRcIjogXCJtdFwiLFxuICBcIm1uLUN5cmwtTU5cIjogXCJtbi1NTlwiLFxuICBcIm1ua1wiOiBcIm1hblwiLFxuICBcIm1vXCI6IFwicm9cIixcbiAgXCJtb2xcIjogXCJyb1wiLFxuICBcIm1vblwiOiBcIm1uXCIsXG4gIFwibXJpXCI6IFwibWlcIixcbiAgXCJtcy1MYXRuLUJOXCI6IFwibXMtQk5cIixcbiAgXCJtcy1MYXRuLU1ZXCI6IFwibXMtTVlcIixcbiAgXCJtcy1MYXRuLVNHXCI6IFwibXMtU0dcIixcbiAgXCJtc2FcIjogXCJtc1wiLFxuICBcIm1zdFwiOiBcIm1yeVwiLFxuICBcIm11cFwiOiBcInJhalwiLFxuICBcIm13alwiOiBcInZhalwiLFxuICBcIm15YVwiOiBcIm15XCIsXG4gIFwibXlkXCI6IFwiYW9nXCIsXG4gIFwibXl0XCI6IFwibXJ5XCIsXG4gIFwibmFkXCI6IFwieG55XCIsXG4gIFwibmF1XCI6IFwibmFcIixcbiAgXCJuYXZcIjogXCJudlwiLFxuICBcIm5ibFwiOiBcIm5yXCIsXG4gIFwibmNwXCI6IFwia2R6XCIsXG4gIFwibmRlXCI6IFwibmRcIixcbiAgXCJuZG9cIjogXCJuZ1wiLFxuICBcIm5lcFwiOiBcIm5lXCIsXG4gIFwibmxkXCI6IFwibmxcIixcbiAgXCJubm9cIjogXCJublwiLFxuICBcIm5uc1wiOiBcIm5iclwiLFxuICBcIm5ueFwiOiBcIm5ndlwiLFxuICBcIm5vXCI6IFwibmJcIixcbiAgXCJuby1ib2tcIjogXCJuYlwiLFxuICBcIm5vLUJPS01BTFwiOiBcIm5iXCIsXG4gIFwibm8tbnluXCI6IFwibm5cIixcbiAgXCJuby1OWU5PUlNLXCI6IFwibm5cIixcbiAgXCJub2JcIjogXCJuYlwiLFxuICBcIm5vclwiOiBcIm5iXCIsXG4gIFwibnBpXCI6IFwibmVcIixcbiAgXCJudHNcIjogXCJwaWpcIixcbiAgXCJueWFcIjogXCJueVwiLFxuICBcIm9jaVwiOiBcIm9jXCIsXG4gIFwib2pnXCI6IFwib2pcIixcbiAgXCJvamlcIjogXCJvalwiLFxuICBcIm9yaVwiOiBcIm9yXCIsXG4gIFwib3JtXCI6IFwib21cIixcbiAgXCJvcnlcIjogXCJvclwiLFxuICBcIm9zc1wiOiBcIm9zXCIsXG4gIFwib3VuXCI6IFwidmFqXCIsXG4gIFwicGEtSU5cIjogXCJwYS1HdXJ1LUlOXCIsXG4gIFwicGEtUEtcIjogXCJwYS1BcmFiLVBLXCIsXG4gIFwicGFuXCI6IFwicGFcIixcbiAgXCJwYnVcIjogXCJwc1wiLFxuICBcInBjclwiOiBcImFkeFwiLFxuICBcInBlclwiOiBcImZhXCIsXG4gIFwicGVzXCI6IFwiZmFcIixcbiAgXCJwbGlcIjogXCJwaVwiLFxuICBcInBsdFwiOiBcIm1nXCIsXG4gIFwicG1jXCI6IFwiaHV3XCIsXG4gIFwicG11XCI6IFwicGhyXCIsXG4gIFwicG5iXCI6IFwibGFoXCIsXG4gIFwicG9sXCI6IFwicGxcIixcbiAgXCJwb3JcIjogXCJwdFwiLFxuICBcInBwYVwiOiBcImJmeVwiLFxuICBcInBwclwiOiBcImxjcVwiLFxuICBcInByc1wiOiBcImZhLUFGXCIsXG4gIFwicHJ5XCI6IFwicHJ0XCIsXG4gIFwicHVzXCI6IFwicHNcIixcbiAgXCJwdXpcIjogXCJwdWJcIixcbiAgXCJxdWVcIjogXCJxdVwiLFxuICBcInF1elwiOiBcInF1XCIsXG4gIFwicm15XCI6IFwicm9tXCIsXG4gIFwicm9oXCI6IFwicm1cIixcbiAgXCJyb25cIjogXCJyb1wiLFxuICBcInJ1bVwiOiBcInJvXCIsXG4gIFwicnVuXCI6IFwicm5cIixcbiAgXCJydXNcIjogXCJydVwiLFxuICBcInNhZ1wiOiBcInNnXCIsXG4gIFwic2FuXCI6IFwic2FcIixcbiAgXCJzY2FcIjogXCJobGVcIixcbiAgXCJzY2NcIjogXCJzclwiLFxuICBcInNjclwiOiBcImhyXCIsXG4gIFwic2duLUJFLUZSXCI6IFwic2ZiXCIsXG4gIFwic2duLUJFLU5MXCI6IFwidmd0XCIsXG4gIFwic2duLUNILURFXCI6IFwic2dnXCIsXG4gIFwic2hcIjogXCJzci1MYXRuXCIsXG4gIFwic2hpLU1BXCI6IFwic2hpLVRmbmctTUFcIixcbiAgXCJzaW5cIjogXCJzaVwiLFxuICBcInNra1wiOiBcIm95YlwiLFxuICBcInNsa1wiOiBcInNrXCIsXG4gIFwic2xvXCI6IFwic2tcIixcbiAgXCJzbHZcIjogXCJzbFwiLFxuICBcInNtZVwiOiBcInNlXCIsXG4gIFwic21vXCI6IFwic21cIixcbiAgXCJzbmFcIjogXCJzblwiLFxuICBcInNuZFwiOiBcInNkXCIsXG4gIFwic29tXCI6IFwic29cIixcbiAgXCJzb3RcIjogXCJzdFwiLFxuICBcInNwYVwiOiBcImVzXCIsXG4gIFwic3B5XCI6IFwia2xuXCIsXG4gIFwic3FpXCI6IFwic3FcIixcbiAgXCJzci1CQVwiOiBcInNyLUN5cmwtQkFcIixcbiAgXCJzci1NRVwiOiBcInNyLUxhdG4tTUVcIixcbiAgXCJzci1SU1wiOiBcInNyLUN5cmwtUlNcIixcbiAgXCJzci1YS1wiOiBcInNyLUN5cmwtWEtcIixcbiAgXCJzcmNcIjogXCJzY1wiLFxuICBcInNyZFwiOiBcInNjXCIsXG4gIFwic3JwXCI6IFwic3JcIixcbiAgXCJzc3dcIjogXCJzc1wiLFxuICBcInN1blwiOiBcInN1XCIsXG4gIFwic3dhXCI6IFwic3dcIixcbiAgXCJzd2NcIjogXCJzdy1DRFwiLFxuICBcInN3ZVwiOiBcInN2XCIsXG4gIFwic3doXCI6IFwic3dcIixcbiAgXCJ0YWhcIjogXCJ0eVwiLFxuICBcInRhbVwiOiBcInRhXCIsXG4gIFwidGF0XCI6IFwidHRcIixcbiAgXCJ0ZHVcIjogXCJkdHBcIixcbiAgXCJ0ZWxcIjogXCJ0ZVwiLFxuICBcInRna1wiOiBcInRnXCIsXG4gIFwidGdsXCI6IFwiZmlsXCIsXG4gIFwidGhhXCI6IFwidGhcIixcbiAgXCJ0aGNcIjogXCJ0cG9cIixcbiAgXCJ0aHhcIjogXCJveWJcIixcbiAgXCJ0aWJcIjogXCJib1wiLFxuICBcInRpZVwiOiBcInJhc1wiLFxuICBcInRpclwiOiBcInRpXCIsXG4gIFwidGtrXCI6IFwidHdtXCIsXG4gIFwidGxcIjogXCJmaWxcIixcbiAgXCJ0bHdcIjogXCJ3ZW9cIixcbiAgXCJ0bXBcIjogXCJ0eWpcIixcbiAgXCJ0bmVcIjogXCJrYWtcIixcbiAgXCJ0bmZcIjogXCJmYS1hZlwiLFxuICBcInRvblwiOiBcInRvXCIsXG4gIFwidHNmXCI6IFwidGFqXCIsXG4gIFwidHNuXCI6IFwidG5cIixcbiAgXCJ0c29cIjogXCJ0c1wiLFxuICBcInR0cVwiOiBcInRtaFwiLFxuICBcInR1a1wiOiBcInRrXCIsXG4gIFwidHVyXCI6IFwidHJcIixcbiAgXCJ0d1wiOiBcImFrXCIsXG4gIFwidHdpXCI6IFwiYWtcIixcbiAgXCJ0em0tTGF0bi1NQVwiOiBcInR6bS1NQVwiLFxuICBcInVnLUFyYWItQ05cIjogXCJ1Zy1DTlwiLFxuICBcInVpZ1wiOiBcInVnXCIsXG4gIFwidWtyXCI6IFwidWtcIixcbiAgXCJ1bXVcIjogXCJkZWxcIixcbiAgXCJ1b2tcIjogXCJlbWFcIixcbiAgXCJ1cmRcIjogXCJ1clwiLFxuICBcInV6LUFGXCI6IFwidXotQXJhYi1BRlwiLFxuICBcInV6LVVaXCI6IFwidXotTGF0bi1VWlwiLFxuICBcInV6YlwiOiBcInV6XCIsXG4gIFwidXpuXCI6IFwidXpcIixcbiAgXCJ2YWktTFJcIjogXCJ2YWktVmFpaS1MUlwiLFxuICBcInZlblwiOiBcInZlXCIsXG4gIFwidmllXCI6IFwidmlcIixcbiAgXCJ2b2xcIjogXCJ2b1wiLFxuICBcIndlbFwiOiBcImN5XCIsXG4gIFwid2xuXCI6IFwid2FcIixcbiAgXCJ3b2xcIjogXCJ3b1wiLFxuICBcInhiYVwiOiBcImNheFwiLFxuICBcInhob1wiOiBcInhoXCIsXG4gIFwieGlhXCI6IFwiYWNuXCIsXG4gIFwieGtoXCI6IFwid2F3XCIsXG4gIFwieHBlXCI6IFwia3BlXCIsXG4gIFwieHNqXCI6IFwic3VqXCIsXG4gIFwieHNsXCI6IFwiZGVuXCIsXG4gIFwieWJkXCI6IFwicmtpXCIsXG4gIFwieWRkXCI6IFwieWlcIixcbiAgXCJ5aWRcIjogXCJ5aVwiLFxuICBcInltYVwiOiBcImxyclwiLFxuICBcInltdFwiOiBcIm10bVwiLFxuICBcInlvclwiOiBcInlvXCIsXG4gIFwieW9zXCI6IFwiem9tXCIsXG4gIFwieXVlLUNOXCI6IFwieXVlLUhhbnMtQ05cIixcbiAgXCJ5dWUtSEtcIjogXCJ5dWUtSGFudC1IS1wiLFxuICBcInl1dVwiOiBcInl1Z1wiLFxuICBcInphaVwiOiBcInphcFwiLFxuICBcInpoLUNOXCI6IFwiemgtSGFucy1DTlwiLFxuICBcInpoLWd1b3l1XCI6IFwiemhcIixcbiAgXCJ6aC1oYWtrYVwiOiBcImhha1wiLFxuICBcInpoLUhLXCI6IFwiemgtSGFudC1IS1wiLFxuICBcInpoLW1pbi1uYW5cIjogXCJuYW5cIixcbiAgXCJ6aC1NT1wiOiBcInpoLUhhbnQtTU9cIixcbiAgXCJ6aC1TR1wiOiBcInpoLUhhbnMtU0dcIixcbiAgXCJ6aC1UV1wiOiBcInpoLUhhbnQtVFdcIixcbiAgXCJ6aC14aWFuZ1wiOiBcImhzblwiLFxuICBcInpoLW1pblwiOiBcIm5hbi14LXpoLW1pblwiLFxuICBcInpoYVwiOiBcInphXCIsXG4gIFwiemhvXCI6IFwiemhcIixcbiAgXCJ6c21cIjogXCJtc1wiLFxuICBcInp1bFwiOiBcInp1XCIsXG4gIFwienliXCI6IFwiemFcIlxufTsiLCIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmUgIFxuZXhwb3J0IGRlZmF1bHQge1xuICBcImVuLTE1MFwiOiBcImVuLTAwMVwiLFxuICBcImVuLUFHXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQUlcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1BVVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUJCXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1CU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLUJXXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQlpcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1DQVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUNDXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQ0tcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1DTVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUNYXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQ1lcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1ER1wiOiBcImVuLTAwMVwiLFxuICBcImVuLURNXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tRVJcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1GSlwiOiBcImVuLTAwMVwiLFxuICBcImVuLUZLXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tRk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1HQlwiOiBcImVuLTAwMVwiLFxuICBcImVuLUdEXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tR0dcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1HSFwiOiBcImVuLTAwMVwiLFxuICBcImVuLUdJXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tR01cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1HWVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUhLXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tSUVcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1JTFwiOiBcImVuLTAwMVwiLFxuICBcImVuLUlNXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tSU5cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1JT1wiOiBcImVuLTAwMVwiLFxuICBcImVuLUpFXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tSk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1LRVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUtJXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tS05cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1LWVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUxDXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTFJcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1MU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLU1HXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTU9cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1NU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLU1UXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTVVcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1NV1wiOiBcImVuLTAwMVwiLFxuICBcImVuLU1ZXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTkFcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1ORlwiOiBcImVuLTAwMVwiLFxuICBcImVuLU5HXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTlJcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1OVVwiOiBcImVuLTAwMVwiLFxuICBcImVuLU5aXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tUEdcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1QSFwiOiBcImVuLTAwMVwiLFxuICBcImVuLVBLXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tUE5cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1QV1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVJXXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tU0JcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1TQ1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVNEXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tU0dcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1TSFwiOiBcImVuLTAwMVwiLFxuICBcImVuLVNMXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tU1NcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1TWFwiOiBcImVuLTAwMVwiLFxuICBcImVuLVNaXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVENcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1US1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVRPXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVFRcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1UVlwiOiBcImVuLTAwMVwiLFxuICBcImVuLVRaXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVUdcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1WQ1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVZHXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVlVcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1XU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVpBXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tWk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1aV1wiOiBcImVuLTAwMVwiLFxuICBcImVuLUFUXCI6IFwiZW4tMTUwXCIsXG4gIFwiZW4tQkVcIjogXCJlbi0xNTBcIixcbiAgXCJlbi1DSFwiOiBcImVuLTE1MFwiLFxuICBcImVuLURFXCI6IFwiZW4tMTUwXCIsXG4gIFwiZW4tREtcIjogXCJlbi0xNTBcIixcbiAgXCJlbi1GSVwiOiBcImVuLTE1MFwiLFxuICBcImVuLU5MXCI6IFwiZW4tMTUwXCIsXG4gIFwiZW4tU0VcIjogXCJlbi0xNTBcIixcbiAgXCJlbi1TSVwiOiBcImVuLTE1MFwiLFxuICBcImVzLUFSXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtQk9cIjogXCJlcy00MTlcIixcbiAgXCJlcy1CUlwiOiBcImVzLTQxOVwiLFxuICBcImVzLUJaXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtQ0xcIjogXCJlcy00MTlcIixcbiAgXCJlcy1DT1wiOiBcImVzLTQxOVwiLFxuICBcImVzLUNSXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtQ1VcIjogXCJlcy00MTlcIixcbiAgXCJlcy1ET1wiOiBcImVzLTQxOVwiLFxuICBcImVzLUVDXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtR1RcIjogXCJlcy00MTlcIixcbiAgXCJlcy1ITlwiOiBcImVzLTQxOVwiLFxuICBcImVzLU1YXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtTklcIjogXCJlcy00MTlcIixcbiAgXCJlcy1QQVwiOiBcImVzLTQxOVwiLFxuICBcImVzLVBFXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtUFJcIjogXCJlcy00MTlcIixcbiAgXCJlcy1QWVwiOiBcImVzLTQxOVwiLFxuICBcImVzLVNWXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtVVNcIjogXCJlcy00MTlcIixcbiAgXCJlcy1VWVwiOiBcImVzLTQxOVwiLFxuICBcImVzLVZFXCI6IFwiZXMtNDE5XCIsXG4gIFwicHQtQU9cIjogXCJwdC1QVFwiLFxuICBcInB0LUNIXCI6IFwicHQtUFRcIixcbiAgXCJwdC1DVlwiOiBcInB0LVBUXCIsXG4gIFwicHQtRlJcIjogXCJwdC1QVFwiLFxuICBcInB0LUdRXCI6IFwicHQtUFRcIixcbiAgXCJwdC1HV1wiOiBcInB0LVBUXCIsXG4gIFwicHQtTFVcIjogXCJwdC1QVFwiLFxuICBcInB0LU1PXCI6IFwicHQtUFRcIixcbiAgXCJwdC1NWlwiOiBcInB0LVBUXCIsXG4gIFwicHQtU1RcIjogXCJwdC1QVFwiLFxuICBcInB0LVRMXCI6IFwicHQtUFRcIixcbiAgXCJ6aC1IYW50LU1PXCI6IFwiemgtSGFudC1IS1wiXG59OyIsImltcG9ydCBhbGlhc2VzIGZyb20gJy4vYWxpYXNlcyc7XG5pbXBvcnQgcGFyZW50TG9jYWxlcyBmcm9tICcuL3BhcmVudExvY2FsZXMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnLi9pbnZhcmlhbnQnO1xuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG4gKiBAcGFyYW0gYXJnXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRvT2JqZWN0KGFyZykge1xuICBpZiAoYXJnID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmRlZmluZWQvbnVsbCBjYW5ub3QgYmUgY29udmVydGVkIHRvIG9iamVjdCcpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdChhcmcpO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvc3RyaW5nXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKG8pIHtcbiAgLy8gT25seSBzeW1ib2wgaXMgaXJyZWd1bGFyLi4uXG4gIGlmICh0eXBlb2YgbyA9PT0gJ3N5bWJvbCcpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIH1cblxuICByZXR1cm4gU3RyaW5nKG8pO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLWdldG9wdGlvblxuICogQHBhcmFtIG9wdHNcbiAqIEBwYXJhbSBwcm9wXG4gKiBAcGFyYW0gdHlwZVxuICogQHBhcmFtIHZhbHVlc1xuICogQHBhcmFtIGZhbGxiYWNrXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9wdGlvbihvcHRzLCBwcm9wLCB0eXBlLCB2YWx1ZXMsIGZhbGxiYWNrKSB7XG4gIC8vIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9wdHMsIHByb3ApO1xuICB2YXIgdmFsdWUgPSBvcHRzW3Byb3BdO1xuXG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGUgIT09ICdib29sZWFuJyAmJiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCB0eXBlJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgdmFsdWUgPSBCb29sZWFuKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWVzLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gdmFsID09IHZhbHVlO1xuICAgIH0pLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IodmFsdWUgKyBcIiBpcyBub3Qgd2l0aGluIFwiICsgdmFsdWVzLmpvaW4oJywgJykpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxsYmFjaztcbn1cbi8qKlxuICogaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy1kZWZhdWx0bnVtYmVyb3B0aW9uXG4gKiBAcGFyYW0gdmFsXG4gKiBAcGFyYW0gbWluXG4gKiBAcGFyYW0gbWF4XG4gKiBAcGFyYW0gZmFsbGJhY2tcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdE51bWJlck9wdGlvbih2YWwsIG1pbiwgbWF4LCBmYWxsYmFjaykge1xuICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKTtcblxuICAgIGlmIChpc05hTih2YWwpIHx8IHZhbCA8IG1pbiB8fCB2YWwgPiBtYXgpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKHZhbCArIFwiIGlzIG91dHNpZGUgb2YgcmFuZ2UgW1wiICsgbWluICsgXCIsIFwiICsgbWF4ICsgXCJdXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLmZsb29yKHZhbCk7XG4gIH1cblxuICByZXR1cm4gZmFsbGJhY2s7XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtZ2V0bnVtYmVyb3B0aW9uXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gbWluXG4gKiBAcGFyYW0gbWF4XG4gKiBAcGFyYW0gZmFsbGJhY2tcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT3B0aW9uKG9wdGlvbnMsIHByb3BlcnR5LCBtaW5pbXVtLCBtYXhpbXVtLCBmYWxsYmFjaykge1xuICB2YXIgdmFsID0gb3B0aW9uc1twcm9wZXJ0eV07XG4gIHJldHVybiBkZWZhdWx0TnVtYmVyT3B0aW9uKHZhbCwgbWluaW11bSwgbWF4aW11bSwgZmFsbGJhY2spO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsaWFzZXNCeUxhbmcobGFuZykge1xuICByZXR1cm4gT2JqZWN0LmtleXMoYWxpYXNlcykucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGxvY2FsZSkge1xuICAgIGlmIChsb2NhbGUuc3BsaXQoJy0nKVswXSA9PT0gbGFuZykge1xuICAgICAgYWxsW2xvY2FsZV0gPSBhbGlhc2VzW2xvY2FsZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbDtcbiAgfSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudExvY2FsZXNCeUxhbmcobGFuZykge1xuICByZXR1cm4gT2JqZWN0LmtleXMocGFyZW50TG9jYWxlcykucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGxvY2FsZSkge1xuICAgIGlmIChsb2NhbGUuc3BsaXQoJy0nKVswXSA9PT0gbGFuZykge1xuICAgICAgYWxsW2xvY2FsZV0gPSBwYXJlbnRMb2NhbGVzW2xvY2FsZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbDtcbiAgfSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldEludGVybmFsU2xvdChtYXAsIHBsLCBmaWVsZCwgdmFsdWUpIHtcbiAgaWYgKCFtYXAuZ2V0KHBsKSkge1xuICAgIG1hcC5zZXQocGwsIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICB9XG5cbiAgdmFyIHNsb3RzID0gbWFwLmdldChwbCk7XG4gIHNsb3RzW2ZpZWxkXSA9IHZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldE11bHRpSW50ZXJuYWxTbG90cyhtYXAsIHBsLCBwcm9wcykge1xuICBmb3IgKHZhciBfaSA9IDAsIF9hID0gT2JqZWN0LmtleXMocHJvcHMpOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBrID0gX2FbX2ldO1xuICAgIHNldEludGVybmFsU2xvdChtYXAsIHBsLCBrLCBwcm9wc1trXSk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFNsb3QobWFwLCBwbCwgZmllbGQpIHtcbiAgcmV0dXJuIGdldE11bHRpSW50ZXJuYWxTbG90cyhtYXAsIHBsLCBmaWVsZClbZmllbGRdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE11bHRpSW50ZXJuYWxTbG90cyhtYXAsIHBsKSB7XG4gIHZhciBmaWVsZHMgPSBbXTtcblxuICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgIGZpZWxkc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgfVxuXG4gIHZhciBzbG90cyA9IG1hcC5nZXQocGwpO1xuXG4gIGlmICghc2xvdHMpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHBsICsgXCIgSW50ZXJuYWxTbG90IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiKTtcbiAgfVxuXG4gIHJldHVybiBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGYpIHtcbiAgICBhbGxbZl0gPSBzbG90c1tmXTtcbiAgICByZXR1cm4gYWxsO1xuICB9LCBPYmplY3QuY3JlYXRlKG51bGwpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0xpdGVyYWxQYXJ0KHBhdHRlcm5QYXJ0KSB7XG4gIHJldHVybiBwYXR0ZXJuUGFydC50eXBlID09PSAnbGl0ZXJhbCc7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFydGl0aW9uUGF0dGVybihwYXR0ZXJuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGJlZ2luSW5kZXggPSBwYXR0ZXJuLmluZGV4T2YoJ3snKTtcbiAgdmFyIGVuZEluZGV4ID0gMDtcbiAgdmFyIG5leHRJbmRleCA9IDA7XG4gIHZhciBsZW5ndGggPSBwYXR0ZXJuLmxlbmd0aDtcblxuICB3aGlsZSAoYmVnaW5JbmRleCA8IHBhdHRlcm4ubGVuZ3RoICYmIGJlZ2luSW5kZXggPiAtMSkge1xuICAgIGVuZEluZGV4ID0gcGF0dGVybi5pbmRleE9mKCd9JywgYmVnaW5JbmRleCk7XG4gICAgaW52YXJpYW50KGVuZEluZGV4ID4gYmVnaW5JbmRleCwgXCJJbnZhbGlkIHBhdHRlcm4gXCIgKyBwYXR0ZXJuKTtcblxuICAgIGlmIChiZWdpbkluZGV4ID4gbmV4dEluZGV4KSB7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIHR5cGU6ICdsaXRlcmFsJyxcbiAgICAgICAgdmFsdWU6IHBhdHRlcm4uc3Vic3RyaW5nKG5leHRJbmRleCwgYmVnaW5JbmRleClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgIHR5cGU6IHBhdHRlcm4uc3Vic3RyaW5nKGJlZ2luSW5kZXggKyAxLCBlbmRJbmRleCksXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgbmV4dEluZGV4ID0gZW5kSW5kZXggKyAxO1xuICAgIGJlZ2luSW5kZXggPSBwYXR0ZXJuLmluZGV4T2YoJ3snLCBuZXh0SW5kZXgpO1xuICB9XG5cbiAgaWYgKG5leHRJbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgIHR5cGU6ICdsaXRlcmFsJyxcbiAgICAgIHZhbHVlOiBwYXR0ZXJuLnN1YnN0cmluZyhuZXh0SW5kZXgsIGxlbmd0aClcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtc2V0bmZkaWdpdG9wdGlvbnNcbiAqIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC11bmlmaWVkLWludGwtbnVtYmVyZm9ybWF0L3NlY3Rpb24xMS9udW1iZXJmb3JtYXRfZGlmZl9vdXQuaHRtbCNzZWMtc2V0bmZkaWdpdG9wdGlvbnNcbiAqIEBwYXJhbSBpbnRsT2JqXG4gKiBAcGFyYW0gb3B0c1xuICogQHBhcmFtIG1uZmREZWZhdWx0XG4gKiBAcGFyYW0gbXhmZERlZmF1bHRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgb3B0cywgbW5mZERlZmF1bHQsIG14ZmREZWZhdWx0KSB7XG4gIHZhciBtbmlkID0gZ2V0TnVtYmVyT3B0aW9uKG9wdHMsICdtaW5pbXVtSW50ZWdlckRpZ2l0cycsIDEsIDIxLCAxKTtcbiAgdmFyIG1uZmQgPSBvcHRzLm1pbmltdW1GcmFjdGlvbkRpZ2l0cztcbiAgdmFyIG14ZmQgPSBvcHRzLm1heGltdW1GcmFjdGlvbkRpZ2l0cztcbiAgdmFyIG1uc2QgPSBvcHRzLm1pbmltdW1TaWduaWZpY2FudERpZ2l0cztcbiAgdmFyIG14c2QgPSBvcHRzLm1heGltdW1TaWduaWZpY2FudERpZ2l0cztcbiAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1JbnRlZ2VyRGlnaXRzJywgbW5pZCk7XG5cbiAgaWYgKG1uc2QgIT09IHVuZGVmaW5lZCB8fCBteHNkICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAncm91bmRpbmdUeXBlJywgJ3NpZ25pZmljYW50RGlnaXRzJyk7XG4gICAgbW5zZCA9IGRlZmF1bHROdW1iZXJPcHRpb24obW5zZCwgMSwgMjEsIDEpO1xuICAgIG14c2QgPSBkZWZhdWx0TnVtYmVyT3B0aW9uKG14c2QsIG1uc2QsIDIxLCAyMSk7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1TaWduaWZpY2FudERpZ2l0cycsIG1uc2QpO1xuICAgIHNldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIGludGxPYmosICdtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMnLCBteHNkKTtcbiAgfSBlbHNlIGlmIChtbmZkICE9PSB1bmRlZmluZWQgfHwgbXhmZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ3JvdW5kaW5nVHlwZScsICdmcmFjdGlvbkRpZ2l0cycpO1xuICAgIG1uZmQgPSBkZWZhdWx0TnVtYmVyT3B0aW9uKG1uZmQsIDAsIDIwLCBtbmZkRGVmYXVsdCk7XG4gICAgdmFyIG14ZmRBY3R1YWxEZWZhdWx0ID0gTWF0aC5tYXgobW5mZCwgbXhmZERlZmF1bHQpO1xuICAgIG14ZmQgPSBkZWZhdWx0TnVtYmVyT3B0aW9uKG14ZmQsIG1uZmQsIDIwLCBteGZkQWN0dWFsRGVmYXVsdCk7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1GcmFjdGlvbkRpZ2l0cycsIG1uZmQpO1xuICAgIHNldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIGludGxPYmosICdtYXhpbXVtRnJhY3Rpb25EaWdpdHMnLCBteGZkKTtcbiAgfSBlbHNlIGlmIChnZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAnbm90YXRpb24nKSA9PT0gJ2NvbXBhY3QnKSB7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ3JvdW5kaW5nVHlwZScsICdjb21wYWN0Um91bmRpbmcnKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAncm91bmRpbmdUeXBlJywgJ2ZyYWN0aW9uRGlnaXRzJyk7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1GcmFjdGlvbkRpZ2l0cycsIG1uZmREZWZhdWx0KTtcbiAgICBzZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAnbWF4aW11bUZyYWN0aW9uRGlnaXRzJywgbXhmZERlZmF1bHQpO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0SXMoeCwgeSkge1xuICBpZiAoT2JqZWN0LmlzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5pcyh4LCB5KTtcbiAgfSAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG5cblxuICBpZiAoeCA9PT0geSkge1xuICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG5cblxuICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xufVxudmFyIE5PVF9BX1pfUkVHRVggPSAvW15BLVpdLztcbi8qKlxuICogVGhpcyBmb2xsb3dzIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtY2FzZS1zZW5zaXRpdml0eS1hbmQtY2FzZS1tYXBwaW5nXG4gKiBAcGFyYW0gc3RyIHN0cmluZyB0byBjb252ZXJ0XG4gKi9cblxuZnVuY3Rpb24gdG9VcHBlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFthLXpdKS9nLCBmdW5jdGlvbiAoXywgYykge1xuICAgIHJldHVybiBjLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdW5pZmllZC1pbnRsLW51bWJlcmZvcm1hdC9zZWN0aW9uNi9sb2NhbGVzLWN1cnJlbmNpZXMtdHpfcHJvcG9zZWRfb3V0Lmh0bWwjc2VjLWlzd2VsbGZvcm1lZGN1cnJlbmN5Y29kZVxuICogQHBhcmFtIGN1cnJlbmN5XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gaXNXZWxsRm9ybWVkQ3VycmVuY3lDb2RlKGN1cnJlbmN5KSB7XG4gIGN1cnJlbmN5ID0gdG9VcHBlckNhc2UoY3VycmVuY3kpO1xuXG4gIGlmIChjdXJyZW5jeS5sZW5ndGggIT09IDMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoTk9UX0FfWl9SRUdFWC50ZXN0KGN1cnJlbmN5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufSIsIi8qKlxuICogSUUxMS1zYWZlIHZlcnNpb24gb2YgZ2V0Q2Fub25pY2FsTG9jYWxlcyBzaW5jZSBpdCdzIEVTMjAxNlxuICogQHBhcmFtIGxvY2FsZXMgbG9jYWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2Fub25pY2FsTG9jYWxlcyhsb2NhbGVzKSB7XG4gIC8vIElFMTFcbiAgdmFyIGdldENhbm9uaWNhbExvY2FsZXMgPSBJbnRsLmdldENhbm9uaWNhbExvY2FsZXM7XG5cbiAgaWYgKHR5cGVvZiBnZXRDYW5vbmljYWxMb2NhbGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGdldENhbm9uaWNhbExvY2FsZXMobG9jYWxlcyk7XG4gIH0gLy8gTk9URTogd2UgbXVzdCBOT1QgY2FsbCBgc3VwcG9ydGVkTG9jYWxlc09mYCBvZiBhIGZvcm1hdGpzIHBvbHlmaWxsLCBvciB0aGVpciBpbXBsZW1lbnRhdGlvblxuICAvLyB3aWxsIGV2ZW4gZXZlbnR1YWxseSBjYWxsIHRoaXMgbWV0aG9kIHJlY3Vyc2l2ZWx5LiBIZXJlIHdlIHVzZSBgSW50bC5EYXRlVGltZUZvcm1hdGAgc2luY2UgaXRcbiAgLy8gaXMgbm90IHBvbHlmaWxsZWQgYnkgYEBmb3JtYXRqc2AuXG4gIC8vIFRPRE86IEZpeCBUeXBlU2NyaXB0IHR5cGUgZGVmIGZvciB0aGlzIGJjIHVuZGVmaW5lZCBpcyBqdXN0IGZpbmVcblxuXG4gIHJldHVybiBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzKTtcbn0iLCJ2YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxudmFyIF9fYXNzaWduID0gdGhpcyAmJiB0aGlzLl9fYXNzaWduIHx8IGZ1bmN0aW9uICgpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBzID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBwIGluIHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHQ7XG4gIH07XG5cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG5pbXBvcnQgeyBnZXRDYW5vbmljYWxMb2NhbGVzIH0gZnJvbSAnLi9nZXQtY2Fub25pY2FsLWxvY2FsZXMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnLi9pbnZhcmlhbnQnO1xuaW1wb3J0IHsgdG9PYmplY3QsIGdldE9wdGlvbiB9IGZyb20gJy4vcG9seWZpbGwtdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVMb2NhbGUoZ2V0RGVmYXVsdExvY2FsZSkge1xuICB2YXIgbG9va3VwTWF0Y2hlciA9IGNyZWF0ZUxvb2t1cE1hdGNoZXIoZ2V0RGVmYXVsdExvY2FsZSk7XG4gIHZhciBiZXN0Rml0TWF0Y2hlciA9IGNyZWF0ZUJlc3RGaXRNYXRjaGVyKGdldERlZmF1bHRMb2NhbGUpO1xuICAvKipcbiAgICogaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy1yZXNvbHZlbG9jYWxlXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiByZXNvbHZlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMsIHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgbG9jYWxlRGF0YSkge1xuICAgIHZhciBtYXRjaGVyID0gb3B0aW9ucy5sb2NhbGVNYXRjaGVyO1xuICAgIHZhciByO1xuXG4gICAgaWYgKG1hdGNoZXIgPT09ICdsb29rdXAnKSB7XG4gICAgICByID0gbG9va3VwTWF0Y2hlcihhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgciA9IGJlc3RGaXRNYXRjaGVyKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpO1xuICAgIH1cblxuICAgIHZhciBmb3VuZExvY2FsZSA9IHIubG9jYWxlO1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBsb2NhbGU6ICcnLFxuICAgICAgZGF0YUxvY2FsZTogZm91bmRMb2NhbGVcbiAgICB9O1xuICAgIHZhciBzdXBwb3J0ZWRFeHRlbnNpb24gPSAnLXUnO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwLCByZWxldmFudEV4dGVuc2lvbktleXNfMSA9IHJlbGV2YW50RXh0ZW5zaW9uS2V5czsgX2kgPCByZWxldmFudEV4dGVuc2lvbktleXNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBrZXkgPSByZWxldmFudEV4dGVuc2lvbktleXNfMVtfaV07XG4gICAgICB2YXIgZm91bmRMb2NhbGVEYXRhID0gbG9jYWxlRGF0YVtmb3VuZExvY2FsZV07XG4gICAgICBpbnZhcmlhbnQodHlwZW9mIGZvdW5kTG9jYWxlRGF0YSA9PT0gJ29iamVjdCcgJiYgZm91bmRMb2NhbGVEYXRhICE9PSBudWxsLCBcImxvY2FsZSBkYXRhIFwiICsga2V5ICsgXCIgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gICAgICB2YXIga2V5TG9jYWxlRGF0YSA9IGZvdW5kTG9jYWxlRGF0YVtrZXldO1xuICAgICAgaW52YXJpYW50KEFycmF5LmlzQXJyYXkoa2V5TG9jYWxlRGF0YSksIFwia2V5TG9jYWxlRGF0YSBmb3IgXCIgKyBrZXkgKyBcIiBtdXN0IGJlIGFuIGFycmF5XCIpO1xuICAgICAgdmFyIHZhbHVlID0ga2V5TG9jYWxlRGF0YVswXTtcbiAgICAgIGludmFyaWFudCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlID09PSBudWxsLCAndmFsdWUgbXVzdCBiZSBzdHJpbmcgb3IgbnVsbCcpO1xuICAgICAgdmFyIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gJyc7XG5cbiAgICAgIGlmIChyLmV4dGVuc2lvbikge1xuICAgICAgICB2YXIgcmVxdWVzdGVkVmFsdWUgPSB1bmljb2RlRXh0ZW5zaW9uVmFsdWUoci5leHRlbnNpb24sIGtleSk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAocmVxdWVzdGVkVmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICBpZiAofmtleUxvY2FsZURhdGEuaW5kZXhPZihyZXF1ZXN0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSByZXF1ZXN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uQWRkaXRpb24gPSBcIi1cIiArIGtleSArIFwiLVwiICsgdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh+cmVxdWVzdGVkVmFsdWUuaW5kZXhPZigndHJ1ZScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICd0cnVlJztcbiAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gXCItXCIgKyBrZXk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgaW4gb3B0aW9ucykge1xuICAgICAgICB2YXIgb3B0aW9uc1ZhbHVlID0gb3B0aW9uc1trZXldO1xuICAgICAgICBpbnZhcmlhbnQodHlwZW9mIG9wdGlvbnNWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9wdGlvbnNWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgb3B0aW9uc1ZhbHVlID09PSBudWxsLCAnb3B0aW9uc1ZhbHVlIG11c3QgYmUgU3RyaW5nLCBVbmRlZmluZWQgb3IgTnVsbCcpO1xuXG4gICAgICAgIGlmICh+a2V5TG9jYWxlRGF0YS5pbmRleE9mKG9wdGlvbnNWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAob3B0aW9uc1ZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBvcHRpb25zVmFsdWU7XG4gICAgICAgICAgICBzdXBwb3J0ZWRFeHRlbnNpb25BZGRpdGlvbiA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uICs9IHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0ZWRFeHRlbnNpb24ubGVuZ3RoID4gMikge1xuICAgICAgdmFyIHByaXZhdGVJbmRleCA9IGZvdW5kTG9jYWxlLmluZGV4T2YoJy14LScpO1xuXG4gICAgICBpZiAocHJpdmF0ZUluZGV4ID09PSAtMSkge1xuICAgICAgICBmb3VuZExvY2FsZSA9IGZvdW5kTG9jYWxlICsgc3VwcG9ydGVkRXh0ZW5zaW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByZUV4dGVuc2lvbiA9IGZvdW5kTG9jYWxlLnNsaWNlKDAsIHByaXZhdGVJbmRleCk7XG4gICAgICAgIHZhciBwb3N0RXh0ZW5zaW9uID0gZm91bmRMb2NhbGUuc2xpY2UocHJpdmF0ZUluZGV4LCBmb3VuZExvY2FsZS5sZW5ndGgpO1xuICAgICAgICBmb3VuZExvY2FsZSA9IHByZUV4dGVuc2lvbiArIHN1cHBvcnRlZEV4dGVuc2lvbiArIHBvc3RFeHRlbnNpb247XG4gICAgICB9XG5cbiAgICAgIGZvdW5kTG9jYWxlID0gZ2V0Q2Fub25pY2FsTG9jYWxlcyhmb3VuZExvY2FsZSlbMF07XG4gICAgfVxuXG4gICAgcmVzdWx0LmxvY2FsZSA9IGZvdW5kTG9jYWxlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtdW5pY29kZWV4dGVuc2lvbnZhbHVlXG4gKiBAcGFyYW0gZXh0ZW5zaW9uXG4gKiBAcGFyYW0ga2V5XG4gKi9cblxuZnVuY3Rpb24gdW5pY29kZUV4dGVuc2lvblZhbHVlKGV4dGVuc2lvbiwga2V5KSB7XG4gIGludmFyaWFudChrZXkubGVuZ3RoID09PSAyLCAna2V5IG11c3QgaGF2ZSAyIGVsZW1lbnRzJyk7XG4gIHZhciBzaXplID0gZXh0ZW5zaW9uLmxlbmd0aDtcbiAgdmFyIHNlYXJjaFZhbHVlID0gXCItXCIgKyBrZXkgKyBcIi1cIjtcbiAgdmFyIHBvcyA9IGV4dGVuc2lvbi5pbmRleE9mKHNlYXJjaFZhbHVlKTtcblxuICBpZiAocG9zICE9PSAtMSkge1xuICAgIHZhciBzdGFydCA9IHBvcyArIDQ7XG4gICAgdmFyIGVuZCA9IHN0YXJ0O1xuICAgIHZhciBrID0gc3RhcnQ7XG4gICAgdmFyIGRvbmUgPSBmYWxzZTtcblxuICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgdmFyIGUgPSBleHRlbnNpb24uaW5kZXhPZignLScsIGspO1xuICAgICAgdmFyIGxlbiA9IHZvaWQgMDtcblxuICAgICAgaWYgKGUgPT09IC0xKSB7XG4gICAgICAgIGxlbiA9IHNpemUgLSBrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gZSAtIGs7XG4gICAgICB9XG5cbiAgICAgIGlmIChsZW4gPT09IDIpIHtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGUgPT09IC0xKSB7XG4gICAgICAgIGVuZCA9IHNpemU7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5kID0gZTtcbiAgICAgICAgayA9IGUgKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHRlbnNpb24uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBzZWFyY2hWYWx1ZSA9IFwiLVwiICsga2V5O1xuICBwb3MgPSBleHRlbnNpb24uaW5kZXhPZihzZWFyY2hWYWx1ZSk7XG5cbiAgaWYgKHBvcyAhPT0gLTEgJiYgcG9zICsgMyA9PT0gc2l6ZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbnZhciBVTklDT0RFX0VYVEVOU0lPTl9TRVFVRU5DRV9SRUdFWCA9IC8tdSg/Oi1bMC05YS16XXsyLDh9KSsvZ2k7XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtYmVzdGF2YWlsYWJsZWxvY2FsZVxuICogQHBhcmFtIGF2YWlsYWJsZUxvY2FsZXNcbiAqIEBwYXJhbSBsb2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBiZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIGxvY2FsZSkge1xuICB2YXIgY2FuZGlkYXRlID0gbG9jYWxlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKH5hdmFpbGFibGVMb2NhbGVzLmluZGV4T2YoY2FuZGlkYXRlKSkge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgcG9zID0gY2FuZGlkYXRlLmxhc3RJbmRleE9mKCctJyk7XG5cbiAgICBpZiAoIX5wb3MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHBvcyA+PSAyICYmIGNhbmRpZGF0ZVtwb3MgLSAyXSA9PT0gJy0nKSB7XG4gICAgICBwb3MgLT0gMjtcbiAgICB9XG5cbiAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUuc2xpY2UoMCwgcG9zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMb29rdXBNYXRjaGVyKGdldERlZmF1bHRMb2NhbGUpIHtcbiAgLyoqXG4gICAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtbG9va3VwbWF0Y2hlclxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGxvb2t1cE1hdGNoZXIoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykge1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBsb2NhbGU6ICcnXG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gMCwgcmVxdWVzdGVkTG9jYWxlc18xID0gcmVxdWVzdGVkTG9jYWxlczsgX2kgPCByZXF1ZXN0ZWRMb2NhbGVzXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlc18xW19pXTtcbiAgICAgIHZhciBub0V4dGVuc2lvbkxvY2FsZSA9IGxvY2FsZS5yZXBsYWNlKFVOSUNPREVfRVhURU5TSU9OX1NFUVVFTkNFX1JFR0VYLCAnJyk7XG4gICAgICB2YXIgYXZhaWxhYmxlTG9jYWxlID0gYmVzdEF2YWlsYWJsZUxvY2FsZShhdmFpbGFibGVMb2NhbGVzLCBub0V4dGVuc2lvbkxvY2FsZSk7XG5cbiAgICAgIGlmIChhdmFpbGFibGVMb2NhbGUpIHtcbiAgICAgICAgcmVzdWx0LmxvY2FsZSA9IGF2YWlsYWJsZUxvY2FsZTtcblxuICAgICAgICBpZiAobG9jYWxlICE9PSBub0V4dGVuc2lvbkxvY2FsZSkge1xuICAgICAgICAgIHJlc3VsdC5leHRlbnNpb24gPSBsb2NhbGUuc2xpY2Uobm9FeHRlbnNpb25Mb2NhbGUubGVuZ3RoICsgMSwgbG9jYWxlLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdC5sb2NhbGUgPSBnZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmVzdEZpdE1hdGNoZXIoZ2V0RGVmYXVsdExvY2FsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gYmVzdEZpdE1hdGNoZXIoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykge1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBsb2NhbGU6ICcnXG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gMCwgcmVxdWVzdGVkTG9jYWxlc18yID0gcmVxdWVzdGVkTG9jYWxlczsgX2kgPCByZXF1ZXN0ZWRMb2NhbGVzXzIubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlc18yW19pXTtcbiAgICAgIHZhciBub0V4dGVuc2lvbkxvY2FsZSA9IGxvY2FsZS5yZXBsYWNlKFVOSUNPREVfRVhURU5TSU9OX1NFUVVFTkNFX1JFR0VYLCAnJyk7XG4gICAgICB2YXIgYXZhaWxhYmxlTG9jYWxlID0gYmVzdEF2YWlsYWJsZUxvY2FsZShhdmFpbGFibGVMb2NhbGVzLCBub0V4dGVuc2lvbkxvY2FsZSk7XG5cbiAgICAgIGlmIChhdmFpbGFibGVMb2NhbGUpIHtcbiAgICAgICAgcmVzdWx0LmxvY2FsZSA9IGF2YWlsYWJsZUxvY2FsZTtcblxuICAgICAgICBpZiAobG9jYWxlICE9PSBub0V4dGVuc2lvbkxvY2FsZSkge1xuICAgICAgICAgIHJlc3VsdC5leHRlbnNpb24gPSBsb2NhbGUuc2xpY2Uobm9FeHRlbnNpb25Mb2NhbGUubGVuZ3RoICsgMSwgbG9jYWxlLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdC5sb2NhbGUgPSBnZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZUhpZXJhcmNoeShsb2NhbGUsIGFsaWFzZXMsIHBhcmVudExvY2FsZXMpIHtcbiAgdmFyIHJlc3VsdHMgPSBbbG9jYWxlXTtcblxuICBpZiAoYWxpYXNlc1tsb2NhbGVdKSB7XG4gICAgbG9jYWxlID0gYWxpYXNlc1tsb2NhbGVdO1xuICAgIHJlc3VsdHMucHVzaChsb2NhbGUpO1xuICB9XG5cbiAgdmFyIHBhcmVudExvY2FsZSA9IHBhcmVudExvY2FsZXNbbG9jYWxlXTtcblxuICBpZiAocGFyZW50TG9jYWxlKSB7XG4gICAgcmVzdWx0cy5wdXNoKHBhcmVudExvY2FsZSk7XG4gIH1cblxuICB2YXIgbG9jYWxlUGFydHMgPSBsb2NhbGUuc3BsaXQoJy0nKTtcblxuICBmb3IgKHZhciBpID0gbG9jYWxlUGFydHMubGVuZ3RoOyBpID4gMTsgaS0tKSB7XG4gICAgcmVzdWx0cy5wdXNoKGxvY2FsZVBhcnRzLnNsaWNlKDAsIGkgLSAxKS5qb2luKCctJykpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykge1xuICB2YXIgc3Vic2V0ID0gW107XG5cbiAgZm9yICh2YXIgX2kgPSAwLCByZXF1ZXN0ZWRMb2NhbGVzXzMgPSByZXF1ZXN0ZWRMb2NhbGVzOyBfaSA8IHJlcXVlc3RlZExvY2FsZXNfMy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlc18zW19pXTtcbiAgICB2YXIgbm9FeHRlbnNpb25Mb2NhbGUgPSBsb2NhbGUucmVwbGFjZShVTklDT0RFX0VYVEVOU0lPTl9TRVFVRU5DRV9SRUdFWCwgJycpO1xuICAgIHZhciBhdmFpbGFibGVMb2NhbGUgPSBiZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uTG9jYWxlKTtcblxuICAgIGlmIChhdmFpbGFibGVMb2NhbGUpIHtcbiAgICAgIHN1YnNldC5wdXNoKGF2YWlsYWJsZUxvY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykge1xuICB2YXIgbWF0Y2hlciA9ICdiZXN0IGZpdCc7XG5cbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMgPSB0b09iamVjdChvcHRpb25zKTtcbiAgICBtYXRjaGVyID0gZ2V0T3B0aW9uKG9wdGlvbnMsICdsb2NhbGVNYXRjaGVyJywgJ3N0cmluZycsIFsnbG9va3VwJywgJ2Jlc3QgZml0J10sICdiZXN0IGZpdCcpO1xuICB9XG5cbiAgaWYgKG1hdGNoZXIgPT09ICdiZXN0IGZpdCcpIHtcbiAgICByZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTtcbiAgfVxuXG4gIHJldHVybiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpO1xufVxuXG52YXIgTWlzc2luZ0xvY2FsZURhdGFFcnJvciA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhNaXNzaW5nTG9jYWxlRGF0YUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIE1pc3NpbmdMb2NhbGVEYXRhRXJyb3IoKSB7XG4gICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy50eXBlID0gJ01JU1NJTkdfTE9DQUxFX0RBVEEnO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBNaXNzaW5nTG9jYWxlRGF0YUVycm9yO1xufShFcnJvcik7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01pc3NpbmdMb2NhbGVEYXRhRXJyb3IoZSkge1xuICByZXR1cm4gZS50eXBlID09PSAnTUlTU0lOR19MT0NBTEVfREFUQSc7XG59XG5leHBvcnQgZnVuY3Rpb24gdW5wYWNrRGF0YShsb2NhbGUsIGxvY2FsZURhdGEsXG4vKiogQnkgZGVmYXVsdCBzaGFsbG93IG1lcmdlIHRoZSBkaWN0aW9uYXJpZXMuICovXG5yZWR1Y2VyKSB7XG4gIGlmIChyZWR1Y2VyID09PSB2b2lkIDApIHtcbiAgICByZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcihhbGwsIGQpIHtcbiAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYWxsKSwgZCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBsb2NhbGVIaWVyYXJjaHkgPSBnZXRMb2NhbGVIaWVyYXJjaHkobG9jYWxlLCBsb2NhbGVEYXRhLmFsaWFzZXMsIGxvY2FsZURhdGEucGFyZW50TG9jYWxlcyk7XG4gIHZhciBkYXRhVG9NZXJnZSA9IGxvY2FsZUhpZXJhcmNoeS5tYXAoZnVuY3Rpb24gKGwpIHtcbiAgICByZXR1cm4gbG9jYWxlRGF0YS5kYXRhW2xdO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKCFkYXRhVG9NZXJnZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgTWlzc2luZ0xvY2FsZURhdGFFcnJvcihcIk1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIFxcXCJcIiArIGxvY2FsZSArIFwiXFxcIiwgbG9va3VwIGhpZXJhcmNoeTogXCIgKyBsb2NhbGVIaWVyYXJjaHkuam9pbignLCAnKSk7XG4gIH1cblxuICBkYXRhVG9NZXJnZS5yZXZlcnNlKCk7XG4gIHJldHVybiBkYXRhVG9NZXJnZS5yZWR1Y2UocmVkdWNlciwge30pO1xufSIsIi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC11bmlmaWVkLWludGwtbnVtYmVyZm9ybWF0L3NlY3Rpb242L2xvY2FsZXMtY3VycmVuY2llcy10el9kaWZmX291dC5odG1sI3NlYy1pc3NhbmN0aW9uZWRzaW1wbGV1bml0aWRlbnRpZmllclxuZXhwb3J0IHZhciBTQU5DVElPTkVEX1VOSVRTID0gWydhbmdsZS1kZWdyZWUnLCAnYXJlYS1hY3JlJywgJ2FyZWEtaGVjdGFyZScsICdjb25jZW50ci1wZXJjZW50JywgJ2RpZ2l0YWwtYml0JywgJ2RpZ2l0YWwtYnl0ZScsICdkaWdpdGFsLWdpZ2FiaXQnLCAnZGlnaXRhbC1naWdhYnl0ZScsICdkaWdpdGFsLWtpbG9iaXQnLCAnZGlnaXRhbC1raWxvYnl0ZScsICdkaWdpdGFsLW1lZ2FiaXQnLCAnZGlnaXRhbC1tZWdhYnl0ZScsICdkaWdpdGFsLXBldGFieXRlJywgJ2RpZ2l0YWwtdGVyYWJpdCcsICdkaWdpdGFsLXRlcmFieXRlJywgJ2R1cmF0aW9uLWRheScsICdkdXJhdGlvbi1ob3VyJywgJ2R1cmF0aW9uLW1pbGxpc2Vjb25kJywgJ2R1cmF0aW9uLW1pbnV0ZScsICdkdXJhdGlvbi1tb250aCcsICdkdXJhdGlvbi1zZWNvbmQnLCAnZHVyYXRpb24td2VlaycsICdkdXJhdGlvbi15ZWFyJywgJ2xlbmd0aC1jZW50aW1ldGVyJywgJ2xlbmd0aC1mb290JywgJ2xlbmd0aC1pbmNoJywgJ2xlbmd0aC1raWxvbWV0ZXInLCAnbGVuZ3RoLW1ldGVyJywgJ2xlbmd0aC1taWxlLXNjYW5kaW5hdmlhbicsICdsZW5ndGgtbWlsZScsICdsZW5ndGgtbWlsbGltZXRlcicsICdsZW5ndGgteWFyZCcsICdtYXNzLWdyYW0nLCAnbWFzcy1raWxvZ3JhbScsICdtYXNzLW91bmNlJywgJ21hc3MtcG91bmQnLCAnbWFzcy1zdG9uZScsICd0ZW1wZXJhdHVyZS1jZWxzaXVzJywgJ3RlbXBlcmF0dXJlLWZhaHJlbmhlaXQnLCAndm9sdW1lLWZsdWlkLW91bmNlJywgJ3ZvbHVtZS1nYWxsb24nLCAndm9sdW1lLWxpdGVyJywgJ3ZvbHVtZS1taWxsaWxpdGVyJ107IC8vIEluIENMRFIsIHRoZSB1bml0IG5hbWUgYWx3YXlzIGZvbGxvd3MgdGhlIGZvcm0gYG5hbWVzcGFjZS11bml0YCBwYXR0ZXJuLlxuLy8gRm9yIGV4YW1wbGU6IGBkaWdpdGFsLWJpdGAgaW5zdGVhZCBvZiBgYml0YC4gVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBuYW1lc3BhY2UgcHJlZml4LlxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5pdE5hbWVzcGFjZSh1bml0KSB7XG4gIHJldHVybiB1bml0LnJlcGxhY2UoL14oLio/KS0vLCAnJyk7XG59IiwiZXhwb3J0IHZhciBJbnRlcm5hbFNsb3RUb2tlbjtcblxuKGZ1bmN0aW9uIChJbnRlcm5hbFNsb3RUb2tlbikge1xuICAvLyBUbyBwcmV2ZW50IGNvbGxpc2lvbiB3aXRoIHswfSBpbiBDTERSXG4gIEludGVybmFsU2xvdFRva2VuW1wiY29tcGFjdE5hbWVcIl0gPSBcImNvbXBhY3ROYW1lXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wiY29tcGFjdFN5bWJvbFwiXSA9IFwiY29tcGFjdFN5bWJvbFwiO1xuICBJbnRlcm5hbFNsb3RUb2tlbltcImN1cnJlbmN5Q29kZVwiXSA9IFwiY3VycmVuY3lDb2RlXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wiY3VycmVuY3lOYW1lXCJdID0gXCJjdXJyZW5jeU5hbWVcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJjdXJyZW5jeU5hcnJvd1N5bWJvbFwiXSA9IFwiY3VycmVuY3lOYXJyb3dTeW1ib2xcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJjdXJyZW5jeVN5bWJvbFwiXSA9IFwiY3VycmVuY3lTeW1ib2xcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJtaW51c1NpZ25cIl0gPSBcIm1pbnVzU2lnblwiO1xuICBJbnRlcm5hbFNsb3RUb2tlbltcIm51bWJlclwiXSA9IFwibnVtYmVyXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wicGVyY2VudFNpZ25cIl0gPSBcInBlcmNlbnRTaWduXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wicGx1c1NpZ25cIl0gPSBcInBsdXNTaWduXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wic2NpZW50aWZpY0V4cG9uZW50XCJdID0gXCJzY2llbnRpZmljRXhwb25lbnRcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJzY2llbnRpZmljU2VwYXJhdG9yXCJdID0gXCJzY2llbnRpZmljU2VwYXJhdG9yXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1widW5pdE5hbWVcIl0gPSBcInVuaXROYW1lXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1widW5pdE5hcnJvd1N5bWJvbFwiXSA9IFwidW5pdE5hcnJvd1N5bWJvbFwiO1xuICBJbnRlcm5hbFNsb3RUb2tlbltcInVuaXRTeW1ib2xcIl0gPSBcInVuaXRTeW1ib2xcIjtcbn0pKEludGVybmFsU2xvdFRva2VuIHx8IChJbnRlcm5hbFNsb3RUb2tlbiA9IHt9KSk7IiwiZXhwb3J0IHsgc2VsZWN0VW5pdCB9IGZyb20gJy4vZGlmZic7XG5leHBvcnQgeyBkZWZhdWx0TnVtYmVyT3B0aW9uLCBnZXRBbGlhc2VzQnlMYW5nLCBnZXRJbnRlcm5hbFNsb3QsIGdldE11bHRpSW50ZXJuYWxTbG90cywgZ2V0TnVtYmVyT3B0aW9uLCBnZXRPcHRpb24sIGdldFBhcmVudExvY2FsZXNCeUxhbmcsIGlzTGl0ZXJhbFBhcnQsIHBhcnRpdGlvblBhdHRlcm4sIHNldEludGVybmFsU2xvdCwgc2V0TXVsdGlJbnRlcm5hbFNsb3RzLCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlvbnMsIHRvT2JqZWN0LCBvYmplY3RJcywgaXNXZWxsRm9ybWVkQ3VycmVuY3lDb2RlLCB0b1N0cmluZyB9IGZyb20gJy4vcG9seWZpbGwtdXRpbHMnO1xuZXhwb3J0IHsgY3JlYXRlUmVzb2x2ZUxvY2FsZSwgZ2V0TG9jYWxlSGllcmFyY2h5LCBzdXBwb3J0ZWRMb2NhbGVzLCB1bnBhY2tEYXRhLCBpc01pc3NpbmdMb2NhbGVEYXRhRXJyb3IgfSBmcm9tICcuL3Jlc29sdmUtbG9jYWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdW5pdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9udW1iZXItdHlwZXMnO1xuZXhwb3J0IHsgZ2V0Q2Fub25pY2FsTG9jYWxlcyB9IGZyb20gJy4vZ2V0LWNhbm9uaWNhbC1sb2NhbGVzJztcbmV4cG9ydCB7IGludmFyaWFudCB9IGZyb20gJy4vaW52YXJpYW50JzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2650\n')},5981:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "k": function() { return /* binding */ invariant; }\n/* harmony export */ });\nfunction invariant(condition, message, Err) {\n if (Err === void 0) {\n Err = Error;\n }\n\n if (!condition) {\n throw new Err(message);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvaW52YXJpYW50LmpzPzQ5NWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTk4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBtZXNzYWdlLCBFcnIpIHtcbiAgaWYgKEVyciA9PT0gdm9pZCAwKSB7XG4gICAgRXJyID0gRXJyb3I7XG4gIH1cblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnIobWVzc2FnZSk7XG4gIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5981\n')},2393:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = true;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || "initial"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: "POP"\n });\n };\n\n source.addEventListener("popstate", popstateListener);\n return function () {\n source.removeEventListener("popstate", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === "number") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + ""\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? "replace" : "assign"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: "PUSH"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "/";\n var searchIndex = initialPath.indexOf("?");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : ""\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split("?"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? "" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? "?" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split("?"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? "" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexports.V5 = globalHistory;\n__webpack_unused_export__ = navigate;\n__webpack_unused_export__ = createHistory;\n__webpack_unused_export__ = createMemorySource;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2xpYi9oaXN0b3J5LmpzPzZiMDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViLHlCQUFrQjs7QUFFbEI7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLHVGQUF1RjtBQUN2RjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCwyQkFBMkI7QUFDM0I7QUFDQSxTQUFTLEVBQUU7O0FBRVg7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCw0REFBNEQ7QUFDNUQsa0VBQWtFO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDOztBQUV0QyxVQUFxQjtBQUNyQix5QkFBZ0I7QUFDaEIseUJBQXFCO0FBQ3JCLHlCQUEwQiIsImZpbGUiOiIyMzkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG52YXIgZ2V0TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRMb2NhdGlvbihzb3VyY2UpIHtcbiAgdmFyIF9zb3VyY2UkbG9jYXRpb24gPSBzb3VyY2UubG9jYXRpb24sXG4gICAgICBzZWFyY2ggPSBfc291cmNlJGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgIGhhc2ggPSBfc291cmNlJGxvY2F0aW9uLmhhc2gsXG4gICAgICBocmVmID0gX3NvdXJjZSRsb2NhdGlvbi5ocmVmLFxuICAgICAgb3JpZ2luID0gX3NvdXJjZSRsb2NhdGlvbi5vcmlnaW4sXG4gICAgICBwcm90b2NvbCA9IF9zb3VyY2UkbG9jYXRpb24ucHJvdG9jb2wsXG4gICAgICBob3N0ID0gX3NvdXJjZSRsb2NhdGlvbi5ob3N0LFxuICAgICAgaG9zdG5hbWUgPSBfc291cmNlJGxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgcG9ydCA9IF9zb3VyY2UkbG9jYXRpb24ucG9ydDtcbiAgdmFyIHBhdGhuYW1lID0gc291cmNlLmxvY2F0aW9uLnBhdGhuYW1lO1xuXG4gIGlmICghcGF0aG5hbWUgJiYgaHJlZiAmJiBjYW5Vc2VET00pIHtcbiAgICB2YXIgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgICBwYXRobmFtZSA9IHVybC5wYXRobmFtZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWU6IGVuY29kZVVSSShkZWNvZGVVUkkocGF0aG5hbWUpKSxcbiAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgb3JpZ2luOiBvcmlnaW4sXG4gICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgIGhvc3Q6IGhvc3QsXG4gICAgaG9zdG5hbWU6IGhvc3RuYW1lLFxuICAgIHBvcnQ6IHBvcnQsXG4gICAgc3RhdGU6IHNvdXJjZS5oaXN0b3J5LnN0YXRlLFxuICAgIGtleTogc291cmNlLmhpc3Rvcnkuc3RhdGUgJiYgc291cmNlLmhpc3Rvcnkuc3RhdGUua2V5IHx8IFwiaW5pdGlhbFwiXG4gIH07XG59O1xuXG52YXIgY3JlYXRlSGlzdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZUhpc3Rvcnkoc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24oc291cmNlKTtcbiAgdmFyIHRyYW5zaXRpb25pbmcgPSBmYWxzZTtcblxuICB2YXIgcmVzb2x2ZVRyYW5zaXRpb24gPSBmdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbigpIHt9O1xuXG4gIHJldHVybiB7XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgIH0sXG5cbiAgICBnZXQgdHJhbnNpdGlvbmluZygpIHtcbiAgICAgIHJldHVybiB0cmFuc2l0aW9uaW5nO1xuICAgIH0sXG5cbiAgICBfb25UcmFuc2l0aW9uQ29tcGxldGU6IGZ1bmN0aW9uIF9vblRyYW5zaXRpb25Db21wbGV0ZSgpIHtcbiAgICAgIHRyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHJlc29sdmVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICBsaXN0ZW46IGZ1bmN0aW9uIGxpc3RlbihsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgICB2YXIgcG9wc3RhdGVMaXN0ZW5lciA9IGZ1bmN0aW9uIHBvcHN0YXRlTGlzdGVuZXIoKSB7XG4gICAgICAgIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24oc291cmNlKTtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgICBhY3Rpb246IFwiUE9QXCJcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHBvcHN0YXRlTGlzdGVuZXIpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBwb3BzdGF0ZUxpc3RlbmVyKTtcbiAgICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICByZXR1cm4gZm4gIT09IGxpc3RlbmVyO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBuYXZpZ2F0ZTogZnVuY3Rpb24gbmF2aWdhdGUodG8pIHtcbiAgICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICAgICAgX3JlZiRyZXBsYWNlID0gX3JlZi5yZXBsYWNlLFxuICAgICAgICAgIHJlcGxhY2UgPSBfcmVmJHJlcGxhY2UgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZiRyZXBsYWNlO1xuXG4gICAgICBpZiAodHlwZW9mIHRvID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHNvdXJjZS5oaXN0b3J5LmdvKHRvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlID0gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAga2V5OiBEYXRlLm5vdygpICsgXCJcIlxuICAgICAgICB9KTsgLy8gdHJ5Li4uY2F0Y2ggaU9TIFNhZmFyaSBsaW1pdHMgdG8gMTAwIHB1c2hTdGF0ZSBjYWxsc1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHRyYW5zaXRpb25pbmcgfHwgcmVwbGFjZSkge1xuICAgICAgICAgICAgc291cmNlLmhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlLCBudWxsLCB0byk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvdXJjZS5oaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgbnVsbCwgdG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHNvdXJjZS5sb2NhdGlvbltyZXBsYWNlID8gXCJyZXBsYWNlXCIgOiBcImFzc2lnblwiXSh0byk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzb3VyY2UpO1xuICAgICAgdHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB2YXIgdHJhbnNpdGlvbiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVUcmFuc2l0aW9uID0gcmVzO1xuICAgICAgfSk7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RlbmVyKHtcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgICAgYWN0aW9uOiBcIlBVU0hcIlxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb247XG4gICAgfVxuICB9O1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFN0b3JlcyBoaXN0b3J5IGVudHJpZXMgaW4gbWVtb3J5IGZvciB0ZXN0aW5nIG9yIG90aGVyIHBsYXRmb3JtcyBsaWtlIE5hdGl2ZVxuXG5cbnZhciBjcmVhdGVNZW1vcnlTb3VyY2UgPSBmdW5jdGlvbiBjcmVhdGVNZW1vcnlTb3VyY2UoKSB7XG4gIHZhciBpbml0aWFsUGF0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogXCIvXCI7XG4gIHZhciBzZWFyY2hJbmRleCA9IGluaXRpYWxQYXRoLmluZGV4T2YoXCI/XCIpO1xuICB2YXIgaW5pdGlhbExvY2F0aW9uID0ge1xuICAgIHBhdGhuYW1lOiBzZWFyY2hJbmRleCA+IC0xID8gaW5pdGlhbFBhdGguc3Vic3RyKDAsIHNlYXJjaEluZGV4KSA6IGluaXRpYWxQYXRoLFxuICAgIHNlYXJjaDogc2VhcmNoSW5kZXggPiAtMSA/IGluaXRpYWxQYXRoLnN1YnN0cihzZWFyY2hJbmRleCkgOiBcIlwiXG4gIH07XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBzdGFjayA9IFtpbml0aWFsTG9jYXRpb25dO1xuICB2YXIgc3RhdGVzID0gW251bGxdO1xuICByZXR1cm4ge1xuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgIHJldHVybiBzdGFja1tpbmRleF07XG4gICAgfSxcblxuICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZm4pIHt9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgZm4pIHt9LFxuICAgIGhpc3Rvcnk6IHtcbiAgICAgIGdldCBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICB9LFxuXG4gICAgICBnZXQgaW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH0sXG5cbiAgICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlc1tpbmRleF07XG4gICAgICB9LFxuXG4gICAgICBwdXNoU3RhdGU6IGZ1bmN0aW9uIHB1c2hTdGF0ZShzdGF0ZSwgXywgdXJpKSB7XG4gICAgICAgIHZhciBfdXJpJHNwbGl0ID0gdXJpLnNwbGl0KFwiP1wiKSxcbiAgICAgICAgICAgIHBhdGhuYW1lID0gX3VyaSRzcGxpdFswXSxcbiAgICAgICAgICAgIF91cmkkc3BsaXQkID0gX3VyaSRzcGxpdFsxXSxcbiAgICAgICAgICAgIHNlYXJjaCA9IF91cmkkc3BsaXQkID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3VyaSRzcGxpdCQ7XG5cbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICAgIHNlYXJjaDogc2VhcmNoLmxlbmd0aCA/IFwiP1wiICsgc2VhcmNoIDogc2VhcmNoXG4gICAgICAgIH0pO1xuICAgICAgICBzdGF0ZXMucHVzaChzdGF0ZSk7XG4gICAgICB9LFxuICAgICAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbiByZXBsYWNlU3RhdGUoc3RhdGUsIF8sIHVyaSkge1xuICAgICAgICB2YXIgX3VyaSRzcGxpdDIgPSB1cmkuc3BsaXQoXCI/XCIpLFxuICAgICAgICAgICAgcGF0aG5hbWUgPSBfdXJpJHNwbGl0MlswXSxcbiAgICAgICAgICAgIF91cmkkc3BsaXQyJCA9IF91cmkkc3BsaXQyWzFdLFxuICAgICAgICAgICAgc2VhcmNoID0gX3VyaSRzcGxpdDIkID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3VyaSRzcGxpdDIkO1xuXG4gICAgICAgIHN0YWNrW2luZGV4XSA9IHtcbiAgICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBzZWFyY2hcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdGVzW2luZGV4XSA9IHN0YXRlO1xuICAgICAgfSxcbiAgICAgIGdvOiBmdW5jdGlvbiBnbyh0bykge1xuICAgICAgICB2YXIgbmV3SW5kZXggPSBpbmRleCArIHRvO1xuXG4gICAgICAgIGlmIChuZXdJbmRleCA8IDAgfHwgbmV3SW5kZXggPiBzdGF0ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ID0gbmV3SW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGdsb2JhbCBoaXN0b3J5IC0gdXNlcyB3aW5kb3cuaGlzdG9yeSBhcyB0aGUgc291cmNlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGFcbi8vIG1lbW9yeSBoaXN0b3J5XG5cblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxudmFyIGdldFNvdXJjZSA9IGZ1bmN0aW9uIGdldFNvdXJjZSgpIHtcbiAgcmV0dXJuIGNhblVzZURPTSA/IHdpbmRvdyA6IGNyZWF0ZU1lbW9yeVNvdXJjZSgpO1xufTtcblxudmFyIGdsb2JhbEhpc3RvcnkgPSBjcmVhdGVIaXN0b3J5KGdldFNvdXJjZSgpKTtcbnZhciBuYXZpZ2F0ZSA9IGdsb2JhbEhpc3RvcnkubmF2aWdhdGU7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydHMuZ2xvYmFsSGlzdG9yeSA9IGdsb2JhbEhpc3Rvcnk7XG5leHBvcnRzLm5hdmlnYXRlID0gbmF2aWdhdGU7XG5leHBvcnRzLmNyZWF0ZUhpc3RvcnkgPSBjcmVhdGVIaXN0b3J5O1xuZXhwb3J0cy5jcmVhdGVNZW1vcnlTb3VyY2UgPSBjcmVhdGVNZW1vcnlTb3VyY2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2393\n')},2098:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('\n\nexports.__esModule = true;\nexports.shallowCompare = exports.validateRedirect = exports.insertParams = exports.resolve = exports.match = exports.pick = exports.startsWith = undefined;\n\nvar _invariant = __webpack_require__(1143);\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don\'t have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split("?"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === "";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || "*";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join("/");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? false ? 0 : (0, _invariant2.default)(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don\'t match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: "/" + uriSegments.slice(0, index).join("/")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be "in a directory"\n// you can be "at a file", too. For example\n//\n// browserSpecResolve(\'foo\', \'/bar/\') => /bar/foo\n// browserSpecResolve(\'foo\', \'/bar\') => /foo\n//\n// But on the command line of a file system, it\'s not as complicated, you can\'t\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// <Link to="deeper"/>\n// // instead of\n// <Link to=`{${props.uri}/deeper}`/>\n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, "/")) {\n return to;\n }\n\n var _to$split = to.split("?"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split("?"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === "") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], ".")) {\n var pathname = baseSegments.concat(toSegments).join("/");\n return addQuery((basePathname === "/" ? "" : "/") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === "..") segments.pop();else if (segment !== ".") segments.push(segment);\n }\n\n return addQuery("/" + segments.join("/"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split("?"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? "" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = "/" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join("/");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? "" : _params$location$sear;\n var searchSplit = search.split("?")[1] || "";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join("/");\n var toString = segmentize(to).filter(filter).sort().join("/");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === "";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === "*";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, "").split("/");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? "?" + query.join("&") : "");\n};\n\nvar reservedNames = ["uri", "path"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexports.startsWith = startsWith;\nexports.pick = pick;\nexports.match = match;\nexports.resolve = resolve;\nexports.insertParams = insertParams;\nexports.validateRedirect = validateRedirect;\nexports.shallowCompare = shallowCompare;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2xpYi91dGlscy5qcz9hNDIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjtBQUNsQixzQkFBc0IsR0FBRyx3QkFBd0IsR0FBRyxvQkFBb0IsR0FBRyxlQUFlLEdBQUcsYUFBYSxHQUFHLFlBQVksR0FBRyxrQkFBa0I7O0FBRTlJLGlCQUFpQixtQkFBTyxDQUFDLElBQVc7O0FBRXBDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxhQUFhO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE1BQXFDLEdBQUcsQ0FBdUs7QUFDN087QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLEVBQUUsVUFBVSxRQUFRO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBLHlDQUF5QztBQUN6Qzs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscURBQXFELHFEQUFxRCxtRUFBbUU7QUFDN0s7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFGQUFxRixhQUFhO0FBQ2xHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7O0FBR0Ysa0JBQWtCO0FBQ2xCLFlBQVk7QUFDWixhQUFhO0FBQ2IsZUFBZTtBQUNmLG9CQUFvQjtBQUNwQix3QkFBd0I7QUFDeEIsc0JBQXNCIiwiZmlsZSI6IjIwOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuc2hhbGxvd0NvbXBhcmUgPSBleHBvcnRzLnZhbGlkYXRlUmVkaXJlY3QgPSBleHBvcnRzLmluc2VydFBhcmFtcyA9IGV4cG9ydHMucmVzb2x2ZSA9IGV4cG9ydHMubWF0Y2ggPSBleHBvcnRzLnBpY2sgPSBleHBvcnRzLnN0YXJ0c1dpdGggPSB1bmRlZmluZWQ7XG5cbnZhciBfaW52YXJpYW50ID0gcmVxdWlyZShcImludmFyaWFudFwiKTtcblxudmFyIF9pbnZhcmlhbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW52YXJpYW50KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBkZWZhdWx0OiBvYmpcbiAgfTtcbn0gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0YXJ0c1dpdGgoc3RyaW5nLCBzZWFyY2gpIC0gQ2hlY2sgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHNlYXJjaGBcblxuXG52YXIgc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyaW5nLCBzZWFyY2gpIHtcbiAgcmV0dXJuIHN0cmluZy5zdWJzdHIoMCwgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBwaWNrKHJvdXRlcywgdXJpKVxuLy9cbi8vIFJhbmtzIGFuZCBwaWNrcyB0aGUgYmVzdCByb3V0ZSB0byBtYXRjaC4gRWFjaCBzZWdtZW50IGdldHMgdGhlIGhpZ2hlc3Rcbi8vIGFtb3VudCBvZiBwb2ludHMsIHRoZW4gdGhlIHR5cGUgb2Ygc2VnbWVudCBnZXRzIGFuIGFkZGl0aW9uYWwgYW1vdW50IG9mXG4vLyBwb2ludHMgd2hlcmVcbi8vXG4vLyAgICAgc3RhdGljID4gZHluYW1pYyA+IHNwbGF0ID4gcm9vdFxuLy9cbi8vIFRoaXMgd2F5IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIG9yZGVyIG9mIG91ciByb3V0ZXMsIGxldCB0aGVcbi8vIGNvbXB1dGVycyBkbyBpdC5cbi8vXG4vLyBBIHJvdXRlIGxvb2tzIGxpa2UgdGhpc1xuLy9cbi8vICAgICB7IHBhdGgsIGRlZmF1bHQsIHZhbHVlIH1cbi8vXG4vLyBBbmQgYSByZXR1cm5lZCBtYXRjaCBsb29rcyBsaWtlOlxuLy9cbi8vICAgICB7IHJvdXRlLCBwYXJhbXMsIHVyaSB9XG4vL1xuLy8gSSBrbm93LCBJIHNob3VsZCB1c2UgVHlwZVNjcmlwdCBub3QgY29tbWVudHMgZm9yIHRoZXNlIHR5cGVzLlxuXG5cbnZhciBwaWNrID0gZnVuY3Rpb24gcGljayhyb3V0ZXMsIHVyaSkge1xuICB2YXIgbWF0Y2ggPSB2b2lkIDA7XG4gIHZhciBkZWZhdWx0XyA9IHZvaWQgMDtcblxuICB2YXIgX3VyaSRzcGxpdCA9IHVyaS5zcGxpdChcIj9cIiksXG4gICAgICB1cmlQYXRobmFtZSA9IF91cmkkc3BsaXRbMF07XG5cbiAgdmFyIHVyaVNlZ21lbnRzID0gc2VnbWVudGl6ZSh1cmlQYXRobmFtZSk7XG4gIHZhciBpc1Jvb3RVcmkgPSB1cmlTZWdtZW50c1swXSA9PT0gXCJcIjtcbiAgdmFyIHJhbmtlZCA9IHJhbmtSb3V0ZXMocm91dGVzKTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IHJhbmtlZC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgbWlzc2VkID0gZmFsc2U7XG4gICAgdmFyIHJvdXRlID0gcmFua2VkW2ldLnJvdXRlO1xuXG4gICAgaWYgKHJvdXRlLmRlZmF1bHQpIHtcbiAgICAgIGRlZmF1bHRfID0ge1xuICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIHVyaTogdXJpXG4gICAgICB9O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIHJvdXRlU2VnbWVudHMgPSBzZWdtZW50aXplKHJvdXRlLnBhdGgpO1xuICAgIHZhciBwYXJhbXMgPSB7fTtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXgodXJpU2VnbWVudHMubGVuZ3RoLCByb3V0ZVNlZ21lbnRzLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgdmFyIHJvdXRlU2VnbWVudCA9IHJvdXRlU2VnbWVudHNbaW5kZXhdO1xuICAgICAgdmFyIHVyaVNlZ21lbnQgPSB1cmlTZWdtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChpc1NwbGF0KHJvdXRlU2VnbWVudCkpIHtcbiAgICAgICAgLy8gSGl0IGEgc3BsYXQsIGp1c3QgZ3JhYiB0aGUgcmVzdCwgYW5kIHJldHVybiBhIG1hdGNoXG4gICAgICAgIC8vIHVyaTogICAvZmlsZXMvZG9jdW1lbnRzL3dvcmtcbiAgICAgICAgLy8gcm91dGU6IC9maWxlcy8qXG4gICAgICAgIHZhciBwYXJhbSA9IHJvdXRlU2VnbWVudC5zbGljZSgxKSB8fCBcIipcIjtcbiAgICAgICAgcGFyYW1zW3BhcmFtXSA9IHVyaVNlZ21lbnRzLnNsaWNlKGluZGV4KS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiL1wiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cmlTZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVVJJIGlzIHNob3J0ZXIgdGhhbiB0aGUgcm91dGUsIG5vIG1hdGNoXG4gICAgICAgIC8vIHVyaTogICAvdXNlcnNcbiAgICAgICAgLy8gcm91dGU6IC91c2Vycy86dXNlcklkXG4gICAgICAgIG1pc3NlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgZHluYW1pY01hdGNoID0gcGFyYW1SZS5leGVjKHJvdXRlU2VnbWVudCk7XG5cbiAgICAgIGlmIChkeW5hbWljTWF0Y2ggJiYgIWlzUm9vdFVyaSkge1xuICAgICAgICB2YXIgbWF0Y2hJc05vdFJlc2VydmVkID0gcmVzZXJ2ZWROYW1lcy5pbmRleE9mKGR5bmFtaWNNYXRjaFsxXSkgPT09IC0xO1xuICAgICAgICAhbWF0Y2hJc05vdFJlc2VydmVkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gKDAsIF9pbnZhcmlhbnQyLmRlZmF1bHQpKGZhbHNlLCBcIjxSb3V0ZXI+IGR5bmFtaWMgc2VnbWVudCBcXFwiXCIgKyBkeW5hbWljTWF0Y2hbMV0gKyBcIlxcXCIgaXMgYSByZXNlcnZlZCBuYW1lLiBQbGVhc2UgdXNlIGEgZGlmZmVyZW50IG5hbWUgaW4gcGF0aCBcXFwiXCIgKyByb3V0ZS5wYXRoICsgXCJcXFwiLlwiKSA6ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShmYWxzZSkgOiB2b2lkIDA7XG4gICAgICAgIHZhciB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmlTZWdtZW50KTtcbiAgICAgICAgcGFyYW1zW2R5bmFtaWNNYXRjaFsxXV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAocm91dGVTZWdtZW50ICE9PSB1cmlTZWdtZW50KSB7XG4gICAgICAgIC8vIEN1cnJlbnQgc2VnbWVudHMgZG9uJ3QgbWF0Y2gsIG5vdCBkeW5hbWljLCBub3Qgc3BsYXQsIHNvIG5vIG1hdGNoXG4gICAgICAgIC8vIHVyaTogICAvdXNlcnMvMTIzL3NldHRpbmdzXG4gICAgICAgIC8vIHJvdXRlOiAvdXNlcnMvOmlkL3Byb2ZpbGVcbiAgICAgICAgbWlzc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFtaXNzZWQpIHtcbiAgICAgIG1hdGNoID0ge1xuICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICB1cmk6IFwiL1wiICsgdXJpU2VnbWVudHMuc2xpY2UoMCwgaW5kZXgpLmpvaW4oXCIvXCIpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoIHx8IGRlZmF1bHRfIHx8IG51bGw7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWF0Y2gocGF0aCwgdXJpKSAtIE1hdGNoZXMganVzdCBvbmUgcGF0aCB0byBhIHVyaSwgYWxzbyBsb2xcblxuXG52YXIgbWF0Y2ggPSBmdW5jdGlvbiBtYXRjaChwYXRoLCB1cmkpIHtcbiAgcmV0dXJuIHBpY2soW3tcbiAgICBwYXRoOiBwYXRoXG4gIH1dLCB1cmkpO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHJlc29sdmUodG8sIGJhc2VwYXRoKVxuLy9cbi8vIFJlc29sdmVzIFVSSXMgYXMgdGhvdWdoIGV2ZXJ5IHBhdGggaXMgYSBkaXJlY3RvcnksIG5vIGZpbGVzLiAgUmVsYXRpdmUgVVJJc1xuLy8gaW4gdGhlIGJyb3dzZXIgY2FuIGZlZWwgYXdrd2FyZCBiZWNhdXNlIG5vdCBvbmx5IGNhbiB5b3UgYmUgXCJpbiBhIGRpcmVjdG9yeVwiXG4vLyB5b3UgY2FuIGJlIFwiYXQgYSBmaWxlXCIsIHRvby4gRm9yIGV4YW1wbGVcbi8vXG4vLyAgICAgYnJvd3NlclNwZWNSZXNvbHZlKCdmb28nLCAnL2Jhci8nKSA9PiAvYmFyL2Zvb1xuLy8gICAgIGJyb3dzZXJTcGVjUmVzb2x2ZSgnZm9vJywgJy9iYXInKSA9PiAvZm9vXG4vL1xuLy8gQnV0IG9uIHRoZSBjb21tYW5kIGxpbmUgb2YgYSBmaWxlIHN5c3RlbSwgaXQncyBub3QgYXMgY29tcGxpY2F0ZWQsIHlvdSBjYW4ndFxuLy8gYGNkYCBmcm9tIGEgZmlsZSwgb25seSBkaXJlY3Rvcmllcy4gIFRoaXMgd2F5LCBsaW5rcyBoYXZlIHRvIGtub3cgbGVzcyBhYm91dFxuLy8gdGhlaXIgY3VycmVudCBwYXRoLiBUbyBnbyBkZWVwZXIgeW91IGNhbiBkbyB0aGlzOlxuLy9cbi8vICAgICA8TGluayB0bz1cImRlZXBlclwiLz5cbi8vICAgICAvLyBpbnN0ZWFkIG9mXG4vLyAgICAgPExpbmsgdG89YHske3Byb3BzLnVyaX0vZGVlcGVyfWAvPlxuLy9cbi8vIEp1c3QgbGlrZSBgY2RgLCBpZiB5b3Ugd2FudCB0byBnbyBkZWVwZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB5b3UgZG8gdGhpczpcbi8vXG4vLyAgICAgY2QgZGVlcGVyXG4vLyAgICAgIyBub3Rcbi8vICAgICBjZCAkKHB3ZCkvZGVlcGVyXG4vL1xuLy8gQnkgdHJlYXRpbmcgZXZlcnkgcGF0aCBhcyBhIGRpcmVjdG9yeSwgbGlua2luZyB0byByZWxhdGl2ZSBwYXRocyBzaG91bGRcbi8vIHJlcXVpcmUgbGVzcyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGFuZCAoZmluZ2VycyBjcm9zc2VkKSBiZSBtb3JlIGludHVpdGl2ZS5cblxuXG52YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodG8sIGJhc2UpIHtcbiAgLy8gL2Zvby9iYXIsIC9iYXovcXV4ID0+IC9mb28vYmFyXG4gIGlmIChzdGFydHNXaXRoKHRvLCBcIi9cIikpIHtcbiAgICByZXR1cm4gdG87XG4gIH1cblxuICB2YXIgX3RvJHNwbGl0ID0gdG8uc3BsaXQoXCI/XCIpLFxuICAgICAgdG9QYXRobmFtZSA9IF90byRzcGxpdFswXSxcbiAgICAgIHRvUXVlcnkgPSBfdG8kc3BsaXRbMV07XG5cbiAgdmFyIF9iYXNlJHNwbGl0ID0gYmFzZS5zcGxpdChcIj9cIiksXG4gICAgICBiYXNlUGF0aG5hbWUgPSBfYmFzZSRzcGxpdFswXTtcblxuICB2YXIgdG9TZWdtZW50cyA9IHNlZ21lbnRpemUodG9QYXRobmFtZSk7XG4gIHZhciBiYXNlU2VnbWVudHMgPSBzZWdtZW50aXplKGJhc2VQYXRobmFtZSk7IC8vID9hPWIsIC91c2Vycz9iPWMgPT4gL3VzZXJzP2E9YlxuXG4gIGlmICh0b1NlZ21lbnRzWzBdID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGFkZFF1ZXJ5KGJhc2VQYXRobmFtZSwgdG9RdWVyeSk7XG4gIH0gLy8gcHJvZmlsZSwgL3VzZXJzLzc4OSA9PiAvdXNlcnMvNzg5L3Byb2ZpbGVcblxuXG4gIGlmICghc3RhcnRzV2l0aCh0b1NlZ21lbnRzWzBdLCBcIi5cIikpIHtcbiAgICB2YXIgcGF0aG5hbWUgPSBiYXNlU2VnbWVudHMuY29uY2F0KHRvU2VnbWVudHMpLmpvaW4oXCIvXCIpO1xuICAgIHJldHVybiBhZGRRdWVyeSgoYmFzZVBhdGhuYW1lID09PSBcIi9cIiA/IFwiXCIgOiBcIi9cIikgKyBwYXRobmFtZSwgdG9RdWVyeSk7XG4gIH0gLy8gLi8gICAgICAgICAvdXNlcnMvMTIzICA9PiAgL3VzZXJzLzEyM1xuICAvLyAuLi8gICAgICAgIC91c2Vycy8xMjMgID0+ICAvdXNlcnNcbiAgLy8gLi4vLi4gICAgICAvdXNlcnMvMTIzICA9PiAgL1xuICAvLyAuLi8uLi9vbmUgIC9hL2IvYy9kICAgID0+ICAvYS9iL29uZVxuICAvLyAuLi8uL29uZSAgIC9hL2IvYy9kICAgID0+ICAvYS9iL2Mvb25lXG5cblxuICB2YXIgYWxsU2VnbWVudHMgPSBiYXNlU2VnbWVudHMuY29uY2F0KHRvU2VnbWVudHMpO1xuICB2YXIgc2VnbWVudHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFsbFNlZ21lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBzZWdtZW50ID0gYWxsU2VnbWVudHNbaV07XG4gICAgaWYgKHNlZ21lbnQgPT09IFwiLi5cIikgc2VnbWVudHMucG9wKCk7ZWxzZSBpZiAoc2VnbWVudCAhPT0gXCIuXCIpIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG4gIH1cblxuICByZXR1cm4gYWRkUXVlcnkoXCIvXCIgKyBzZWdtZW50cy5qb2luKFwiL1wiKSwgdG9RdWVyeSk7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gaW5zZXJ0UGFyYW1zKHBhdGgsIHBhcmFtcylcblxuXG52YXIgaW5zZXJ0UGFyYW1zID0gZnVuY3Rpb24gaW5zZXJ0UGFyYW1zKHBhdGgsIHBhcmFtcykge1xuICB2YXIgX3BhdGgkc3BsaXQgPSBwYXRoLnNwbGl0KFwiP1wiKSxcbiAgICAgIHBhdGhCYXNlID0gX3BhdGgkc3BsaXRbMF0sXG4gICAgICBfcGF0aCRzcGxpdCQgPSBfcGF0aCRzcGxpdFsxXSxcbiAgICAgIHF1ZXJ5ID0gX3BhdGgkc3BsaXQkID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3BhdGgkc3BsaXQkO1xuXG4gIHZhciBzZWdtZW50cyA9IHNlZ21lbnRpemUocGF0aEJhc2UpO1xuICB2YXIgY29uc3RydWN0ZWRQYXRoID0gXCIvXCIgKyBzZWdtZW50cy5tYXAoZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgICB2YXIgbWF0Y2ggPSBwYXJhbVJlLmV4ZWMoc2VnbWVudCk7XG4gICAgcmV0dXJuIG1hdGNoID8gcGFyYW1zW21hdGNoWzFdXSA6IHNlZ21lbnQ7XG4gIH0pLmpvaW4oXCIvXCIpO1xuICB2YXIgX3BhcmFtcyRsb2NhdGlvbiA9IHBhcmFtcy5sb2NhdGlvbjtcbiAgX3BhcmFtcyRsb2NhdGlvbiA9IF9wYXJhbXMkbG9jYXRpb24gPT09IHVuZGVmaW5lZCA/IHt9IDogX3BhcmFtcyRsb2NhdGlvbjtcbiAgdmFyIF9wYXJhbXMkbG9jYXRpb24kc2VhciA9IF9wYXJhbXMkbG9jYXRpb24uc2VhcmNoLFxuICAgICAgc2VhcmNoID0gX3BhcmFtcyRsb2NhdGlvbiRzZWFyID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3BhcmFtcyRsb2NhdGlvbiRzZWFyO1xuICB2YXIgc2VhcmNoU3BsaXQgPSBzZWFyY2guc3BsaXQoXCI/XCIpWzFdIHx8IFwiXCI7XG4gIGNvbnN0cnVjdGVkUGF0aCA9IGFkZFF1ZXJ5KGNvbnN0cnVjdGVkUGF0aCwgcXVlcnksIHNlYXJjaFNwbGl0KTtcbiAgcmV0dXJuIGNvbnN0cnVjdGVkUGF0aDtcbn07XG5cbnZhciB2YWxpZGF0ZVJlZGlyZWN0ID0gZnVuY3Rpb24gdmFsaWRhdGVSZWRpcmVjdChmcm9tLCB0bykge1xuICB2YXIgZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKHNlZ21lbnQpIHtcbiAgICByZXR1cm4gaXNEeW5hbWljKHNlZ21lbnQpO1xuICB9O1xuXG4gIHZhciBmcm9tU3RyaW5nID0gc2VnbWVudGl6ZShmcm9tKS5maWx0ZXIoZmlsdGVyKS5zb3J0KCkuam9pbihcIi9cIik7XG4gIHZhciB0b1N0cmluZyA9IHNlZ21lbnRpemUodG8pLmZpbHRlcihmaWx0ZXIpLnNvcnQoKS5qb2luKFwiL1wiKTtcbiAgcmV0dXJuIGZyb21TdHJpbmcgPT09IHRvU3RyaW5nO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEp1bmtcblxuXG52YXIgcGFyYW1SZSA9IC9eOiguKykvO1xudmFyIFNFR01FTlRfUE9JTlRTID0gNDtcbnZhciBTVEFUSUNfUE9JTlRTID0gMztcbnZhciBEWU5BTUlDX1BPSU5UUyA9IDI7XG52YXIgU1BMQVRfUEVOQUxUWSA9IDE7XG52YXIgUk9PVF9QT0lOVFMgPSAxO1xuXG52YXIgaXNSb290U2VnbWVudCA9IGZ1bmN0aW9uIGlzUm9vdFNlZ21lbnQoc2VnbWVudCkge1xuICByZXR1cm4gc2VnbWVudCA9PT0gXCJcIjtcbn07XG5cbnZhciBpc0R5bmFtaWMgPSBmdW5jdGlvbiBpc0R5bmFtaWMoc2VnbWVudCkge1xuICByZXR1cm4gcGFyYW1SZS50ZXN0KHNlZ21lbnQpO1xufTtcblxudmFyIGlzU3BsYXQgPSBmdW5jdGlvbiBpc1NwbGF0KHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgJiYgc2VnbWVudFswXSA9PT0gXCIqXCI7XG59O1xuXG52YXIgcmFua1JvdXRlID0gZnVuY3Rpb24gcmFua1JvdXRlKHJvdXRlLCBpbmRleCkge1xuICB2YXIgc2NvcmUgPSByb3V0ZS5kZWZhdWx0ID8gMCA6IHNlZ21lbnRpemUocm91dGUucGF0aCkucmVkdWNlKGZ1bmN0aW9uIChzY29yZSwgc2VnbWVudCkge1xuICAgIHNjb3JlICs9IFNFR01FTlRfUE9JTlRTO1xuICAgIGlmIChpc1Jvb3RTZWdtZW50KHNlZ21lbnQpKSBzY29yZSArPSBST09UX1BPSU5UUztlbHNlIGlmIChpc0R5bmFtaWMoc2VnbWVudCkpIHNjb3JlICs9IERZTkFNSUNfUE9JTlRTO2Vsc2UgaWYgKGlzU3BsYXQoc2VnbWVudCkpIHNjb3JlIC09IFNFR01FTlRfUE9JTlRTICsgU1BMQVRfUEVOQUxUWTtlbHNlIHNjb3JlICs9IFNUQVRJQ19QT0lOVFM7XG4gICAgcmV0dXJuIHNjb3JlO1xuICB9LCAwKTtcbiAgcmV0dXJuIHtcbiAgICByb3V0ZTogcm91dGUsXG4gICAgc2NvcmU6IHNjb3JlLFxuICAgIGluZGV4OiBpbmRleFxuICB9O1xufTtcblxudmFyIHJhbmtSb3V0ZXMgPSBmdW5jdGlvbiByYW5rUm91dGVzKHJvdXRlcykge1xuICByZXR1cm4gcm91dGVzLm1hcChyYW5rUm91dGUpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYS5zY29yZSA8IGIuc2NvcmUgPyAxIDogYS5zY29yZSA+IGIuc2NvcmUgPyAtMSA6IGEuaW5kZXggLSBiLmluZGV4O1xuICB9KTtcbn07XG5cbnZhciBzZWdtZW50aXplID0gZnVuY3Rpb24gc2VnbWVudGl6ZSh1cmkpIHtcbiAgcmV0dXJuIHVyaSAvLyBzdHJpcCBzdGFydGluZy9lbmRpbmcgc2xhc2hlc1xuICAucmVwbGFjZSgvKF5cXC8rfFxcLyskKS9nLCBcIlwiKS5zcGxpdChcIi9cIik7XG59O1xuXG52YXIgYWRkUXVlcnkgPSBmdW5jdGlvbiBhZGRRdWVyeShwYXRobmFtZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcXVlcnkgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcXVlcnlbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcXVlcnkgPSBxdWVyeS5maWx0ZXIoZnVuY3Rpb24gKHEpIHtcbiAgICByZXR1cm4gcSAmJiBxLmxlbmd0aCA+IDA7XG4gIH0pO1xuICByZXR1cm4gcGF0aG5hbWUgKyAocXVlcnkgJiYgcXVlcnkubGVuZ3RoID4gMCA/IFwiP1wiICsgcXVlcnkuam9pbihcIiZcIikgOiBcIlwiKTtcbn07XG5cbnZhciByZXNlcnZlZE5hbWVzID0gW1widXJpXCIsIFwicGF0aFwiXTtcbi8qKlxuICogU2hhbGxvdyBjb21wYXJlcyB0d28gb2JqZWN0cy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIFRoZSBmaXJzdCBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoyIFRoZSBzZWNvbmQgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKi9cblxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUob2JqMSwgb2JqMikge1xuICB2YXIgb2JqMUtleXMgPSBPYmplY3Qua2V5cyhvYmoxKTtcbiAgcmV0dXJuIG9iajFLZXlzLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMob2JqMikubGVuZ3RoICYmIG9iajFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gb2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIG9iajFba2V5XSA9PT0gb2JqMltrZXldO1xuICB9KTtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuZXhwb3J0cy5zdGFydHNXaXRoID0gc3RhcnRzV2l0aDtcbmV4cG9ydHMucGljayA9IHBpY2s7XG5leHBvcnRzLm1hdGNoID0gbWF0Y2g7XG5leHBvcnRzLnJlc29sdmUgPSByZXNvbHZlO1xuZXhwb3J0cy5pbnNlcnRQYXJhbXMgPSBpbnNlcnRQYXJhbXM7XG5leHBvcnRzLnZhbGlkYXRlUmVkaXJlY3QgPSB2YWxpZGF0ZVJlZGlyZWN0O1xuZXhwb3J0cy5zaGFsbG93Q29tcGFyZSA9IHNoYWxsb3dDb21wYXJlOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2098\n')},3210:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"Xb\": function() { return /* binding */ Hub; },\n \"Gd\": function() { return /* binding */ getCurrentHub; },\n \"vi\": function() { return /* binding */ getHubFromCarrier; },\n \"cu\": function() { return /* binding */ getMainCarrier; },\n \"pj\": function() { return /* binding */ makeMain; }\n});\n\n// UNUSED EXPORTS: API_VERSION, getActiveDomain, setHubOnCarrier\n\n// EXTERNAL MODULE: ./node_modules/@sentry/hub/node_modules/tslib/tslib.es6.js\nvar tslib_es6 = __webpack_require__(4645);\n// EXTERNAL MODULE: ./node_modules/@sentry/types/esm/session.js\nvar esm_session = __webpack_require__(2355);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/misc.js\nvar misc = __webpack_require__(2861);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/time.js\nvar time = __webpack_require__(5153);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/logger.js\nvar esm_logger = __webpack_require__(245);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/node.js\nvar node = __webpack_require__(7864);\n// EXTERNAL MODULE: ./node_modules/@sentry/hub/esm/scope.js\nvar esm_scope = __webpack_require__(7659);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/object.js + 1 modules\nvar object = __webpack_require__(150);\n;// CONCATENATED MODULE: ./node_modules/@sentry/hub/esm/session.js\n\n\n/**\n * @inheritdoc\n */\n\nvar Session =\n/** @class */\nfunction () {\n function Session(context) {\n this.errors = 0;\n this.sid = (0,misc/* uuid4 */.DM)();\n this.duration = 0;\n this.status = esm_session/* SessionStatus.Ok */.$.Ok;\n this.init = true;\n this.ignoreDuration = false; // Both timestamp and started are in seconds since the UNIX epoch.\n\n var startingTime = (0,time/* timestampInSeconds */.ph)();\n this.timestamp = startingTime;\n this.started = startingTime;\n\n if (context) {\n this.update(context);\n }\n }\n /** JSDoc */\n // eslint-disable-next-line complexity\n\n\n Session.prototype.update = function (context) {\n if (context === void 0) {\n context = {};\n }\n\n if (context.user) {\n if (!this.ipAddress && context.user.ip_address) {\n this.ipAddress = context.user.ip_address;\n }\n\n if (!this.did && !context.did) {\n this.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n this.timestamp = context.timestamp || (0,time/* timestampInSeconds */.ph)();\n\n if (context.ignoreDuration) {\n this.ignoreDuration = context.ignoreDuration;\n }\n\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n this.sid = context.sid.length === 32 ? context.sid : (0,misc/* uuid4 */.DM)();\n }\n\n if (context.init !== undefined) {\n this.init = context.init;\n }\n\n if (!this.did && context.did) {\n this.did = \"\" + context.did;\n }\n\n if (typeof context.started === 'number') {\n this.started = context.started;\n }\n\n if (this.ignoreDuration) {\n this.duration = undefined;\n } else if (typeof context.duration === 'number') {\n this.duration = context.duration;\n } else {\n var duration = this.timestamp - this.started;\n this.duration = duration >= 0 ? duration : 0;\n }\n\n if (context.release) {\n this.release = context.release;\n }\n\n if (context.environment) {\n this.environment = context.environment;\n }\n\n if (!this.ipAddress && context.ipAddress) {\n this.ipAddress = context.ipAddress;\n }\n\n if (!this.userAgent && context.userAgent) {\n this.userAgent = context.userAgent;\n }\n\n if (typeof context.errors === 'number') {\n this.errors = context.errors;\n }\n\n if (context.status) {\n this.status = context.status;\n }\n };\n /** JSDoc */\n\n\n Session.prototype.close = function (status) {\n if (status) {\n this.update({\n status: status\n });\n } else if (this.status === esm_session/* SessionStatus.Ok */.$.Ok) {\n this.update({\n status: esm_session/* SessionStatus.Exited */.$.Exited\n });\n } else {\n this.update();\n }\n };\n /** JSDoc */\n\n\n Session.prototype.toJSON = function () {\n return (0,object/* dropUndefinedKeys */.Jr)({\n sid: \"\" + this.sid,\n init: this.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(this.started * 1000).toISOString(),\n timestamp: new Date(this.timestamp * 1000).toISOString(),\n status: this.status,\n errors: this.errors,\n did: typeof this.did === 'number' || typeof this.did === 'string' ? \"\" + this.did : undefined,\n duration: this.duration,\n attrs: (0,object/* dropUndefinedKeys */.Jr)({\n release: this.release,\n environment: this.environment,\n ip_address: this.ipAddress,\n user_agent: this.userAgent\n })\n });\n };\n\n return Session;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/hub/esm/hub.js\n\n/* eslint-disable max-lines */\n\n\n\n\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\n\nvar API_VERSION = 4;\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\n\nvar DEFAULT_BREADCRUMBS = 100;\n/**\n * @inheritDoc\n */\n\nvar Hub =\n/** @class */\nfunction () {\n /**\n * Creates a new instance of the hub, will push one {@link Layer} into the\n * internal stack on creation.\n *\n * @param client bound to the hub.\n * @param scope bound to the hub.\n * @param version number, higher number means higher priority.\n */\n function Hub(client, scope, _version) {\n if (scope === void 0) {\n scope = new esm_scope/* Scope */.s();\n }\n\n if (_version === void 0) {\n _version = API_VERSION;\n }\n\n this._version = _version;\n /** Is a {@link Layer}[] containing the client and scope */\n\n this._stack = [{}];\n this.getStackTop().scope = scope;\n\n if (client) {\n this.bindClient(client);\n }\n }\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.isOlderThan = function (version) {\n return this._version < version;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.bindClient = function (client) {\n var top = this.getStackTop();\n top.client = client;\n\n if (client && client.setupIntegrations) {\n client.setupIntegrations();\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.pushScope = function () {\n // We want to clone the content of prev scope\n var scope = esm_scope/* Scope.clone */.s.clone(this.getScope());\n this.getStack().push({\n client: this.getClient(),\n scope: scope\n });\n return scope;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.popScope = function () {\n if (this.getStack().length <= 1) return false;\n return !!this.getStack().pop();\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.withScope = function (callback) {\n var scope = this.pushScope();\n\n try {\n callback(scope);\n } finally {\n this.popScope();\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.getClient = function () {\n return this.getStackTop().client;\n };\n /** Returns the scope of the top stack. */\n\n\n Hub.prototype.getScope = function () {\n return this.getStackTop().scope;\n };\n /** Returns the scope stack for domains or the process. */\n\n\n Hub.prototype.getStack = function () {\n return this._stack;\n };\n /** Returns the topmost scope layer in the order domain > local > process. */\n\n\n Hub.prototype.getStackTop = function () {\n return this._stack[this._stack.length - 1];\n };\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n\n\n Hub.prototype.captureException = function (exception, hint) {\n var eventId = this._lastEventId = (0,misc/* uuid4 */.DM)();\n var finalHint = hint; // If there's no explicit hint provided, mimic the same thing that would happen\n // in the minimal itself to create a consistent behavior.\n // We don't do this in the client, as it's the lowest level API, and doing this,\n // would prevent user from having full control over direct calls.\n\n if (!hint) {\n var syntheticException = void 0;\n\n try {\n throw new Error('Sentry syntheticException');\n } catch (exception) {\n syntheticException = exception;\n }\n\n finalHint = {\n originalException: exception,\n syntheticException: syntheticException\n };\n }\n\n this._invokeClient('captureException', exception, (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, finalHint), {\n event_id: eventId\n }));\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.captureMessage = function (message, level, hint) {\n var eventId = this._lastEventId = (0,misc/* uuid4 */.DM)();\n var finalHint = hint; // If there's no explicit hint provided, mimic the same thing that would happen\n // in the minimal itself to create a consistent behavior.\n // We don't do this in the client, as it's the lowest level API, and doing this,\n // would prevent user from having full control over direct calls.\n\n if (!hint) {\n var syntheticException = void 0;\n\n try {\n throw new Error(message);\n } catch (exception) {\n syntheticException = exception;\n }\n\n finalHint = {\n originalException: message,\n syntheticException: syntheticException\n };\n }\n\n this._invokeClient('captureMessage', message, level, (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, finalHint), {\n event_id: eventId\n }));\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.captureEvent = function (event, hint) {\n var eventId = (0,misc/* uuid4 */.DM)();\n\n if (event.type !== 'transaction') {\n this._lastEventId = eventId;\n }\n\n this._invokeClient('captureEvent', event, (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, hint), {\n event_id: eventId\n }));\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.lastEventId = function () {\n return this._lastEventId;\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.addBreadcrumb = function (breadcrumb, hint) {\n var _a = this.getStackTop(),\n scope = _a.scope,\n client = _a.client;\n\n if (!scope || !client) return; // eslint-disable-next-line @typescript-eslint/unbound-method\n\n var _b = client.getOptions && client.getOptions() || {},\n _c = _b.beforeBreadcrumb,\n beforeBreadcrumb = _c === void 0 ? null : _c,\n _d = _b.maxBreadcrumbs,\n maxBreadcrumbs = _d === void 0 ? DEFAULT_BREADCRUMBS : _d;\n\n if (maxBreadcrumbs <= 0) return;\n var timestamp = (0,time/* dateTimestampInSeconds */.yW)();\n\n var mergedBreadcrumb = (0,tslib_es6/* __assign */.pi)({\n timestamp: timestamp\n }, breadcrumb);\n\n var finalBreadcrumb = beforeBreadcrumb ? (0,misc/* consoleSandbox */.Cf)(function () {\n return beforeBreadcrumb(mergedBreadcrumb, hint);\n }) : mergedBreadcrumb;\n if (finalBreadcrumb === null) return;\n scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setUser = function (user) {\n var scope = this.getScope();\n if (scope) scope.setUser(user);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setTags = function (tags) {\n var scope = this.getScope();\n if (scope) scope.setTags(tags);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setExtras = function (extras) {\n var scope = this.getScope();\n if (scope) scope.setExtras(extras);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setTag = function (key, value) {\n var scope = this.getScope();\n if (scope) scope.setTag(key, value);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.setExtra = function (key, extra) {\n var scope = this.getScope();\n if (scope) scope.setExtra(key, extra);\n };\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n Hub.prototype.setContext = function (name, context) {\n var scope = this.getScope();\n if (scope) scope.setContext(name, context);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.configureScope = function (callback) {\n var _a = this.getStackTop(),\n scope = _a.scope,\n client = _a.client;\n\n if (scope && client) {\n callback(scope);\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.run = function (callback) {\n var oldHub = makeMain(this);\n\n try {\n callback(this);\n } finally {\n makeMain(oldHub);\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.getIntegration = function (integration) {\n var client = this.getClient();\n if (!client) return null;\n\n try {\n return client.getIntegration(integration);\n } catch (_oO) {\n esm_logger/* logger.warn */.k.warn(\"Cannot retrieve integration \" + integration.id + \" from the current Hub\");\n return null;\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.startSpan = function (context) {\n return this._callExtensionMethod('startSpan', context);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.startTransaction = function (context, customSamplingContext) {\n return this._callExtensionMethod('startTransaction', context, customSamplingContext);\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.traceHeaders = function () {\n return this._callExtensionMethod('traceHeaders');\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.captureSession = function (endSession) {\n if (endSession === void 0) {\n endSession = false;\n } // both send the update and pull the session from the scope\n\n\n if (endSession) {\n return this.endSession();\n } // only send the update\n\n\n this._sendSessionUpdate();\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.endSession = function () {\n var _a, _b, _c, _d, _e;\n\n (_c = (_b = (_a = this.getStackTop()) === null || _a === void 0 ? void 0 : _a.scope) === null || _b === void 0 ? void 0 : _b.getSession()) === null || _c === void 0 ? void 0 : _c.close();\n\n this._sendSessionUpdate(); // the session is over; take it off of the scope\n\n\n (_e = (_d = this.getStackTop()) === null || _d === void 0 ? void 0 : _d.scope) === null || _e === void 0 ? void 0 : _e.setSession();\n };\n /**\n * @inheritDoc\n */\n\n\n Hub.prototype.startSession = function (context) {\n var _a = this.getStackTop(),\n scope = _a.scope,\n client = _a.client;\n\n var _b = client && client.getOptions() || {},\n release = _b.release,\n environment = _b.environment; // Will fetch userAgent if called from browser sdk\n\n\n var global = (0,misc/* getGlobalObject */.Rf)();\n var userAgent = (global.navigator || {}).userAgent;\n var session = new Session((0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({\n release: release,\n environment: environment\n }, scope && {\n user: scope.getUser()\n }), userAgent && {\n userAgent: userAgent\n }), context));\n\n if (scope) {\n // End existing session if there's one\n var currentSession = scope.getSession && scope.getSession();\n\n if (currentSession && currentSession.status === esm_session/* SessionStatus.Ok */.$.Ok) {\n currentSession.update({\n status: esm_session/* SessionStatus.Exited */.$.Exited\n });\n }\n\n this.endSession(); // Afterwards we set the new session on the scope\n\n scope.setSession(session);\n }\n\n return session;\n };\n /**\n * Sends the current Session on the scope\n */\n\n\n Hub.prototype._sendSessionUpdate = function () {\n var _a = this.getStackTop(),\n scope = _a.scope,\n client = _a.client;\n\n if (!scope) return;\n var session = scope.getSession && scope.getSession();\n\n if (session) {\n if (client && client.captureSession) {\n client.captureSession(session);\n }\n }\n };\n /**\n * Internal helper function to call a method on the top client if it exists.\n *\n * @param method The method to call on the client.\n * @param args Arguments to pass to the client function.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n Hub.prototype._invokeClient = function (method) {\n var _a;\n\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n var _b = this.getStackTop(),\n scope = _b.scope,\n client = _b.client;\n\n if (client && client[method]) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n (_a = client)[method].apply(_a, (0,tslib_es6/* __spread */.fl)(args, [scope]));\n }\n };\n /**\n * Calls global extension method and binding current instance to the function call\n */\n // @ts-ignore Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n Hub.prototype._callExtensionMethod = function (method) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n var carrier = getMainCarrier();\n var sentry = carrier.__SENTRY__;\n\n if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n return sentry.extensions[method].apply(this, args);\n }\n\n esm_logger/* logger.warn */.k.warn(\"Extension method \" + method + \" couldn't be found, doing nothing.\");\n };\n\n return Hub;\n}();\n\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\n\nfunction getMainCarrier() {\n var carrier = (0,misc/* getGlobalObject */.Rf)();\n carrier.__SENTRY__ = carrier.__SENTRY__ || {\n extensions: {},\n hub: undefined\n };\n return carrier;\n}\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\n\nfunction makeMain(hub) {\n var registry = getMainCarrier();\n var oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\n\nfunction getCurrentHub() {\n // Get main carrier (global for every environment)\n var registry = getMainCarrier(); // If there's no hub, or its an old API, assign a new one\n\n if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n setHubOnCarrier(registry, new Hub());\n } // Prefer domains over global if they are there (applicable only to Node environment)\n\n\n if ((0,node/* isNodeEnv */.KV)()) {\n return getHubFromActiveDomain(registry);\n } // Return hub that lives on a global object\n\n\n return getHubFromCarrier(registry);\n}\n/**\n * Returns the active domain, if one exists\n * @deprecated No longer used; remove in v7\n * @returns The domain, or undefined if there is no active domain\n */\n// eslint-disable-next-line deprecation/deprecation\n\nfunction getActiveDomain() {\n logger.warn('Function `getActiveDomain` is deprecated and will be removed in a future version.');\n\n var sentry = getMainCarrier().__SENTRY__;\n\n return sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n}\n/**\n * Try to read the hub from an active domain, and fallback to the registry if one doesn't exist\n * @returns discovered hub\n */\n\nfunction getHubFromActiveDomain(registry) {\n var _a, _b, _c;\n\n try {\n var activeDomain = (_c = (_b = (_a = getMainCarrier().__SENTRY__) === null || _a === void 0 ? void 0 : _a.extensions) === null || _b === void 0 ? void 0 : _b.domain) === null || _c === void 0 ? void 0 : _c.active; // If there's no active domain, just return global hub\n\n if (!activeDomain) {\n return getHubFromCarrier(registry);\n } // If there's no hub on current domain, or it's an old API, assign a new one\n\n\n if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n var registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, esm_scope/* Scope.clone */.s.clone(registryHubTopStack.scope)));\n } // Return hub that lives on a domain\n\n\n return getHubFromCarrier(activeDomain);\n } catch (_Oo) {\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n }\n}\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\n\n\nfunction hasHubOnCarrier(carrier) {\n return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\n\n\nfunction getHubFromCarrier(carrier) {\n if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) return carrier.__SENTRY__.hub;\n carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n carrier.__SENTRY__.hub = new Hub();\n return carrier.__SENTRY__.hub;\n}\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\n\nfunction setHubOnCarrier(carrier, hub) {\n if (!carrier) return false;\n carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n carrier.__SENTRY__.hub = hub;\n return true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9lc20vc2Vzc2lvbi5qcz9lZGE3Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaHViL2VzbS9odWIuanM/YTk3ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUE4QztBQUMrQjtBQUM3RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQUs7QUFDcEI7QUFDQSxrQkFBa0Isc0NBQWdCO0FBQ2xDO0FBQ0EsZ0NBQWdDOztBQUVoQyx1QkFBdUIsbUNBQWtCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQ0FBMEMsbUNBQWtCOztBQUU1RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJEQUEyRCxzQkFBSztBQUNoRTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssMEJBQTBCLHNDQUFnQjtBQUMvQztBQUNBLGdCQUFnQiw4Q0FBb0I7QUFDcEMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxXQUFXLG9DQUFpQjtBQUM1QjtBQUNBO0FBQ0E7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dGVudCI6WyJpbXBvcnQgeyBTZXNzaW9uU3RhdHVzIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBkcm9wVW5kZWZpbmVkS2V5cywgdGltZXN0YW1wSW5TZWNvbmRzLCB1dWlkNCB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuLyoqXG4gKiBAaW5oZXJpdGRvY1xuICovXG5cbnZhciBTZXNzaW9uID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU2Vzc2lvbihjb250ZXh0KSB7XG4gICAgdGhpcy5lcnJvcnMgPSAwO1xuICAgIHRoaXMuc2lkID0gdXVpZDQoKTtcbiAgICB0aGlzLmR1cmF0aW9uID0gMDtcbiAgICB0aGlzLnN0YXR1cyA9IFNlc3Npb25TdGF0dXMuT2s7XG4gICAgdGhpcy5pbml0ID0gdHJ1ZTtcbiAgICB0aGlzLmlnbm9yZUR1cmF0aW9uID0gZmFsc2U7IC8vIEJvdGggdGltZXN0YW1wIGFuZCBzdGFydGVkIGFyZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLlxuXG4gICAgdmFyIHN0YXJ0aW5nVGltZSA9IHRpbWVzdGFtcEluU2Vjb25kcygpO1xuICAgIHRoaXMudGltZXN0YW1wID0gc3RhcnRpbmdUaW1lO1xuICAgIHRoaXMuc3RhcnRlZCA9IHN0YXJ0aW5nVGltZTtcblxuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICB0aGlzLnVwZGF0ZShjb250ZXh0KTtcbiAgICB9XG4gIH1cbiAgLyoqIEpTRG9jICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5cblxuICBTZXNzaW9uLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHtcbiAgICAgIGNvbnRleHQgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dC51c2VyKSB7XG4gICAgICBpZiAoIXRoaXMuaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7XG4gICAgICAgIHRoaXMuaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5kaWQgJiYgIWNvbnRleHQuZGlkKSB7XG4gICAgICAgIHRoaXMuZGlkID0gY29udGV4dC51c2VyLmlkIHx8IGNvbnRleHQudXNlci5lbWFpbCB8fCBjb250ZXh0LnVzZXIudXNlcm5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50aW1lc3RhbXAgPSBjb250ZXh0LnRpbWVzdGFtcCB8fCB0aW1lc3RhbXBJblNlY29uZHMoKTtcblxuICAgIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7XG4gICAgICB0aGlzLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dC5zaWQpIHtcbiAgICAgIC8vIEdvb2QgZW5vdWdoIHV1aWQgdmFsaWRhdGlvbi4g4oCUIEthbWlsXG4gICAgICB0aGlzLnNpZCA9IGNvbnRleHQuc2lkLmxlbmd0aCA9PT0gMzIgPyBjb250ZXh0LnNpZCA6IHV1aWQ0KCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmluaXQgPSBjb250ZXh0LmluaXQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRpZCAmJiBjb250ZXh0LmRpZCkge1xuICAgICAgdGhpcy5kaWQgPSBcIlwiICsgY29udGV4dC5kaWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LnN0YXJ0ZWQgPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBjb250ZXh0LnN0YXJ0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaWdub3JlRHVyYXRpb24pIHtcbiAgICAgIHRoaXMuZHVyYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZHVyYXRpb24gPSB0aGlzLnRpbWVzdGFtcCAtIHRoaXMuc3RhcnRlZDtcbiAgICAgIHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbiA+PSAwID8gZHVyYXRpb24gOiAwO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0LnJlbGVhc2UpIHtcbiAgICAgIHRoaXMucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dC5lbnZpcm9ubWVudCkge1xuICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IGNvbnRleHQuZW52aXJvbm1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlwQWRkcmVzcyAmJiBjb250ZXh0LmlwQWRkcmVzcykge1xuICAgICAgdGhpcy5pcEFkZHJlc3MgPSBjb250ZXh0LmlwQWRkcmVzcztcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7XG4gICAgICB0aGlzLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29udGV4dC5lcnJvcnMgPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGNvbnRleHQuZXJyb3JzO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0LnN0YXR1cykge1xuICAgICAgdGhpcy5zdGF0dXMgPSBjb250ZXh0LnN0YXR1cztcbiAgICB9XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgU2Vzc2lvbi5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgdGhpcy51cGRhdGUoe1xuICAgICAgICBzdGF0dXM6IHN0YXR1c1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXR1cyA9PT0gU2Vzc2lvblN0YXR1cy5Paykge1xuICAgICAgdGhpcy51cGRhdGUoe1xuICAgICAgICBzdGF0dXM6IFNlc3Npb25TdGF0dXMuRXhpdGVkXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgU2Vzc2lvbi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkcm9wVW5kZWZpbmVkS2V5cyh7XG4gICAgICBzaWQ6IFwiXCIgKyB0aGlzLnNpZCxcbiAgICAgIGluaXQ6IHRoaXMuaW5pdCxcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHNlYyBpcyBjb252ZXJ0ZWQgdG8gbXMgZm9yIGRhdGUgY29uc3RydWN0b3JcbiAgICAgIHN0YXJ0ZWQ6IG5ldyBEYXRlKHRoaXMuc3RhcnRlZCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKHRoaXMudGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBlcnJvcnM6IHRoaXMuZXJyb3JzLFxuICAgICAgZGlkOiB0eXBlb2YgdGhpcy5kaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiB0aGlzLmRpZCA9PT0gJ3N0cmluZycgPyBcIlwiICsgdGhpcy5kaWQgOiB1bmRlZmluZWQsXG4gICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcbiAgICAgIGF0dHJzOiBkcm9wVW5kZWZpbmVkS2V5cyh7XG4gICAgICAgIHJlbGVhc2U6IHRoaXMucmVsZWFzZSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuZW52aXJvbm1lbnQsXG4gICAgICAgIGlwX2FkZHJlc3M6IHRoaXMuaXBBZGRyZXNzLFxuICAgICAgICB1c2VyX2FnZW50OiB0aGlzLnVzZXJBZ2VudFxuICAgICAgfSlcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gU2Vzc2lvbjtcbn0oKTtcblxuZXhwb3J0IHsgU2Vzc2lvbiB9OyIsImltcG9ydCB7IF9fYXNzaWduLCBfX3JlYWQsIF9fc3ByZWFkIH0gZnJvbSBcInRzbGliXCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cblxuaW1wb3J0IHsgU2Vzc2lvblN0YXR1cyB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgY29uc29sZVNhbmRib3gsIGRhdGVUaW1lc3RhbXBJblNlY29uZHMsIGdldEdsb2JhbE9iamVjdCwgaXNOb2RlRW52LCBsb2dnZXIsIHV1aWQ0IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgeyBTY29wZSB9IGZyb20gJy4vc2NvcGUnO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJy4vc2Vzc2lvbic7XG4vKipcbiAqIEFQSSBjb21wYXRpYmlsaXR5IHZlcnNpb24gb2YgdGhpcyBodWIuXG4gKlxuICogV0FSTklORzogVGhpcyBudW1iZXIgc2hvdWxkIG9ubHkgYmUgaW5jcmVhc2VkIHdoZW4gdGhlIGdsb2JhbCBpbnRlcmZhY2VcbiAqIGNoYW5nZXMgYW5kIG5ldyBtZXRob2RzIGFyZSBpbnRyb2R1Y2VkLlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuXG5leHBvcnQgdmFyIEFQSV9WRVJTSU9OID0gNDtcbi8qKlxuICogRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBicmVhZGNydW1icyBhZGRlZCB0byBhbiBldmVudC4gQ2FuIGJlIG92ZXJ3cml0dGVuXG4gKiB3aXRoIHtAbGluayBPcHRpb25zLm1heEJyZWFkY3J1bWJzfS5cbiAqL1xuXG52YXIgREVGQVVMVF9CUkVBRENSVU1CUyA9IDEwMDtcbi8qKlxuICogQGluaGVyaXREb2NcbiAqL1xuXG52YXIgSHViID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGh1Yiwgd2lsbCBwdXNoIG9uZSB7QGxpbmsgTGF5ZXJ9IGludG8gdGhlXG4gICAqIGludGVybmFsIHN0YWNrIG9uIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IGJvdW5kIHRvIHRoZSBodWIuXG4gICAqIEBwYXJhbSBzY29wZSBib3VuZCB0byB0aGUgaHViLlxuICAgKiBAcGFyYW0gdmVyc2lvbiBudW1iZXIsIGhpZ2hlciBudW1iZXIgbWVhbnMgaGlnaGVyIHByaW9yaXR5LlxuICAgKi9cbiAgZnVuY3Rpb24gSHViKGNsaWVudCwgc2NvcGUsIF92ZXJzaW9uKSB7XG4gICAgaWYgKHNjb3BlID09PSB2b2lkIDApIHtcbiAgICAgIHNjb3BlID0gbmV3IFNjb3BlKCk7XG4gICAgfVxuXG4gICAgaWYgKF92ZXJzaW9uID09PSB2b2lkIDApIHtcbiAgICAgIF92ZXJzaW9uID0gQVBJX1ZFUlNJT047XG4gICAgfVxuXG4gICAgdGhpcy5fdmVyc2lvbiA9IF92ZXJzaW9uO1xuICAgIC8qKiBJcyBhIHtAbGluayBMYXllcn1bXSBjb250YWluaW5nIHRoZSBjbGllbnQgYW5kIHNjb3BlICovXG5cbiAgICB0aGlzLl9zdGFjayA9IFt7fV07XG4gICAgdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlID0gc2NvcGU7XG5cbiAgICBpZiAoY2xpZW50KSB7XG4gICAgICB0aGlzLmJpbmRDbGllbnQoY2xpZW50KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS5pc09sZGVyVGhhbiA9IGZ1bmN0aW9uICh2ZXJzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcnNpb24gPCB2ZXJzaW9uO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBIdWIucHJvdG90eXBlLmJpbmRDbGllbnQgPSBmdW5jdGlvbiAoY2xpZW50KSB7XG4gICAgdmFyIHRvcCA9IHRoaXMuZ2V0U3RhY2tUb3AoKTtcbiAgICB0b3AuY2xpZW50ID0gY2xpZW50O1xuXG4gICAgaWYgKGNsaWVudCAmJiBjbGllbnQuc2V0dXBJbnRlZ3JhdGlvbnMpIHtcbiAgICAgIGNsaWVudC5zZXR1cEludGVncmF0aW9ucygpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS5wdXNoU2NvcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2Ugd2FudCB0byBjbG9uZSB0aGUgY29udGVudCBvZiBwcmV2IHNjb3BlXG4gICAgdmFyIHNjb3BlID0gU2NvcGUuY2xvbmUodGhpcy5nZXRTY29wZSgpKTtcbiAgICB0aGlzLmdldFN0YWNrKCkucHVzaCh7XG4gICAgICBjbGllbnQ6IHRoaXMuZ2V0Q2xpZW50KCksXG4gICAgICBzY29wZTogc2NvcGVcbiAgICB9KTtcbiAgICByZXR1cm4gc2NvcGU7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEh1Yi5wcm90b3R5cGUucG9wU2NvcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuZ2V0U3RhY2soKS5sZW5ndGggPD0gMSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXRoaXMuZ2V0U3RhY2soKS5wb3AoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS53aXRoU2NvcGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgc2NvcGUgPSB0aGlzLnB1c2hTY29wZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKHNjb3BlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS5nZXRDbGllbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2tUb3AoKS5jbGllbnQ7XG4gIH07XG4gIC8qKiBSZXR1cm5zIHRoZSBzY29wZSBvZiB0aGUgdG9wIHN0YWNrLiAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS5nZXRTY29wZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlO1xuICB9O1xuICAvKiogUmV0dXJucyB0aGUgc2NvcGUgc3RhY2sgZm9yIGRvbWFpbnMgb3IgdGhlIHByb2Nlc3MuICovXG5cblxuICBIdWIucHJvdG90eXBlLmdldFN0YWNrID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFjaztcbiAgfTtcbiAgLyoqIFJldHVybnMgdGhlIHRvcG1vc3Qgc2NvcGUgbGF5ZXIgaW4gdGhlIG9yZGVyIGRvbWFpbiA+IGxvY2FsID4gcHJvY2Vzcy4gKi9cblxuXG4gIEh1Yi5wcm90b3R5cGUuZ2V0U3RhY2tUb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aCAtIDFdO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG5cblxuICBIdWIucHJvdG90eXBlLmNhcHR1cmVFeGNlcHRpb24gPSBmdW5jdGlvbiAoZXhjZXB0aW9uLCBoaW50KSB7XG4gICAgdmFyIGV2ZW50SWQgPSB0aGlzLl9sYXN0RXZlbnRJZCA9IHV1aWQ0KCk7XG4gICAgdmFyIGZpbmFsSGludCA9IGhpbnQ7IC8vIElmIHRoZXJlJ3Mgbm8gZXhwbGljaXQgaGludCBwcm92aWRlZCwgbWltaWMgdGhlIHNhbWUgdGhpbmcgdGhhdCB3b3VsZCBoYXBwZW5cbiAgICAvLyBpbiB0aGUgbWluaW1hbCBpdHNlbGYgdG8gY3JlYXRlIGEgY29uc2lzdGVudCBiZWhhdmlvci5cbiAgICAvLyBXZSBkb24ndCBkbyB0aGlzIGluIHRoZSBjbGllbnQsIGFzIGl0J3MgdGhlIGxvd2VzdCBsZXZlbCBBUEksIGFuZCBkb2luZyB0aGlzLFxuICAgIC8vIHdvdWxkIHByZXZlbnQgdXNlciBmcm9tIGhhdmluZyBmdWxsIGNvbnRyb2wgb3ZlciBkaXJlY3QgY2FsbHMuXG5cbiAgICBpZiAoIWhpbnQpIHtcbiAgICAgIHZhciBzeW50aGV0aWNFeGNlcHRpb24gPSB2b2lkIDA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpO1xuICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgZmluYWxIaW50ID0ge1xuICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogZXhjZXB0aW9uLFxuICAgICAgICBzeW50aGV0aWNFeGNlcHRpb246IHN5bnRoZXRpY0V4Y2VwdGlvblxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnZva2VDbGllbnQoJ2NhcHR1cmVFeGNlcHRpb24nLCBleGNlcHRpb24sIF9fYXNzaWduKF9fYXNzaWduKHt9LCBmaW5hbEhpbnQpLCB7XG4gICAgICBldmVudF9pZDogZXZlbnRJZFxuICAgIH0pKTtcblxuICAgIHJldHVybiBldmVudElkO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBIdWIucHJvdG90eXBlLmNhcHR1cmVNZXNzYWdlID0gZnVuY3Rpb24gKG1lc3NhZ2UsIGxldmVsLCBoaW50KSB7XG4gICAgdmFyIGV2ZW50SWQgPSB0aGlzLl9sYXN0RXZlbnRJZCA9IHV1aWQ0KCk7XG4gICAgdmFyIGZpbmFsSGludCA9IGhpbnQ7IC8vIElmIHRoZXJlJ3Mgbm8gZXhwbGljaXQgaGludCBwcm92aWRlZCwgbWltaWMgdGhlIHNhbWUgdGhpbmcgdGhhdCB3b3VsZCBoYXBwZW5cbiAgICAvLyBpbiB0aGUgbWluaW1hbCBpdHNlbGYgdG8gY3JlYXRlIGEgY29uc2lzdGVudCBiZWhhdmlvci5cbiAgICAvLyBXZSBkb24ndCBkbyB0aGlzIGluIHRoZSBjbGllbnQsIGFzIGl0J3MgdGhlIGxvd2VzdCBsZXZlbCBBUEksIGFuZCBkb2luZyB0aGlzLFxuICAgIC8vIHdvdWxkIHByZXZlbnQgdXNlciBmcm9tIGhhdmluZyBmdWxsIGNvbnRyb2wgb3ZlciBkaXJlY3QgY2FsbHMuXG5cbiAgICBpZiAoIWhpbnQpIHtcbiAgICAgIHZhciBzeW50aGV0aWNFeGNlcHRpb24gPSB2b2lkIDA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgICBzeW50aGV0aWNFeGNlcHRpb24gPSBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIGZpbmFsSGludCA9IHtcbiAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsXG4gICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbjogc3ludGhldGljRXhjZXB0aW9uXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX2ludm9rZUNsaWVudCgnY2FwdHVyZU1lc3NhZ2UnLCBtZXNzYWdlLCBsZXZlbCwgX19hc3NpZ24oX19hc3NpZ24oe30sIGZpbmFsSGludCksIHtcbiAgICAgIGV2ZW50X2lkOiBldmVudElkXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGV2ZW50SWQ7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEh1Yi5wcm90b3R5cGUuY2FwdHVyZUV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCBoaW50KSB7XG4gICAgdmFyIGV2ZW50SWQgPSB1dWlkNCgpO1xuXG4gICAgaWYgKGV2ZW50LnR5cGUgIT09ICd0cmFuc2FjdGlvbicpIHtcbiAgICAgIHRoaXMuX2xhc3RFdmVudElkID0gZXZlbnRJZDtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnZva2VDbGllbnQoJ2NhcHR1cmVFdmVudCcsIGV2ZW50LCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaGludCksIHtcbiAgICAgIGV2ZW50X2lkOiBldmVudElkXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGV2ZW50SWQ7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEh1Yi5wcm90b3R5cGUubGFzdEV2ZW50SWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudElkO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBIdWIucHJvdG90eXBlLmFkZEJyZWFkY3J1bWIgPSBmdW5jdGlvbiAoYnJlYWRjcnVtYiwgaGludCkge1xuICAgIHZhciBfYSA9IHRoaXMuZ2V0U3RhY2tUb3AoKSxcbiAgICAgICAgc2NvcGUgPSBfYS5zY29wZSxcbiAgICAgICAgY2xpZW50ID0gX2EuY2xpZW50O1xuXG4gICAgaWYgKCFzY29wZSB8fCAhY2xpZW50KSByZXR1cm47IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcblxuICAgIHZhciBfYiA9IGNsaWVudC5nZXRPcHRpb25zICYmIGNsaWVudC5nZXRPcHRpb25zKCkgfHwge30sXG4gICAgICAgIF9jID0gX2IuYmVmb3JlQnJlYWRjcnVtYixcbiAgICAgICAgYmVmb3JlQnJlYWRjcnVtYiA9IF9jID09PSB2b2lkIDAgPyBudWxsIDogX2MsXG4gICAgICAgIF9kID0gX2IubWF4QnJlYWRjcnVtYnMsXG4gICAgICAgIG1heEJyZWFkY3J1bWJzID0gX2QgPT09IHZvaWQgMCA/IERFRkFVTFRfQlJFQURDUlVNQlMgOiBfZDtcblxuICAgIGlmIChtYXhCcmVhZGNydW1icyA8PSAwKSByZXR1cm47XG4gICAgdmFyIHRpbWVzdGFtcCA9IGRhdGVUaW1lc3RhbXBJblNlY29uZHMoKTtcblxuICAgIHZhciBtZXJnZWRCcmVhZGNydW1iID0gX19hc3NpZ24oe1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBcbiAgICB9LCBicmVhZGNydW1iKTtcblxuICAgIHZhciBmaW5hbEJyZWFkY3J1bWIgPSBiZWZvcmVCcmVhZGNydW1iID8gY29uc29sZVNhbmRib3goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJlZm9yZUJyZWFkY3J1bWIobWVyZ2VkQnJlYWRjcnVtYiwgaGludCk7XG4gICAgfSkgOiBtZXJnZWRCcmVhZGNydW1iO1xuICAgIGlmIChmaW5hbEJyZWFkY3J1bWIgPT09IG51bGwpIHJldHVybjtcbiAgICBzY29wZS5hZGRCcmVhZGNydW1iKGZpbmFsQnJlYWRjcnVtYiwgbWF4QnJlYWRjcnVtYnMpO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBIdWIucHJvdG90eXBlLnNldFVzZXIgPSBmdW5jdGlvbiAodXNlcikge1xuICAgIHZhciBzY29wZSA9IHRoaXMuZ2V0U2NvcGUoKTtcbiAgICBpZiAoc2NvcGUpIHNjb3BlLnNldFVzZXIodXNlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEh1Yi5wcm90b3R5cGUuc2V0VGFncyA9IGZ1bmN0aW9uICh0YWdzKSB7XG4gICAgdmFyIHNjb3BlID0gdGhpcy5nZXRTY29wZSgpO1xuICAgIGlmIChzY29wZSkgc2NvcGUuc2V0VGFncyh0YWdzKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS5zZXRFeHRyYXMgPSBmdW5jdGlvbiAoZXh0cmFzKSB7XG4gICAgdmFyIHNjb3BlID0gdGhpcy5nZXRTY29wZSgpO1xuICAgIGlmIChzY29wZSkgc2NvcGUuc2V0RXh0cmFzKGV4dHJhcyk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEh1Yi5wcm90b3R5cGUuc2V0VGFnID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCk7XG4gICAgaWYgKHNjb3BlKSBzY29wZS5zZXRUYWcoa2V5LCB2YWx1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEh1Yi5wcm90b3R5cGUuc2V0RXh0cmEgPSBmdW5jdGlvbiAoa2V5LCBleHRyYSkge1xuICAgIHZhciBzY29wZSA9IHRoaXMuZ2V0U2NvcGUoKTtcbiAgICBpZiAoc2NvcGUpIHNjb3BlLnNldEV4dHJhKGtleSwgZXh0cmEpO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cblxuICBIdWIucHJvdG90eXBlLnNldENvbnRleHQgPSBmdW5jdGlvbiAobmFtZSwgY29udGV4dCkge1xuICAgIHZhciBzY29wZSA9IHRoaXMuZ2V0U2NvcGUoKTtcbiAgICBpZiAoc2NvcGUpIHNjb3BlLnNldENvbnRleHQobmFtZSwgY29udGV4dCk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEh1Yi5wcm90b3R5cGUuY29uZmlndXJlU2NvcGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgX2EgPSB0aGlzLmdldFN0YWNrVG9wKCksXG4gICAgICAgIHNjb3BlID0gX2Euc2NvcGUsXG4gICAgICAgIGNsaWVudCA9IF9hLmNsaWVudDtcblxuICAgIGlmIChzY29wZSAmJiBjbGllbnQpIHtcbiAgICAgIGNhbGxiYWNrKHNjb3BlKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEh1Yi5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIG9sZEh1YiA9IG1ha2VNYWluKHRoaXMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKHRoaXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBtYWtlTWFpbihvbGRIdWIpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS5nZXRJbnRlZ3JhdGlvbiA9IGZ1bmN0aW9uIChpbnRlZ3JhdGlvbikge1xuICAgIHZhciBjbGllbnQgPSB0aGlzLmdldENsaWVudCgpO1xuICAgIGlmICghY2xpZW50KSByZXR1cm4gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2xpZW50LmdldEludGVncmF0aW9uKGludGVncmF0aW9uKTtcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiQ2Fubm90IHJldHJpZXZlIGludGVncmF0aW9uIFwiICsgaW50ZWdyYXRpb24uaWQgKyBcIiBmcm9tIHRoZSBjdXJyZW50IEh1YlwiKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLl9jYWxsRXh0ZW5zaW9uTWV0aG9kKCdzdGFydFNwYW4nLCBjb250ZXh0KTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS5zdGFydFRyYW5zYWN0aW9uID0gZnVuY3Rpb24gKGNvbnRleHQsIGN1c3RvbVNhbXBsaW5nQ29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLl9jYWxsRXh0ZW5zaW9uTWV0aG9kKCdzdGFydFRyYW5zYWN0aW9uJywgY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS50cmFjZUhlYWRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGxFeHRlbnNpb25NZXRob2QoJ3RyYWNlSGVhZGVycycpO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBIdWIucHJvdG90eXBlLmNhcHR1cmVTZXNzaW9uID0gZnVuY3Rpb24gKGVuZFNlc3Npb24pIHtcbiAgICBpZiAoZW5kU2Vzc2lvbiA9PT0gdm9pZCAwKSB7XG4gICAgICBlbmRTZXNzaW9uID0gZmFsc2U7XG4gICAgfSAvLyBib3RoIHNlbmQgdGhlIHVwZGF0ZSBhbmQgcHVsbCB0aGUgc2Vzc2lvbiBmcm9tIHRoZSBzY29wZVxuXG5cbiAgICBpZiAoZW5kU2Vzc2lvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZW5kU2Vzc2lvbigpO1xuICAgIH0gLy8gb25seSBzZW5kIHRoZSB1cGRhdGVcblxuXG4gICAgdGhpcy5fc2VuZFNlc3Npb25VcGRhdGUoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSHViLnByb3RvdHlwZS5lbmRTZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2U7XG5cbiAgICAoX2MgPSAoX2IgPSAoX2EgPSB0aGlzLmdldFN0YWNrVG9wKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zY29wZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmdldFNlc3Npb24oKSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNsb3NlKCk7XG5cbiAgICB0aGlzLl9zZW5kU2Vzc2lvblVwZGF0ZSgpOyAvLyB0aGUgc2Vzc2lvbiBpcyBvdmVyOyB0YWtlIGl0IG9mZiBvZiB0aGUgc2NvcGVcblxuXG4gICAgKF9lID0gKF9kID0gdGhpcy5nZXRTdGFja1RvcCgpKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Quc2NvcGUpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5zZXRTZXNzaW9uKCk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEh1Yi5wcm90b3R5cGUuc3RhcnRTZXNzaW9uID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICB2YXIgX2EgPSB0aGlzLmdldFN0YWNrVG9wKCksXG4gICAgICAgIHNjb3BlID0gX2Euc2NvcGUsXG4gICAgICAgIGNsaWVudCA9IF9hLmNsaWVudDtcblxuICAgIHZhciBfYiA9IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpIHx8IHt9LFxuICAgICAgICByZWxlYXNlID0gX2IucmVsZWFzZSxcbiAgICAgICAgZW52aXJvbm1lbnQgPSBfYi5lbnZpcm9ubWVudDsgLy8gV2lsbCBmZXRjaCB1c2VyQWdlbnQgaWYgY2FsbGVkIGZyb20gYnJvd3NlciBzZGtcblxuXG4gICAgdmFyIGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpO1xuICAgIHZhciB1c2VyQWdlbnQgPSAoZ2xvYmFsLm5hdmlnYXRvciB8fCB7fSkudXNlckFnZW50O1xuICAgIHZhciBzZXNzaW9uID0gbmV3IFNlc3Npb24oX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oe1xuICAgICAgcmVsZWFzZTogcmVsZWFzZSxcbiAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudFxuICAgIH0sIHNjb3BlICYmIHtcbiAgICAgIHVzZXI6IHNjb3BlLmdldFVzZXIoKVxuICAgIH0pLCB1c2VyQWdlbnQgJiYge1xuICAgICAgdXNlckFnZW50OiB1c2VyQWdlbnRcbiAgICB9KSwgY29udGV4dCkpO1xuXG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICAvLyBFbmQgZXhpc3Rpbmcgc2Vzc2lvbiBpZiB0aGVyZSdzIG9uZVxuICAgICAgdmFyIGN1cnJlbnRTZXNzaW9uID0gc2NvcGUuZ2V0U2Vzc2lvbiAmJiBzY29wZS5nZXRTZXNzaW9uKCk7XG5cbiAgICAgIGlmIChjdXJyZW50U2Vzc2lvbiAmJiBjdXJyZW50U2Vzc2lvbi5zdGF0dXMgPT09IFNlc3Npb25TdGF0dXMuT2spIHtcbiAgICAgICAgY3VycmVudFNlc3Npb24udXBkYXRlKHtcbiAgICAgICAgICBzdGF0dXM6IFNlc3Npb25TdGF0dXMuRXhpdGVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVuZFNlc3Npb24oKTsgLy8gQWZ0ZXJ3YXJkcyB3ZSBzZXQgdGhlIG5ldyBzZXNzaW9uIG9uIHRoZSBzY29wZVxuXG4gICAgICBzY29wZS5zZXRTZXNzaW9uKHNlc3Npb24pO1xuICAgIH1cblxuICAgIHJldHVybiBzZXNzaW9uO1xuICB9O1xuICAvKipcbiAgICogU2VuZHMgdGhlIGN1cnJlbnQgU2Vzc2lvbiBvbiB0aGUgc2NvcGVcbiAgICovXG5cblxuICBIdWIucHJvdG90eXBlLl9zZW5kU2Vzc2lvblVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2EgPSB0aGlzLmdldFN0YWNrVG9wKCksXG4gICAgICAgIHNjb3BlID0gX2Euc2NvcGUsXG4gICAgICAgIGNsaWVudCA9IF9hLmNsaWVudDtcblxuICAgIGlmICghc2NvcGUpIHJldHVybjtcbiAgICB2YXIgc2Vzc2lvbiA9IHNjb3BlLmdldFNlc3Npb24gJiYgc2NvcGUuZ2V0U2Vzc2lvbigpO1xuXG4gICAgaWYgKHNlc3Npb24pIHtcbiAgICAgIGlmIChjbGllbnQgJiYgY2xpZW50LmNhcHR1cmVTZXNzaW9uKSB7XG4gICAgICAgIGNsaWVudC5jYXB0dXJlU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gY2FsbCBhIG1ldGhvZCBvbiB0aGUgdG9wIGNsaWVudCBpZiBpdCBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byBjYWxsIG9uIHRoZSBjbGllbnQuXG4gICAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjbGllbnQgZnVuY3Rpb24uXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXG5cbiAgSHViLnByb3RvdHlwZS5faW52b2tlQ2xpZW50ID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgIHZhciBfYTtcblxuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG5cbiAgICB2YXIgX2IgPSB0aGlzLmdldFN0YWNrVG9wKCksXG4gICAgICAgIHNjb3BlID0gX2Iuc2NvcGUsXG4gICAgICAgIGNsaWVudCA9IF9iLmNsaWVudDtcblxuICAgIGlmIChjbGllbnQgJiYgY2xpZW50W21ldGhvZF0pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIChfYSA9IGNsaWVudClbbWV0aG9kXS5hcHBseShfYSwgX19zcHJlYWQoYXJncywgW3Njb3BlXSkpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENhbGxzIGdsb2JhbCBleHRlbnNpb24gbWV0aG9kIGFuZCBiaW5kaW5nIGN1cnJlbnQgaW5zdGFuY2UgdG8gdGhlIGZ1bmN0aW9uIGNhbGxcbiAgICovXG4gIC8vIEB0cy1pZ25vcmUgRnVuY3Rpb24gbGFja3MgZW5kaW5nIHJldHVybiBzdGF0ZW1lbnQgYW5kIHJldHVybiB0eXBlIGRvZXMgbm90IGluY2x1ZGUgJ3VuZGVmaW5lZCcuIHRzKDIzNjYpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cblxuICBIdWIucHJvdG90eXBlLl9jYWxsRXh0ZW5zaW9uTWV0aG9kID0gZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG5cbiAgICB2YXIgY2FycmllciA9IGdldE1haW5DYXJyaWVyKCk7XG4gICAgdmFyIHNlbnRyeSA9IGNhcnJpZXIuX19TRU5UUllfXztcblxuICAgIGlmIChzZW50cnkgJiYgc2VudHJ5LmV4dGVuc2lvbnMgJiYgdHlwZW9mIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBzZW50cnkuZXh0ZW5zaW9uc1ttZXRob2RdLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKFwiRXh0ZW5zaW9uIG1ldGhvZCBcIiArIG1ldGhvZCArIFwiIGNvdWxkbid0IGJlIGZvdW5kLCBkb2luZyBub3RoaW5nLlwiKTtcbiAgfTtcblxuICByZXR1cm4gSHViO1xufSgpO1xuXG5leHBvcnQgeyBIdWIgfTtcbi8qKlxuICogUmV0dXJucyB0aGUgZ2xvYmFsIHNoaW0gcmVnaXN0cnkuXG4gKlxuICogRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgcHJvYmxlbWF0aWMsIGJlY2F1c2UgZGVzcGl0ZSBhbHdheXMgcmV0dXJuaW5nIGEgdmFsaWQgQ2FycmllcixcbiAqIGl0IGhhcyBhbiBvcHRpb25hbCBgX19TRU5UUllfX2AgcHJvcGVydHksIHdoaWNoIHRoZW4gaW4gdHVybiByZXF1aXJlcyB1cyB0byBhbHdheXMgcGVyZm9ybSBhbiB1bm5lY2Vzc2FyeSBjaGVja1xuICogYXQgdGhlIGNhbGwtc2l0ZS4gV2UgYWx3YXlzIGFjY2VzcyB0aGUgY2FycmllciB0aHJvdWdoIHRoaXMgZnVuY3Rpb24sIHNvIHdlIGNhbiBndWFyYW50ZWUgdGhhdCBgX19TRU5UUllfX2AgaXMgdGhlcmUuXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWluQ2FycmllcigpIHtcbiAgdmFyIGNhcnJpZXIgPSBnZXRHbG9iYWxPYmplY3QoKTtcbiAgY2Fycmllci5fX1NFTlRSWV9fID0gY2Fycmllci5fX1NFTlRSWV9fIHx8IHtcbiAgICBleHRlbnNpb25zOiB7fSxcbiAgICBodWI6IHVuZGVmaW5lZFxuICB9O1xuICByZXR1cm4gY2Fycmllcjtcbn1cbi8qKlxuICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFpbiBodWIgd2l0aCB0aGUgcGFzc2VkIG9uZSBvbiB0aGUgZ2xvYmFsIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIFRoZSBvbGQgcmVwbGFjZWQgaHViXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VNYWluKGh1Yikge1xuICB2YXIgcmVnaXN0cnkgPSBnZXRNYWluQ2FycmllcigpO1xuICB2YXIgb2xkSHViID0gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpO1xuICBzZXRIdWJPbkNhcnJpZXIocmVnaXN0cnksIGh1Yik7XG4gIHJldHVybiBvbGRIdWI7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGRlZmF1bHQgaHViIGluc3RhbmNlLlxuICpcbiAqIElmIGEgaHViIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGNhcnJpZXIgYnV0IHRoaXMgbW9kdWxlXG4gKiBjb250YWlucyBhIG1vcmUgcmVjZW50IHZlcnNpb24sIGl0IHJlcGxhY2VzIHRoZSByZWdpc3RlcmVkIHZlcnNpb24uXG4gKiBPdGhlcndpc2UsIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBodWIgd2lsbCBiZSByZXR1cm5lZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudEh1YigpIHtcbiAgLy8gR2V0IG1haW4gY2FycmllciAoZ2xvYmFsIGZvciBldmVyeSBlbnZpcm9ubWVudClcbiAgdmFyIHJlZ2lzdHJ5ID0gZ2V0TWFpbkNhcnJpZXIoKTsgLy8gSWYgdGhlcmUncyBubyBodWIsIG9yIGl0cyBhbiBvbGQgQVBJLCBhc3NpZ24gYSBuZXcgb25lXG5cbiAgaWYgKCFoYXNIdWJPbkNhcnJpZXIocmVnaXN0cnkpIHx8IGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KS5pc09sZGVyVGhhbihBUElfVkVSU0lPTikpIHtcbiAgICBzZXRIdWJPbkNhcnJpZXIocmVnaXN0cnksIG5ldyBIdWIoKSk7XG4gIH0gLy8gUHJlZmVyIGRvbWFpbnMgb3ZlciBnbG9iYWwgaWYgdGhleSBhcmUgdGhlcmUgKGFwcGxpY2FibGUgb25seSB0byBOb2RlIGVudmlyb25tZW50KVxuXG5cbiAgaWYgKGlzTm9kZUVudigpKSB7XG4gICAgcmV0dXJuIGdldEh1YkZyb21BY3RpdmVEb21haW4ocmVnaXN0cnkpO1xuICB9IC8vIFJldHVybiBodWIgdGhhdCBsaXZlcyBvbiBhIGdsb2JhbCBvYmplY3RcblxuXG4gIHJldHVybiBnZXRIdWJGcm9tQ2FycmllcihyZWdpc3RyeSk7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGl2ZSBkb21haW4sIGlmIG9uZSBleGlzdHNcbiAqIEBkZXByZWNhdGVkIE5vIGxvbmdlciB1c2VkOyByZW1vdmUgaW4gdjdcbiAqIEByZXR1cm5zIFRoZSBkb21haW4sIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgZG9tYWluXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRG9tYWluKCkge1xuICBsb2dnZXIud2FybignRnVuY3Rpb24gYGdldEFjdGl2ZURvbWFpbmAgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uJyk7XG5cbiAgdmFyIHNlbnRyeSA9IGdldE1haW5DYXJyaWVyKCkuX19TRU5UUllfXztcblxuICByZXR1cm4gc2VudHJ5ICYmIHNlbnRyeS5leHRlbnNpb25zICYmIHNlbnRyeS5leHRlbnNpb25zLmRvbWFpbiAmJiBzZW50cnkuZXh0ZW5zaW9ucy5kb21haW4uYWN0aXZlO1xufVxuLyoqXG4gKiBUcnkgdG8gcmVhZCB0aGUgaHViIGZyb20gYW4gYWN0aXZlIGRvbWFpbiwgYW5kIGZhbGxiYWNrIHRvIHRoZSByZWdpc3RyeSBpZiBvbmUgZG9lc24ndCBleGlzdFxuICogQHJldHVybnMgZGlzY292ZXJlZCBodWJcbiAqL1xuXG5mdW5jdGlvbiBnZXRIdWJGcm9tQWN0aXZlRG9tYWluKHJlZ2lzdHJ5KSB7XG4gIHZhciBfYSwgX2IsIF9jO1xuXG4gIHRyeSB7XG4gICAgdmFyIGFjdGl2ZURvbWFpbiA9IChfYyA9IChfYiA9IChfYSA9IGdldE1haW5DYXJyaWVyKCkuX19TRU5UUllfXykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmV4dGVuc2lvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5kb21haW4pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5hY3RpdmU7IC8vIElmIHRoZXJlJ3Mgbm8gYWN0aXZlIGRvbWFpbiwganVzdCByZXR1cm4gZ2xvYmFsIGh1YlxuXG4gICAgaWYgKCFhY3RpdmVEb21haW4pIHtcbiAgICAgIHJldHVybiBnZXRIdWJGcm9tQ2FycmllcihyZWdpc3RyeSk7XG4gICAgfSAvLyBJZiB0aGVyZSdzIG5vIGh1YiBvbiBjdXJyZW50IGRvbWFpbiwgb3IgaXQncyBhbiBvbGQgQVBJLCBhc3NpZ24gYSBuZXcgb25lXG5cblxuICAgIGlmICghaGFzSHViT25DYXJyaWVyKGFjdGl2ZURvbWFpbikgfHwgZ2V0SHViRnJvbUNhcnJpZXIoYWN0aXZlRG9tYWluKS5pc09sZGVyVGhhbihBUElfVkVSU0lPTikpIHtcbiAgICAgIHZhciByZWdpc3RyeUh1YlRvcFN0YWNrID0gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpLmdldFN0YWNrVG9wKCk7XG4gICAgICBzZXRIdWJPbkNhcnJpZXIoYWN0aXZlRG9tYWluLCBuZXcgSHViKHJlZ2lzdHJ5SHViVG9wU3RhY2suY2xpZW50LCBTY29wZS5jbG9uZShyZWdpc3RyeUh1YlRvcFN0YWNrLnNjb3BlKSkpO1xuICAgIH0gLy8gUmV0dXJuIGh1YiB0aGF0IGxpdmVzIG9uIGEgZG9tYWluXG5cblxuICAgIHJldHVybiBnZXRIdWJGcm9tQ2FycmllcihhY3RpdmVEb21haW4pO1xuICB9IGNhdGNoIChfT28pIHtcbiAgICAvLyBSZXR1cm4gaHViIHRoYXQgbGl2ZXMgb24gYSBnbG9iYWwgb2JqZWN0XG4gICAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIHdpbGwgdGVsbCB3aGV0aGVyIGEgY2FycmllciBoYXMgYSBodWIgb24gaXQgb3Igbm90XG4gKiBAcGFyYW0gY2FycmllciBvYmplY3RcbiAqL1xuXG5cbmZ1bmN0aW9uIGhhc0h1Yk9uQ2FycmllcihjYXJyaWVyKSB7XG4gIHJldHVybiAhIShjYXJyaWVyICYmIGNhcnJpZXIuX19TRU5UUllfXyAmJiBjYXJyaWVyLl9fU0VOVFJZX18uaHViKTtcbn1cbi8qKlxuICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB7QGxpbmsgSHVifSBhbmQgYWRkIHRvIHRoZSBwYXNzZWQgb2JqZWN0IG9uXG4gKiBfX1NFTlRSWV9fLmh1Yi5cbiAqIEBwYXJhbSBjYXJyaWVyIG9iamVjdFxuICogQGhpZGRlblxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEh1YkZyb21DYXJyaWVyKGNhcnJpZXIpIHtcbiAgaWYgKGNhcnJpZXIgJiYgY2Fycmllci5fX1NFTlRSWV9fICYmIGNhcnJpZXIuX19TRU5UUllfXy5odWIpIHJldHVybiBjYXJyaWVyLl9fU0VOVFJZX18uaHViO1xuICBjYXJyaWVyLl9fU0VOVFJZX18gPSBjYXJyaWVyLl9fU0VOVFJZX18gfHwge307XG4gIGNhcnJpZXIuX19TRU5UUllfXy5odWIgPSBuZXcgSHViKCk7XG4gIHJldHVybiBjYXJyaWVyLl9fU0VOVFJZX18uaHViO1xufVxuLyoqXG4gKiBUaGlzIHdpbGwgc2V0IHBhc3NlZCB7QGxpbmsgSHVifSBvbiB0aGUgcGFzc2VkIG9iamVjdCdzIF9fU0VOVFJZX18uaHViIGF0dHJpYnV0ZVxuICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0XG4gKiBAcGFyYW0gaHViIEh1YlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh1Yk9uQ2FycmllcihjYXJyaWVyLCBodWIpIHtcbiAgaWYgKCFjYXJyaWVyKSByZXR1cm4gZmFsc2U7XG4gIGNhcnJpZXIuX19TRU5UUllfXyA9IGNhcnJpZXIuX19TRU5UUllfXyB8fCB7fTtcbiAgY2Fycmllci5fX1NFTlRSWV9fLmh1YiA9IGh1YjtcbiAgcmV0dXJuIHRydWU7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3210\n")},7659:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"s\": function() { return /* binding */ Scope; },\n/* harmony export */ \"c\": function() { return /* binding */ addGlobalEventProcessor; }\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4645);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2684);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5153);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5370);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2861);\n\n\n/**\n * Absolute maximum number of breadcrumbs added to an event.\n * The `maxBreadcrumbs` option cannot be higher than this value.\n */\n\nvar MAX_BREADCRUMBS = 100;\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\n\nvar Scope =\n/** @class */\nfunction () {\n function Scope() {\n /** Flag if notifying is happening. */\n this._notifyingListeners = false;\n /** Callback for client to receive scope changes. */\n\n this._scopeListeners = [];\n /** Callback list that will be called after {@link applyToEvent}. */\n\n this._eventProcessors = [];\n /** Array of breadcrumbs. */\n\n this._breadcrumbs = [];\n /** User */\n\n this._user = {};\n /** Tags */\n\n this._tags = {};\n /** Extra */\n\n this._extra = {};\n /** Contexts */\n\n this._contexts = {};\n }\n /**\n * Inherit values from the parent scope.\n * @param scope to clone.\n */\n\n\n Scope.clone = function (scope) {\n var newScope = new Scope();\n\n if (scope) {\n newScope._breadcrumbs = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__spread */ .fl)(scope._breadcrumbs);\n newScope._tags = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, scope._tags);\n newScope._extra = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, scope._extra);\n newScope._contexts = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, scope._contexts);\n newScope._user = scope._user;\n newScope._level = scope._level;\n newScope._span = scope._span;\n newScope._session = scope._session;\n newScope._transactionName = scope._transactionName;\n newScope._fingerprint = scope._fingerprint;\n newScope._eventProcessors = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__spread */ .fl)(scope._eventProcessors);\n newScope._requestSession = scope._requestSession;\n }\n\n return newScope;\n };\n /**\n * Add internal on change listener. Used for sub SDKs that need to store the scope.\n * @hidden\n */\n\n\n Scope.prototype.addScopeListener = function (callback) {\n this._scopeListeners.push(callback);\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.addEventProcessor = function (callback) {\n this._eventProcessors.push(callback);\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setUser = function (user) {\n this._user = user || {};\n\n if (this._session) {\n this._session.update({\n user: user\n });\n }\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.getUser = function () {\n return this._user;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.getRequestSession = function () {\n return this._requestSession;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setRequestSession = function (requestSession) {\n this._requestSession = requestSession;\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setTags = function (tags) {\n this._tags = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._tags), tags);\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setTag = function (key, value) {\n var _a;\n\n this._tags = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._tags), (_a = {}, _a[key] = value, _a));\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setExtras = function (extras) {\n this._extra = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._extra), extras);\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setExtra = function (key, extra) {\n var _a;\n\n this._extra = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._extra), (_a = {}, _a[key] = extra, _a));\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setFingerprint = function (fingerprint) {\n this._fingerprint = fingerprint;\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setLevel = function (level) {\n this._level = level;\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setTransactionName = function (name) {\n this._transactionName = name;\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * Can be removed in major version.\n * @deprecated in favor of {@link this.setTransactionName}\n */\n\n\n Scope.prototype.setTransaction = function (name) {\n return this.setTransactionName(name);\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setContext = function (key, context) {\n var _a;\n\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._contexts), (_a = {}, _a[key] = context, _a));\n }\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setSpan = function (span) {\n this._span = span;\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.getSpan = function () {\n return this._span;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.getTransaction = function () {\n var _a, _b, _c, _d; // often, this span will be a transaction, but it's not guaranteed to be\n\n\n var span = this.getSpan(); // try it the new way first\n\n if ((_a = span) === null || _a === void 0 ? void 0 : _a.transaction) {\n return (_b = span) === null || _b === void 0 ? void 0 : _b.transaction;\n } // fallback to the old way (known bug: this only finds transactions with sampled = true)\n\n\n if ((_d = (_c = span) === null || _c === void 0 ? void 0 : _c.spanRecorder) === null || _d === void 0 ? void 0 : _d.spans[0]) {\n return span.spanRecorder.spans[0];\n } // neither way found a transaction\n\n\n return undefined;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.setSession = function (session) {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.getSession = function () {\n return this._session;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.update = function (captureContext) {\n if (!captureContext) {\n return this;\n }\n\n if (typeof captureContext === 'function') {\n var updatedScope = captureContext(this);\n return updatedScope instanceof Scope ? updatedScope : this;\n }\n\n if (captureContext instanceof Scope) {\n this._tags = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._tags), captureContext._tags);\n this._extra = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._extra), captureContext._extra);\n this._contexts = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._contexts), captureContext._contexts);\n\n if (captureContext._user && Object.keys(captureContext._user).length) {\n this._user = captureContext._user;\n }\n\n if (captureContext._level) {\n this._level = captureContext._level;\n }\n\n if (captureContext._fingerprint) {\n this._fingerprint = captureContext._fingerprint;\n }\n\n if (captureContext._requestSession) {\n this._requestSession = captureContext._requestSession;\n }\n } else if ((0,_sentry_utils__WEBPACK_IMPORTED_MODULE_1__/* .isPlainObject */ .PO)(captureContext)) {\n // eslint-disable-next-line no-param-reassign\n captureContext = captureContext;\n this._tags = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._tags), captureContext.tags);\n this._extra = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._extra), captureContext.extra);\n this._contexts = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._contexts), captureContext.contexts);\n\n if (captureContext.user) {\n this._user = captureContext.user;\n }\n\n if (captureContext.level) {\n this._level = captureContext.level;\n }\n\n if (captureContext.fingerprint) {\n this._fingerprint = captureContext.fingerprint;\n }\n\n if (captureContext.requestSession) {\n this._requestSession = captureContext.requestSession;\n }\n }\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.clear = function () {\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._span = undefined;\n this._session = undefined;\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.addBreadcrumb = function (breadcrumb, maxBreadcrumbs) {\n var maxCrumbs = typeof maxBreadcrumbs === 'number' ? Math.min(maxBreadcrumbs, MAX_BREADCRUMBS) : MAX_BREADCRUMBS; // No data has been changed, so don't notify scope listeners\n\n if (maxCrumbs <= 0) {\n return this;\n }\n\n var mergedBreadcrumb = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({\n timestamp: (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_2__/* .dateTimestampInSeconds */ .yW)()\n }, breadcrumb);\n\n this._breadcrumbs = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__spread */ .fl)(this._breadcrumbs, [mergedBreadcrumb]).slice(-maxCrumbs);\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Scope.prototype.clearBreadcrumbs = function () {\n this._breadcrumbs = [];\n\n this._notifyScopeListeners();\n\n return this;\n };\n /**\n * Applies the current context and fingerprint to the event.\n * Note that breadcrumbs will be added by the client.\n * Also if the event has already breadcrumbs on it, we do not merge them.\n * @param event Event\n * @param hint May contain additional information about the original exception.\n * @hidden\n */\n\n\n Scope.prototype.applyToEvent = function (event, hint) {\n var _a;\n\n if (this._extra && Object.keys(this._extra).length) {\n event.extra = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._extra), event.extra);\n }\n\n if (this._tags && Object.keys(this._tags).length) {\n event.tags = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._tags), event.tags);\n }\n\n if (this._user && Object.keys(this._user).length) {\n event.user = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._user), event.user);\n }\n\n if (this._contexts && Object.keys(this._contexts).length) {\n event.contexts = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, this._contexts), event.contexts);\n }\n\n if (this._level) {\n event.level = this._level;\n }\n\n if (this._transactionName) {\n event.transaction = this._transactionName;\n } // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n\n\n if (this._span) {\n event.contexts = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({\n trace: this._span.getTraceContext()\n }, event.contexts);\n var transactionName = (_a = this._span.transaction) === null || _a === void 0 ? void 0 : _a.name;\n\n if (transactionName) {\n event.tags = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({\n transaction: transactionName\n }, event.tags);\n }\n }\n\n this._applyFingerprint(event);\n\n event.breadcrumbs = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__spread */ .fl)(event.breadcrumbs || [], this._breadcrumbs);\n event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined;\n return this._notifyEventProcessors((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__spread */ .fl)(getGlobalEventProcessors(), this._eventProcessors), event, hint);\n };\n /**\n * This will be called after {@link applyToEvent} is finished.\n */\n\n\n Scope.prototype._notifyEventProcessors = function (processors, event, hint, index) {\n var _this = this;\n\n if (index === void 0) {\n index = 0;\n }\n\n return new _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .SyncPromise */ .c(function (resolve, reject) {\n var processor = processors[index];\n\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n var result = processor((0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__assign */ .pi)({}, event), hint);\n\n if ((0,_sentry_utils__WEBPACK_IMPORTED_MODULE_1__/* .isThenable */ .J8)(result)) {\n void result.then(function (final) {\n return _this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve);\n }).then(null, reject);\n } else {\n void _this._notifyEventProcessors(processors, result, hint, index + 1).then(resolve).then(null, reject);\n }\n }\n });\n };\n /**\n * This will be called on every set call.\n */\n\n\n Scope.prototype._notifyScopeListeners = function () {\n var _this = this; // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n\n\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n\n this._scopeListeners.forEach(function (callback) {\n callback(_this);\n });\n\n this._notifyingListeners = false;\n }\n };\n /**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\n\n\n Scope.prototype._applyFingerprint = function (event) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint ? Array.isArray(event.fingerprint) ? event.fingerprint : [event.fingerprint] : []; // If we have something on the scope, then merge it with event\n\n if (this._fingerprint) {\n event.fingerprint = event.fingerprint.concat(this._fingerprint);\n } // If we have no data at all, remove empty array default\n\n\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n };\n\n return Scope;\n}();\n\n\n/**\n * Returns the global event processors.\n */\n\nfunction getGlobalEventProcessors() {\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\n var global = (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_4__/* .getGlobalObject */ .Rf)();\n global.__SENTRY__ = global.__SENTRY__ || {};\n global.__SENTRY__.globalEventProcessors = global.__SENTRY__.globalEventProcessors || [];\n return global.__SENTRY__.globalEventProcessors;\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\n}\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\n\n\nfunction addGlobalEventProcessor(callback) {\n getGlobalEventProcessors().push(callback);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9lc20vc2NvcGUuanM/NmMzNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBbUQ7QUFDNkQ7QUFDaEg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdDQUF3Qyx5QkFBeUI7QUFDakU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRCxtQkFBbUI7O0FBRXBFO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEIseURBQVE7QUFDdEMsdUJBQXVCLHlEQUFRLEdBQUc7QUFDbEMsd0JBQXdCLHlEQUFRLEdBQUc7QUFDbkMsMkJBQTJCLHlEQUFRLEdBQUc7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlEQUFRO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLGlCQUFpQix5REFBUSxDQUFDLHlEQUFRLEdBQUc7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsaUJBQWlCLHlEQUFR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dUJBQXVCLHlEQUFRO0FBQy9CO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EscUJBQXFCLHlEQUFRO0FBQzdCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUEsd0JBQXdCLHlEQUFRO0FBQ2hDO0FBQ0EsdUNBQXVDLHlEQUFRO0FBQy9DO0FBQ0E7QUFDQSxnQ0FBZ0MsbUJBQW1CO0FBQ25EOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLCtEQUFXO0FBQzFCOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsK0JBQStCLHlEQUFRLEdBQUc7O0FBRTFDLFlBQVksbUVBQVU7QUFDdEI7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsNEhBQTRIOztBQUU1SDtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVnQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsd0VBQWU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHTztBQUNQO0FBQ0EiLCJmaWxlIjoiNzY1OS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IF9fYXNzaWduLCBfX3JlYWQsIF9fc3ByZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wSW5TZWNvbmRzLCBnZXRHbG9iYWxPYmplY3QsIGlzUGxhaW5PYmplY3QsIGlzVGhlbmFibGUsIFN5bmNQcm9taXNlIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG4vKipcbiAqIEFic29sdXRlIG1heGltdW0gbnVtYmVyIG9mIGJyZWFkY3J1bWJzIGFkZGVkIHRvIGFuIGV2ZW50LlxuICogVGhlIGBtYXhCcmVhZGNydW1ic2Agb3B0aW9uIGNhbm5vdCBiZSBoaWdoZXIgdGhhbiB0aGlzIHZhbHVlLlxuICovXG5cbnZhciBNQVhfQlJFQURDUlVNQlMgPSAxMDA7XG4vKipcbiAqIEhvbGRzIGFkZGl0aW9uYWwgZXZlbnQgaW5mb3JtYXRpb24uIHtAbGluayBTY29wZS5hcHBseVRvRXZlbnR9IHdpbGwgYmVcbiAqIGNhbGxlZCBieSB0aGUgY2xpZW50IGJlZm9yZSBhbiBldmVudCB3aWxsIGJlIHNlbnQuXG4gKi9cblxudmFyIFNjb3BlID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU2NvcGUoKSB7XG4gICAgLyoqIEZsYWcgaWYgbm90aWZ5aW5nIGlzIGhhcHBlbmluZy4gKi9cbiAgICB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgPSBmYWxzZTtcbiAgICAvKiogQ2FsbGJhY2sgZm9yIGNsaWVudCB0byByZWNlaXZlIHNjb3BlIGNoYW5nZXMuICovXG5cbiAgICB0aGlzLl9zY29wZUxpc3RlbmVycyA9IFtdO1xuICAgIC8qKiBDYWxsYmFjayBsaXN0IHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIge0BsaW5rIGFwcGx5VG9FdmVudH0uICovXG5cbiAgICB0aGlzLl9ldmVudFByb2Nlc3NvcnMgPSBbXTtcbiAgICAvKiogQXJyYXkgb2YgYnJlYWRjcnVtYnMuICovXG5cbiAgICB0aGlzLl9icmVhZGNydW1icyA9IFtdO1xuICAgIC8qKiBVc2VyICovXG5cbiAgICB0aGlzLl91c2VyID0ge307XG4gICAgLyoqIFRhZ3MgKi9cblxuICAgIHRoaXMuX3RhZ3MgPSB7fTtcbiAgICAvKiogRXh0cmEgKi9cblxuICAgIHRoaXMuX2V4dHJhID0ge307XG4gICAgLyoqIENvbnRleHRzICovXG5cbiAgICB0aGlzLl9jb250ZXh0cyA9IHt9O1xuICB9XG4gIC8qKlxuICAgKiBJbmhlcml0IHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgc2NvcGUuXG4gICAqIEBwYXJhbSBzY29wZSB0byBjbG9uZS5cbiAgICovXG5cblxuICBTY29wZS5jbG9uZSA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgIHZhciBuZXdTY29wZSA9IG5ldyBTY29wZSgpO1xuXG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBuZXdTY29wZS5fYnJlYWRjcnVtYnMgPSBfX3NwcmVhZChzY29wZS5fYnJlYWRjcnVtYnMpO1xuICAgICAgbmV3U2NvcGUuX3RhZ3MgPSBfX2Fzc2lnbih7fSwgc2NvcGUuX3RhZ3MpO1xuICAgICAgbmV3U2NvcGUuX2V4dHJhID0gX19hc3NpZ24oe30sIHNjb3BlLl9leHRyYSk7XG4gICAgICBuZXdTY29wZS5fY29udGV4dHMgPSBfX2Fzc2lnbih7fSwgc2NvcGUuX2NvbnRleHRzKTtcbiAgICAgIG5ld1Njb3BlLl91c2VyID0gc2NvcGUuX3VzZXI7XG4gICAgICBuZXdTY29wZS5fbGV2ZWwgPSBzY29wZS5fbGV2ZWw7XG4gICAgICBuZXdTY29wZS5fc3BhbiA9IHNjb3BlLl9zcGFuO1xuICAgICAgbmV3U2NvcGUuX3Nlc3Npb24gPSBzY29wZS5fc2Vzc2lvbjtcbiAgICAgIG5ld1Njb3BlLl90cmFuc2FjdGlvbk5hbWUgPSBzY29wZS5fdHJhbnNhY3Rpb25OYW1lO1xuICAgICAgbmV3U2NvcGUuX2ZpbmdlcnByaW50ID0gc2NvcGUuX2ZpbmdlcnByaW50O1xuICAgICAgbmV3U2NvcGUuX2V2ZW50UHJvY2Vzc29ycyA9IF9fc3ByZWFkKHNjb3BlLl9ldmVudFByb2Nlc3NvcnMpO1xuICAgICAgbmV3U2NvcGUuX3JlcXVlc3RTZXNzaW9uID0gc2NvcGUuX3JlcXVlc3RTZXNzaW9uO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdTY29wZTtcbiAgfTtcbiAgLyoqXG4gICAqIEFkZCBpbnRlcm5hbCBvbiBjaGFuZ2UgbGlzdGVuZXIuIFVzZWQgZm9yIHN1YiBTREtzIHRoYXQgbmVlZCB0byBzdG9yZSB0aGUgc2NvcGUuXG4gICAqIEBoaWRkZW5cbiAgICovXG5cblxuICBTY29wZS5wcm90b3R5cGUuYWRkU2NvcGVMaXN0ZW5lciA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBTY29wZS5wcm90b3R5cGUuYWRkRXZlbnRQcm9jZXNzb3IgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB0aGlzLl9ldmVudFByb2Nlc3NvcnMucHVzaChjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgU2NvcGUucHJvdG90eXBlLnNldFVzZXIgPSBmdW5jdGlvbiAodXNlcikge1xuICAgIHRoaXMuX3VzZXIgPSB1c2VyIHx8IHt9O1xuXG4gICAgaWYgKHRoaXMuX3Nlc3Npb24pIHtcbiAgICAgIHRoaXMuX3Nlc3Npb24udXBkYXRlKHtcbiAgICAgICAgdXNlcjogdXNlclxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBTY29wZS5wcm90b3R5cGUuZ2V0VXNlciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgU2NvcGUucHJvdG90eXBlLmdldFJlcXVlc3RTZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0U2Vzc2lvbjtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgU2NvcGUucHJvdG90eXBlLnNldFJlcXVlc3RTZXNzaW9uID0gZnVuY3Rpb24gKHJlcXVlc3RTZXNzaW9uKSB7XG4gICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSByZXF1ZXN0U2Vzc2lvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgU2NvcGUucHJvdG90eXBlLnNldFRhZ3MgPSBmdW5jdGlvbiAodGFncykge1xuICAgIHRoaXMuX3RhZ3MgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5fdGFncyksIHRhZ3MpO1xuXG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBTY29wZS5wcm90b3R5cGUuc2V0VGFnID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgX2E7XG5cbiAgICB0aGlzLl90YWdzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuX3RhZ3MpLCAoX2EgPSB7fSwgX2Fba2V5XSA9IHZhbHVlLCBfYSkpO1xuXG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBTY29wZS5wcm90b3R5cGUuc2V0RXh0cmFzID0gZnVuY3Rpb24gKGV4dHJhcykge1xuICAgIHRoaXMuX2V4dHJhID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuX2V4dHJhKSwgZXh0cmFzKTtcblxuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgU2NvcGUucHJvdG90eXBlLnNldEV4dHJhID0gZnVuY3Rpb24gKGtleSwgZXh0cmEpIHtcbiAgICB2YXIgX2E7XG5cbiAgICB0aGlzLl9leHRyYSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLl9leHRyYSksIChfYSA9IHt9LCBfYVtrZXldID0gZXh0cmEsIF9hKSk7XG5cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNjb3BlLnByb3RvdHlwZS5zZXRGaW5nZXJwcmludCA9IGZ1bmN0aW9uIChmaW5nZXJwcmludCkge1xuICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7XG5cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNjb3BlLnByb3RvdHlwZS5zZXRMZXZlbCA9IGZ1bmN0aW9uIChsZXZlbCkge1xuICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XG5cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNjb3BlLnByb3RvdHlwZS5zZXRUcmFuc2FjdGlvbk5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XG5cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBDYW4gYmUgcmVtb3ZlZCBpbiBtYWpvciB2ZXJzaW9uLlxuICAgKiBAZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB7QGxpbmsgdGhpcy5zZXRUcmFuc2FjdGlvbk5hbWV9XG4gICAqL1xuXG5cbiAgU2NvcGUucHJvdG90eXBlLnNldFRyYW5zYWN0aW9uID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5zZXRUcmFuc2FjdGlvbk5hbWUobmFtZSk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNjb3BlLnByb3RvdHlwZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24gKGtleSwgY29udGV4dCkge1xuICAgIHZhciBfYTtcblxuICAgIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICBkZWxldGUgdGhpcy5fY29udGV4dHNba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29udGV4dHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5fY29udGV4dHMpLCAoX2EgPSB7fSwgX2Fba2V5XSA9IGNvbnRleHQsIF9hKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBTY29wZS5wcm90b3R5cGUuc2V0U3BhbiA9IGZ1bmN0aW9uIChzcGFuKSB7XG4gICAgdGhpcy5fc3BhbiA9IHNwYW47XG5cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNjb3BlLnByb3RvdHlwZS5nZXRTcGFuID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zcGFuO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBTY29wZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kOyAvLyBvZnRlbiwgdGhpcyBzcGFuIHdpbGwgYmUgYSB0cmFuc2FjdGlvbiwgYnV0IGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gYmVcblxuXG4gICAgdmFyIHNwYW4gPSB0aGlzLmdldFNwYW4oKTsgLy8gdHJ5IGl0IHRoZSBuZXcgd2F5IGZpcnN0XG5cbiAgICBpZiAoKF9hID0gc3BhbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gKF9iID0gc3BhbikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRyYW5zYWN0aW9uO1xuICAgIH0gLy8gZmFsbGJhY2sgdG8gdGhlIG9sZCB3YXkgKGtub3duIGJ1ZzogdGhpcyBvbmx5IGZpbmRzIHRyYW5zYWN0aW9ucyB3aXRoIHNhbXBsZWQgPSB0cnVlKVxuXG5cbiAgICBpZiAoKF9kID0gKF9jID0gc3BhbikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnNwYW5SZWNvcmRlcikgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLnNwYW5zWzBdKSB7XG4gICAgICByZXR1cm4gc3Bhbi5zcGFuUmVjb3JkZXIuc3BhbnNbMF07XG4gICAgfSAvLyBuZWl0aGVyIHdheSBmb3VuZCBhIHRyYW5zYWN0aW9uXG5cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNjb3BlLnByb3RvdHlwZS5zZXRTZXNzaW9uID0gZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9zZXNzaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICB9XG5cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNjb3BlLnByb3RvdHlwZS5nZXRTZXNzaW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBTY29wZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGNhcHR1cmVDb250ZXh0KSB7XG4gICAgaWYgKCFjYXB0dXJlQ29udGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHVwZGF0ZWRTY29wZSA9IGNhcHR1cmVDb250ZXh0KHRoaXMpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWRTY29wZSBpbnN0YW5jZW9mIFNjb3BlID8gdXBkYXRlZFNjb3BlIDogdGhpcztcbiAgICB9XG5cbiAgICBpZiAoY2FwdHVyZUNvbnRleHQgaW5zdGFuY2VvZiBTY29wZSkge1xuICAgICAgdGhpcy5fdGFncyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLl90YWdzKSwgY2FwdHVyZUNvbnRleHQuX3RhZ3MpO1xuICAgICAgdGhpcy5fZXh0cmEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5fZXh0cmEpLCBjYXB0dXJlQ29udGV4dC5fZXh0cmEpO1xuICAgICAgdGhpcy5fY29udGV4dHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5fY29udGV4dHMpLCBjYXB0dXJlQ29udGV4dC5fY29udGV4dHMpO1xuXG4gICAgICBpZiAoY2FwdHVyZUNvbnRleHQuX3VzZXIgJiYgT2JqZWN0LmtleXMoY2FwdHVyZUNvbnRleHQuX3VzZXIpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl91c2VyID0gY2FwdHVyZUNvbnRleHQuX3VzZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXB0dXJlQ29udGV4dC5fbGV2ZWwpIHtcbiAgICAgICAgdGhpcy5fbGV2ZWwgPSBjYXB0dXJlQ29udGV4dC5fbGV2ZWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXB0dXJlQ29udGV4dC5fZmluZ2VycHJpbnQpIHtcbiAgICAgICAgdGhpcy5fZmluZ2VycHJpbnQgPSBjYXB0dXJlQ29udGV4dC5fZmluZ2VycHJpbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXB0dXJlQ29udGV4dC5fcmVxdWVzdFNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSBjYXB0dXJlQ29udGV4dC5fcmVxdWVzdFNlc3Npb247XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGNhcHR1cmVDb250ZXh0KSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBjYXB0dXJlQ29udGV4dCA9IGNhcHR1cmVDb250ZXh0O1xuICAgICAgdGhpcy5fdGFncyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLl90YWdzKSwgY2FwdHVyZUNvbnRleHQudGFncyk7XG4gICAgICB0aGlzLl9leHRyYSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLl9leHRyYSksIGNhcHR1cmVDb250ZXh0LmV4dHJhKTtcbiAgICAgIHRoaXMuX2NvbnRleHRzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuX2NvbnRleHRzKSwgY2FwdHVyZUNvbnRleHQuY29udGV4dHMpO1xuXG4gICAgICBpZiAoY2FwdHVyZUNvbnRleHQudXNlcikge1xuICAgICAgICB0aGlzLl91c2VyID0gY2FwdHVyZUNvbnRleHQudXNlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhcHR1cmVDb250ZXh0LmxldmVsKSB7XG4gICAgICAgIHRoaXMuX2xldmVsID0gY2FwdHVyZUNvbnRleHQubGV2ZWw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXB0dXJlQ29udGV4dC5maW5nZXJwcmludCkge1xuICAgICAgICB0aGlzLl9maW5nZXJwcmludCA9IGNhcHR1cmVDb250ZXh0LmZpbmdlcnByaW50O1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FwdHVyZUNvbnRleHQucmVxdWVzdFNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSBjYXB0dXJlQ29udGV4dC5yZXF1ZXN0U2Vzc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgU2NvcGUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107XG4gICAgdGhpcy5fdGFncyA9IHt9O1xuICAgIHRoaXMuX2V4dHJhID0ge307XG4gICAgdGhpcy5fdXNlciA9IHt9O1xuICAgIHRoaXMuX2NvbnRleHRzID0ge307XG4gICAgdGhpcy5fbGV2ZWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25OYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3NwYW4gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc2Vzc2lvbiA9IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgU2NvcGUucHJvdG90eXBlLmFkZEJyZWFkY3J1bWIgPSBmdW5jdGlvbiAoYnJlYWRjcnVtYiwgbWF4QnJlYWRjcnVtYnMpIHtcbiAgICB2YXIgbWF4Q3J1bWJzID0gdHlwZW9mIG1heEJyZWFkY3J1bWJzID09PSAnbnVtYmVyJyA/IE1hdGgubWluKG1heEJyZWFkY3J1bWJzLCBNQVhfQlJFQURDUlVNQlMpIDogTUFYX0JSRUFEQ1JVTUJTOyAvLyBObyBkYXRhIGhhcyBiZWVuIGNoYW5nZWQsIHNvIGRvbid0IG5vdGlmeSBzY29wZSBsaXN0ZW5lcnNcblxuICAgIGlmIChtYXhDcnVtYnMgPD0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIG1lcmdlZEJyZWFkY3J1bWIgPSBfX2Fzc2lnbih7XG4gICAgICB0aW1lc3RhbXA6IGRhdGVUaW1lc3RhbXBJblNlY29uZHMoKVxuICAgIH0sIGJyZWFkY3J1bWIpO1xuXG4gICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBfX3NwcmVhZCh0aGlzLl9icmVhZGNydW1icywgW21lcmdlZEJyZWFkY3J1bWJdKS5zbGljZSgtbWF4Q3J1bWJzKTtcblxuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgU2NvcGUucHJvdG90eXBlLmNsZWFyQnJlYWRjcnVtYnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTtcblxuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgZmluZ2VycHJpbnQgdG8gdGhlIGV2ZW50LlxuICAgKiBOb3RlIHRoYXQgYnJlYWRjcnVtYnMgd2lsbCBiZSBhZGRlZCBieSB0aGUgY2xpZW50LlxuICAgKiBBbHNvIGlmIHRoZSBldmVudCBoYXMgYWxyZWFkeSBicmVhZGNydW1icyBvbiBpdCwgd2UgZG8gbm90IG1lcmdlIHRoZW0uXG4gICAqIEBwYXJhbSBldmVudCBFdmVudFxuICAgKiBAcGFyYW0gaGludCBNYXkgY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24uXG4gICAqIEBoaWRkZW5cbiAgICovXG5cblxuICBTY29wZS5wcm90b3R5cGUuYXBwbHlUb0V2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCBoaW50KSB7XG4gICAgdmFyIF9hO1xuXG4gICAgaWYgKHRoaXMuX2V4dHJhICYmIE9iamVjdC5rZXlzKHRoaXMuX2V4dHJhKS5sZW5ndGgpIHtcbiAgICAgIGV2ZW50LmV4dHJhID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuX2V4dHJhKSwgZXZlbnQuZXh0cmEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90YWdzICYmIE9iamVjdC5rZXlzKHRoaXMuX3RhZ3MpLmxlbmd0aCkge1xuICAgICAgZXZlbnQudGFncyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLl90YWdzKSwgZXZlbnQudGFncyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3VzZXIgJiYgT2JqZWN0LmtleXModGhpcy5fdXNlcikubGVuZ3RoKSB7XG4gICAgICBldmVudC51c2VyID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuX3VzZXIpLCBldmVudC51c2VyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29udGV4dHMgJiYgT2JqZWN0LmtleXModGhpcy5fY29udGV4dHMpLmxlbmd0aCkge1xuICAgICAgZXZlbnQuY29udGV4dHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5fY29udGV4dHMpLCBldmVudC5jb250ZXh0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xldmVsKSB7XG4gICAgICBldmVudC5sZXZlbCA9IHRoaXMuX2xldmVsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbk5hbWUpIHtcbiAgICAgIGV2ZW50LnRyYW5zYWN0aW9uID0gdGhpcy5fdHJhbnNhY3Rpb25OYW1lO1xuICAgIH0gLy8gV2Ugd2FudCB0byBzZXQgdGhlIHRyYWNlIGNvbnRleHQgZm9yIG5vcm1hbCBldmVudHMgb25seSBpZiB0aGVyZSBpc24ndCBhbHJlYWR5XG4gICAgLy8gYSB0cmFjZSBjb250ZXh0IG9uIHRoZSBldmVudC4gVGhlcmUgaXMgYSBwcm9kdWN0IGZlYXR1cmUgaW4gcGxhY2Ugd2hlcmUgd2UgbGlua1xuICAgIC8vIGVycm9ycyB3aXRoIHRyYW5zYWN0aW9uIGFuZCBpdCByZWxpZXMgb24gdGhhdC5cblxuXG4gICAgaWYgKHRoaXMuX3NwYW4pIHtcbiAgICAgIGV2ZW50LmNvbnRleHRzID0gX19hc3NpZ24oe1xuICAgICAgICB0cmFjZTogdGhpcy5fc3Bhbi5nZXRUcmFjZUNvbnRleHQoKVxuICAgICAgfSwgZXZlbnQuY29udGV4dHMpO1xuICAgICAgdmFyIHRyYW5zYWN0aW9uTmFtZSA9IChfYSA9IHRoaXMuX3NwYW4udHJhbnNhY3Rpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uYW1lO1xuXG4gICAgICBpZiAodHJhbnNhY3Rpb25OYW1lKSB7XG4gICAgICAgIGV2ZW50LnRhZ3MgPSBfX2Fzc2lnbih7XG4gICAgICAgICAgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uTmFtZVxuICAgICAgICB9LCBldmVudC50YWdzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9hcHBseUZpbmdlcnByaW50KGV2ZW50KTtcblxuICAgIGV2ZW50LmJyZWFkY3J1bWJzID0gX19zcHJlYWQoZXZlbnQuYnJlYWRjcnVtYnMgfHwgW10sIHRoaXMuX2JyZWFkY3J1bWJzKTtcbiAgICBldmVudC5icmVhZGNydW1icyA9IGV2ZW50LmJyZWFkY3J1bWJzLmxlbmd0aCA+IDAgPyBldmVudC5icmVhZGNydW1icyA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5fbm90aWZ5RXZlbnRQcm9jZXNzb3JzKF9fc3ByZWFkKGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpLCB0aGlzLl9ldmVudFByb2Nlc3NvcnMpLCBldmVudCwgaGludCk7XG4gIH07XG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHtAbGluayBhcHBseVRvRXZlbnR9IGlzIGZpbmlzaGVkLlxuICAgKi9cblxuXG4gIFNjb3BlLnByb3RvdHlwZS5fbm90aWZ5RXZlbnRQcm9jZXNzb3JzID0gZnVuY3Rpb24gKHByb2Nlc3NvcnMsIGV2ZW50LCBoaW50LCBpbmRleCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoaW5kZXggPT09IHZvaWQgMCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHByb2Nlc3NvciA9IHByb2Nlc3NvcnNbaW5kZXhdO1xuXG4gICAgICBpZiAoZXZlbnQgPT09IG51bGwgfHwgdHlwZW9mIHByb2Nlc3NvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXNvbHZlKGV2ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBwcm9jZXNzb3IoX19hc3NpZ24oe30sIGV2ZW50KSwgaGludCk7XG5cbiAgICAgICAgaWYgKGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgIHZvaWQgcmVzdWx0LnRoZW4oZnVuY3Rpb24gKGZpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuX25vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCBmaW5hbCwgaGludCwgaW5kZXggKyAxKS50aGVuKHJlc29sdmUpO1xuICAgICAgICAgIH0pLnRoZW4obnVsbCwgcmVqZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2b2lkIF90aGlzLl9ub3RpZnlFdmVudFByb2Nlc3NvcnMocHJvY2Vzc29ycywgcmVzdWx0LCBoaW50LCBpbmRleCArIDEpLnRoZW4ocmVzb2x2ZSkudGhlbihudWxsLCByZWplY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IHNldCBjYWxsLlxuICAgKi9cblxuXG4gIFNjb3BlLnByb3RvdHlwZS5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpczsgLy8gV2UgbmVlZCB0aGlzIGNoZWNrIGZvciB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgdG8gYmUgYWJsZSB0byB3b3JrIG9uIHNjb3BlIGR1cmluZyB1cGRhdGVzXG4gICAgLy8gSWYgdGhpcyBjaGVjayBpcyBub3QgaGVyZSB3ZSdsbCBwcm9kdWNlIGVuZGxlc3MgcmVjdXJzaW9uIHdoZW4gc29tZXRoaW5nIGlzIGRvbmUgd2l0aCB0aGUgc2NvcGVcbiAgICAvLyBkdXJpbmcgdGhlIGNhbGxiYWNrLlxuXG5cbiAgICBpZiAoIXRoaXMuX25vdGlmeWluZ0xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fc2NvcGVMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soX3RoaXMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX25vdGlmeWluZ0xpc3RlbmVycyA9IGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEFwcGxpZXMgZmluZ2VycHJpbnQgZnJvbSB0aGUgc2NvcGUgdG8gdGhlIGV2ZW50IGlmIHRoZXJlJ3Mgb25lLFxuICAgKiB1c2VzIG1lc3NhZ2UgaWYgdGhlcmUncyBvbmUgaW5zdGVhZCBvciBnZXQgcmlkIG9mIGVtcHR5IGZpbmdlcnByaW50XG4gICAqL1xuXG5cbiAgU2NvcGUucHJvdG90eXBlLl9hcHBseUZpbmdlcnByaW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gTWFrZSBzdXJlIGl0J3MgYW4gYXJyYXkgZmlyc3QgYW5kIHdlIGFjdHVhbGx5IGhhdmUgc29tZXRoaW5nIGluIHBsYWNlXG4gICAgZXZlbnQuZmluZ2VycHJpbnQgPSBldmVudC5maW5nZXJwcmludCA/IEFycmF5LmlzQXJyYXkoZXZlbnQuZmluZ2VycHJpbnQpID8gZXZlbnQuZmluZ2VycHJpbnQgOiBbZXZlbnQuZmluZ2VycHJpbnRdIDogW107IC8vIElmIHdlIGhhdmUgc29tZXRoaW5nIG9uIHRoZSBzY29wZSwgdGhlbiBtZXJnZSBpdCB3aXRoIGV2ZW50XG5cbiAgICBpZiAodGhpcy5fZmluZ2VycHJpbnQpIHtcbiAgICAgIGV2ZW50LmZpbmdlcnByaW50ID0gZXZlbnQuZmluZ2VycHJpbnQuY29uY2F0KHRoaXMuX2ZpbmdlcnByaW50KTtcbiAgICB9IC8vIElmIHdlIGhhdmUgbm8gZGF0YSBhdCBhbGwsIHJlbW92ZSBlbXB0eSBhcnJheSBkZWZhdWx0XG5cblxuICAgIGlmIChldmVudC5maW5nZXJwcmludCAmJiAhZXZlbnQuZmluZ2VycHJpbnQubGVuZ3RoKSB7XG4gICAgICBkZWxldGUgZXZlbnQuZmluZ2VycHJpbnQ7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTY29wZTtcbn0oKTtcblxuZXhwb3J0IHsgU2NvcGUgfTtcbi8qKlxuICogUmV0dXJucyB0aGUgZ2xvYmFsIGV2ZW50IHByb2Nlc3NvcnMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0R2xvYmFsRXZlbnRQcm9jZXNzb3JzKCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgICovXG4gIHZhciBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3QoKTtcbiAgZ2xvYmFsLl9fU0VOVFJZX18gPSBnbG9iYWwuX19TRU5UUllfXyB8fCB7fTtcbiAgZ2xvYmFsLl9fU0VOVFJZX18uZ2xvYmFsRXZlbnRQcm9jZXNzb3JzID0gZ2xvYmFsLl9fU0VOVFJZX18uZ2xvYmFsRXZlbnRQcm9jZXNzb3JzIHx8IFtdO1xuICByZXR1cm4gZ2xvYmFsLl9fU0VOVFJZX18uZ2xvYmFsRXZlbnRQcm9jZXNzb3JzO1xuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xufVxuLyoqXG4gKiBBZGQgYSBFdmVudFByb2Nlc3NvciB0byBiZSBrZXB0IGdsb2JhbGx5LlxuICogQHBhcmFtIGNhbGxiYWNrIEV2ZW50UHJvY2Vzc29yIHRvIGFkZFxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKGNhbGxiYWNrKSB7XG4gIGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpLnB1c2goY2FsbGJhY2spO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7659\n")},4645:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "pi": function() { return /* binding */ _assign; },\n/* harmony export */ "fl": function() { return /* binding */ __spread; }\n/* harmony export */ });\n/* unused harmony exports __extends, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\n\nfunction __rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction __param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator["throw"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n "throw": verb(1),\n "return": verb(2)\n }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError("Generator is already executing.");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction __createBinding(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}\nfunction __exportStar(m, exports) {\n for (var p in m) {\n if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];\n }\n}\nfunction __values(o) {\n var s = typeof Symbol === "function" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === "number") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === "function" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i["return"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\nfunction __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n}\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n;\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n\n function verb(n) {\n if (g[n]) i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n }\n\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n\n function fulfill(value) {\n resume("next", value);\n }\n\n function reject(value) {\n resume("throw", value);\n }\n\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction __asyncDelegator(o) {\n var i, p;\n return i = {}, verb("next"), verb("throw", function (e) {\n throw e;\n }), verb("return"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: __await(o[n](v)),\n done: n === "return"\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, "raw", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n\n return cooked;\n}\n;\nfunction __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n }\n result.default = mod;\n return result;\n}\nfunction __importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nfunction __classPrivateFieldGet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError("attempted to get private field on non-instance");\n }\n\n return privateMap.get(receiver);\n}\nfunction __classPrivateFieldSet(receiver, privateMap, value) {\n if (!privateMap.has(receiver)) {\n throw new TypeError("attempted to set private field on non-instance");\n }\n\n privateMap.set(receiver, value);\n return value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzP2M4YzEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFK0I7QUFDeEI7QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkhBQTJILGNBQWM7QUFDekk7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLGlJQUFpSSx3Q0FBd0MsUUFBUTtBQUNqTDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDTztBQUNQLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ087QUFDUCwrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBOztBQUVBLHNDQUFzQyxRQUFRO0FBQzlDLG9EQUFvRCxRQUFRO0FBQzVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSx5R0FBeUc7QUFDekc7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwiZmlsZSI6IjQ2NDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xudmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICBfX3Byb3RvX186IFtdXG4gIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGQuX19wcm90b19fID0gYjtcbiAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgZnVuY3Rpb24gX18oKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gIH1cblxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbnZhciBfYXNzaWduID0gZnVuY3Rpb24gX19hc3NpZ24oKSB7XG4gIF9hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIHMgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIHAgaW4gcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdDtcbiAgfTtcblxuICByZXR1cm4gX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxuZXhwb3J0IHsgX2Fzc2lnbiBhcyBfX2Fzc2lnbiB9O1xuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG5cbiAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKSB0W3BdID0gc1twXTtcbiAgfVxuXG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIikgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSkgdFtwW2ldXSA9IHNbcFtpXV07XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYyxcbiAgICAgIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7ZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIH1cbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTtcbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG4gICAgICByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcbiAgICB9XG5cbiAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7XG4gICAgbGFiZWw6IDAsXG4gICAgc2VudDogZnVuY3Rpb24gc2VudCgpIHtcbiAgICAgIGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTtcbiAgICAgIHJldHVybiB0WzFdO1xuICAgIH0sXG4gICAgdHJ5czogW10sXG4gICAgb3BzOiBbXVxuICB9LFxuICAgICAgZixcbiAgICAgIHksXG4gICAgICB0LFxuICAgICAgZztcbiAgcmV0dXJuIGcgPSB7XG4gICAgbmV4dDogdmVyYigwKSxcbiAgICBcInRocm93XCI6IHZlcmIoMSksXG4gICAgXCJyZXR1cm5cIjogdmVyYigyKVxuICB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGc7XG5cbiAgZnVuY3Rpb24gdmVyYihuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gc3RlcChbbiwgdl0pO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuXG4gICAgd2hpbGUgKF8pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuXG4gICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdCA9IG9wO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBfLmxhYmVsKys7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogb3BbMV0sXG4gICAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgXy5sYWJlbCsrO1xuICAgICAgICAgICAgeSA9IG9wWzFdO1xuICAgICAgICAgICAgb3AgPSBbMF07XG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIG9wID0gXy5vcHMucG9wKCk7XG5cbiAgICAgICAgICAgIF8udHJ5cy5wb3AoKTtcblxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHtcbiAgICAgICAgICAgICAgXyA9IDA7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSB7XG4gICAgICAgICAgICAgIF8ubGFiZWwgPSBvcFsxXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkge1xuICAgICAgICAgICAgICBfLmxhYmVsID0gdFsxXTtcbiAgICAgICAgICAgICAgdCA9IG9wO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHtcbiAgICAgICAgICAgICAgXy5sYWJlbCA9IHRbMl07XG5cbiAgICAgICAgICAgICAgXy5vcHMucHVzaChvcCk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcblxuICAgICAgICAgICAgXy50cnlzLnBvcCgpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBvcCA9IFs2LCBlXTtcbiAgICAgICAgeSA9IDA7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBmID0gdCA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLFxuICAgICAgZG9uZTogdHJ1ZVxuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2NyZWF0ZUJpbmRpbmcobywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XG4gIGZvciAodmFyIHAgaW4gbSkge1xuICAgIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvcixcbiAgICAgIG0gPSBzICYmIG9bc10sXG4gICAgICBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBvICYmIG9baSsrXSxcbiAgICAgICAgZG9uZTogIW9cbiAgICAgIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSxcbiAgICAgIHIsXG4gICAgICBhciA9IFtdLFxuICAgICAgZTtcblxuICB0cnkge1xuICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSB7XG4gICAgICBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBlID0ge1xuICAgICAgZXJyb3I6IGVycm9yXG4gICAgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIH1cblxuICByZXR1cm4gYXI7XG59XG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuICAgIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgfVxuXG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKykge1xuICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKSB7XG4gICAgICByW2tdID0gYVtqXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcjtcbn1cbjtcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksXG4gICAgICBpLFxuICAgICAgcSA9IFtdO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcblxuICBmdW5jdGlvbiB2ZXJiKG4pIHtcbiAgICBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUobiwgdikge1xuICAgIHRyeSB7XG4gICAgICBzdGVwKGdbbl0odikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldHRsZShxWzBdWzNdLCBlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGVwKHIpIHtcbiAgICByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHtcbiAgICByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkge1xuICAgIHJlc3VtZShcInRocm93XCIsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7XG4gICAgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkge1xuICAgIHRocm93IGU7XG4gIH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGk7XG5cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7XG4gICAgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIChwID0gIXApID8ge1xuICAgICAgICB2YWx1ZTogX19hd2FpdChvW25dKHYpKSxcbiAgICAgICAgZG9uZTogbiA9PT0gXCJyZXR1cm5cIlxuICAgICAgfSA6IGYgPyBmKHYpIDogdjtcbiAgICB9IDogZjtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLFxuICAgICAgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaSk7XG5cbiAgZnVuY3Rpb24gdmVyYihuKSB7XG4gICAgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHtcbiAgICBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbiAodikge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB2LFxuICAgICAgICBkb25lOiBkXG4gICAgICB9KTtcbiAgICB9LCByZWplY3QpO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHtcbiAgICAgIHZhbHVlOiByYXdcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb29rZWQucmF3ID0gcmF3O1xuICB9XG5cbiAgcmV0dXJuIGNvb2tlZDtcbn1cbjtcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkge1xuICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XG4gIH1cbiAgcmVzdWx0LmRlZmF1bHQgPSBtb2Q7XG4gIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDoge1xuICAgIGRlZmF1bHQ6IG1vZFxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHByaXZhdGVNYXApIHtcbiAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcbiAgfVxuXG4gIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XG59XG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcbiAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcbiAgfVxuXG4gIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4645\n')},7066:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"BrowserClient\": function() { return /* reexport */ BrowserClient; },\n \"ErrorBoundary\": function() { return /* reexport */ ErrorBoundary; },\n \"Hub\": function() { return /* reexport */ esm_hub/* Hub */.Xb; },\n \"Integrations\": function() { return /* reexport */ INTEGRATIONS; },\n \"Profiler\": function() { return /* reexport */ Profiler; },\n \"SDK_NAME\": function() { return /* reexport */ SDK_NAME; },\n \"SDK_VERSION\": function() { return /* reexport */ SDK_VERSION; },\n \"Scope\": function() { return /* reexport */ esm_scope/* Scope */.s; },\n \"Severity\": function() { return /* reexport */ Severity; },\n \"Status\": function() { return /* reexport */ Status; },\n \"Transports\": function() { return /* reexport */ transports_namespaceObject; },\n \"addBreadcrumb\": function() { return /* reexport */ addBreadcrumb; },\n \"addGlobalEventProcessor\": function() { return /* reexport */ esm_scope/* addGlobalEventProcessor */.c; },\n \"captureEvent\": function() { return /* reexport */ captureEvent; },\n \"captureException\": function() { return /* reexport */ captureException; },\n \"captureMessage\": function() { return /* reexport */ captureMessage; },\n \"close\": function() { return /* reexport */ sdk_close; },\n \"configureScope\": function() { return /* reexport */ configureScope; },\n \"createReduxEnhancer\": function() { return /* reexport */ createReduxEnhancer; },\n \"defaultIntegrations\": function() { return /* reexport */ defaultIntegrations; },\n \"eventFromException\": function() { return /* reexport */ eventFromException; },\n \"eventFromMessage\": function() { return /* reexport */ eventFromMessage; },\n \"flush\": function() { return /* reexport */ flush; },\n \"forceLoad\": function() { return /* reexport */ forceLoad; },\n \"getCurrentHub\": function() { return /* reexport */ esm_hub/* getCurrentHub */.Gd; },\n \"getHubFromCarrier\": function() { return /* reexport */ esm_hub/* getHubFromCarrier */.vi; },\n \"init\": function() { return /* reexport */ sdk_init; },\n \"injectReportDialog\": function() { return /* reexport */ injectReportDialog; },\n \"lastEventId\": function() { return /* reexport */ lastEventId; },\n \"makeMain\": function() { return /* reexport */ esm_hub/* makeMain */.pj; },\n \"onLoad\": function() { return /* reexport */ onLoad; },\n \"reactRouterV3Instrumentation\": function() { return /* reexport */ reactRouterV3Instrumentation; },\n \"reactRouterV4Instrumentation\": function() { return /* reexport */ reactRouterV4Instrumentation; },\n \"reactRouterV5Instrumentation\": function() { return /* reexport */ reactRouterV5Instrumentation; },\n \"setContext\": function() { return /* reexport */ setContext; },\n \"setExtra\": function() { return /* reexport */ setExtra; },\n \"setExtras\": function() { return /* reexport */ setExtras; },\n \"setTag\": function() { return /* reexport */ setTag; },\n \"setTags\": function() { return /* reexport */ setTags; },\n \"setUser\": function() { return /* reexport */ setUser; },\n \"showReportDialog\": function() { return /* reexport */ showReportDialog; },\n \"startTransaction\": function() { return /* reexport */ startTransaction; },\n \"useProfiler\": function() { return /* reexport */ useProfiler; },\n \"withErrorBoundary\": function() { return /* reexport */ withErrorBoundary; },\n \"withProfiler\": function() { return /* reexport */ withProfiler; },\n \"withScope\": function() { return /* reexport */ withScope; },\n \"withSentryRouting\": function() { return /* reexport */ withSentryRouting; },\n \"wrap\": function() { return /* reexport */ sdk_wrap; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/@sentry/core/esm/integrations/index.js\nvar integrations_namespaceObject = {};\n__webpack_require__.r(integrations_namespaceObject);\n__webpack_require__.d(integrations_namespaceObject, {\n \"FunctionToString\": function() { return FunctionToString; },\n \"InboundFilters\": function() { return InboundFilters; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/@sentry/browser/esm/integrations/index.js\nvar esm_integrations_namespaceObject = {};\n__webpack_require__.r(esm_integrations_namespaceObject);\n__webpack_require__.d(esm_integrations_namespaceObject, {\n \"Breadcrumbs\": function() { return Breadcrumbs; },\n \"Dedupe\": function() { return Dedupe; },\n \"GlobalHandlers\": function() { return GlobalHandlers; },\n \"LinkedErrors\": function() { return LinkedErrors; },\n \"TryCatch\": function() { return TryCatch; },\n \"UserAgent\": function() { return UserAgent; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/@sentry/browser/esm/transports/index.js\nvar transports_namespaceObject = {};\n__webpack_require__.r(transports_namespaceObject);\n__webpack_require__.d(transports_namespaceObject, {\n \"BaseTransport\": function() { return BaseTransport; },\n \"FetchTransport\": function() { return FetchTransport; },\n \"XHRTransport\": function() { return XHRTransport; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/node_modules/tslib/tslib.es6.js\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\n\nfunction __rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction __param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction __createBinding(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}\nfunction __exportStar(m, exports) {\n for (var p in m) {\n if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\n }\n}\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\nfunction tslib_es6_spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n}\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n;\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n\n function verb(n) {\n if (g[n]) i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n }\n\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n\n function fulfill(value) {\n resume(\"next\", value);\n }\n\n function reject(value) {\n resume(\"throw\", value);\n }\n\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: __await(o[n](v)),\n done: n === \"return\"\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n\n return cooked;\n}\n;\nfunction __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n }\n result.default = mod;\n return result;\n}\nfunction __importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nfunction __classPrivateFieldGet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to get private field on non-instance\");\n }\n\n return privateMap.get(receiver);\n}\nfunction __classPrivateFieldSet(receiver, privateMap, value) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to set private field on non-instance\");\n }\n\n privateMap.set(receiver, value);\n return value;\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/types/esm/severity.js\n/** JSDoc */\n// eslint-disable-next-line import/export\nvar Severity;\n\n(function (Severity) {\n /** JSDoc */\n Severity[\"Fatal\"] = \"fatal\";\n /** JSDoc */\n\n Severity[\"Error\"] = \"error\";\n /** JSDoc */\n\n Severity[\"Warning\"] = \"warning\";\n /** JSDoc */\n\n Severity[\"Log\"] = \"log\";\n /** JSDoc */\n\n Severity[\"Info\"] = \"info\";\n /** JSDoc */\n\n Severity[\"Debug\"] = \"debug\";\n /** JSDoc */\n\n Severity[\"Critical\"] = \"critical\";\n})(Severity || (Severity = {})); // eslint-disable-next-line @typescript-eslint/no-namespace, import/export\n\n\n(function (Severity) {\n /**\n * Converts a string-based level into a {@link Severity}.\n *\n * @param level string representation of Severity\n * @returns Severity\n */\n function fromString(level) {\n switch (level) {\n case 'debug':\n return Severity.Debug;\n\n case 'info':\n return Severity.Info;\n\n case 'warn':\n case 'warning':\n return Severity.Warning;\n\n case 'error':\n return Severity.Error;\n\n case 'fatal':\n return Severity.Fatal;\n\n case 'critical':\n return Severity.Critical;\n\n case 'log':\n default:\n return Severity.Log;\n }\n }\n\n Severity.fromString = fromString;\n})(Severity || (Severity = {}));\n;// CONCATENATED MODULE: ./node_modules/@sentry/types/esm/status.js\n/** The status of an event. */\n// eslint-disable-next-line import/export\nvar Status;\n\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent to Sentry successfully. */\n\n Status[\"Success\"] = \"success\";\n /** The client is currently rate limited and will try again later. */\n\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The event could not be processed. */\n\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error occurred during submission. */\n\n Status[\"Failed\"] = \"failed\";\n})(Status || (Status = {})); // eslint-disable-next-line @typescript-eslint/no-namespace, import/export\n\n\n(function (Status) {\n /**\n * Converts a HTTP status code into a {@link Status}.\n *\n * @param code The HTTP response status code.\n * @returns The send status or {@link Status.Unknown}.\n */\n function fromHttpCode(code) {\n if (code >= 200 && code < 300) {\n return Status.Success;\n }\n\n if (code === 429) {\n return Status.RateLimit;\n }\n\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n\n if (code >= 500) {\n return Status.Failed;\n }\n\n return Status.Unknown;\n }\n\n Status.fromHttpCode = fromHttpCode;\n})(Status || (Status = {}));\n// EXTERNAL MODULE: ./node_modules/@sentry/hub/esm/scope.js\nvar esm_scope = __webpack_require__(7659);\n;// CONCATENATED MODULE: ./node_modules/@sentry/minimal/node_modules/tslib/tslib.es6.js\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar tslib_es6_extendStatics = function extendStatics(d, b) {\n tslib_es6_extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return tslib_es6_extendStatics(d, b);\n};\n\nfunction tslib_es6_extends(d, b) {\n tslib_es6_extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar tslib_es6_assign = function __assign() {\n tslib_es6_assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return tslib_es6_assign.apply(this, arguments);\n};\n\n\nfunction tslib_es6_rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction tslib_es6_decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction tslib_es6_param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction tslib_es6_metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction tslib_es6_awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction tslib_es6_generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction tslib_es6_createBinding(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}\nfunction tslib_es6_exportStar(m, exports) {\n for (var p in m) {\n if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\n }\n}\nfunction tslib_es6_values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction tslib_es6_read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\nfunction tslib_tslib_es6_spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(tslib_es6_read(arguments[i]));\n }\n\n return ar;\n}\nfunction tslib_es6_spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n;\nfunction tslib_es6_await(v) {\n return this instanceof tslib_es6_await ? (this.v = v, this) : new tslib_es6_await(v);\n}\nfunction tslib_es6_asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n\n function verb(n) {\n if (g[n]) i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n }\n\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n\n function step(r) {\n r.value instanceof tslib_es6_await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n\n function fulfill(value) {\n resume(\"next\", value);\n }\n\n function reject(value) {\n resume(\"throw\", value);\n }\n\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction tslib_es6_asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: tslib_es6_await(o[n](v)),\n done: n === \"return\"\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction tslib_es6_asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof tslib_es6_values === \"function\" ? tslib_es6_values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction tslib_es6_makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n\n return cooked;\n}\n;\nfunction tslib_es6_importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n }\n result.default = mod;\n return result;\n}\nfunction tslib_es6_importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nfunction tslib_es6_classPrivateFieldGet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to get private field on non-instance\");\n }\n\n return privateMap.get(receiver);\n}\nfunction tslib_es6_classPrivateFieldSet(receiver, privateMap, value) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to set private field on non-instance\");\n }\n\n privateMap.set(receiver, value);\n return value;\n}\n// EXTERNAL MODULE: ./node_modules/@sentry/hub/esm/hub.js + 1 modules\nvar esm_hub = __webpack_require__(3210);\n;// CONCATENATED MODULE: ./node_modules/@sentry/minimal/esm/index.js\n\n\n/**\n * This calls a function on the current hub.\n * @param method function to call on hub.\n * @param args to pass to function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\nfunction callOnHub(method) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n var hub = (0,esm_hub/* getCurrentHub */.Gd)();\n\n if (hub && hub[method]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return hub[method].apply(hub, tslib_tslib_es6_spread(args));\n }\n\n throw new Error(\"No hub defined or \" + method + \" was not found on the hub, please open a bug report.\");\n}\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @returns The generated eventId.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n\n\nfunction captureException(exception, captureContext) {\n var syntheticException;\n\n try {\n throw new Error('Sentry syntheticException');\n } catch (exception) {\n syntheticException = exception;\n }\n\n return callOnHub('captureException', exception, {\n captureContext: captureContext,\n originalException: exception,\n syntheticException: syntheticException\n });\n}\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param level Define the level of the message.\n * @returns The generated eventId.\n */\n\nfunction captureMessage(message, captureContext) {\n var syntheticException;\n\n try {\n throw new Error(message);\n } catch (exception) {\n syntheticException = exception;\n } // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n\n\n var level = typeof captureContext === 'string' ? captureContext : undefined;\n var context = typeof captureContext !== 'string' ? {\n captureContext: captureContext\n } : undefined;\n return callOnHub('captureMessage', message, level, tslib_es6_assign({\n originalException: message,\n syntheticException: syntheticException\n }, context));\n}\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @returns The generated eventId.\n */\n\nfunction captureEvent(event) {\n return callOnHub('captureEvent', event);\n}\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\n\nfunction configureScope(callback) {\n callOnHub('configureScope', callback);\n}\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\n\nfunction addBreadcrumb(breadcrumb) {\n callOnHub('addBreadcrumb', breadcrumb);\n}\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\nfunction setContext(name, context) {\n callOnHub('setContext', name, context);\n}\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\n\nfunction setExtras(extras) {\n callOnHub('setExtras', extras);\n}\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\n\nfunction setTags(tags) {\n callOnHub('setTags', tags);\n}\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\n\nfunction setExtra(key, extra) {\n callOnHub('setExtra', key, extra);\n}\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\n\nfunction setTag(key, value) {\n callOnHub('setTag', key, value);\n}\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\n\nfunction setUser(user) {\n callOnHub('setUser', user);\n}\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\n\nfunction withScope(callback) {\n callOnHub('withScope', callback);\n}\n/**\n * Calls a function on the latest client. Use this with caution, it's meant as\n * in \"internal\" helper so we don't need to expose every possible function in\n * the shim. It is not guaranteed that the client actually implements the\n * function.\n *\n * @param method The method to call on the client/client.\n * @param args Arguments to pass to the client/fontend.\n * @hidden\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\nfunction _callOnClient(method) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n callOnHub.apply(void 0, __spread(['_invokeClient', method], args));\n}\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.finish()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n */\n\nfunction startTransaction(context, customSamplingContext) {\n return callOnHub('startTransaction', tslib_es6_assign({}, context), customSamplingContext);\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/version.js\nvar SDK_VERSION = '6.13.2';\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/node_modules/tslib/tslib.es6.js\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar tslib_tslib_es6_extendStatics = function extendStatics(d, b) {\n tslib_tslib_es6_extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return tslib_tslib_es6_extendStatics(d, b);\n};\n\nfunction tslib_tslib_es6_extends(d, b) {\n tslib_tslib_es6_extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar tslib_tslib_es6_assign = function __assign() {\n tslib_tslib_es6_assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return tslib_tslib_es6_assign.apply(this, arguments);\n};\n\n\nfunction tslib_tslib_es6_rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction tslib_tslib_es6_decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction tslib_tslib_es6_param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction tslib_tslib_es6_metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction tslib_tslib_es6_awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction tslib_tslib_es6_generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction tslib_tslib_es6_createBinding(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}\nfunction tslib_tslib_es6_exportStar(m, exports) {\n for (var p in m) {\n if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\n }\n}\nfunction tslib_tslib_es6_values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction tslib_tslib_es6_read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\nfunction node_modules_tslib_tslib_es6_spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(tslib_tslib_es6_read(arguments[i]));\n }\n\n return ar;\n}\nfunction tslib_tslib_es6_spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n;\nfunction tslib_tslib_es6_await(v) {\n return this instanceof tslib_tslib_es6_await ? (this.v = v, this) : new tslib_tslib_es6_await(v);\n}\nfunction tslib_tslib_es6_asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n\n function verb(n) {\n if (g[n]) i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n }\n\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n\n function step(r) {\n r.value instanceof tslib_tslib_es6_await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n\n function fulfill(value) {\n resume(\"next\", value);\n }\n\n function reject(value) {\n resume(\"throw\", value);\n }\n\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction tslib_tslib_es6_asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: tslib_tslib_es6_await(o[n](v)),\n done: n === \"return\"\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction tslib_tslib_es6_asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof tslib_tslib_es6_values === \"function\" ? tslib_tslib_es6_values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction tslib_tslib_es6_makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n\n return cooked;\n}\n;\nfunction tslib_tslib_es6_importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n }\n result.default = mod;\n return result;\n}\nfunction tslib_tslib_es6_importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nfunction tslib_tslib_es6_classPrivateFieldGet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to get private field on non-instance\");\n }\n\n return privateMap.get(receiver);\n}\nfunction tslib_tslib_es6_classPrivateFieldSet(receiver, privateMap, value) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to set private field on non-instance\");\n }\n\n privateMap.set(receiver, value);\n return value;\n}\n// EXTERNAL MODULE: ./node_modules/@sentry/types/esm/session.js\nvar esm_session = __webpack_require__(2355);\n// EXTERNAL MODULE: ./node_modules/@sentry/types/esm/transport.js\nvar esm_transport = __webpack_require__(2649);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/node_modules/tslib/tslib.es6.js\nvar tslib_es6 = __webpack_require__(4850);\n;// CONCATENATED MODULE: ./node_modules/@sentry/utils/esm/polyfill.js\nvar setPrototypeOf = Object.setPrototypeOf || ({\n __proto__: []\n} instanceof Array ? setProtoOf : mixinProperties);\n/**\n * setPrototypeOf polyfill using __proto__\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\n\nfunction setProtoOf(obj, proto) {\n // @ts-ignore __proto__ does not exist on obj\n obj.__proto__ = proto;\n return obj;\n}\n/**\n * setPrototypeOf polyfill using mixin\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\n\n\nfunction mixinProperties(obj, proto) {\n for (var prop in proto) {\n // eslint-disable-next-line no-prototype-builtins\n if (!obj.hasOwnProperty(prop)) {\n // @ts-ignore typescript complains about indexing so we remove\n obj[prop] = proto[prop];\n }\n }\n\n return obj;\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/utils/esm/error.js\n\n\n/** An error emitted by Sentry SDKs and related utilities. */\n\nvar SentryError =\n/** @class */\nfunction (_super) {\n (0,tslib_es6/* __extends */.ZT)(SentryError, _super);\n\n function SentryError(message) {\n var _newTarget = this.constructor;\n\n var _this = _super.call(this, message) || this;\n\n _this.message = message;\n _this.name = _newTarget.prototype.constructor.name;\n setPrototypeOf(_this, _newTarget.prototype);\n return _this;\n }\n\n return SentryError;\n}(Error);\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/utils/esm/dsn.js\n\n\n/** Regular expression used to parse a Dsn. */\n\nvar DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+))?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n/** Error message */\n\nvar ERROR_MESSAGE = 'Invalid Dsn';\n/** The Sentry Dsn, identifying a Sentry instance and project. */\n\nvar Dsn =\n/** @class */\nfunction () {\n /** Creates a new Dsn component */\n function Dsn(from) {\n if (typeof from === 'string') {\n this._fromString(from);\n } else {\n this._fromComponents(from);\n }\n\n this._validate();\n }\n /**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\n\n\n Dsn.prototype.toString = function (withPassword) {\n if (withPassword === void 0) {\n withPassword = false;\n }\n\n var _a = this,\n host = _a.host,\n path = _a.path,\n pass = _a.pass,\n port = _a.port,\n projectId = _a.projectId,\n protocol = _a.protocol,\n publicKey = _a.publicKey;\n\n return protocol + \"://\" + publicKey + (withPassword && pass ? \":\" + pass : '') + (\"@\" + host + (port ? \":\" + port : '') + \"/\" + (path ? path + \"/\" : path) + projectId);\n };\n /** Parses a string into this Dsn. */\n\n\n Dsn.prototype._fromString = function (str) {\n var match = DSN_REGEX.exec(str);\n\n if (!match) {\n throw new SentryError(ERROR_MESSAGE);\n }\n\n var _a = (0,tslib_es6/* __read */.CR)(match.slice(1), 6),\n protocol = _a[0],\n publicKey = _a[1],\n _b = _a[2],\n pass = _b === void 0 ? '' : _b,\n host = _a[3],\n _c = _a[4],\n port = _c === void 0 ? '' : _c,\n lastPath = _a[5];\n\n var path = '';\n var projectId = lastPath;\n var split = projectId.split('/');\n\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop();\n }\n\n if (projectId) {\n var projectMatch = projectId.match(/^\\d+/);\n\n if (projectMatch) {\n projectId = projectMatch[0];\n }\n }\n\n this._fromComponents({\n host: host,\n pass: pass,\n path: path,\n projectId: projectId,\n port: port,\n protocol: protocol,\n publicKey: publicKey\n });\n };\n /** Maps Dsn components into this instance. */\n\n\n Dsn.prototype._fromComponents = function (components) {\n // TODO this is for backwards compatibility, and can be removed in a future version\n if ('user' in components && !('publicKey' in components)) {\n components.publicKey = components.user;\n }\n\n this.user = components.publicKey || '';\n this.protocol = components.protocol;\n this.publicKey = components.publicKey || '';\n this.pass = components.pass || '';\n this.host = components.host;\n this.port = components.port || '';\n this.path = components.path || '';\n this.projectId = components.projectId;\n };\n /** Validates this Dsn and throws on error. */\n\n\n Dsn.prototype._validate = function () {\n var _this = this;\n\n ['protocol', 'publicKey', 'host', 'projectId'].forEach(function (component) {\n if (!_this[component]) {\n throw new SentryError(ERROR_MESSAGE + \": \" + component + \" missing\");\n }\n });\n\n if (!this.projectId.match(/^\\d+$/)) {\n throw new SentryError(ERROR_MESSAGE + \": Invalid projectId \" + this.projectId);\n }\n\n if (this.protocol !== 'http' && this.protocol !== 'https') {\n throw new SentryError(ERROR_MESSAGE + \": Invalid protocol \" + this.protocol);\n }\n\n if (this.port && isNaN(parseInt(this.port, 10))) {\n throw new SentryError(ERROR_MESSAGE + \": Invalid port \" + this.port);\n }\n };\n\n return Dsn;\n}();\n\n\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/is.js\nvar is = __webpack_require__(2684);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/logger.js\nvar logger = __webpack_require__(245);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/syncpromise.js\nvar syncpromise = __webpack_require__(5370);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/misc.js\nvar misc = __webpack_require__(2861);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/time.js\nvar time = __webpack_require__(5153);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/object.js + 1 modules\nvar object = __webpack_require__(150);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/string.js\nvar string = __webpack_require__(7940);\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/integration.js\n\n\n\nvar installedIntegrations = [];\n/**\n * @private\n */\n\nfunction filterDuplicates(integrations) {\n return integrations.reduce(function (acc, integrations) {\n if (acc.every(function (accIntegration) {\n return integrations.name !== accIntegration.name;\n })) {\n acc.push(integrations);\n }\n\n return acc;\n }, []);\n}\n/** Gets integration to install */\n\n\nfunction getIntegrationsToSetup(options) {\n var defaultIntegrations = options.defaultIntegrations && node_modules_tslib_tslib_es6_spread(options.defaultIntegrations) || [];\n var userIntegrations = options.integrations;\n\n var integrations = node_modules_tslib_tslib_es6_spread(filterDuplicates(defaultIntegrations));\n\n if (Array.isArray(userIntegrations)) {\n // Filter out integrations that are also included in user options\n integrations = node_modules_tslib_tslib_es6_spread(integrations.filter(function (integrations) {\n return userIntegrations.every(function (userIntegration) {\n return userIntegration.name !== integrations.name;\n });\n }), filterDuplicates(userIntegrations));\n } else if (typeof userIntegrations === 'function') {\n integrations = userIntegrations(integrations);\n integrations = Array.isArray(integrations) ? integrations : [integrations];\n } // Make sure that if present, `Debug` integration will always run last\n\n\n var integrationsNames = integrations.map(function (i) {\n return i.name;\n });\n var alwaysLastToRun = 'Debug';\n\n if (integrationsNames.indexOf(alwaysLastToRun) !== -1) {\n integrations.push.apply(integrations, node_modules_tslib_tslib_es6_spread(integrations.splice(integrationsNames.indexOf(alwaysLastToRun), 1)));\n }\n\n return integrations;\n}\n/** Setup given integration */\n\nfunction setupIntegration(integration) {\n if (installedIntegrations.indexOf(integration.name) !== -1) {\n return;\n }\n\n integration.setupOnce(esm_scope/* addGlobalEventProcessor */.c, esm_hub/* getCurrentHub */.Gd);\n installedIntegrations.push(integration.name);\n logger/* logger.log */.k.log(\"Integration installed: \" + integration.name);\n}\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\n\nfunction setupIntegrations(options) {\n var integrations = {};\n getIntegrationsToSetup(options).forEach(function (integration) {\n integrations[integration.name] = integration;\n setupIntegration(integration);\n }); // set the `initialized` flag so we don't run through the process again unecessarily; use `Object.defineProperty`\n // because by default it creates a property which is nonenumerable, which we want since `initialized` shouldn't be\n // considered a member of the index the way the actual integrations are\n\n Object.defineProperty(integrations, 'initialized', {\n value: true\n });\n return integrations;\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/baseclient.js\n\n/* eslint-disable max-lines */\n\n\n\n\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding backend constructor and options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}. Also, the Backend instance is available via\n * {@link Client.getBackend}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event via the backend, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeBackend, NodeOptions> {\n * public constructor(options: NodeOptions) {\n * super(NodeBackend, options);\n * }\n *\n * // ...\n * }\n */\n\nvar BaseClient =\n/** @class */\nfunction () {\n /**\n * Initializes this client instance.\n *\n * @param backendClass A constructor function to create the backend.\n * @param options Options for the client.\n */\n function BaseClient(backendClass, options) {\n /** Array of used integrations. */\n this._integrations = {};\n /** Number of calls being processed */\n\n this._numProcessing = 0;\n this._backend = new backendClass(options);\n this._options = options;\n\n if (options.dsn) {\n this._dsn = new Dsn(options.dsn);\n }\n }\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n\n\n BaseClient.prototype.captureException = function (exception, hint, scope) {\n var _this = this;\n\n var eventId = hint && hint.event_id;\n\n this._process(this._getBackend().eventFromException(exception, hint).then(function (event) {\n return _this._captureEvent(event, hint, scope);\n }).then(function (result) {\n eventId = result;\n }));\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.captureMessage = function (message, level, hint, scope) {\n var _this = this;\n\n var eventId = hint && hint.event_id;\n var promisedEvent = (0,is/* isPrimitive */.pt)(message) ? this._getBackend().eventFromMessage(String(message), level, hint) : this._getBackend().eventFromException(message, hint);\n\n this._process(promisedEvent.then(function (event) {\n return _this._captureEvent(event, hint, scope);\n }).then(function (result) {\n eventId = result;\n }));\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.captureEvent = function (event, hint, scope) {\n var eventId = hint && hint.event_id;\n\n this._process(this._captureEvent(event, hint, scope).then(function (result) {\n eventId = result;\n }));\n\n return eventId;\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.captureSession = function (session) {\n if (!this._isEnabled()) {\n logger/* logger.warn */.k.warn('SDK not enabled, will not capture session.');\n return;\n }\n\n if (!(typeof session.release === 'string')) {\n logger/* logger.warn */.k.warn('Discarded session because of missing or non-string release');\n } else {\n this._sendSession(session); // After sending, we set init false to indicate it's not the first occurrence\n\n\n session.update({\n init: false\n });\n }\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.getDsn = function () {\n return this._dsn;\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.getOptions = function () {\n return this._options;\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.getTransport = function () {\n return this._getBackend().getTransport();\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.flush = function (timeout) {\n var _this = this;\n\n return this._isClientDoneProcessing(timeout).then(function (clientFinished) {\n return _this.getTransport().close(timeout).then(function (transportFlushed) {\n return clientFinished && transportFlushed;\n });\n });\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.close = function (timeout) {\n var _this = this;\n\n return this.flush(timeout).then(function (result) {\n _this.getOptions().enabled = false;\n return result;\n });\n };\n /**\n * Sets up the integrations\n */\n\n\n BaseClient.prototype.setupIntegrations = function () {\n if (this._isEnabled() && !this._integrations.initialized) {\n this._integrations = setupIntegrations(this._options);\n }\n };\n /**\n * @inheritDoc\n */\n\n\n BaseClient.prototype.getIntegration = function (integration) {\n try {\n return this._integrations[integration.id] || null;\n } catch (_oO) {\n logger/* logger.warn */.k.warn(\"Cannot retrieve integration \" + integration.id + \" from the current Client\");\n return null;\n }\n };\n /** Updates existing session based on the provided event */\n\n\n BaseClient.prototype._updateSessionFromEvent = function (session, event) {\n var e_1, _a;\n\n var crashed = false;\n var errored = false;\n var exceptions = event.exception && event.exception.values;\n\n if (exceptions) {\n errored = true;\n\n try {\n for (var exceptions_1 = tslib_tslib_es6_values(exceptions), exceptions_1_1 = exceptions_1.next(); !exceptions_1_1.done; exceptions_1_1 = exceptions_1.next()) {\n var ex = exceptions_1_1.value;\n var mechanism = ex.mechanism;\n\n if (mechanism && mechanism.handled === false) {\n crashed = true;\n break;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (exceptions_1_1 && !exceptions_1_1.done && (_a = exceptions_1.return)) _a.call(exceptions_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n } // A session is updated and that session update is sent in only one of the two following scenarios:\n // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n\n\n var sessionNonTerminal = session.status === esm_session/* SessionStatus.Ok */.$.Ok;\n var shouldUpdateAndSend = sessionNonTerminal && session.errors === 0 || sessionNonTerminal && crashed;\n\n if (shouldUpdateAndSend) {\n session.update(tslib_tslib_es6_assign(tslib_tslib_es6_assign({}, crashed && {\n status: esm_session/* SessionStatus.Crashed */.$.Crashed\n }), {\n errors: session.errors || Number(errored || crashed)\n }));\n this.captureSession(session);\n }\n };\n /** Deliver captured session to Sentry */\n\n\n BaseClient.prototype._sendSession = function (session) {\n this._getBackend().sendSession(session);\n };\n /**\n * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n * `false` otherwise\n */\n\n\n BaseClient.prototype._isClientDoneProcessing = function (timeout) {\n var _this = this;\n\n return new syncpromise/* SyncPromise */.c(function (resolve) {\n var ticked = 0;\n var tick = 1;\n var interval = setInterval(function () {\n if (_this._numProcessing == 0) {\n clearInterval(interval);\n resolve(true);\n } else {\n ticked += tick;\n\n if (timeout && ticked >= timeout) {\n clearInterval(interval);\n resolve(false);\n }\n }\n }, tick);\n });\n };\n /** Returns the current backend. */\n\n\n BaseClient.prototype._getBackend = function () {\n return this._backend;\n };\n /** Determines whether this SDK is enabled and a valid Dsn is present. */\n\n\n BaseClient.prototype._isEnabled = function () {\n return this.getOptions().enabled !== false && this._dsn !== undefined;\n };\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n */\n\n\n BaseClient.prototype._prepareEvent = function (event, scope, hint) {\n var _this = this;\n\n var _a = this.getOptions().normalizeDepth,\n normalizeDepth = _a === void 0 ? 3 : _a;\n\n var prepared = tslib_tslib_es6_assign(tslib_tslib_es6_assign({}, event), {\n event_id: event.event_id || (hint && hint.event_id ? hint.event_id : (0,misc/* uuid4 */.DM)()),\n timestamp: event.timestamp || (0,time/* dateTimestampInSeconds */.yW)()\n });\n\n this._applyClientOptions(prepared);\n\n this._applyIntegrationsMetadata(prepared); // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n\n\n var finalScope = scope;\n\n if (hint && hint.captureContext) {\n finalScope = esm_scope/* Scope.clone */.s.clone(finalScope).update(hint.captureContext);\n } // We prepare the result here with a resolved Event.\n\n\n var result = syncpromise/* SyncPromise.resolve */.c.resolve(prepared); // This should be the last thing called, since we want that\n // {@link Hub.addEventProcessor} gets the finished prepared event.\n\n if (finalScope) {\n // In case we have a hub we reassign it.\n result = finalScope.applyToEvent(prepared, hint);\n }\n\n return result.then(function (evt) {\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return _this._normalizeEvent(evt, normalizeDepth);\n }\n\n return evt;\n });\n };\n /**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\n\n\n BaseClient.prototype._normalizeEvent = function (event, depth) {\n if (!event) {\n return null;\n }\n\n var normalized = tslib_tslib_es6_assign(tslib_tslib_es6_assign(tslib_tslib_es6_assign(tslib_tslib_es6_assign(tslib_tslib_es6_assign({}, event), event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(function (b) {\n return tslib_tslib_es6_assign(tslib_tslib_es6_assign({}, b), b.data && {\n data: (0,object/* normalize */.Fv)(b.data, depth)\n });\n })\n }), event.user && {\n user: (0,object/* normalize */.Fv)(event.user, depth)\n }), event.contexts && {\n contexts: (0,object/* normalize */.Fv)(event.contexts, depth)\n }), event.extra && {\n extra: (0,object/* normalize */.Fv)(event.extra, depth)\n }); // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n\n\n if (event.contexts && event.contexts.trace) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n normalized.contexts.trace = event.contexts.trace;\n }\n\n var _a = this.getOptions()._experiments,\n _experiments = _a === void 0 ? {} : _a;\n\n if (_experiments.ensureNoCircularStructures) {\n return (0,object/* normalize */.Fv)(normalized);\n }\n\n return normalized;\n };\n /**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\n\n\n BaseClient.prototype._applyClientOptions = function (event) {\n var options = this.getOptions();\n var environment = options.environment,\n release = options.release,\n dist = options.dist,\n _a = options.maxValueLength,\n maxValueLength = _a === void 0 ? 250 : _a;\n\n if (!('environment' in event)) {\n event.environment = 'environment' in options ? environment : 'production';\n }\n\n if (event.release === undefined && release !== undefined) {\n event.release = release;\n }\n\n if (event.dist === undefined && dist !== undefined) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = (0,string/* truncate */.$G)(event.message, maxValueLength);\n }\n\n var exception = event.exception && event.exception.values && event.exception.values[0];\n\n if (exception && exception.value) {\n exception.value = (0,string/* truncate */.$G)(exception.value, maxValueLength);\n }\n\n var request = event.request;\n\n if (request && request.url) {\n request.url = (0,string/* truncate */.$G)(request.url, maxValueLength);\n }\n };\n /**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\n\n\n BaseClient.prototype._applyIntegrationsMetadata = function (event) {\n var integrationsArray = Object.keys(this._integrations);\n\n if (integrationsArray.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = node_modules_tslib_tslib_es6_spread(event.sdk.integrations || [], integrationsArray);\n }\n };\n /**\n * Tells the backend to send this event\n * @param event The Sentry event to send\n */\n\n\n BaseClient.prototype._sendEvent = function (event) {\n this._getBackend().sendEvent(event);\n };\n /**\n * Processes the event and logs an error in case of rejection\n * @param event\n * @param hint\n * @param scope\n */\n\n\n BaseClient.prototype._captureEvent = function (event, hint, scope) {\n return this._processEvent(event, hint, scope).then(function (finalEvent) {\n return finalEvent.event_id;\n }, function (reason) {\n logger/* logger.error */.k.error(reason);\n return undefined;\n });\n };\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n\n\n BaseClient.prototype._processEvent = function (event, hint, scope) {\n var _this = this;\n\n var _a, _b; // eslint-disable-next-line @typescript-eslint/unbound-method\n\n\n var _c = this.getOptions(),\n beforeSend = _c.beforeSend,\n sampleRate = _c.sampleRate;\n\n var transport = this.getTransport();\n\n if (!this._isEnabled()) {\n return syncpromise/* SyncPromise.reject */.c.reject(new SentryError('SDK not enabled, will not capture event.'));\n }\n\n var isTransaction = event.type === 'transaction'; // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n // Sampling for transaction happens somewhere else\n\n if (!isTransaction && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n (_b = (_a = transport).recordLostEvent) === null || _b === void 0 ? void 0 : _b.call(_a, esm_transport/* Outcome.SampleRate */.k.SampleRate, 'event');\n return syncpromise/* SyncPromise.reject */.c.reject(new SentryError(\"Discarding event because it's not included in the random sample (sampling rate = \" + sampleRate + \")\"));\n }\n\n return this._prepareEvent(event, scope, hint).then(function (prepared) {\n var _a, _b;\n\n if (prepared === null) {\n (_b = (_a = transport).recordLostEvent) === null || _b === void 0 ? void 0 : _b.call(_a, esm_transport/* Outcome.EventProcessor */.k.EventProcessor, event.type || 'event');\n throw new SentryError('An event processor returned null, will not send event.');\n }\n\n var isInternalException = hint && hint.data && hint.data.__sentry__ === true;\n\n if (isInternalException || isTransaction || !beforeSend) {\n return prepared;\n }\n\n var beforeSendResult = beforeSend(prepared, hint);\n return _this._ensureBeforeSendRv(beforeSendResult);\n }).then(function (processedEvent) {\n var _a, _b;\n\n if (processedEvent === null) {\n (_b = (_a = transport).recordLostEvent) === null || _b === void 0 ? void 0 : _b.call(_a, esm_transport/* Outcome.BeforeSend */.k.BeforeSend, event.type || 'event');\n throw new SentryError('`beforeSend` returned `null`, will not send event.');\n }\n\n var session = scope && scope.getSession && scope.getSession();\n\n if (!isTransaction && session) {\n _this._updateSessionFromEvent(session, processedEvent);\n }\n\n _this._sendEvent(processedEvent);\n\n return processedEvent;\n }).then(null, function (reason) {\n if (reason instanceof SentryError) {\n throw reason;\n }\n\n _this.captureException(reason, {\n data: {\n __sentry__: true\n },\n originalException: reason\n });\n\n throw new SentryError(\"Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: \" + reason);\n });\n };\n /**\n * Occupies the client with processing and event\n */\n\n\n BaseClient.prototype._process = function (promise) {\n var _this = this;\n\n this._numProcessing += 1;\n void promise.then(function (value) {\n _this._numProcessing -= 1;\n return value;\n }, function (reason) {\n _this._numProcessing -= 1;\n return reason;\n });\n };\n /**\n * Verifies that return value of configured `beforeSend` is of expected type.\n */\n\n\n BaseClient.prototype._ensureBeforeSendRv = function (rv) {\n var nullErr = '`beforeSend` method has to return `null` or a valid event.';\n\n if ((0,is/* isThenable */.J8)(rv)) {\n return rv.then(function (event) {\n if (!((0,is/* isPlainObject */.PO)(event) || event === null)) {\n throw new SentryError(nullErr);\n }\n\n return event;\n }, function (e) {\n throw new SentryError(\"beforeSend rejected with \" + e);\n });\n } else if (!((0,is/* isPlainObject */.PO)(rv) || rv === null)) {\n throw new SentryError(nullErr);\n }\n\n return rv;\n };\n\n return BaseClient;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/transports/noop.js\n\n\n/** Noop transport */\n\nvar NoopTransport =\n/** @class */\nfunction () {\n function NoopTransport() {}\n /**\n * @inheritDoc\n */\n\n\n NoopTransport.prototype.sendEvent = function (_) {\n return syncpromise/* SyncPromise.resolve */.c.resolve({\n reason: \"NoopTransport: Event has been skipped because no Dsn is configured.\",\n status: Status.Skipped\n });\n };\n /**\n * @inheritDoc\n */\n\n\n NoopTransport.prototype.close = function (_) {\n return syncpromise/* SyncPromise.resolve */.c.resolve(true);\n };\n\n return NoopTransport;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/basebackend.js\n\n\n/**\n * This is the base implemention of a Backend.\n * @hidden\n */\n\nvar BaseBackend =\n/** @class */\nfunction () {\n /** Creates a new backend instance. */\n function BaseBackend(options) {\n this._options = options;\n\n if (!this._options.dsn) {\n logger/* logger.warn */.k.warn('No DSN provided, backend will not do anything.');\n }\n\n this._transport = this._setupTransport();\n }\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n\n\n BaseBackend.prototype.eventFromException = function (_exception, _hint) {\n throw new SentryError('Backend has to implement `eventFromException` method');\n };\n /**\n * @inheritDoc\n */\n\n\n BaseBackend.prototype.eventFromMessage = function (_message, _level, _hint) {\n throw new SentryError('Backend has to implement `eventFromMessage` method');\n };\n /**\n * @inheritDoc\n */\n\n\n BaseBackend.prototype.sendEvent = function (event) {\n void this._transport.sendEvent(event).then(null, function (reason) {\n logger/* logger.error */.k.error(\"Error while sending event: \" + reason);\n });\n };\n /**\n * @inheritDoc\n */\n\n\n BaseBackend.prototype.sendSession = function (session) {\n if (!this._transport.sendSession) {\n logger/* logger.warn */.k.warn(\"Dropping session because custom transport doesn't implement sendSession\");\n return;\n }\n\n void this._transport.sendSession(session).then(null, function (reason) {\n logger/* logger.error */.k.error(\"Error while sending session: \" + reason);\n });\n };\n /**\n * @inheritDoc\n */\n\n\n BaseBackend.prototype.getTransport = function () {\n return this._transport;\n };\n /**\n * Sets up the transport so it can be used later to send requests.\n */\n\n\n BaseBackend.prototype._setupTransport = function () {\n return new NoopTransport();\n };\n\n return BaseBackend;\n}();\n\n\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/supports.js\nvar supports = __webpack_require__(4712);\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/tracekit.js\n/**\n * This was originally forked from https://github.com/occ/TraceKit, but has since been\n * largely modified and is now maintained as part of Sentry JS SDK.\n */\n // global reference to slice\n\nvar UNKNOWN_FUNCTION = '?'; // Chromium based browsers: Chrome, Brave, new Opera, new Edge\n\nvar chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i; // gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\n\nvar gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\nvar geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nvar chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/; // Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\n\nvar reactMinifiedRegexp = /Minified React error #\\d+;/i;\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n\nfunction computeStackTrace(ex) {\n var stack = null;\n var popSize = 0;\n\n if (ex) {\n if (typeof ex.framesToPop === 'number') {\n popSize = ex.framesToPop;\n } else if (reactMinifiedRegexp.test(ex.message)) {\n popSize = 1;\n }\n }\n\n try {\n // This must be tried first because Opera 10 *destroys*\n // its stacktrace property if you try to access the stack\n // property first!!\n stack = computeStackTraceFromStacktraceProp(ex);\n\n if (stack) {\n return popFrames(stack, popSize);\n }\n } catch (e) {// no-empty\n }\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n\n if (stack) {\n return popFrames(stack, popSize);\n }\n } catch (e) {// no-empty\n }\n\n return {\n message: extractMessage(ex),\n name: ex && ex.name,\n stack: [],\n failed: true\n };\n}\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, complexity\n\nfunction computeStackTraceFromStackProp(ex) {\n var _a, _b;\n\n if (!ex || !ex.stack) {\n return null;\n }\n\n var stack = [];\n var lines = ex.stack.split('\\n');\n var isEval;\n var submatch;\n var parts;\n var element;\n\n for (var i = 0; i < lines.length; ++i) {\n if (parts = chrome.exec(lines[i])) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n\n parts[3] = submatch[2]; // line\n\n parts[4] = submatch[3]; // column\n } // Arpad: Working with the regexp above is super painful. it is quite a hack, but just stripping the `address at `\n // prefix here seems like the quickest solution for now.\n\n\n var url = parts[2] && parts[2].indexOf('address at ') === 0 ? parts[2].substr('address at '.length) : parts[2]; // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n\n var func = parts[1] || UNKNOWN_FUNCTION;\n _a = __read(extractSafariExtensionDetails(func, url), 2), func = _a[0], url = _a[1];\n element = {\n url: url,\n func: func,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if (parts = winjs.exec(lines[i])) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if (parts = gecko.exec(lines[i])) {\n isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || \"eval\";\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = ''; // no column when eval\n } else if (i === 0 && !parts[5] && ex.columnNumber !== void 0) {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n\n var url = parts[3];\n var func = parts[1] || UNKNOWN_FUNCTION;\n _b = __read(extractSafariExtensionDetails(func, url), 2), func = _b[0], url = _b[1];\n element = {\n url: url,\n func: func,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n message: extractMessage(ex),\n name: ex.name,\n stack: stack\n };\n}\n/** JSDoc */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\nfunction computeStackTraceFromStacktraceProp(ex) {\n if (!ex || !ex.stacktrace) {\n return null;\n } // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n\n\n var stacktrace = ex.stacktrace;\n var opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n var opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\((.*)\\))? in (.*):\\s*$/i;\n var lines = stacktrace.split('\\n');\n var stack = [];\n var parts;\n\n for (var line = 0; line < lines.length; line += 2) {\n var element = null;\n\n if (parts = opera10Regex.exec(lines[line])) {\n element = {\n url: parts[2],\n func: parts[3],\n args: [],\n line: +parts[1],\n column: null\n };\n } else if (parts = opera11Regex.exec(lines[line])) {\n element = {\n url: parts[6],\n func: parts[3] || parts[4],\n args: parts[5] ? parts[5].split(',') : [],\n line: +parts[1],\n column: +parts[2]\n };\n }\n\n if (element) {\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n stack.push(element);\n }\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n message: extractMessage(ex),\n name: ex.name,\n stack: stack\n };\n}\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunatelly \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\n\n\nvar extractSafariExtensionDetails = function extractSafariExtensionDetails(func, url) {\n var isSafariExtension = func.indexOf('safari-extension') !== -1;\n var isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n return isSafariExtension || isSafariWebExtension ? [func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION, isSafariExtension ? \"safari-extension:\" + url : \"safari-web-extension:\" + url] : [func, url];\n};\n/** Remove N number of frames from the stack */\n\n\nfunction popFrames(stacktrace, popSize) {\n try {\n return _assign(_assign({}, stacktrace), {\n stack: stacktrace.stack.slice(popSize)\n });\n } catch (e) {\n return stacktrace;\n }\n}\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\nfunction extractMessage(ex) {\n var message = ex && ex.message;\n\n if (!message) {\n return 'No error message';\n }\n\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n\n return message;\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/parsers.js\n\n\nvar STACKTRACE_LIMIT = 50;\n/**\n * This function creates an exception from an TraceKitStackTrace\n * @param stacktrace TraceKitStackTrace that will be converted to an exception\n * @hidden\n */\n\nfunction exceptionFromStacktrace(stacktrace) {\n var frames = prepareFramesForEvent(stacktrace.stack);\n var exception = {\n type: stacktrace.name,\n value: stacktrace.message\n };\n\n if (frames && frames.length) {\n exception.stacktrace = {\n frames: frames\n };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n/**\n * @hidden\n */\n\nfunction eventFromPlainObject(exception, syntheticException, rejection) {\n var event = {\n exception: {\n values: [{\n type: (0,is/* isEvent */.cO)(exception) ? exception.constructor.name : rejection ? 'UnhandledRejection' : 'Error',\n value: \"Non-Error \" + (rejection ? 'promise rejection' : 'exception') + \" captured with keys: \" + (0,object/* extractExceptionKeysForMessage */.zf)(exception)\n }]\n },\n extra: {\n __serialized__: (0,object/* normalizeToSize */.Qy)(exception)\n }\n };\n\n if (syntheticException) {\n var stacktrace = computeStackTrace(syntheticException);\n var frames_1 = prepareFramesForEvent(stacktrace.stack);\n event.stacktrace = {\n frames: frames_1\n };\n }\n\n return event;\n}\n/**\n * @hidden\n */\n\nfunction eventFromStacktrace(stacktrace) {\n var exception = exceptionFromStacktrace(stacktrace);\n return {\n exception: {\n values: [exception]\n }\n };\n}\n/**\n * @hidden\n */\n\nfunction prepareFramesForEvent(stack) {\n if (!stack || !stack.length) {\n return [];\n }\n\n var localStack = stack;\n var firstFrameFunction = localStack[0].func || '';\n var lastFrameFunction = localStack[localStack.length - 1].func || ''; // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n\n if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n localStack = localStack.slice(1);\n } // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n\n\n if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n localStack = localStack.slice(0, -1);\n } // The frame where the crash happened, should be the last entry in the array\n\n\n return localStack.slice(0, STACKTRACE_LIMIT).map(function (frame) {\n return {\n colno: frame.column === null ? undefined : frame.column,\n filename: frame.url || localStack[0].url,\n function: frame.func || '?',\n in_app: true,\n lineno: frame.line === null ? undefined : frame.line\n };\n }).reverse();\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/eventbuilder.js\n\n\n\n\n\n/**\n * Builds and Event from a Exception\n * @hidden\n */\n\nfunction eventFromException(options, exception, hint) {\n var syntheticException = hint && hint.syntheticException || undefined;\n var event = eventFromUnknownInput(exception, syntheticException, {\n attachStacktrace: options.attachStacktrace\n });\n (0,misc/* addExceptionMechanism */.EG)(event, {\n handled: true,\n type: 'generic'\n });\n event.level = Severity.Error;\n\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n\n return syncpromise/* SyncPromise.resolve */.c.resolve(event);\n}\n/**\n * Builds and Event from a Message\n * @hidden\n */\n\nfunction eventFromMessage(options, message, level, hint) {\n if (level === void 0) {\n level = Severity.Info;\n }\n\n var syntheticException = hint && hint.syntheticException || undefined;\n var event = eventFromString(message, syntheticException, {\n attachStacktrace: options.attachStacktrace\n });\n event.level = level;\n\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n\n return syncpromise/* SyncPromise.resolve */.c.resolve(event);\n}\n/**\n * @hidden\n */\n\nfunction eventFromUnknownInput(exception, syntheticException, options) {\n if (options === void 0) {\n options = {};\n }\n\n var event;\n\n if ((0,is/* isErrorEvent */.VW)(exception) && exception.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n var errorEvent = exception; // eslint-disable-next-line no-param-reassign\n\n exception = errorEvent.error;\n event = eventFromStacktrace(computeStackTrace(exception));\n return event;\n }\n\n if ((0,is/* isDOMError */.TX)(exception) || (0,is/* isDOMException */.fm)(exception)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name, code, and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var domException = exception;\n var name_1 = domException.name || ((0,is/* isDOMError */.TX)(domException) ? 'DOMError' : 'DOMException');\n var message = domException.message ? name_1 + \": \" + domException.message : name_1;\n event = eventFromString(message, syntheticException, options);\n (0,misc/* addExceptionTypeValue */.Db)(event, message);\n\n if ('code' in domException) {\n event.tags = _assign(_assign({}, event.tags), {\n 'DOMException.code': \"\" + domException.code\n });\n }\n\n return event;\n }\n\n if ((0,is/* isError */.VZ)(exception)) {\n // we have a real Error object, do nothing\n event = eventFromStacktrace(computeStackTrace(exception));\n return event;\n }\n\n if ((0,is/* isPlainObject */.PO)(exception) || (0,is/* isEvent */.cO)(exception)) {\n // If it is plain Object or Event, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n var objectException = exception;\n event = eventFromPlainObject(objectException, syntheticException, options.rejection);\n (0,misc/* addExceptionMechanism */.EG)(event, {\n synthetic: true\n });\n return event;\n } // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n\n\n event = eventFromString(exception, syntheticException, options);\n (0,misc/* addExceptionTypeValue */.Db)(event, \"\" + exception, undefined);\n (0,misc/* addExceptionMechanism */.EG)(event, {\n synthetic: true\n });\n return event;\n}\n/**\n * @hidden\n */\n\nfunction eventFromString(input, syntheticException, options) {\n if (options === void 0) {\n options = {};\n }\n\n var event = {\n message: input\n };\n\n if (options.attachStacktrace && syntheticException) {\n var stacktrace = computeStackTrace(syntheticException);\n var frames_1 = prepareFramesForEvent(stacktrace.stack);\n event.stacktrace = {\n frames: frames_1\n };\n }\n\n return event;\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/request.js\n\n/** Extract sdk info from from the API metadata */\n\nfunction getSdkMetadataForEnvelopeHeader(api) {\n if (!api.metadata || !api.metadata.sdk) {\n return;\n }\n\n var _a = api.metadata.sdk,\n name = _a.name,\n version = _a.version;\n return {\n name: name,\n version: version\n };\n}\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\n\n\nfunction enhanceEventWithSdkInfo(event, sdkInfo) {\n if (!sdkInfo) {\n return event;\n }\n\n event.sdk = event.sdk || {};\n event.sdk.name = event.sdk.name || sdkInfo.name;\n event.sdk.version = event.sdk.version || sdkInfo.version;\n event.sdk.integrations = node_modules_tslib_tslib_es6_spread(event.sdk.integrations || [], sdkInfo.integrations || []);\n event.sdk.packages = node_modules_tslib_tslib_es6_spread(event.sdk.packages || [], sdkInfo.packages || []);\n return event;\n}\n/** Creates a SentryRequest from a Session. */\n\n\nfunction sessionToSentryRequest(session, api) {\n var sdkInfo = getSdkMetadataForEnvelopeHeader(api);\n var envelopeHeaders = JSON.stringify(tslib_tslib_es6_assign(tslib_tslib_es6_assign({\n sent_at: new Date().toISOString()\n }, sdkInfo && {\n sdk: sdkInfo\n }), api.forceEnvelope() && {\n dsn: api.getDsn().toString()\n })); // I know this is hacky but we don't want to add `session` to request type since it's never rate limited\n\n var type = 'aggregates' in session ? 'sessions' : 'session';\n var itemHeaders = JSON.stringify({\n type: type\n });\n return {\n body: envelopeHeaders + \"\\n\" + itemHeaders + \"\\n\" + JSON.stringify(session),\n type: type,\n url: api.getEnvelopeEndpointWithUrlEncodedAuth()\n };\n}\n/** Creates a SentryRequest from an event. */\n\nfunction eventToSentryRequest(event, api) {\n var sdkInfo = getSdkMetadataForEnvelopeHeader(api);\n var eventType = event.type || 'event';\n var useEnvelope = eventType === 'transaction' || api.forceEnvelope();\n\n var _a = event.debug_meta || {},\n transactionSampling = _a.transactionSampling,\n metadata = tslib_tslib_es6_rest(_a, [\"transactionSampling\"]);\n\n var _b = transactionSampling || {},\n samplingMethod = _b.method,\n sampleRate = _b.rate;\n\n if (Object.keys(metadata).length === 0) {\n delete event.debug_meta;\n } else {\n event.debug_meta = metadata;\n }\n\n var req = {\n body: JSON.stringify(sdkInfo ? enhanceEventWithSdkInfo(event, api.metadata.sdk) : event),\n type: eventType,\n url: useEnvelope ? api.getEnvelopeEndpointWithUrlEncodedAuth() : api.getStoreEndpointWithUrlEncodedAuth()\n }; // https://develop.sentry.dev/sdk/envelopes/\n // Since we don't need to manipulate envelopes nor store them, there is no\n // exported concept of an Envelope with operations including serialization and\n // deserialization. Instead, we only implement a minimal subset of the spec to\n // serialize events inline here.\n\n if (useEnvelope) {\n var envelopeHeaders = JSON.stringify(tslib_tslib_es6_assign(tslib_tslib_es6_assign({\n event_id: event.event_id,\n sent_at: new Date().toISOString()\n }, sdkInfo && {\n sdk: sdkInfo\n }), api.forceEnvelope() && {\n dsn: api.getDsn().toString()\n }));\n var itemHeaders = JSON.stringify({\n type: eventType,\n // TODO: Right now, sampleRate may or may not be defined (it won't be in the cases of inheritance and\n // explicitly-set sampling decisions). Are we good with that?\n sample_rates: [{\n id: samplingMethod,\n rate: sampleRate\n }]\n }); // The trailing newline is optional. We intentionally don't send it to avoid\n // sending unnecessary bytes.\n //\n // const envelope = `${envelopeHeaders}\\n${itemHeaders}\\n${req.body}\\n`;\n\n var envelope = envelopeHeaders + \"\\n\" + itemHeaders + \"\\n\" + req.body;\n req.body = envelope;\n }\n\n return req;\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/api.js\n\nvar SENTRY_API_VERSION = '7';\n/**\n * Helper class to provide urls, headers and metadata that can be used to form\n * different types of requests to Sentry endpoints.\n * Supports both envelopes and regular event requests.\n **/\n\nvar API =\n/** @class */\nfunction () {\n /** Create a new instance of API */\n function API(dsn, metadata, tunnel) {\n if (metadata === void 0) {\n metadata = {};\n }\n\n this.dsn = dsn;\n this._dsnObject = new Dsn(dsn);\n this.metadata = metadata;\n this._tunnel = tunnel;\n }\n /** Returns the Dsn object. */\n\n\n API.prototype.getDsn = function () {\n return this._dsnObject;\n };\n /** Does this transport force envelopes? */\n\n\n API.prototype.forceEnvelope = function () {\n return !!this._tunnel;\n };\n /** Returns the prefix to construct Sentry ingestion API endpoints. */\n\n\n API.prototype.getBaseApiEndpoint = function () {\n var dsn = this.getDsn();\n var protocol = dsn.protocol ? dsn.protocol + \":\" : '';\n var port = dsn.port ? \":\" + dsn.port : '';\n return protocol + \"//\" + dsn.host + port + (dsn.path ? \"/\" + dsn.path : '') + \"/api/\";\n };\n /** Returns the store endpoint URL. */\n\n\n API.prototype.getStoreEndpoint = function () {\n return this._getIngestEndpoint('store');\n };\n /**\n * Returns the store endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\n\n\n API.prototype.getStoreEndpointWithUrlEncodedAuth = function () {\n return this.getStoreEndpoint() + \"?\" + this._encodedAuth();\n };\n /**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\n\n\n API.prototype.getEnvelopeEndpointWithUrlEncodedAuth = function () {\n if (this.forceEnvelope()) {\n return this._tunnel;\n }\n\n return this._getEnvelopeEndpoint() + \"?\" + this._encodedAuth();\n };\n /** Returns only the path component for the store endpoint. */\n\n\n API.prototype.getStoreEndpointPath = function () {\n var dsn = this.getDsn();\n return (dsn.path ? \"/\" + dsn.path : '') + \"/api/\" + dsn.projectId + \"/store/\";\n };\n /**\n * Returns an object that can be used in request headers.\n * This is needed for node and the old /store endpoint in sentry\n */\n\n\n API.prototype.getRequestHeaders = function (clientName, clientVersion) {\n // CHANGE THIS to use metadata but keep clientName and clientVersion compatible\n var dsn = this.getDsn();\n var header = [\"Sentry sentry_version=\" + SENTRY_API_VERSION];\n header.push(\"sentry_client=\" + clientName + \"/\" + clientVersion);\n header.push(\"sentry_key=\" + dsn.publicKey);\n\n if (dsn.pass) {\n header.push(\"sentry_secret=\" + dsn.pass);\n }\n\n return {\n 'Content-Type': 'application/json',\n 'X-Sentry-Auth': header.join(', ')\n };\n };\n /** Returns the url to the report dialog endpoint. */\n\n\n API.prototype.getReportDialogEndpoint = function (dialogOptions) {\n if (dialogOptions === void 0) {\n dialogOptions = {};\n }\n\n var dsn = this.getDsn();\n var endpoint = this.getBaseApiEndpoint() + \"embed/error-page/\";\n var encodedOptions = [];\n encodedOptions.push(\"dsn=\" + dsn.toString());\n\n for (var key in dialogOptions) {\n if (key === 'dsn') {\n continue;\n }\n\n if (key === 'user') {\n if (!dialogOptions.user) {\n continue;\n }\n\n if (dialogOptions.user.name) {\n encodedOptions.push(\"name=\" + encodeURIComponent(dialogOptions.user.name));\n }\n\n if (dialogOptions.user.email) {\n encodedOptions.push(\"email=\" + encodeURIComponent(dialogOptions.user.email));\n }\n } else {\n encodedOptions.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(dialogOptions[key]));\n }\n }\n\n if (encodedOptions.length) {\n return endpoint + \"?\" + encodedOptions.join('&');\n }\n\n return endpoint;\n };\n /** Returns the envelope endpoint URL. */\n\n\n API.prototype._getEnvelopeEndpoint = function () {\n return this._getIngestEndpoint('envelope');\n };\n /** Returns the ingest API endpoint for target. */\n\n\n API.prototype._getIngestEndpoint = function (target) {\n if (this._tunnel) {\n return this._tunnel;\n }\n\n var base = this.getBaseApiEndpoint();\n var dsn = this.getDsn();\n return \"\" + base + dsn.projectId + \"/\" + target + \"/\";\n };\n /** Returns a URL-encoded string with auth config suitable for a query string. */\n\n\n API.prototype._encodedAuth = function () {\n var dsn = this.getDsn();\n var auth = {\n // We send only the minimum set of required information. See\n // https://github.com/getsentry/sentry-javascript/issues/2572.\n sentry_key: dsn.publicKey,\n sentry_version: SENTRY_API_VERSION\n };\n return (0,object/* urlEncode */._j)(auth);\n };\n\n return API;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/utils/esm/promisebuffer.js\n\n\n/** A simple queue that holds promises. */\n\nvar PromiseBuffer =\n/** @class */\nfunction () {\n function PromiseBuffer(_limit) {\n this._limit = _limit;\n /** Internal set of queued Promises */\n\n this._buffer = [];\n }\n /**\n * Says if the buffer is ready to take more requests\n */\n\n\n PromiseBuffer.prototype.isReady = function () {\n return this._limit === undefined || this.length() < this._limit;\n };\n /**\n * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n *\n * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n * PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n * functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n * requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n * limit check.\n * @returns The original promise.\n */\n\n\n PromiseBuffer.prototype.add = function (taskProducer) {\n var _this = this;\n\n if (!this.isReady()) {\n return syncpromise/* SyncPromise.reject */.c.reject(new SentryError('Not adding Promise due to buffer limit reached.'));\n } // start the task and add its promise to the queue\n\n\n var task = taskProducer();\n\n if (this._buffer.indexOf(task) === -1) {\n this._buffer.push(task);\n }\n\n void task.then(function () {\n return _this.remove(task);\n }) // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n // have promises, so TS has to polyfill when down-compiling.)\n .then(null, function () {\n return _this.remove(task).then(null, function () {// We have to add another catch here because `this.remove()` starts a new promise chain.\n });\n });\n return task;\n };\n /**\n * Remove a promise from the queue.\n *\n * @param task Can be any PromiseLike<T>\n * @returns Removed promise.\n */\n\n\n PromiseBuffer.prototype.remove = function (task) {\n var removedTask = this._buffer.splice(this._buffer.indexOf(task), 1)[0];\n\n return removedTask;\n };\n /**\n * This function returns the number of unresolved promises in the queue.\n */\n\n\n PromiseBuffer.prototype.length = function () {\n return this._buffer.length;\n };\n /**\n * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n * `false` otherwise\n */\n\n\n PromiseBuffer.prototype.drain = function (timeout) {\n var _this = this;\n\n return new syncpromise/* SyncPromise */.c(function (resolve) {\n // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n var capturedSetTimeout = setTimeout(function () {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout); // if all promises resolve in time, cancel the timer and resolve to `true`\n\n void syncpromise/* SyncPromise.all */.c.all(_this._buffer).then(function () {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n }).then(null, function () {\n resolve(true);\n });\n });\n };\n\n return PromiseBuffer;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/transports/base.js\n\n\n\n\nvar CATEGORY_MAPPING = {\n event: 'error',\n transaction: 'transaction',\n session: 'session',\n attachment: 'attachment'\n};\nvar global = (0,misc/* getGlobalObject */.Rf)();\n/** Base Transport class implementation */\n\nvar BaseTransport =\n/** @class */\nfunction () {\n function BaseTransport(options) {\n var _this = this;\n\n this.options = options;\n /** A simple buffer holding all requests. */\n\n this._buffer = new PromiseBuffer(30);\n /** Locks transport after receiving rate limits in a response */\n\n this._rateLimits = {};\n this._outcomes = {};\n this._api = new API(options.dsn, options._metadata, options.tunnel); // eslint-disable-next-line deprecation/deprecation\n\n this.url = this._api.getStoreEndpointWithUrlEncodedAuth();\n\n if (this.options.sendClientReports && global.document) {\n global.document.addEventListener('visibilitychange', function () {\n if (global.document.visibilityState === 'hidden') {\n _this._flushOutcomes();\n }\n });\n }\n }\n /**\n * @inheritDoc\n */\n\n\n BaseTransport.prototype.sendEvent = function (_) {\n throw new SentryError('Transport Class has to implement `sendEvent` method');\n };\n /**\n * @inheritDoc\n */\n\n\n BaseTransport.prototype.close = function (timeout) {\n return this._buffer.drain(timeout);\n };\n /**\n * @inheritDoc\n */\n\n\n BaseTransport.prototype.recordLostEvent = function (reason, category) {\n var _a;\n\n if (!this.options.sendClientReports) {\n return;\n } // We want to track each category (event, transaction, session) separately\n // but still keep the distinction between different type of outcomes.\n // We could use nested maps, but it's much easier to read and type this way.\n // A correct type for map-based implementation if we want to go that route\n // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n\n\n var key = CATEGORY_MAPPING[category] + \":\" + reason;\n logger/* logger.log */.k.log(\"Adding outcome: \" + key);\n this._outcomes[key] = (_a = this._outcomes[key], _a !== null && _a !== void 0 ? _a : 0) + 1;\n };\n /**\n * Send outcomes as an envelope\n */\n\n\n BaseTransport.prototype._flushOutcomes = function () {\n if (!this.options.sendClientReports) {\n return;\n }\n\n if (!global.navigator || typeof global.navigator.sendBeacon !== 'function') {\n logger/* logger.warn */.k.warn('Beacon API not available, skipping sending outcomes.');\n return;\n }\n\n var outcomes = this._outcomes;\n this._outcomes = {}; // Nothing to send\n\n if (!Object.keys(outcomes).length) {\n logger/* logger.log */.k.log('No outcomes to flush');\n return;\n }\n\n logger/* logger.log */.k.log(\"Flushing outcomes:\\n\" + JSON.stringify(outcomes, null, 2));\n\n var url = this._api.getEnvelopeEndpointWithUrlEncodedAuth(); // Envelope header is required to be at least an empty object\n\n\n var envelopeHeader = JSON.stringify({});\n var itemHeaders = JSON.stringify({\n type: 'client_report'\n });\n var item = JSON.stringify({\n timestamp: (0,time/* dateTimestampInSeconds */.yW)(),\n discarded_events: Object.keys(outcomes).map(function (key) {\n var _a = __read(key.split(':'), 2),\n category = _a[0],\n reason = _a[1];\n\n return {\n reason: reason,\n category: category,\n quantity: outcomes[key]\n };\n })\n });\n var envelope = envelopeHeader + \"\\n\" + itemHeaders + \"\\n\" + item;\n global.navigator.sendBeacon(url, envelope);\n };\n /**\n * Handle Sentry repsonse for promise-based transports.\n */\n\n\n BaseTransport.prototype._handleResponse = function (_a) {\n var requestType = _a.requestType,\n response = _a.response,\n headers = _a.headers,\n resolve = _a.resolve,\n reject = _a.reject;\n var status = Status.fromHttpCode(response.status);\n /**\n * \"The name is case-insensitive.\"\n * https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n */\n\n var limited = this._handleRateLimit(headers);\n\n if (limited) logger/* logger.warn */.k.warn(\"Too many \" + requestType + \" requests, backing off until: \" + this._disabledUntil(requestType));\n\n if (status === Status.Success) {\n resolve({\n status: status\n });\n return;\n }\n\n reject(response);\n };\n /**\n * Gets the time that given category is disabled until for rate limiting\n */\n\n\n BaseTransport.prototype._disabledUntil = function (requestType) {\n var category = CATEGORY_MAPPING[requestType];\n return this._rateLimits[category] || this._rateLimits.all;\n };\n /**\n * Checks if a category is rate limited\n */\n\n\n BaseTransport.prototype._isRateLimited = function (requestType) {\n return this._disabledUntil(requestType) > new Date(Date.now());\n };\n /**\n * Sets internal _rateLimits from incoming headers. Returns true if headers contains a non-empty rate limiting header.\n */\n\n\n BaseTransport.prototype._handleRateLimit = function (headers) {\n var e_1, _a, e_2, _b;\n\n var now = Date.now();\n var rlHeader = headers['x-sentry-rate-limits'];\n var raHeader = headers['retry-after'];\n\n if (rlHeader) {\n try {\n // rate limit headers are of the form\n // <header>,<header>,..\n // where each <header> is of the form\n // <retry_after>: <categories>: <scope>: <reason_code>\n // where\n // <retry_after> is a delay in ms\n // <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n // <category>;<category>;...\n // <scope> is what's being limited (org, project, or key) - ignored by SDK\n // <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n for (var _c = __values(rlHeader.trim().split(',')), _d = _c.next(); !_d.done; _d = _c.next()) {\n var limit = _d.value;\n var parameters = limit.split(':', 2);\n var headerDelay = parseInt(parameters[0], 10);\n var delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n\n try {\n for (var _e = (e_2 = void 0, __values(parameters[1].split(';'))), _f = _e.next(); !_f.done; _f = _e.next()) {\n var category = _f.value;\n this._rateLimits[category || 'all'] = new Date(now + delay);\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return true;\n } else if (raHeader) {\n this._rateLimits.all = new Date(now + (0,misc/* parseRetryAfterHeader */.JY)(now, raHeader));\n return true;\n }\n\n return false;\n };\n\n return BaseTransport;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/transports/fetch.js\n\n\n\n\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n * const p = f.apply(this, arguments);\n *\n * p.then(function() {\n * console.log('hi.');\n * });\n *\n * return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome: Failed to fetch\n * Edge: Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari: resource blocked by content blocker\n */\n\nfunction getNativeFetchImplementation() {\n /* eslint-disable @typescript-eslint/unbound-method */\n var _a, _b; // Fast path to avoid DOM I/O\n\n\n var global = (0,misc/* getGlobalObject */.Rf)();\n\n if ((0,supports/* isNativeFetch */.Du)(global.fetch)) {\n return global.fetch.bind(global);\n }\n\n var document = global.document;\n var fetchImpl = global.fetch; // eslint-disable-next-line deprecation/deprecation\n\n if (typeof ((_a = document) === null || _a === void 0 ? void 0 : _a.createElement) === \"function\") {\n try {\n var sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n\n if ((_b = sandbox.contentWindow) === null || _b === void 0 ? void 0 : _b.fetch) {\n fetchImpl = sandbox.contentWindow.fetch;\n }\n\n document.head.removeChild(sandbox);\n } catch (e) {\n logger/* logger.warn */.k.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n }\n }\n\n return fetchImpl.bind(global);\n /* eslint-enable @typescript-eslint/unbound-method */\n}\n/** `fetch` based transport */\n\n\nvar FetchTransport =\n/** @class */\nfunction (_super) {\n __extends(FetchTransport, _super);\n\n function FetchTransport(options, fetchImpl) {\n if (fetchImpl === void 0) {\n fetchImpl = getNativeFetchImplementation();\n }\n\n var _this = _super.call(this, options) || this;\n\n _this._fetch = fetchImpl;\n return _this;\n }\n /**\n * @inheritDoc\n */\n\n\n FetchTransport.prototype.sendEvent = function (event) {\n return this._sendRequest(eventToSentryRequest(event, this._api), event);\n };\n /**\n * @inheritDoc\n */\n\n\n FetchTransport.prototype.sendSession = function (session) {\n return this._sendRequest(sessionToSentryRequest(session, this._api), session);\n };\n /**\n * @param sentryRequest Prepared SentryRequest to be delivered\n * @param originalPayload Original payload used to create SentryRequest\n */\n\n\n FetchTransport.prototype._sendRequest = function (sentryRequest, originalPayload) {\n var _this = this;\n\n if (this._isRateLimited(sentryRequest.type)) {\n this.recordLostEvent(esm_transport/* Outcome.RateLimitBackoff */.k.RateLimitBackoff, sentryRequest.type);\n return Promise.reject({\n event: originalPayload,\n type: sentryRequest.type,\n reason: \"Transport for \" + sentryRequest.type + \" requests locked till \" + this._disabledUntil(sentryRequest.type) + \" due to too many requests.\",\n status: 429\n });\n }\n\n var options = {\n body: sentryRequest.body,\n method: 'POST',\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: (0,supports/* supportsReferrerPolicy */.hv)() ? 'origin' : ''\n };\n\n if (this.options.fetchParameters !== undefined) {\n Object.assign(options, this.options.fetchParameters);\n }\n\n if (this.options.headers !== undefined) {\n options.headers = this.options.headers;\n }\n\n return this._buffer.add(function () {\n return new syncpromise/* SyncPromise */.c(function (resolve, reject) {\n void _this._fetch(sentryRequest.url, options).then(function (response) {\n var headers = {\n 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n 'retry-after': response.headers.get('Retry-After')\n };\n\n _this._handleResponse({\n requestType: sentryRequest.type,\n response: response,\n headers: headers,\n resolve: resolve,\n reject: reject\n });\n }).catch(reject);\n });\n }).then(undefined, function (reason) {\n // It's either buffer rejection or any other xhr/fetch error, which are treated as NetworkError.\n if (reason instanceof SentryError) {\n _this.recordLostEvent(esm_transport/* Outcome.QueueOverflow */.k.QueueOverflow, sentryRequest.type);\n } else {\n _this.recordLostEvent(esm_transport/* Outcome.NetworkError */.k.NetworkError, sentryRequest.type);\n }\n\n throw reason;\n });\n };\n\n return FetchTransport;\n}(BaseTransport);\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/transports/xhr.js\n\n\n\n\n\n/** `XHR` based transport */\n\nvar XHRTransport =\n/** @class */\nfunction (_super) {\n __extends(XHRTransport, _super);\n\n function XHRTransport() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @inheritDoc\n */\n\n\n XHRTransport.prototype.sendEvent = function (event) {\n return this._sendRequest(eventToSentryRequest(event, this._api), event);\n };\n /**\n * @inheritDoc\n */\n\n\n XHRTransport.prototype.sendSession = function (session) {\n return this._sendRequest(sessionToSentryRequest(session, this._api), session);\n };\n /**\n * @param sentryRequest Prepared SentryRequest to be delivered\n * @param originalPayload Original payload used to create SentryRequest\n */\n\n\n XHRTransport.prototype._sendRequest = function (sentryRequest, originalPayload) {\n var _this = this;\n\n if (this._isRateLimited(sentryRequest.type)) {\n this.recordLostEvent(esm_transport/* Outcome.RateLimitBackoff */.k.RateLimitBackoff, sentryRequest.type);\n return Promise.reject({\n event: originalPayload,\n type: sentryRequest.type,\n reason: \"Transport for \" + sentryRequest.type + \" requests locked till \" + this._disabledUntil(sentryRequest.type) + \" due to too many requests.\",\n status: 429\n });\n }\n\n return this._buffer.add(function () {\n return new syncpromise/* SyncPromise */.c(function (resolve, reject) {\n var request = new XMLHttpRequest();\n\n request.onreadystatechange = function () {\n if (request.readyState === 4) {\n var headers = {\n 'x-sentry-rate-limits': request.getResponseHeader('X-Sentry-Rate-Limits'),\n 'retry-after': request.getResponseHeader('Retry-After')\n };\n\n _this._handleResponse({\n requestType: sentryRequest.type,\n response: request,\n headers: headers,\n resolve: resolve,\n reject: reject\n });\n }\n };\n\n request.open('POST', sentryRequest.url);\n\n for (var header in _this.options.headers) {\n if (_this.options.headers.hasOwnProperty(header)) {\n request.setRequestHeader(header, _this.options.headers[header]);\n }\n }\n\n request.send(sentryRequest.body);\n });\n }).then(undefined, function (reason) {\n // It's either buffer rejection or any other xhr/fetch error, which are treated as NetworkError.\n if (reason instanceof SentryError) {\n _this.recordLostEvent(esm_transport/* Outcome.QueueOverflow */.k.QueueOverflow, sentryRequest.type);\n } else {\n _this.recordLostEvent(esm_transport/* Outcome.NetworkError */.k.NetworkError, sentryRequest.type);\n }\n\n throw reason;\n });\n };\n\n return XHRTransport;\n}(BaseTransport);\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/backend.js\n\n\n\n\n\n\n/**\n * The Sentry Browser SDK Backend.\n * @hidden\n */\n\nvar BrowserBackend =\n/** @class */\nfunction (_super) {\n __extends(BrowserBackend, _super);\n\n function BrowserBackend() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @inheritDoc\n */\n\n\n BrowserBackend.prototype.eventFromException = function (exception, hint) {\n return eventFromException(this._options, exception, hint);\n };\n /**\n * @inheritDoc\n */\n\n\n BrowserBackend.prototype.eventFromMessage = function (message, level, hint) {\n if (level === void 0) {\n level = Severity.Info;\n }\n\n return eventFromMessage(this._options, message, level, hint);\n };\n /**\n * @inheritDoc\n */\n\n\n BrowserBackend.prototype._setupTransport = function () {\n if (!this._options.dsn) {\n // We return the noop transport here in case there is no Dsn.\n return _super.prototype._setupTransport.call(this);\n }\n\n var transportOptions = _assign(_assign({}, this._options.transportOptions), {\n dsn: this._options.dsn,\n tunnel: this._options.tunnel,\n sendClientReports: this._options.sendClientReports,\n _metadata: this._options._metadata\n });\n\n if (this._options.transport) {\n return new this._options.transport(transportOptions);\n }\n\n if ((0,supports/* supportsFetch */.Ak)()) {\n return new FetchTransport(transportOptions);\n }\n\n return new XHRTransport(transportOptions);\n };\n\n return BrowserBackend;\n}(BaseBackend);\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/helpers.js\n\n\n\nvar helpers_global = (0,misc/* getGlobalObject */.Rf)();\nvar ignoreOnError = 0;\n/**\n * @hidden\n */\n\nfunction shouldIgnoreOnError() {\n return ignoreOnError > 0;\n}\n/**\n * @hidden\n */\n\nfunction ignoreNextOnError() {\n // onerror should trigger before setTimeout\n ignoreOnError += 1;\n setTimeout(function () {\n ignoreOnError -= 1;\n });\n}\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap.\n * @returns The wrapped function.\n * @hidden\n */\n\nfunction wrap(fn, options, before) {\n if (options === void 0) {\n options = {};\n }\n\n if (typeof fn !== 'function') {\n return fn;\n }\n\n try {\n // We don't wanna wrap it twice\n if (fn.__sentry__) {\n return fn;\n } // If this has already been wrapped in the past, return that wrapped function\n\n\n if (fn.__sentry_wrapped__) {\n return fn.__sentry_wrapped__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n /* eslint-disable prefer-rest-params */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n var sentryWrapped = function sentryWrapped() {\n var args = Array.prototype.slice.call(arguments);\n\n try {\n if (before && typeof before === 'function') {\n before.apply(this, arguments);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n\n\n var wrappedArguments = args.map(function (arg) {\n return wrap(arg, options);\n });\n\n if (fn.handleEvent) {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return fn.handleEvent.apply(this, wrappedArguments);\n } // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n\n\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n withScope(function (scope) {\n scope.addEventProcessor(function (event) {\n var processedEvent = _assign({}, event);\n\n if (options.mechanism) {\n (0,misc/* addExceptionTypeValue */.Db)(processedEvent, undefined, undefined);\n (0,misc/* addExceptionMechanism */.EG)(processedEvent, options.mechanism);\n }\n\n processedEvent.extra = _assign(_assign({}, processedEvent.extra), {\n arguments: args\n });\n return processedEvent;\n });\n captureException(ex);\n });\n throw ex;\n }\n };\n /* eslint-enable prefer-rest-params */\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n\n\n try {\n for (var property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property] = fn[property];\n }\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n\n fn.prototype = fn.prototype || {};\n sentryWrapped.prototype = fn.prototype;\n Object.defineProperty(fn, '__sentry_wrapped__', {\n enumerable: false,\n value: sentryWrapped\n }); // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n\n Object.defineProperties(sentryWrapped, {\n __sentry__: {\n enumerable: false,\n value: true\n },\n __sentry_original__: {\n enumerable: false,\n value: fn\n }\n }); // Restore original function name (not all browsers allow that)\n\n try {\n var descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name');\n\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get: function get() {\n return fn.name;\n }\n });\n } // eslint-disable-next-line no-empty\n\n } catch (_oO) {}\n\n return sentryWrapped;\n}\n/**\n * Injects the Report Dialog script\n * @hidden\n */\n\nfunction injectReportDialog(options) {\n if (options === void 0) {\n options = {};\n }\n\n if (!helpers_global.document) {\n return;\n }\n\n if (!options.eventId) {\n logger/* logger.error */.k.error(\"Missing eventId option in showReportDialog call\");\n return;\n }\n\n if (!options.dsn) {\n logger/* logger.error */.k.error(\"Missing dsn option in showReportDialog call\");\n return;\n }\n\n var script = helpers_global.document.createElement('script');\n script.async = true;\n script.src = new API(options.dsn).getReportDialogEndpoint(options);\n\n if (options.onLoad) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n script.onload = options.onLoad;\n }\n\n var injectionPoint = helpers_global.document.head || helpers_global.document.body;\n\n if (injectionPoint) {\n injectionPoint.appendChild(script);\n }\n}\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/instrument.js\nvar instrument = __webpack_require__(6710);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/browser.js\nvar browser = __webpack_require__(595);\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\n/* eslint-disable max-lines */\n\n\n\n\n/**\n * Default Breadcrumbs instrumentations\n * TODO: Deprecated - with v6, this will be renamed to `Instrument`\n */\n\nvar Breadcrumbs =\n/** @class */\nfunction () {\n /**\n * @inheritDoc\n */\n function Breadcrumbs(options) {\n /**\n * @inheritDoc\n */\n this.name = Breadcrumbs.id;\n this._options = _assign({\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true\n }, options);\n }\n /**\n * Create a breadcrumb of `sentry` from the events themselves\n */\n\n\n Breadcrumbs.prototype.addSentryBreadcrumb = function (event) {\n if (!this._options.sentry) {\n return;\n }\n\n (0,esm_hub/* getCurrentHub */.Gd)().addBreadcrumb({\n category: \"sentry.\" + (event.type === 'transaction' ? 'transaction' : 'event'),\n event_id: event.event_id,\n level: event.level,\n message: (0,misc/* getEventDescription */.jH)(event)\n }, {\n event: event\n });\n };\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - Console API\n * - DOM API (click/typing)\n * - XMLHttpRequest API\n * - Fetch API\n * - History API\n */\n\n\n Breadcrumbs.prototype.setupOnce = function () {\n var _this = this;\n\n if (this._options.console) {\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: function callback() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n _this._consoleBreadcrumb.apply(_this, tslib_es6_spread(args));\n },\n type: 'console'\n });\n }\n\n if (this._options.dom) {\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: function callback() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n _this._domBreadcrumb.apply(_this, tslib_es6_spread(args));\n },\n type: 'dom'\n });\n }\n\n if (this._options.xhr) {\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: function callback() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n _this._xhrBreadcrumb.apply(_this, tslib_es6_spread(args));\n },\n type: 'xhr'\n });\n }\n\n if (this._options.fetch) {\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: function callback() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n _this._fetchBreadcrumb.apply(_this, tslib_es6_spread(args));\n },\n type: 'fetch'\n });\n }\n\n if (this._options.history) {\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: function callback() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n _this._historyBreadcrumb.apply(_this, tslib_es6_spread(args));\n },\n type: 'history'\n });\n }\n };\n /**\n * Creates breadcrumbs from console API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n Breadcrumbs.prototype._consoleBreadcrumb = function (handlerData) {\n var breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console'\n },\n level: Severity.fromString(handlerData.level),\n message: (0,string/* safeJoin */.nK)(handlerData.args, ' ')\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = \"Assertion failed: \" + ((0,string/* safeJoin */.nK)(handlerData.args.slice(1), ' ') || 'console.assert');\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n (0,esm_hub/* getCurrentHub */.Gd)().addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level\n });\n };\n /**\n * Creates breadcrumbs from DOM API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n Breadcrumbs.prototype._domBreadcrumb = function (handlerData) {\n var target;\n var keyAttrs = typeof this._options.dom === 'object' ? this._options.dom.serializeAttribute : undefined;\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n } // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n\n\n try {\n target = handlerData.event.target ? (0,browser/* htmlTreeAsString */.R)(handlerData.event.target, keyAttrs) : (0,browser/* htmlTreeAsString */.R)(handlerData.event, keyAttrs);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n (0,esm_hub/* getCurrentHub */.Gd)().addBreadcrumb({\n category: \"ui.\" + handlerData.name,\n message: target\n }, {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global\n });\n };\n /**\n * Creates breadcrumbs from XHR API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n Breadcrumbs.prototype._xhrBreadcrumb = function (handlerData) {\n if (handlerData.endTimestamp) {\n // We only capture complete, non-sentry requests\n if (handlerData.xhr.__sentry_own_request__) {\n return;\n }\n\n var _a = handlerData.xhr.__sentry_xhr__ || {},\n method = _a.method,\n url = _a.url,\n status_code = _a.status_code,\n body = _a.body;\n\n (0,esm_hub/* getCurrentHub */.Gd)().addBreadcrumb({\n category: 'xhr',\n data: {\n method: method,\n url: url,\n status_code: status_code\n },\n type: 'http'\n }, {\n xhr: handlerData.xhr,\n input: body\n });\n return;\n }\n };\n /**\n * Creates breadcrumbs from fetch API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n Breadcrumbs.prototype._fetchBreadcrumb = function (handlerData) {\n // We only capture complete fetch requests\n if (!handlerData.endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n (0,esm_hub/* getCurrentHub */.Gd)().addBreadcrumb({\n category: 'fetch',\n data: handlerData.fetchData,\n level: Severity.Error,\n type: 'http'\n }, {\n data: handlerData.error,\n input: handlerData.args\n });\n } else {\n (0,esm_hub/* getCurrentHub */.Gd)().addBreadcrumb({\n category: 'fetch',\n data: _assign(_assign({}, handlerData.fetchData), {\n status_code: handlerData.response.status\n }),\n type: 'http'\n }, {\n input: handlerData.args,\n response: handlerData.response\n });\n }\n };\n /**\n * Creates breadcrumbs from history API calls\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n Breadcrumbs.prototype._historyBreadcrumb = function (handlerData) {\n var global = (0,misc/* getGlobalObject */.Rf)();\n var from = handlerData.from;\n var to = handlerData.to;\n var parsedLoc = (0,misc/* parseUrl */.en)(global.location.href);\n var parsedFrom = (0,misc/* parseUrl */.en)(from);\n var parsedTo = (0,misc/* parseUrl */.en)(to); // Initial pushState doesn't provide `from` information\n\n if (!parsedFrom.path) {\n parsedFrom = parsedLoc;\n } // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n\n\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n (0,esm_hub/* getCurrentHub */.Gd)().addBreadcrumb({\n category: 'navigation',\n data: {\n from: from,\n to: to\n }\n });\n };\n /**\n * @inheritDoc\n */\n\n\n Breadcrumbs.id = 'Breadcrumbs';\n return Breadcrumbs;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/client.js\n\n\n\n\n\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\n\nvar BrowserClient =\n/** @class */\nfunction (_super) {\n __extends(BrowserClient, _super);\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n\n\n function BrowserClient(options) {\n if (options === void 0) {\n options = {};\n }\n\n var _this = this;\n\n options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || {\n name: 'sentry.javascript.browser',\n packages: [{\n name: 'npm:@sentry/browser',\n version: SDK_VERSION\n }],\n version: SDK_VERSION\n };\n _this = _super.call(this, BrowserBackend, options) || this;\n return _this;\n }\n /**\n * Show a report dialog to the user to send feedback to a specific event.\n *\n * @param options Set individual options for the dialog\n */\n\n\n BrowserClient.prototype.showReportDialog = function (options) {\n if (options === void 0) {\n options = {};\n } // doesn't work without a document (React Native)\n\n\n var document = (0,misc/* getGlobalObject */.Rf)().document;\n\n if (!document) {\n return;\n }\n\n if (!this._isEnabled()) {\n logger/* logger.error */.k.error('Trying to call showReportDialog with Sentry Client disabled');\n return;\n }\n\n injectReportDialog(_assign(_assign({}, options), {\n dsn: options.dsn || this.getDsn()\n }));\n };\n /**\n * @inheritDoc\n */\n\n\n BrowserClient.prototype._prepareEvent = function (event, scope, hint) {\n event.platform = event.platform || 'javascript';\n return _super.prototype._prepareEvent.call(this, event, scope, hint);\n };\n /**\n * @inheritDoc\n */\n\n\n BrowserClient.prototype._sendEvent = function (event) {\n var integration = this.getIntegration(Breadcrumbs);\n\n if (integration) {\n integration.addSentryBreadcrumb(event);\n }\n\n _super.prototype._sendEvent.call(this, event);\n };\n\n return BrowserClient;\n}(BaseClient);\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/sdk.js\n\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\n\nfunction initAndBind(clientClass, options) {\n var _a;\n\n if (options.debug === true) {\n logger/* logger.enable */.k.enable();\n }\n\n var hub = (0,esm_hub/* getCurrentHub */.Gd)();\n (_a = hub.getScope()) === null || _a === void 0 ? void 0 : _a.update(options.initialScope);\n var client = new clientClass(options);\n hub.bindClient(client);\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/integrations/inboundfilters.js\n\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\n\nvar DEFAULT_IGNORE_ERRORS = [/^Script error\\.?$/, /^Javascript error: Script error\\.? on line 0$/];\n/** Inbound filters configurable by the user */\n\nvar InboundFilters =\n/** @class */\nfunction () {\n function InboundFilters(_options) {\n if (_options === void 0) {\n _options = {};\n }\n\n this._options = _options;\n /**\n * @inheritDoc\n */\n\n this.name = InboundFilters.id;\n }\n /**\n * @inheritDoc\n */\n\n\n InboundFilters.prototype.setupOnce = function () {\n (0,esm_scope/* addGlobalEventProcessor */.c)(function (event) {\n var hub = (0,esm_hub/* getCurrentHub */.Gd)();\n\n if (!hub) {\n return event;\n }\n\n var self = hub.getIntegration(InboundFilters);\n\n if (self) {\n var client = hub.getClient();\n var clientOptions = client ? client.getOptions() : {}; // This checks prevents most of the occurrences of the bug linked below:\n // https://github.com/getsentry/sentry-javascript/issues/2622\n // The bug is caused by multiple SDK instances, where one is minified and one is using non-mangled code.\n // Unfortunatelly we cannot fix it reliably (thus reserved property in rollup's terser config),\n // as we cannot force people using multiple instances in their apps to sync SDK versions.\n\n var options = typeof self._mergeOptions === 'function' ? self._mergeOptions(clientOptions) : {};\n\n if (typeof self._shouldDropEvent !== 'function') {\n return event;\n }\n\n return self._shouldDropEvent(event, options) ? null : event;\n }\n\n return event;\n });\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._shouldDropEvent = function (event, options) {\n if (this._isSentryError(event, options)) {\n logger/* logger.warn */.k.warn(\"Event dropped due to being internal Sentry Error.\\nEvent: \" + (0,misc/* getEventDescription */.jH)(event));\n return true;\n }\n\n if (this._isIgnoredError(event, options)) {\n logger/* logger.warn */.k.warn(\"Event dropped due to being matched by `ignoreErrors` option.\\nEvent: \" + (0,misc/* getEventDescription */.jH)(event));\n return true;\n }\n\n if (this._isDeniedUrl(event, options)) {\n logger/* logger.warn */.k.warn(\"Event dropped due to being matched by `denyUrls` option.\\nEvent: \" + (0,misc/* getEventDescription */.jH)(event) + \".\\nUrl: \" + this._getEventFilterUrl(event));\n return true;\n }\n\n if (!this._isAllowedUrl(event, options)) {\n logger/* logger.warn */.k.warn(\"Event dropped due to not being matched by `allowUrls` option.\\nEvent: \" + (0,misc/* getEventDescription */.jH)(event) + \".\\nUrl: \" + this._getEventFilterUrl(event));\n return true;\n }\n\n return false;\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._isSentryError = function (event, options) {\n if (!options.ignoreInternal) {\n return false;\n }\n\n try {\n return event && event.exception && event.exception.values && event.exception.values[0] && event.exception.values[0].type === 'SentryError' || false;\n } catch (_oO) {\n return false;\n }\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._isIgnoredError = function (event, options) {\n if (!options.ignoreErrors || !options.ignoreErrors.length) {\n return false;\n }\n\n return this._getPossibleEventMessages(event).some(function (message) {\n // Not sure why TypeScript complains here...\n return options.ignoreErrors.some(function (pattern) {\n return (0,string/* isMatchingPattern */.zC)(message, pattern);\n });\n });\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._isDeniedUrl = function (event, options) {\n // TODO: Use Glob instead?\n if (!options.denyUrls || !options.denyUrls.length) {\n return false;\n }\n\n var url = this._getEventFilterUrl(event);\n\n return !url ? false : options.denyUrls.some(function (pattern) {\n return (0,string/* isMatchingPattern */.zC)(url, pattern);\n });\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._isAllowedUrl = function (event, options) {\n // TODO: Use Glob instead?\n if (!options.allowUrls || !options.allowUrls.length) {\n return true;\n }\n\n var url = this._getEventFilterUrl(event);\n\n return !url ? true : options.allowUrls.some(function (pattern) {\n return (0,string/* isMatchingPattern */.zC)(url, pattern);\n });\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._mergeOptions = function (clientOptions) {\n if (clientOptions === void 0) {\n clientOptions = {};\n }\n\n return {\n allowUrls: node_modules_tslib_tslib_es6_spread(this._options.whitelistUrls || [], this._options.allowUrls || [], clientOptions.whitelistUrls || [], clientOptions.allowUrls || []),\n denyUrls: node_modules_tslib_tslib_es6_spread(this._options.blacklistUrls || [], this._options.denyUrls || [], clientOptions.blacklistUrls || [], clientOptions.denyUrls || []),\n ignoreErrors: node_modules_tslib_tslib_es6_spread(this._options.ignoreErrors || [], clientOptions.ignoreErrors || [], DEFAULT_IGNORE_ERRORS),\n ignoreInternal: typeof this._options.ignoreInternal !== 'undefined' ? this._options.ignoreInternal : true\n };\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._getPossibleEventMessages = function (event) {\n if (event.message) {\n return [event.message];\n }\n\n if (event.exception) {\n try {\n var _a = event.exception.values && event.exception.values[0] || {},\n _b = _a.type,\n type = _b === void 0 ? '' : _b,\n _c = _a.value,\n value = _c === void 0 ? '' : _c;\n\n return [\"\" + value, type + \": \" + value];\n } catch (oO) {\n logger/* logger.error */.k.error(\"Cannot extract message for event \" + (0,misc/* getEventDescription */.jH)(event));\n return [];\n }\n }\n\n return [];\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._getLastValidUrl = function (frames) {\n if (frames === void 0) {\n frames = [];\n }\n\n var _a, _b;\n\n for (var i = frames.length - 1; i >= 0; i--) {\n var frame = frames[i];\n\n if (((_a = frame) === null || _a === void 0 ? void 0 : _a.filename) !== '<anonymous>' && ((_b = frame) === null || _b === void 0 ? void 0 : _b.filename) !== '[native code]') {\n return frame.filename || null;\n }\n }\n\n return null;\n };\n /** JSDoc */\n\n\n InboundFilters.prototype._getEventFilterUrl = function (event) {\n try {\n if (event.stacktrace) {\n var frames_1 = event.stacktrace.frames;\n return this._getLastValidUrl(frames_1);\n }\n\n if (event.exception) {\n var frames_2 = event.exception.values && event.exception.values[0].stacktrace && event.exception.values[0].stacktrace.frames;\n return this._getLastValidUrl(frames_2);\n }\n\n return null;\n } catch (oO) {\n logger/* logger.error */.k.error(\"Cannot extract url for event \" + (0,misc/* getEventDescription */.jH)(event));\n return null;\n }\n };\n /**\n * @inheritDoc\n */\n\n\n InboundFilters.id = 'InboundFilters';\n return InboundFilters;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/integrations/functiontostring.js\nvar originalFunctionToString;\n/** Patch toString calls to return proper name for wrapped functions */\n\nvar FunctionToString =\n/** @class */\nfunction () {\n function FunctionToString() {\n /**\n * @inheritDoc\n */\n this.name = FunctionToString.id;\n }\n /**\n * @inheritDoc\n */\n\n\n FunctionToString.prototype.setupOnce = function () {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n originalFunctionToString = Function.prototype.toString; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n Function.prototype.toString = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var context = this.__sentry_original__ || this;\n return originalFunctionToString.apply(context, args);\n };\n };\n /**\n * @inheritDoc\n */\n\n\n FunctionToString.id = 'FunctionToString';\n return FunctionToString;\n}();\n\n\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/stacktrace.js\nvar stacktrace = __webpack_require__(1313);\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/integrations/trycatch.js\n\n\n\nvar DEFAULT_EVENT_TARGET = ['EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode', 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase', 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow', 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList', 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload'];\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\n\nvar TryCatch =\n/** @class */\nfunction () {\n /**\n * @inheritDoc\n */\n function TryCatch(options) {\n /**\n * @inheritDoc\n */\n this.name = TryCatch.id;\n this._options = _assign({\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true\n }, options);\n }\n /**\n * Wrap timer functions and event targets to catch errors\n * and provide better metadata.\n */\n\n\n TryCatch.prototype.setupOnce = function () {\n var global = (0,misc/* getGlobalObject */.Rf)();\n\n if (this._options.setTimeout) {\n (0,object/* fill */.hl)(global, 'setTimeout', this._wrapTimeFunction.bind(this));\n }\n\n if (this._options.setInterval) {\n (0,object/* fill */.hl)(global, 'setInterval', this._wrapTimeFunction.bind(this));\n }\n\n if (this._options.requestAnimationFrame) {\n (0,object/* fill */.hl)(global, 'requestAnimationFrame', this._wrapRAF.bind(this));\n }\n\n if (this._options.XMLHttpRequest && 'XMLHttpRequest' in global) {\n (0,object/* fill */.hl)(XMLHttpRequest.prototype, 'send', this._wrapXHR.bind(this));\n }\n\n if (this._options.eventTarget) {\n var eventTarget = Array.isArray(this._options.eventTarget) ? this._options.eventTarget : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(this._wrapEventTarget.bind(this));\n }\n };\n /** JSDoc */\n\n\n TryCatch.prototype._wrapTimeFunction = function (original) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: {\n function: (0,stacktrace/* getFunctionName */.$)(original)\n },\n handled: true,\n type: 'instrument'\n }\n });\n return original.apply(this, args);\n };\n };\n /** JSDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n TryCatch.prototype._wrapRAF = function (original) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (callback) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return original.call(this, wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: (0,stacktrace/* getFunctionName */.$)(original)\n },\n handled: true,\n type: 'instrument'\n }\n }));\n };\n };\n /** JSDoc */\n\n\n TryCatch.prototype._wrapEventTarget = function (target) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var global = (0,misc/* getGlobalObject */.Rf)(); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\n var proto = global[target] && global[target].prototype; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n (0,object/* fill */.hl)(proto, 'addEventListener', function (original) {\n return function (eventName, fn, options) {\n try {\n if (typeof fn.handleEvent === 'function') {\n fn.handleEvent = wrap(fn.handleEvent.bind(fn), {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: (0,stacktrace/* getFunctionName */.$)(fn),\n target: target\n },\n handled: true,\n type: 'instrument'\n }\n });\n }\n } catch (err) {// can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.call(this, eventName, // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap(fn, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: (0,stacktrace/* getFunctionName */.$)(fn),\n target: target\n },\n handled: true,\n type: 'instrument'\n }\n }), options);\n };\n });\n (0,object/* fill */.hl)(proto, 'removeEventListener', function (originalRemoveEventListener) {\n return function (eventName, fn, options) {\n var _a;\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n\n\n var wrappedEventHandler = fn;\n\n try {\n var originalEventHandler = (_a = wrappedEventHandler) === null || _a === void 0 ? void 0 : _a.__sentry_wrapped__;\n\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {// ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n\n return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n };\n });\n };\n /** JSDoc */\n\n\n TryCatch.prototype._wrapXHR = function (originalSend) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n } // eslint-disable-next-line @typescript-eslint/no-this-alias\n\n\n var xhr = this;\n var xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n xmlHttpRequestProps.forEach(function (prop) {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (0,object/* fill */.hl)(xhr, prop, function (original) {\n var wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: (0,stacktrace/* getFunctionName */.$)(original)\n },\n handled: true,\n type: 'instrument'\n }\n }; // If Instrument integration has been called before TryCatch, get the name of original function\n\n if (original.__sentry_original__) {\n wrapOptions.mechanism.data.handler = (0,stacktrace/* getFunctionName */.$)(original.__sentry_original__);\n } // Otherwise wrap directly\n\n\n return wrap(original, wrapOptions);\n });\n }\n });\n return originalSend.apply(this, args);\n };\n };\n /**\n * @inheritDoc\n */\n\n\n TryCatch.id = 'TryCatch';\n return TryCatch;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/integrations/globalhandlers.js\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\n\n\n\n\n\n/** Global handlers */\n\nvar GlobalHandlers =\n/** @class */\nfunction () {\n /** JSDoc */\n function GlobalHandlers(options) {\n /**\n * @inheritDoc\n */\n this.name = GlobalHandlers.id;\n /** JSDoc */\n\n this._onErrorHandlerInstalled = false;\n /** JSDoc */\n\n this._onUnhandledRejectionHandlerInstalled = false;\n this._options = _assign({\n onerror: true,\n onunhandledrejection: true\n }, options);\n }\n /**\n * @inheritDoc\n */\n\n\n GlobalHandlers.prototype.setupOnce = function () {\n Error.stackTraceLimit = 50;\n\n if (this._options.onerror) {\n logger/* logger.log */.k.log('Global Handler attached: onerror');\n\n this._installGlobalOnErrorHandler();\n }\n\n if (this._options.onunhandledrejection) {\n logger/* logger.log */.k.log('Global Handler attached: onunhandledrejection');\n\n this._installGlobalOnUnhandledRejectionHandler();\n }\n };\n /** JSDoc */\n\n\n GlobalHandlers.prototype._installGlobalOnErrorHandler = function () {\n var _this = this;\n\n if (this._onErrorHandlerInstalled) {\n return;\n }\n\n (0,instrument/* addInstrumentationHandler */.o)({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n callback: function callback(data) {\n var error = data.error;\n var currentHub = (0,esm_hub/* getCurrentHub */.Gd)();\n var hasIntegration = currentHub.getIntegration(GlobalHandlers);\n var isFailedOwnDelivery = error && error.__sentry_own_request__ === true;\n\n if (!hasIntegration || shouldIgnoreOnError() || isFailedOwnDelivery) {\n return;\n }\n\n var client = currentHub.getClient();\n var event = error === undefined && (0,is/* isString */.HD)(data.msg) ? _this._eventFromIncompleteOnError(data.msg, data.url, data.line, data.column) : _this._enhanceEventWithInitialFrame(eventFromUnknownInput(error || data.msg, undefined, {\n attachStacktrace: client && client.getOptions().attachStacktrace,\n rejection: false\n }), data.url, data.line, data.column);\n (0,misc/* addExceptionMechanism */.EG)(event, {\n handled: false,\n type: 'onerror'\n });\n currentHub.captureEvent(event, {\n originalException: error\n });\n },\n type: 'error'\n });\n this._onErrorHandlerInstalled = true;\n };\n /** JSDoc */\n\n\n GlobalHandlers.prototype._installGlobalOnUnhandledRejectionHandler = function () {\n var _this = this;\n\n if (this._onUnhandledRejectionHandlerInstalled) {\n return;\n }\n\n (0,instrument/* addInstrumentationHandler */.o)({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n callback: function callback(e) {\n var error = e; // dig the object of the rejection out of known event types\n\n try {\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in e) {\n error = e.reason;\n } // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n else if ('detail' in e && 'reason' in e.detail) {\n error = e.detail.reason;\n }\n } catch (_oO) {// no-empty\n }\n\n var currentHub = (0,esm_hub/* getCurrentHub */.Gd)();\n var hasIntegration = currentHub.getIntegration(GlobalHandlers);\n var isFailedOwnDelivery = error && error.__sentry_own_request__ === true;\n\n if (!hasIntegration || shouldIgnoreOnError() || isFailedOwnDelivery) {\n return true;\n }\n\n var client = currentHub.getClient();\n var event = (0,is/* isPrimitive */.pt)(error) ? _this._eventFromRejectionWithPrimitive(error) : eventFromUnknownInput(error, undefined, {\n attachStacktrace: client && client.getOptions().attachStacktrace,\n rejection: true\n });\n event.level = Severity.Error;\n (0,misc/* addExceptionMechanism */.EG)(event, {\n handled: false,\n type: 'onunhandledrejection'\n });\n currentHub.captureEvent(event, {\n originalException: error\n });\n return;\n },\n type: 'unhandledrejection'\n });\n this._onUnhandledRejectionHandlerInstalled = true;\n };\n /**\n * This function creates a stack from an old, error-less onerror handler.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n GlobalHandlers.prototype._eventFromIncompleteOnError = function (msg, url, line, column) {\n var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i; // If 'message' is ErrorEvent, get real message from inside\n\n var message = (0,is/* isErrorEvent */.VW)(msg) ? msg.message : msg;\n var name;\n var groups = message.match(ERROR_TYPES_RE);\n\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n\n var event = {\n exception: {\n values: [{\n type: name || 'Error',\n value: message\n }]\n }\n };\n return this._enhanceEventWithInitialFrame(event, url, line, column);\n };\n /**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\n\n\n GlobalHandlers.prototype._eventFromRejectionWithPrimitive = function (reason) {\n return {\n exception: {\n values: [{\n type: 'UnhandledRejection',\n // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n value: \"Non-Error promise rejection captured with value: \" + String(reason)\n }]\n }\n };\n };\n /** JSDoc */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n GlobalHandlers.prototype._enhanceEventWithInitialFrame = function (event, url, line, column) {\n event.exception = event.exception || {};\n event.exception.values = event.exception.values || [];\n event.exception.values[0] = event.exception.values[0] || {};\n event.exception.values[0].stacktrace = event.exception.values[0].stacktrace || {};\n event.exception.values[0].stacktrace.frames = event.exception.values[0].stacktrace.frames || [];\n var colno = isNaN(parseInt(column, 10)) ? undefined : column;\n var lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n var filename = (0,is/* isString */.HD)(url) && url.length > 0 ? url : (0,misc/* getLocationHref */.l4)();\n\n if (event.exception.values[0].stacktrace.frames.length === 0) {\n event.exception.values[0].stacktrace.frames.push({\n colno: colno,\n filename: filename,\n function: '?',\n in_app: true,\n lineno: lineno\n });\n }\n\n return event;\n };\n /**\n * @inheritDoc\n */\n\n\n GlobalHandlers.id = 'GlobalHandlers';\n return GlobalHandlers;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/integrations/linkederrors.js\n\n\n\n\n\nvar DEFAULT_KEY = 'cause';\nvar DEFAULT_LIMIT = 5;\n/** Adds SDK info to an event. */\n\nvar LinkedErrors =\n/** @class */\nfunction () {\n /**\n * @inheritDoc\n */\n function LinkedErrors(options) {\n if (options === void 0) {\n options = {};\n }\n /**\n * @inheritDoc\n */\n\n\n this.name = LinkedErrors.id;\n this._key = options.key || DEFAULT_KEY;\n this._limit = options.limit || DEFAULT_LIMIT;\n }\n /**\n * @inheritDoc\n */\n\n\n LinkedErrors.prototype.setupOnce = function () {\n (0,esm_scope/* addGlobalEventProcessor */.c)(function (event, hint) {\n var self = (0,esm_hub/* getCurrentHub */.Gd)().getIntegration(LinkedErrors);\n\n if (self) {\n var handler = self._handler && self._handler.bind(self);\n\n return typeof handler === 'function' ? handler(event, hint) : event;\n }\n\n return event;\n });\n };\n /**\n * @inheritDoc\n */\n\n\n LinkedErrors.prototype._handler = function (event, hint) {\n if (!event.exception || !event.exception.values || !hint || !(0,is/* isInstanceOf */.V9)(hint.originalException, Error)) {\n return event;\n }\n\n var linkedErrors = this._walkErrorTree(hint.originalException, this._key);\n\n event.exception.values = tslib_es6_spread(linkedErrors, event.exception.values);\n return event;\n };\n /**\n * @inheritDoc\n */\n\n\n LinkedErrors.prototype._walkErrorTree = function (error, key, stack) {\n if (stack === void 0) {\n stack = [];\n }\n\n if (!(0,is/* isInstanceOf */.V9)(error[key], Error) || stack.length + 1 >= this._limit) {\n return stack;\n }\n\n var stacktrace = computeStackTrace(error[key]);\n var exception = exceptionFromStacktrace(stacktrace);\n return this._walkErrorTree(error[key], key, tslib_es6_spread([exception], stack));\n };\n /**\n * @inheritDoc\n */\n\n\n LinkedErrors.id = 'LinkedErrors';\n return LinkedErrors;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/integrations/dedupe.js\n\n/** Deduplication filter */\n\nvar Dedupe =\n/** @class */\nfunction () {\n function Dedupe() {\n /**\n * @inheritDoc\n */\n this.name = Dedupe.id;\n }\n /**\n * @inheritDoc\n */\n\n\n Dedupe.prototype.setupOnce = function (addGlobalEventProcessor, getCurrentHub) {\n addGlobalEventProcessor(function (currentEvent) {\n var self = getCurrentHub().getIntegration(Dedupe);\n\n if (self) {\n // Juuust in case something goes wrong\n try {\n if (self._shouldDropEvent(currentEvent, self._previousEvent)) {\n logger/* logger.warn */.k.warn(\"Event dropped due to being a duplicate of previously captured event.\");\n return null;\n }\n } catch (_oO) {\n return self._previousEvent = currentEvent;\n }\n\n return self._previousEvent = currentEvent;\n }\n\n return currentEvent;\n });\n };\n /** JSDoc */\n\n\n Dedupe.prototype._shouldDropEvent = function (currentEvent, previousEvent) {\n if (!previousEvent) {\n return false;\n }\n\n if (this._isSameMessageEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n if (this._isSameExceptionEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n return false;\n };\n /** JSDoc */\n\n\n Dedupe.prototype._isSameMessageEvent = function (currentEvent, previousEvent) {\n var currentMessage = currentEvent.message;\n var previousMessage = previousEvent.message; // If neither event has a message property, they were both exceptions, so bail out\n\n if (!currentMessage && !previousMessage) {\n return false;\n } // If only one event has a stacktrace, but not the other one, they are not the same\n\n\n if (currentMessage && !previousMessage || !currentMessage && previousMessage) {\n return false;\n }\n\n if (currentMessage !== previousMessage) {\n return false;\n }\n\n if (!this._isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!this._isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n };\n /** JSDoc */\n\n\n Dedupe.prototype._getFramesFromEvent = function (event) {\n var exception = event.exception;\n\n if (exception) {\n try {\n // @ts-ignore Object could be undefined\n return exception.values[0].stacktrace.frames;\n } catch (_oO) {\n return undefined;\n }\n } else if (event.stacktrace) {\n return event.stacktrace.frames;\n }\n\n return undefined;\n };\n /** JSDoc */\n\n\n Dedupe.prototype._isSameStacktrace = function (currentEvent, previousEvent) {\n var currentFrames = this._getFramesFromEvent(currentEvent);\n\n var previousFrames = this._getFramesFromEvent(previousEvent); // If neither event has a stacktrace, they are assumed to be the same\n\n\n if (!currentFrames && !previousFrames) {\n return true;\n } // If only one event has a stacktrace, but not the other one, they are not the same\n\n\n if (currentFrames && !previousFrames || !currentFrames && previousFrames) {\n return false;\n }\n\n currentFrames = currentFrames;\n previousFrames = previousFrames; // If number of frames differ, they are not the same\n\n if (previousFrames.length !== currentFrames.length) {\n return false;\n } // Otherwise, compare the two\n\n\n for (var i = 0; i < previousFrames.length; i++) {\n var frameA = previousFrames[i];\n var frameB = currentFrames[i];\n\n if (frameA.filename !== frameB.filename || frameA.lineno !== frameB.lineno || frameA.colno !== frameB.colno || frameA.function !== frameB.function) {\n return false;\n }\n }\n\n return true;\n };\n /** JSDoc */\n\n\n Dedupe.prototype._getExceptionFromEvent = function (event) {\n return event.exception && event.exception.values && event.exception.values[0];\n };\n /** JSDoc */\n\n\n Dedupe.prototype._isSameExceptionEvent = function (currentEvent, previousEvent) {\n var previousException = this._getExceptionFromEvent(previousEvent);\n\n var currentException = this._getExceptionFromEvent(currentEvent);\n\n if (!previousException || !currentException) {\n return false;\n }\n\n if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n return false;\n }\n\n if (!this._isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!this._isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n };\n /** JSDoc */\n\n\n Dedupe.prototype._isSameFingerprint = function (currentEvent, previousEvent) {\n var currentFingerprint = currentEvent.fingerprint;\n var previousFingerprint = previousEvent.fingerprint; // If neither event has a fingerprint, they are assumed to be the same\n\n if (!currentFingerprint && !previousFingerprint) {\n return true;\n } // If only one event has a fingerprint, but not the other one, they are not the same\n\n\n if (currentFingerprint && !previousFingerprint || !currentFingerprint && previousFingerprint) {\n return false;\n }\n\n currentFingerprint = currentFingerprint;\n previousFingerprint = previousFingerprint; // Otherwise, compare the two\n\n try {\n return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n } catch (_oO) {\n return false;\n }\n };\n /**\n * @inheritDoc\n */\n\n\n Dedupe.id = 'Dedupe';\n return Dedupe;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/integrations/useragent.js\n\n\n\nvar useragent_global = (0,misc/* getGlobalObject */.Rf)();\n/** UserAgent */\n\nvar UserAgent =\n/** @class */\nfunction () {\n function UserAgent() {\n /**\n * @inheritDoc\n */\n this.name = UserAgent.id;\n }\n /**\n * @inheritDoc\n */\n\n\n UserAgent.prototype.setupOnce = function () {\n (0,esm_scope/* addGlobalEventProcessor */.c)(function (event) {\n var _a, _b, _c;\n\n if ((0,esm_hub/* getCurrentHub */.Gd)().getIntegration(UserAgent)) {\n // if none of the information we want exists, don't bother\n if (!useragent_global.navigator && !useragent_global.location && !useragent_global.document) {\n return event;\n } // grab as much info as exists and add it to the event\n\n\n var url = ((_a = event.request) === null || _a === void 0 ? void 0 : _a.url) || ((_b = useragent_global.location) === null || _b === void 0 ? void 0 : _b.href);\n var referrer = (useragent_global.document || {}).referrer;\n var userAgent = (useragent_global.navigator || {}).userAgent;\n\n var headers = _assign(_assign(_assign({}, (_c = event.request) === null || _c === void 0 ? void 0 : _c.headers), referrer && {\n Referer: referrer\n }), userAgent && {\n 'User-Agent': userAgent\n });\n\n var request = _assign(_assign({}, url && {\n url: url\n }), {\n headers: headers\n });\n\n return _assign(_assign({}, event), {\n request: request\n });\n }\n\n return event;\n });\n };\n /**\n * @inheritDoc\n */\n\n\n UserAgent.id = 'UserAgent';\n return UserAgent;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/sdk.js\n\n\n\n\n\n\nvar defaultIntegrations = [new InboundFilters(), new FunctionToString(), new TryCatch(), new Breadcrumbs(), new GlobalHandlers(), new LinkedErrors(), new Dedupe(), new UserAgent()];\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n * scope.setExtra({ battery: 0.7 });\n * scope.setTag({ user_mode: 'admin' });\n * scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\n\nfunction init(options) {\n if (options === void 0) {\n options = {};\n }\n\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = defaultIntegrations;\n }\n\n if (options.release === undefined) {\n var window_1 = (0,misc/* getGlobalObject */.Rf)(); // This supports the variable that sentry-webpack-plugin injects\n\n if (window_1.SENTRY_RELEASE && window_1.SENTRY_RELEASE.id) {\n options.release = window_1.SENTRY_RELEASE.id;\n }\n }\n\n if (options.autoSessionTracking === undefined) {\n options.autoSessionTracking = true;\n }\n\n if (options.sendClientReports === undefined) {\n options.sendClientReports = true;\n }\n\n initAndBind(BrowserClient, options);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n}\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\n\nfunction showReportDialog(options) {\n if (options === void 0) {\n options = {};\n }\n\n var hub = (0,esm_hub/* getCurrentHub */.Gd)();\n var scope = hub.getScope();\n\n if (scope) {\n options.user = _assign(_assign({}, scope.getUser()), options.user);\n }\n\n if (!options.eventId) {\n options.eventId = hub.lastEventId();\n }\n\n var client = hub.getClient();\n\n if (client) {\n client.showReportDialog(options);\n }\n}\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\n\nfunction lastEventId() {\n return (0,esm_hub/* getCurrentHub */.Gd)().lastEventId();\n}\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\n\nfunction forceLoad() {// Noop\n}\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\n\nfunction onLoad(callback) {\n callback();\n}\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\n\nfunction flush(timeout) {\n var client = (0,esm_hub/* getCurrentHub */.Gd)().getClient();\n\n if (client) {\n return client.flush(timeout);\n }\n\n logger/* logger.warn */.k.warn('Cannot flush events. No client defined.');\n return syncpromise/* SyncPromise.resolve */.c.resolve(false);\n}\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\n\nfunction sdk_close(timeout) {\n var client = (0,esm_hub/* getCurrentHub */.Gd)().getClient();\n\n if (client) {\n return client.close(timeout);\n }\n\n logger/* logger.warn */.k.warn('Cannot flush events and disable SDK. No client defined.');\n return syncpromise/* SyncPromise.resolve */.c.resolve(false);\n}\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\nfunction sdk_wrap(fn) {\n return wrap(fn)();\n}\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\n\nfunction startSessionTracking() {\n var window = (0,misc/* getGlobalObject */.Rf)();\n var document = window.document;\n\n if (typeof document === 'undefined') {\n logger/* logger.warn */.k.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n return;\n }\n\n var hub = (0,esm_hub/* getCurrentHub */.Gd)(); // The only way for this to be false is for there to be a version mismatch between @sentry/browser (>= 6.0.0) and\n // @sentry/hub (< 5.27.0). In the simple case, there won't ever be such a mismatch, because the two packages are\n // pinned at the same version in package.json, but there are edge cases where it's possible. See\n // https://github.com/getsentry/sentry-javascript/issues/3207 and\n // https://github.com/getsentry/sentry-javascript/issues/3234 and\n // https://github.com/getsentry/sentry-javascript/issues/3278.\n\n if (typeof hub.startSession !== 'function' || typeof hub.captureSession !== 'function') {\n return;\n } // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n\n\n hub.startSession({\n ignoreDuration: true\n });\n hub.captureSession(); // We want to create a session for every navigation as well\n\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: function callback(_a) {\n var from = _a.from,\n to = _a.to; // Don't create an additional session for the initial route or if the location did not change\n\n if (from === undefined || from === to) {\n return;\n }\n\n hub.startSession({\n ignoreDuration: true\n });\n hub.captureSession();\n },\n type: 'history'\n });\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/version.js\n// TODO: Remove in the next major release and rely only on @sentry/core SDK_VERSION and SdkInfo metadata\nvar SDK_NAME = 'sentry.javascript.browser';\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/exports.js\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/core/esm/integrations/index.js\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/integrations/index.js\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/transports/index.js\n\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/browser/esm/index.js\n\n\n\n\n\n\nvar windowIntegrations = {}; // This block is needed to add compatibility with the integrations packages when used with a CDN\n\nvar _window = (0,misc/* getGlobalObject */.Rf)();\n\nif (_window.Sentry && _window.Sentry.Integrations) {\n windowIntegrations = _window.Sentry.Integrations;\n}\n\nvar INTEGRATIONS = _assign(_assign(_assign({}, windowIntegrations), integrations_namespaceObject), esm_integrations_namespaceObject);\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/react/esm/sdk.js\n\n/**\n * Inits the React SDK\n */\n\nfunction sdk_init(options) {\n options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || {\n name: 'sentry.javascript.react',\n packages: [{\n name: 'npm:@sentry/react',\n version: SDK_VERSION\n }],\n version: SDK_VERSION\n };\n init(options);\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/react/node_modules/tslib/tslib.es6.js\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar node_modules_tslib_tslib_es6_extendStatics = function extendStatics(d, b) {\n node_modules_tslib_tslib_es6_extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return node_modules_tslib_tslib_es6_extendStatics(d, b);\n};\n\nfunction node_modules_tslib_tslib_es6_extends(d, b) {\n node_modules_tslib_tslib_es6_extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar node_modules_tslib_tslib_es6_assign = function __assign() {\n node_modules_tslib_tslib_es6_assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return node_modules_tslib_tslib_es6_assign.apply(this, arguments);\n};\n\n\nfunction node_modules_tslib_tslib_es6_rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction node_modules_tslib_tslib_es6_decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction node_modules_tslib_tslib_es6_param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction node_modules_tslib_tslib_es6_metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction node_modules_tslib_tslib_es6_awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction node_modules_tslib_tslib_es6_generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction node_modules_tslib_tslib_es6_createBinding(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}\nfunction node_modules_tslib_tslib_es6_exportStar(m, exports) {\n for (var p in m) {\n if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\n }\n}\nfunction node_modules_tslib_tslib_es6_values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction node_modules_tslib_tslib_es6_read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\nfunction react_node_modules_tslib_tslib_es6_spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(node_modules_tslib_tslib_es6_read(arguments[i]));\n }\n\n return ar;\n}\nfunction node_modules_tslib_tslib_es6_spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n;\nfunction node_modules_tslib_tslib_es6_await(v) {\n return this instanceof node_modules_tslib_tslib_es6_await ? (this.v = v, this) : new node_modules_tslib_tslib_es6_await(v);\n}\nfunction node_modules_tslib_tslib_es6_asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n\n function verb(n) {\n if (g[n]) i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n }\n\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n\n function step(r) {\n r.value instanceof node_modules_tslib_tslib_es6_await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n\n function fulfill(value) {\n resume(\"next\", value);\n }\n\n function reject(value) {\n resume(\"throw\", value);\n }\n\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction node_modules_tslib_tslib_es6_asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: node_modules_tslib_tslib_es6_await(o[n](v)),\n done: n === \"return\"\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction node_modules_tslib_tslib_es6_asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof node_modules_tslib_tslib_es6_values === \"function\" ? node_modules_tslib_tslib_es6_values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction node_modules_tslib_tslib_es6_makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n\n return cooked;\n}\n;\nfunction node_modules_tslib_tslib_es6_importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n }\n result.default = mod;\n return result;\n}\nfunction node_modules_tslib_tslib_es6_importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nfunction node_modules_tslib_tslib_es6_classPrivateFieldGet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to get private field on non-instance\");\n }\n\n return privateMap.get(receiver);\n}\nfunction node_modules_tslib_tslib_es6_classPrivateFieldSet(receiver, privateMap, value) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to set private field on non-instance\");\n }\n\n privateMap.set(receiver, value);\n return value;\n}\n// EXTERNAL MODULE: ./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\nvar hoist_non_react_statics_cjs = __webpack_require__(5706);\nvar hoist_non_react_statics_cjs_default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics_cjs);\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(7294);\n;// CONCATENATED MODULE: ./node_modules/@sentry/react/esm/profiler.js\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\n\n\n\nvar UNKNOWN_COMPONENT = 'unknown';\nvar TRACING_GETTER = {\n id: 'Tracing'\n};\nvar globalTracingIntegration = null;\n/** @deprecated remove when @sentry/apm no longer used */\n\nvar getTracingIntegration = function getTracingIntegration() {\n if (globalTracingIntegration) {\n return globalTracingIntegration;\n }\n\n globalTracingIntegration = (0,esm_hub/* getCurrentHub */.Gd)().getIntegration(TRACING_GETTER);\n return globalTracingIntegration;\n};\n/**\n * pushActivity creates an new react activity.\n * Is a no-op if Tracing integration is not valid\n * @param name displayName of component that started activity\n * @deprecated remove when @sentry/apm no longer used\n */\n\n\nfunction pushActivity(name, op) {\n if (globalTracingIntegration === null) {\n return null;\n }\n\n return globalTracingIntegration.constructor.pushActivity(name, {\n description: \"<\" + name + \">\",\n op: \"react.\" + op\n });\n}\n/**\n * popActivity removes a React activity.\n * Is a no-op if Tracing integration is not valid.\n * @param activity id of activity that is being popped\n * @deprecated remove when @sentry/apm no longer used\n */\n\n\nfunction popActivity(activity) {\n if (activity === null || globalTracingIntegration === null) {\n return;\n }\n\n globalTracingIntegration.constructor.popActivity(activity);\n}\n/**\n * Obtain a span given an activity id.\n * Is a no-op if Tracing integration is not valid.\n * @param activity activity id associated with obtained span\n * @deprecated remove when @sentry/apm no longer used\n */\n\n\nfunction getActivitySpan(activity) {\n if (activity === null || globalTracingIntegration === null) {\n return undefined;\n }\n\n return globalTracingIntegration.constructor.getActivitySpan(activity);\n}\n/**\n * The Profiler component leverages Sentry's Tracing integration to generate\n * spans based on component lifecycles.\n */\n\n\nvar Profiler =\n/** @class */\nfunction (_super) {\n node_modules_tslib_tslib_es6_extends(Profiler, _super);\n\n function Profiler(props) {\n var _this = _super.call(this, props) || this;\n /**\n * The span of the mount activity\n * Made protected for the React Native SDK to access\n */\n\n\n _this._mountSpan = undefined; // The activity representing how long it takes to mount a component.\n\n _this._mountActivity = null;\n var _a = _this.props,\n name = _a.name,\n _b = _a.disabled,\n disabled = _b === void 0 ? false : _b;\n\n if (disabled) {\n return _this;\n } // If they are using @sentry/apm, we need to push/pop activities\n // eslint-disable-next-line deprecation/deprecation\n\n\n if (getTracingIntegration()) {\n // eslint-disable-next-line deprecation/deprecation\n _this._mountActivity = pushActivity(name, 'mount');\n } else {\n var activeTransaction = getActiveTransaction();\n\n if (activeTransaction) {\n _this._mountSpan = activeTransaction.startChild({\n description: \"<\" + name + \">\",\n op: 'react.mount'\n });\n }\n }\n\n return _this;\n } // If a component mounted, we can finish the mount activity.\n\n\n Profiler.prototype.componentDidMount = function () {\n if (this._mountSpan) {\n this._mountSpan.finish();\n } else {\n // eslint-disable-next-line deprecation/deprecation\n this._mountSpan = getActivitySpan(this._mountActivity); // eslint-disable-next-line deprecation/deprecation\n\n popActivity(this._mountActivity);\n this._mountActivity = null;\n }\n };\n\n Profiler.prototype.componentDidUpdate = function (_a) {\n var _this = this;\n\n var updateProps = _a.updateProps,\n _b = _a.includeUpdates,\n includeUpdates = _b === void 0 ? true : _b; // Only generate an update span if hasUpdateSpan is true, if there is a valid mountSpan,\n // and if the updateProps have changed. It is ok to not do a deep equality check here as it is expensive.\n // We are just trying to give baseline clues for further investigation.\n\n if (includeUpdates && this._mountSpan && updateProps !== this.props.updateProps) {\n // See what props haved changed between the previous props, and the current props. This is\n // set as data on the span. We just store the prop keys as the values could be potenially very large.\n var changedProps = Object.keys(updateProps).filter(function (k) {\n return updateProps[k] !== _this.props.updateProps[k];\n });\n\n if (changedProps.length > 0) {\n // The update span is a point in time span with 0 duration, just signifying that the component\n // has been updated.\n var now = (0,time/* timestampWithMs */._I)();\n\n this._mountSpan.startChild({\n data: {\n changedProps: changedProps\n },\n description: \"<\" + this.props.name + \">\",\n endTimestamp: now,\n op: \"react.update\",\n startTimestamp: now\n });\n }\n }\n }; // If a component is unmounted, we can say it is no longer on the screen.\n // This means we can finish the span representing the component render.\n\n\n Profiler.prototype.componentWillUnmount = function () {\n var _a = this.props,\n name = _a.name,\n _b = _a.includeRender,\n includeRender = _b === void 0 ? true : _b;\n\n if (this._mountSpan && includeRender) {\n // If we were able to obtain the spanId of the mount activity, we should set the\n // next activity as a child to the component mount activity.\n this._mountSpan.startChild({\n description: \"<\" + name + \">\",\n endTimestamp: (0,time/* timestampWithMs */._I)(),\n op: \"react.render\",\n startTimestamp: this._mountSpan.endTimestamp\n });\n }\n };\n\n Profiler.prototype.render = function () {\n return this.props.children;\n }; // eslint-disable-next-line @typescript-eslint/member-ordering\n\n\n Profiler.defaultProps = {\n disabled: false,\n includeRender: true,\n includeUpdates: true\n };\n return Profiler;\n}(react.Component);\n/**\n * withProfiler is a higher order component that wraps a\n * component in a {@link Profiler} component. It is recommended that\n * the higher order component be used over the regular {@link Profiler} component.\n *\n * @param WrappedComponent component that is wrapped by Profiler\n * @param options the {@link ProfilerProps} you can pass into the Profiler\n */\n\n\nfunction withProfiler(WrappedComponent, // We do not want to have `updateProps` given in options, it is instead filled through the HOC.\noptions) {\n var componentDisplayName = options && options.name || WrappedComponent.displayName || WrappedComponent.name || UNKNOWN_COMPONENT;\n\n var Wrapped = function Wrapped(props) {\n return react.createElement(Profiler, node_modules_tslib_tslib_es6_assign({}, options, {\n name: componentDisplayName,\n updateProps: props\n }), react.createElement(WrappedComponent, node_modules_tslib_tslib_es6_assign({}, props)));\n };\n\n Wrapped.displayName = \"profiler(\" + componentDisplayName + \")\"; // Copy over static methods from Wrapped component to Profiler HOC\n // See: https://reactjs.org/docs/higher-order-components.html#static-methods-must-be-copied-over\n\n hoist_non_react_statics_cjs_default()(Wrapped, WrappedComponent);\n return Wrapped;\n}\n/**\n *\n * `useProfiler` is a React hook that profiles a React component.\n *\n * Requires React 16.8 or above.\n * @param name displayName of component being profiled\n */\n\n\nfunction useProfiler(name, options) {\n if (options === void 0) {\n options = {\n disabled: false,\n hasRenderSpan: true\n };\n }\n\n var _a = node_modules_tslib_tslib_es6_read(react.useState(function () {\n if (options && options.disabled) {\n return undefined;\n }\n\n var activeTransaction = getActiveTransaction();\n\n if (activeTransaction) {\n return activeTransaction.startChild({\n description: \"<\" + name + \">\",\n op: 'react.mount'\n });\n }\n\n return undefined;\n }), 1),\n mountSpan = _a[0];\n\n react.useEffect(function () {\n if (mountSpan) {\n mountSpan.finish();\n }\n\n return function () {\n if (mountSpan && options.hasRenderSpan) {\n mountSpan.startChild({\n description: \"<\" + name + \">\",\n endTimestamp: (0,time/* timestampWithMs */._I)(),\n op: \"react.render\",\n startTimestamp: mountSpan.endTimestamp\n });\n }\n }; // We only want this to run once.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n\n\n/** Grabs active transaction off scope */\n\nfunction getActiveTransaction(hub) {\n if (hub === void 0) {\n hub = (0,esm_hub/* getCurrentHub */.Gd)();\n }\n\n if (hub) {\n var scope = hub.getScope();\n\n if (scope) {\n return scope.getTransaction();\n }\n }\n\n return undefined;\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/react/esm/errorboundary.js\n\n\n\n\n\nvar reactVersion = (0,misc/* parseSemver */.J4)(react.version);\nvar errorboundary_UNKNOWN_COMPONENT = 'unknown';\nvar INITIAL_STATE = {\n componentStack: null,\n error: null,\n eventId: null\n};\n/**\n * Logs react error boundary errors to Sentry. If on React version >= 17, creates stack trace\n * from componentStack param, otherwise relies on error param for stacktrace.\n *\n * @param error An error captured by React Error Boundary\n * @param componentStack The component stacktrace\n */\n\nfunction captureReactErrorBoundaryError(error, componentStack) {\n var errorBoundaryError = new Error(error.message);\n errorBoundaryError.name = \"React ErrorBoundary \" + errorBoundaryError.name;\n errorBoundaryError.stack = componentStack;\n var errorBoundaryEvent = {};\n void eventFromException({}, errorBoundaryError).then(function (e) {\n errorBoundaryEvent = e;\n });\n\n if (errorBoundaryEvent.exception && Array.isArray(errorBoundaryEvent.exception.values) && reactVersion.major && reactVersion.major >= 17) {\n var originalEvent_1 = {};\n void eventFromException({}, error).then(function (e) {\n originalEvent_1 = e;\n });\n\n if (originalEvent_1.exception && Array.isArray(originalEvent_1.exception.values)) {\n originalEvent_1.exception.values = react_node_modules_tslib_tslib_es6_spread(errorBoundaryEvent.exception.values, originalEvent_1.exception.values);\n }\n\n return captureEvent(originalEvent_1);\n }\n\n return captureException(error, {\n contexts: {\n react: {\n componentStack: componentStack\n }\n }\n });\n}\n/**\n * A ErrorBoundary component that logs errors to Sentry. Requires React >= 16.\n * NOTE: If you are a Sentry user, and you are seeing this stack frame, it means the\n * Sentry React SDK ErrorBoundary caught an error invoking your application code. This\n * is expected behavior and NOT indicative of a bug with the Sentry React SDK.\n */\n\n\nvar ErrorBoundary =\n/** @class */\nfunction (_super) {\n node_modules_tslib_tslib_es6_extends(ErrorBoundary, _super);\n\n function ErrorBoundary() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.state = INITIAL_STATE;\n\n _this.resetErrorBoundary = function () {\n var onReset = _this.props.onReset;\n var _a = _this.state,\n error = _a.error,\n componentStack = _a.componentStack,\n eventId = _a.eventId;\n\n if (onReset) {\n onReset(error, componentStack, eventId);\n }\n\n _this.setState(INITIAL_STATE);\n };\n\n return _this;\n }\n\n ErrorBoundary.prototype.componentDidCatch = function (error, _a) {\n var _this = this;\n\n var componentStack = _a.componentStack;\n var _b = this.props,\n beforeCapture = _b.beforeCapture,\n onError = _b.onError,\n showDialog = _b.showDialog,\n dialogOptions = _b.dialogOptions;\n withScope(function (scope) {\n if (beforeCapture) {\n beforeCapture(scope, error, componentStack);\n }\n\n var eventId = captureReactErrorBoundaryError(error, componentStack);\n\n if (onError) {\n onError(error, componentStack, eventId);\n }\n\n if (showDialog) {\n showReportDialog(node_modules_tslib_tslib_es6_assign(node_modules_tslib_tslib_es6_assign({}, dialogOptions), {\n eventId: eventId\n }));\n } // componentDidCatch is used over getDerivedStateFromError\n // so that componentStack is accessible through state.\n\n\n _this.setState({\n error: error,\n componentStack: componentStack,\n eventId: eventId\n });\n });\n };\n\n ErrorBoundary.prototype.componentDidMount = function () {\n var onMount = this.props.onMount;\n\n if (onMount) {\n onMount();\n }\n };\n\n ErrorBoundary.prototype.componentWillUnmount = function () {\n var _a = this.state,\n error = _a.error,\n componentStack = _a.componentStack,\n eventId = _a.eventId;\n var onUnmount = this.props.onUnmount;\n\n if (onUnmount) {\n onUnmount(error, componentStack, eventId);\n }\n };\n\n ErrorBoundary.prototype.render = function () {\n var _a = this.props,\n fallback = _a.fallback,\n children = _a.children;\n var _b = this.state,\n error = _b.error,\n componentStack = _b.componentStack,\n eventId = _b.eventId;\n\n if (error) {\n var element = undefined;\n\n if (typeof fallback === 'function') {\n element = fallback({\n error: error,\n componentStack: componentStack,\n resetError: this.resetErrorBoundary,\n eventId: eventId\n });\n } else {\n element = fallback;\n }\n\n if (react.isValidElement(element)) {\n return element;\n }\n\n if (fallback) {\n logger/* logger.warn */.k.warn('fallback did not produce a valid ReactElement');\n } // Fail gracefully if no fallback provided or is not valid\n\n\n return null;\n }\n\n if (typeof children === 'function') {\n return children();\n }\n\n return children;\n };\n\n return ErrorBoundary;\n}(react.Component); // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\nfunction withErrorBoundary(WrappedComponent, errorBoundaryOptions) {\n var componentDisplayName = WrappedComponent.displayName || WrappedComponent.name || errorboundary_UNKNOWN_COMPONENT;\n\n var Wrapped = function Wrapped(props) {\n return react.createElement(ErrorBoundary, node_modules_tslib_tslib_es6_assign({}, errorBoundaryOptions), react.createElement(WrappedComponent, node_modules_tslib_tslib_es6_assign({}, props)));\n };\n\n Wrapped.displayName = \"errorBoundary(\" + componentDisplayName + \")\"; // Copy over static methods from Wrapped component to Profiler HOC\n // See: https://reactjs.org/docs/higher-order-components.html#static-methods-must-be-copied-over\n\n hoist_non_react_statics_cjs_default()(Wrapped, WrappedComponent);\n return Wrapped;\n}\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/react/esm/redux.js\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nvar ACTION_BREADCRUMB_CATEGORY = 'redux.action';\nvar ACTION_BREADCRUMB_TYPE = 'info';\nvar STATE_CONTEXT_KEY = 'redux.state';\nvar defaultOptions = {\n actionTransformer: function actionTransformer(action) {\n return action;\n },\n stateTransformer: function stateTransformer(state) {\n return state || null;\n }\n};\n/**\n * Creates an enhancer that would be passed to Redux's createStore to log actions and the latest state to Sentry.\n *\n * @param enhancerOptions Options to pass to the enhancer\n */\n\nfunction createReduxEnhancer(enhancerOptions) {\n // Note: We return an any type as to not have type conflicts.\n var options = node_modules_tslib_tslib_es6_assign(node_modules_tslib_tslib_es6_assign({}, defaultOptions), enhancerOptions);\n\n return function (next) {\n return function (reducer, initialState) {\n var sentryReducer = function sentryReducer(state, action) {\n var newState = reducer(state, action);\n configureScope(function (scope) {\n /* Action breadcrumbs */\n var transformedAction = options.actionTransformer(action);\n\n if (typeof transformedAction !== 'undefined' && transformedAction !== null) {\n scope.addBreadcrumb({\n category: ACTION_BREADCRUMB_CATEGORY,\n data: transformedAction,\n type: ACTION_BREADCRUMB_TYPE\n });\n }\n /* Set latest state to scope */\n\n\n var transformedState = options.stateTransformer(newState);\n\n if (typeof transformedState !== 'undefined' && transformedState !== null) {\n scope.setContext(STATE_CONTEXT_KEY, transformedState);\n } else {\n scope.setContext(STATE_CONTEXT_KEY, null);\n }\n /* Allow user to configure scope with latest state */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n\n\n var configureScopeWithState = options.configureScopeWithState;\n\n if (typeof configureScopeWithState === 'function') {\n configureScopeWithState(scope, newState);\n }\n });\n return newState;\n };\n\n return next(sentryReducer, initialState);\n };\n };\n}\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/react/esm/reactrouterv3.js\n\nvar reactrouterv3_global = (0,misc/* getGlobalObject */.Rf)();\n/**\n * Creates routing instrumentation for React Router v3\n * Works for React Router >= 3.2.0 and < 4.0.0\n *\n * @param history object from the `history` library\n * @param routes a list of all routes, should be\n * @param match `Router.match` utility\n */\n\nfunction reactRouterV3Instrumentation(history, routes, match) {\n return function (startTransaction, startTransactionOnPageLoad, startTransactionOnLocationChange) {\n if (startTransactionOnPageLoad === void 0) {\n startTransactionOnPageLoad = true;\n }\n\n if (startTransactionOnLocationChange === void 0) {\n startTransactionOnLocationChange = true;\n }\n\n var activeTransaction;\n var prevName; // Have to use global.location because history.location might not be defined.\n\n if (startTransactionOnPageLoad && reactrouterv3_global && reactrouterv3_global.location) {\n normalizeTransactionName(routes, reactrouterv3_global.location, match, function (localName) {\n prevName = localName;\n activeTransaction = startTransaction({\n name: prevName,\n op: 'pageload',\n tags: {\n 'routing.instrumentation': 'react-router-v3'\n }\n });\n });\n }\n\n if (startTransactionOnLocationChange && history.listen) {\n history.listen(function (location) {\n if (location.action === 'PUSH' || location.action === 'POP') {\n if (activeTransaction) {\n activeTransaction.finish();\n }\n\n var tags_1 = {\n 'routing.instrumentation': 'react-router-v3'\n };\n\n if (prevName) {\n tags_1.from = prevName;\n }\n\n normalizeTransactionName(routes, location, match, function (localName) {\n prevName = localName;\n activeTransaction = startTransaction({\n name: prevName,\n op: 'navigation',\n tags: tags_1\n });\n });\n }\n });\n }\n };\n}\n/**\n * Normalize transaction names using `Router.match`\n */\n\nfunction normalizeTransactionName(appRoutes, location, match, callback) {\n var name = location.pathname;\n match({\n location: location,\n routes: appRoutes\n }, function (error, _redirectLocation, renderProps) {\n if (error || !renderProps) {\n return callback(name);\n }\n\n var routePath = getRouteStringFromRoutes(renderProps.routes || []);\n\n if (routePath.length === 0 || routePath === '/*') {\n return callback(name);\n }\n\n name = routePath;\n return callback(name);\n });\n}\n/**\n * Generate route name from array of routes\n */\n\n\nfunction getRouteStringFromRoutes(routes) {\n if (!Array.isArray(routes) || routes.length === 0) {\n return '';\n }\n\n var routesWithPaths = routes.filter(function (route) {\n return !!route.path;\n });\n var index = -1;\n\n for (var x = routesWithPaths.length - 1; x >= 0; x--) {\n var route = routesWithPaths[x];\n\n if (route.path && route.path.startsWith('/')) {\n index = x;\n break;\n }\n }\n\n return routesWithPaths.slice(index).filter(function (_a) {\n var path = _a.path;\n return !!path;\n }).map(function (_a) {\n var path = _a.path;\n return path;\n }).join('');\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/react/esm/reactrouter.js\n\n\n\n\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nvar reactrouter_global = (0,misc/* getGlobalObject */.Rf)();\nvar activeTransaction;\nfunction reactRouterV4Instrumentation(history, routes, matchPath) {\n return createReactRouterInstrumentation(history, 'react-router-v4', routes, matchPath);\n}\nfunction reactRouterV5Instrumentation(history, routes, matchPath) {\n return createReactRouterInstrumentation(history, 'react-router-v5', routes, matchPath);\n}\n\nfunction createReactRouterInstrumentation(history, name, allRoutes, matchPath) {\n if (allRoutes === void 0) {\n allRoutes = [];\n }\n\n function getInitPathName() {\n if (history && history.location) {\n return history.location.pathname;\n }\n\n if (reactrouter_global && reactrouter_global.location) {\n return reactrouter_global.location.pathname;\n }\n\n return undefined;\n }\n\n function getTransactionName(pathname) {\n if (allRoutes.length === 0 || !matchPath) {\n return pathname;\n }\n\n var branches = matchRoutes(allRoutes, pathname, matchPath); // eslint-disable-next-line @typescript-eslint/prefer-for-of\n\n for (var x = 0; x < branches.length; x++) {\n if (branches[x].match.isExact) {\n return branches[x].match.path;\n }\n }\n\n return pathname;\n }\n\n return function (customStartTransaction, startTransactionOnPageLoad, startTransactionOnLocationChange) {\n if (startTransactionOnPageLoad === void 0) {\n startTransactionOnPageLoad = true;\n }\n\n if (startTransactionOnLocationChange === void 0) {\n startTransactionOnLocationChange = true;\n }\n\n var initPathName = getInitPathName();\n\n if (startTransactionOnPageLoad && initPathName) {\n activeTransaction = customStartTransaction({\n name: getTransactionName(initPathName),\n op: 'pageload',\n tags: {\n 'routing.instrumentation': name\n }\n });\n }\n\n if (startTransactionOnLocationChange && history.listen) {\n history.listen(function (location, action) {\n if (action && (action === 'PUSH' || action === 'POP')) {\n if (activeTransaction) {\n activeTransaction.finish();\n }\n\n var tags = {\n 'routing.instrumentation': name\n };\n activeTransaction = customStartTransaction({\n name: getTransactionName(location.pathname),\n op: 'navigation',\n tags: tags\n });\n }\n });\n }\n };\n}\n/**\n * Matches a set of routes to a pathname\n * Based on implementation from\n */\n\n\nfunction matchRoutes(routes, pathname, matchPath, branch) {\n if (branch === void 0) {\n branch = [];\n }\n\n routes.some(function (route) {\n var match = route.path ? matchPath(pathname, route) : branch.length ? branch[branch.length - 1].match // use parent match\n : computeRootMatch(pathname); // use default \"root\" match\n\n if (match) {\n branch.push({\n route: route,\n match: match\n });\n\n if (route.routes) {\n matchRoutes(route.routes, pathname, matchPath, branch);\n }\n }\n\n return !!match;\n });\n return branch;\n}\n\nfunction computeRootMatch(pathname) {\n return {\n path: '/',\n url: '/',\n params: {},\n isExact: pathname === '/'\n };\n}\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nfunction withSentryRouting(Route) {\n var componentDisplayName = Route.displayName || Route.name;\n\n var WrappedRoute = function WrappedRoute(props) {\n if (activeTransaction && props && props.computedMatch && props.computedMatch.isExact) {\n activeTransaction.setName(props.computedMatch.path);\n } // @ts-ignore Setting more specific React Component typing for `R` generic above\n // will break advanced type inference done by react router params:\n // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/13dc4235c069e25fe7ee16e11f529d909f9f3ff8/types/react-router/index.d.ts#L154-L164\n\n\n return react.createElement(Route, node_modules_tslib_tslib_es6_assign({}, props));\n };\n\n WrappedRoute.displayName = \"sentryRoute(\" + componentDisplayName + \")\";\n hoist_non_react_statics_cjs_default()(WrappedRoute, Route); // @ts-ignore Setting more specific React Component typing for `R` generic above\n // will break advanced type inference done by react router params:\n // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/13dc4235c069e25fe7ee16e11f529d909f9f3ff8/types/react-router/index.d.ts#L154-L164\n\n return WrappedRoute;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n;// CONCATENATED MODULE: ./node_modules/@sentry/react/esm/index.js\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcz9hYTE3Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHlwZXMvZXNtL3NldmVyaXR5LmpzP2IyMTciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90eXBlcy9lc20vc3RhdHVzLmpzPzk3OTEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9taW5pbWFsL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanM/NmIyNSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L21pbmltYWwvZXNtL2luZGV4LmpzPzE2MzQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2VzbS92ZXJzaW9uLmpzPzM0OGYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanM/MTk0YiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9wb2x5ZmlsbC5qcz84M2JjIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvZXNtL2Vycm9yLmpzP2E4ODIiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9lc20vZHNuLmpzP2E4YzIiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2VzbS9pbnRlZ3JhdGlvbi5qcz84YmM4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vYmFzZWNsaWVudC5qcz8zYTFiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vdHJhbnNwb3J0cy9ub29wLmpzPzM3NDkiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2VzbS9iYXNlYmFja2VuZC5qcz9iMDVmIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vdHJhY2VraXQuanM/MjY2MCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvZXNtL3BhcnNlcnMuanM/Yzc1NSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvZXNtL2V2ZW50YnVpbGRlci5qcz9hODIwIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vcmVxdWVzdC5qcz9iZGZkIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vYXBpLmpzPzM2YjciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9lc20vcHJvbWlzZWJ1ZmZlci5qcz8yMmQ2Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vdHJhbnNwb3J0cy9iYXNlLmpzPzc1MmIiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2VzbS90cmFuc3BvcnRzL2ZldGNoLmpzP2Q0Y2MiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2VzbS90cmFuc3BvcnRzL3hoci5qcz8yY2M0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vYmFja2VuZC5qcz9lNjZkIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaGVscGVycy5qcz9kMjRhIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaW50ZWdyYXRpb25zL2JyZWFkY3J1bWJzLmpzPzdkYjUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2VzbS9jbGllbnQuanM/MTQ5MyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvZXNtL3Nkay5qcz84ODg4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vaW50ZWdyYXRpb25zL2luYm91bmRmaWx0ZXJzLmpzP2E1MWIiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2VzbS9pbnRlZ3JhdGlvbnMvZnVuY3Rpb250b3N0cmluZy5qcz8zMjQwIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vaW50ZWdyYXRpb25zL3RyeWNhdGNoLmpzPzhiMmUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2VzbS9pbnRlZ3JhdGlvbnMvZ2xvYmFsaGFuZGxlcnMuanM/ZjUwOCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvZXNtL2ludGVncmF0aW9ucy9saW5rZWRlcnJvcnMuanM/MjUyYSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvZXNtL2ludGVncmF0aW9ucy9kZWR1cGUuanM/NTFkYSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvZXNtL2ludGVncmF0aW9ucy91c2VyYWdlbnQuanM/MzZlYiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvZXNtL3Nkay5qcz9lZDI3Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vdmVyc2lvbi5qcz8xOTUxIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9lc20vZXhwb3J0cy5qcz9lNDY3Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9lc20vaW50ZWdyYXRpb25zL2luZGV4LmpzPzE5ZjUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2VzbS9pbnRlZ3JhdGlvbnMvaW5kZXguanM/YTRmMSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvZXNtL3RyYW5zcG9ydHMvaW5kZXguanM/N2E4MyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvZXNtL2luZGV4LmpzP2VkMzYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9yZWFjdC9lc20vc2RrLmpzPzNiN2QiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9yZWFjdC9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzPzZhM2EiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9yZWFjdC9lc20vcHJvZmlsZXIuanM/ZGNjNSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3JlYWN0L2VzbS9lcnJvcmJvdW5kYXJ5LmpzPzg5ZDUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9yZWFjdC9lc20vcmVkdXguanM/NjM3ZiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3JlYWN0L2VzbS9yZWFjdHJvdXRlcnYzLmpzP2NlYmIiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9yZWFjdC9lc20vcmVhY3Ryb3V0ZXIuanM/ZDQ2NiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3JlYWN0L2VzbS9pbmRleC5qcz85M2M1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFD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QUFhLGtCQUFNO0FBQ25COztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0RBQStEOztBQUUvRCxtQkFBbUIscUJBQXFCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBLFdBQVcsbUJBQW1CLFFBQVEsbUNBQVEsR0FBRztBQUNqRDs7QUFFQTtBQUNBLEVBQUUscUNBQW9CLHNCQUFzQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxzRDs7QUN4SmdDO0FBQ0g7QUFDb0M7QUFDRTtBQUNyQjtBQUNpQiIsImZpbGUiOiI3MDY2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cbnZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgX19wcm90b19fOiBbXVxuICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBkLl9fcHJvdG9fXyA9IGI7XG4gIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gIGZ1bmN0aW9uIF9fKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICB9XG5cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG52YXIgX2Fzc2lnbiA9IGZ1bmN0aW9uIF9fYXNzaWduKCkge1xuICBfYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBzID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBwIGluIHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHQ7XG4gIH07XG5cbiAgcmV0dXJuIF9hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5cbmV4cG9ydCB7IF9hc3NpZ24gYXMgX19hc3NpZ24gfTtcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuXG4gIGZvciAodmFyIHAgaW4gcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMCkgdFtwXSA9IHNbcF07XG4gIH1cblxuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpIHRbcFtpXV0gPSBzW3BbaV1dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsXG4gICAgICBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO2Vsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICB9XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG4gICAgfVxuXG4gICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0ge1xuICAgIGxhYmVsOiAwLFxuICAgIHNlbnQ6IGZ1bmN0aW9uIHNlbnQoKSB7XG4gICAgICBpZiAodFswXSAmIDEpIHRocm93IHRbMV07XG4gICAgICByZXR1cm4gdFsxXTtcbiAgICB9LFxuICAgIHRyeXM6IFtdLFxuICAgIG9wczogW11cbiAgfSxcbiAgICAgIGYsXG4gICAgICB5LFxuICAgICAgdCxcbiAgICAgIGc7XG4gIHJldHVybiBnID0ge1xuICAgIG5leHQ6IHZlcmIoMCksXG4gICAgXCJ0aHJvd1wiOiB2ZXJiKDEpLFxuICAgIFwicmV0dXJuXCI6IHZlcmIoMilcbiAgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBnO1xuXG4gIGZ1bmN0aW9uIHZlcmIobikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIHN0ZXAoW24sIHZdKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcblxuICAgIHdoaWxlIChfKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcblxuICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHQgPSBvcDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgXy5sYWJlbCsrO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IG9wWzFdLFxuICAgICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIF8ubGFiZWwrKztcbiAgICAgICAgICAgIHkgPSBvcFsxXTtcbiAgICAgICAgICAgIG9wID0gWzBdO1xuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBvcCA9IF8ub3BzLnBvcCgpO1xuXG4gICAgICAgICAgICBfLnRyeXMucG9wKCk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICAgIF8gPSAwO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCBvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkge1xuICAgICAgICAgICAgICBfLmxhYmVsID0gb3BbMV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHtcbiAgICAgICAgICAgICAgXy5sYWJlbCA9IHRbMV07XG4gICAgICAgICAgICAgIHQgPSBvcDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7XG4gICAgICAgICAgICAgIF8ubGFiZWwgPSB0WzJdO1xuXG4gICAgICAgICAgICAgIF8ub3BzLnB1c2gob3ApO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG5cbiAgICAgICAgICAgIF8udHJ5cy5wb3AoKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgb3AgPSBbNiwgZV07XG4gICAgICAgIHkgPSAwO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZiA9IHQgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCxcbiAgICAgIGRvbmU6IHRydWVcbiAgICB9O1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19jcmVhdGVCaW5kaW5nKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykge1xuICBmb3IgKHZhciBwIGluIG0pIHtcbiAgICBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsXG4gICAgICBtID0gcyAmJiBvW3NdLFxuICAgICAgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogbyAmJiBvW2krK10sXG4gICAgICAgIGRvbmU6ICFvXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksXG4gICAgICByLFxuICAgICAgYXIgPSBbXSxcbiAgICAgIGU7XG5cbiAgdHJ5IHtcbiAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkge1xuICAgICAgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZSA9IHtcbiAgICAgIGVycm9yOiBlcnJvclxuICAgIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXI7XG59XG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICB9XG5cbiAgcmV0dXJuIGFyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcbiAgICBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIH1cblxuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspIHtcbiAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKykge1xuICAgICAgcltrXSA9IGFbal07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHI7XG59XG47XG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLFxuICAgICAgaSxcbiAgICAgIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGk7XG5cbiAgZnVuY3Rpb24gdmVyYihuKSB7XG4gICAgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHtcbiAgICB0cnkge1xuICAgICAgc3RlcChnW25dKHYpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXR0bGUocVswXVszXSwgZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RlcChyKSB7XG4gICAgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7XG4gIH1cblxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7XG4gICAgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHtcbiAgICByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikge1xuICAgIGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICB0aHJvdyBlO1xuICB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuXG4gIGZ1bmN0aW9uIHZlcmIobiwgZikge1xuICAgIGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiAocCA9ICFwKSA/IHtcbiAgICAgICAgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksXG4gICAgICAgIGRvbmU6IG4gPT09IFwicmV0dXJuXCJcbiAgICAgIH0gOiBmID8gZih2KSA6IHY7XG4gICAgfSA6IGY7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxcbiAgICAgIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGkpO1xuXG4gIGZ1bmN0aW9uIHZlcmIobikge1xuICAgIGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgZG9uZTogZFxuICAgICAgfSk7XG4gICAgfSwgcmVqZWN0KTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7XG4gICAgICB2YWx1ZTogcmF3XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29va2VkLnJhdyA9IHJhdztcbiAgfVxuXG4gIHJldHVybiBjb29rZWQ7XG59XG47XG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIHtcbiAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xuICB9XG4gIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBkZWZhdWx0OiBtb2RcbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XG4gIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XG4gIH1cblxuICByZXR1cm4gcHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XG4gIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XG4gIH1cblxuICBwcml2YXRlTWFwLnNldChyZWNlaXZlciwgdmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59IiwiLyoqIEpTRG9jICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L2V4cG9ydFxuZXhwb3J0IHZhciBTZXZlcml0eTtcblxuKGZ1bmN0aW9uIChTZXZlcml0eSkge1xuICAvKiogSlNEb2MgKi9cbiAgU2V2ZXJpdHlbXCJGYXRhbFwiXSA9IFwiZmF0YWxcIjtcbiAgLyoqIEpTRG9jICovXG5cbiAgU2V2ZXJpdHlbXCJFcnJvclwiXSA9IFwiZXJyb3JcIjtcbiAgLyoqIEpTRG9jICovXG5cbiAgU2V2ZXJpdHlbXCJXYXJuaW5nXCJdID0gXCJ3YXJuaW5nXCI7XG4gIC8qKiBKU0RvYyAqL1xuXG4gIFNldmVyaXR5W1wiTG9nXCJdID0gXCJsb2dcIjtcbiAgLyoqIEpTRG9jICovXG5cbiAgU2V2ZXJpdHlbXCJJbmZvXCJdID0gXCJpbmZvXCI7XG4gIC8qKiBKU0RvYyAqL1xuXG4gIFNldmVyaXR5W1wiRGVidWdcIl0gPSBcImRlYnVnXCI7XG4gIC8qKiBKU0RvYyAqL1xuXG4gIFNldmVyaXR5W1wiQ3JpdGljYWxcIl0gPSBcImNyaXRpY2FsXCI7XG59KShTZXZlcml0eSB8fCAoU2V2ZXJpdHkgPSB7fSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZSwgaW1wb3J0L2V4cG9ydFxuXG5cbihmdW5jdGlvbiAoU2V2ZXJpdHkpIHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgc3RyaW5nLWJhc2VkIGxldmVsIGludG8gYSB7QGxpbmsgU2V2ZXJpdHl9LlxuICAgKlxuICAgKiBAcGFyYW0gbGV2ZWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIFNldmVyaXR5XG4gICAqIEByZXR1cm5zIFNldmVyaXR5XG4gICAqL1xuICBmdW5jdGlvbiBmcm9tU3RyaW5nKGxldmVsKSB7XG4gICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgY2FzZSAnZGVidWcnOlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuRGVidWc7XG5cbiAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuSW5mbztcblxuICAgICAgY2FzZSAnd2Fybic6XG4gICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgcmV0dXJuIFNldmVyaXR5Lldhcm5pbmc7XG5cbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgcmV0dXJuIFNldmVyaXR5LkVycm9yO1xuXG4gICAgICBjYXNlICdmYXRhbCc6XG4gICAgICAgIHJldHVybiBTZXZlcml0eS5GYXRhbDtcblxuICAgICAgY2FzZSAnY3JpdGljYWwnOlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuQ3JpdGljYWw7XG5cbiAgICAgIGNhc2UgJ2xvZyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuTG9nO1xuICAgIH1cbiAgfVxuXG4gIFNldmVyaXR5LmZyb21TdHJpbmcgPSBmcm9tU3RyaW5nO1xufSkoU2V2ZXJpdHkgfHwgKFNldmVyaXR5ID0ge30pKTsiLCIvKiogVGhlIHN0YXR1cyBvZiBhbiBldmVudC4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvZXhwb3J0XG5leHBvcnQgdmFyIFN0YXR1cztcblxuKGZ1bmN0aW9uIChTdGF0dXMpIHtcbiAgLyoqIFRoZSBzdGF0dXMgY291bGQgbm90IGJlIGRldGVybWluZWQuICovXG4gIFN0YXR1c1tcIlVua25vd25cIl0gPSBcInVua25vd25cIjtcbiAgLyoqIFRoZSBldmVudCB3YXMgc2tpcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBvciBjYWxsYmFja3MuICovXG5cbiAgU3RhdHVzW1wiU2tpcHBlZFwiXSA9IFwic2tpcHBlZFwiO1xuICAvKiogVGhlIGV2ZW50IHdhcyBzZW50IHRvIFNlbnRyeSBzdWNjZXNzZnVsbHkuICovXG5cbiAgU3RhdHVzW1wiU3VjY2Vzc1wiXSA9IFwic3VjY2Vzc1wiO1xuICAvKiogVGhlIGNsaWVudCBpcyBjdXJyZW50bHkgcmF0ZSBsaW1pdGVkIGFuZCB3aWxsIHRyeSBhZ2FpbiBsYXRlci4gKi9cblxuICBTdGF0dXNbXCJSYXRlTGltaXRcIl0gPSBcInJhdGVfbGltaXRcIjtcbiAgLyoqIFRoZSBldmVudCBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLiAqL1xuXG4gIFN0YXR1c1tcIkludmFsaWRcIl0gPSBcImludmFsaWRcIjtcbiAgLyoqIEEgc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN1Ym1pc3Npb24uICovXG5cbiAgU3RhdHVzW1wiRmFpbGVkXCJdID0gXCJmYWlsZWRcIjtcbn0pKFN0YXR1cyB8fCAoU3RhdHVzID0ge30pKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2UsIGltcG9ydC9leHBvcnRcblxuXG4oZnVuY3Rpb24gKFN0YXR1cykge1xuICAvKipcbiAgICogQ29udmVydHMgYSBIVFRQIHN0YXR1cyBjb2RlIGludG8gYSB7QGxpbmsgU3RhdHVzfS5cbiAgICpcbiAgICogQHBhcmFtIGNvZGUgVGhlIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGUuXG4gICAqIEByZXR1cm5zIFRoZSBzZW5kIHN0YXR1cyBvciB7QGxpbmsgU3RhdHVzLlVua25vd259LlxuICAgKi9cbiAgZnVuY3Rpb24gZnJvbUh0dHBDb2RlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA+PSAyMDAgJiYgY29kZSA8IDMwMCkge1xuICAgICAgcmV0dXJuIFN0YXR1cy5TdWNjZXNzO1xuICAgIH1cblxuICAgIGlmIChjb2RlID09PSA0MjkpIHtcbiAgICAgIHJldHVybiBTdGF0dXMuUmF0ZUxpbWl0O1xuICAgIH1cblxuICAgIGlmIChjb2RlID49IDQwMCAmJiBjb2RlIDwgNTAwKSB7XG4gICAgICByZXR1cm4gU3RhdHVzLkludmFsaWQ7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPj0gNTAwKSB7XG4gICAgICByZXR1cm4gU3RhdHVzLkZhaWxlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RhdHVzLlVua25vd247XG4gIH1cblxuICBTdGF0dXMuZnJvbUh0dHBDb2RlID0gZnJvbUh0dHBDb2RlO1xufSkoU3RhdHVzIHx8IChTdGF0dXMgPSB7fSkpOyIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXG52YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgIF9fcHJvdG9fXzogW11cbiAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZC5fX3Byb3RvX18gPSBiO1xuICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICBmdW5jdGlvbiBfXygpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgfVxuXG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxudmFyIF9hc3NpZ24gPSBmdW5jdGlvbiBfX2Fzc2lnbigpIHtcbiAgX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIHJldHVybiBfYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG5leHBvcnQgeyBfYXNzaWduIGFzIF9fYXNzaWduIH07XG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcblxuICBmb3IgKHZhciBwIGluIHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApIHRbcF0gPSBzW3BdO1xuICB9XG5cbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKSBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKSB0W3BbaV1dID0gc1twW2ldXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLFxuICAgICAgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgfVxuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpO1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHtcbiAgICBsYWJlbDogMCxcbiAgICBzZW50OiBmdW5jdGlvbiBzZW50KCkge1xuICAgICAgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdO1xuICAgICAgcmV0dXJuIHRbMV07XG4gICAgfSxcbiAgICB0cnlzOiBbXSxcbiAgICBvcHM6IFtdXG4gIH0sXG4gICAgICBmLFxuICAgICAgeSxcbiAgICAgIHQsXG4gICAgICBnO1xuICByZXR1cm4gZyA9IHtcbiAgICBuZXh0OiB2ZXJiKDApLFxuICAgIFwidGhyb3dcIjogdmVyYigxKSxcbiAgICBcInJldHVyblwiOiB2ZXJiKDIpXG4gIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZztcblxuICBmdW5jdGlvbiB2ZXJiKG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBzdGVwKFtuLCB2XSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG5cbiAgICB3aGlsZSAoXykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG5cbiAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0ID0gb3A7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIF8ubGFiZWwrKztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBvcFsxXSxcbiAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBfLmxhYmVsKys7XG4gICAgICAgICAgICB5ID0gb3BbMV07XG4gICAgICAgICAgICBvcCA9IFswXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgb3AgPSBfLm9wcy5wb3AoKTtcblxuICAgICAgICAgICAgXy50cnlzLnBvcCgpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkge1xuICAgICAgICAgICAgICBfID0gMDtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgb3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpIHtcbiAgICAgICAgICAgICAgXy5sYWJlbCA9IG9wWzFdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7XG4gICAgICAgICAgICAgIF8ubGFiZWwgPSB0WzFdO1xuICAgICAgICAgICAgICB0ID0gb3A7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkge1xuICAgICAgICAgICAgICBfLmxhYmVsID0gdFsyXTtcblxuICAgICAgICAgICAgICBfLm9wcy5wdXNoKG9wKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuXG4gICAgICAgICAgICBfLnRyeXMucG9wKCk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9wID0gWzYsIGVdO1xuICAgICAgICB5ID0gMDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGYgPSB0ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsXG4gICAgICBkb25lOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fY3JlYXRlQmluZGluZyhvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59XG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcbiAgZm9yICh2YXIgcCBpbiBtKSB7XG4gICAgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgbSA9IHMgJiYgb1tzXSxcbiAgICAgIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IG8gJiYgb1tpKytdLFxuICAgICAgICBkb25lOiAhb1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLFxuICAgICAgcixcbiAgICAgIGFyID0gW10sXG4gICAgICBlO1xuXG4gIHRyeSB7XG4gICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGUgPSB7XG4gICAgICBlcnJvcjogZXJyb3JcbiAgICB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgfVxuXG4gIHJldHVybiBhcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG4gICAgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICB9XG5cbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKSB7XG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspIHtcbiAgICAgIHJba10gPSBhW2pdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSxcbiAgICAgIGksXG4gICAgICBxID0gW107XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuXG4gIGZ1bmN0aW9uIHZlcmIobikge1xuICAgIGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0ZXAoZ1tuXSh2KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0dGxlKHFbMF1bM10sIGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZXAocikge1xuICAgIHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkge1xuICAgIHJlc3VtZShcIm5leHRcIiwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHtcbiAgICBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgdGhyb3cgZTtcbiAgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcblxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHtcbiAgICBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gKHAgPSAhcCkgPyB7XG4gICAgICAgIHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLFxuICAgICAgICBkb25lOiBuID09PSBcInJldHVyblwiXG4gICAgICB9IDogZiA/IGYodikgOiB2O1xuICAgIH0gOiBmO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sXG4gICAgICBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpKTtcblxuICBmdW5jdGlvbiB2ZXJiKG4pIHtcbiAgICBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikge1xuICAgIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgIGRvbmU6IGRcbiAgICAgIH0pO1xuICAgIH0sIHJlamVjdCk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwge1xuICAgICAgdmFsdWU6IHJhd1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvb2tlZC5yYXcgPSByYXc7XG4gIH1cblxuICByZXR1cm4gY29va2VkO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSB7XG4gICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgfVxuICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgZGVmYXVsdDogbW9kXG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xuICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xuICB9XG5cbiAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xuICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xuICB9XG5cbiAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufSIsImltcG9ydCB7IF9fYXNzaWduLCBfX3JlYWQsIF9fc3ByZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuLyoqXG4gKiBUaGlzIGNhbGxzIGEgZnVuY3Rpb24gb24gdGhlIGN1cnJlbnQgaHViLlxuICogQHBhcmFtIG1ldGhvZCBmdW5jdGlvbiB0byBjYWxsIG9uIGh1Yi5cbiAqIEBwYXJhbSBhcmdzIHRvIHBhc3MgdG8gZnVuY3Rpb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cbmZ1bmN0aW9uIGNhbGxPbkh1YihtZXRob2QpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcblxuICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgIGFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gIH1cblxuICB2YXIgaHViID0gZ2V0Q3VycmVudEh1YigpO1xuXG4gIGlmIChodWIgJiYgaHViW21ldGhvZF0pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJldHVybiBodWJbbWV0aG9kXS5hcHBseShodWIsIF9fc3ByZWFkKGFyZ3MpKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGh1YiBkZWZpbmVkIG9yIFwiICsgbWV0aG9kICsgXCIgd2FzIG5vdCBmb3VuZCBvbiB0aGUgaHViLCBwbGVhc2Ugb3BlbiBhIGJ1ZyByZXBvcnQuXCIpO1xufVxuLyoqXG4gKiBDYXB0dXJlcyBhbiBleGNlcHRpb24gZXZlbnQgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gZXhjZXB0aW9uIEFuIGV4Y2VwdGlvbi1saWtlIG9iamVjdC5cbiAqIEByZXR1cm5zIFRoZSBnZW5lcmF0ZWQgZXZlbnRJZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcblxuXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24sIGNhcHR1cmVDb250ZXh0KSB7XG4gIHZhciBzeW50aGV0aWNFeGNlcHRpb247XG5cbiAgdHJ5IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbnRyeSBzeW50aGV0aWNFeGNlcHRpb24nKTtcbiAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgc3ludGhldGljRXhjZXB0aW9uID0gZXhjZXB0aW9uO1xuICB9XG5cbiAgcmV0dXJuIGNhbGxPbkh1YignY2FwdHVyZUV4Y2VwdGlvbicsIGV4Y2VwdGlvbiwge1xuICAgIGNhcHR1cmVDb250ZXh0OiBjYXB0dXJlQ29udGV4dCxcbiAgICBvcmlnaW5hbEV4Y2VwdGlvbjogZXhjZXB0aW9uLFxuICAgIHN5bnRoZXRpY0V4Y2VwdGlvbjogc3ludGhldGljRXhjZXB0aW9uXG4gIH0pO1xufVxuLyoqXG4gKiBDYXB0dXJlcyBhIG1lc3NhZ2UgZXZlbnQgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzZW5kIHRvIFNlbnRyeS5cbiAqIEBwYXJhbSBsZXZlbCBEZWZpbmUgdGhlIGxldmVsIG9mIHRoZSBtZXNzYWdlLlxuICogQHJldHVybnMgVGhlIGdlbmVyYXRlZCBldmVudElkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlTWVzc2FnZShtZXNzYWdlLCBjYXB0dXJlQ29udGV4dCkge1xuICB2YXIgc3ludGhldGljRXhjZXB0aW9uO1xuXG4gIHRyeSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBzeW50aGV0aWNFeGNlcHRpb24gPSBleGNlcHRpb247XG4gIH0gLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJvdmlkZSBleHBsaWNpdCBzY29wZXMgdXBncmFkZSwgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3JpZ2luYWxcbiAgLy8gYXJpdHkgb2YgdGhlIGBjYXB0dXJlTWVzc2FnZShtZXNzYWdlLCBsZXZlbClgIG1ldGhvZC5cblxuXG4gIHZhciBsZXZlbCA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ3N0cmluZycgPyBjYXB0dXJlQ29udGV4dCA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvbnRleHQgPSB0eXBlb2YgY2FwdHVyZUNvbnRleHQgIT09ICdzdHJpbmcnID8ge1xuICAgIGNhcHR1cmVDb250ZXh0OiBjYXB0dXJlQ29udGV4dFxuICB9IDogdW5kZWZpbmVkO1xuICByZXR1cm4gY2FsbE9uSHViKCdjYXB0dXJlTWVzc2FnZScsIG1lc3NhZ2UsIGxldmVsLCBfX2Fzc2lnbih7XG4gICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsXG4gICAgc3ludGhldGljRXhjZXB0aW9uOiBzeW50aGV0aWNFeGNlcHRpb25cbiAgfSwgY29udGV4dCkpO1xufVxuLyoqXG4gKiBDYXB0dXJlcyBhIG1hbnVhbGx5IGNyZWF0ZWQgZXZlbnQgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIHNlbmQgdG8gU2VudHJ5LlxuICogQHJldHVybnMgVGhlIGdlbmVyYXRlZCBldmVudElkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGNhbGxPbkh1YignY2FwdHVyZUV2ZW50JywgZXZlbnQpO1xufVxuLyoqXG4gKiBDYWxsYmFjayB0byBzZXQgY29udGV4dCBpbmZvcm1hdGlvbiBvbnRvIHRoZSBzY29wZS5cbiAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIFNjb3BlLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVTY29wZShjYWxsYmFjaykge1xuICBjYWxsT25IdWIoJ2NvbmZpZ3VyZVNjb3BlJywgY2FsbGJhY2spO1xufVxuLyoqXG4gKiBSZWNvcmRzIGEgbmV3IGJyZWFkY3J1bWIgd2hpY2ggd2lsbCBiZSBhdHRhY2hlZCB0byBmdXR1cmUgZXZlbnRzLlxuICpcbiAqIEJyZWFkY3J1bWJzIHdpbGwgYmUgYWRkZWQgdG8gc3Vic2VxdWVudCBldmVudHMgdG8gcHJvdmlkZSBtb3JlIGNvbnRleHQgb25cbiAqIHVzZXIncyBhY3Rpb25zIHByaW9yIHRvIGFuIGVycm9yIG9yIGNyYXNoLlxuICpcbiAqIEBwYXJhbSBicmVhZGNydW1iIFRoZSBicmVhZGNydW1iIHRvIHJlY29yZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQnJlYWRjcnVtYihicmVhZGNydW1iKSB7XG4gIGNhbGxPbkh1YignYWRkQnJlYWRjcnVtYicsIGJyZWFkY3J1bWIpO1xufVxuLyoqXG4gKiBTZXRzIGNvbnRleHQgZGF0YSB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuICogQHBhcmFtIG5hbWUgb2YgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSBjb250ZXh0IEFueSBraW5kIG9mIGRhdGEuIFRoaXMgZGF0YSB3aWxsIGJlIG5vcm1hbGl6ZWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpIHtcbiAgY2FsbE9uSHViKCdzZXRDb250ZXh0JywgbmFtZSwgY29udGV4dCk7XG59XG4vKipcbiAqIFNldCBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIG1lcmdlZCBzZW50IGFzIGV4dHJhIGRhdGEgd2l0aCB0aGUgZXZlbnQuXG4gKiBAcGFyYW0gZXh0cmFzIEV4dHJhcyBvYmplY3QgdG8gbWVyZ2UgaW50byBjdXJyZW50IGNvbnRleHQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEV4dHJhcyhleHRyYXMpIHtcbiAgY2FsbE9uSHViKCdzZXRFeHRyYXMnLCBleHRyYXMpO1xufVxuLyoqXG4gKiBTZXQgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQgc2VudCBhcyB0YWdzIGRhdGEgd2l0aCB0aGUgZXZlbnQuXG4gKiBAcGFyYW0gdGFncyBUYWdzIGNvbnRleHQgb2JqZWN0IHRvIG1lcmdlIGludG8gY3VycmVudCBjb250ZXh0LlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUYWdzKHRhZ3MpIHtcbiAgY2FsbE9uSHViKCdzZXRUYWdzJywgdGFncyk7XG59XG4vKipcbiAqIFNldCBrZXk6dmFsdWUgdGhhdCB3aWxsIGJlIHNlbnQgYXMgZXh0cmEgZGF0YSB3aXRoIHRoZSBldmVudC5cbiAqIEBwYXJhbSBrZXkgU3RyaW5nIG9mIGV4dHJhXG4gKiBAcGFyYW0gZXh0cmEgQW55IGtpbmQgb2YgZGF0YS4gVGhpcyBkYXRhIHdpbGwgYmUgbm9ybWFsaXplZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0RXh0cmEoa2V5LCBleHRyYSkge1xuICBjYWxsT25IdWIoJ3NldEV4dHJhJywga2V5LCBleHRyYSk7XG59XG4vKipcbiAqIFNldCBrZXk6dmFsdWUgdGhhdCB3aWxsIGJlIHNlbnQgYXMgdGFncyBkYXRhIHdpdGggdGhlIGV2ZW50LlxuICpcbiAqIENhbiBhbHNvIGJlIHVzZWQgdG8gdW5zZXQgYSB0YWcsIGJ5IHBhc3NpbmcgYHVuZGVmaW5lZGAuXG4gKlxuICogQHBhcmFtIGtleSBTdHJpbmcga2V5IG9mIHRhZ1xuICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIHRhZ1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUYWcoa2V5LCB2YWx1ZSkge1xuICBjYWxsT25IdWIoJ3NldFRhZycsIGtleSwgdmFsdWUpO1xufVxuLyoqXG4gKiBVcGRhdGVzIHVzZXIgY29udGV4dCBpbmZvcm1hdGlvbiBmb3IgZnV0dXJlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gdXNlciBVc2VyIGNvbnRleHQgb2JqZWN0IHRvIGJlIHNldCBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBQYXNzIGBudWxsYCB0byB1bnNldCB0aGUgdXNlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0VXNlcih1c2VyKSB7XG4gIGNhbGxPbkh1Yignc2V0VXNlcicsIHVzZXIpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHNjb3BlIHdpdGggYW5kIGV4ZWN1dGVzIHRoZSBnaXZlbiBvcGVyYXRpb24gd2l0aGluLlxuICogVGhlIHNjb3BlIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBvbmNlIHRoZSBvcGVyYXRpb25cbiAqIGZpbmlzaGVzIG9yIHRocm93cy5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yOlxuICpcbiAqICAgICBwdXNoU2NvcGUoKTtcbiAqICAgICBjYWxsYmFjaygpO1xuICogICAgIHBvcFNjb3BlKCk7XG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBlbmNsb3NlZCBpbnRvIHB1c2gvcG9wU2NvcGUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTY29wZShjYWxsYmFjaykge1xuICBjYWxsT25IdWIoJ3dpdGhTY29wZScsIGNhbGxiYWNrKTtcbn1cbi8qKlxuICogQ2FsbHMgYSBmdW5jdGlvbiBvbiB0aGUgbGF0ZXN0IGNsaWVudC4gVXNlIHRoaXMgd2l0aCBjYXV0aW9uLCBpdCdzIG1lYW50IGFzXG4gKiBpbiBcImludGVybmFsXCIgaGVscGVyIHNvIHdlIGRvbid0IG5lZWQgdG8gZXhwb3NlIGV2ZXJ5IHBvc3NpYmxlIGZ1bmN0aW9uIGluXG4gKiB0aGUgc2hpbS4gSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdCB0aGUgY2xpZW50IGFjdHVhbGx5IGltcGxlbWVudHMgdGhlXG4gKiBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gY2FsbCBvbiB0aGUgY2xpZW50L2NsaWVudC5cbiAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjbGllbnQvZm9udGVuZC5cbiAqIEBoaWRkZW5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuZXhwb3J0IGZ1bmN0aW9uIF9jYWxsT25DbGllbnQobWV0aG9kKSB7XG4gIHZhciBhcmdzID0gW107XG5cbiAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICB9XG5cbiAgY2FsbE9uSHViLmFwcGx5KHZvaWQgMCwgX19zcHJlYWQoWydfaW52b2tlQ2xpZW50JywgbWV0aG9kXSwgYXJncykpO1xufVxuLyoqXG4gKiBTdGFydHMgYSBuZXcgYFRyYW5zYWN0aW9uYCBhbmQgcmV0dXJucyBpdC4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdG8gbWFudWFsIHRyYWNpbmcgaW5zdHJ1bWVudGF0aW9uLlxuICpcbiAqIEEgdHJlZSBzdHJ1Y3R1cmUgY2FuIGJlIGJ1aWx0IGJ5IGFkZGluZyBjaGlsZCBzcGFucyB0byB0aGUgdHJhbnNhY3Rpb24sIGFuZCBjaGlsZCBzcGFucyB0byBvdGhlciBzcGFucy4gVG8gc3RhcnQgYVxuICogbmV3IGNoaWxkIHNwYW4gd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBvciBhbnkgc3BhbiwgY2FsbCB0aGUgcmVzcGVjdGl2ZSBgLnN0YXJ0Q2hpbGQoKWAgbWV0aG9kLlxuICpcbiAqIEV2ZXJ5IGNoaWxkIHNwYW4gbXVzdCBiZSBmaW5pc2hlZCBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGlzIGZpbmlzaGVkLCBvdGhlcndpc2UgdGhlIHVuZmluaXNoZWQgc3BhbnMgYXJlIGRpc2NhcmRlZC5cbiAqXG4gKiBUaGUgdHJhbnNhY3Rpb24gbXVzdCBiZSBmaW5pc2hlZCB3aXRoIGEgY2FsbCB0byBpdHMgYC5maW5pc2goKWAgbWV0aG9kLCBhdCB3aGljaCBwb2ludCB0aGUgdHJhbnNhY3Rpb24gd2l0aCBhbGwgaXRzXG4gKiBmaW5pc2hlZCBjaGlsZCBzcGFucyB3aWxsIGJlIHNlbnQgdG8gU2VudHJ5LlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IFByb3BlcnRpZXMgb2YgdGhlIG5ldyBgVHJhbnNhY3Rpb25gLlxuICogQHBhcmFtIGN1c3RvbVNhbXBsaW5nQ29udGV4dCBJbmZvcm1hdGlvbiBnaXZlbiB0byB0aGUgdHJhbnNhY3Rpb24gc2FtcGxpbmcgZnVuY3Rpb24gKGFsb25nIHdpdGggY29udGV4dC1kZXBlbmRlbnRcbiAqIGRlZmF1bHQgdmFsdWVzKS4gU2VlIHtAbGluayBPcHRpb25zLnRyYWNlc1NhbXBsZXJ9LlxuICpcbiAqIEByZXR1cm5zIFRoZSB0cmFuc2FjdGlvbiB3aGljaCB3YXMganVzdCBzdGFydGVkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0VHJhbnNhY3Rpb24oY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KSB7XG4gIHJldHVybiBjYWxsT25IdWIoJ3N0YXJ0VHJhbnNhY3Rpb24nLCBfX2Fzc2lnbih7fSwgY29udGV4dCksIGN1c3RvbVNhbXBsaW5nQ29udGV4dCk7XG59IiwiZXhwb3J0IHZhciBTREtfVkVSU0lPTiA9ICc2LjEzLjInOyIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXG52YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgIF9fcHJvdG9fXzogW11cbiAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZC5fX3Byb3RvX18gPSBiO1xuICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICBmdW5jdGlvbiBfXygpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgfVxuXG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxudmFyIF9hc3NpZ24gPSBmdW5jdGlvbiBfX2Fzc2lnbigpIHtcbiAgX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIHJldHVybiBfYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG5leHBvcnQgeyBfYXNzaWduIGFzIF9fYXNzaWduIH07XG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcblxuICBmb3IgKHZhciBwIGluIHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApIHRbcF0gPSBzW3BdO1xuICB9XG5cbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKSBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKSB0W3BbaV1dID0gc1twW2ldXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLFxuICAgICAgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgfVxuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpO1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHtcbiAgICBsYWJlbDogMCxcbiAgICBzZW50OiBmdW5jdGlvbiBzZW50KCkge1xuICAgICAgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdO1xuICAgICAgcmV0dXJuIHRbMV07XG4gICAgfSxcbiAgICB0cnlzOiBbXSxcbiAgICBvcHM6IFtdXG4gIH0sXG4gICAgICBmLFxuICAgICAgeSxcbiAgICAgIHQsXG4gICAgICBnO1xuICByZXR1cm4gZyA9IHtcbiAgICBuZXh0OiB2ZXJiKDApLFxuICAgIFwidGhyb3dcIjogdmVyYigxKSxcbiAgICBcInJldHVyblwiOiB2ZXJiKDIpXG4gIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZztcblxuICBmdW5jdGlvbiB2ZXJiKG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBzdGVwKFtuLCB2XSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG5cbiAgICB3aGlsZSAoXykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG5cbiAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0ID0gb3A7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIF8ubGFiZWwrKztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBvcFsxXSxcbiAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBfLmxhYmVsKys7XG4gICAgICAgICAgICB5ID0gb3BbMV07XG4gICAgICAgICAgICBvcCA9IFswXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgb3AgPSBfLm9wcy5wb3AoKTtcblxuICAgICAgICAgICAgXy50cnlzLnBvcCgpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkge1xuICAgICAgICAgICAgICBfID0gMDtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgb3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpIHtcbiAgICAgICAgICAgICAgXy5sYWJlbCA9IG9wWzFdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7XG4gICAgICAgICAgICAgIF8ubGFiZWwgPSB0WzFdO1xuICAgICAgICAgICAgICB0ID0gb3A7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkge1xuICAgICAgICAgICAgICBfLmxhYmVsID0gdFsyXTtcblxuICAgICAgICAgICAgICBfLm9wcy5wdXNoKG9wKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuXG4gICAgICAgICAgICBfLnRyeXMucG9wKCk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9wID0gWzYsIGVdO1xuICAgICAgICB5ID0gMDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGYgPSB0ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsXG4gICAgICBkb25lOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fY3JlYXRlQmluZGluZyhvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59XG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcbiAgZm9yICh2YXIgcCBpbiBtKSB7XG4gICAgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgbSA9IHMgJiYgb1tzXSxcbiAgICAgIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IG8gJiYgb1tpKytdLFxuICAgICAgICBkb25lOiAhb1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLFxuICAgICAgcixcbiAgICAgIGFyID0gW10sXG4gICAgICBlO1xuXG4gIHRyeSB7XG4gICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGUgPSB7XG4gICAgICBlcnJvcjogZXJyb3JcbiAgICB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgfVxuXG4gIHJldHVybiBhcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG4gICAgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICB9XG5cbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKSB7XG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspIHtcbiAgICAgIHJba10gPSBhW2pdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSxcbiAgICAgIGksXG4gICAgICBxID0gW107XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuXG4gIGZ1bmN0aW9uIHZlcmIobikge1xuICAgIGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0ZXAoZ1tuXSh2KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0dGxlKHFbMF1bM10sIGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZXAocikge1xuICAgIHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkge1xuICAgIHJlc3VtZShcIm5leHRcIiwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHtcbiAgICBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgdGhyb3cgZTtcbiAgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcblxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHtcbiAgICBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gKHAgPSAhcCkgPyB7XG4gICAgICAgIHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLFxuICAgICAgICBkb25lOiBuID09PSBcInJldHVyblwiXG4gICAgICB9IDogZiA/IGYodikgOiB2O1xuICAgIH0gOiBmO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sXG4gICAgICBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpKTtcblxuICBmdW5jdGlvbiB2ZXJiKG4pIHtcbiAgICBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikge1xuICAgIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgIGRvbmU6IGRcbiAgICAgIH0pO1xuICAgIH0sIHJlamVjdCk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwge1xuICAgICAgdmFsdWU6IHJhd1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvb2tlZC5yYXcgPSByYXc7XG4gIH1cblxuICByZXR1cm4gY29va2VkO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSB7XG4gICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgfVxuICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgZGVmYXVsdDogbW9kXG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xuICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xuICB9XG5cbiAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xuICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xuICB9XG5cbiAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufSIsImV4cG9ydCB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKHtcbiAgX19wcm90b19fOiBbXVxufSBpbnN0YW5jZW9mIEFycmF5ID8gc2V0UHJvdG9PZiA6IG1peGluUHJvcGVydGllcyk7XG4vKipcbiAqIHNldFByb3RvdHlwZU9mIHBvbHlmaWxsIHVzaW5nIF9fcHJvdG9fX1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuXG5mdW5jdGlvbiBzZXRQcm90b09mKG9iaiwgcHJvdG8pIHtcbiAgLy8gQHRzLWlnbm9yZSBfX3Byb3RvX18gZG9lcyBub3QgZXhpc3Qgb24gb2JqXG4gIG9iai5fX3Byb3RvX18gPSBwcm90bztcbiAgcmV0dXJuIG9iajtcbn1cbi8qKlxuICogc2V0UHJvdG90eXBlT2YgcG9seWZpbGwgdXNpbmcgbWl4aW5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcblxuXG5mdW5jdGlvbiBtaXhpblByb3BlcnRpZXMob2JqLCBwcm90bykge1xuICBmb3IgKHZhciBwcm9wIGluIHByb3RvKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAvLyBAdHMtaWdub3JlIHR5cGVzY3JpcHQgY29tcGxhaW5zIGFib3V0IGluZGV4aW5nIHNvIHdlIHJlbW92ZVxuICAgICAgb2JqW3Byb3BdID0gcHJvdG9bcHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0iLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHNldFByb3RvdHlwZU9mIH0gZnJvbSAnLi9wb2x5ZmlsbCc7XG4vKiogQW4gZXJyb3IgZW1pdHRlZCBieSBTZW50cnkgU0RLcyBhbmQgcmVsYXRlZCB1dGlsaXRpZXMuICovXG5cbnZhciBTZW50cnlFcnJvciA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhTZW50cnlFcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBTZW50cnlFcnJvcihtZXNzYWdlKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSkgfHwgdGhpcztcblxuICAgIF90aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIF90aGlzLm5hbWUgPSBfbmV3VGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHNldFByb3RvdHlwZU9mKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIFNlbnRyeUVycm9yO1xufShFcnJvcik7XG5cbmV4cG9ydCB7IFNlbnRyeUVycm9yIH07IiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTZW50cnlFcnJvciB9IGZyb20gJy4vZXJyb3InO1xuLyoqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHBhcnNlIGEgRHNuLiAqL1xuXG52YXIgRFNOX1JFR0VYID0gL14oPzooXFx3Kyk6KVxcL1xcLyg/OihcXHcrKSg/OjooXFx3KykpP0ApKFtcXHcuLV0rKSg/OjooXFxkKykpP1xcLyguKykvO1xuLyoqIEVycm9yIG1lc3NhZ2UgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnSW52YWxpZCBEc24nO1xuLyoqIFRoZSBTZW50cnkgRHNuLCBpZGVudGlmeWluZyBhIFNlbnRyeSBpbnN0YW5jZSBhbmQgcHJvamVjdC4gKi9cblxudmFyIERzbiA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIC8qKiBDcmVhdGVzIGEgbmV3IERzbiBjb21wb25lbnQgKi9cbiAgZnVuY3Rpb24gRHNuKGZyb20pIHtcbiAgICBpZiAodHlwZW9mIGZyb20gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9mcm9tU3RyaW5nKGZyb20pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9mcm9tQ29tcG9uZW50cyhmcm9tKTtcbiAgICB9XG5cbiAgICB0aGlzLl92YWxpZGF0ZSgpO1xuICB9XG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEc24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCByZW5kZXIgdGhlIHB1YmxpYyByZXByZXNlbnRhdGlvbiB3aXRob3V0IHRoZSBwYXNzd29yZFxuICAgKiBjb21wb25lbnQuIFRvIGdldCB0aGUgZGVwcmVjYXRlZCBwcml2YXRlIHJlcHJlc2VudGF0aW9uLCBzZXQgYHdpdGhQYXNzd29yZGBcbiAgICogdG8gdHJ1ZS5cbiAgICpcbiAgICogQHBhcmFtIHdpdGhQYXNzd29yZCBXaGVuIHNldCB0byB0cnVlLCB0aGUgcGFzc3dvcmQgd2lsbCBiZSBpbmNsdWRlZC5cbiAgICovXG5cblxuICBEc24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKHdpdGhQYXNzd29yZCkge1xuICAgIGlmICh3aXRoUGFzc3dvcmQgPT09IHZvaWQgMCkge1xuICAgICAgd2l0aFBhc3N3b3JkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIF9hID0gdGhpcyxcbiAgICAgICAgaG9zdCA9IF9hLmhvc3QsXG4gICAgICAgIHBhdGggPSBfYS5wYXRoLFxuICAgICAgICBwYXNzID0gX2EucGFzcyxcbiAgICAgICAgcG9ydCA9IF9hLnBvcnQsXG4gICAgICAgIHByb2plY3RJZCA9IF9hLnByb2plY3RJZCxcbiAgICAgICAgcHJvdG9jb2wgPSBfYS5wcm90b2NvbCxcbiAgICAgICAgcHVibGljS2V5ID0gX2EucHVibGljS2V5O1xuXG4gICAgcmV0dXJuIHByb3RvY29sICsgXCI6Ly9cIiArIHB1YmxpY0tleSArICh3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IFwiOlwiICsgcGFzcyA6ICcnKSArIChcIkBcIiArIGhvc3QgKyAocG9ydCA/IFwiOlwiICsgcG9ydCA6ICcnKSArIFwiL1wiICsgKHBhdGggPyBwYXRoICsgXCIvXCIgOiBwYXRoKSArIHByb2plY3RJZCk7XG4gIH07XG4gIC8qKiBQYXJzZXMgYSBzdHJpbmcgaW50byB0aGlzIERzbi4gKi9cblxuXG4gIERzbi5wcm90b3R5cGUuX2Zyb21TdHJpbmcgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdmFyIG1hdGNoID0gRFNOX1JFR0VYLmV4ZWMoc3RyKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihFUlJPUl9NRVNTQUdFKTtcbiAgICB9XG5cbiAgICB2YXIgX2EgPSBfX3JlYWQobWF0Y2guc2xpY2UoMSksIDYpLFxuICAgICAgICBwcm90b2NvbCA9IF9hWzBdLFxuICAgICAgICBwdWJsaWNLZXkgPSBfYVsxXSxcbiAgICAgICAgX2IgPSBfYVsyXSxcbiAgICAgICAgcGFzcyA9IF9iID09PSB2b2lkIDAgPyAnJyA6IF9iLFxuICAgICAgICBob3N0ID0gX2FbM10sXG4gICAgICAgIF9jID0gX2FbNF0sXG4gICAgICAgIHBvcnQgPSBfYyA9PT0gdm9pZCAwID8gJycgOiBfYyxcbiAgICAgICAgbGFzdFBhdGggPSBfYVs1XTtcblxuICAgIHZhciBwYXRoID0gJyc7XG4gICAgdmFyIHByb2plY3RJZCA9IGxhc3RQYXRoO1xuICAgIHZhciBzcGxpdCA9IHByb2plY3RJZC5zcGxpdCgnLycpO1xuXG4gICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHBhdGggPSBzcGxpdC5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgICAgcHJvamVjdElkID0gc3BsaXQucG9wKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb2plY3RJZCkge1xuICAgICAgdmFyIHByb2plY3RNYXRjaCA9IHByb2plY3RJZC5tYXRjaCgvXlxcZCsvKTtcblxuICAgICAgaWYgKHByb2plY3RNYXRjaCkge1xuICAgICAgICBwcm9qZWN0SWQgPSBwcm9qZWN0TWF0Y2hbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZnJvbUNvbXBvbmVudHMoe1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBhc3M6IHBhc3MsXG4gICAgICBwYXRoOiBwYXRoLFxuICAgICAgcHJvamVjdElkOiBwcm9qZWN0SWQsXG4gICAgICBwb3J0OiBwb3J0LFxuICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgICAgcHVibGljS2V5OiBwdWJsaWNLZXlcbiAgICB9KTtcbiAgfTtcbiAgLyoqIE1hcHMgRHNuIGNvbXBvbmVudHMgaW50byB0aGlzIGluc3RhbmNlLiAqL1xuXG5cbiAgRHNuLnByb3RvdHlwZS5fZnJvbUNvbXBvbmVudHMgPSBmdW5jdGlvbiAoY29tcG9uZW50cykge1xuICAgIC8vIFRPRE8gdGhpcyBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGFuZCBjYW4gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uXG4gICAgaWYgKCd1c2VyJyBpbiBjb21wb25lbnRzICYmICEoJ3B1YmxpY0tleScgaW4gY29tcG9uZW50cykpIHtcbiAgICAgIGNvbXBvbmVudHMucHVibGljS2V5ID0gY29tcG9uZW50cy51c2VyO1xuICAgIH1cblxuICAgIHRoaXMudXNlciA9IGNvbXBvbmVudHMucHVibGljS2V5IHx8ICcnO1xuICAgIHRoaXMucHJvdG9jb2wgPSBjb21wb25lbnRzLnByb3RvY29sO1xuICAgIHRoaXMucHVibGljS2V5ID0gY29tcG9uZW50cy5wdWJsaWNLZXkgfHwgJyc7XG4gICAgdGhpcy5wYXNzID0gY29tcG9uZW50cy5wYXNzIHx8ICcnO1xuICAgIHRoaXMuaG9zdCA9IGNvbXBvbmVudHMuaG9zdDtcbiAgICB0aGlzLnBvcnQgPSBjb21wb25lbnRzLnBvcnQgfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gY29tcG9uZW50cy5wYXRoIHx8ICcnO1xuICAgIHRoaXMucHJvamVjdElkID0gY29tcG9uZW50cy5wcm9qZWN0SWQ7XG4gIH07XG4gIC8qKiBWYWxpZGF0ZXMgdGhpcyBEc24gYW5kIHRocm93cyBvbiBlcnJvci4gKi9cblxuXG4gIERzbi5wcm90b3R5cGUuX3ZhbGlkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBbJ3Byb3RvY29sJywgJ3B1YmxpY0tleScsICdob3N0JywgJ3Byb2plY3RJZCddLmZvckVhY2goZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgaWYgKCFfdGhpc1tjb21wb25lbnRdKSB7XG4gICAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihFUlJPUl9NRVNTQUdFICsgXCI6IFwiICsgY29tcG9uZW50ICsgXCIgbWlzc2luZ1wiKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5wcm9qZWN0SWQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoRVJST1JfTUVTU0FHRSArIFwiOiBJbnZhbGlkIHByb2plY3RJZCBcIiArIHRoaXMucHJvamVjdElkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm90b2NvbCAhPT0gJ2h0dHAnICYmIHRoaXMucHJvdG9jb2wgIT09ICdodHRwcycpIHtcbiAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihFUlJPUl9NRVNTQUdFICsgXCI6IEludmFsaWQgcHJvdG9jb2wgXCIgKyB0aGlzLnByb3RvY29sKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb3J0ICYmIGlzTmFOKHBhcnNlSW50KHRoaXMucG9ydCwgMTApKSkge1xuICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKEVSUk9SX01FU1NBR0UgKyBcIjogSW52YWxpZCBwb3J0IFwiICsgdGhpcy5wb3J0KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIERzbjtcbn0oKTtcblxuZXhwb3J0IHsgRHNuIH07IiwiaW1wb3J0IHsgX19yZWFkLCBfX3NwcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IsIGdldEN1cnJlbnRIdWIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmV4cG9ydCB2YXIgaW5zdGFsbGVkSW50ZWdyYXRpb25zID0gW107XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZmlsdGVyRHVwbGljYXRlcyhpbnRlZ3JhdGlvbnMpIHtcbiAgcmV0dXJuIGludGVncmF0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgaW50ZWdyYXRpb25zKSB7XG4gICAgaWYgKGFjYy5ldmVyeShmdW5jdGlvbiAoYWNjSW50ZWdyYXRpb24pIHtcbiAgICAgIHJldHVybiBpbnRlZ3JhdGlvbnMubmFtZSAhPT0gYWNjSW50ZWdyYXRpb24ubmFtZTtcbiAgICB9KSkge1xuICAgICAgYWNjLnB1c2goaW50ZWdyYXRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG59XG4vKiogR2V0cyBpbnRlZ3JhdGlvbiB0byBpbnN0YWxsICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVncmF0aW9uc1RvU2V0dXAob3B0aW9ucykge1xuICB2YXIgZGVmYXVsdEludGVncmF0aW9ucyA9IG9wdGlvbnMuZGVmYXVsdEludGVncmF0aW9ucyAmJiBfX3NwcmVhZChvcHRpb25zLmRlZmF1bHRJbnRlZ3JhdGlvbnMpIHx8IFtdO1xuICB2YXIgdXNlckludGVncmF0aW9ucyA9IG9wdGlvbnMuaW50ZWdyYXRpb25zO1xuXG4gIHZhciBpbnRlZ3JhdGlvbnMgPSBfX3NwcmVhZChmaWx0ZXJEdXBsaWNhdGVzKGRlZmF1bHRJbnRlZ3JhdGlvbnMpKTtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh1c2VySW50ZWdyYXRpb25zKSkge1xuICAgIC8vIEZpbHRlciBvdXQgaW50ZWdyYXRpb25zIHRoYXQgYXJlIGFsc28gaW5jbHVkZWQgaW4gdXNlciBvcHRpb25zXG4gICAgaW50ZWdyYXRpb25zID0gX19zcHJlYWQoaW50ZWdyYXRpb25zLmZpbHRlcihmdW5jdGlvbiAoaW50ZWdyYXRpb25zKSB7XG4gICAgICByZXR1cm4gdXNlckludGVncmF0aW9ucy5ldmVyeShmdW5jdGlvbiAodXNlckludGVncmF0aW9uKSB7XG4gICAgICAgIHJldHVybiB1c2VySW50ZWdyYXRpb24ubmFtZSAhPT0gaW50ZWdyYXRpb25zLm5hbWU7XG4gICAgICB9KTtcbiAgICB9KSwgZmlsdGVyRHVwbGljYXRlcyh1c2VySW50ZWdyYXRpb25zKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHVzZXJJbnRlZ3JhdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnRlZ3JhdGlvbnMgPSB1c2VySW50ZWdyYXRpb25zKGludGVncmF0aW9ucyk7XG4gICAgaW50ZWdyYXRpb25zID0gQXJyYXkuaXNBcnJheShpbnRlZ3JhdGlvbnMpID8gaW50ZWdyYXRpb25zIDogW2ludGVncmF0aW9uc107XG4gIH0gLy8gTWFrZSBzdXJlIHRoYXQgaWYgcHJlc2VudCwgYERlYnVnYCBpbnRlZ3JhdGlvbiB3aWxsIGFsd2F5cyBydW4gbGFzdFxuXG5cbiAgdmFyIGludGVncmF0aW9uc05hbWVzID0gaW50ZWdyYXRpb25zLm1hcChmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBpLm5hbWU7XG4gIH0pO1xuICB2YXIgYWx3YXlzTGFzdFRvUnVuID0gJ0RlYnVnJztcblxuICBpZiAoaW50ZWdyYXRpb25zTmFtZXMuaW5kZXhPZihhbHdheXNMYXN0VG9SdW4pICE9PSAtMSkge1xuICAgIGludGVncmF0aW9ucy5wdXNoLmFwcGx5KGludGVncmF0aW9ucywgX19zcHJlYWQoaW50ZWdyYXRpb25zLnNwbGljZShpbnRlZ3JhdGlvbnNOYW1lcy5pbmRleE9mKGFsd2F5c0xhc3RUb1J1biksIDEpKSk7XG4gIH1cblxuICByZXR1cm4gaW50ZWdyYXRpb25zO1xufVxuLyoqIFNldHVwIGdpdmVuIGludGVncmF0aW9uICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEludGVncmF0aW9uKGludGVncmF0aW9uKSB7XG4gIGlmIChpbnN0YWxsZWRJbnRlZ3JhdGlvbnMuaW5kZXhPZihpbnRlZ3JhdGlvbi5uYW1lKSAhPT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpbnRlZ3JhdGlvbi5zZXR1cE9uY2UoYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IsIGdldEN1cnJlbnRIdWIpO1xuICBpbnN0YWxsZWRJbnRlZ3JhdGlvbnMucHVzaChpbnRlZ3JhdGlvbi5uYW1lKTtcbiAgbG9nZ2VyLmxvZyhcIkludGVncmF0aW9uIGluc3RhbGxlZDogXCIgKyBpbnRlZ3JhdGlvbi5uYW1lKTtcbn1cbi8qKlxuICogR2l2ZW4gYSBsaXN0IG9mIGludGVncmF0aW9uIGluc3RhbmNlcyB0aGlzIGluc3RhbGxzIHRoZW0gYWxsLiBXaGVuIGB3aXRoRGVmYXVsdHNgIGlzIHNldCB0byBgdHJ1ZWAgdGhlbiBhbGwgZGVmYXVsdFxuICogaW50ZWdyYXRpb25zIGFyZSBhZGRlZCB1bmxlc3MgdGhleSB3ZXJlIGFscmVhZHkgcHJvdmlkZWQgYmVmb3JlLlxuICogQHBhcmFtIGludGVncmF0aW9ucyBhcnJheSBvZiBpbnRlZ3JhdGlvbiBpbnN0YW5jZXNcbiAqIEBwYXJhbSB3aXRoRGVmYXVsdCBzaG91bGQgZW5hYmxlIGRlZmF1bHQgaW50ZWdyYXRpb25zXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwSW50ZWdyYXRpb25zKG9wdGlvbnMpIHtcbiAgdmFyIGludGVncmF0aW9ucyA9IHt9O1xuICBnZXRJbnRlZ3JhdGlvbnNUb1NldHVwKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGludGVncmF0aW9uKSB7XG4gICAgaW50ZWdyYXRpb25zW2ludGVncmF0aW9uLm5hbWVdID0gaW50ZWdyYXRpb247XG4gICAgc2V0dXBJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbik7XG4gIH0pOyAvLyBzZXQgdGhlIGBpbml0aWFsaXplZGAgZmxhZyBzbyB3ZSBkb24ndCBydW4gdGhyb3VnaCB0aGUgcHJvY2VzcyBhZ2FpbiB1bmVjZXNzYXJpbHk7IHVzZSBgT2JqZWN0LmRlZmluZVByb3BlcnR5YFxuICAvLyBiZWNhdXNlIGJ5IGRlZmF1bHQgaXQgY3JlYXRlcyBhIHByb3BlcnR5IHdoaWNoIGlzIG5vbmVudW1lcmFibGUsIHdoaWNoIHdlIHdhbnQgc2luY2UgYGluaXRpYWxpemVkYCBzaG91bGRuJ3QgYmVcbiAgLy8gY29uc2lkZXJlZCBhIG1lbWJlciBvZiB0aGUgaW5kZXggdGhlIHdheSB0aGUgYWN0dWFsIGludGVncmF0aW9ucyBhcmVcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW50ZWdyYXRpb25zLCAnaW5pdGlhbGl6ZWQnLCB7XG4gICAgdmFsdWU6IHRydWVcbiAgfSk7XG4gIHJldHVybiBpbnRlZ3JhdGlvbnM7XG59IiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVhZCwgX19zcHJlYWQsIF9fdmFsdWVzIH0gZnJvbSBcInRzbGliXCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cblxuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgeyBPdXRjb21lLCBTZXNzaW9uU3RhdHVzIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wSW5TZWNvbmRzLCBEc24sIGlzUGxhaW5PYmplY3QsIGlzUHJpbWl0aXZlLCBpc1RoZW5hYmxlLCBsb2dnZXIsIG5vcm1hbGl6ZSwgU2VudHJ5RXJyb3IsIFN5bmNQcm9taXNlLCB0cnVuY2F0ZSwgdXVpZDQgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IHNldHVwSW50ZWdyYXRpb25zIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbic7XG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gZm9yIGFsbCBKYXZhU2NyaXB0IFNESyBjbGllbnRzLlxuICpcbiAqIENhbGwgdGhlIGNvbnN0cnVjdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYmFja2VuZCBjb25zdHJ1Y3RvciBhbmQgb3B0aW9uc1xuICogc3BlY2lmaWMgdG8gdGhlIGNsaWVudCBzdWJjbGFzcy4gVG8gYWNjZXNzIHRoZXNlIG9wdGlvbnMgbGF0ZXIsIHVzZVxuICoge0BsaW5rIENsaWVudC5nZXRPcHRpb25zfS4gQWxzbywgdGhlIEJhY2tlbmQgaW5zdGFuY2UgaXMgYXZhaWxhYmxlIHZpYVxuICoge0BsaW5rIENsaWVudC5nZXRCYWNrZW5kfS5cbiAqXG4gKiBJZiBhIERzbiBpcyBzcGVjaWZpZWQgaW4gdGhlIG9wdGlvbnMsIGl0IHdpbGwgYmUgcGFyc2VkIGFuZCBzdG9yZWQuIFVzZVxuICoge0BsaW5rIENsaWVudC5nZXREc259IHRvIHJldHJpZXZlIHRoZSBEc24gYXQgYW55IG1vbWVudC4gSW4gY2FzZSB0aGUgRHNuIGlzXG4gKiBpbnZhbGlkLCB0aGUgY29uc3RydWN0b3Igd2lsbCB0aHJvdyBhIHtAbGluayBTZW50cnlFeGNlcHRpb259LiBOb3RlIHRoYXRcbiAqIHdpdGhvdXQgYSB2YWxpZCBEc24sIHRoZSBTREsgd2lsbCBub3Qgc2VuZCBhbnkgZXZlbnRzIHRvIFNlbnRyeS5cbiAqXG4gKiBCZWZvcmUgc2VuZGluZyBhbiBldmVudCB2aWEgdGhlIGJhY2tlbmQsIGl0IGlzIHBhc3NlZCB0aHJvdWdoXG4gKiB7QGxpbmsgQmFzZUNsaWVudC5fcHJlcGFyZUV2ZW50fSB0byBhZGQgU0RLIGluZm9ybWF0aW9uIGFuZCBzY29wZSBkYXRhXG4gKiAoYnJlYWRjcnVtYnMgYW5kIGNvbnRleHQpLiBUbyBhZGQgbW9yZSBjdXN0b20gaW5mb3JtYXRpb24sIG92ZXJyaWRlIHRoaXNcbiAqIG1ldGhvZCBhbmQgZXh0ZW5kIHRoZSByZXN1bHRpbmcgcHJlcGFyZWQgZXZlbnQuXG4gKlxuICogVG8gaXNzdWUgYXV0b21hdGljYWxseSBjcmVhdGVkIGV2ZW50cyAoZS5nLiB2aWEgaW5zdHJ1bWVudGF0aW9uKSwgdXNlXG4gKiB7QGxpbmsgQ2xpZW50LmNhcHR1cmVFdmVudH0uIEl0IHdpbGwgcHJlcGFyZSB0aGUgZXZlbnQgYW5kIHBhc3MgaXQgdGhyb3VnaFxuICogdGhlIGNhbGxiYWNrIGxpZmVjeWNsZS4gVG8gaXNzdWUgYXV0by1icmVhZGNydW1icywgdXNlXG4gKiB7QGxpbmsgQ2xpZW50LmFkZEJyZWFkY3J1bWJ9LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjbGFzcyBOb2RlQ2xpZW50IGV4dGVuZHMgQmFzZUNsaWVudDxOb2RlQmFja2VuZCwgTm9kZU9wdGlvbnM+IHtcbiAqICAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE5vZGVPcHRpb25zKSB7XG4gKiAgICAgc3VwZXIoTm9kZUJhY2tlbmQsIG9wdGlvbnMpO1xuICogICB9XG4gKlxuICogICAvLyAuLi5cbiAqIH1cbiAqL1xuXG52YXIgQmFzZUNsaWVudCA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGlzIGNsaWVudCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGJhY2tlbmRDbGFzcyBBIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYmFja2VuZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGNsaWVudC5cbiAgICovXG4gIGZ1bmN0aW9uIEJhc2VDbGllbnQoYmFja2VuZENsYXNzLCBvcHRpb25zKSB7XG4gICAgLyoqIEFycmF5IG9mIHVzZWQgaW50ZWdyYXRpb25zLiAqL1xuICAgIHRoaXMuX2ludGVncmF0aW9ucyA9IHt9O1xuICAgIC8qKiBOdW1iZXIgb2YgY2FsbHMgYmVpbmcgcHJvY2Vzc2VkICovXG5cbiAgICB0aGlzLl9udW1Qcm9jZXNzaW5nID0gMDtcbiAgICB0aGlzLl9iYWNrZW5kID0gbmV3IGJhY2tlbmRDbGFzcyhvcHRpb25zKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmIChvcHRpb25zLmRzbikge1xuICAgICAgdGhpcy5fZHNuID0gbmV3IERzbihvcHRpb25zLmRzbik7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcblxuXG4gIEJhc2VDbGllbnQucHJvdG90eXBlLmNhcHR1cmVFeGNlcHRpb24gPSBmdW5jdGlvbiAoZXhjZXB0aW9uLCBoaW50LCBzY29wZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgZXZlbnRJZCA9IGhpbnQgJiYgaGludC5ldmVudF9pZDtcblxuICAgIHRoaXMuX3Byb2Nlc3ModGhpcy5fZ2V0QmFja2VuZCgpLmV2ZW50RnJvbUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQpLnRoZW4oZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICByZXR1cm4gX3RoaXMuX2NhcHR1cmVFdmVudChldmVudCwgaGludCwgc2NvcGUpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgZXZlbnRJZCA9IHJlc3VsdDtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQmFzZUNsaWVudC5wcm90b3R5cGUuY2FwdHVyZU1lc3NhZ2UgPSBmdW5jdGlvbiAobWVzc2FnZSwgbGV2ZWwsIGhpbnQsIHNjb3BlKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkO1xuICAgIHZhciBwcm9taXNlZEV2ZW50ID0gaXNQcmltaXRpdmUobWVzc2FnZSkgPyB0aGlzLl9nZXRCYWNrZW5kKCkuZXZlbnRGcm9tTWVzc2FnZShTdHJpbmcobWVzc2FnZSksIGxldmVsLCBoaW50KSA6IHRoaXMuX2dldEJhY2tlbmQoKS5ldmVudEZyb21FeGNlcHRpb24obWVzc2FnZSwgaGludCk7XG5cbiAgICB0aGlzLl9wcm9jZXNzKHByb21pc2VkRXZlbnQudGhlbihmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHJldHVybiBfdGhpcy5fY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50LCBzY29wZSk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBldmVudElkID0gcmVzdWx0O1xuICAgIH0pKTtcblxuICAgIHJldHVybiBldmVudElkO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5jYXB0dXJlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIGhpbnQsIHNjb3BlKSB7XG4gICAgdmFyIGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQ7XG5cbiAgICB0aGlzLl9wcm9jZXNzKHRoaXMuX2NhcHR1cmVFdmVudChldmVudCwgaGludCwgc2NvcGUpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgZXZlbnRJZCA9IHJlc3VsdDtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQmFzZUNsaWVudC5wcm90b3R5cGUuY2FwdHVyZVNlc3Npb24gPSBmdW5jdGlvbiAoc2Vzc2lvbikge1xuICAgIGlmICghdGhpcy5faXNFbmFibGVkKCkpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdTREsgbm90IGVuYWJsZWQsIHdpbGwgbm90IGNhcHR1cmUgc2Vzc2lvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2Ygc2Vzc2lvbi5yZWxlYXNlID09PSAnc3RyaW5nJykpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdEaXNjYXJkZWQgc2Vzc2lvbiBiZWNhdXNlIG9mIG1pc3Npbmcgb3Igbm9uLXN0cmluZyByZWxlYXNlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbmRTZXNzaW9uKHNlc3Npb24pOyAvLyBBZnRlciBzZW5kaW5nLCB3ZSBzZXQgaW5pdCBmYWxzZSB0byBpbmRpY2F0ZSBpdCdzIG5vdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZVxuXG5cbiAgICAgIHNlc3Npb24udXBkYXRlKHtcbiAgICAgICAgaW5pdDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQmFzZUNsaWVudC5wcm90b3R5cGUuZ2V0RHNuID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9kc247XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEJhc2VDbGllbnQucHJvdG90eXBlLmdldE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEJhc2VDbGllbnQucHJvdG90eXBlLmdldFRyYW5zcG9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0QmFja2VuZCgpLmdldFRyYW5zcG9ydCgpO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICh0aW1lb3V0KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLl9pc0NsaWVudERvbmVQcm9jZXNzaW5nKHRpbWVvdXQpLnRoZW4oZnVuY3Rpb24gKGNsaWVudEZpbmlzaGVkKSB7XG4gICAgICByZXR1cm4gX3RoaXMuZ2V0VHJhbnNwb3J0KCkuY2xvc2UodGltZW91dCkudGhlbihmdW5jdGlvbiAodHJhbnNwb3J0Rmx1c2hlZCkge1xuICAgICAgICByZXR1cm4gY2xpZW50RmluaXNoZWQgJiYgdHJhbnNwb3J0Rmx1c2hlZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICh0aW1lb3V0KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmZsdXNoKHRpbWVvdXQpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgX3RoaXMuZ2V0T3B0aW9ucygpLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBpbnRlZ3JhdGlvbnNcbiAgICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5zZXR1cEludGVncmF0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5faXNFbmFibGVkKCkgJiYgIXRoaXMuX2ludGVncmF0aW9ucy5pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5faW50ZWdyYXRpb25zID0gc2V0dXBJbnRlZ3JhdGlvbnModGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5nZXRJbnRlZ3JhdGlvbiA9IGZ1bmN0aW9uIChpbnRlZ3JhdGlvbikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5faW50ZWdyYXRpb25zW2ludGVncmF0aW9uLmlkXSB8fCBudWxsO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgbG9nZ2VyLndhcm4oXCJDYW5ub3QgcmV0cmlldmUgaW50ZWdyYXRpb24gXCIgKyBpbnRlZ3JhdGlvbi5pZCArIFwiIGZyb20gdGhlIGN1cnJlbnQgQ2xpZW50XCIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuICAvKiogVXBkYXRlcyBleGlzdGluZyBzZXNzaW9uIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBldmVudCAqL1xuXG5cbiAgQmFzZUNsaWVudC5wcm90b3R5cGUuX3VwZGF0ZVNlc3Npb25Gcm9tRXZlbnQgPSBmdW5jdGlvbiAoc2Vzc2lvbiwgZXZlbnQpIHtcbiAgICB2YXIgZV8xLCBfYTtcblxuICAgIHZhciBjcmFzaGVkID0gZmFsc2U7XG4gICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICB2YXIgZXhjZXB0aW9ucyA9IGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzO1xuXG4gICAgaWYgKGV4Y2VwdGlvbnMpIHtcbiAgICAgIGVycm9yZWQgPSB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBleGNlcHRpb25zXzEgPSBfX3ZhbHVlcyhleGNlcHRpb25zKSwgZXhjZXB0aW9uc18xXzEgPSBleGNlcHRpb25zXzEubmV4dCgpOyAhZXhjZXB0aW9uc18xXzEuZG9uZTsgZXhjZXB0aW9uc18xXzEgPSBleGNlcHRpb25zXzEubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGV4ID0gZXhjZXB0aW9uc18xXzEudmFsdWU7XG4gICAgICAgICAgdmFyIG1lY2hhbmlzbSA9IGV4Lm1lY2hhbmlzbTtcblxuICAgICAgICAgIGlmIChtZWNoYW5pc20gJiYgbWVjaGFuaXNtLmhhbmRsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjcmFzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZV8xXzEpIHtcbiAgICAgICAgZV8xID0ge1xuICAgICAgICAgIGVycm9yOiBlXzFfMVxuICAgICAgICB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoZXhjZXB0aW9uc18xXzEgJiYgIWV4Y2VwdGlvbnNfMV8xLmRvbmUgJiYgKF9hID0gZXhjZXB0aW9uc18xLnJldHVybikpIF9hLmNhbGwoZXhjZXB0aW9uc18xKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEEgc2Vzc2lvbiBpcyB1cGRhdGVkIGFuZCB0aGF0IHNlc3Npb24gdXBkYXRlIGlzIHNlbnQgaW4gb25seSBvbmUgb2YgdGhlIHR3byBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuICAgIC8vIDEuIFNlc3Npb24gd2l0aCBub24gdGVybWluYWwgc3RhdHVzIGFuZCAwIGVycm9ycyArIGFuIGVycm9yIG9jY3VycmVkIC0+IFdpbGwgc2V0IGVycm9yIGNvdW50IHRvIDEgYW5kIHNlbmQgdXBkYXRlXG4gICAgLy8gMi4gU2Vzc2lvbiB3aXRoIG5vbiB0ZXJtaW5hbCBzdGF0dXMgYW5kIDEgZXJyb3IgKyBhIGNyYXNoIG9jY3VycmVkIC0+IFdpbGwgc2V0IHN0YXR1cyBjcmFzaGVkIGFuZCBzZW5kIHVwZGF0ZVxuXG5cbiAgICB2YXIgc2Vzc2lvbk5vblRlcm1pbmFsID0gc2Vzc2lvbi5zdGF0dXMgPT09IFNlc3Npb25TdGF0dXMuT2s7XG4gICAgdmFyIHNob3VsZFVwZGF0ZUFuZFNlbmQgPSBzZXNzaW9uTm9uVGVybWluYWwgJiYgc2Vzc2lvbi5lcnJvcnMgPT09IDAgfHwgc2Vzc2lvbk5vblRlcm1pbmFsICYmIGNyYXNoZWQ7XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlQW5kU2VuZCkge1xuICAgICAgc2Vzc2lvbi51cGRhdGUoX19hc3NpZ24oX19hc3NpZ24oe30sIGNyYXNoZWQgJiYge1xuICAgICAgICBzdGF0dXM6IFNlc3Npb25TdGF0dXMuQ3Jhc2hlZFxuICAgICAgfSksIHtcbiAgICAgICAgZXJyb3JzOiBzZXNzaW9uLmVycm9ycyB8fCBOdW1iZXIoZXJyb3JlZCB8fCBjcmFzaGVkKVxuICAgICAgfSkpO1xuICAgICAgdGhpcy5jYXB0dXJlU2Vzc2lvbihzZXNzaW9uKTtcbiAgICB9XG4gIH07XG4gIC8qKiBEZWxpdmVyIGNhcHR1cmVkIHNlc3Npb24gdG8gU2VudHJ5ICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5fc2VuZFNlc3Npb24gPSBmdW5jdGlvbiAoc2Vzc2lvbikge1xuICAgIHRoaXMuX2dldEJhY2tlbmQoKS5zZW5kU2Vzc2lvbihzZXNzaW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIERldGVybWluZSBpZiB0aGUgY2xpZW50IGlzIGZpbmlzaGVkIHByb2Nlc3NpbmcuIFJldHVybnMgYSBwcm9taXNlIGJlY2F1c2UgaXQgd2lsbCB3YWl0IGB0aW1lb3V0YCBtcyBiZWZvcmUgc2F5aW5nXG4gICAqIFwibm9cIiAocmVzb2x2aW5nIHRvIGBmYWxzZWApIGluIG9yZGVyIHRvIGdpdmUgdGhlIGNsaWVudCBhIGNoYW5jZSB0byBwb3RlbnRpYWxseSBmaW5pc2ggZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lLCBpbiBtcywgYWZ0ZXIgd2hpY2ggdG8gcmVzb2x2ZSB0byBgZmFsc2VgIGlmIHRoZSBjbGllbnQgaXMgc3RpbGwgYnVzeS4gUGFzc2luZyBgMGAgKG9yIG5vdFxuICAgKiBwYXNzaW5nIGFueXRoaW5nKSB3aWxsIG1ha2UgdGhlIHByb21pc2Ugd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzIGZvciBwcm9jZXNzaW5nIHRvIGZpbmlzaCBiZWZvcmUgcmVzb2x2aW5nIHRvXG4gICAqIGB0cnVlYC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHdpbGwgcmVzb2x2ZSB0byBgdHJ1ZWAgaWYgcHJvY2Vzc2luZyBpcyBhbHJlYWR5IGRvbmUgb3IgZmluaXNoZXMgYmVmb3JlIHRoZSB0aW1lb3V0LCBhbmRcbiAgICogYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5faXNDbGllbnREb25lUHJvY2Vzc2luZyA9IGZ1bmN0aW9uICh0aW1lb3V0KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHZhciB0aWNrZWQgPSAwO1xuICAgICAgdmFyIHRpY2sgPSAxO1xuICAgICAgdmFyIGludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX251bVByb2Nlc3NpbmcgPT0gMCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGlja2VkICs9IHRpY2s7XG5cbiAgICAgICAgICBpZiAodGltZW91dCAmJiB0aWNrZWQgPj0gdGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHRpY2spO1xuICAgIH0pO1xuICB9O1xuICAvKiogUmV0dXJucyB0aGUgY3VycmVudCBiYWNrZW5kLiAqL1xuXG5cbiAgQmFzZUNsaWVudC5wcm90b3R5cGUuX2dldEJhY2tlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tlbmQ7XG4gIH07XG4gIC8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBTREsgaXMgZW5hYmxlZCBhbmQgYSB2YWxpZCBEc24gaXMgcHJlc2VudC4gKi9cblxuXG4gIEJhc2VDbGllbnQucHJvdG90eXBlLl9pc0VuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9ucygpLmVuYWJsZWQgIT09IGZhbHNlICYmIHRoaXMuX2RzbiAhPT0gdW5kZWZpbmVkO1xuICB9O1xuICAvKipcbiAgICogQWRkcyBjb21tb24gaW5mb3JtYXRpb24gdG8gZXZlbnRzLlxuICAgKlxuICAgKiBUaGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgcmVsZWFzZSBhbmQgZW52aXJvbm1lbnQgZnJvbSBgb3B0aW9uc2AsXG4gICAqIGJyZWFkY3J1bWJzIGFuZCBjb250ZXh0IChleHRyYSwgdGFncyBhbmQgdXNlcikgZnJvbSB0aGUgc2NvcGUuXG4gICAqXG4gICAqIEluZm9ybWF0aW9uIHRoYXQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBldmVudCBpcyBuZXZlciBvdmVyd3JpdHRlbi4gRm9yXG4gICAqIG5lc3RlZCBvYmplY3RzLCBzdWNoIGFzIHRoZSBjb250ZXh0LCBrZXlzIGFyZSBtZXJnZWQuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCBUaGUgb3JpZ2luYWwgZXZlbnQuXG4gICAqIEBwYXJhbSBoaW50IE1heSBjb250YWluIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbi5cbiAgICogQHBhcmFtIHNjb3BlIEEgc2NvcGUgY29udGFpbmluZyBldmVudCBtZXRhZGF0YS5cbiAgICogQHJldHVybnMgQSBuZXcgZXZlbnQgd2l0aCBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cblxuXG4gIEJhc2VDbGllbnQucHJvdG90eXBlLl9wcmVwYXJlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIHNjb3BlLCBoaW50KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBfYSA9IHRoaXMuZ2V0T3B0aW9ucygpLm5vcm1hbGl6ZURlcHRoLFxuICAgICAgICBub3JtYWxpemVEZXB0aCA9IF9hID09PSB2b2lkIDAgPyAzIDogX2E7XG5cbiAgICB2YXIgcHJlcGFyZWQgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZXZlbnQpLCB7XG4gICAgICBldmVudF9pZDogZXZlbnQuZXZlbnRfaWQgfHwgKGhpbnQgJiYgaGludC5ldmVudF9pZCA/IGhpbnQuZXZlbnRfaWQgOiB1dWlkNCgpKSxcbiAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wIHx8IGRhdGVUaW1lc3RhbXBJblNlY29uZHMoKVxuICAgIH0pO1xuXG4gICAgdGhpcy5fYXBwbHlDbGllbnRPcHRpb25zKHByZXBhcmVkKTtcblxuICAgIHRoaXMuX2FwcGx5SW50ZWdyYXRpb25zTWV0YWRhdGEocHJlcGFyZWQpOyAvLyBJZiB3ZSBoYXZlIHNjb3BlIGdpdmVuIHRvIHVzLCB1c2UgaXQgYXMgdGhlIGJhc2UgZm9yIGZ1cnRoZXIgbW9kaWZpY2F0aW9ucy5cbiAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IGNvcHlpbmcgb2YgZGF0YSBpZiBgY2FwdHVyZUNvbnRleHRgIGlzIG5vdCBwcm92aWRlZC5cblxuXG4gICAgdmFyIGZpbmFsU2NvcGUgPSBzY29wZTtcblxuICAgIGlmIChoaW50ICYmIGhpbnQuY2FwdHVyZUNvbnRleHQpIHtcbiAgICAgIGZpbmFsU2NvcGUgPSBTY29wZS5jbG9uZShmaW5hbFNjb3BlKS51cGRhdGUoaGludC5jYXB0dXJlQ29udGV4dCk7XG4gICAgfSAvLyBXZSBwcmVwYXJlIHRoZSByZXN1bHQgaGVyZSB3aXRoIGEgcmVzb2x2ZWQgRXZlbnQuXG5cblxuICAgIHZhciByZXN1bHQgPSBTeW5jUHJvbWlzZS5yZXNvbHZlKHByZXBhcmVkKTsgLy8gVGhpcyBzaG91bGQgYmUgdGhlIGxhc3QgdGhpbmcgY2FsbGVkLCBzaW5jZSB3ZSB3YW50IHRoYXRcbiAgICAvLyB7QGxpbmsgSHViLmFkZEV2ZW50UHJvY2Vzc29yfSBnZXRzIHRoZSBmaW5pc2hlZCBwcmVwYXJlZCBldmVudC5cblxuICAgIGlmIChmaW5hbFNjb3BlKSB7XG4gICAgICAvLyBJbiBjYXNlIHdlIGhhdmUgYSBodWIgd2UgcmVhc3NpZ24gaXQuXG4gICAgICByZXN1bHQgPSBmaW5hbFNjb3BlLmFwcGx5VG9FdmVudChwcmVwYXJlZCwgaGludCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIGlmICh0eXBlb2Ygbm9ybWFsaXplRGVwdGggPT09ICdudW1iZXInICYmIG5vcm1hbGl6ZURlcHRoID4gMCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuX25vcm1hbGl6ZUV2ZW50KGV2dCwgbm9ybWFsaXplRGVwdGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZ0O1xuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogQXBwbGllcyBgbm9ybWFsaXplYCBmdW5jdGlvbiBvbiBuZWNlc3NhcnkgYEV2ZW50YCBhdHRyaWJ1dGVzIHRvIG1ha2UgdGhlbSBzYWZlIGZvciBzZXJpYWxpemF0aW9uLlxuICAgKiBOb3JtYWxpemVkIGtleXM6XG4gICAqIC0gYGJyZWFkY3J1bWJzLmRhdGFgXG4gICAqIC0gYHVzZXJgXG4gICAqIC0gYGNvbnRleHRzYFxuICAgKiAtIGBleHRyYWBcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50XG4gICAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgZXZlbnRcbiAgICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5fbm9ybWFsaXplRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIGRlcHRoKSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWQgPSBfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZXZlbnQpLCBldmVudC5icmVhZGNydW1icyAmJiB7XG4gICAgICBicmVhZGNydW1iczogZXZlbnQuYnJlYWRjcnVtYnMubWFwKGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYiksIGIuZGF0YSAmJiB7XG4gICAgICAgICAgZGF0YTogbm9ybWFsaXplKGIuZGF0YSwgZGVwdGgpXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICB9KSwgZXZlbnQudXNlciAmJiB7XG4gICAgICB1c2VyOiBub3JtYWxpemUoZXZlbnQudXNlciwgZGVwdGgpXG4gICAgfSksIGV2ZW50LmNvbnRleHRzICYmIHtcbiAgICAgIGNvbnRleHRzOiBub3JtYWxpemUoZXZlbnQuY29udGV4dHMsIGRlcHRoKVxuICAgIH0pLCBldmVudC5leHRyYSAmJiB7XG4gICAgICBleHRyYTogbm9ybWFsaXplKGV2ZW50LmV4dHJhLCBkZXB0aClcbiAgICB9KTsgLy8gZXZlbnQuY29udGV4dHMudHJhY2Ugc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgVHJhbnNhY3Rpb24uIFNpbWlsYXJseSxcbiAgICAvLyBldmVudC5zcGFuc1tdIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBjaGlsZCBTcGFucy4gR2l2ZW4gdGhhdCBhXG4gICAgLy8gVHJhbnNhY3Rpb24gaXMgY29uY2VwdHVhbGx5IGEgU3Bhbiwgbm9ybWFsaXphdGlvbiBzaG91bGQgYXBwbHkgdG8gYm90aFxuICAgIC8vIFRyYW5zYWN0aW9ucyBhbmQgU3BhbnMgY29uc2lzdGVudGx5LlxuICAgIC8vIEZvciBub3cgdGhlIGRlY2lzaW9uIGlzIHRvIHNraXAgbm9ybWFsaXphdGlvbiBvZiBUcmFuc2FjdGlvbnMgYW5kIFNwYW5zLFxuICAgIC8vIHNvIHRoaXMgYmxvY2sgb3ZlcndyaXRlcyB0aGUgbm9ybWFsaXplZCBldmVudCB0byBhZGQgYmFjayB0aGUgb3JpZ2luYWxcbiAgICAvLyBUcmFuc2FjdGlvbiBpbmZvcm1hdGlvbiBwcmlvciB0byBub3JtYWxpemF0aW9uLlxuXG5cbiAgICBpZiAoZXZlbnQuY29udGV4dHMgJiYgZXZlbnQuY29udGV4dHMudHJhY2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIG5vcm1hbGl6ZWQuY29udGV4dHMudHJhY2UgPSBldmVudC5jb250ZXh0cy50cmFjZTtcbiAgICB9XG5cbiAgICB2YXIgX2EgPSB0aGlzLmdldE9wdGlvbnMoKS5fZXhwZXJpbWVudHMsXG4gICAgICAgIF9leHBlcmltZW50cyA9IF9hID09PSB2b2lkIDAgPyB7fSA6IF9hO1xuXG4gICAgaWYgKF9leHBlcmltZW50cy5lbnN1cmVOb0NpcmN1bGFyU3RydWN0dXJlcykge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZShub3JtYWxpemVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfTtcbiAgLyoqXG4gICAqICBFbmhhbmNlcyBldmVudCB1c2luZyB0aGUgY2xpZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqICBJdCB0YWtlcyBjYXJlIG9mIGFsbCBcInN0YXRpY1wiIHZhbHVlcyBsaWtlIGVudmlyb25tZW50LCByZWxlYXNlIGFuZCBgZGlzdGAsXG4gICAqICBhcyB3ZWxsIGFzIHRydW5jYXRpbmcgb3Zlcmx5IGxvbmcgdmFsdWVzLlxuICAgKiBAcGFyYW0gZXZlbnQgZXZlbnQgaW5zdGFuY2UgdG8gYmUgZW5oYW5jZWRcbiAgICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5fYXBwbHlDbGllbnRPcHRpb25zID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICB2YXIgZW52aXJvbm1lbnQgPSBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICByZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlLFxuICAgICAgICBkaXN0ID0gb3B0aW9ucy5kaXN0LFxuICAgICAgICBfYSA9IG9wdGlvbnMubWF4VmFsdWVMZW5ndGgsXG4gICAgICAgIG1heFZhbHVlTGVuZ3RoID0gX2EgPT09IHZvaWQgMCA/IDI1MCA6IF9hO1xuXG4gICAgaWYgKCEoJ2Vudmlyb25tZW50JyBpbiBldmVudCkpIHtcbiAgICAgIGV2ZW50LmVudmlyb25tZW50ID0gJ2Vudmlyb25tZW50JyBpbiBvcHRpb25zID8gZW52aXJvbm1lbnQgOiAncHJvZHVjdGlvbic7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnJlbGVhc2UgPT09IHVuZGVmaW5lZCAmJiByZWxlYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV2ZW50LnJlbGVhc2UgPSByZWxlYXNlO1xuICAgIH1cblxuICAgIGlmIChldmVudC5kaXN0ID09PSB1bmRlZmluZWQgJiYgZGlzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBldmVudC5kaXN0ID0gZGlzdDtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQubWVzc2FnZSkge1xuICAgICAgZXZlbnQubWVzc2FnZSA9IHRydW5jYXRlKGV2ZW50Lm1lc3NhZ2UsIG1heFZhbHVlTGVuZ3RoKTtcbiAgICB9XG5cbiAgICB2YXIgZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXTtcblxuICAgIGlmIChleGNlcHRpb24gJiYgZXhjZXB0aW9uLnZhbHVlKSB7XG4gICAgICBleGNlcHRpb24udmFsdWUgPSB0cnVuY2F0ZShleGNlcHRpb24udmFsdWUsIG1heFZhbHVlTGVuZ3RoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdCA9IGV2ZW50LnJlcXVlc3Q7XG5cbiAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnVybCkge1xuICAgICAgcmVxdWVzdC51cmwgPSB0cnVuY2F0ZShyZXF1ZXN0LnVybCwgbWF4VmFsdWVMZW5ndGgpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhbGwgdXNlZCBpbnRlZ3JhdGlvbnMgdG8gdGhlIFNESyBpbmZvIGluIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0aGF0IHdpbGwgYmUgZmlsbGVkIHdpdGggYWxsIGludGVncmF0aW9ucy5cbiAgICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5fYXBwbHlJbnRlZ3JhdGlvbnNNZXRhZGF0YSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBpbnRlZ3JhdGlvbnNBcnJheSA9IE9iamVjdC5rZXlzKHRoaXMuX2ludGVncmF0aW9ucyk7XG5cbiAgICBpZiAoaW50ZWdyYXRpb25zQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgZXZlbnQuc2RrID0gZXZlbnQuc2RrIHx8IHt9O1xuICAgICAgZXZlbnQuc2RrLmludGVncmF0aW9ucyA9IF9fc3ByZWFkKGV2ZW50LnNkay5pbnRlZ3JhdGlvbnMgfHwgW10sIGludGVncmF0aW9uc0FycmF5KTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBUZWxscyB0aGUgYmFja2VuZCB0byBzZW5kIHRoaXMgZXZlbnRcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBTZW50cnkgZXZlbnQgdG8gc2VuZFxuICAgKi9cblxuXG4gIEJhc2VDbGllbnQucHJvdG90eXBlLl9zZW5kRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLl9nZXRCYWNrZW5kKCkuc2VuZEV2ZW50KGV2ZW50KTtcbiAgfTtcbiAgLyoqXG4gICAqIFByb2Nlc3NlcyB0aGUgZXZlbnQgYW5kIGxvZ3MgYW4gZXJyb3IgaW4gY2FzZSBvZiByZWplY3Rpb25cbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSBoaW50XG4gICAqIEBwYXJhbSBzY29wZVxuICAgKi9cblxuXG4gIEJhc2VDbGllbnQucHJvdG90eXBlLl9jYXB0dXJlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQsIGhpbnQsIHNjb3BlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NFdmVudChldmVudCwgaGludCwgc2NvcGUpLnRoZW4oZnVuY3Rpb24gKGZpbmFsRXZlbnQpIHtcbiAgICAgIHJldHVybiBmaW5hbEV2ZW50LmV2ZW50X2lkO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGxvZ2dlci5lcnJvcihyZWFzb24pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIFByb2Nlc3NlcyBhbiBldmVudCAoZWl0aGVyIGVycm9yIG9yIG1lc3NhZ2UpIGFuZCBzZW5kcyBpdCB0byBTZW50cnkuXG4gICAqXG4gICAqIFRoaXMgYWxzbyBhZGRzIGJyZWFkY3J1bWJzIGFuZCBjb250ZXh0IGluZm9ybWF0aW9uIHRvIHRoZSBldmVudC4gSG93ZXZlcixcbiAgICogcGxhdGZvcm0gc3BlY2lmaWMgbWV0YSBkYXRhIChzdWNoIGFzIHRoZSBVc2VyJ3MgSVAgYWRkcmVzcykgbXVzdCBiZSBhZGRlZFxuICAgKiBieSB0aGUgU0RLIGltcGxlbWVudG9yLlxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIHNlbmQgdG8gU2VudHJ5LlxuICAgKiBAcGFyYW0gaGludCBNYXkgY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24uXG4gICAqIEBwYXJhbSBzY29wZSBBIHNjb3BlIGNvbnRhaW5pbmcgZXZlbnQgbWV0YWRhdGEuXG4gICAqIEByZXR1cm5zIEEgU3luY1Byb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBldmVudCBvciByZWplY3RzIGluIGNhc2UgZXZlbnQgd2FzL3dpbGwgbm90IGJlIHNlbmQuXG4gICAqL1xuXG5cbiAgQmFzZUNsaWVudC5wcm90b3R5cGUuX3Byb2Nlc3NFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgaGludCwgc2NvcGUpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIF9hLCBfYjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuXG5cbiAgICB2YXIgX2MgPSB0aGlzLmdldE9wdGlvbnMoKSxcbiAgICAgICAgYmVmb3JlU2VuZCA9IF9jLmJlZm9yZVNlbmQsXG4gICAgICAgIHNhbXBsZVJhdGUgPSBfYy5zYW1wbGVSYXRlO1xuXG4gICAgdmFyIHRyYW5zcG9ydCA9IHRoaXMuZ2V0VHJhbnNwb3J0KCk7XG5cbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gU3luY1Byb21pc2UucmVqZWN0KG5ldyBTZW50cnlFcnJvcignU0RLIG5vdCBlbmFibGVkLCB3aWxsIG5vdCBjYXB0dXJlIGV2ZW50LicpKTtcbiAgICB9XG5cbiAgICB2YXIgaXNUcmFuc2FjdGlvbiA9IGV2ZW50LnR5cGUgPT09ICd0cmFuc2FjdGlvbic7IC8vIDEuMCA9PT0gMTAwJSBldmVudHMgYXJlIHNlbnRcbiAgICAvLyAwLjAgPT09IDAlIGV2ZW50cyBhcmUgc2VudFxuICAgIC8vIFNhbXBsaW5nIGZvciB0cmFuc2FjdGlvbiBoYXBwZW5zIHNvbWV3aGVyZSBlbHNlXG5cbiAgICBpZiAoIWlzVHJhbnNhY3Rpb24gJiYgdHlwZW9mIHNhbXBsZVJhdGUgPT09ICdudW1iZXInICYmIE1hdGgucmFuZG9tKCkgPiBzYW1wbGVSYXRlKSB7XG4gICAgICAoX2IgPSAoX2EgPSB0cmFuc3BvcnQpLnJlY29yZExvc3RFdmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIE91dGNvbWUuU2FtcGxlUmF0ZSwgJ2V2ZW50Jyk7XG4gICAgICByZXR1cm4gU3luY1Byb21pc2UucmVqZWN0KG5ldyBTZW50cnlFcnJvcihcIkRpc2NhcmRpbmcgZXZlbnQgYmVjYXVzZSBpdCdzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmFuZG9tIHNhbXBsZSAoc2FtcGxpbmcgcmF0ZSA9IFwiICsgc2FtcGxlUmF0ZSArIFwiKVwiKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3ByZXBhcmVFdmVudChldmVudCwgc2NvcGUsIGhpbnQpLnRoZW4oZnVuY3Rpb24gKHByZXBhcmVkKSB7XG4gICAgICB2YXIgX2EsIF9iO1xuXG4gICAgICBpZiAocHJlcGFyZWQgPT09IG51bGwpIHtcbiAgICAgICAgKF9iID0gKF9hID0gdHJhbnNwb3J0KS5yZWNvcmRMb3N0RXZlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBPdXRjb21lLkV2ZW50UHJvY2Vzc29yLCBldmVudC50eXBlIHx8ICdldmVudCcpO1xuICAgICAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoJ0FuIGV2ZW50IHByb2Nlc3NvciByZXR1cm5lZCBudWxsLCB3aWxsIG5vdCBzZW5kIGV2ZW50LicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNJbnRlcm5hbEV4Y2VwdGlvbiA9IGhpbnQgJiYgaGludC5kYXRhICYmIGhpbnQuZGF0YS5fX3NlbnRyeV9fID09PSB0cnVlO1xuXG4gICAgICBpZiAoaXNJbnRlcm5hbEV4Y2VwdGlvbiB8fCBpc1RyYW5zYWN0aW9uIHx8ICFiZWZvcmVTZW5kKSB7XG4gICAgICAgIHJldHVybiBwcmVwYXJlZDtcbiAgICAgIH1cblxuICAgICAgdmFyIGJlZm9yZVNlbmRSZXN1bHQgPSBiZWZvcmVTZW5kKHByZXBhcmVkLCBoaW50KTtcbiAgICAgIHJldHVybiBfdGhpcy5fZW5zdXJlQmVmb3JlU2VuZFJ2KGJlZm9yZVNlbmRSZXN1bHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHByb2Nlc3NlZEV2ZW50KSB7XG4gICAgICB2YXIgX2EsIF9iO1xuXG4gICAgICBpZiAocHJvY2Vzc2VkRXZlbnQgPT09IG51bGwpIHtcbiAgICAgICAgKF9iID0gKF9hID0gdHJhbnNwb3J0KS5yZWNvcmRMb3N0RXZlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBPdXRjb21lLkJlZm9yZVNlbmQsIGV2ZW50LnR5cGUgfHwgJ2V2ZW50Jyk7XG4gICAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcignYGJlZm9yZVNlbmRgIHJldHVybmVkIGBudWxsYCwgd2lsbCBub3Qgc2VuZCBldmVudC4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlc3Npb24gPSBzY29wZSAmJiBzY29wZS5nZXRTZXNzaW9uICYmIHNjb3BlLmdldFNlc3Npb24oKTtcblxuICAgICAgaWYgKCFpc1RyYW5zYWN0aW9uICYmIHNlc3Npb24pIHtcbiAgICAgICAgX3RoaXMuX3VwZGF0ZVNlc3Npb25Gcm9tRXZlbnQoc2Vzc2lvbiwgcHJvY2Vzc2VkRXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5fc2VuZEV2ZW50KHByb2Nlc3NlZEV2ZW50KTtcblxuICAgICAgcmV0dXJuIHByb2Nlc3NlZEV2ZW50O1xuICAgIH0pLnRoZW4obnVsbCwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yKSB7XG4gICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2FwdHVyZUV4Y2VwdGlvbihyZWFzb24sIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIF9fc2VudHJ5X186IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IHJlYXNvblxuICAgICAgfSk7XG5cbiAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihcIkV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgdGhyZXcgYW4gZXJyb3IsIG9yaWdpbmFsIGV2ZW50IHdpbGwgbm90IGJlIHNlbnQuIERldGFpbHMgaGF2ZSBiZWVuIHNlbnQgYXMgYSBuZXcgZXZlbnQuXFxuUmVhc29uOiBcIiArIHJlYXNvbik7XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBPY2N1cGllcyB0aGUgY2xpZW50IHdpdGggcHJvY2Vzc2luZyBhbmQgZXZlbnRcbiAgICovXG5cblxuICBCYXNlQ2xpZW50LnByb3RvdHlwZS5fcHJvY2VzcyA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX251bVByb2Nlc3NpbmcgKz0gMTtcbiAgICB2b2lkIHByb21pc2UudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIF90aGlzLl9udW1Qcm9jZXNzaW5nIC09IDE7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgX3RoaXMuX251bVByb2Nlc3NpbmcgLT0gMTtcbiAgICAgIHJldHVybiByZWFzb247XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGF0IHJldHVybiB2YWx1ZSBvZiBjb25maWd1cmVkIGBiZWZvcmVTZW5kYCBpcyBvZiBleHBlY3RlZCB0eXBlLlxuICAgKi9cblxuXG4gIEJhc2VDbGllbnQucHJvdG90eXBlLl9lbnN1cmVCZWZvcmVTZW5kUnYgPSBmdW5jdGlvbiAocnYpIHtcbiAgICB2YXIgbnVsbEVyciA9ICdgYmVmb3JlU2VuZGAgbWV0aG9kIGhhcyB0byByZXR1cm4gYG51bGxgIG9yIGEgdmFsaWQgZXZlbnQuJztcblxuICAgIGlmIChpc1RoZW5hYmxlKHJ2KSkge1xuICAgICAgcmV0dXJuIHJ2LnRoZW4oZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghKGlzUGxhaW5PYmplY3QoZXZlbnQpIHx8IGV2ZW50ID09PSBudWxsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihudWxsRXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBTZW50cnlFcnJvcihcImJlZm9yZVNlbmQgcmVqZWN0ZWQgd2l0aCBcIiArIGUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghKGlzUGxhaW5PYmplY3QocnYpIHx8IHJ2ID09PSBudWxsKSkge1xuICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKG51bGxFcnIpO1xuICAgIH1cblxuICAgIHJldHVybiBydjtcbiAgfTtcblxuICByZXR1cm4gQmFzZUNsaWVudDtcbn0oKTtcblxuZXhwb3J0IHsgQmFzZUNsaWVudCB9OyIsImltcG9ydCB7IFN0YXR1cyB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgU3luY1Byb21pc2UgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbi8qKiBOb29wIHRyYW5zcG9ydCAqL1xuXG52YXIgTm9vcFRyYW5zcG9ydCA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vb3BUcmFuc3BvcnQoKSB7fVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBOb29wVHJhbnNwb3J0LnByb3RvdHlwZS5zZW5kRXZlbnQgPSBmdW5jdGlvbiAoXykge1xuICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHJlYXNvbjogXCJOb29wVHJhbnNwb3J0OiBFdmVudCBoYXMgYmVlbiBza2lwcGVkIGJlY2F1c2Ugbm8gRHNuIGlzIGNvbmZpZ3VyZWQuXCIsXG4gICAgICBzdGF0dXM6IFN0YXR1cy5Ta2lwcGVkXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIE5vb3BUcmFuc3BvcnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKF8pIHtcbiAgICByZXR1cm4gU3luY1Byb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgfTtcblxuICByZXR1cm4gTm9vcFRyYW5zcG9ydDtcbn0oKTtcblxuZXhwb3J0IHsgTm9vcFRyYW5zcG9ydCB9OyIsImltcG9ydCB7IGxvZ2dlciwgU2VudHJ5RXJyb3IgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IE5vb3BUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydHMvbm9vcCc7XG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgaW1wbGVtZW50aW9uIG9mIGEgQmFja2VuZC5cbiAqIEBoaWRkZW5cbiAqL1xuXG52YXIgQmFzZUJhY2tlbmQgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICAvKiogQ3JlYXRlcyBhIG5ldyBiYWNrZW5kIGluc3RhbmNlLiAqL1xuICBmdW5jdGlvbiBCYXNlQmFja2VuZChvcHRpb25zKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIXRoaXMuX29wdGlvbnMuZHNuKSB7XG4gICAgICBsb2dnZXIud2FybignTm8gRFNOIHByb3ZpZGVkLCBiYWNrZW5kIHdpbGwgbm90IGRvIGFueXRoaW5nLicpO1xuICAgIH1cblxuICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRoaXMuX3NldHVwVHJhbnNwb3J0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuXG5cbiAgQmFzZUJhY2tlbmQucHJvdG90eXBlLmV2ZW50RnJvbUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChfZXhjZXB0aW9uLCBfaGludCkge1xuICAgIHRocm93IG5ldyBTZW50cnlFcnJvcignQmFja2VuZCBoYXMgdG8gaW1wbGVtZW50IGBldmVudEZyb21FeGNlcHRpb25gIG1ldGhvZCcpO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBCYXNlQmFja2VuZC5wcm90b3R5cGUuZXZlbnRGcm9tTWVzc2FnZSA9IGZ1bmN0aW9uIChfbWVzc2FnZSwgX2xldmVsLCBfaGludCkge1xuICAgIHRocm93IG5ldyBTZW50cnlFcnJvcignQmFja2VuZCBoYXMgdG8gaW1wbGVtZW50IGBldmVudEZyb21NZXNzYWdlYCBtZXRob2QnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQmFzZUJhY2tlbmQucHJvdG90eXBlLnNlbmRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZvaWQgdGhpcy5fdHJhbnNwb3J0LnNlbmRFdmVudChldmVudCkudGhlbihudWxsLCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciB3aGlsZSBzZW5kaW5nIGV2ZW50OiBcIiArIHJlYXNvbik7XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEJhc2VCYWNrZW5kLnByb3RvdHlwZS5zZW5kU2Vzc2lvbiA9IGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgaWYgKCF0aGlzLl90cmFuc3BvcnQuc2VuZFNlc3Npb24pIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiRHJvcHBpbmcgc2Vzc2lvbiBiZWNhdXNlIGN1c3RvbSB0cmFuc3BvcnQgZG9lc24ndCBpbXBsZW1lbnQgc2VuZFNlc3Npb25cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdm9pZCB0aGlzLl90cmFuc3BvcnQuc2VuZFNlc3Npb24oc2Vzc2lvbikudGhlbihudWxsLCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciB3aGlsZSBzZW5kaW5nIHNlc3Npb246IFwiICsgcmVhc29uKTtcbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQmFzZUJhY2tlbmQucHJvdG90eXBlLmdldFRyYW5zcG9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0O1xuICB9O1xuICAvKipcbiAgICogU2V0cyB1cCB0aGUgdHJhbnNwb3J0IHNvIGl0IGNhbiBiZSB1c2VkIGxhdGVyIHRvIHNlbmQgcmVxdWVzdHMuXG4gICAqL1xuXG5cbiAgQmFzZUJhY2tlbmQucHJvdG90eXBlLl9zZXR1cFRyYW5zcG9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IE5vb3BUcmFuc3BvcnQoKTtcbiAgfTtcblxuICByZXR1cm4gQmFzZUJhY2tlbmQ7XG59KCk7XG5cbmV4cG9ydCB7IEJhc2VCYWNrZW5kIH07IiwiLyoqXG4gKiBUaGlzIHdhcyBvcmlnaW5hbGx5IGZvcmtlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9vY2MvVHJhY2VLaXQsIGJ1dCBoYXMgc2luY2UgYmVlblxuICogbGFyZ2VseSBtb2RpZmllZCBhbmQgaXMgbm93IG1haW50YWluZWQgYXMgcGFydCBvZiBTZW50cnkgSlMgU0RLLlxuICovXG5pbXBvcnQgeyBfX2Fzc2lnbiwgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7IC8vIGdsb2JhbCByZWZlcmVuY2UgdG8gc2xpY2VcblxudmFyIFVOS05PV05fRlVOQ1RJT04gPSAnPyc7IC8vIENocm9taXVtIGJhc2VkIGJyb3dzZXJzOiBDaHJvbWUsIEJyYXZlLCBuZXcgT3BlcmEsIG5ldyBFZGdlXG5cbnZhciBjaHJvbWUgPSAvXlxccyphdCAoPzooLio/KSA/XFwoKT8oKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWUtZXh0ZW5zaW9ufGFkZHJlc3N8bmF0aXZlfGV2YWx8d2VicGFja3w8YW5vbnltb3VzPnxbLWEtel0rOnwuKmJ1bmRsZXxcXC8pLio/KSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xcKT9cXHMqJC9pOyAvLyBnZWNrbyByZWdleDogYCg/OmJ1bmRsZXxcXGQrXFwuanMpYDogYGJ1bmRsZWAgaXMgZm9yIHJlYWN0IG5hdGl2ZSwgYFxcZCtcXC5qc2AgYWxzbyBidXQgc3BlY2lmaWNhbGx5IGZvciByYW0gYnVuZGxlcyBiZWNhdXNlIGl0XG4vLyBnZW5lcmF0ZXMgZmlsZW5hbWVzIHdpdGhvdXQgYSBwcmVmaXggbGlrZSBgZmlsZTovL2AgdGhlIGZpbGVuYW1lcyBpbiB0aGUgc3RhY2t0cmFjZSBhcmUganVzdCA0Mi5qc1xuLy8gV2UgbmVlZCB0aGlzIHNwZWNpZmljIGNhc2UgZm9yIG5vdyBiZWNhdXNlIHdlIHdhbnQgbm8gb3RoZXIgcmVnZXggdG8gbWF0Y2guXG5cbnZhciBnZWNrbyA9IC9eXFxzKiguKj8pKD86XFwoKC4qPylcXCkpPyg/Ol58QCk/KCg/OmZpbGV8aHR0cHM/fGJsb2J8Y2hyb21lfHdlYnBhY2t8cmVzb3VyY2V8bW96LWV4dGVuc2lvbnxjYXBhY2l0b3IpLio/OlxcLy4qP3xcXFtuYXRpdmUgY29kZVxcXXxbXkBdKig/OmJ1bmRsZXxcXGQrXFwuanMpfFxcL1tcXHdcXC0uIC89XSspKD86OihcXGQrKSk/KD86OihcXGQrKSk/XFxzKiQvaTtcbnZhciB3aW5qcyA9IC9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT8uKykgKT9cXCg/KCg/OmZpbGV8bXMtYXBweHxodHRwcz98d2VicGFja3xibG9iKTouKj8pOihcXGQrKSg/OjooXFxkKykpP1xcKT9cXHMqJC9pO1xudmFyIGdlY2tvRXZhbCA9IC8oXFxTKykgbGluZSAoXFxkKykoPzogPiBldmFsIGxpbmUgXFxkKykqID4gZXZhbC9pO1xudmFyIGNocm9tZUV2YWwgPSAvXFwoKFxcUyopKD86OihcXGQrKSkoPzo6KFxcZCspKVxcKS87IC8vIEJhc2VkIG9uIG91ciBvd24gbWFwcGluZyBwYXR0ZXJuIC0gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnkvYmxvYi85ZjA4MzA1ZTA5ODY2YzhiZDZkMGMyNGY1YjBhYWJkZDdkZDZjNTljL3NyYy9zZW50cnkvbGFuZy9qYXZhc2NyaXB0L2Vycm9ybWFwcGluZy5weSNMODMtTDEwOFxuXG52YXIgcmVhY3RNaW5pZmllZFJlZ2V4cCA9IC9NaW5pZmllZCBSZWFjdCBlcnJvciAjXFxkKzsvaTtcbi8qKiBKU0RvYyAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdGFja1RyYWNlKGV4KSB7XG4gIHZhciBzdGFjayA9IG51bGw7XG4gIHZhciBwb3BTaXplID0gMDtcblxuICBpZiAoZXgpIHtcbiAgICBpZiAodHlwZW9mIGV4LmZyYW1lc1RvUG9wID09PSAnbnVtYmVyJykge1xuICAgICAgcG9wU2l6ZSA9IGV4LmZyYW1lc1RvUG9wO1xuICAgIH0gZWxzZSBpZiAocmVhY3RNaW5pZmllZFJlZ2V4cC50ZXN0KGV4Lm1lc3NhZ2UpKSB7XG4gICAgICBwb3BTaXplID0gMTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgbXVzdCBiZSB0cmllZCBmaXJzdCBiZWNhdXNlIE9wZXJhIDEwICpkZXN0cm95cypcbiAgICAvLyBpdHMgc3RhY2t0cmFjZSBwcm9wZXJ0eSBpZiB5b3UgdHJ5IHRvIGFjY2VzcyB0aGUgc3RhY2tcbiAgICAvLyBwcm9wZXJ0eSBmaXJzdCEhXG4gICAgc3RhY2sgPSBjb21wdXRlU3RhY2tUcmFjZUZyb21TdGFja3RyYWNlUHJvcChleCk7XG5cbiAgICBpZiAoc3RhY2spIHtcbiAgICAgIHJldHVybiBwb3BGcmFtZXMoc3RhY2ssIHBvcFNpemUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkgey8vIG5vLWVtcHR5XG4gIH1cblxuICB0cnkge1xuICAgIHN0YWNrID0gY29tcHV0ZVN0YWNrVHJhY2VGcm9tU3RhY2tQcm9wKGV4KTtcblxuICAgIGlmIChzdGFjaykge1xuICAgICAgcmV0dXJuIHBvcEZyYW1lcyhzdGFjaywgcG9wU2l6ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7Ly8gbm8tZW1wdHlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZTogZXh0cmFjdE1lc3NhZ2UoZXgpLFxuICAgIG5hbWU6IGV4ICYmIGV4Lm5hbWUsXG4gICAgc3RhY2s6IFtdLFxuICAgIGZhaWxlZDogdHJ1ZVxuICB9O1xufVxuLyoqIEpTRG9jICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgY29tcGxleGl0eVxuXG5mdW5jdGlvbiBjb21wdXRlU3RhY2tUcmFjZUZyb21TdGFja1Byb3AoZXgpIHtcbiAgdmFyIF9hLCBfYjtcblxuICBpZiAoIWV4IHx8ICFleC5zdGFjaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBsaW5lcyA9IGV4LnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgdmFyIGlzRXZhbDtcbiAgdmFyIHN1Ym1hdGNoO1xuICB2YXIgcGFydHM7XG4gIHZhciBlbGVtZW50O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAocGFydHMgPSBjaHJvbWUuZXhlYyhsaW5lc1tpXSkpIHtcbiAgICAgIHZhciBpc05hdGl2ZSA9IHBhcnRzWzJdICYmIHBhcnRzWzJdLmluZGV4T2YoJ25hdGl2ZScpID09PSAwOyAvLyBzdGFydCBvZiBsaW5lXG5cbiAgICAgIGlzRXZhbCA9IHBhcnRzWzJdICYmIHBhcnRzWzJdLmluZGV4T2YoJ2V2YWwnKSA9PT0gMDsgLy8gc3RhcnQgb2YgbGluZVxuXG4gICAgICBpZiAoaXNFdmFsICYmIChzdWJtYXRjaCA9IGNocm9tZUV2YWwuZXhlYyhwYXJ0c1syXSkpKSB7XG4gICAgICAgIC8vIHRocm93IG91dCBldmFsIGxpbmUvY29sdW1uIGFuZCB1c2UgdG9wLW1vc3QgbGluZS9jb2x1bW4gbnVtYmVyXG4gICAgICAgIHBhcnRzWzJdID0gc3VibWF0Y2hbMV07IC8vIHVybFxuXG4gICAgICAgIHBhcnRzWzNdID0gc3VibWF0Y2hbMl07IC8vIGxpbmVcblxuICAgICAgICBwYXJ0c1s0XSA9IHN1Ym1hdGNoWzNdOyAvLyBjb2x1bW5cbiAgICAgIH0gLy8gQXJwYWQ6IFdvcmtpbmcgd2l0aCB0aGUgcmVnZXhwIGFib3ZlIGlzIHN1cGVyIHBhaW5mdWwuIGl0IGlzIHF1aXRlIGEgaGFjaywgYnV0IGp1c3Qgc3RyaXBwaW5nIHRoZSBgYWRkcmVzcyBhdCBgXG4gICAgICAvLyBwcmVmaXggaGVyZSBzZWVtcyBsaWtlIHRoZSBxdWlja2VzdCBzb2x1dGlvbiBmb3Igbm93LlxuXG5cbiAgICAgIHZhciB1cmwgPSBwYXJ0c1syXSAmJiBwYXJ0c1syXS5pbmRleE9mKCdhZGRyZXNzIGF0ICcpID09PSAwID8gcGFydHNbMl0uc3Vic3RyKCdhZGRyZXNzIGF0ICcubGVuZ3RoKSA6IHBhcnRzWzJdOyAvLyBLYW1pbDogT25lIG1vcmUgaGFjayB3b24ndCBodXJ0IHVzIHJpZ2h0PyBVbmRlcnN0YW5kaW5nIGFuZCBhZGRpbmcgbW9yZSBydWxlcyBvbiB0b3Agb2YgdGhlc2UgcmVnZXhwcyByaWdodCBub3dcbiAgICAgIC8vIHdvdWxkIGJlIHdheSB0b28gdGltZSBjb25zdW1pbmcuIChUT0RPOiBSZXdyaXRlIHdob2xlIFJlZ0V4cCB0byBiZSBtb3JlIHJlYWRhYmxlKVxuXG4gICAgICB2YXIgZnVuYyA9IHBhcnRzWzFdIHx8IFVOS05PV05fRlVOQ1RJT047XG4gICAgICBfYSA9IF9fcmVhZChleHRyYWN0U2FmYXJpRXh0ZW5zaW9uRGV0YWlscyhmdW5jLCB1cmwpLCAyKSwgZnVuYyA9IF9hWzBdLCB1cmwgPSBfYVsxXTtcbiAgICAgIGVsZW1lbnQgPSB7XG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICBhcmdzOiBpc05hdGl2ZSA/IFtwYXJ0c1syXV0gOiBbXSxcbiAgICAgICAgbGluZTogcGFydHNbM10gPyArcGFydHNbM10gOiBudWxsLFxuICAgICAgICBjb2x1bW46IHBhcnRzWzRdID8gK3BhcnRzWzRdIDogbnVsbFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHBhcnRzID0gd2luanMuZXhlYyhsaW5lc1tpXSkpIHtcbiAgICAgIGVsZW1lbnQgPSB7XG4gICAgICAgIHVybDogcGFydHNbMl0sXG4gICAgICAgIGZ1bmM6IHBhcnRzWzFdIHx8IFVOS05PV05fRlVOQ1RJT04sXG4gICAgICAgIGFyZ3M6IFtdLFxuICAgICAgICBsaW5lOiArcGFydHNbM10sXG4gICAgICAgIGNvbHVtbjogcGFydHNbNF0gPyArcGFydHNbNF0gOiBudWxsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAocGFydHMgPSBnZWNrby5leGVjKGxpbmVzW2ldKSkge1xuICAgICAgaXNFdmFsID0gcGFydHNbM10gJiYgcGFydHNbM10uaW5kZXhPZignID4gZXZhbCcpID4gLTE7XG5cbiAgICAgIGlmIChpc0V2YWwgJiYgKHN1Ym1hdGNoID0gZ2Vja29FdmFsLmV4ZWMocGFydHNbM10pKSkge1xuICAgICAgICAvLyB0aHJvdyBvdXQgZXZhbCBsaW5lL2NvbHVtbiBhbmQgdXNlIHRvcC1tb3N0IGxpbmUgbnVtYmVyXG4gICAgICAgIHBhcnRzWzFdID0gcGFydHNbMV0gfHwgXCJldmFsXCI7XG4gICAgICAgIHBhcnRzWzNdID0gc3VibWF0Y2hbMV07XG4gICAgICAgIHBhcnRzWzRdID0gc3VibWF0Y2hbMl07XG4gICAgICAgIHBhcnRzWzVdID0gJyc7IC8vIG5vIGNvbHVtbiB3aGVuIGV2YWxcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCAmJiAhcGFydHNbNV0gJiYgZXguY29sdW1uTnVtYmVyICE9PSB2b2lkIDApIHtcbiAgICAgICAgLy8gRmlyZUZveCB1c2VzIHRoaXMgYXdlc29tZSBjb2x1bW5OdW1iZXIgcHJvcGVydHkgZm9yIGl0cyB0b3AgZnJhbWVcbiAgICAgICAgLy8gQWxzbyBub3RlLCBGaXJlZm94J3MgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkIGFuZCBldmVyeXRoaW5nIGVsc2UgZXhwZWN0cyAxLWJhc2VkLFxuICAgICAgICAvLyBzbyBhZGRpbmcgMVxuICAgICAgICAvLyBOT1RFOiB0aGlzIGhhY2sgZG9lc24ndCB3b3JrIGlmIHRvcC1tb3N0IGZyYW1lIGlzIGV2YWxcbiAgICAgICAgc3RhY2tbMF0uY29sdW1uID0gZXguY29sdW1uTnVtYmVyICsgMTtcbiAgICAgIH1cblxuICAgICAgdmFyIHVybCA9IHBhcnRzWzNdO1xuICAgICAgdmFyIGZ1bmMgPSBwYXJ0c1sxXSB8fCBVTktOT1dOX0ZVTkNUSU9OO1xuICAgICAgX2IgPSBfX3JlYWQoZXh0cmFjdFNhZmFyaUV4dGVuc2lvbkRldGFpbHMoZnVuYywgdXJsKSwgMiksIGZ1bmMgPSBfYlswXSwgdXJsID0gX2JbMV07XG4gICAgICBlbGVtZW50ID0ge1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgYXJnczogcGFydHNbMl0gPyBwYXJ0c1syXS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgIGxpbmU6IHBhcnRzWzRdID8gK3BhcnRzWzRdIDogbnVsbCxcbiAgICAgICAgY29sdW1uOiBwYXJ0c1s1XSA/ICtwYXJ0c1s1XSA6IG51bGxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudC5mdW5jICYmIGVsZW1lbnQubGluZSkge1xuICAgICAgZWxlbWVudC5mdW5jID0gVU5LTk9XTl9GVU5DVElPTjtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKCFzdGFjay5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZTogZXh0cmFjdE1lc3NhZ2UoZXgpLFxuICAgIG5hbWU6IGV4Lm5hbWUsXG4gICAgc3RhY2s6IHN0YWNrXG4gIH07XG59XG4vKiogSlNEb2MgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cblxuZnVuY3Rpb24gY29tcHV0ZVN0YWNrVHJhY2VGcm9tU3RhY2t0cmFjZVByb3AoZXgpIHtcbiAgaWYgKCFleCB8fCAhZXguc3RhY2t0cmFjZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIEFjY2VzcyBhbmQgc3RvcmUgdGhlIHN0YWNrdHJhY2UgcHJvcGVydHkgYmVmb3JlIGRvaW5nIEFOWVRISU5HXG4gIC8vIGVsc2UgdG8gaXQgYmVjYXVzZSBPcGVyYSBpcyBub3QgdmVyeSBnb29kIGF0IHByb3ZpZGluZyBpdFxuICAvLyByZWxpYWJseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLlxuXG5cbiAgdmFyIHN0YWNrdHJhY2UgPSBleC5zdGFja3RyYWNlO1xuICB2YXIgb3BlcmExMFJlZ2V4ID0gLyBsaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspKD86OiBpbiBmdW5jdGlvbiAoXFxTKykpPyQvaTtcbiAgdmFyIG9wZXJhMTFSZWdleCA9IC8gbGluZSAoXFxkKyksIGNvbHVtbiAoXFxkKylcXHMqKD86aW4gKD86PGFub255bW91cyBmdW5jdGlvbjogKFtePl0rKT58KFteKV0rKSlcXCgoLiopXFwpKT8gaW4gKC4qKTpcXHMqJC9pO1xuICB2YXIgbGluZXMgPSBzdGFja3RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBwYXJ0cztcblxuICBmb3IgKHZhciBsaW5lID0gMDsgbGluZSA8IGxpbmVzLmxlbmd0aDsgbGluZSArPSAyKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBudWxsO1xuXG4gICAgaWYgKHBhcnRzID0gb3BlcmExMFJlZ2V4LmV4ZWMobGluZXNbbGluZV0pKSB7XG4gICAgICBlbGVtZW50ID0ge1xuICAgICAgICB1cmw6IHBhcnRzWzJdLFxuICAgICAgICBmdW5jOiBwYXJ0c1szXSxcbiAgICAgICAgYXJnczogW10sXG4gICAgICAgIGxpbmU6ICtwYXJ0c1sxXSxcbiAgICAgICAgY29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAocGFydHMgPSBvcGVyYTExUmVnZXguZXhlYyhsaW5lc1tsaW5lXSkpIHtcbiAgICAgIGVsZW1lbnQgPSB7XG4gICAgICAgIHVybDogcGFydHNbNl0sXG4gICAgICAgIGZ1bmM6IHBhcnRzWzNdIHx8IHBhcnRzWzRdLFxuICAgICAgICBhcmdzOiBwYXJ0c1s1XSA/IHBhcnRzWzVdLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgbGluZTogK3BhcnRzWzFdLFxuICAgICAgICBjb2x1bW46ICtwYXJ0c1syXVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LmZ1bmMgJiYgZWxlbWVudC5saW5lKSB7XG4gICAgICAgIGVsZW1lbnQuZnVuYyA9IFVOS05PV05fRlVOQ1RJT047XG4gICAgICB9XG5cbiAgICAgIHN0YWNrLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFzdGFjay5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZTogZXh0cmFjdE1lc3NhZ2UoZXgpLFxuICAgIG5hbWU6IGV4Lm5hbWUsXG4gICAgc3RhY2s6IHN0YWNrXG4gIH07XG59XG4vKipcbiAqIFNhZmFyaSB3ZWIgZXh0ZW5zaW9ucywgc3RhcnRpbmcgdmVyc2lvbiB1bmtub3duLCBjYW4gcHJvZHVjZSBcImZyYW1lcy1vbmx5XCIgc3RhY2t0cmFjZXMuXG4gKiBXaGF0IGl0IG1lYW5zLCBpcyB0aGF0IGluc3RlYWQgb2YgZm9ybWF0IGxpa2U6XG4gKlxuICogRXJyb3I6IHdhdFxuICogICBhdCBmdW5jdGlvbkB1cmw6cm93OmNvbFxuICogICBhdCBmdW5jdGlvbkB1cmw6cm93OmNvbFxuICogICBhdCBmdW5jdGlvbkB1cmw6cm93OmNvbFxuICpcbiAqIGl0IHByb2R1Y2VzIHNvbWV0aGluZyBsaWtlOlxuICpcbiAqICAgZnVuY3Rpb25AdXJsOnJvdzpjb2xcbiAqICAgZnVuY3Rpb25AdXJsOnJvdzpjb2xcbiAqICAgZnVuY3Rpb25AdXJsOnJvdzpjb2xcbiAqXG4gKiBCZWNhdXNlIG9mIHRoYXQsIGl0IHdvbid0IGJlIGNhcHR1cmVkIGJ5IGBjaHJvbWVgIFJlZ0V4cCBhbmQgd2lsbCBmYWxsIGludG8gYEdlY2tvYCBicmFuY2guXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4dHJhY3RlZCBzbyB0aGF0IHdlIGNhbiB1c2UgaXQgaW4gYm90aCBwbGFjZXMgd2l0aG91dCBkdXBsaWNhdGluZyB0aGUgbG9naWMuXG4gKiBVbmZvcnR1bmF0ZWxseSBcImp1c3RcIiBjaGFuZ2luZyBSZWdFeHAgaXMgdG9vIGNvbXBsaWNhdGVkIG5vdyBhbmQgbWFraW5nIGl0IHBhc3MgYWxsIHRlc3RzXG4gKiBhbmQgZml4IHRoaXMgY2FzZSBzZWVtcyBsaWtlIGFuIGltcG9zc2libGUsIG9yIGF0IGxlYXN0IHdheSB0b28gdGltZS1jb25zdW1pbmcgdGFzay5cbiAqL1xuXG5cbnZhciBleHRyYWN0U2FmYXJpRXh0ZW5zaW9uRGV0YWlscyA9IGZ1bmN0aW9uIGV4dHJhY3RTYWZhcmlFeHRlbnNpb25EZXRhaWxzKGZ1bmMsIHVybCkge1xuICB2YXIgaXNTYWZhcmlFeHRlbnNpb24gPSBmdW5jLmluZGV4T2YoJ3NhZmFyaS1leHRlbnNpb24nKSAhPT0gLTE7XG4gIHZhciBpc1NhZmFyaVdlYkV4dGVuc2lvbiA9IGZ1bmMuaW5kZXhPZignc2FmYXJpLXdlYi1leHRlbnNpb24nKSAhPT0gLTE7XG4gIHJldHVybiBpc1NhZmFyaUV4dGVuc2lvbiB8fCBpc1NhZmFyaVdlYkV4dGVuc2lvbiA/IFtmdW5jLmluZGV4T2YoJ0AnKSAhPT0gLTEgPyBmdW5jLnNwbGl0KCdAJylbMF0gOiBVTktOT1dOX0ZVTkNUSU9OLCBpc1NhZmFyaUV4dGVuc2lvbiA/IFwic2FmYXJpLWV4dGVuc2lvbjpcIiArIHVybCA6IFwic2FmYXJpLXdlYi1leHRlbnNpb246XCIgKyB1cmxdIDogW2Z1bmMsIHVybF07XG59O1xuLyoqIFJlbW92ZSBOIG51bWJlciBvZiBmcmFtZXMgZnJvbSB0aGUgc3RhY2sgKi9cblxuXG5mdW5jdGlvbiBwb3BGcmFtZXMoc3RhY2t0cmFjZSwgcG9wU2l6ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgc3RhY2t0cmFjZSksIHtcbiAgICAgIHN0YWNrOiBzdGFja3RyYWNlLnN0YWNrLnNsaWNlKHBvcFNpemUpXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gc3RhY2t0cmFjZTtcbiAgfVxufVxuLyoqXG4gKiBUaGVyZSBhcmUgY2FzZXMgd2hlcmUgc3RhY2t0cmFjZS5tZXNzYWdlIGlzIGFuIEV2ZW50IG9iamVjdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMTk0OVxuICogSW4gdGhpcyBzcGVjaWZpYyBjYXNlIHdlIHRyeSB0byBleHRyYWN0IHN0YWNrdHJhY2UubWVzc2FnZS5lcnJvci5tZXNzYWdlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cblxuZnVuY3Rpb24gZXh0cmFjdE1lc3NhZ2UoZXgpIHtcbiAgdmFyIG1lc3NhZ2UgPSBleCAmJiBleC5tZXNzYWdlO1xuXG4gIGlmICghbWVzc2FnZSkge1xuICAgIHJldHVybiAnTm8gZXJyb3IgbWVzc2FnZSc7XG4gIH1cblxuICBpZiAobWVzc2FnZS5lcnJvciAmJiB0eXBlb2YgbWVzc2FnZS5lcnJvci5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBtZXNzYWdlLmVycm9yLm1lc3NhZ2U7XG4gIH1cblxuICByZXR1cm4gbWVzc2FnZTtcbn0iLCJpbXBvcnQgeyBleHRyYWN0RXhjZXB0aW9uS2V5c0Zvck1lc3NhZ2UsIGlzRXZlbnQsIG5vcm1hbGl6ZVRvU2l6ZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0IHsgY29tcHV0ZVN0YWNrVHJhY2UgfSBmcm9tICcuL3RyYWNla2l0JztcbnZhciBTVEFDS1RSQUNFX0xJTUlUID0gNTA7XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBleGNlcHRpb24gZnJvbSBhbiBUcmFjZUtpdFN0YWNrVHJhY2VcbiAqIEBwYXJhbSBzdGFja3RyYWNlIFRyYWNlS2l0U3RhY2tUcmFjZSB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvblxuICogQGhpZGRlblxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGNlcHRpb25Gcm9tU3RhY2t0cmFjZShzdGFja3RyYWNlKSB7XG4gIHZhciBmcmFtZXMgPSBwcmVwYXJlRnJhbWVzRm9yRXZlbnQoc3RhY2t0cmFjZS5zdGFjayk7XG4gIHZhciBleGNlcHRpb24gPSB7XG4gICAgdHlwZTogc3RhY2t0cmFjZS5uYW1lLFxuICAgIHZhbHVlOiBzdGFja3RyYWNlLm1lc3NhZ2VcbiAgfTtcblxuICBpZiAoZnJhbWVzICYmIGZyYW1lcy5sZW5ndGgpIHtcbiAgICBleGNlcHRpb24uc3RhY2t0cmFjZSA9IHtcbiAgICAgIGZyYW1lczogZnJhbWVzXG4gICAgfTtcbiAgfVxuXG4gIGlmIChleGNlcHRpb24udHlwZSA9PT0gdW5kZWZpbmVkICYmIGV4Y2VwdGlvbi52YWx1ZSA9PT0gJycpIHtcbiAgICBleGNlcHRpb24udmFsdWUgPSAnVW5yZWNvdmVyYWJsZSBlcnJvciBjYXVnaHQnO1xuICB9XG5cbiAgcmV0dXJuIGV4Y2VwdGlvbjtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudEZyb21QbGFpbk9iamVjdChleGNlcHRpb24sIHN5bnRoZXRpY0V4Y2VwdGlvbiwgcmVqZWN0aW9uKSB7XG4gIHZhciBldmVudCA9IHtcbiAgICBleGNlcHRpb246IHtcbiAgICAgIHZhbHVlczogW3tcbiAgICAgICAgdHlwZTogaXNFdmVudChleGNlcHRpb24pID8gZXhjZXB0aW9uLmNvbnN0cnVjdG9yLm5hbWUgOiByZWplY3Rpb24gPyAnVW5oYW5kbGVkUmVqZWN0aW9uJyA6ICdFcnJvcicsXG4gICAgICAgIHZhbHVlOiBcIk5vbi1FcnJvciBcIiArIChyZWplY3Rpb24gPyAncHJvbWlzZSByZWplY3Rpb24nIDogJ2V4Y2VwdGlvbicpICsgXCIgY2FwdHVyZWQgd2l0aCBrZXlzOiBcIiArIGV4dHJhY3RFeGNlcHRpb25LZXlzRm9yTWVzc2FnZShleGNlcHRpb24pXG4gICAgICB9XVxuICAgIH0sXG4gICAgZXh0cmE6IHtcbiAgICAgIF9fc2VyaWFsaXplZF9fOiBub3JtYWxpemVUb1NpemUoZXhjZXB0aW9uKVxuICAgIH1cbiAgfTtcblxuICBpZiAoc3ludGhldGljRXhjZXB0aW9uKSB7XG4gICAgdmFyIHN0YWNrdHJhY2UgPSBjb21wdXRlU3RhY2tUcmFjZShzeW50aGV0aWNFeGNlcHRpb24pO1xuICAgIHZhciBmcmFtZXNfMSA9IHByZXBhcmVGcmFtZXNGb3JFdmVudChzdGFja3RyYWNlLnN0YWNrKTtcbiAgICBldmVudC5zdGFja3RyYWNlID0ge1xuICAgICAgZnJhbWVzOiBmcmFtZXNfMVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZXZlbnQ7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRGcm9tU3RhY2t0cmFjZShzdGFja3RyYWNlKSB7XG4gIHZhciBleGNlcHRpb24gPSBleGNlcHRpb25Gcm9tU3RhY2t0cmFjZShzdGFja3RyYWNlKTtcbiAgcmV0dXJuIHtcbiAgICBleGNlcHRpb246IHtcbiAgICAgIHZhbHVlczogW2V4Y2VwdGlvbl1cbiAgICB9XG4gIH07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUZyYW1lc0ZvckV2ZW50KHN0YWNrKSB7XG4gIGlmICghc3RhY2sgfHwgIXN0YWNrLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBsb2NhbFN0YWNrID0gc3RhY2s7XG4gIHZhciBmaXJzdEZyYW1lRnVuY3Rpb24gPSBsb2NhbFN0YWNrWzBdLmZ1bmMgfHwgJyc7XG4gIHZhciBsYXN0RnJhbWVGdW5jdGlvbiA9IGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jIHx8ICcnOyAvLyBJZiBzdGFjayBzdGFydHMgd2l0aCBvbmUgb2Ygb3VyIEFQSSBjYWxscywgcmVtb3ZlIGl0IChzdGFydHMsIG1lYW5pbmcgaXQncyB0aGUgdG9wIG9mIHRoZSBzdGFjayAtIGFrYSBsYXN0IGNhbGwpXG5cbiAgaWYgKGZpcnN0RnJhbWVGdW5jdGlvbi5pbmRleE9mKCdjYXB0dXJlTWVzc2FnZScpICE9PSAtMSB8fCBmaXJzdEZyYW1lRnVuY3Rpb24uaW5kZXhPZignY2FwdHVyZUV4Y2VwdGlvbicpICE9PSAtMSkge1xuICAgIGxvY2FsU3RhY2sgPSBsb2NhbFN0YWNrLnNsaWNlKDEpO1xuICB9IC8vIElmIHN0YWNrIGVuZHMgd2l0aCBvbmUgb2Ygb3VyIGludGVybmFsIEFQSSBjYWxscywgcmVtb3ZlIGl0IChlbmRzLCBtZWFuaW5nIGl0J3MgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgLSBha2EgdG9wLW1vc3QgY2FsbClcblxuXG4gIGlmIChsYXN0RnJhbWVGdW5jdGlvbi5pbmRleE9mKCdzZW50cnlXcmFwcGVkJykgIT09IC0xKSB7XG4gICAgbG9jYWxTdGFjayA9IGxvY2FsU3RhY2suc2xpY2UoMCwgLTEpO1xuICB9IC8vIFRoZSBmcmFtZSB3aGVyZSB0aGUgY3Jhc2ggaGFwcGVuZWQsIHNob3VsZCBiZSB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgYXJyYXlcblxuXG4gIHJldHVybiBsb2NhbFN0YWNrLnNsaWNlKDAsIFNUQUNLVFJBQ0VfTElNSVQpLm1hcChmdW5jdGlvbiAoZnJhbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sbm86IGZyYW1lLmNvbHVtbiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IGZyYW1lLmNvbHVtbixcbiAgICAgIGZpbGVuYW1lOiBmcmFtZS51cmwgfHwgbG9jYWxTdGFja1swXS51cmwsXG4gICAgICBmdW5jdGlvbjogZnJhbWUuZnVuYyB8fCAnPycsXG4gICAgICBpbl9hcHA6IHRydWUsXG4gICAgICBsaW5lbm86IGZyYW1lLmxpbmUgPT09IG51bGwgPyB1bmRlZmluZWQgOiBmcmFtZS5saW5lXG4gICAgfTtcbiAgfSkucmV2ZXJzZSgpO1xufSIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTZXZlcml0eSB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgYWRkRXhjZXB0aW9uTWVjaGFuaXNtLCBhZGRFeGNlcHRpb25UeXBlVmFsdWUsIGlzRE9NRXJyb3IsIGlzRE9NRXhjZXB0aW9uLCBpc0Vycm9yLCBpc0Vycm9yRXZlbnQsIGlzRXZlbnQsIGlzUGxhaW5PYmplY3QsIFN5bmNQcm9taXNlIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgeyBldmVudEZyb21QbGFpbk9iamVjdCwgZXZlbnRGcm9tU3RhY2t0cmFjZSwgcHJlcGFyZUZyYW1lc0ZvckV2ZW50IH0gZnJvbSAnLi9wYXJzZXJzJztcbmltcG9ydCB7IGNvbXB1dGVTdGFja1RyYWNlIH0gZnJvbSAnLi90cmFjZWtpdCc7XG4vKipcbiAqIEJ1aWxkcyBhbmQgRXZlbnQgZnJvbSBhIEV4Y2VwdGlvblxuICogQGhpZGRlblxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudEZyb21FeGNlcHRpb24ob3B0aW9ucywgZXhjZXB0aW9uLCBoaW50KSB7XG4gIHZhciBzeW50aGV0aWNFeGNlcHRpb24gPSBoaW50ICYmIGhpbnQuc3ludGhldGljRXhjZXB0aW9uIHx8IHVuZGVmaW5lZDtcbiAgdmFyIGV2ZW50ID0gZXZlbnRGcm9tVW5rbm93bklucHV0KGV4Y2VwdGlvbiwgc3ludGhldGljRXhjZXB0aW9uLCB7XG4gICAgYXR0YWNoU3RhY2t0cmFjZTogb3B0aW9ucy5hdHRhY2hTdGFja3RyYWNlXG4gIH0pO1xuICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIHtcbiAgICBoYW5kbGVkOiB0cnVlLFxuICAgIHR5cGU6ICdnZW5lcmljJ1xuICB9KTtcbiAgZXZlbnQubGV2ZWwgPSBTZXZlcml0eS5FcnJvcjtcblxuICBpZiAoaGludCAmJiBoaW50LmV2ZW50X2lkKSB7XG4gICAgZXZlbnQuZXZlbnRfaWQgPSBoaW50LmV2ZW50X2lkO1xuICB9XG5cbiAgcmV0dXJuIFN5bmNQcm9taXNlLnJlc29sdmUoZXZlbnQpO1xufVxuLyoqXG4gKiBCdWlsZHMgYW5kIEV2ZW50IGZyb20gYSBNZXNzYWdlXG4gKiBAaGlkZGVuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50RnJvbU1lc3NhZ2Uob3B0aW9ucywgbWVzc2FnZSwgbGV2ZWwsIGhpbnQpIHtcbiAgaWYgKGxldmVsID09PSB2b2lkIDApIHtcbiAgICBsZXZlbCA9IFNldmVyaXR5LkluZm87XG4gIH1cblxuICB2YXIgc3ludGhldGljRXhjZXB0aW9uID0gaGludCAmJiBoaW50LnN5bnRoZXRpY0V4Y2VwdGlvbiB8fCB1bmRlZmluZWQ7XG4gIHZhciBldmVudCA9IGV2ZW50RnJvbVN0cmluZyhtZXNzYWdlLCBzeW50aGV0aWNFeGNlcHRpb24sIHtcbiAgICBhdHRhY2hTdGFja3RyYWNlOiBvcHRpb25zLmF0dGFjaFN0YWNrdHJhY2VcbiAgfSk7XG4gIGV2ZW50LmxldmVsID0gbGV2ZWw7XG5cbiAgaWYgKGhpbnQgJiYgaGludC5ldmVudF9pZCkge1xuICAgIGV2ZW50LmV2ZW50X2lkID0gaGludC5ldmVudF9pZDtcbiAgfVxuXG4gIHJldHVybiBTeW5jUHJvbWlzZS5yZXNvbHZlKGV2ZW50KTtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudEZyb21Vbmtub3duSW5wdXQoZXhjZXB0aW9uLCBzeW50aGV0aWNFeGNlcHRpb24sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBldmVudDtcblxuICBpZiAoaXNFcnJvckV2ZW50KGV4Y2VwdGlvbikgJiYgZXhjZXB0aW9uLmVycm9yKSB7XG4gICAgLy8gSWYgaXQgaXMgYW4gRXJyb3JFdmVudCB3aXRoIGBlcnJvcmAgcHJvcGVydHksIGV4dHJhY3QgaXQgdG8gZ2V0IGFjdHVhbCBFcnJvclxuICAgIHZhciBlcnJvckV2ZW50ID0gZXhjZXB0aW9uOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblxuICAgIGV4Y2VwdGlvbiA9IGVycm9yRXZlbnQuZXJyb3I7XG4gICAgZXZlbnQgPSBldmVudEZyb21TdGFja3RyYWNlKGNvbXB1dGVTdGFja1RyYWNlKGV4Y2VwdGlvbikpO1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIGlmIChpc0RPTUVycm9yKGV4Y2VwdGlvbikgfHwgaXNET01FeGNlcHRpb24oZXhjZXB0aW9uKSkge1xuICAgIC8vIElmIGl0IGlzIGEgRE9NRXJyb3Igb3IgRE9NRXhjZXB0aW9uICh3aGljaCBhcmUgbGVnYWN5IEFQSXMsIGJ1dCBzdGlsbCBzdXBwb3J0ZWQgaW4gc29tZSBicm93c2VycylcbiAgICAvLyB0aGVuIHdlIGp1c3QgZXh0cmFjdCB0aGUgbmFtZSwgY29kZSwgYW5kIG1lc3NhZ2UsIGFzIHRoZXkgZG9uJ3QgcHJvdmlkZSBhbnl0aGluZyBlbHNlXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTUVycm9yXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTUV4Y2VwdGlvblxuICAgIHZhciBkb21FeGNlcHRpb24gPSBleGNlcHRpb247XG4gICAgdmFyIG5hbWVfMSA9IGRvbUV4Y2VwdGlvbi5uYW1lIHx8IChpc0RPTUVycm9yKGRvbUV4Y2VwdGlvbikgPyAnRE9NRXJyb3InIDogJ0RPTUV4Y2VwdGlvbicpO1xuICAgIHZhciBtZXNzYWdlID0gZG9tRXhjZXB0aW9uLm1lc3NhZ2UgPyBuYW1lXzEgKyBcIjogXCIgKyBkb21FeGNlcHRpb24ubWVzc2FnZSA6IG5hbWVfMTtcbiAgICBldmVudCA9IGV2ZW50RnJvbVN0cmluZyhtZXNzYWdlLCBzeW50aGV0aWNFeGNlcHRpb24sIG9wdGlvbnMpO1xuICAgIGFkZEV4Y2VwdGlvblR5cGVWYWx1ZShldmVudCwgbWVzc2FnZSk7XG5cbiAgICBpZiAoJ2NvZGUnIGluIGRvbUV4Y2VwdGlvbikge1xuICAgICAgZXZlbnQudGFncyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBldmVudC50YWdzKSwge1xuICAgICAgICAnRE9NRXhjZXB0aW9uLmNvZGUnOiBcIlwiICsgZG9tRXhjZXB0aW9uLmNvZGVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIGlmIChpc0Vycm9yKGV4Y2VwdGlvbikpIHtcbiAgICAvLyB3ZSBoYXZlIGEgcmVhbCBFcnJvciBvYmplY3QsIGRvIG5vdGhpbmdcbiAgICBldmVudCA9IGV2ZW50RnJvbVN0YWNrdHJhY2UoY29tcHV0ZVN0YWNrVHJhY2UoZXhjZXB0aW9uKSk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgaWYgKGlzUGxhaW5PYmplY3QoZXhjZXB0aW9uKSB8fCBpc0V2ZW50KGV4Y2VwdGlvbikpIHtcbiAgICAvLyBJZiBpdCBpcyBwbGFpbiBPYmplY3Qgb3IgRXZlbnQsIHNlcmlhbGl6ZSBpdCBtYW51YWxseSBhbmQgZXh0cmFjdCBvcHRpb25zXG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGdyb3VwIGV2ZW50cyBiYXNlZCBvbiB0b3AtbGV2ZWwga2V5c1xuICAgIC8vIHdoaWNoIGlzIG11Y2ggYmV0dGVyIHRoYW4gY3JlYXRpbmcgbmV3IGdyb3VwIHdoZW4gYW55IGtleS92YWx1ZSBjaGFuZ2VcbiAgICB2YXIgb2JqZWN0RXhjZXB0aW9uID0gZXhjZXB0aW9uO1xuICAgIGV2ZW50ID0gZXZlbnRGcm9tUGxhaW5PYmplY3Qob2JqZWN0RXhjZXB0aW9uLCBzeW50aGV0aWNFeGNlcHRpb24sIG9wdGlvbnMucmVqZWN0aW9uKTtcbiAgICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIHtcbiAgICAgIHN5bnRoZXRpYzogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBldmVudDtcbiAgfSAvLyBJZiBub25lIG9mIHByZXZpb3VzIGNoZWNrcyB3ZXJlIHZhbGlkLCB0aGVuIGl0IG1lYW5zIHRoYXQgaXQncyBub3Q6XG4gIC8vIC0gYW4gaW5zdGFuY2Ugb2YgRE9NRXJyb3JcbiAgLy8gLSBhbiBpbnN0YW5jZSBvZiBET01FeGNlcHRpb25cbiAgLy8gLSBhbiBpbnN0YW5jZSBvZiBFdmVudFxuICAvLyAtIGFuIGluc3RhbmNlIG9mIEVycm9yXG4gIC8vIC0gYSB2YWxpZCBFcnJvckV2ZW50IChvbmUgd2l0aCBhbiBlcnJvciBwcm9wZXJ0eSlcbiAgLy8gLSBhIHBsYWluIE9iamVjdFxuICAvL1xuICAvLyBTbyBiYWlsIG91dCBhbmQgY2FwdHVyZSBpdCBhcyBhIHNpbXBsZSBtZXNzYWdlOlxuXG5cbiAgZXZlbnQgPSBldmVudEZyb21TdHJpbmcoZXhjZXB0aW9uLCBzeW50aGV0aWNFeGNlcHRpb24sIG9wdGlvbnMpO1xuICBhZGRFeGNlcHRpb25UeXBlVmFsdWUoZXZlbnQsIFwiXCIgKyBleGNlcHRpb24sIHVuZGVmaW5lZCk7XG4gIGFkZEV4Y2VwdGlvbk1lY2hhbmlzbShldmVudCwge1xuICAgIHN5bnRoZXRpYzogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50RnJvbVN0cmluZyhpbnB1dCwgc3ludGhldGljRXhjZXB0aW9uLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgZXZlbnQgPSB7XG4gICAgbWVzc2FnZTogaW5wdXRcbiAgfTtcblxuICBpZiAob3B0aW9ucy5hdHRhY2hTdGFja3RyYWNlICYmIHN5bnRoZXRpY0V4Y2VwdGlvbikge1xuICAgIHZhciBzdGFja3RyYWNlID0gY29tcHV0ZVN0YWNrVHJhY2Uoc3ludGhldGljRXhjZXB0aW9uKTtcbiAgICB2YXIgZnJhbWVzXzEgPSBwcmVwYXJlRnJhbWVzRm9yRXZlbnQoc3RhY2t0cmFjZS5zdGFjayk7XG4gICAgZXZlbnQuc3RhY2t0cmFjZSA9IHtcbiAgICAgIGZyYW1lczogZnJhbWVzXzFcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50O1xufSIsImltcG9ydCB7IF9fYXNzaWduLCBfX3JlYWQsIF9fcmVzdCwgX19zcHJlYWQgfSBmcm9tIFwidHNsaWJcIjtcbi8qKiBFeHRyYWN0IHNkayBpbmZvIGZyb20gZnJvbSB0aGUgQVBJIG1ldGFkYXRhICovXG5cbmZ1bmN0aW9uIGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIoYXBpKSB7XG4gIGlmICghYXBpLm1ldGFkYXRhIHx8ICFhcGkubWV0YWRhdGEuc2RrKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9hID0gYXBpLm1ldGFkYXRhLnNkayxcbiAgICAgIG5hbWUgPSBfYS5uYW1lLFxuICAgICAgdmVyc2lvbiA9IF9hLnZlcnNpb247XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICB2ZXJzaW9uOiB2ZXJzaW9uXG4gIH07XG59XG4vKipcbiAqIEFwcGx5IFNka0luZm8gKG5hbWUsIHZlcnNpb24sIHBhY2thZ2VzLCBpbnRlZ3JhdGlvbnMpIHRvIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGtleS5cbiAqIE1lcmdlIHdpdGggZXhpc3RpbmcgZGF0YSBpZiBhbnkuXG4gKiovXG5cblxuZnVuY3Rpb24gZW5oYW5jZUV2ZW50V2l0aFNka0luZm8oZXZlbnQsIHNka0luZm8pIHtcbiAgaWYgKCFzZGtJbmZvKSB7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgZXZlbnQuc2RrID0gZXZlbnQuc2RrIHx8IHt9O1xuICBldmVudC5zZGsubmFtZSA9IGV2ZW50LnNkay5uYW1lIHx8IHNka0luZm8ubmFtZTtcbiAgZXZlbnQuc2RrLnZlcnNpb24gPSBldmVudC5zZGsudmVyc2lvbiB8fCBzZGtJbmZvLnZlcnNpb247XG4gIGV2ZW50LnNkay5pbnRlZ3JhdGlvbnMgPSBfX3NwcmVhZChldmVudC5zZGsuaW50ZWdyYXRpb25zIHx8IFtdLCBzZGtJbmZvLmludGVncmF0aW9ucyB8fCBbXSk7XG4gIGV2ZW50LnNkay5wYWNrYWdlcyA9IF9fc3ByZWFkKGV2ZW50LnNkay5wYWNrYWdlcyB8fCBbXSwgc2RrSW5mby5wYWNrYWdlcyB8fCBbXSk7XG4gIHJldHVybiBldmVudDtcbn1cbi8qKiBDcmVhdGVzIGEgU2VudHJ5UmVxdWVzdCBmcm9tIGEgU2Vzc2lvbi4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gc2Vzc2lvblRvU2VudHJ5UmVxdWVzdChzZXNzaW9uLCBhcGkpIHtcbiAgdmFyIHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKGFwaSk7XG4gIHZhciBlbnZlbG9wZUhlYWRlcnMgPSBKU09OLnN0cmluZ2lmeShfX2Fzc2lnbihfX2Fzc2lnbih7XG4gICAgc2VudF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIH0sIHNka0luZm8gJiYge1xuICAgIHNkazogc2RrSW5mb1xuICB9KSwgYXBpLmZvcmNlRW52ZWxvcGUoKSAmJiB7XG4gICAgZHNuOiBhcGkuZ2V0RHNuKCkudG9TdHJpbmcoKVxuICB9KSk7IC8vIEkga25vdyB0aGlzIGlzIGhhY2t5IGJ1dCB3ZSBkb24ndCB3YW50IHRvIGFkZCBgc2Vzc2lvbmAgdG8gcmVxdWVzdCB0eXBlIHNpbmNlIGl0J3MgbmV2ZXIgcmF0ZSBsaW1pdGVkXG5cbiAgdmFyIHR5cGUgPSAnYWdncmVnYXRlcycgaW4gc2Vzc2lvbiA/ICdzZXNzaW9ucycgOiAnc2Vzc2lvbic7XG4gIHZhciBpdGVtSGVhZGVycyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICB0eXBlOiB0eXBlXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGJvZHk6IGVudmVsb3BlSGVhZGVycyArIFwiXFxuXCIgKyBpdGVtSGVhZGVycyArIFwiXFxuXCIgKyBKU09OLnN0cmluZ2lmeShzZXNzaW9uKSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHVybDogYXBpLmdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgoKVxuICB9O1xufVxuLyoqIENyZWF0ZXMgYSBTZW50cnlSZXF1ZXN0IGZyb20gYW4gZXZlbnQuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudFRvU2VudHJ5UmVxdWVzdChldmVudCwgYXBpKSB7XG4gIHZhciBzZGtJbmZvID0gZ2V0U2RrTWV0YWRhdGFGb3JFbnZlbG9wZUhlYWRlcihhcGkpO1xuICB2YXIgZXZlbnRUeXBlID0gZXZlbnQudHlwZSB8fCAnZXZlbnQnO1xuICB2YXIgdXNlRW52ZWxvcGUgPSBldmVudFR5cGUgPT09ICd0cmFuc2FjdGlvbicgfHwgYXBpLmZvcmNlRW52ZWxvcGUoKTtcblxuICB2YXIgX2EgPSBldmVudC5kZWJ1Z19tZXRhIHx8IHt9LFxuICAgICAgdHJhbnNhY3Rpb25TYW1wbGluZyA9IF9hLnRyYW5zYWN0aW9uU2FtcGxpbmcsXG4gICAgICBtZXRhZGF0YSA9IF9fcmVzdChfYSwgW1widHJhbnNhY3Rpb25TYW1wbGluZ1wiXSk7XG5cbiAgdmFyIF9iID0gdHJhbnNhY3Rpb25TYW1wbGluZyB8fCB7fSxcbiAgICAgIHNhbXBsaW5nTWV0aG9kID0gX2IubWV0aG9kLFxuICAgICAgc2FtcGxlUmF0ZSA9IF9iLnJhdGU7XG5cbiAgaWYgKE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICBkZWxldGUgZXZlbnQuZGVidWdfbWV0YTtcbiAgfSBlbHNlIHtcbiAgICBldmVudC5kZWJ1Z19tZXRhID0gbWV0YWRhdGE7XG4gIH1cblxuICB2YXIgcmVxID0ge1xuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHNka0luZm8gPyBlbmhhbmNlRXZlbnRXaXRoU2RrSW5mbyhldmVudCwgYXBpLm1ldGFkYXRhLnNkaykgOiBldmVudCksXG4gICAgdHlwZTogZXZlbnRUeXBlLFxuICAgIHVybDogdXNlRW52ZWxvcGUgPyBhcGkuZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgpIDogYXBpLmdldFN0b3JlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgoKVxuICB9OyAvLyBodHRwczovL2RldmVsb3Auc2VudHJ5LmRldi9zZGsvZW52ZWxvcGVzL1xuICAvLyBTaW5jZSB3ZSBkb24ndCBuZWVkIHRvIG1hbmlwdWxhdGUgZW52ZWxvcGVzIG5vciBzdG9yZSB0aGVtLCB0aGVyZSBpcyBub1xuICAvLyBleHBvcnRlZCBjb25jZXB0IG9mIGFuIEVudmVsb3BlIHdpdGggb3BlcmF0aW9ucyBpbmNsdWRpbmcgc2VyaWFsaXphdGlvbiBhbmRcbiAgLy8gZGVzZXJpYWxpemF0aW9uLiBJbnN0ZWFkLCB3ZSBvbmx5IGltcGxlbWVudCBhIG1pbmltYWwgc3Vic2V0IG9mIHRoZSBzcGVjIHRvXG4gIC8vIHNlcmlhbGl6ZSBldmVudHMgaW5saW5lIGhlcmUuXG5cbiAgaWYgKHVzZUVudmVsb3BlKSB7XG4gICAgdmFyIGVudmVsb3BlSGVhZGVycyA9IEpTT04uc3RyaW5naWZ5KF9fYXNzaWduKF9fYXNzaWduKHtcbiAgICAgIGV2ZW50X2lkOiBldmVudC5ldmVudF9pZCxcbiAgICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgIH0sIHNka0luZm8gJiYge1xuICAgICAgc2RrOiBzZGtJbmZvXG4gICAgfSksIGFwaS5mb3JjZUVudmVsb3BlKCkgJiYge1xuICAgICAgZHNuOiBhcGkuZ2V0RHNuKCkudG9TdHJpbmcoKVxuICAgIH0pKTtcbiAgICB2YXIgaXRlbUhlYWRlcnMgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICB0eXBlOiBldmVudFR5cGUsXG4gICAgICAvLyBUT0RPOiBSaWdodCBub3csIHNhbXBsZVJhdGUgbWF5IG9yIG1heSBub3QgYmUgZGVmaW5lZCAoaXQgd29uJ3QgYmUgaW4gdGhlIGNhc2VzIG9mIGluaGVyaXRhbmNlIGFuZFxuICAgICAgLy8gZXhwbGljaXRseS1zZXQgc2FtcGxpbmcgZGVjaXNpb25zKS4gQXJlIHdlIGdvb2Qgd2l0aCB0aGF0P1xuICAgICAgc2FtcGxlX3JhdGVzOiBbe1xuICAgICAgICBpZDogc2FtcGxpbmdNZXRob2QsXG4gICAgICAgIHJhdGU6IHNhbXBsZVJhdGVcbiAgICAgIH1dXG4gICAgfSk7IC8vIFRoZSB0cmFpbGluZyBuZXdsaW5lIGlzIG9wdGlvbmFsLiBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHNlbmQgaXQgdG8gYXZvaWRcbiAgICAvLyBzZW5kaW5nIHVubmVjZXNzYXJ5IGJ5dGVzLlxuICAgIC8vXG4gICAgLy8gY29uc3QgZW52ZWxvcGUgPSBgJHtlbnZlbG9wZUhlYWRlcnN9XFxuJHtpdGVtSGVhZGVyc31cXG4ke3JlcS5ib2R5fVxcbmA7XG5cbiAgICB2YXIgZW52ZWxvcGUgPSBlbnZlbG9wZUhlYWRlcnMgKyBcIlxcblwiICsgaXRlbUhlYWRlcnMgKyBcIlxcblwiICsgcmVxLmJvZHk7XG4gICAgcmVxLmJvZHkgPSBlbnZlbG9wZTtcbiAgfVxuXG4gIHJldHVybiByZXE7XG59IiwiaW1wb3J0IHsgRHNuLCB1cmxFbmNvZGUgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbnZhciBTRU5UUllfQVBJX1ZFUlNJT04gPSAnNyc7XG4vKipcbiAqIEhlbHBlciBjbGFzcyB0byBwcm92aWRlIHVybHMsIGhlYWRlcnMgYW5kIG1ldGFkYXRhIHRoYXQgY2FuIGJlIHVzZWQgdG8gZm9ybVxuICogZGlmZmVyZW50IHR5cGVzIG9mIHJlcXVlc3RzIHRvIFNlbnRyeSBlbmRwb2ludHMuXG4gKiBTdXBwb3J0cyBib3RoIGVudmVsb3BlcyBhbmQgcmVndWxhciBldmVudCByZXF1ZXN0cy5cbiAqKi9cblxudmFyIEFQSSA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIC8qKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQVBJICovXG4gIGZ1bmN0aW9uIEFQSShkc24sIG1ldGFkYXRhLCB0dW5uZWwpIHtcbiAgICBpZiAobWV0YWRhdGEgPT09IHZvaWQgMCkge1xuICAgICAgbWV0YWRhdGEgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLmRzbiA9IGRzbjtcbiAgICB0aGlzLl9kc25PYmplY3QgPSBuZXcgRHNuKGRzbik7XG4gICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgIHRoaXMuX3R1bm5lbCA9IHR1bm5lbDtcbiAgfVxuICAvKiogUmV0dXJucyB0aGUgRHNuIG9iamVjdC4gKi9cblxuXG4gIEFQSS5wcm90b3R5cGUuZ2V0RHNuID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9kc25PYmplY3Q7XG4gIH07XG4gIC8qKiBEb2VzIHRoaXMgdHJhbnNwb3J0IGZvcmNlIGVudmVsb3Blcz8gKi9cblxuXG4gIEFQSS5wcm90b3R5cGUuZm9yY2VFbnZlbG9wZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF0aGlzLl90dW5uZWw7XG4gIH07XG4gIC8qKiBSZXR1cm5zIHRoZSBwcmVmaXggdG8gY29uc3RydWN0IFNlbnRyeSBpbmdlc3Rpb24gQVBJIGVuZHBvaW50cy4gKi9cblxuXG4gIEFQSS5wcm90b3R5cGUuZ2V0QmFzZUFwaUVuZHBvaW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkc24gPSB0aGlzLmdldERzbigpO1xuICAgIHZhciBwcm90b2NvbCA9IGRzbi5wcm90b2NvbCA/IGRzbi5wcm90b2NvbCArIFwiOlwiIDogJyc7XG4gICAgdmFyIHBvcnQgPSBkc24ucG9ydCA/IFwiOlwiICsgZHNuLnBvcnQgOiAnJztcbiAgICByZXR1cm4gcHJvdG9jb2wgKyBcIi8vXCIgKyBkc24uaG9zdCArIHBvcnQgKyAoZHNuLnBhdGggPyBcIi9cIiArIGRzbi5wYXRoIDogJycpICsgXCIvYXBpL1wiO1xuICB9O1xuICAvKiogUmV0dXJucyB0aGUgc3RvcmUgZW5kcG9pbnQgVVJMLiAqL1xuXG5cbiAgQVBJLnByb3RvdHlwZS5nZXRTdG9yZUVuZHBvaW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRJbmdlc3RFbmRwb2ludCgnc3RvcmUnKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0b3JlIGVuZHBvaW50IFVSTCB3aXRoIGF1dGggaW4gdGhlIHF1ZXJ5IHN0cmluZy5cbiAgICpcbiAgICogU2VuZGluZyBhdXRoIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgbm90IGFzIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXZvaWRzIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLlxuICAgKi9cblxuXG4gIEFQSS5wcm90b3R5cGUuZ2V0U3RvcmVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdG9yZUVuZHBvaW50KCkgKyBcIj9cIiArIHRoaXMuX2VuY29kZWRBdXRoKCk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlbnZlbG9wZSBlbmRwb2ludCBVUkwgd2l0aCBhdXRoIGluIHRoZSBxdWVyeSBzdHJpbmcuXG4gICAqXG4gICAqIFNlbmRpbmcgYXV0aCBhcyBwYXJ0IG9mIHRoZSBxdWVyeSBzdHJpbmcgYW5kIG5vdCBhcyBjdXN0b20gSFRUUCBoZWFkZXJzIGF2b2lkcyBDT1JTIHByZWZsaWdodCByZXF1ZXN0cy5cbiAgICovXG5cblxuICBBUEkucHJvdG90eXBlLmdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGggPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuZm9yY2VFbnZlbG9wZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHVubmVsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nZXRFbnZlbG9wZUVuZHBvaW50KCkgKyBcIj9cIiArIHRoaXMuX2VuY29kZWRBdXRoKCk7XG4gIH07XG4gIC8qKiBSZXR1cm5zIG9ubHkgdGhlIHBhdGggY29tcG9uZW50IGZvciB0aGUgc3RvcmUgZW5kcG9pbnQuICovXG5cblxuICBBUEkucHJvdG90eXBlLmdldFN0b3JlRW5kcG9pbnRQYXRoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkc24gPSB0aGlzLmdldERzbigpO1xuICAgIHJldHVybiAoZHNuLnBhdGggPyBcIi9cIiArIGRzbi5wYXRoIDogJycpICsgXCIvYXBpL1wiICsgZHNuLnByb2plY3RJZCArIFwiL3N0b3JlL1wiO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBpbiByZXF1ZXN0IGhlYWRlcnMuXG4gICAqIFRoaXMgaXMgbmVlZGVkIGZvciBub2RlIGFuZCB0aGUgb2xkIC9zdG9yZSBlbmRwb2ludCBpbiBzZW50cnlcbiAgICovXG5cblxuICBBUEkucHJvdG90eXBlLmdldFJlcXVlc3RIZWFkZXJzID0gZnVuY3Rpb24gKGNsaWVudE5hbWUsIGNsaWVudFZlcnNpb24pIHtcbiAgICAvLyBDSEFOR0UgVEhJUyB0byB1c2UgbWV0YWRhdGEgYnV0IGtlZXAgY2xpZW50TmFtZSBhbmQgY2xpZW50VmVyc2lvbiBjb21wYXRpYmxlXG4gICAgdmFyIGRzbiA9IHRoaXMuZ2V0RHNuKCk7XG4gICAgdmFyIGhlYWRlciA9IFtcIlNlbnRyeSBzZW50cnlfdmVyc2lvbj1cIiArIFNFTlRSWV9BUElfVkVSU0lPTl07XG4gICAgaGVhZGVyLnB1c2goXCJzZW50cnlfY2xpZW50PVwiICsgY2xpZW50TmFtZSArIFwiL1wiICsgY2xpZW50VmVyc2lvbik7XG4gICAgaGVhZGVyLnB1c2goXCJzZW50cnlfa2V5PVwiICsgZHNuLnB1YmxpY0tleSk7XG5cbiAgICBpZiAoZHNuLnBhc3MpIHtcbiAgICAgIGhlYWRlci5wdXNoKFwic2VudHJ5X3NlY3JldD1cIiArIGRzbi5wYXNzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdYLVNlbnRyeS1BdXRoJzogaGVhZGVyLmpvaW4oJywgJylcbiAgICB9O1xuICB9O1xuICAvKiogUmV0dXJucyB0aGUgdXJsIHRvIHRoZSByZXBvcnQgZGlhbG9nIGVuZHBvaW50LiAqL1xuXG5cbiAgQVBJLnByb3RvdHlwZS5nZXRSZXBvcnREaWFsb2dFbmRwb2ludCA9IGZ1bmN0aW9uIChkaWFsb2dPcHRpb25zKSB7XG4gICAgaWYgKGRpYWxvZ09wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgZGlhbG9nT3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHZhciBkc24gPSB0aGlzLmdldERzbigpO1xuICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZ2V0QmFzZUFwaUVuZHBvaW50KCkgKyBcImVtYmVkL2Vycm9yLXBhZ2UvXCI7XG4gICAgdmFyIGVuY29kZWRPcHRpb25zID0gW107XG4gICAgZW5jb2RlZE9wdGlvbnMucHVzaChcImRzbj1cIiArIGRzbi50b1N0cmluZygpKTtcblxuICAgIGZvciAodmFyIGtleSBpbiBkaWFsb2dPcHRpb25zKSB7XG4gICAgICBpZiAoa2V5ID09PSAnZHNuJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ3VzZXInKSB7XG4gICAgICAgIGlmICghZGlhbG9nT3B0aW9ucy51c2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlhbG9nT3B0aW9ucy51c2VyLm5hbWUpIHtcbiAgICAgICAgICBlbmNvZGVkT3B0aW9ucy5wdXNoKFwibmFtZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChkaWFsb2dPcHRpb25zLnVzZXIubmFtZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpYWxvZ09wdGlvbnMudXNlci5lbWFpbCkge1xuICAgICAgICAgIGVuY29kZWRPcHRpb25zLnB1c2goXCJlbWFpbD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChkaWFsb2dPcHRpb25zLnVzZXIuZW1haWwpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5jb2RlZE9wdGlvbnMucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGRpYWxvZ09wdGlvbnNba2V5XSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbmNvZGVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBlbmRwb2ludCArIFwiP1wiICsgZW5jb2RlZE9wdGlvbnMuam9pbignJicpO1xuICAgIH1cblxuICAgIHJldHVybiBlbmRwb2ludDtcbiAgfTtcbiAgLyoqIFJldHVybnMgdGhlIGVudmVsb3BlIGVuZHBvaW50IFVSTC4gKi9cblxuXG4gIEFQSS5wcm90b3R5cGUuX2dldEVudmVsb3BlRW5kcG9pbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEluZ2VzdEVuZHBvaW50KCdlbnZlbG9wZScpO1xuICB9O1xuICAvKiogUmV0dXJucyB0aGUgaW5nZXN0IEFQSSBlbmRwb2ludCBmb3IgdGFyZ2V0LiAqL1xuXG5cbiAgQVBJLnByb3RvdHlwZS5fZ2V0SW5nZXN0RW5kcG9pbnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX3R1bm5lbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3R1bm5lbDtcbiAgICB9XG5cbiAgICB2YXIgYmFzZSA9IHRoaXMuZ2V0QmFzZUFwaUVuZHBvaW50KCk7XG4gICAgdmFyIGRzbiA9IHRoaXMuZ2V0RHNuKCk7XG4gICAgcmV0dXJuIFwiXCIgKyBiYXNlICsgZHNuLnByb2plY3RJZCArIFwiL1wiICsgdGFyZ2V0ICsgXCIvXCI7XG4gIH07XG4gIC8qKiBSZXR1cm5zIGEgVVJMLWVuY29kZWQgc3RyaW5nIHdpdGggYXV0aCBjb25maWcgc3VpdGFibGUgZm9yIGEgcXVlcnkgc3RyaW5nLiAqL1xuXG5cbiAgQVBJLnByb3RvdHlwZS5fZW5jb2RlZEF1dGggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRzbiA9IHRoaXMuZ2V0RHNuKCk7XG4gICAgdmFyIGF1dGggPSB7XG4gICAgICAvLyBXZSBzZW5kIG9ubHkgdGhlIG1pbmltdW0gc2V0IG9mIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1NzIuXG4gICAgICBzZW50cnlfa2V5OiBkc24ucHVibGljS2V5LFxuICAgICAgc2VudHJ5X3ZlcnNpb246IFNFTlRSWV9BUElfVkVSU0lPTlxuICAgIH07XG4gICAgcmV0dXJuIHVybEVuY29kZShhdXRoKTtcbiAgfTtcblxuICByZXR1cm4gQVBJO1xufSgpO1xuXG5leHBvcnQgeyBBUEkgfTsiLCJpbXBvcnQgeyBTZW50cnlFcnJvciB9IGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IHsgU3luY1Byb21pc2UgfSBmcm9tICcuL3N5bmNwcm9taXNlJztcbi8qKiBBIHNpbXBsZSBxdWV1ZSB0aGF0IGhvbGRzIHByb21pc2VzLiAqL1xuXG52YXIgUHJvbWlzZUJ1ZmZlciA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFByb21pc2VCdWZmZXIoX2xpbWl0KSB7XG4gICAgdGhpcy5fbGltaXQgPSBfbGltaXQ7XG4gICAgLyoqIEludGVybmFsIHNldCBvZiBxdWV1ZWQgUHJvbWlzZXMgKi9cblxuICAgIHRoaXMuX2J1ZmZlciA9IFtdO1xuICB9XG4gIC8qKlxuICAgKiBTYXlzIGlmIHRoZSBidWZmZXIgaXMgcmVhZHkgdG8gdGFrZSBtb3JlIHJlcXVlc3RzXG4gICAqL1xuXG5cbiAgUHJvbWlzZUJ1ZmZlci5wcm90b3R5cGUuaXNSZWFkeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGltaXQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmxlbmd0aCgpIDwgdGhpcy5fbGltaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBBZGQgYSBwcm9taXNlIChyZXByZXNlbnRpbmcgYW4gaW4tZmxpZ2h0IGFjdGlvbikgdG8gdGhlIHF1ZXVlLCBhbmQgc2V0IGl0IHRvIHJlbW92ZSBpdHNlbGYgb24gZnVsZmlsbG1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrUHJvZHVjZXIgQSBmdW5jdGlvbiBwcm9kdWNpbmcgYW55IFByb21pc2VMaWtlPFQ+OyBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGlzIHVzZWQgdG8gYmUgYHRhc2s6XG4gICAqICAgICAgICBQcm9taXNlTGlrZTxUPmAsIGJ1dCB1bmRlciB0aGF0IG1vZGVsLCBQcm9taXNlcyB3ZXJlIGluc3RhbnRseSBjcmVhdGVkIG9uIHRoZSBjYWxsLXNpdGUgYW5kIHRoZWlyIGV4ZWN1dG9yXG4gICAqICAgICAgICBmdW5jdGlvbnMgdGhlcmVmb3JlIHJhbiBpbW1lZGlhdGVseS4gVGh1cywgZXZlbiBpZiB0aGUgYnVmZmVyIHdhcyBmdWxsLCB0aGUgYWN0aW9uIHN0aWxsIGhhcHBlbmVkLiBCeVxuICAgKiAgICAgICAgcmVxdWlyaW5nIHRoZSBwcm9taXNlIHRvIGJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiwgd2UgY2FuIGRlZmVyIHByb21pc2UgY3JlYXRpb24gdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlclxuICAgKiAgICAgICAgbGltaXQgY2hlY2suXG4gICAqIEByZXR1cm5zIFRoZSBvcmlnaW5hbCBwcm9taXNlLlxuICAgKi9cblxuXG4gIFByb21pc2VCdWZmZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0YXNrUHJvZHVjZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKCF0aGlzLmlzUmVhZHkoKSkge1xuICAgICAgcmV0dXJuIFN5bmNQcm9taXNlLnJlamVjdChuZXcgU2VudHJ5RXJyb3IoJ05vdCBhZGRpbmcgUHJvbWlzZSBkdWUgdG8gYnVmZmVyIGxpbWl0IHJlYWNoZWQuJykpO1xuICAgIH0gLy8gc3RhcnQgdGhlIHRhc2sgYW5kIGFkZCBpdHMgcHJvbWlzZSB0byB0aGUgcXVldWVcblxuXG4gICAgdmFyIHRhc2sgPSB0YXNrUHJvZHVjZXIoKTtcblxuICAgIGlmICh0aGlzLl9idWZmZXIuaW5kZXhPZih0YXNrKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuX2J1ZmZlci5wdXNoKHRhc2spO1xuICAgIH1cblxuICAgIHZvaWQgdGFzay50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5yZW1vdmUodGFzayk7XG4gICAgfSkgLy8gVXNlIGB0aGVuKG51bGwsIHJlamVjdGlvbkhhbmRsZXIpYCByYXRoZXIgdGhhbiBgY2F0Y2gocmVqZWN0aW9uSGFuZGxlcilgIHNvIHRoYXQgd2UgY2FuIHVzZSBgUHJvbWlzZUxpa2VgXG4gICAgLy8gcmF0aGVyIHRoYW4gYFByb21pc2VgLiBgUHJvbWlzZUxpa2VgIGRvZXNuJ3QgaGF2ZSBhIGAuY2F0Y2hgIG1ldGhvZCwgbWFraW5nIGl0cyBwb2x5ZmlsbCBzbWFsbGVyLiAoRVM1IGRpZG4ndFxuICAgIC8vIGhhdmUgcHJvbWlzZXMsIHNvIFRTIGhhcyB0byBwb2x5ZmlsbCB3aGVuIGRvd24tY29tcGlsaW5nLilcbiAgICAudGhlbihudWxsLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMucmVtb3ZlKHRhc2spLnRoZW4obnVsbCwgZnVuY3Rpb24gKCkgey8vIFdlIGhhdmUgdG8gYWRkIGFub3RoZXIgY2F0Y2ggaGVyZSBiZWNhdXNlIGB0aGlzLnJlbW92ZSgpYCBzdGFydHMgYSBuZXcgcHJvbWlzZSBjaGFpbi5cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXNrO1xuICB9O1xuICAvKipcbiAgICogUmVtb3ZlIGEgcHJvbWlzZSBmcm9tIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIHRhc2sgQ2FuIGJlIGFueSBQcm9taXNlTGlrZTxUPlxuICAgKiBAcmV0dXJucyBSZW1vdmVkIHByb21pc2UuXG4gICAqL1xuXG5cbiAgUHJvbWlzZUJ1ZmZlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRhc2spIHtcbiAgICB2YXIgcmVtb3ZlZFRhc2sgPSB0aGlzLl9idWZmZXIuc3BsaWNlKHRoaXMuX2J1ZmZlci5pbmRleE9mKHRhc2spLCAxKVswXTtcblxuICAgIHJldHVybiByZW1vdmVkVGFzaztcbiAgfTtcbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVucmVzb2x2ZWQgcHJvbWlzZXMgaW4gdGhlIHF1ZXVlLlxuICAgKi9cblxuXG4gIFByb21pc2VCdWZmZXIucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmxlbmd0aDtcbiAgfTtcbiAgLyoqXG4gICAqIFdhaXQgZm9yIGFsbCBwcm9taXNlcyBpbiB0aGUgcXVldWUgdG8gcmVzb2x2ZSBvciBmb3IgdGltZW91dCB0byBleHBpcmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIHF1ZXVlIGlzIHN0aWxsIG5vbi1lbXB0eS4gUGFzc2luZyBgMGAgKG9yXG4gICAqIG5vdCBwYXNzaW5nIGFueXRoaW5nKSB3aWxsIG1ha2UgdGhlIHByb21pc2Ugd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzIGZvciB0aGUgcXVldWUgdG8gZHJhaW4gYmVmb3JlIHJlc29sdmluZyB0b1xuICAgKiBgdHJ1ZWAuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGVtcHR5IG9yIGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZFxuICAgKiBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cblxuXG4gIFByb21pc2VCdWZmZXIucHJvdG90eXBlLmRyYWluID0gZnVuY3Rpb24gKHRpbWVvdXQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgLy8gd2FpdCBmb3IgYHRpbWVvdXRgIG1zIGFuZCB0aGVuIHJlc29sdmUgdG8gYGZhbHNlYCAoaWYgbm90IGNhbmNlbGxlZCBmaXJzdClcbiAgICAgIHZhciBjYXB0dXJlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQgJiYgdGltZW91dCA+IDApIHtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSwgdGltZW91dCk7IC8vIGlmIGFsbCBwcm9taXNlcyByZXNvbHZlIGluIHRpbWUsIGNhbmNlbCB0aGUgdGltZXIgYW5kIHJlc29sdmUgdG8gYHRydWVgXG5cbiAgICAgIHZvaWQgU3luY1Byb21pc2UuYWxsKF90aGlzLl9idWZmZXIpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoY2FwdHVyZWRTZXRUaW1lb3V0KTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pLnRoZW4obnVsbCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFByb21pc2VCdWZmZXI7XG59KCk7XG5cbmV4cG9ydCB7IFByb21pc2VCdWZmZXIgfTsiLCJpbXBvcnQgeyBfX3JlYWQsIF9fdmFsdWVzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBUEkgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wSW5TZWNvbmRzLCBnZXRHbG9iYWxPYmplY3QsIGxvZ2dlciwgcGFyc2VSZXRyeUFmdGVySGVhZGVyLCBQcm9taXNlQnVmZmVyLCBTZW50cnlFcnJvciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xudmFyIENBVEVHT1JZX01BUFBJTkcgPSB7XG4gIGV2ZW50OiAnZXJyb3InLFxuICB0cmFuc2FjdGlvbjogJ3RyYW5zYWN0aW9uJyxcbiAgc2Vzc2lvbjogJ3Nlc3Npb24nLFxuICBhdHRhY2htZW50OiAnYXR0YWNobWVudCdcbn07XG52YXIgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0KCk7XG4vKiogQmFzZSBUcmFuc3BvcnQgY2xhc3MgaW1wbGVtZW50YXRpb24gKi9cblxudmFyIEJhc2VUcmFuc3BvcnQgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBCYXNlVHJhbnNwb3J0KG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAvKiogQSBzaW1wbGUgYnVmZmVyIGhvbGRpbmcgYWxsIHJlcXVlc3RzLiAqL1xuXG4gICAgdGhpcy5fYnVmZmVyID0gbmV3IFByb21pc2VCdWZmZXIoMzApO1xuICAgIC8qKiBMb2NrcyB0cmFuc3BvcnQgYWZ0ZXIgcmVjZWl2aW5nIHJhdGUgbGltaXRzIGluIGEgcmVzcG9uc2UgKi9cblxuICAgIHRoaXMuX3JhdGVMaW1pdHMgPSB7fTtcbiAgICB0aGlzLl9vdXRjb21lcyA9IHt9O1xuICAgIHRoaXMuX2FwaSA9IG5ldyBBUEkob3B0aW9ucy5kc24sIG9wdGlvbnMuX21ldGFkYXRhLCBvcHRpb25zLnR1bm5lbCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4gICAgdGhpcy51cmwgPSB0aGlzLl9hcGkuZ2V0U3RvcmVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZW5kQ2xpZW50UmVwb3J0cyAmJiBnbG9iYWwuZG9jdW1lbnQpIHtcbiAgICAgIGdsb2JhbC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZ2xvYmFsLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICBfdGhpcy5fZmx1c2hPdXRjb21lcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQmFzZVRyYW5zcG9ydC5wcm90b3R5cGUuc2VuZEV2ZW50ID0gZnVuY3Rpb24gKF8pIHtcbiAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoJ1RyYW5zcG9ydCBDbGFzcyBoYXMgdG8gaW1wbGVtZW50IGBzZW5kRXZlbnRgIG1ldGhvZCcpO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBCYXNlVHJhbnNwb3J0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICh0aW1lb3V0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlci5kcmFpbih0aW1lb3V0KTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQmFzZVRyYW5zcG9ydC5wcm90b3R5cGUucmVjb3JkTG9zdEV2ZW50ID0gZnVuY3Rpb24gKHJlYXNvbiwgY2F0ZWdvcnkpIHtcbiAgICB2YXIgX2E7XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zZW5kQ2xpZW50UmVwb3J0cykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2Ugd2FudCB0byB0cmFjayBlYWNoIGNhdGVnb3J5IChldmVudCwgdHJhbnNhY3Rpb24sIHNlc3Npb24pIHNlcGFyYXRlbHlcbiAgICAvLyBidXQgc3RpbGwga2VlcCB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgdHlwZSBvZiBvdXRjb21lcy5cbiAgICAvLyBXZSBjb3VsZCB1c2UgbmVzdGVkIG1hcHMsIGJ1dCBpdCdzIG11Y2ggZWFzaWVyIHRvIHJlYWQgYW5kIHR5cGUgdGhpcyB3YXkuXG4gICAgLy8gQSBjb3JyZWN0IHR5cGUgZm9yIG1hcC1iYXNlZCBpbXBsZW1lbnRhdGlvbiBpZiB3ZSB3YW50IHRvIGdvIHRoYXQgcm91dGVcbiAgICAvLyB3b3VsZCBiZSBgUGFydGlhbDxSZWNvcmQ8U2VudHJ5UmVxdWVzdFR5cGUsIFBhcnRpYWw8UmVjb3JkPE91dGNvbWUsIG51bWJlcj4+Pj5gXG5cblxuICAgIHZhciBrZXkgPSBDQVRFR09SWV9NQVBQSU5HW2NhdGVnb3J5XSArIFwiOlwiICsgcmVhc29uO1xuICAgIGxvZ2dlci5sb2coXCJBZGRpbmcgb3V0Y29tZTogXCIgKyBrZXkpO1xuICAgIHRoaXMuX291dGNvbWVzW2tleV0gPSAoX2EgPSB0aGlzLl9vdXRjb21lc1trZXldLCBfYSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKSArIDE7XG4gIH07XG4gIC8qKlxuICAgKiBTZW5kIG91dGNvbWVzIGFzIGFuIGVudmVsb3BlXG4gICAqL1xuXG5cbiAgQmFzZVRyYW5zcG9ydC5wcm90b3R5cGUuX2ZsdXNoT3V0Y29tZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc2VuZENsaWVudFJlcG9ydHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWdsb2JhbC5uYXZpZ2F0b3IgfHwgdHlwZW9mIGdsb2JhbC5uYXZpZ2F0b3Iuc2VuZEJlYWNvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbG9nZ2VyLndhcm4oJ0JlYWNvbiBBUEkgbm90IGF2YWlsYWJsZSwgc2tpcHBpbmcgc2VuZGluZyBvdXRjb21lcy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgb3V0Y29tZXMgPSB0aGlzLl9vdXRjb21lcztcbiAgICB0aGlzLl9vdXRjb21lcyA9IHt9OyAvLyBOb3RoaW5nIHRvIHNlbmRcblxuICAgIGlmICghT2JqZWN0LmtleXMob3V0Y29tZXMpLmxlbmd0aCkge1xuICAgICAgbG9nZ2VyLmxvZygnTm8gb3V0Y29tZXMgdG8gZmx1c2gnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKFwiRmx1c2hpbmcgb3V0Y29tZXM6XFxuXCIgKyBKU09OLnN0cmluZ2lmeShvdXRjb21lcywgbnVsbCwgMikpO1xuXG4gICAgdmFyIHVybCA9IHRoaXMuX2FwaS5nZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKCk7IC8vIEVudmVsb3BlIGhlYWRlciBpcyByZXF1aXJlZCB0byBiZSBhdCBsZWFzdCBhbiBlbXB0eSBvYmplY3RcblxuXG4gICAgdmFyIGVudmVsb3BlSGVhZGVyID0gSlNPTi5zdHJpbmdpZnkoe30pO1xuICAgIHZhciBpdGVtSGVhZGVycyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHR5cGU6ICdjbGllbnRfcmVwb3J0J1xuICAgIH0pO1xuICAgIHZhciBpdGVtID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdGltZXN0YW1wOiBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCksXG4gICAgICBkaXNjYXJkZWRfZXZlbnRzOiBPYmplY3Qua2V5cyhvdXRjb21lcykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIF9hID0gX19yZWFkKGtleS5zcGxpdCgnOicpLCAyKSxcbiAgICAgICAgICAgIGNhdGVnb3J5ID0gX2FbMF0sXG4gICAgICAgICAgICByZWFzb24gPSBfYVsxXTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlYXNvbjogcmVhc29uLFxuICAgICAgICAgIGNhdGVnb3J5OiBjYXRlZ29yeSxcbiAgICAgICAgICBxdWFudGl0eTogb3V0Y29tZXNba2V5XVxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9KTtcbiAgICB2YXIgZW52ZWxvcGUgPSBlbnZlbG9wZUhlYWRlciArIFwiXFxuXCIgKyBpdGVtSGVhZGVycyArIFwiXFxuXCIgKyBpdGVtO1xuICAgIGdsb2JhbC5uYXZpZ2F0b3Iuc2VuZEJlYWNvbih1cmwsIGVudmVsb3BlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEhhbmRsZSBTZW50cnkgcmVwc29uc2UgZm9yIHByb21pc2UtYmFzZWQgdHJhbnNwb3J0cy5cbiAgICovXG5cblxuICBCYXNlVHJhbnNwb3J0LnByb3RvdHlwZS5faGFuZGxlUmVzcG9uc2UgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgcmVxdWVzdFR5cGUgPSBfYS5yZXF1ZXN0VHlwZSxcbiAgICAgICAgcmVzcG9uc2UgPSBfYS5yZXNwb25zZSxcbiAgICAgICAgaGVhZGVycyA9IF9hLmhlYWRlcnMsXG4gICAgICAgIHJlc29sdmUgPSBfYS5yZXNvbHZlLFxuICAgICAgICByZWplY3QgPSBfYS5yZWplY3Q7XG4gICAgdmFyIHN0YXR1cyA9IFN0YXR1cy5mcm9tSHR0cENvZGUocmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAvKipcbiAgICAgKiBcIlRoZSBuYW1lIGlzIGNhc2UtaW5zZW5zaXRpdmUuXCJcbiAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSGVhZGVycy9nZXRcbiAgICAgKi9cblxuICAgIHZhciBsaW1pdGVkID0gdGhpcy5faGFuZGxlUmF0ZUxpbWl0KGhlYWRlcnMpO1xuXG4gICAgaWYgKGxpbWl0ZWQpIGxvZ2dlci53YXJuKFwiVG9vIG1hbnkgXCIgKyByZXF1ZXN0VHlwZSArIFwiIHJlcXVlc3RzLCBiYWNraW5nIG9mZiB1bnRpbDogXCIgKyB0aGlzLl9kaXNhYmxlZFVudGlsKHJlcXVlc3RUeXBlKSk7XG5cbiAgICBpZiAoc3RhdHVzID09PSBTdGF0dXMuU3VjY2Vzcykge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIHN0YXR1czogc3RhdHVzXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZWplY3QocmVzcG9uc2UpO1xuICB9O1xuICAvKipcbiAgICogR2V0cyB0aGUgdGltZSB0aGF0IGdpdmVuIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIGZvciByYXRlIGxpbWl0aW5nXG4gICAqL1xuXG5cbiAgQmFzZVRyYW5zcG9ydC5wcm90b3R5cGUuX2Rpc2FibGVkVW50aWwgPSBmdW5jdGlvbiAocmVxdWVzdFR5cGUpIHtcbiAgICB2YXIgY2F0ZWdvcnkgPSBDQVRFR09SWV9NQVBQSU5HW3JlcXVlc3RUeXBlXTtcbiAgICByZXR1cm4gdGhpcy5fcmF0ZUxpbWl0c1tjYXRlZ29yeV0gfHwgdGhpcy5fcmF0ZUxpbWl0cy5hbGw7XG4gIH07XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBjYXRlZ29yeSBpcyByYXRlIGxpbWl0ZWRcbiAgICovXG5cblxuICBCYXNlVHJhbnNwb3J0LnByb3RvdHlwZS5faXNSYXRlTGltaXRlZCA9IGZ1bmN0aW9uIChyZXF1ZXN0VHlwZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZFVudGlsKHJlcXVlc3RUeXBlKSA+IG5ldyBEYXRlKERhdGUubm93KCkpO1xuICB9O1xuICAvKipcbiAgICogU2V0cyBpbnRlcm5hbCBfcmF0ZUxpbWl0cyBmcm9tIGluY29taW5nIGhlYWRlcnMuIFJldHVybnMgdHJ1ZSBpZiBoZWFkZXJzIGNvbnRhaW5zIGEgbm9uLWVtcHR5IHJhdGUgbGltaXRpbmcgaGVhZGVyLlxuICAgKi9cblxuXG4gIEJhc2VUcmFuc3BvcnQucHJvdG90eXBlLl9oYW5kbGVSYXRlTGltaXQgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuXG4gICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgdmFyIHJsSGVhZGVyID0gaGVhZGVyc1sneC1zZW50cnktcmF0ZS1saW1pdHMnXTtcbiAgICB2YXIgcmFIZWFkZXIgPSBoZWFkZXJzWydyZXRyeS1hZnRlciddO1xuXG4gICAgaWYgKHJsSGVhZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyByYXRlIGxpbWl0IGhlYWRlcnMgYXJlIG9mIHRoZSBmb3JtXG4gICAgICAgIC8vICAgICA8aGVhZGVyPiw8aGVhZGVyPiwuLlxuICAgICAgICAvLyB3aGVyZSBlYWNoIDxoZWFkZXI+IGlzIG9mIHRoZSBmb3JtXG4gICAgICAgIC8vICAgICA8cmV0cnlfYWZ0ZXI+OiA8Y2F0ZWdvcmllcz46IDxzY29wZT46IDxyZWFzb25fY29kZT5cbiAgICAgICAgLy8gd2hlcmVcbiAgICAgICAgLy8gICAgIDxyZXRyeV9hZnRlcj4gaXMgYSBkZWxheSBpbiBtc1xuICAgICAgICAvLyAgICAgPGNhdGVnb3JpZXM+IGlzIHRoZSBldmVudCB0eXBlKHMpIChlcnJvciwgdHJhbnNhY3Rpb24sIGV0YykgYmVpbmcgcmF0ZSBsaW1pdGVkIGFuZCBpcyBvZiB0aGUgZm9ybVxuICAgICAgICAvLyAgICAgICAgIDxjYXRlZ29yeT47PGNhdGVnb3J5PjsuLi5cbiAgICAgICAgLy8gICAgIDxzY29wZT4gaXMgd2hhdCdzIGJlaW5nIGxpbWl0ZWQgKG9yZywgcHJvamVjdCwgb3Iga2V5KSAtIGlnbm9yZWQgYnkgU0RLXG4gICAgICAgIC8vICAgICA8cmVhc29uX2NvZGU+IGlzIGFuIGFyYml0cmFyeSBzdHJpbmcgbGlrZSBcIm9yZ19xdW90YVwiIC0gaWdub3JlZCBieSBTREtcbiAgICAgICAgZm9yICh2YXIgX2MgPSBfX3ZhbHVlcyhybEhlYWRlci50cmltKCkuc3BsaXQoJywnKSksIF9kID0gX2MubmV4dCgpOyAhX2QuZG9uZTsgX2QgPSBfYy5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgbGltaXQgPSBfZC52YWx1ZTtcbiAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IGxpbWl0LnNwbGl0KCc6JywgMik7XG4gICAgICAgICAgdmFyIGhlYWRlckRlbGF5ID0gcGFyc2VJbnQocGFyYW1ldGVyc1swXSwgMTApO1xuICAgICAgICAgIHZhciBkZWxheSA9ICghaXNOYU4oaGVhZGVyRGVsYXkpID8gaGVhZGVyRGVsYXkgOiA2MCkgKiAxMDAwOyAvLyA2MHNlYyBkZWZhdWx0XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2UgPSAoZV8yID0gdm9pZCAwLCBfX3ZhbHVlcyhwYXJhbWV0ZXJzWzFdLnNwbGl0KCc7JykpKSwgX2YgPSBfZS5uZXh0KCk7ICFfZi5kb25lOyBfZiA9IF9lLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgY2F0ZWdvcnkgPSBfZi52YWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5fcmF0ZUxpbWl0c1tjYXRlZ29yeSB8fCAnYWxsJ10gPSBuZXcgRGF0ZShub3cgKyBkZWxheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZV8yXzEpIHtcbiAgICAgICAgICAgIGVfMiA9IHtcbiAgICAgICAgICAgICAgZXJyb3I6IGVfMl8xXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoX2YgJiYgIV9mLmRvbmUgJiYgKF9iID0gX2UucmV0dXJuKSkgX2IuY2FsbChfZSk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlXzFfMSkge1xuICAgICAgICBlXzEgPSB7XG4gICAgICAgICAgZXJyb3I6IGVfMV8xXG4gICAgICAgIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChfZCAmJiAhX2QuZG9uZSAmJiAoX2EgPSBfYy5yZXR1cm4pKSBfYS5jYWxsKF9jKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChyYUhlYWRlcikge1xuICAgICAgdGhpcy5fcmF0ZUxpbWl0cy5hbGwgPSBuZXcgRGF0ZShub3cgKyBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIobm93LCByYUhlYWRlcikpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHJldHVybiBCYXNlVHJhbnNwb3J0O1xufSgpO1xuXG5leHBvcnQgeyBCYXNlVHJhbnNwb3J0IH07IiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBldmVudFRvU2VudHJ5UmVxdWVzdCwgc2Vzc2lvblRvU2VudHJ5UmVxdWVzdCB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBPdXRjb21lIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QsIGlzTmF0aXZlRmV0Y2gsIGxvZ2dlciwgU2VudHJ5RXJyb3IsIHN1cHBvcnRzUmVmZXJyZXJQb2xpY3ksIFN5bmNQcm9taXNlIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNwb3J0IH0gZnJvbSAnLi9iYXNlJztcbi8qKlxuICogQSBzcGVjaWFsIHVzZWNhc2UgZm9yIGluY29ycmVjdGx5IHdyYXBwZWQgRmV0Y2ggQVBJcyBpbiBjb25qdW5jdGlvbiB3aXRoIGFkLWJsb2NrZXJzLlxuICogV2hlbmV2ZXIgc29tZW9uZSB3cmFwcyB0aGUgRmV0Y2ggQVBJIGFuZCByZXR1cm5zIHRoZSB3cm9uZyBwcm9taXNlIGNoYWluLFxuICogdGhpcyBjaGFpbiBiZWNvbWVzIG9ycGhhbmVkIGFuZCB0aGVyZSBpcyBubyBwb3NzaWJsZSB3YXkgdG8gY2FwdHVyZSBpdCdzIHJlamVjdGlvbnNcbiAqIG90aGVyIHRoYW4gYWxsb3dpbmcgaXQgYnViYmxlIHVwIHRvIHRoaXMgdmVyeSBoYW5kbGVyLiBlZy5cbiAqXG4gKiBjb25zdCBmID0gd2luZG93LmZldGNoO1xuICogd2luZG93LmZldGNoID0gZnVuY3Rpb24gKCkge1xuICogICBjb25zdCBwID0gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICpcbiAqICAgcC50aGVuKGZ1bmN0aW9uKCkge1xuICogICAgIGNvbnNvbGUubG9nKCdoaS4nKTtcbiAqICAgfSk7XG4gKlxuICogICByZXR1cm4gcDtcbiAqIH1cbiAqXG4gKiBgcC50aGVuKGZ1bmN0aW9uICgpIHsgLi4uIH0pYCBpcyBwcm9kdWNpbmcgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIHByb21pc2UgY2hhaW4sXG4gKiBob3dldmVyLCB3aGF0J3MgcmV0dXJuZWQgaXMgYHBgIC0gdGhlIHJlc3VsdCBvZiBvcmlnaW5hbCBgZmV0Y2hgIGNhbGwuXG4gKlxuICogVGhpcyBtZWFuLCB0aGF0IHdoZW5ldmVyIHdlIHVzZSB0aGUgRmV0Y2ggQVBJIHRvIHNlbmQgb3VyIG93biByZXF1ZXN0cywgX2FuZF9cbiAqIHNvbWUgYWQtYmxvY2tlciBibG9ja3MgaXQsIHRoaXMgb3JwaGFuZWQgY2hhaW4gd2lsbCBfYWx3YXlzXyByZWplY3QsXG4gKiBlZmZlY3RpdmVseSBjYXVzaW5nIGFub3RoZXIgZXZlbnQgdG8gYmUgY2FwdHVyZWQuXG4gKiBUaGlzIG1ha2VzIGEgd2hvbGUgcHJvY2VzcyBiZWNvbWUgYW4gaW5maW5pdGUgbG9vcCwgd2hpY2ggd2UgbmVlZCB0byBzb21laG93XG4gKiBkZWFsIHdpdGgsIGFuZCBicmVhayBpdCBpbiBvbmUgd2F5IG9yIGFub3RoZXIuXG4gKlxuICogVG8gZGVhbCB3aXRoIHRoaXMgaXNzdWUsIHdlIGFyZSBtYWtpbmcgc3VyZSB0aGF0IHdlIF9hbHdheXNfIHVzZSB0aGUgcmVhbFxuICogYnJvd3NlciBGZXRjaCBBUEksIGluc3RlYWQgb2YgcmVseWluZyBvbiB3aGF0IGB3aW5kb3cuZmV0Y2hgIGV4cG9zZXMuXG4gKiBUaGUgb25seSBkb3duc2lkZSB0byB0aGlzIHdvdWxkIGJlIG1pc3Npbmcgb3VyIG93biByZXF1ZXN0cyBhcyBicmVhZGNydW1icyxcbiAqIGJ1dCBiZWNhdXNlIHdlIGFyZSBhbHJlYWR5IG5vdCBkb2luZyB0aGlzLCBpdCBzaG91bGQgYmUganVzdCBmaW5lLlxuICpcbiAqIFBvc3NpYmxlIGZhaWxlZCBmZXRjaCBlcnJvciBtZXNzYWdlcyBwZXItYnJvd3NlcjpcbiAqXG4gKiBDaHJvbWU6ICBGYWlsZWQgdG8gZmV0Y2hcbiAqIEVkZ2U6ICAgIEZhaWxlZCB0byBGZXRjaFxuICogRmlyZWZveDogTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZVxuICogU2FmYXJpOiAgcmVzb3VyY2UgYmxvY2tlZCBieSBjb250ZW50IGJsb2NrZXJcbiAqL1xuXG5mdW5jdGlvbiBnZXROYXRpdmVGZXRjaEltcGxlbWVudGF0aW9uKCkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgKi9cbiAgdmFyIF9hLCBfYjsgLy8gRmFzdCBwYXRoIHRvIGF2b2lkIERPTSBJL09cblxuXG4gIHZhciBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3QoKTtcblxuICBpZiAoaXNOYXRpdmVGZXRjaChnbG9iYWwuZmV0Y2gpKSB7XG4gICAgcmV0dXJuIGdsb2JhbC5mZXRjaC5iaW5kKGdsb2JhbCk7XG4gIH1cblxuICB2YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gIHZhciBmZXRjaEltcGwgPSBnbG9iYWwuZmV0Y2g7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4gIGlmICh0eXBlb2YgKChfYSA9IGRvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3JlYXRlRWxlbWVudCkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgc2FuZGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICAgc2FuZGJveC5oaWRkZW4gPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzYW5kYm94KTtcblxuICAgICAgaWYgKChfYiA9IHNhbmRib3guY29udGVudFdpbmRvdykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmZldGNoKSB7XG4gICAgICAgIGZldGNoSW1wbCA9IHNhbmRib3guY29udGVudFdpbmRvdy5mZXRjaDtcbiAgICAgIH1cblxuICAgICAgZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChzYW5kYm94KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IGNyZWF0ZSBzYW5kYm94IGlmcmFtZSBmb3IgcHVyZSBmZXRjaCBjaGVjaywgYmFpbGluZyB0byB3aW5kb3cuZmV0Y2g6ICcsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmZXRjaEltcGwuYmluZChnbG9iYWwpO1xuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAqL1xufVxuLyoqIGBmZXRjaGAgYmFzZWQgdHJhbnNwb3J0ICovXG5cblxudmFyIEZldGNoVHJhbnNwb3J0ID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEZldGNoVHJhbnNwb3J0LCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEZldGNoVHJhbnNwb3J0KG9wdGlvbnMsIGZldGNoSW1wbCkge1xuICAgIGlmIChmZXRjaEltcGwgPT09IHZvaWQgMCkge1xuICAgICAgZmV0Y2hJbXBsID0gZ2V0TmF0aXZlRmV0Y2hJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5fZmV0Y2ggPSBmZXRjaEltcGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEZldGNoVHJhbnNwb3J0LnByb3RvdHlwZS5zZW5kRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZFJlcXVlc3QoZXZlbnRUb1NlbnRyeVJlcXVlc3QoZXZlbnQsIHRoaXMuX2FwaSksIGV2ZW50KTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgRmV0Y2hUcmFuc3BvcnQucHJvdG90eXBlLnNlbmRTZXNzaW9uID0gZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZFJlcXVlc3Qoc2Vzc2lvblRvU2VudHJ5UmVxdWVzdChzZXNzaW9uLCB0aGlzLl9hcGkpLCBzZXNzaW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwYXJhbSBzZW50cnlSZXF1ZXN0IFByZXBhcmVkIFNlbnRyeVJlcXVlc3QgdG8gYmUgZGVsaXZlcmVkXG4gICAqIEBwYXJhbSBvcmlnaW5hbFBheWxvYWQgT3JpZ2luYWwgcGF5bG9hZCB1c2VkIHRvIGNyZWF0ZSBTZW50cnlSZXF1ZXN0XG4gICAqL1xuXG5cbiAgRmV0Y2hUcmFuc3BvcnQucHJvdG90eXBlLl9zZW5kUmVxdWVzdCA9IGZ1bmN0aW9uIChzZW50cnlSZXF1ZXN0LCBvcmlnaW5hbFBheWxvYWQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuX2lzUmF0ZUxpbWl0ZWQoc2VudHJ5UmVxdWVzdC50eXBlKSkge1xuICAgICAgdGhpcy5yZWNvcmRMb3N0RXZlbnQoT3V0Y29tZS5SYXRlTGltaXRCYWNrb2ZmLCBzZW50cnlSZXF1ZXN0LnR5cGUpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHtcbiAgICAgICAgZXZlbnQ6IG9yaWdpbmFsUGF5bG9hZCxcbiAgICAgICAgdHlwZTogc2VudHJ5UmVxdWVzdC50eXBlLFxuICAgICAgICByZWFzb246IFwiVHJhbnNwb3J0IGZvciBcIiArIHNlbnRyeVJlcXVlc3QudHlwZSArIFwiIHJlcXVlc3RzIGxvY2tlZCB0aWxsIFwiICsgdGhpcy5fZGlzYWJsZWRVbnRpbChzZW50cnlSZXF1ZXN0LnR5cGUpICsgXCIgZHVlIHRvIHRvbyBtYW55IHJlcXVlc3RzLlwiLFxuICAgICAgICBzdGF0dXM6IDQyOVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBib2R5OiBzZW50cnlSZXF1ZXN0LmJvZHksXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIC8vIERlc3BpdGUgYWxsIHN0YXJzIGluIHRoZSBza3kgc2F5aW5nIHRoYXQgRWRnZSBzdXBwb3J0cyBvbGQgZHJhZnQgc3ludGF4LCBha2EgJ25ldmVyJywgJ2Fsd2F5cycsICdvcmlnaW4nIGFuZCAnZGVmYXVsdFxuICAgICAgLy8gaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1yZWZlcnJlci1wb2xpY3lcbiAgICAgIC8vIEl0IGRvZXNuJ3QuIEFuZCBpdCB0aHJvdyBleGNlcHRpb24gaW5zdGVhZCBvZiBpZ25vcmluZyB0aGlzIHBhcmFtZXRlci4uLlxuICAgICAgLy8gUkVGOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3JhdmVuLWpzL2lzc3Vlcy8xMjMzXG4gICAgICByZWZlcnJlclBvbGljeTogc3VwcG9ydHNSZWZlcnJlclBvbGljeSgpID8gJ29yaWdpbicgOiAnJ1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmZldGNoUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHRoaXMub3B0aW9ucy5mZXRjaFBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGVhZGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVhZGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmFkZChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdm9pZCBfdGhpcy5fZmV0Y2goc2VudHJ5UmVxdWVzdC51cmwsIG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgdmFyIGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAneC1zZW50cnktcmF0ZS1saW1pdHMnOiByZXNwb25zZS5oZWFkZXJzLmdldCgnWC1TZW50cnktUmF0ZS1MaW1pdHMnKSxcbiAgICAgICAgICAgICdyZXRyeS1hZnRlcic6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdSZXRyeS1BZnRlcicpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIF90aGlzLl9oYW5kbGVSZXNwb25zZSh7XG4gICAgICAgICAgICByZXF1ZXN0VHlwZTogc2VudHJ5UmVxdWVzdC50eXBlLFxuICAgICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgICByZWplY3Q6IHJlamVjdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaChyZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIEl0J3MgZWl0aGVyIGJ1ZmZlciByZWplY3Rpb24gb3IgYW55IG90aGVyIHhoci9mZXRjaCBlcnJvciwgd2hpY2ggYXJlIHRyZWF0ZWQgYXMgTmV0d29ya0Vycm9yLlxuICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yKSB7XG4gICAgICAgIF90aGlzLnJlY29yZExvc3RFdmVudChPdXRjb21lLlF1ZXVlT3ZlcmZsb3csIHNlbnRyeVJlcXVlc3QudHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5yZWNvcmRMb3N0RXZlbnQoT3V0Y29tZS5OZXR3b3JrRXJyb3IsIHNlbnRyeVJlcXVlc3QudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IHJlYXNvbjtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gRmV0Y2hUcmFuc3BvcnQ7XG59KEJhc2VUcmFuc3BvcnQpO1xuXG5leHBvcnQgeyBGZXRjaFRyYW5zcG9ydCB9OyIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgZXZlbnRUb1NlbnRyeVJlcXVlc3QsIHNlc3Npb25Ub1NlbnRyeVJlcXVlc3QgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgT3V0Y29tZSB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgU2VudHJ5RXJyb3IsIFN5bmNQcm9taXNlIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNwb3J0IH0gZnJvbSAnLi9iYXNlJztcbi8qKiBgWEhSYCBiYXNlZCB0cmFuc3BvcnQgKi9cblxudmFyIFhIUlRyYW5zcG9ydCA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhYSFJUcmFuc3BvcnQsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gWEhSVHJhbnNwb3J0KCkge1xuICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBYSFJUcmFuc3BvcnQucHJvdG90eXBlLnNlbmRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiB0aGlzLl9zZW5kUmVxdWVzdChldmVudFRvU2VudHJ5UmVxdWVzdChldmVudCwgdGhpcy5fYXBpKSwgZXZlbnQpO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBYSFJUcmFuc3BvcnQucHJvdG90eXBlLnNlbmRTZXNzaW9uID0gZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZFJlcXVlc3Qoc2Vzc2lvblRvU2VudHJ5UmVxdWVzdChzZXNzaW9uLCB0aGlzLl9hcGkpLCBzZXNzaW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwYXJhbSBzZW50cnlSZXF1ZXN0IFByZXBhcmVkIFNlbnRyeVJlcXVlc3QgdG8gYmUgZGVsaXZlcmVkXG4gICAqIEBwYXJhbSBvcmlnaW5hbFBheWxvYWQgT3JpZ2luYWwgcGF5bG9hZCB1c2VkIHRvIGNyZWF0ZSBTZW50cnlSZXF1ZXN0XG4gICAqL1xuXG5cbiAgWEhSVHJhbnNwb3J0LnByb3RvdHlwZS5fc2VuZFJlcXVlc3QgPSBmdW5jdGlvbiAoc2VudHJ5UmVxdWVzdCwgb3JpZ2luYWxQYXlsb2FkKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIGlmICh0aGlzLl9pc1JhdGVMaW1pdGVkKHNlbnRyeVJlcXVlc3QudHlwZSkpIHtcbiAgICAgIHRoaXMucmVjb3JkTG9zdEV2ZW50KE91dGNvbWUuUmF0ZUxpbWl0QmFja29mZiwgc2VudHJ5UmVxdWVzdC50eXBlKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7XG4gICAgICAgIGV2ZW50OiBvcmlnaW5hbFBheWxvYWQsXG4gICAgICAgIHR5cGU6IHNlbnRyeVJlcXVlc3QudHlwZSxcbiAgICAgICAgcmVhc29uOiBcIlRyYW5zcG9ydCBmb3IgXCIgKyBzZW50cnlSZXF1ZXN0LnR5cGUgKyBcIiByZXF1ZXN0cyBsb2NrZWQgdGlsbCBcIiArIHRoaXMuX2Rpc2FibGVkVW50aWwoc2VudHJ5UmVxdWVzdC50eXBlKSArIFwiIGR1ZSB0byB0b28gbWFueSByZXF1ZXN0cy5cIixcbiAgICAgICAgc3RhdHVzOiA0MjlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9idWZmZXIuYWRkKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHZhciBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAneC1zZW50cnktcmF0ZS1saW1pdHMnOiByZXF1ZXN0LmdldFJlc3BvbnNlSGVhZGVyKCdYLVNlbnRyeS1SYXRlLUxpbWl0cycpLFxuICAgICAgICAgICAgICAncmV0cnktYWZ0ZXInOiByZXF1ZXN0LmdldFJlc3BvbnNlSGVhZGVyKCdSZXRyeS1BZnRlcicpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBfdGhpcy5faGFuZGxlUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICByZXF1ZXN0VHlwZTogc2VudHJ5UmVxdWVzdC50eXBlLFxuICAgICAgICAgICAgICByZXNwb25zZTogcmVxdWVzdCxcbiAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgcmVqZWN0OiByZWplY3RcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0Lm9wZW4oJ1BPU1QnLCBzZW50cnlSZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgZm9yICh2YXIgaGVhZGVyIGluIF90aGlzLm9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgX3RoaXMub3B0aW9ucy5oZWFkZXJzW2hlYWRlcl0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3Quc2VuZChzZW50cnlSZXF1ZXN0LmJvZHkpO1xuICAgICAgfSk7XG4gICAgfSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIEl0J3MgZWl0aGVyIGJ1ZmZlciByZWplY3Rpb24gb3IgYW55IG90aGVyIHhoci9mZXRjaCBlcnJvciwgd2hpY2ggYXJlIHRyZWF0ZWQgYXMgTmV0d29ya0Vycm9yLlxuICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yKSB7XG4gICAgICAgIF90aGlzLnJlY29yZExvc3RFdmVudChPdXRjb21lLlF1ZXVlT3ZlcmZsb3csIHNlbnRyeVJlcXVlc3QudHlwZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5yZWNvcmRMb3N0RXZlbnQoT3V0Y29tZS5OZXR3b3JrRXJyb3IsIHNlbnRyeVJlcXVlc3QudHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IHJlYXNvbjtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gWEhSVHJhbnNwb3J0O1xufShCYXNlVHJhbnNwb3J0KTtcblxuZXhwb3J0IHsgWEhSVHJhbnNwb3J0IH07IiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgQmFzZUJhY2tlbmQgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgU2V2ZXJpdHkgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IHN1cHBvcnRzRmV0Y2ggfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IGV2ZW50RnJvbUV4Y2VwdGlvbiwgZXZlbnRGcm9tTWVzc2FnZSB9IGZyb20gJy4vZXZlbnRidWlsZGVyJztcbmltcG9ydCB7IEZldGNoVHJhbnNwb3J0LCBYSFJUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydHMnO1xuLyoqXG4gKiBUaGUgU2VudHJ5IEJyb3dzZXIgU0RLIEJhY2tlbmQuXG4gKiBAaGlkZGVuXG4gKi9cblxudmFyIEJyb3dzZXJCYWNrZW5kID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEJyb3dzZXJCYWNrZW5kLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEJyb3dzZXJCYWNrZW5kKCkge1xuICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgfVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBCcm93c2VyQmFja2VuZC5wcm90b3R5cGUuZXZlbnRGcm9tRXhjZXB0aW9uID0gZnVuY3Rpb24gKGV4Y2VwdGlvbiwgaGludCkge1xuICAgIHJldHVybiBldmVudEZyb21FeGNlcHRpb24odGhpcy5fb3B0aW9ucywgZXhjZXB0aW9uLCBoaW50KTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQnJvd3NlckJhY2tlbmQucHJvdG90eXBlLmV2ZW50RnJvbU1lc3NhZ2UgPSBmdW5jdGlvbiAobWVzc2FnZSwgbGV2ZWwsIGhpbnQpIHtcbiAgICBpZiAobGV2ZWwgPT09IHZvaWQgMCkge1xuICAgICAgbGV2ZWwgPSBTZXZlcml0eS5JbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBldmVudEZyb21NZXNzYWdlKHRoaXMuX29wdGlvbnMsIG1lc3NhZ2UsIGxldmVsLCBoaW50KTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQnJvd3NlckJhY2tlbmQucHJvdG90eXBlLl9zZXR1cFRyYW5zcG9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMuZHNuKSB7XG4gICAgICAvLyBXZSByZXR1cm4gdGhlIG5vb3AgdHJhbnNwb3J0IGhlcmUgaW4gY2FzZSB0aGVyZSBpcyBubyBEc24uXG4gICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fc2V0dXBUcmFuc3BvcnQuY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICB2YXIgdHJhbnNwb3J0T3B0aW9ucyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLl9vcHRpb25zLnRyYW5zcG9ydE9wdGlvbnMpLCB7XG4gICAgICBkc246IHRoaXMuX29wdGlvbnMuZHNuLFxuICAgICAgdHVubmVsOiB0aGlzLl9vcHRpb25zLnR1bm5lbCxcbiAgICAgIHNlbmRDbGllbnRSZXBvcnRzOiB0aGlzLl9vcHRpb25zLnNlbmRDbGllbnRSZXBvcnRzLFxuICAgICAgX21ldGFkYXRhOiB0aGlzLl9vcHRpb25zLl9tZXRhZGF0YVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMudHJhbnNwb3J0KSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMuX29wdGlvbnMudHJhbnNwb3J0KHRyYW5zcG9ydE9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0c0ZldGNoKCkpIHtcbiAgICAgIHJldHVybiBuZXcgRmV0Y2hUcmFuc3BvcnQodHJhbnNwb3J0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBYSFJUcmFuc3BvcnQodHJhbnNwb3J0T3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIEJyb3dzZXJCYWNrZW5kO1xufShCYXNlQmFja2VuZCk7XG5cbmV4cG9ydCB7IEJyb3dzZXJCYWNrZW5kIH07IiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEFQSSwgY2FwdHVyZUV4Y2VwdGlvbiwgd2l0aFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGFkZEV4Y2VwdGlvbk1lY2hhbmlzbSwgYWRkRXhjZXB0aW9uVHlwZVZhbHVlLCBnZXRHbG9iYWxPYmplY3QsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xudmFyIGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpO1xudmFyIGlnbm9yZU9uRXJyb3IgPSAwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZElnbm9yZU9uRXJyb3IoKSB7XG4gIHJldHVybiBpZ25vcmVPbkVycm9yID4gMDtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVOZXh0T25FcnJvcigpIHtcbiAgLy8gb25lcnJvciBzaG91bGQgdHJpZ2dlciBiZWZvcmUgc2V0VGltZW91dFxuICBpZ25vcmVPbkVycm9yICs9IDE7XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGlnbm9yZU9uRXJyb3IgLT0gMTtcbiAgfSk7XG59XG4vKipcbiAqIEluc3RydW1lbnRzIHRoZSBnaXZlbiBmdW5jdGlvbiBhbmQgc2VuZHMgYW4gZXZlbnQgdG8gU2VudHJ5IGV2ZXJ5IHRpbWUgdGhlXG4gKiBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuICpcbiAqIEBwYXJhbSBmbiBBIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcmV0dXJucyBUaGUgd3JhcHBlZCBmdW5jdGlvbi5cbiAqIEBoaWRkZW5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gd3JhcChmbiwgb3B0aW9ucywgYmVmb3JlKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBXZSBkb24ndCB3YW5uYSB3cmFwIGl0IHR3aWNlXG4gICAgaWYgKGZuLl9fc2VudHJ5X18pIHtcbiAgICAgIHJldHVybiBmbjtcbiAgICB9IC8vIElmIHRoaXMgaGFzIGFscmVhZHkgYmVlbiB3cmFwcGVkIGluIHRoZSBwYXN0LCByZXR1cm4gdGhhdCB3cmFwcGVkIGZ1bmN0aW9uXG5cblxuICAgIGlmIChmbi5fX3NlbnRyeV93cmFwcGVkX18pIHtcbiAgICAgIHJldHVybiBmbi5fX3NlbnRyeV93cmFwcGVkX187XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSnVzdCBhY2Nlc3NpbmcgY3VzdG9tIHByb3BzIGluIHNvbWUgU2VsZW5pdW0gZW52aXJvbm1lbnRzXG4gICAgLy8gY2FuIGNhdXNlIGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGV4Y2VwdGlvbiAoc2VlIHJhdmVuLWpzIzQ5NSkuXG4gICAgLy8gQmFpbCBvbiB3cmFwcGluZyBhbmQgcmV0dXJuIHRoZSBmdW5jdGlvbiBhcy1pcyAoZGVmZXJzIHRvIHdpbmRvdy5vbmVycm9yKS5cbiAgICByZXR1cm4gZm47XG4gIH1cbiAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXJlc3QtcGFyYW1zICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cblxuICB2YXIgc2VudHJ5V3JhcHBlZCA9IGZ1bmN0aW9uIHNlbnRyeVdyYXBwZWQoKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChiZWZvcmUgJiYgdHlwZW9mIGJlZm9yZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBiZWZvcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuXG5cbiAgICAgIHZhciB3cmFwcGVkQXJndW1lbnRzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gd3JhcChhcmcsIG9wdGlvbnMpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChmbi5oYW5kbGVFdmVudCkge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGludm9rZSB1c2VyLWxhbmQgZnVuY3Rpb25cbiAgICAgICAgLy8gTk9URTogSWYgeW91IGFyZSBhIFNlbnRyeSB1c2VyLCBhbmQgeW91IGFyZSBzZWVpbmcgdGhpcyBzdGFjayBmcmFtZSwgaXRcbiAgICAgICAgLy8gICAgICAgbWVhbnMgdGhlIHNlbnRyeS5qYXZhc2NyaXB0IFNESyBjYXVnaHQgYW4gZXJyb3IgaW52b2tpbmcgeW91ciBhcHBsaWNhdGlvbiBjb2RlLiBUaGlzXG4gICAgICAgIC8vICAgICAgIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBOT1QgaW5kaWNhdGl2ZSBvZiBhIGJ1ZyB3aXRoIHNlbnRyeS5qYXZhc2NyaXB0LlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIHJldHVybiBmbi5oYW5kbGVFdmVudC5hcHBseSh0aGlzLCB3cmFwcGVkQXJndW1lbnRzKTtcbiAgICAgIH0gLy8gQXR0ZW1wdCB0byBpbnZva2UgdXNlci1sYW5kIGZ1bmN0aW9uXG4gICAgICAvLyBOT1RFOiBJZiB5b3UgYXJlIGEgU2VudHJ5IHVzZXIsIGFuZCB5b3UgYXJlIHNlZWluZyB0aGlzIHN0YWNrIGZyYW1lLCBpdFxuICAgICAgLy8gICAgICAgbWVhbnMgdGhlIHNlbnRyeS5qYXZhc2NyaXB0IFNESyBjYXVnaHQgYW4gZXJyb3IgaW52b2tpbmcgeW91ciBhcHBsaWNhdGlvbiBjb2RlLiBUaGlzXG4gICAgICAvLyAgICAgICBpcyBleHBlY3RlZCBiZWhhdmlvciBhbmQgTk9UIGluZGljYXRpdmUgb2YgYSBidWcgd2l0aCBzZW50cnkuamF2YXNjcmlwdC5cblxuXG4gICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgd3JhcHBlZEFyZ3VtZW50cyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlnbm9yZU5leHRPbkVycm9yKCk7XG4gICAgICB3aXRoU2NvcGUoZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICAgIHNjb3BlLmFkZEV2ZW50UHJvY2Vzc29yKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHZhciBwcm9jZXNzZWRFdmVudCA9IF9fYXNzaWduKHt9LCBldmVudCk7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5tZWNoYW5pc20pIHtcbiAgICAgICAgICAgIGFkZEV4Y2VwdGlvblR5cGVWYWx1ZShwcm9jZXNzZWRFdmVudCwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgYWRkRXhjZXB0aW9uTWVjaGFuaXNtKHByb2Nlc3NlZEV2ZW50LCBvcHRpb25zLm1lY2hhbmlzbSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc2VkRXZlbnQuZXh0cmEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcHJvY2Vzc2VkRXZlbnQuZXh0cmEpLCB7XG4gICAgICAgICAgICBhcmd1bWVudHM6IGFyZ3NcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRXZlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjYXB0dXJlRXhjZXB0aW9uKGV4KTtcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXg7XG4gICAgfVxuICB9O1xuICAvKiBlc2xpbnQtZW5hYmxlIHByZWZlci1yZXN0LXBhcmFtcyAqL1xuICAvLyBBY2Nlc3Npbmcgc29tZSBvYmplY3RzIG1heSB0aHJvd1xuICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzExNjhcblxuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZm4pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm4sIHByb3BlcnR5KSkge1xuICAgICAgICBzZW50cnlXcmFwcGVkW3Byb3BlcnR5XSA9IGZuW3Byb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKF9vTykge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cbiAgZm4ucHJvdG90eXBlID0gZm4ucHJvdG90eXBlIHx8IHt9O1xuICBzZW50cnlXcmFwcGVkLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnX19zZW50cnlfd3JhcHBlZF9fJywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBzZW50cnlXcmFwcGVkXG4gIH0pOyAvLyBTaWduYWwgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIHdyYXBwZWQvZmlsbGVkIGFscmVhZHlcbiAgLy8gZm9yIGJvdGggZGVidWdnaW5nIGFuZCB0byBwcmV2ZW50IGl0IHRvIGJlaW5nIHdyYXBwZWQvZmlsbGVkIHR3aWNlXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc2VudHJ5V3JhcHBlZCwge1xuICAgIF9fc2VudHJ5X186IHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHRydWVcbiAgICB9LFxuICAgIF9fc2VudHJ5X29yaWdpbmFsX186IHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IGZuXG4gICAgfVxuICB9KTsgLy8gUmVzdG9yZSBvcmlnaW5hbCBmdW5jdGlvbiBuYW1lIChub3QgYWxsIGJyb3dzZXJzIGFsbG93IHRoYXQpXG5cbiAgdHJ5IHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc2VudHJ5V3JhcHBlZCwgJ25hbWUnKTtcblxuICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbnRyeVdyYXBwZWQsICduYW1lJywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gZm4ubmFtZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcblxuICB9IGNhdGNoIChfb08pIHt9XG5cbiAgcmV0dXJuIHNlbnRyeVdyYXBwZWQ7XG59XG4vKipcbiAqIEluamVjdHMgdGhlIFJlcG9ydCBEaWFsb2cgc2NyaXB0XG4gKiBAaGlkZGVuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFJlcG9ydERpYWxvZyhvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBpZiAoIWdsb2JhbC5kb2N1bWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghb3B0aW9ucy5ldmVudElkKSB7XG4gICAgbG9nZ2VyLmVycm9yKFwiTWlzc2luZyBldmVudElkIG9wdGlvbiBpbiBzaG93UmVwb3J0RGlhbG9nIGNhbGxcIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zLmRzbikge1xuICAgIGxvZ2dlci5lcnJvcihcIk1pc3NpbmcgZHNuIG9wdGlvbiBpbiBzaG93UmVwb3J0RGlhbG9nIGNhbGxcIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNjcmlwdCA9IGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgc2NyaXB0LnNyYyA9IG5ldyBBUEkob3B0aW9ucy5kc24pLmdldFJlcG9ydERpYWxvZ0VuZHBvaW50KG9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zLm9uTG9hZCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICBzY3JpcHQub25sb2FkID0gb3B0aW9ucy5vbkxvYWQ7XG4gIH1cblxuICB2YXIgaW5qZWN0aW9uUG9pbnQgPSBnbG9iYWwuZG9jdW1lbnQuaGVhZCB8fCBnbG9iYWwuZG9jdW1lbnQuYm9keTtcblxuICBpZiAoaW5qZWN0aW9uUG9pbnQpIHtcbiAgICBpbmplY3Rpb25Qb2ludC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9XG59IiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVhZCwgX19zcHJlYWQgfSBmcm9tIFwidHNsaWJcIjtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cblxuaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBTZXZlcml0eSB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgZ2V0RXZlbnREZXNjcmlwdGlvbiwgZ2V0R2xvYmFsT2JqZWN0LCBodG1sVHJlZUFzU3RyaW5nLCBwYXJzZVVybCwgc2FmZUpvaW4gfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbi8qKlxuICogRGVmYXVsdCBCcmVhZGNydW1icyBpbnN0cnVtZW50YXRpb25zXG4gKiBUT0RPOiBEZXByZWNhdGVkIC0gd2l0aCB2NiwgdGhpcyB3aWxsIGJlIHJlbmFtZWQgdG8gYEluc3RydW1lbnRgXG4gKi9cblxudmFyIEJyZWFkY3J1bWJzID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBmdW5jdGlvbiBCcmVhZGNydW1icyhvcHRpb25zKSB7XG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBCcmVhZGNydW1icy5pZDtcbiAgICB0aGlzLl9vcHRpb25zID0gX19hc3NpZ24oe1xuICAgICAgY29uc29sZTogdHJ1ZSxcbiAgICAgIGRvbTogdHJ1ZSxcbiAgICAgIGZldGNoOiB0cnVlLFxuICAgICAgaGlzdG9yeTogdHJ1ZSxcbiAgICAgIHNlbnRyeTogdHJ1ZSxcbiAgICAgIHhocjogdHJ1ZVxuICAgIH0sIG9wdGlvbnMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBicmVhZGNydW1iIG9mIGBzZW50cnlgIGZyb20gdGhlIGV2ZW50cyB0aGVtc2VsdmVzXG4gICAqL1xuXG5cbiAgQnJlYWRjcnVtYnMucHJvdG90eXBlLmFkZFNlbnRyeUJyZWFkY3J1bWIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMuc2VudHJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEh1YigpLmFkZEJyZWFkY3J1bWIoe1xuICAgICAgY2F0ZWdvcnk6IFwic2VudHJ5LlwiICsgKGV2ZW50LnR5cGUgPT09ICd0cmFuc2FjdGlvbicgPyAndHJhbnNhY3Rpb24nIDogJ2V2ZW50JyksXG4gICAgICBldmVudF9pZDogZXZlbnQuZXZlbnRfaWQsXG4gICAgICBsZXZlbDogZXZlbnQubGV2ZWwsXG4gICAgICBtZXNzYWdlOiBnZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KVxuICAgIH0sIHtcbiAgICAgIGV2ZW50OiBldmVudFxuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogSW5zdHJ1bWVudCBicm93c2VyIGJ1aWx0LWlucyB3LyBicmVhZGNydW1iIGNhcHR1cmluZ1xuICAgKiAgLSBDb25zb2xlIEFQSVxuICAgKiAgLSBET00gQVBJIChjbGljay90eXBpbmcpXG4gICAqICAtIFhNTEh0dHBSZXF1ZXN0IEFQSVxuICAgKiAgLSBGZXRjaCBBUElcbiAgICogIC0gSGlzdG9yeSBBUElcbiAgICovXG5cblxuICBCcmVhZGNydW1icy5wcm90b3R5cGUuc2V0dXBPbmNlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy5jb25zb2xlKSB7XG4gICAgICBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyKHtcbiAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzLl9jb25zb2xlQnJlYWRjcnVtYi5hcHBseShfdGhpcywgX19zcHJlYWQoYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiAnY29uc29sZSdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9vcHRpb25zLmRvbSkge1xuICAgICAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpcy5fZG9tQnJlYWRjcnVtYi5hcHBseShfdGhpcywgX19zcHJlYWQoYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiAnZG9tJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMueGhyKSB7XG4gICAgICBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyKHtcbiAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzLl94aHJCcmVhZGNydW1iLmFwcGx5KF90aGlzLCBfX3NwcmVhZChhcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICd4aHInXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy5mZXRjaCkge1xuICAgICAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpcy5fZmV0Y2hCcmVhZGNydW1iLmFwcGx5KF90aGlzLCBfX3NwcmVhZChhcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICdmZXRjaCdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9vcHRpb25zLmhpc3RvcnkpIHtcbiAgICAgIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RoaXMuX2hpc3RvcnlCcmVhZGNydW1iLmFwcGx5KF90aGlzLCBfX3NwcmVhZChhcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICdoaXN0b3J5J1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlcyBicmVhZGNydW1icyBmcm9tIGNvbnNvbGUgQVBJIGNhbGxzXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXG5cbiAgQnJlYWRjcnVtYnMucHJvdG90eXBlLl9jb25zb2xlQnJlYWRjcnVtYiA9IGZ1bmN0aW9uIChoYW5kbGVyRGF0YSkge1xuICAgIHZhciBicmVhZGNydW1iID0ge1xuICAgICAgY2F0ZWdvcnk6ICdjb25zb2xlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgYXJndW1lbnRzOiBoYW5kbGVyRGF0YS5hcmdzLFxuICAgICAgICBsb2dnZXI6ICdjb25zb2xlJ1xuICAgICAgfSxcbiAgICAgIGxldmVsOiBTZXZlcml0eS5mcm9tU3RyaW5nKGhhbmRsZXJEYXRhLmxldmVsKSxcbiAgICAgIG1lc3NhZ2U6IHNhZmVKb2luKGhhbmRsZXJEYXRhLmFyZ3MsICcgJylcbiAgICB9O1xuXG4gICAgaWYgKGhhbmRsZXJEYXRhLmxldmVsID09PSAnYXNzZXJ0Jykge1xuICAgICAgaWYgKGhhbmRsZXJEYXRhLmFyZ3NbMF0gPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFkY3J1bWIubWVzc2FnZSA9IFwiQXNzZXJ0aW9uIGZhaWxlZDogXCIgKyAoc2FmZUpvaW4oaGFuZGxlckRhdGEuYXJncy5zbGljZSgxKSwgJyAnKSB8fCAnY29uc29sZS5hc3NlcnQnKTtcbiAgICAgICAgYnJlYWRjcnVtYi5kYXRhLmFyZ3VtZW50cyA9IGhhbmRsZXJEYXRhLmFyZ3Muc2xpY2UoMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEb24ndCBjYXB0dXJlIGEgYnJlYWRjcnVtYiBmb3IgcGFzc2VkIGFzc2VydGlvbnNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldEN1cnJlbnRIdWIoKS5hZGRCcmVhZGNydW1iKGJyZWFkY3J1bWIsIHtcbiAgICAgIGlucHV0OiBoYW5kbGVyRGF0YS5hcmdzLFxuICAgICAgbGV2ZWw6IGhhbmRsZXJEYXRhLmxldmVsXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGVzIGJyZWFkY3J1bWJzIGZyb20gRE9NIEFQSSBjYWxsc1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuXG4gIEJyZWFkY3J1bWJzLnByb3RvdHlwZS5fZG9tQnJlYWRjcnVtYiA9IGZ1bmN0aW9uIChoYW5kbGVyRGF0YSkge1xuICAgIHZhciB0YXJnZXQ7XG4gICAgdmFyIGtleUF0dHJzID0gdHlwZW9mIHRoaXMuX29wdGlvbnMuZG9tID09PSAnb2JqZWN0JyA/IHRoaXMuX29wdGlvbnMuZG9tLnNlcmlhbGl6ZUF0dHJpYnV0ZSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2Yga2V5QXR0cnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXlBdHRycyA9IFtrZXlBdHRyc107XG4gICAgfSAvLyBBY2Nlc3NpbmcgZXZlbnQudGFyZ2V0IGNhbiB0aHJvdyAoc2VlIGdldHNlbnRyeS9yYXZlbi1qcyM4MzgsICM3NjgpXG5cblxuICAgIHRyeSB7XG4gICAgICB0YXJnZXQgPSBoYW5kbGVyRGF0YS5ldmVudC50YXJnZXQgPyBodG1sVHJlZUFzU3RyaW5nKGhhbmRsZXJEYXRhLmV2ZW50LnRhcmdldCwga2V5QXR0cnMpIDogaHRtbFRyZWVBc1N0cmluZyhoYW5kbGVyRGF0YS5ldmVudCwga2V5QXR0cnMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRhcmdldCA9ICc8dW5rbm93bj4nO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEh1YigpLmFkZEJyZWFkY3J1bWIoe1xuICAgICAgY2F0ZWdvcnk6IFwidWkuXCIgKyBoYW5kbGVyRGF0YS5uYW1lLFxuICAgICAgbWVzc2FnZTogdGFyZ2V0XG4gICAgfSwge1xuICAgICAgZXZlbnQ6IGhhbmRsZXJEYXRhLmV2ZW50LFxuICAgICAgbmFtZTogaGFuZGxlckRhdGEubmFtZSxcbiAgICAgIGdsb2JhbDogaGFuZGxlckRhdGEuZ2xvYmFsXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGVzIGJyZWFkY3J1bWJzIGZyb20gWEhSIEFQSSBjYWxsc1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuXG4gIEJyZWFkY3J1bWJzLnByb3RvdHlwZS5feGhyQnJlYWRjcnVtYiA9IGZ1bmN0aW9uIChoYW5kbGVyRGF0YSkge1xuICAgIGlmIChoYW5kbGVyRGF0YS5lbmRUaW1lc3RhbXApIHtcbiAgICAgIC8vIFdlIG9ubHkgY2FwdHVyZSBjb21wbGV0ZSwgbm9uLXNlbnRyeSByZXF1ZXN0c1xuICAgICAgaWYgKGhhbmRsZXJEYXRhLnhoci5fX3NlbnRyeV9vd25fcmVxdWVzdF9fKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF9hID0gaGFuZGxlckRhdGEueGhyLl9fc2VudHJ5X3hocl9fIHx8IHt9LFxuICAgICAgICAgIG1ldGhvZCA9IF9hLm1ldGhvZCxcbiAgICAgICAgICB1cmwgPSBfYS51cmwsXG4gICAgICAgICAgc3RhdHVzX2NvZGUgPSBfYS5zdGF0dXNfY29kZSxcbiAgICAgICAgICBib2R5ID0gX2EuYm9keTtcblxuICAgICAgZ2V0Q3VycmVudEh1YigpLmFkZEJyZWFkY3J1bWIoe1xuICAgICAgICBjYXRlZ29yeTogJ3hocicsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICBzdGF0dXNfY29kZTogc3RhdHVzX2NvZGVcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ2h0dHAnXG4gICAgICB9LCB7XG4gICAgICAgIHhocjogaGFuZGxlckRhdGEueGhyLFxuICAgICAgICBpbnB1dDogYm9keVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlcyBicmVhZGNydW1icyBmcm9tIGZldGNoIEFQSSBjYWxsc1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuXG4gIEJyZWFkY3J1bWJzLnByb3RvdHlwZS5fZmV0Y2hCcmVhZGNydW1iID0gZnVuY3Rpb24gKGhhbmRsZXJEYXRhKSB7XG4gICAgLy8gV2Ugb25seSBjYXB0dXJlIGNvbXBsZXRlIGZldGNoIHJlcXVlc3RzXG4gICAgaWYgKCFoYW5kbGVyRGF0YS5lbmRUaW1lc3RhbXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaGFuZGxlckRhdGEuZmV0Y2hEYXRhLnVybC5tYXRjaCgvc2VudHJ5X2tleS8pICYmIGhhbmRsZXJEYXRhLmZldGNoRGF0YS5tZXRob2QgPT09ICdQT1NUJykge1xuICAgICAgLy8gV2Ugd2lsbCBub3QgY3JlYXRlIGJyZWFkY3J1bWJzIGZvciBmZXRjaCByZXF1ZXN0cyB0aGF0IGNvbnRhaW4gYHNlbnRyeV9rZXlgIChpbnRlcm5hbCBzZW50cnkgcmVxdWVzdHMpXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZXJEYXRhLmVycm9yKSB7XG4gICAgICBnZXRDdXJyZW50SHViKCkuYWRkQnJlYWRjcnVtYih7XG4gICAgICAgIGNhdGVnb3J5OiAnZmV0Y2gnLFxuICAgICAgICBkYXRhOiBoYW5kbGVyRGF0YS5mZXRjaERhdGEsXG4gICAgICAgIGxldmVsOiBTZXZlcml0eS5FcnJvcixcbiAgICAgICAgdHlwZTogJ2h0dHAnXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IGhhbmRsZXJEYXRhLmVycm9yLFxuICAgICAgICBpbnB1dDogaGFuZGxlckRhdGEuYXJnc1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdldEN1cnJlbnRIdWIoKS5hZGRCcmVhZGNydW1iKHtcbiAgICAgICAgY2F0ZWdvcnk6ICdmZXRjaCcsXG4gICAgICAgIGRhdGE6IF9fYXNzaWduKF9fYXNzaWduKHt9LCBoYW5kbGVyRGF0YS5mZXRjaERhdGEpLCB7XG4gICAgICAgICAgc3RhdHVzX2NvZGU6IGhhbmRsZXJEYXRhLnJlc3BvbnNlLnN0YXR1c1xuICAgICAgICB9KSxcbiAgICAgICAgdHlwZTogJ2h0dHAnXG4gICAgICB9LCB7XG4gICAgICAgIGlucHV0OiBoYW5kbGVyRGF0YS5hcmdzLFxuICAgICAgICByZXNwb25zZTogaGFuZGxlckRhdGEucmVzcG9uc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYnJlYWRjcnVtYnMgZnJvbSBoaXN0b3J5IEFQSSBjYWxsc1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuXG4gIEJyZWFkY3J1bWJzLnByb3RvdHlwZS5faGlzdG9yeUJyZWFkY3J1bWIgPSBmdW5jdGlvbiAoaGFuZGxlckRhdGEpIHtcbiAgICB2YXIgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0KCk7XG4gICAgdmFyIGZyb20gPSBoYW5kbGVyRGF0YS5mcm9tO1xuICAgIHZhciB0byA9IGhhbmRsZXJEYXRhLnRvO1xuICAgIHZhciBwYXJzZWRMb2MgPSBwYXJzZVVybChnbG9iYWwubG9jYXRpb24uaHJlZik7XG4gICAgdmFyIHBhcnNlZEZyb20gPSBwYXJzZVVybChmcm9tKTtcbiAgICB2YXIgcGFyc2VkVG8gPSBwYXJzZVVybCh0byk7IC8vIEluaXRpYWwgcHVzaFN0YXRlIGRvZXNuJ3QgcHJvdmlkZSBgZnJvbWAgaW5mb3JtYXRpb25cblxuICAgIGlmICghcGFyc2VkRnJvbS5wYXRoKSB7XG4gICAgICBwYXJzZWRGcm9tID0gcGFyc2VkTG9jO1xuICAgIH0gLy8gVXNlIG9ubHkgdGhlIHBhdGggY29tcG9uZW50IG9mIHRoZSBVUkwgaWYgdGhlIFVSTCBtYXRjaGVzIHRoZSBjdXJyZW50XG4gICAgLy8gZG9jdW1lbnQgKGFsbW9zdCBhbGwgdGhlIHRpbWUgd2hlbiB1c2luZyBwdXNoU3RhdGUpXG5cblxuICAgIGlmIChwYXJzZWRMb2MucHJvdG9jb2wgPT09IHBhcnNlZFRvLnByb3RvY29sICYmIHBhcnNlZExvYy5ob3N0ID09PSBwYXJzZWRUby5ob3N0KSB7XG4gICAgICB0byA9IHBhcnNlZFRvLnJlbGF0aXZlO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRMb2MucHJvdG9jb2wgPT09IHBhcnNlZEZyb20ucHJvdG9jb2wgJiYgcGFyc2VkTG9jLmhvc3QgPT09IHBhcnNlZEZyb20uaG9zdCkge1xuICAgICAgZnJvbSA9IHBhcnNlZEZyb20ucmVsYXRpdmU7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEh1YigpLmFkZEJyZWFkY3J1bWIoe1xuICAgICAgY2F0ZWdvcnk6ICduYXZpZ2F0aW9uJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZnJvbTogZnJvbSxcbiAgICAgICAgdG86IHRvXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEJyZWFkY3J1bWJzLmlkID0gJ0JyZWFkY3J1bWJzJztcbiAgcmV0dXJuIEJyZWFkY3J1bWJzO1xufSgpO1xuXG5leHBvcnQgeyBCcmVhZGNydW1icyB9OyIsImltcG9ydCB7IF9fYXNzaWduLCBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEJhc2VDbGllbnQsIFNES19WRVJTSU9OIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgeyBCcm93c2VyQmFja2VuZCB9IGZyb20gJy4vYmFja2VuZCc7XG5pbXBvcnQgeyBpbmplY3RSZXBvcnREaWFsb2cgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYnMgfSBmcm9tICcuL2ludGVncmF0aW9ucyc7XG4vKipcbiAqIFRoZSBTZW50cnkgQnJvd3NlciBTREsgQ2xpZW50LlxuICpcbiAqIEBzZWUgQnJvd3Nlck9wdGlvbnMgZm9yIGRvY3VtZW50YXRpb24gb24gY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHNlZSBTZW50cnlDbGllbnQgZm9yIHVzYWdlIGRvY3VtZW50YXRpb24uXG4gKi9cblxudmFyIEJyb3dzZXJDbGllbnQgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoQnJvd3NlckNsaWVudCwgX3N1cGVyKTtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQnJvd3NlciBTREsgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBTREsuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gQnJvd3NlckNsaWVudChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBvcHRpb25zLl9tZXRhZGF0YSA9IG9wdGlvbnMuX21ldGFkYXRhIHx8IHt9O1xuICAgIG9wdGlvbnMuX21ldGFkYXRhLnNkayA9IG9wdGlvbnMuX21ldGFkYXRhLnNkayB8fCB7XG4gICAgICBuYW1lOiAnc2VudHJ5LmphdmFzY3JpcHQuYnJvd3NlcicsXG4gICAgICBwYWNrYWdlczogW3tcbiAgICAgICAgbmFtZTogJ25wbTpAc2VudHJ5L2Jyb3dzZXInLFxuICAgICAgICB2ZXJzaW9uOiBTREtfVkVSU0lPTlxuICAgICAgfV0sXG4gICAgICB2ZXJzaW9uOiBTREtfVkVSU0lPTlxuICAgIH07XG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBCcm93c2VyQmFja2VuZCwgb3B0aW9ucykgfHwgdGhpcztcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIFNob3cgYSByZXBvcnQgZGlhbG9nIHRvIHRoZSB1c2VyIHRvIHNlbmQgZmVlZGJhY2sgdG8gYSBzcGVjaWZpYyBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgU2V0IGluZGl2aWR1YWwgb3B0aW9ucyBmb3IgdGhlIGRpYWxvZ1xuICAgKi9cblxuXG4gIEJyb3dzZXJDbGllbnQucHJvdG90eXBlLnNob3dSZXBvcnREaWFsb2cgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9IC8vIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgZG9jdW1lbnQgKFJlYWN0IE5hdGl2ZSlcblxuXG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0R2xvYmFsT2JqZWN0KCkuZG9jdW1lbnQ7XG5cbiAgICBpZiAoIWRvY3VtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQoKSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdUcnlpbmcgdG8gY2FsbCBzaG93UmVwb3J0RGlhbG9nIHdpdGggU2VudHJ5IENsaWVudCBkaXNhYmxlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGluamVjdFJlcG9ydERpYWxvZyhfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIHtcbiAgICAgIGRzbjogb3B0aW9ucy5kc24gfHwgdGhpcy5nZXREc24oKVxuICAgIH0pKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQnJvd3NlckNsaWVudC5wcm90b3R5cGUuX3ByZXBhcmVFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgc2NvcGUsIGhpbnQpIHtcbiAgICBldmVudC5wbGF0Zm9ybSA9IGV2ZW50LnBsYXRmb3JtIHx8ICdqYXZhc2NyaXB0JztcbiAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fcHJlcGFyZUV2ZW50LmNhbGwodGhpcywgZXZlbnQsIHNjb3BlLCBoaW50KTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQnJvd3NlckNsaWVudC5wcm90b3R5cGUuX3NlbmRFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBpbnRlZ3JhdGlvbiA9IHRoaXMuZ2V0SW50ZWdyYXRpb24oQnJlYWRjcnVtYnMpO1xuXG4gICAgaWYgKGludGVncmF0aW9uKSB7XG4gICAgICBpbnRlZ3JhdGlvbi5hZGRTZW50cnlCcmVhZGNydW1iKGV2ZW50KTtcbiAgICB9XG5cbiAgICBfc3VwZXIucHJvdG90eXBlLl9zZW5kRXZlbnQuY2FsbCh0aGlzLCBldmVudCk7XG4gIH07XG5cbiAgcmV0dXJuIEJyb3dzZXJDbGllbnQ7XG59KEJhc2VDbGllbnQpO1xuXG5leHBvcnQgeyBCcm93c2VyQ2xpZW50IH07IiwiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuLyoqXG4gKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgU0RLIGNsaWVudCBpbnN0YW5jZS4gVGhlIGNsaWVudCBpc1xuICogaW5zdGFsbGVkIGFuZCB0aGVuIGJvdW5kIHRvIHRoZSBjdXJyZW50IHNjb3BlLlxuICpcbiAqIEBwYXJhbSBjbGllbnRDbGFzcyBUaGUgY2xpZW50IGNsYXNzIHRvIGluc3RhbnRpYXRlLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjbGllbnQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRBbmRCaW5kKGNsaWVudENsYXNzLCBvcHRpb25zKSB7XG4gIHZhciBfYTtcblxuICBpZiAob3B0aW9ucy5kZWJ1ZyA9PT0gdHJ1ZSkge1xuICAgIGxvZ2dlci5lbmFibGUoKTtcbiAgfVxuXG4gIHZhciBodWIgPSBnZXRDdXJyZW50SHViKCk7XG4gIChfYSA9IGh1Yi5nZXRTY29wZSgpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudXBkYXRlKG9wdGlvbnMuaW5pdGlhbFNjb3BlKTtcbiAgdmFyIGNsaWVudCA9IG5ldyBjbGllbnRDbGFzcyhvcHRpb25zKTtcbiAgaHViLmJpbmRDbGllbnQoY2xpZW50KTtcbn0iLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBhZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IGdldEV2ZW50RGVzY3JpcHRpb24sIGlzTWF0Y2hpbmdQYXR0ZXJuLCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJzsgLy8gXCJTY3JpcHQgZXJyb3IuXCIgaXMgaGFyZCBjb2RlZCBpbnRvIGJyb3dzZXJzIGZvciBlcnJvcnMgdGhhdCBpdCBjYW4ndCByZWFkLlxuLy8gdGhpcyBpcyB0aGUgcmVzdWx0IG9mIGEgc2NyaXB0IGJlaW5nIHB1bGxlZCBpbiBmcm9tIGFuIGV4dGVybmFsIGRvbWFpbiBhbmQgQ09SUy5cblxudmFyIERFRkFVTFRfSUdOT1JFX0VSUk9SUyA9IFsvXlNjcmlwdCBlcnJvclxcLj8kLywgL15KYXZhc2NyaXB0IGVycm9yOiBTY3JpcHQgZXJyb3JcXC4/IG9uIGxpbmUgMCQvXTtcbi8qKiBJbmJvdW5kIGZpbHRlcnMgY29uZmlndXJhYmxlIGJ5IHRoZSB1c2VyICovXG5cbnZhciBJbmJvdW5kRmlsdGVycyA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEluYm91bmRGaWx0ZXJzKF9vcHRpb25zKSB7XG4gICAgaWYgKF9vcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIF9vcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9ucyA9IF9vcHRpb25zO1xuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG5cbiAgICB0aGlzLm5hbWUgPSBJbmJvdW5kRmlsdGVycy5pZDtcbiAgfVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBJbmJvdW5kRmlsdGVycy5wcm90b3R5cGUuc2V0dXBPbmNlID0gZnVuY3Rpb24gKCkge1xuICAgIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIGh1YiA9IGdldEN1cnJlbnRIdWIoKTtcblxuICAgICAgaWYgKCFodWIpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsZiA9IGh1Yi5nZXRJbnRlZ3JhdGlvbihJbmJvdW5kRmlsdGVycyk7XG5cbiAgICAgIGlmIChzZWxmKSB7XG4gICAgICAgIHZhciBjbGllbnQgPSBodWIuZ2V0Q2xpZW50KCk7XG4gICAgICAgIHZhciBjbGllbnRPcHRpb25zID0gY2xpZW50ID8gY2xpZW50LmdldE9wdGlvbnMoKSA6IHt9OyAvLyBUaGlzIGNoZWNrcyBwcmV2ZW50cyBtb3N0IG9mIHRoZSBvY2N1cnJlbmNlcyBvZiB0aGUgYnVnIGxpbmtlZCBiZWxvdzpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMjYyMlxuICAgICAgICAvLyBUaGUgYnVnIGlzIGNhdXNlZCBieSBtdWx0aXBsZSBTREsgaW5zdGFuY2VzLCB3aGVyZSBvbmUgaXMgbWluaWZpZWQgYW5kIG9uZSBpcyB1c2luZyBub24tbWFuZ2xlZCBjb2RlLlxuICAgICAgICAvLyBVbmZvcnR1bmF0ZWxseSB3ZSBjYW5ub3QgZml4IGl0IHJlbGlhYmx5ICh0aHVzIHJlc2VydmVkIHByb3BlcnR5IGluIHJvbGx1cCdzIHRlcnNlciBjb25maWcpLFxuICAgICAgICAvLyBhcyB3ZSBjYW5ub3QgZm9yY2UgcGVvcGxlIHVzaW5nIG11bHRpcGxlIGluc3RhbmNlcyBpbiB0aGVpciBhcHBzIHRvIHN5bmMgU0RLIHZlcnNpb25zLlxuXG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNlbGYuX21lcmdlT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IHNlbGYuX21lcmdlT3B0aW9ucyhjbGllbnRPcHRpb25zKSA6IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZi5fc2hvdWxkRHJvcEV2ZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3VsZERyb3BFdmVudChldmVudCwgb3B0aW9ucykgPyBudWxsIDogZXZlbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9KTtcbiAgfTtcbiAgLyoqIEpTRG9jICovXG5cblxuICBJbmJvdW5kRmlsdGVycy5wcm90b3R5cGUuX3Nob3VsZERyb3BFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgb3B0aW9ucykge1xuICAgIGlmICh0aGlzLl9pc1NlbnRyeUVycm9yKGV2ZW50LCBvcHRpb25zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJFdmVudCBkcm9wcGVkIGR1ZSB0byBiZWluZyBpbnRlcm5hbCBTZW50cnkgRXJyb3IuXFxuRXZlbnQ6IFwiICsgZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzSWdub3JlZEVycm9yKGV2ZW50LCBvcHRpb25zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJFdmVudCBkcm9wcGVkIGR1ZSB0byBiZWluZyBtYXRjaGVkIGJ5IGBpZ25vcmVFcnJvcnNgIG9wdGlvbi5cXG5FdmVudDogXCIgKyBnZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNEZW5pZWRVcmwoZXZlbnQsIG9wdGlvbnMpKSB7XG4gICAgICBsb2dnZXIud2FybihcIkV2ZW50IGRyb3BwZWQgZHVlIHRvIGJlaW5nIG1hdGNoZWQgYnkgYGRlbnlVcmxzYCBvcHRpb24uXFxuRXZlbnQ6IFwiICsgZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudCkgKyBcIi5cXG5Vcmw6IFwiICsgdGhpcy5fZ2V0RXZlbnRGaWx0ZXJVcmwoZXZlbnQpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faXNBbGxvd2VkVXJsKGV2ZW50LCBvcHRpb25zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJFdmVudCBkcm9wcGVkIGR1ZSB0byBub3QgYmVpbmcgbWF0Y2hlZCBieSBgYWxsb3dVcmxzYCBvcHRpb24uXFxuRXZlbnQ6IFwiICsgZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudCkgKyBcIi5cXG5Vcmw6IFwiICsgdGhpcy5fZ2V0RXZlbnRGaWx0ZXJVcmwoZXZlbnQpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgLyoqIEpTRG9jICovXG5cblxuICBJbmJvdW5kRmlsdGVycy5wcm90b3R5cGUuX2lzU2VudHJ5RXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMuaWdub3JlSW50ZXJuYWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGV2ZW50ICYmIGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS50eXBlID09PSAnU2VudHJ5RXJyb3InIHx8IGZhbHNlO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgLyoqIEpTRG9jICovXG5cblxuICBJbmJvdW5kRmlsdGVycy5wcm90b3R5cGUuX2lzSWdub3JlZEVycm9yID0gZnVuY3Rpb24gKGV2ZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLmlnbm9yZUVycm9ycyB8fCAhb3B0aW9ucy5pZ25vcmVFcnJvcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2dldFBvc3NpYmxlRXZlbnRNZXNzYWdlcyhldmVudCkuc29tZShmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgLy8gTm90IHN1cmUgd2h5IFR5cGVTY3JpcHQgY29tcGxhaW5zIGhlcmUuLi5cbiAgICAgIHJldHVybiBvcHRpb25zLmlnbm9yZUVycm9ycy5zb21lKGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiBpc01hdGNoaW5nUGF0dGVybihtZXNzYWdlLCBwYXR0ZXJuKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICAvKiogSlNEb2MgKi9cblxuXG4gIEluYm91bmRGaWx0ZXJzLnByb3RvdHlwZS5faXNEZW5pZWRVcmwgPSBmdW5jdGlvbiAoZXZlbnQsIG9wdGlvbnMpIHtcbiAgICAvLyBUT0RPOiBVc2UgR2xvYiBpbnN0ZWFkP1xuICAgIGlmICghb3B0aW9ucy5kZW55VXJscyB8fCAhb3B0aW9ucy5kZW55VXJscy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgdXJsID0gdGhpcy5fZ2V0RXZlbnRGaWx0ZXJVcmwoZXZlbnQpO1xuXG4gICAgcmV0dXJuICF1cmwgPyBmYWxzZSA6IG9wdGlvbnMuZGVueVVybHMuc29tZShmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgcmV0dXJuIGlzTWF0Y2hpbmdQYXR0ZXJuKHVybCwgcGF0dGVybik7XG4gICAgfSk7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgSW5ib3VuZEZpbHRlcnMucHJvdG90eXBlLl9pc0FsbG93ZWRVcmwgPSBmdW5jdGlvbiAoZXZlbnQsIG9wdGlvbnMpIHtcbiAgICAvLyBUT0RPOiBVc2UgR2xvYiBpbnN0ZWFkP1xuICAgIGlmICghb3B0aW9ucy5hbGxvd1VybHMgfHwgIW9wdGlvbnMuYWxsb3dVcmxzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHVybCA9IHRoaXMuX2dldEV2ZW50RmlsdGVyVXJsKGV2ZW50KTtcblxuICAgIHJldHVybiAhdXJsID8gdHJ1ZSA6IG9wdGlvbnMuYWxsb3dVcmxzLnNvbWUoZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgICAgIHJldHVybiBpc01hdGNoaW5nUGF0dGVybih1cmwsIHBhdHRlcm4pO1xuICAgIH0pO1xuICB9O1xuICAvKiogSlNEb2MgKi9cblxuXG4gIEluYm91bmRGaWx0ZXJzLnByb3RvdHlwZS5fbWVyZ2VPcHRpb25zID0gZnVuY3Rpb24gKGNsaWVudE9wdGlvbnMpIHtcbiAgICBpZiAoY2xpZW50T3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBjbGllbnRPcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFsbG93VXJsczogX19zcHJlYWQodGhpcy5fb3B0aW9ucy53aGl0ZWxpc3RVcmxzIHx8IFtdLCB0aGlzLl9vcHRpb25zLmFsbG93VXJscyB8fCBbXSwgY2xpZW50T3B0aW9ucy53aGl0ZWxpc3RVcmxzIHx8IFtdLCBjbGllbnRPcHRpb25zLmFsbG93VXJscyB8fCBbXSksXG4gICAgICBkZW55VXJsczogX19zcHJlYWQodGhpcy5fb3B0aW9ucy5ibGFja2xpc3RVcmxzIHx8IFtdLCB0aGlzLl9vcHRpb25zLmRlbnlVcmxzIHx8IFtdLCBjbGllbnRPcHRpb25zLmJsYWNrbGlzdFVybHMgfHwgW10sIGNsaWVudE9wdGlvbnMuZGVueVVybHMgfHwgW10pLFxuICAgICAgaWdub3JlRXJyb3JzOiBfX3NwcmVhZCh0aGlzLl9vcHRpb25zLmlnbm9yZUVycm9ycyB8fCBbXSwgY2xpZW50T3B0aW9ucy5pZ25vcmVFcnJvcnMgfHwgW10sIERFRkFVTFRfSUdOT1JFX0VSUk9SUyksXG4gICAgICBpZ25vcmVJbnRlcm5hbDogdHlwZW9mIHRoaXMuX29wdGlvbnMuaWdub3JlSW50ZXJuYWwgIT09ICd1bmRlZmluZWQnID8gdGhpcy5fb3B0aW9ucy5pZ25vcmVJbnRlcm5hbCA6IHRydWVcbiAgICB9O1xuICB9O1xuICAvKiogSlNEb2MgKi9cblxuXG4gIEluYm91bmRGaWx0ZXJzLnByb3RvdHlwZS5fZ2V0UG9zc2libGVFdmVudE1lc3NhZ2VzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50Lm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBbZXZlbnQubWVzc2FnZV07XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmV4Y2VwdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIF9hID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdIHx8IHt9LFxuICAgICAgICAgICAgX2IgPSBfYS50eXBlLFxuICAgICAgICAgICAgdHlwZSA9IF9iID09PSB2b2lkIDAgPyAnJyA6IF9iLFxuICAgICAgICAgICAgX2MgPSBfYS52YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlID0gX2MgPT09IHZvaWQgMCA/ICcnIDogX2M7XG5cbiAgICAgICAgcmV0dXJuIFtcIlwiICsgdmFsdWUsIHR5cGUgKyBcIjogXCIgKyB2YWx1ZV07XG4gICAgICB9IGNhdGNoIChvTykge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJDYW5ub3QgZXh0cmFjdCBtZXNzYWdlIGZvciBldmVudCBcIiArIGdldEV2ZW50RGVzY3JpcHRpb24oZXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfTtcbiAgLyoqIEpTRG9jICovXG5cblxuICBJbmJvdW5kRmlsdGVycy5wcm90b3R5cGUuX2dldExhc3RWYWxpZFVybCA9IGZ1bmN0aW9uIChmcmFtZXMpIHtcbiAgICBpZiAoZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICAgIGZyYW1lcyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBfYSwgX2I7XG5cbiAgICBmb3IgKHZhciBpID0gZnJhbWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZnJhbWUgPSBmcmFtZXNbaV07XG5cbiAgICAgIGlmICgoKF9hID0gZnJhbWUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maWxlbmFtZSkgIT09ICc8YW5vbnltb3VzPicgJiYgKChfYiA9IGZyYW1lKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZmlsZW5hbWUpICE9PSAnW25hdGl2ZSBjb2RlXScpIHtcbiAgICAgICAgcmV0dXJuIGZyYW1lLmZpbGVuYW1lIHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgSW5ib3VuZEZpbHRlcnMucHJvdG90eXBlLl9nZXRFdmVudEZpbHRlclVybCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZXZlbnQuc3RhY2t0cmFjZSkge1xuICAgICAgICB2YXIgZnJhbWVzXzEgPSBldmVudC5zdGFja3RyYWNlLmZyYW1lcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldExhc3RWYWxpZFVybChmcmFtZXNfMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5leGNlcHRpb24pIHtcbiAgICAgICAgdmFyIGZyYW1lc18yID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2UgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlLmZyYW1lcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldExhc3RWYWxpZFVybChmcmFtZXNfMik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gY2F0Y2ggKG9PKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJDYW5ub3QgZXh0cmFjdCB1cmwgZm9yIGV2ZW50IFwiICsgZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudCkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBJbmJvdW5kRmlsdGVycy5pZCA9ICdJbmJvdW5kRmlsdGVycyc7XG4gIHJldHVybiBJbmJvdW5kRmlsdGVycztcbn0oKTtcblxuZXhwb3J0IHsgSW5ib3VuZEZpbHRlcnMgfTsiLCJ2YXIgb3JpZ2luYWxGdW5jdGlvblRvU3RyaW5nO1xuLyoqIFBhdGNoIHRvU3RyaW5nIGNhbGxzIHRvIHJldHVybiBwcm9wZXIgbmFtZSBmb3Igd3JhcHBlZCBmdW5jdGlvbnMgKi9cblxudmFyIEZ1bmN0aW9uVG9TdHJpbmcgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGdW5jdGlvblRvU3RyaW5nKCkge1xuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgdGhpcy5uYW1lID0gRnVuY3Rpb25Ub1N0cmluZy5pZDtcbiAgfVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBGdW5jdGlvblRvU3RyaW5nLnByb3RvdHlwZS5zZXR1cE9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgIG9yaWdpbmFsRnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZzsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9fc2VudHJ5X29yaWdpbmFsX18gfHwgdGhpcztcbiAgICAgIHJldHVybiBvcmlnaW5hbEZ1bmN0aW9uVG9TdHJpbmcuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ub1N0cmluZy5pZCA9ICdGdW5jdGlvblRvU3RyaW5nJztcbiAgcmV0dXJuIEZ1bmN0aW9uVG9TdHJpbmc7XG59KCk7XG5cbmV4cG9ydCB7IEZ1bmN0aW9uVG9TdHJpbmcgfTsiLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgZmlsbCwgZ2V0RnVuY3Rpb25OYW1lLCBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IHdyYXAgfSBmcm9tICcuLi9oZWxwZXJzJztcbnZhciBERUZBVUxUX0VWRU5UX1RBUkdFVCA9IFsnRXZlbnRUYXJnZXQnLCAnV2luZG93JywgJ05vZGUnLCAnQXBwbGljYXRpb25DYWNoZScsICdBdWRpb1RyYWNrTGlzdCcsICdDaGFubmVsTWVyZ2VyTm9kZScsICdDcnlwdG9PcGVyYXRpb24nLCAnRXZlbnRTb3VyY2UnLCAnRmlsZVJlYWRlcicsICdIVE1MVW5rbm93bkVsZW1lbnQnLCAnSURCRGF0YWJhc2UnLCAnSURCUmVxdWVzdCcsICdJREJUcmFuc2FjdGlvbicsICdLZXlPcGVyYXRpb24nLCAnTWVkaWFDb250cm9sbGVyJywgJ01lc3NhZ2VQb3J0JywgJ01vZGFsV2luZG93JywgJ05vdGlmaWNhdGlvbicsICdTVkdFbGVtZW50SW5zdGFuY2UnLCAnU2NyZWVuJywgJ1RleHRUcmFjaycsICdUZXh0VHJhY2tDdWUnLCAnVGV4dFRyYWNrTGlzdCcsICdXZWJTb2NrZXQnLCAnV2ViU29ja2V0V29ya2VyJywgJ1dvcmtlcicsICdYTUxIdHRwUmVxdWVzdCcsICdYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0JywgJ1hNTEh0dHBSZXF1ZXN0VXBsb2FkJ107XG4vKiogV3JhcCB0aW1lciBmdW5jdGlvbnMgYW5kIGV2ZW50IHRhcmdldHMgdG8gY2F0Y2ggZXJyb3JzIGFuZCBwcm92aWRlIGJldHRlciBtZXRhIGRhdGEgKi9cblxudmFyIFRyeUNhdGNoID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBmdW5jdGlvbiBUcnlDYXRjaChvcHRpb25zKSB7XG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBUcnlDYXRjaC5pZDtcbiAgICB0aGlzLl9vcHRpb25zID0gX19hc3NpZ24oe1xuICAgICAgWE1MSHR0cFJlcXVlc3Q6IHRydWUsXG4gICAgICBldmVudFRhcmdldDogdHJ1ZSxcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZTogdHJ1ZSxcbiAgICAgIHNldEludGVydmFsOiB0cnVlLFxuICAgICAgc2V0VGltZW91dDogdHJ1ZVxuICAgIH0sIG9wdGlvbnMpO1xuICB9XG4gIC8qKlxuICAgKiBXcmFwIHRpbWVyIGZ1bmN0aW9ucyBhbmQgZXZlbnQgdGFyZ2V0cyB0byBjYXRjaCBlcnJvcnNcbiAgICogYW5kIHByb3ZpZGUgYmV0dGVyIG1ldGFkYXRhLlxuICAgKi9cblxuXG4gIFRyeUNhdGNoLnByb3RvdHlwZS5zZXR1cE9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpO1xuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuc2V0VGltZW91dCkge1xuICAgICAgZmlsbChnbG9iYWwsICdzZXRUaW1lb3V0JywgdGhpcy5fd3JhcFRpbWVGdW5jdGlvbi5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy5zZXRJbnRlcnZhbCkge1xuICAgICAgZmlsbChnbG9iYWwsICdzZXRJbnRlcnZhbCcsIHRoaXMuX3dyYXBUaW1lRnVuY3Rpb24uYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBmaWxsKGdsb2JhbCwgJ3JlcXVlc3RBbmltYXRpb25GcmFtZScsIHRoaXMuX3dyYXBSQUYuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuWE1MSHR0cFJlcXVlc3QgJiYgJ1hNTEh0dHBSZXF1ZXN0JyBpbiBnbG9iYWwpIHtcbiAgICAgIGZpbGwoWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLCAnc2VuZCcsIHRoaXMuX3dyYXBYSFIuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuZXZlbnRUYXJnZXQpIHtcbiAgICAgIHZhciBldmVudFRhcmdldCA9IEFycmF5LmlzQXJyYXkodGhpcy5fb3B0aW9ucy5ldmVudFRhcmdldCkgPyB0aGlzLl9vcHRpb25zLmV2ZW50VGFyZ2V0IDogREVGQVVMVF9FVkVOVF9UQVJHRVQ7XG4gICAgICBldmVudFRhcmdldC5mb3JFYWNoKHRoaXMuX3dyYXBFdmVudFRhcmdldC5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgVHJ5Q2F0Y2gucHJvdG90eXBlLl93cmFwVGltZUZ1bmN0aW9uID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3JpZ2luYWxDYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgICBhcmdzWzBdID0gd3JhcChvcmlnaW5hbENhbGxiYWNrLCB7XG4gICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBnZXRGdW5jdGlvbk5hbWUob3JpZ2luYWwpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoYW5kbGVkOiB0cnVlLFxuICAgICAgICAgIHR5cGU6ICdpbnN0cnVtZW50J1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuICAvKiogSlNEb2MgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuXG4gIFRyeUNhdGNoLnByb3RvdHlwZS5fd3JhcFJBRiA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgcmV0dXJuIG9yaWdpbmFsLmNhbGwodGhpcywgd3JhcChjYWxsYmFjaywge1xuICAgICAgICBtZWNoYW5pc206IHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmdW5jdGlvbjogJ3JlcXVlc3RBbmltYXRpb25GcmFtZScsXG4gICAgICAgICAgICBoYW5kbGVyOiBnZXRGdW5jdGlvbk5hbWUob3JpZ2luYWwpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoYW5kbGVkOiB0cnVlLFxuICAgICAgICAgIHR5cGU6ICdpbnN0cnVtZW50J1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcbiAgfTtcbiAgLyoqIEpTRG9jICovXG5cblxuICBUcnlDYXRjaC5wcm90b3R5cGUuX3dyYXBFdmVudFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHZhciBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3QoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuXG4gICAgdmFyIHByb3RvID0gZ2xvYmFsW3RhcmdldF0gJiYgZ2xvYmFsW3RhcmdldF0ucHJvdG90eXBlOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG5cbiAgICBpZiAoIXByb3RvIHx8ICFwcm90by5oYXNPd25Qcm9wZXJ0eSB8fCAhcHJvdG8uaGFzT3duUHJvcGVydHkoJ2FkZEV2ZW50TGlzdGVuZXInKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZpbGwocHJvdG8sICdhZGRFdmVudExpc3RlbmVyJywgZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50TmFtZSwgZm4sIG9wdGlvbnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGZuLmhhbmRsZUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmbi5oYW5kbGVFdmVudCA9IHdyYXAoZm4uaGFuZGxlRXZlbnQuYmluZChmbiksIHtcbiAgICAgICAgICAgICAgbWVjaGFuaXNtOiB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgZnVuY3Rpb246ICdoYW5kbGVFdmVudCcsXG4gICAgICAgICAgICAgICAgICBoYW5kbGVyOiBnZXRGdW5jdGlvbk5hbWUoZm4pLFxuICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhhbmRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2luc3RydW1lbnQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7Ly8gY2FuIHNvbWV0aW1lcyBnZXQgJ1Blcm1pc3Npb24gZGVuaWVkIHRvIGFjY2VzcyBwcm9wZXJ0eSBcImhhbmRsZSBFdmVudCdcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnaW5hbC5jYWxsKHRoaXMsIGV2ZW50TmFtZSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgd3JhcChmbiwge1xuICAgICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBmdW5jdGlvbjogJ2FkZEV2ZW50TGlzdGVuZXInLFxuICAgICAgICAgICAgICBoYW5kbGVyOiBnZXRGdW5jdGlvbk5hbWUoZm4pLFxuICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZWQ6IHRydWUsXG4gICAgICAgICAgICB0eXBlOiAnaW5zdHJ1bWVudCdcbiAgICAgICAgICB9XG4gICAgICAgIH0pLCBvcHRpb25zKTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZmlsbChwcm90bywgJ3JlbW92ZUV2ZW50TGlzdGVuZXInLCBmdW5jdGlvbiAob3JpZ2luYWxSZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50TmFtZSwgZm4sIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlcmUgYXJlIDIgcG9zc2libGUgc2NlbmFyaW9zIGhlcmU6XG4gICAgICAgICAqXG4gICAgICAgICAqIDEuIFNvbWVvbmUgcGFzc2VzIGEgY2FsbGJhY2ssIHdoaWNoIHdhcyBhdHRhY2hlZCBwcmlvciB0byBTZW50cnkgaW5pdGlhbGl6YXRpb24sIG9yIGJ5IHVzaW5nIHVubW9kaWZpZWRcbiAgICAgICAgICogbWV0aG9kLCBlZy4gYGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIuY2FsbChlbCwgbmFtZSwgaGFuZGxlcikuIEluIHRoaXMgY2FzZSwgd2UgdHJlYXQgdGhpcyBmdW5jdGlvblxuICAgICAgICAgKiBhcyBhIHBhc3MtdGhyb3VnaCwgYW5kIGNhbGwgb3JpZ2luYWwgYHJlbW92ZUV2ZW50TGlzdGVuZXJgIHdpdGggaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIDIuIFNvbWVvbmUgcGFzc2VzIGEgY2FsbGJhY2ssIHdoaWNoIHdhcyBhdHRhY2hlZCBhZnRlciBTZW50cnkgd2FzIGluaXRpYWxpemVkLCB3aGljaCBtZWFucyB0aGF0IGl0IHdhcyB1c2luZ1xuICAgICAgICAgKiBvdXIgd3JhcHBlZCB2ZXJzaW9uIG9mIGBhZGRFdmVudExpc3RlbmVyYCwgd2hpY2ggaW50ZXJuYWxseSBjYWxscyBgd3JhcGAgaGVscGVyLlxuICAgICAgICAgKiBUaGlzIGhlbHBlciBcIndyYXBzXCIgd2hvbGUgY2FsbGJhY2sgaW5zaWRlIGEgdHJ5L2NhdGNoIHN0YXRlbWVudCwgYW5kIGF0dGFjaGVkIGFwcHJvcHJpYXRlIG1ldGFkYXRhIHRvIGl0LFxuICAgICAgICAgKiBpbiBvcmRlciBmb3IgdXMgdG8gbWFrZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gd3JhcHBlZC9ub24td3JhcHBlZCBmdW5jdGlvbnMgcG9zc2libGUuXG4gICAgICAgICAqIElmIGEgZnVuY3Rpb24gd2FzIHdyYXBwZWQsIGl0IGhhcyBhZGRpdGlvbmFsIHByb3BlcnR5IG9mIGBfX3NlbnRyeV93cmFwcGVkX19gLCBob2xkaW5nIHRoZSBoYW5kbGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVuIHNvbWVvbmUgYWRkcyBhIGhhbmRsZXIgcHJpb3IgdG8gaW5pdGlhbGl6YXRpb24sIGFuZCB0aGVuIGRvIGl0IGFnYWluLCBidXQgYWZ0ZXIsXG4gICAgICAgICAqIHRoZW4gd2UgaGF2ZSB0byBkZXRhY2ggYm90aCBvZiB0aGVtLiBPdGhlcndpc2UsIGlmIHdlJ2QgZGV0YWNoIG9ubHkgd3JhcHBlZCBvbmUsIGl0J2QgYmUgaW1wb3NzaWJsZVxuICAgICAgICAgKiB0byBnZXQgcmlkIG9mIHRoZSBpbml0aWFsIGhhbmRsZXIgYW5kIGl0J2Qgc3RpY2sgdGhlcmUgZm9yZXZlci5cbiAgICAgICAgICovXG5cblxuICAgICAgICB2YXIgd3JhcHBlZEV2ZW50SGFuZGxlciA9IGZuO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIG9yaWdpbmFsRXZlbnRIYW5kbGVyID0gKF9hID0gd3JhcHBlZEV2ZW50SGFuZGxlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLl9fc2VudHJ5X3dyYXBwZWRfXztcblxuICAgICAgICAgIGlmIChvcmlnaW5hbEV2ZW50SGFuZGxlcikge1xuICAgICAgICAgICAgb3JpZ2luYWxSZW1vdmVFdmVudExpc3RlbmVyLmNhbGwodGhpcywgZXZlbnROYW1lLCBvcmlnaW5hbEV2ZW50SGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7Ly8gaWdub3JlLCBhY2Nlc3NpbmcgX19zZW50cnlfd3JhcHBlZF9fIHdpbGwgdGhyb3cgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbW92ZUV2ZW50TGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudE5hbWUsIHdyYXBwZWRFdmVudEhhbmRsZXIsIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcbiAgLyoqIEpTRG9jICovXG5cblxuICBUcnlDYXRjaC5wcm90b3R5cGUuX3dyYXBYSFIgPSBmdW5jdGlvbiAob3JpZ2luYWxTZW5kKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblxuXG4gICAgICB2YXIgeGhyID0gdGhpcztcbiAgICAgIHZhciB4bWxIdHRwUmVxdWVzdFByb3BzID0gWydvbmxvYWQnLCAnb25lcnJvcicsICdvbnByb2dyZXNzJywgJ29ucmVhZHlzdGF0ZWNoYW5nZSddO1xuICAgICAgeG1sSHR0cFJlcXVlc3RQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIGlmIChwcm9wIGluIHhociAmJiB0eXBlb2YgeGhyW3Byb3BdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICBmaWxsKHhociwgcHJvcCwgZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgICAgICB2YXIgd3JhcE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uOiBwcm9wLFxuICAgICAgICAgICAgICAgICAgaGFuZGxlcjogZ2V0RnVuY3Rpb25OYW1lKG9yaWdpbmFsKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGFuZGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5zdHJ1bWVudCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTsgLy8gSWYgSW5zdHJ1bWVudCBpbnRlZ3JhdGlvbiBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlIFRyeUNhdGNoLCBnZXQgdGhlIG5hbWUgb2Ygb3JpZ2luYWwgZnVuY3Rpb25cblxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsLl9fc2VudHJ5X29yaWdpbmFsX18pIHtcbiAgICAgICAgICAgICAgd3JhcE9wdGlvbnMubWVjaGFuaXNtLmRhdGEuaGFuZGxlciA9IGdldEZ1bmN0aW9uTmFtZShvcmlnaW5hbC5fX3NlbnRyeV9vcmlnaW5hbF9fKTtcbiAgICAgICAgICAgIH0gLy8gT3RoZXJ3aXNlIHdyYXAgZGlyZWN0bHlcblxuXG4gICAgICAgICAgICByZXR1cm4gd3JhcChvcmlnaW5hbCwgd3JhcE9wdGlvbnMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvcmlnaW5hbFNlbmQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgVHJ5Q2F0Y2guaWQgPSAnVHJ5Q2F0Y2gnO1xuICByZXR1cm4gVHJ5Q2F0Y2g7XG59KCk7XG5cbmV4cG9ydCB7IFRyeUNhdGNoIH07IiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuXG5pbXBvcnQgeyBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IFNldmVyaXR5IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBhZGRFeGNlcHRpb25NZWNoYW5pc20sIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIsIGdldExvY2F0aW9uSHJlZiwgaXNFcnJvckV2ZW50LCBpc1ByaW1pdGl2ZSwgaXNTdHJpbmcsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0IHsgZXZlbnRGcm9tVW5rbm93bklucHV0IH0gZnJvbSAnLi4vZXZlbnRidWlsZGVyJztcbmltcG9ydCB7IHNob3VsZElnbm9yZU9uRXJyb3IgfSBmcm9tICcuLi9oZWxwZXJzJztcbi8qKiBHbG9iYWwgaGFuZGxlcnMgKi9cblxudmFyIEdsb2JhbEhhbmRsZXJzID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqIEpTRG9jICovXG4gIGZ1bmN0aW9uIEdsb2JhbEhhbmRsZXJzKG9wdGlvbnMpIHtcbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IEdsb2JhbEhhbmRsZXJzLmlkO1xuICAgIC8qKiBKU0RvYyAqL1xuXG4gICAgdGhpcy5fb25FcnJvckhhbmRsZXJJbnN0YWxsZWQgPSBmYWxzZTtcbiAgICAvKiogSlNEb2MgKi9cblxuICAgIHRoaXMuX29uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlckluc3RhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX29wdGlvbnMgPSBfX2Fzc2lnbih7XG4gICAgICBvbmVycm9yOiB0cnVlLFxuICAgICAgb251bmhhbmRsZWRyZWplY3Rpb246IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBHbG9iYWxIYW5kbGVycy5wcm90b3R5cGUuc2V0dXBPbmNlID0gZnVuY3Rpb24gKCkge1xuICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IDUwO1xuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMub25lcnJvcikge1xuICAgICAgbG9nZ2VyLmxvZygnR2xvYmFsIEhhbmRsZXIgYXR0YWNoZWQ6IG9uZXJyb3InKTtcblxuICAgICAgdGhpcy5faW5zdGFsbEdsb2JhbE9uRXJyb3JIYW5kbGVyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMub251bmhhbmRsZWRyZWplY3Rpb24pIHtcbiAgICAgIGxvZ2dlci5sb2coJ0dsb2JhbCBIYW5kbGVyIGF0dGFjaGVkOiBvbnVuaGFuZGxlZHJlamVjdGlvbicpO1xuXG4gICAgICB0aGlzLl9pbnN0YWxsR2xvYmFsT25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyKCk7XG4gICAgfVxuICB9O1xuICAvKiogSlNEb2MgKi9cblxuXG4gIEdsb2JhbEhhbmRsZXJzLnByb3RvdHlwZS5faW5zdGFsbEdsb2JhbE9uRXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5fb25FcnJvckhhbmRsZXJJbnN0YWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyKHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soZGF0YSkge1xuICAgICAgICB2YXIgZXJyb3IgPSBkYXRhLmVycm9yO1xuICAgICAgICB2YXIgY3VycmVudEh1YiA9IGdldEN1cnJlbnRIdWIoKTtcbiAgICAgICAgdmFyIGhhc0ludGVncmF0aW9uID0gY3VycmVudEh1Yi5nZXRJbnRlZ3JhdGlvbihHbG9iYWxIYW5kbGVycyk7XG4gICAgICAgIHZhciBpc0ZhaWxlZE93bkRlbGl2ZXJ5ID0gZXJyb3IgJiYgZXJyb3IuX19zZW50cnlfb3duX3JlcXVlc3RfXyA9PT0gdHJ1ZTtcblxuICAgICAgICBpZiAoIWhhc0ludGVncmF0aW9uIHx8IHNob3VsZElnbm9yZU9uRXJyb3IoKSB8fCBpc0ZhaWxlZE93bkRlbGl2ZXJ5KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNsaWVudCA9IGN1cnJlbnRIdWIuZ2V0Q2xpZW50KCk7XG4gICAgICAgIHZhciBldmVudCA9IGVycm9yID09PSB1bmRlZmluZWQgJiYgaXNTdHJpbmcoZGF0YS5tc2cpID8gX3RoaXMuX2V2ZW50RnJvbUluY29tcGxldGVPbkVycm9yKGRhdGEubXNnLCBkYXRhLnVybCwgZGF0YS5saW5lLCBkYXRhLmNvbHVtbikgOiBfdGhpcy5fZW5oYW5jZUV2ZW50V2l0aEluaXRpYWxGcmFtZShldmVudEZyb21Vbmtub3duSW5wdXQoZXJyb3IgfHwgZGF0YS5tc2csIHVuZGVmaW5lZCwge1xuICAgICAgICAgIGF0dGFjaFN0YWNrdHJhY2U6IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpLmF0dGFjaFN0YWNrdHJhY2UsXG4gICAgICAgICAgcmVqZWN0aW9uOiBmYWxzZVxuICAgICAgICB9KSwgZGF0YS51cmwsIGRhdGEubGluZSwgZGF0YS5jb2x1bW4pO1xuICAgICAgICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIHtcbiAgICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiAnb25lcnJvcidcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRIdWIuY2FwdHVyZUV2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IGVycm9yXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHR5cGU6ICdlcnJvcidcbiAgICB9KTtcbiAgICB0aGlzLl9vbkVycm9ySGFuZGxlckluc3RhbGxlZCA9IHRydWU7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgR2xvYmFsSGFuZGxlcnMucHJvdG90eXBlLl9pbnN0YWxsR2xvYmFsT25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5fb25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVySW5zdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKGUpIHtcbiAgICAgICAgdmFyIGVycm9yID0gZTsgLy8gZGlnIHRoZSBvYmplY3Qgb2YgdGhlIHJlamVjdGlvbiBvdXQgb2Yga25vd24gZXZlbnQgdHlwZXNcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFByb21pc2VSZWplY3Rpb25FdmVudHMgc3RvcmUgdGhlIG9iamVjdCBvZiB0aGUgcmVqZWN0aW9uIHVuZGVyICdyZWFzb24nXG4gICAgICAgICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qcm9taXNlUmVqZWN0aW9uRXZlbnRcbiAgICAgICAgICBpZiAoJ3JlYXNvbicgaW4gZSkge1xuICAgICAgICAgICAgZXJyb3IgPSBlLnJlYXNvbjtcbiAgICAgICAgICB9IC8vIHNvbWV0aGluZywgc29tZXdoZXJlLCAobGlrZWx5IGEgYnJvd3NlciBleHRlbnNpb24pIGVmZmVjdGl2ZWx5IGNhc3RzIFByb21pc2VSZWplY3Rpb25FdmVudHNcbiAgICAgICAgICAvLyB0byBDdXN0b21FdmVudHMsIG1vdmluZyB0aGUgYHByb21pc2VgIGFuZCBgcmVhc29uYCBhdHRyaWJ1dGVzIG9mIHRoZSBQUkUgaW50b1xuICAgICAgICAgIC8vIHRoZSBDdXN0b21FdmVudCdzIGBkZXRhaWxgIGF0dHJpYnV0ZSwgc2luY2UgdGhleSdyZSBub3QgcGFydCBvZiBDdXN0b21FdmVudCdzIHNwZWNcbiAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50IGFuZFxuICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzIzODBcbiAgICAgICAgICBlbHNlIGlmICgnZGV0YWlsJyBpbiBlICYmICdyZWFzb24nIGluIGUuZGV0YWlsKSB7XG4gICAgICAgICAgICAgIGVycm9yID0gZS5kZXRhaWwucmVhc29uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChfb08pIHsvLyBuby1lbXB0eVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnRIdWIgPSBnZXRDdXJyZW50SHViKCk7XG4gICAgICAgIHZhciBoYXNJbnRlZ3JhdGlvbiA9IGN1cnJlbnRIdWIuZ2V0SW50ZWdyYXRpb24oR2xvYmFsSGFuZGxlcnMpO1xuICAgICAgICB2YXIgaXNGYWlsZWRPd25EZWxpdmVyeSA9IGVycm9yICYmIGVycm9yLl9fc2VudHJ5X293bl9yZXF1ZXN0X18gPT09IHRydWU7XG5cbiAgICAgICAgaWYgKCFoYXNJbnRlZ3JhdGlvbiB8fCBzaG91bGRJZ25vcmVPbkVycm9yKCkgfHwgaXNGYWlsZWRPd25EZWxpdmVyeSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNsaWVudCA9IGN1cnJlbnRIdWIuZ2V0Q2xpZW50KCk7XG4gICAgICAgIHZhciBldmVudCA9IGlzUHJpbWl0aXZlKGVycm9yKSA/IF90aGlzLl9ldmVudEZyb21SZWplY3Rpb25XaXRoUHJpbWl0aXZlKGVycm9yKSA6IGV2ZW50RnJvbVVua25vd25JbnB1dChlcnJvciwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgYXR0YWNoU3RhY2t0cmFjZTogY2xpZW50ICYmIGNsaWVudC5nZXRPcHRpb25zKCkuYXR0YWNoU3RhY2t0cmFjZSxcbiAgICAgICAgICByZWplY3Rpb246IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50LmxldmVsID0gU2V2ZXJpdHkuRXJyb3I7XG4gICAgICAgIGFkZEV4Y2VwdGlvbk1lY2hhbmlzbShldmVudCwge1xuICAgICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICAgIHR5cGU6ICdvbnVuaGFuZGxlZHJlamVjdGlvbidcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRIdWIuY2FwdHVyZUV2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IGVycm9yXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9LFxuICAgICAgdHlwZTogJ3VuaGFuZGxlZHJlamVjdGlvbidcbiAgICB9KTtcbiAgICB0aGlzLl9vblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXJJbnN0YWxsZWQgPSB0cnVlO1xuICB9O1xuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc3RhY2sgZnJvbSBhbiBvbGQsIGVycm9yLWxlc3Mgb25lcnJvciBoYW5kbGVyLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuXG4gIEdsb2JhbEhhbmRsZXJzLnByb3RvdHlwZS5fZXZlbnRGcm9tSW5jb21wbGV0ZU9uRXJyb3IgPSBmdW5jdGlvbiAobXNnLCB1cmwsIGxpbmUsIGNvbHVtbikge1xuICAgIHZhciBFUlJPUl9UWVBFU19SRSA9IC9eKD86W1V1XW5jYXVnaHQgKD86ZXhjZXB0aW9uOiApPyk/KD86KCg/OkV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSXwpRXJyb3IpOiApPyguKikkL2k7IC8vIElmICdtZXNzYWdlJyBpcyBFcnJvckV2ZW50LCBnZXQgcmVhbCBtZXNzYWdlIGZyb20gaW5zaWRlXG5cbiAgICB2YXIgbWVzc2FnZSA9IGlzRXJyb3JFdmVudChtc2cpID8gbXNnLm1lc3NhZ2UgOiBtc2c7XG4gICAgdmFyIG5hbWU7XG4gICAgdmFyIGdyb3VwcyA9IG1lc3NhZ2UubWF0Y2goRVJST1JfVFlQRVNfUkUpO1xuXG4gICAgaWYgKGdyb3Vwcykge1xuICAgICAgbmFtZSA9IGdyb3Vwc1sxXTtcbiAgICAgIG1lc3NhZ2UgPSBncm91cHNbMl07XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50ID0ge1xuICAgICAgZXhjZXB0aW9uOiB7XG4gICAgICAgIHZhbHVlczogW3tcbiAgICAgICAgICB0eXBlOiBuYW1lIHx8ICdFcnJvcicsXG4gICAgICAgICAgdmFsdWU6IG1lc3NhZ2VcbiAgICAgICAgfV1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLl9lbmhhbmNlRXZlbnRXaXRoSW5pdGlhbEZyYW1lKGV2ZW50LCB1cmwsIGxpbmUsIGNvbHVtbik7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXZlbnQgZnJvbSBhIHByb21pc2UgcmVqZWN0aW9uIHdoZXJlIHRoZSBgcmVhc29uYCBpcyBhIHByaW1pdGl2ZS5cbiAgICpcbiAgICogQHBhcmFtIHJlYXNvbjogVGhlIGByZWFzb25gIHByb3BlcnR5IG9mIHRoZSBwcm9taXNlIHJlamVjdGlvblxuICAgKiBAcmV0dXJucyBBbiBFdmVudCBvYmplY3Qgd2l0aCBhbiBhcHByb3ByaWF0ZSBgZXhjZXB0aW9uYCB2YWx1ZVxuICAgKi9cblxuXG4gIEdsb2JhbEhhbmRsZXJzLnByb3RvdHlwZS5fZXZlbnRGcm9tUmVqZWN0aW9uV2l0aFByaW1pdGl2ZSA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXhjZXB0aW9uOiB7XG4gICAgICAgIHZhbHVlczogW3tcbiAgICAgICAgICB0eXBlOiAnVW5oYW5kbGVkUmVqZWN0aW9uJyxcbiAgICAgICAgICAvLyBTdHJpbmcoKSBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgUHJpbWl0aXZlIHR5cGUgaW5jbHVkZXMgc3ltYm9scyAod2hpY2ggY2FuJ3QgYmUgYXV0b21hdGljYWxseSBzdHJpbmdpZmllZClcbiAgICAgICAgICB2YWx1ZTogXCJOb24tRXJyb3IgcHJvbWlzZSByZWplY3Rpb24gY2FwdHVyZWQgd2l0aCB2YWx1ZTogXCIgKyBTdHJpbmcocmVhc29uKVxuICAgICAgICB9XVxuICAgICAgfVxuICAgIH07XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXG5cbiAgR2xvYmFsSGFuZGxlcnMucHJvdG90eXBlLl9lbmhhbmNlRXZlbnRXaXRoSW5pdGlhbEZyYW1lID0gZnVuY3Rpb24gKGV2ZW50LCB1cmwsIGxpbmUsIGNvbHVtbikge1xuICAgIGV2ZW50LmV4Y2VwdGlvbiA9IGV2ZW50LmV4Y2VwdGlvbiB8fCB7fTtcbiAgICBldmVudC5leGNlcHRpb24udmFsdWVzID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyB8fCBbXTtcbiAgICBldmVudC5leGNlcHRpb24udmFsdWVzWzBdID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXSB8fCB7fTtcbiAgICBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2UgPSBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2UgfHwge307XG4gICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlLmZyYW1lcyA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0uc3RhY2t0cmFjZS5mcmFtZXMgfHwgW107XG4gICAgdmFyIGNvbG5vID0gaXNOYU4ocGFyc2VJbnQoY29sdW1uLCAxMCkpID8gdW5kZWZpbmVkIDogY29sdW1uO1xuICAgIHZhciBsaW5lbm8gPSBpc05hTihwYXJzZUludChsaW5lLCAxMCkpID8gdW5kZWZpbmVkIDogbGluZTtcbiAgICB2YXIgZmlsZW5hbWUgPSBpc1N0cmluZyh1cmwpICYmIHVybC5sZW5ndGggPiAwID8gdXJsIDogZ2V0TG9jYXRpb25IcmVmKCk7XG5cbiAgICBpZiAoZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlLmZyYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0uc3RhY2t0cmFjZS5mcmFtZXMucHVzaCh7XG4gICAgICAgIGNvbG5vOiBjb2xubyxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgICBmdW5jdGlvbjogJz8nLFxuICAgICAgICBpbl9hcHA6IHRydWUsXG4gICAgICAgIGxpbmVubzogbGluZW5vXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnQ7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEdsb2JhbEhhbmRsZXJzLmlkID0gJ0dsb2JhbEhhbmRsZXJzJztcbiAgcmV0dXJuIEdsb2JhbEhhbmRsZXJzO1xufSgpO1xuXG5leHBvcnQgeyBHbG9iYWxIYW5kbGVycyB9OyIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGlzSW5zdGFuY2VPZiB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0IHsgZXhjZXB0aW9uRnJvbVN0YWNrdHJhY2UgfSBmcm9tICcuLi9wYXJzZXJzJztcbmltcG9ydCB7IGNvbXB1dGVTdGFja1RyYWNlIH0gZnJvbSAnLi4vdHJhY2VraXQnO1xudmFyIERFRkFVTFRfS0VZID0gJ2NhdXNlJztcbnZhciBERUZBVUxUX0xJTUlUID0gNTtcbi8qKiBBZGRzIFNESyBpbmZvIHRvIGFuIGV2ZW50LiAqL1xuXG52YXIgTGlua2VkRXJyb3JzID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBmdW5jdGlvbiBMaW5rZWRFcnJvcnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cblxuXG4gICAgdGhpcy5uYW1lID0gTGlua2VkRXJyb3JzLmlkO1xuICAgIHRoaXMuX2tleSA9IG9wdGlvbnMua2V5IHx8IERFRkFVTFRfS0VZO1xuICAgIHRoaXMuX2xpbWl0ID0gb3B0aW9ucy5saW1pdCB8fCBERUZBVUxUX0xJTUlUO1xuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIExpbmtlZEVycm9ycy5wcm90b3R5cGUuc2V0dXBPbmNlID0gZnVuY3Rpb24gKCkge1xuICAgIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKGZ1bmN0aW9uIChldmVudCwgaGludCkge1xuICAgICAgdmFyIHNlbGYgPSBnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oTGlua2VkRXJyb3JzKTtcblxuICAgICAgaWYgKHNlbGYpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBzZWxmLl9oYW5kbGVyICYmIHNlbGYuX2hhbmRsZXIuYmluZChzZWxmKTtcblxuICAgICAgICByZXR1cm4gdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicgPyBoYW5kbGVyKGV2ZW50LCBoaW50KSA6IGV2ZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIExpbmtlZEVycm9ycy5wcm90b3R5cGUuX2hhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQsIGhpbnQpIHtcbiAgICBpZiAoIWV2ZW50LmV4Y2VwdGlvbiB8fCAhZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyB8fCAhaGludCB8fCAhaXNJbnN0YW5jZU9mKGhpbnQub3JpZ2luYWxFeGNlcHRpb24sIEVycm9yKSkge1xuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH1cblxuICAgIHZhciBsaW5rZWRFcnJvcnMgPSB0aGlzLl93YWxrRXJyb3JUcmVlKGhpbnQub3JpZ2luYWxFeGNlcHRpb24sIHRoaXMuX2tleSk7XG5cbiAgICBldmVudC5leGNlcHRpb24udmFsdWVzID0gX19zcHJlYWQobGlua2VkRXJyb3JzLCBldmVudC5leGNlcHRpb24udmFsdWVzKTtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIExpbmtlZEVycm9ycy5wcm90b3R5cGUuX3dhbGtFcnJvclRyZWUgPSBmdW5jdGlvbiAoZXJyb3IsIGtleSwgc3RhY2spIHtcbiAgICBpZiAoc3RhY2sgPT09IHZvaWQgMCkge1xuICAgICAgc3RhY2sgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAoIWlzSW5zdGFuY2VPZihlcnJvcltrZXldLCBFcnJvcikgfHwgc3RhY2subGVuZ3RoICsgMSA+PSB0aGlzLl9saW1pdCkge1xuICAgICAgcmV0dXJuIHN0YWNrO1xuICAgIH1cblxuICAgIHZhciBzdGFja3RyYWNlID0gY29tcHV0ZVN0YWNrVHJhY2UoZXJyb3Jba2V5XSk7XG4gICAgdmFyIGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbkZyb21TdGFja3RyYWNlKHN0YWNrdHJhY2UpO1xuICAgIHJldHVybiB0aGlzLl93YWxrRXJyb3JUcmVlKGVycm9yW2tleV0sIGtleSwgX19zcHJlYWQoW2V4Y2VwdGlvbl0sIHN0YWNrKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIExpbmtlZEVycm9ycy5pZCA9ICdMaW5rZWRFcnJvcnMnO1xuICByZXR1cm4gTGlua2VkRXJyb3JzO1xufSgpO1xuXG5leHBvcnQgeyBMaW5rZWRFcnJvcnMgfTsiLCJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbi8qKiBEZWR1cGxpY2F0aW9uIGZpbHRlciAqL1xuXG52YXIgRGVkdXBlID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRGVkdXBlKCkge1xuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgdGhpcy5uYW1lID0gRGVkdXBlLmlkO1xuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIERlZHVwZS5wcm90b3R5cGUuc2V0dXBPbmNlID0gZnVuY3Rpb24gKGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBnZXRDdXJyZW50SHViKSB7XG4gICAgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IoZnVuY3Rpb24gKGN1cnJlbnRFdmVudCkge1xuICAgICAgdmFyIHNlbGYgPSBnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oRGVkdXBlKTtcblxuICAgICAgaWYgKHNlbGYpIHtcbiAgICAgICAgLy8gSnV1dXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmdcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc2VsZi5fc2hvdWxkRHJvcEV2ZW50KGN1cnJlbnRFdmVudCwgc2VsZi5fcHJldmlvdXNFdmVudCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKFwiRXZlbnQgZHJvcHBlZCBkdWUgdG8gYmVpbmcgYSBkdXBsaWNhdGUgb2YgcHJldmlvdXNseSBjYXB0dXJlZCBldmVudC5cIik7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgICAgIHJldHVybiBzZWxmLl9wcmV2aW91c0V2ZW50ID0gY3VycmVudEV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGYuX3ByZXZpb3VzRXZlbnQgPSBjdXJyZW50RXZlbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50RXZlbnQ7XG4gICAgfSk7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgRGVkdXBlLnByb3RvdHlwZS5fc2hvdWxkRHJvcEV2ZW50ID0gZnVuY3Rpb24gKGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkge1xuICAgIGlmICghcHJldmlvdXNFdmVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1NhbWVNZXNzYWdlRXZlbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2FtZUV4Y2VwdGlvbkV2ZW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgLyoqIEpTRG9jICovXG5cblxuICBEZWR1cGUucHJvdG90eXBlLl9pc1NhbWVNZXNzYWdlRXZlbnQgPSBmdW5jdGlvbiAoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSB7XG4gICAgdmFyIGN1cnJlbnRNZXNzYWdlID0gY3VycmVudEV2ZW50Lm1lc3NhZ2U7XG4gICAgdmFyIHByZXZpb3VzTWVzc2FnZSA9IHByZXZpb3VzRXZlbnQubWVzc2FnZTsgLy8gSWYgbmVpdGhlciBldmVudCBoYXMgYSBtZXNzYWdlIHByb3BlcnR5LCB0aGV5IHdlcmUgYm90aCBleGNlcHRpb25zLCBzbyBiYWlsIG91dFxuXG4gICAgaWYgKCFjdXJyZW50TWVzc2FnZSAmJiAhcHJldmlvdXNNZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBJZiBvbmx5IG9uZSBldmVudCBoYXMgYSBzdGFja3RyYWNlLCBidXQgbm90IHRoZSBvdGhlciBvbmUsIHRoZXkgYXJlIG5vdCB0aGUgc2FtZVxuXG5cbiAgICBpZiAoY3VycmVudE1lc3NhZ2UgJiYgIXByZXZpb3VzTWVzc2FnZSB8fCAhY3VycmVudE1lc3NhZ2UgJiYgcHJldmlvdXNNZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRNZXNzYWdlICE9PSBwcmV2aW91c01lc3NhZ2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2lzU2FtZUZpbmdlcnByaW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2lzU2FtZVN0YWNrdHJhY2UoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKiogSlNEb2MgKi9cblxuXG4gIERlZHVwZS5wcm90b3R5cGUuX2dldEZyYW1lc0Zyb21FdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBleGNlcHRpb24gPSBldmVudC5leGNlcHRpb247XG5cbiAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBAdHMtaWdub3JlIE9iamVjdCBjb3VsZCBiZSB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbi52YWx1ZXNbMF0uc3RhY2t0cmFjZS5mcmFtZXM7XG4gICAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YWNrdHJhY2UpIHtcbiAgICAgIHJldHVybiBldmVudC5zdGFja3RyYWNlLmZyYW1lcztcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuICAvKiogSlNEb2MgKi9cblxuXG4gIERlZHVwZS5wcm90b3R5cGUuX2lzU2FtZVN0YWNrdHJhY2UgPSBmdW5jdGlvbiAoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSB7XG4gICAgdmFyIGN1cnJlbnRGcmFtZXMgPSB0aGlzLl9nZXRGcmFtZXNGcm9tRXZlbnQoY3VycmVudEV2ZW50KTtcblxuICAgIHZhciBwcmV2aW91c0ZyYW1lcyA9IHRoaXMuX2dldEZyYW1lc0Zyb21FdmVudChwcmV2aW91c0V2ZW50KTsgLy8gSWYgbmVpdGhlciBldmVudCBoYXMgYSBzdGFja3RyYWNlLCB0aGV5IGFyZSBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lXG5cblxuICAgIGlmICghY3VycmVudEZyYW1lcyAmJiAhcHJldmlvdXNGcmFtZXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gSWYgb25seSBvbmUgZXZlbnQgaGFzIGEgc3RhY2t0cmFjZSwgYnV0IG5vdCB0aGUgb3RoZXIgb25lLCB0aGV5IGFyZSBub3QgdGhlIHNhbWVcblxuXG4gICAgaWYgKGN1cnJlbnRGcmFtZXMgJiYgIXByZXZpb3VzRnJhbWVzIHx8ICFjdXJyZW50RnJhbWVzICYmIHByZXZpb3VzRnJhbWVzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY3VycmVudEZyYW1lcyA9IGN1cnJlbnRGcmFtZXM7XG4gICAgcHJldmlvdXNGcmFtZXMgPSBwcmV2aW91c0ZyYW1lczsgLy8gSWYgbnVtYmVyIG9mIGZyYW1lcyBkaWZmZXIsIHRoZXkgYXJlIG5vdCB0aGUgc2FtZVxuXG4gICAgaWYgKHByZXZpb3VzRnJhbWVzLmxlbmd0aCAhPT0gY3VycmVudEZyYW1lcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIE90aGVyd2lzZSwgY29tcGFyZSB0aGUgdHdvXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldmlvdXNGcmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBmcmFtZUEgPSBwcmV2aW91c0ZyYW1lc1tpXTtcbiAgICAgIHZhciBmcmFtZUIgPSBjdXJyZW50RnJhbWVzW2ldO1xuXG4gICAgICBpZiAoZnJhbWVBLmZpbGVuYW1lICE9PSBmcmFtZUIuZmlsZW5hbWUgfHwgZnJhbWVBLmxpbmVubyAhPT0gZnJhbWVCLmxpbmVubyB8fCBmcmFtZUEuY29sbm8gIT09IGZyYW1lQi5jb2xubyB8fCBmcmFtZUEuZnVuY3Rpb24gIT09IGZyYW1lQi5mdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgRGVkdXBlLnByb3RvdHlwZS5fZ2V0RXhjZXB0aW9uRnJvbUV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF07XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgRGVkdXBlLnByb3RvdHlwZS5faXNTYW1lRXhjZXB0aW9uRXZlbnQgPSBmdW5jdGlvbiAoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSB7XG4gICAgdmFyIHByZXZpb3VzRXhjZXB0aW9uID0gdGhpcy5fZ2V0RXhjZXB0aW9uRnJvbUV2ZW50KHByZXZpb3VzRXZlbnQpO1xuXG4gICAgdmFyIGN1cnJlbnRFeGNlcHRpb24gPSB0aGlzLl9nZXRFeGNlcHRpb25Gcm9tRXZlbnQoY3VycmVudEV2ZW50KTtcblxuICAgIGlmICghcHJldmlvdXNFeGNlcHRpb24gfHwgIWN1cnJlbnRFeGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNFeGNlcHRpb24udHlwZSAhPT0gY3VycmVudEV4Y2VwdGlvbi50eXBlIHx8IHByZXZpb3VzRXhjZXB0aW9uLnZhbHVlICE9PSBjdXJyZW50RXhjZXB0aW9uLnZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pc1NhbWVGaW5nZXJwcmludChjdXJyZW50RXZlbnQsIHByZXZpb3VzRXZlbnQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pc1NhbWVTdGFja3RyYWNlKGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqIEpTRG9jICovXG5cblxuICBEZWR1cGUucHJvdG90eXBlLl9pc1NhbWVGaW5nZXJwcmludCA9IGZ1bmN0aW9uIChjdXJyZW50RXZlbnQsIHByZXZpb3VzRXZlbnQpIHtcbiAgICB2YXIgY3VycmVudEZpbmdlcnByaW50ID0gY3VycmVudEV2ZW50LmZpbmdlcnByaW50O1xuICAgIHZhciBwcmV2aW91c0ZpbmdlcnByaW50ID0gcHJldmlvdXNFdmVudC5maW5nZXJwcmludDsgLy8gSWYgbmVpdGhlciBldmVudCBoYXMgYSBmaW5nZXJwcmludCwgdGhleSBhcmUgYXNzdW1lZCB0byBiZSB0aGUgc2FtZVxuXG4gICAgaWYgKCFjdXJyZW50RmluZ2VycHJpbnQgJiYgIXByZXZpb3VzRmluZ2VycHJpbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gSWYgb25seSBvbmUgZXZlbnQgaGFzIGEgZmluZ2VycHJpbnQsIGJ1dCBub3QgdGhlIG90aGVyIG9uZSwgdGhleSBhcmUgbm90IHRoZSBzYW1lXG5cblxuICAgIGlmIChjdXJyZW50RmluZ2VycHJpbnQgJiYgIXByZXZpb3VzRmluZ2VycHJpbnQgfHwgIWN1cnJlbnRGaW5nZXJwcmludCAmJiBwcmV2aW91c0ZpbmdlcnByaW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY3VycmVudEZpbmdlcnByaW50ID0gY3VycmVudEZpbmdlcnByaW50O1xuICAgIHByZXZpb3VzRmluZ2VycHJpbnQgPSBwcmV2aW91c0ZpbmdlcnByaW50OyAvLyBPdGhlcndpc2UsIGNvbXBhcmUgdGhlIHR3b1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhIShjdXJyZW50RmluZ2VycHJpbnQuam9pbignJykgPT09IHByZXZpb3VzRmluZ2VycHJpbnQuam9pbignJykpO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgRGVkdXBlLmlkID0gJ0RlZHVwZSc7XG4gIHJldHVybiBEZWR1cGU7XG59KCk7XG5cbmV4cG9ydCB7IERlZHVwZSB9OyIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBhZGRHbG9iYWxFdmVudFByb2Nlc3NvciwgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbnZhciBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3QoKTtcbi8qKiBVc2VyQWdlbnQgKi9cblxudmFyIFVzZXJBZ2VudCA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFVzZXJBZ2VudCgpIHtcbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IFVzZXJBZ2VudC5pZDtcbiAgfVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBVc2VyQWdlbnQucHJvdG90eXBlLnNldHVwT25jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcihmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfYSwgX2IsIF9jO1xuXG4gICAgICBpZiAoZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKFVzZXJBZ2VudCkpIHtcbiAgICAgICAgLy8gaWYgbm9uZSBvZiB0aGUgaW5mb3JtYXRpb24gd2Ugd2FudCBleGlzdHMsIGRvbid0IGJvdGhlclxuICAgICAgICBpZiAoIWdsb2JhbC5uYXZpZ2F0b3IgJiYgIWdsb2JhbC5sb2NhdGlvbiAmJiAhZ2xvYmFsLmRvY3VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICB9IC8vIGdyYWIgYXMgbXVjaCBpbmZvIGFzIGV4aXN0cyBhbmQgYWRkIGl0IHRvIHRoZSBldmVudFxuXG5cbiAgICAgICAgdmFyIHVybCA9ICgoX2EgPSBldmVudC5yZXF1ZXN0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudXJsKSB8fCAoKF9iID0gZ2xvYmFsLmxvY2F0aW9uKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaHJlZik7XG4gICAgICAgIHZhciByZWZlcnJlciA9IChnbG9iYWwuZG9jdW1lbnQgfHwge30pLnJlZmVycmVyO1xuICAgICAgICB2YXIgdXNlckFnZW50ID0gKGdsb2JhbC5uYXZpZ2F0b3IgfHwge30pLnVzZXJBZ2VudDtcblxuICAgICAgICB2YXIgaGVhZGVycyA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCAoX2MgPSBldmVudC5yZXF1ZXN0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaGVhZGVycyksIHJlZmVycmVyICYmIHtcbiAgICAgICAgICBSZWZlcmVyOiByZWZlcnJlclxuICAgICAgICB9KSwgdXNlckFnZW50ICYmIHtcbiAgICAgICAgICAnVXNlci1BZ2VudCc6IHVzZXJBZ2VudFxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgcmVxdWVzdCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB1cmwgJiYge1xuICAgICAgICAgIHVybDogdXJsXG4gICAgICAgIH0pLCB7XG4gICAgICAgICAgaGVhZGVyczogaGVhZGVyc1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIGV2ZW50KSwge1xuICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgVXNlckFnZW50LmlkID0gJ1VzZXJBZ2VudCc7XG4gIHJldHVybiBVc2VyQWdlbnQ7XG59KCk7XG5cbmV4cG9ydCB7IFVzZXJBZ2VudCB9OyIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50SHViLCBpbml0QW5kQmluZCwgSW50ZWdyYXRpb25zIGFzIENvcmVJbnRlZ3JhdGlvbnMgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgZ2V0R2xvYmFsT2JqZWN0LCBsb2dnZXIsIFN5bmNQcm9taXNlIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgeyBCcm93c2VyQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHsgd3JhcCBhcyBpbnRlcm5hbFdyYXAgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYnMsIERlZHVwZSwgR2xvYmFsSGFuZGxlcnMsIExpbmtlZEVycm9ycywgVHJ5Q2F0Y2gsIFVzZXJBZ2VudCB9IGZyb20gJy4vaW50ZWdyYXRpb25zJztcbmV4cG9ydCB2YXIgZGVmYXVsdEludGVncmF0aW9ucyA9IFtuZXcgQ29yZUludGVncmF0aW9ucy5JbmJvdW5kRmlsdGVycygpLCBuZXcgQ29yZUludGVncmF0aW9ucy5GdW5jdGlvblRvU3RyaW5nKCksIG5ldyBUcnlDYXRjaCgpLCBuZXcgQnJlYWRjcnVtYnMoKSwgbmV3IEdsb2JhbEhhbmRsZXJzKCksIG5ldyBMaW5rZWRFcnJvcnMoKSwgbmV3IERlZHVwZSgpLCBuZXcgVXNlckFnZW50KCldO1xuLyoqXG4gKiBUaGUgU2VudHJ5IEJyb3dzZXIgU0RLIENsaWVudC5cbiAqXG4gKiBUbyB1c2UgdGhpcyBTREssIGNhbGwgdGhlIHtAbGluayBpbml0fSBmdW5jdGlvbiBhcyBlYXJseSBhcyBwb3NzaWJsZSB3aGVuXG4gKiBsb2FkaW5nIHRoZSB3ZWIgcGFnZS4gVG8gc2V0IGNvbnRleHQgaW5mb3JtYXRpb24gb3Igc2VuZCBtYW51YWwgZXZlbnRzLCB1c2VcbiAqIHRoZSBwcm92aWRlZCBtZXRob2RzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgXG4gKlxuICogaW1wb3J0IHsgaW5pdCB9IGZyb20gJ0BzZW50cnkvYnJvd3Nlcic7XG4gKlxuICogaW5pdCh7XG4gKiAgIGRzbjogJ19fRFNOX18nLFxuICogICAvLyAuLi5cbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICpcbiAqIGltcG9ydCB7IGNvbmZpZ3VyZVNjb3BlIH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbiAqIGNvbmZpZ3VyZVNjb3BlKChzY29wZTogU2NvcGUpID0+IHtcbiAqICAgc2NvcGUuc2V0RXh0cmEoeyBiYXR0ZXJ5OiAwLjcgfSk7XG4gKiAgIHNjb3BlLnNldFRhZyh7IHVzZXJfbW9kZTogJ2FkbWluJyB9KTtcbiAqICAgc2NvcGUuc2V0VXNlcih7IGlkOiAnNDcxMScgfSk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqXG4gKiBpbXBvcnQgeyBhZGRCcmVhZGNydW1iIH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbiAqIGFkZEJyZWFkY3J1bWIoe1xuICogICBtZXNzYWdlOiAnTXkgQnJlYWRjcnVtYicsXG4gKiAgIC8vIC4uLlxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYFxuICpcbiAqIGltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L2Jyb3dzZXInO1xuICogU2VudHJ5LmNhcHR1cmVNZXNzYWdlKCdIZWxsbywgd29ybGQhJyk7XG4gKiBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihuZXcgRXJyb3IoJ0dvb2QgYnllJykpO1xuICogU2VudHJ5LmNhcHR1cmVFdmVudCh7XG4gKiAgIG1lc3NhZ2U6ICdNYW51YWwnLFxuICogICBzdGFja3RyYWNlOiBbXG4gKiAgICAgLy8gLi4uXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIEJyb3dzZXJPcHRpb25zfSBmb3IgZG9jdW1lbnRhdGlvbiBvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuZGVmYXVsdEludGVncmF0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5kZWZhdWx0SW50ZWdyYXRpb25zID0gZGVmYXVsdEludGVncmF0aW9ucztcbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlbGVhc2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciB3aW5kb3dfMSA9IGdldEdsb2JhbE9iamVjdCgpOyAvLyBUaGlzIHN1cHBvcnRzIHRoZSB2YXJpYWJsZSB0aGF0IHNlbnRyeS13ZWJwYWNrLXBsdWdpbiBpbmplY3RzXG5cbiAgICBpZiAod2luZG93XzEuU0VOVFJZX1JFTEVBU0UgJiYgd2luZG93XzEuU0VOVFJZX1JFTEVBU0UuaWQpIHtcbiAgICAgIG9wdGlvbnMucmVsZWFzZSA9IHdpbmRvd18xLlNFTlRSWV9SRUxFQVNFLmlkO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMuYXV0b1Nlc3Npb25UcmFja2luZyA9IHRydWU7XG4gIH1cblxuICBpZiAob3B0aW9ucy5zZW5kQ2xpZW50UmVwb3J0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5zZW5kQ2xpZW50UmVwb3J0cyA9IHRydWU7XG4gIH1cblxuICBpbml0QW5kQmluZChCcm93c2VyQ2xpZW50LCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucy5hdXRvU2Vzc2lvblRyYWNraW5nKSB7XG4gICAgc3RhcnRTZXNzaW9uVHJhY2tpbmcoKTtcbiAgfVxufVxuLyoqXG4gKiBQcmVzZW50IHRoZSB1c2VyIHdpdGggYSByZXBvcnQgZGlhbG9nLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIEV2ZXJ5dGhpbmcgaXMgb3B0aW9uYWwsIHdlIHRyeSB0byBmZXRjaCBhbGwgaW5mbyBuZWVkIGZyb20gdGhlIGdsb2JhbCBzY29wZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2hvd1JlcG9ydERpYWxvZyhvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgaHViID0gZ2V0Q3VycmVudEh1YigpO1xuICB2YXIgc2NvcGUgPSBodWIuZ2V0U2NvcGUoKTtcblxuICBpZiAoc2NvcGUpIHtcbiAgICBvcHRpb25zLnVzZXIgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgc2NvcGUuZ2V0VXNlcigpKSwgb3B0aW9ucy51c2VyKTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucy5ldmVudElkKSB7XG4gICAgb3B0aW9ucy5ldmVudElkID0gaHViLmxhc3RFdmVudElkKCk7XG4gIH1cblxuICB2YXIgY2xpZW50ID0gaHViLmdldENsaWVudCgpO1xuXG4gIGlmIChjbGllbnQpIHtcbiAgICBjbGllbnQuc2hvd1JlcG9ydERpYWxvZyhvcHRpb25zKTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIGlzIHRoZSBnZXR0ZXIgZm9yIGxhc3RFdmVudElkLlxuICpcbiAqIEByZXR1cm5zIFRoZSBsYXN0IGV2ZW50IGlkIG9mIGEgY2FwdHVyZWQgZXZlbnQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxhc3RFdmVudElkKCkge1xuICByZXR1cm4gZ2V0Q3VycmVudEh1YigpLmxhc3RFdmVudElkKCk7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBiZSBBUEkgY29tcGF0aWJsZSB3aXRoIHRoZSBsb2FkZXIuXG4gKiBAaGlkZGVuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcmNlTG9hZCgpIHsvLyBOb29wXG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBiZSBBUEkgY29tcGF0aWJsZSB3aXRoIHRoZSBsb2FkZXIuXG4gKiBAaGlkZGVuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG9uTG9hZChjYWxsYmFjaykge1xuICBjYWxsYmFjaygpO1xufVxuLyoqXG4gKiBDYWxsIGBmbHVzaCgpYCBvbiB0aGUgY3VycmVudCBjbGllbnQsIGlmIHRoZXJlIGlzIG9uZS4gU2VlIHtAbGluayBDbGllbnQuZmx1c2h9LlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0IE1heGltdW0gdGltZSBpbiBtcyB0aGUgY2xpZW50IHNob3VsZCB3YWl0IHRvIGZsdXNoIGl0cyBldmVudCBxdWV1ZS4gT21pdHRpbmcgdGhpcyBwYXJhbWV0ZXIgd2lsbCBjYXVzZVxuICogdGhlIGNsaWVudCB0byB3YWl0IHVudGlsIGFsbCBldmVudHMgYXJlIHNlbnQgYmVmb3JlIHJlc29sdmluZyB0aGUgcHJvbWlzZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIHF1ZXVlIHN1Y2Nlc3NmdWxseSBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBvciBgZmFsc2VgIGlmIGl0XG4gKiBkb2Vzbid0IChvciBpZiB0aGVyZSdzIG5vIGNsaWVudCBkZWZpbmVkKS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmx1c2godGltZW91dCkge1xuICB2YXIgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudCgpO1xuXG4gIGlmIChjbGllbnQpIHtcbiAgICByZXR1cm4gY2xpZW50LmZsdXNoKHRpbWVvdXQpO1xuICB9XG5cbiAgbG9nZ2VyLndhcm4oJ0Nhbm5vdCBmbHVzaCBldmVudHMuIE5vIGNsaWVudCBkZWZpbmVkLicpO1xuICByZXR1cm4gU3luY1Byb21pc2UucmVzb2x2ZShmYWxzZSk7XG59XG4vKipcbiAqIENhbGwgYGNsb3NlKClgIG9uIHRoZSBjdXJyZW50IGNsaWVudCwgaWYgdGhlcmUgaXMgb25lLiBTZWUge0BsaW5rIENsaWVudC5jbG9zZX0uXG4gKlxuICogQHBhcmFtIHRpbWVvdXQgTWF4aW11bSB0aW1lIGluIG1zIHRoZSBjbGllbnQgc2hvdWxkIHdhaXQgdG8gZmx1c2ggaXRzIGV2ZW50IHF1ZXVlIGJlZm9yZSBzaHV0dGluZyBkb3duLiBPbWl0dGluZyB0aGlzXG4gKiBwYXJhbWV0ZXIgd2lsbCBjYXVzZSB0aGUgY2xpZW50IHRvIHdhaXQgdW50aWwgYWxsIGV2ZW50cyBhcmUgc2VudCBiZWZvcmUgZGlzYWJsaW5nIGl0c2VsZi5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIHF1ZXVlIHN1Y2Nlc3NmdWxseSBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBvciBgZmFsc2VgIGlmIGl0XG4gKiBkb2Vzbid0IChvciBpZiB0aGVyZSdzIG5vIGNsaWVudCBkZWZpbmVkKS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvc2UodGltZW91dCkge1xuICB2YXIgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudCgpO1xuXG4gIGlmIChjbGllbnQpIHtcbiAgICByZXR1cm4gY2xpZW50LmNsb3NlKHRpbWVvdXQpO1xuICB9XG5cbiAgbG9nZ2VyLndhcm4oJ0Nhbm5vdCBmbHVzaCBldmVudHMgYW5kIGRpc2FibGUgU0RLLiBObyBjbGllbnQgZGVmaW5lZC4nKTtcbiAgcmV0dXJuIFN5bmNQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xufVxuLyoqXG4gKiBXcmFwIGNvZGUgd2l0aGluIGEgdHJ5L2NhdGNoIGJsb2NrIHNvIHRoZSBTREsgaXMgYWJsZSB0byBjYXB0dXJlIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0gZm4gQSBmdW5jdGlvbiB0byB3cmFwLlxuICpcbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2Ygd3JhcHBlZCBmdW5jdGlvbiBjYWxsLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcChmbikge1xuICByZXR1cm4gaW50ZXJuYWxXcmFwKGZuKSgpO1xufVxuLyoqXG4gKiBFbmFibGUgYXV0b21hdGljIFNlc3Npb24gVHJhY2tpbmcgZm9yIHRoZSBpbml0aWFsIHBhZ2UgbG9hZC5cbiAqL1xuXG5mdW5jdGlvbiBzdGFydFNlc3Npb25UcmFja2luZygpIHtcbiAgdmFyIHdpbmRvdyA9IGdldEdsb2JhbE9iamVjdCgpO1xuICB2YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsb2dnZXIud2FybignU2Vzc2lvbiB0cmFja2luZyBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudCB3aXRoIEBzZW50cnkvYnJvd3NlciBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBodWIgPSBnZXRDdXJyZW50SHViKCk7IC8vIFRoZSBvbmx5IHdheSBmb3IgdGhpcyB0byBiZSBmYWxzZSBpcyBmb3IgdGhlcmUgdG8gYmUgYSB2ZXJzaW9uIG1pc21hdGNoIGJldHdlZW4gQHNlbnRyeS9icm93c2VyICg+PSA2LjAuMCkgYW5kXG4gIC8vIEBzZW50cnkvaHViICg8IDUuMjcuMCkuIEluIHRoZSBzaW1wbGUgY2FzZSwgdGhlcmUgd29uJ3QgZXZlciBiZSBzdWNoIGEgbWlzbWF0Y2gsIGJlY2F1c2UgdGhlIHR3byBwYWNrYWdlcyBhcmVcbiAgLy8gcGlubmVkIGF0IHRoZSBzYW1lIHZlcnNpb24gaW4gcGFja2FnZS5qc29uLCBidXQgdGhlcmUgYXJlIGVkZ2UgY2FzZXMgd2hlcmUgaXQncyBwb3NzaWJsZS4gU2VlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzMyMDcgYW5kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzMyMzQgYW5kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzMyNzguXG5cbiAgaWYgKHR5cGVvZiBodWIuc3RhcnRTZXNzaW9uICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBodWIuY2FwdHVyZVNlc3Npb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gVGhlIHNlc3Npb24gZHVyYXRpb24gZm9yIGJyb3dzZXIgc2Vzc2lvbnMgZG9lcyBub3QgdHJhY2sgYSBtZWFuaW5nZnVsXG4gIC8vIGNvbmNlcHQgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIG1ldHJpYy5cbiAgLy8gQXV0b21hdGljYWxseSBjYXB0dXJlZCBzZXNzaW9ucyBhcmUgYWtpbiB0byBwYWdlIHZpZXdzLCBhbmQgdGh1cyB3ZVxuICAvLyBkaXNjYXJkIHRoZWlyIGR1cmF0aW9uLlxuXG5cbiAgaHViLnN0YXJ0U2Vzc2lvbih7XG4gICAgaWdub3JlRHVyYXRpb246IHRydWVcbiAgfSk7XG4gIGh1Yi5jYXB0dXJlU2Vzc2lvbigpOyAvLyBXZSB3YW50IHRvIGNyZWF0ZSBhIHNlc3Npb24gZm9yIGV2ZXJ5IG5hdmlnYXRpb24gYXMgd2VsbFxuXG4gIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgIGNhbGxiYWNrOiBmdW5jdGlvbiBjYWxsYmFjayhfYSkge1xuICAgICAgdmFyIGZyb20gPSBfYS5mcm9tLFxuICAgICAgICAgIHRvID0gX2EudG87IC8vIERvbid0IGNyZWF0ZSBhbiBhZGRpdGlvbmFsIHNlc3Npb24gZm9yIHRoZSBpbml0aWFsIHJvdXRlIG9yIGlmIHRoZSBsb2NhdGlvbiBkaWQgbm90IGNoYW5nZVxuXG4gICAgICBpZiAoZnJvbSA9PT0gdW5kZWZpbmVkIHx8IGZyb20gPT09IHRvKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaHViLnN0YXJ0U2Vzc2lvbih7XG4gICAgICAgIGlnbm9yZUR1cmF0aW9uOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGh1Yi5jYXB0dXJlU2Vzc2lvbigpO1xuICAgIH0sXG4gICAgdHlwZTogJ2hpc3RvcnknXG4gIH0pO1xufSIsIi8vIFRPRE86IFJlbW92ZSBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlIGFuZCByZWx5IG9ubHkgb24gQHNlbnRyeS9jb3JlIFNES19WRVJTSU9OIGFuZCBTZGtJbmZvIG1ldGFkYXRhXG5leHBvcnQgdmFyIFNES19OQU1FID0gJ3NlbnRyeS5qYXZhc2NyaXB0LmJyb3dzZXInOyIsImV4cG9ydCB7IFNldmVyaXR5LCBTdGF0dXMgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmV4cG9ydCB7IGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBhZGRCcmVhZGNydW1iLCBjYXB0dXJlRXhjZXB0aW9uLCBjYXB0dXJlRXZlbnQsIGNhcHR1cmVNZXNzYWdlLCBjb25maWd1cmVTY29wZSwgZ2V0SHViRnJvbUNhcnJpZXIsIGdldEN1cnJlbnRIdWIsIEh1YiwgbWFrZU1haW4sIFNjb3BlLCBzdGFydFRyYW5zYWN0aW9uLCBTREtfVkVSU0lPTiwgc2V0Q29udGV4dCwgc2V0RXh0cmEsIHNldEV4dHJhcywgc2V0VGFnLCBzZXRUYWdzLCBzZXRVc2VyLCB3aXRoU2NvcGUgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuZXhwb3J0IHsgQnJvd3NlckNsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmV4cG9ydCB7IGluamVjdFJlcG9ydERpYWxvZyB9IGZyb20gJy4vaGVscGVycyc7XG5leHBvcnQgeyBldmVudEZyb21FeGNlcHRpb24sIGV2ZW50RnJvbU1lc3NhZ2UgfSBmcm9tICcuL2V2ZW50YnVpbGRlcic7XG5leHBvcnQgeyBkZWZhdWx0SW50ZWdyYXRpb25zLCBmb3JjZUxvYWQsIGluaXQsIGxhc3RFdmVudElkLCBvbkxvYWQsIHNob3dSZXBvcnREaWFsb2csIGZsdXNoLCBjbG9zZSwgd3JhcCB9IGZyb20gJy4vc2RrJztcbmV4cG9ydCB7IFNES19OQU1FIH0gZnJvbSAnLi92ZXJzaW9uJzsiLCJleHBvcnQgeyBGdW5jdGlvblRvU3RyaW5nIH0gZnJvbSAnLi9mdW5jdGlvbnRvc3RyaW5nJztcbmV4cG9ydCB7IEluYm91bmRGaWx0ZXJzIH0gZnJvbSAnLi9pbmJvdW5kZmlsdGVycyc7IiwiZXhwb3J0IHsgR2xvYmFsSGFuZGxlcnMgfSBmcm9tICcuL2dsb2JhbGhhbmRsZXJzJztcbmV4cG9ydCB7IFRyeUNhdGNoIH0gZnJvbSAnLi90cnljYXRjaCc7XG5leHBvcnQgeyBCcmVhZGNydW1icyB9IGZyb20gJy4vYnJlYWRjcnVtYnMnO1xuZXhwb3J0IHsgTGlua2VkRXJyb3JzIH0gZnJvbSAnLi9saW5rZWRlcnJvcnMnO1xuZXhwb3J0IHsgVXNlckFnZW50IH0gZnJvbSAnLi91c2VyYWdlbnQnO1xuZXhwb3J0IHsgRGVkdXBlIH0gZnJvbSAnLi9kZWR1cGUnOyIsImV4cG9ydCB7IEJhc2VUcmFuc3BvcnQgfSBmcm9tICcuL2Jhc2UnO1xuZXhwb3J0IHsgRmV0Y2hUcmFuc3BvcnQgfSBmcm9tICcuL2ZldGNoJztcbmV4cG9ydCB7IFhIUlRyYW5zcG9ydCB9IGZyb20gJy4veGhyJzsiLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuZXhwb3J0ICogZnJvbSAnLi9leHBvcnRzJztcbmltcG9ydCB7IEludGVncmF0aW9ucyBhcyBDb3JlSW50ZWdyYXRpb25zIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0ICogYXMgQnJvd3NlckludGVncmF0aW9ucyBmcm9tICcuL2ludGVncmF0aW9ucyc7XG5pbXBvcnQgKiBhcyBUcmFuc3BvcnRzIGZyb20gJy4vdHJhbnNwb3J0cyc7XG52YXIgd2luZG93SW50ZWdyYXRpb25zID0ge307IC8vIFRoaXMgYmxvY2sgaXMgbmVlZGVkIHRvIGFkZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGludGVncmF0aW9ucyBwYWNrYWdlcyB3aGVuIHVzZWQgd2l0aCBhIENETlxuXG52YXIgX3dpbmRvdyA9IGdldEdsb2JhbE9iamVjdCgpO1xuXG5pZiAoX3dpbmRvdy5TZW50cnkgJiYgX3dpbmRvdy5TZW50cnkuSW50ZWdyYXRpb25zKSB7XG4gIHdpbmRvd0ludGVncmF0aW9ucyA9IF93aW5kb3cuU2VudHJ5LkludGVncmF0aW9ucztcbn1cblxudmFyIElOVEVHUkFUSU9OUyA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCB3aW5kb3dJbnRlZ3JhdGlvbnMpLCBDb3JlSW50ZWdyYXRpb25zKSwgQnJvd3NlckludGVncmF0aW9ucyk7XG5cbmV4cG9ydCB7IElOVEVHUkFUSU9OUyBhcyBJbnRlZ3JhdGlvbnMsIFRyYW5zcG9ydHMgfTsiLCJpbXBvcnQgeyBpbml0IGFzIGJyb3dzZXJJbml0LCBTREtfVkVSU0lPTiB9IGZyb20gJ0BzZW50cnkvYnJvd3Nlcic7XG4vKipcbiAqIEluaXRzIHRoZSBSZWFjdCBTREtcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChvcHRpb25zKSB7XG4gIG9wdGlvbnMuX21ldGFkYXRhID0gb3B0aW9ucy5fbWV0YWRhdGEgfHwge307XG4gIG9wdGlvbnMuX21ldGFkYXRhLnNkayA9IG9wdGlvbnMuX21ldGFkYXRhLnNkayB8fCB7XG4gICAgbmFtZTogJ3NlbnRyeS5qYXZhc2NyaXB0LnJlYWN0JyxcbiAgICBwYWNrYWdlczogW3tcbiAgICAgIG5hbWU6ICducG06QHNlbnRyeS9yZWFjdCcsXG4gICAgICB2ZXJzaW9uOiBTREtfVkVSU0lPTlxuICAgIH1dLFxuICAgIHZlcnNpb246IFNES19WRVJTSU9OXG4gIH07XG4gIGJyb3dzZXJJbml0KG9wdGlvbnMpO1xufSIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXG52YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgIF9fcHJvdG9fXzogW11cbiAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZC5fX3Byb3RvX18gPSBiO1xuICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICBmdW5jdGlvbiBfXygpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgfVxuXG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxudmFyIF9hc3NpZ24gPSBmdW5jdGlvbiBfX2Fzc2lnbigpIHtcbiAgX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIHJldHVybiBfYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG5leHBvcnQgeyBfYXNzaWduIGFzIF9fYXNzaWduIH07XG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcblxuICBmb3IgKHZhciBwIGluIHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApIHRbcF0gPSBzW3BdO1xuICB9XG5cbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKSBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKSB0W3BbaV1dID0gc1twW2ldXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLFxuICAgICAgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgfVxuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpO1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHtcbiAgICBsYWJlbDogMCxcbiAgICBzZW50OiBmdW5jdGlvbiBzZW50KCkge1xuICAgICAgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdO1xuICAgICAgcmV0dXJuIHRbMV07XG4gICAgfSxcbiAgICB0cnlzOiBbXSxcbiAgICBvcHM6IFtdXG4gIH0sXG4gICAgICBmLFxuICAgICAgeSxcbiAgICAgIHQsXG4gICAgICBnO1xuICByZXR1cm4gZyA9IHtcbiAgICBuZXh0OiB2ZXJiKDApLFxuICAgIFwidGhyb3dcIjogdmVyYigxKSxcbiAgICBcInJldHVyblwiOiB2ZXJiKDIpXG4gIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZztcblxuICBmdW5jdGlvbiB2ZXJiKG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBzdGVwKFtuLCB2XSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG5cbiAgICB3aGlsZSAoXykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG5cbiAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0ID0gb3A7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIF8ubGFiZWwrKztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBvcFsxXSxcbiAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBfLmxhYmVsKys7XG4gICAgICAgICAgICB5ID0gb3BbMV07XG4gICAgICAgICAgICBvcCA9IFswXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgb3AgPSBfLm9wcy5wb3AoKTtcblxuICAgICAgICAgICAgXy50cnlzLnBvcCgpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkge1xuICAgICAgICAgICAgICBfID0gMDtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgb3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpIHtcbiAgICAgICAgICAgICAgXy5sYWJlbCA9IG9wWzFdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7XG4gICAgICAgICAgICAgIF8ubGFiZWwgPSB0WzFdO1xuICAgICAgICAgICAgICB0ID0gb3A7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkge1xuICAgICAgICAgICAgICBfLmxhYmVsID0gdFsyXTtcblxuICAgICAgICAgICAgICBfLm9wcy5wdXNoKG9wKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuXG4gICAgICAgICAgICBfLnRyeXMucG9wKCk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9wID0gWzYsIGVdO1xuICAgICAgICB5ID0gMDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGYgPSB0ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsXG4gICAgICBkb25lOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fY3JlYXRlQmluZGluZyhvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59XG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcbiAgZm9yICh2YXIgcCBpbiBtKSB7XG4gICAgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgbSA9IHMgJiYgb1tzXSxcbiAgICAgIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IG8gJiYgb1tpKytdLFxuICAgICAgICBkb25lOiAhb1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLFxuICAgICAgcixcbiAgICAgIGFyID0gW10sXG4gICAgICBlO1xuXG4gIHRyeSB7XG4gICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGUgPSB7XG4gICAgICBlcnJvcjogZXJyb3JcbiAgICB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgfVxuXG4gIHJldHVybiBhcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG4gICAgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICB9XG5cbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKSB7XG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspIHtcbiAgICAgIHJba10gPSBhW2pdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSxcbiAgICAgIGksXG4gICAgICBxID0gW107XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuXG4gIGZ1bmN0aW9uIHZlcmIobikge1xuICAgIGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0ZXAoZ1tuXSh2KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0dGxlKHFbMF1bM10sIGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZXAocikge1xuICAgIHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkge1xuICAgIHJlc3VtZShcIm5leHRcIiwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHtcbiAgICBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgdGhyb3cgZTtcbiAgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcblxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHtcbiAgICBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gKHAgPSAhcCkgPyB7XG4gICAgICAgIHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLFxuICAgICAgICBkb25lOiBuID09PSBcInJldHVyblwiXG4gICAgICB9IDogZiA/IGYodikgOiB2O1xuICAgIH0gOiBmO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sXG4gICAgICBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpKTtcblxuICBmdW5jdGlvbiB2ZXJiKG4pIHtcbiAgICBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikge1xuICAgIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgIGRvbmU6IGRcbiAgICAgIH0pO1xuICAgIH0sIHJlamVjdCk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwge1xuICAgICAgdmFsdWU6IHJhd1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvb2tlZC5yYXcgPSByYXc7XG4gIH1cblxuICByZXR1cm4gY29va2VkO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSB7XG4gICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgfVxuICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgZGVmYXVsdDogbW9kXG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xuICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xuICB9XG5cbiAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xuICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xuICB9XG5cbiAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufSIsImltcG9ydCB7IF9fYXNzaWduLCBfX2V4dGVuZHMsIF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5pbXBvcnQgeyBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbmltcG9ydCB7IHRpbWVzdGFtcFdpdGhNcyB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgVU5LTk9XTl9DT01QT05FTlQgPSAndW5rbm93bic7XG52YXIgVFJBQ0lOR19HRVRURVIgPSB7XG4gIGlkOiAnVHJhY2luZydcbn07XG52YXIgZ2xvYmFsVHJhY2luZ0ludGVncmF0aW9uID0gbnVsbDtcbi8qKiBAZGVwcmVjYXRlZCByZW1vdmUgd2hlbiBAc2VudHJ5L2FwbSBubyBsb25nZXIgdXNlZCAqL1xuXG52YXIgZ2V0VHJhY2luZ0ludGVncmF0aW9uID0gZnVuY3Rpb24gZ2V0VHJhY2luZ0ludGVncmF0aW9uKCkge1xuICBpZiAoZ2xvYmFsVHJhY2luZ0ludGVncmF0aW9uKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRyYWNpbmdJbnRlZ3JhdGlvbjtcbiAgfVxuXG4gIGdsb2JhbFRyYWNpbmdJbnRlZ3JhdGlvbiA9IGdldEN1cnJlbnRIdWIoKS5nZXRJbnRlZ3JhdGlvbihUUkFDSU5HX0dFVFRFUik7XG4gIHJldHVybiBnbG9iYWxUcmFjaW5nSW50ZWdyYXRpb247XG59O1xuLyoqXG4gKiBwdXNoQWN0aXZpdHkgY3JlYXRlcyBhbiBuZXcgcmVhY3QgYWN0aXZpdHkuXG4gKiBJcyBhIG5vLW9wIGlmIFRyYWNpbmcgaW50ZWdyYXRpb24gaXMgbm90IHZhbGlkXG4gKiBAcGFyYW0gbmFtZSBkaXNwbGF5TmFtZSBvZiBjb21wb25lbnQgdGhhdCBzdGFydGVkIGFjdGl2aXR5XG4gKiBAZGVwcmVjYXRlZCByZW1vdmUgd2hlbiBAc2VudHJ5L2FwbSBubyBsb25nZXIgdXNlZFxuICovXG5cblxuZnVuY3Rpb24gcHVzaEFjdGl2aXR5KG5hbWUsIG9wKSB7XG4gIGlmIChnbG9iYWxUcmFjaW5nSW50ZWdyYXRpb24gPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBnbG9iYWxUcmFjaW5nSW50ZWdyYXRpb24uY29uc3RydWN0b3IucHVzaEFjdGl2aXR5KG5hbWUsIHtcbiAgICBkZXNjcmlwdGlvbjogXCI8XCIgKyBuYW1lICsgXCI+XCIsXG4gICAgb3A6IFwicmVhY3QuXCIgKyBvcFxuICB9KTtcbn1cbi8qKlxuICogcG9wQWN0aXZpdHkgcmVtb3ZlcyBhIFJlYWN0IGFjdGl2aXR5LlxuICogSXMgYSBuby1vcCBpZiBUcmFjaW5nIGludGVncmF0aW9uIGlzIG5vdCB2YWxpZC5cbiAqIEBwYXJhbSBhY3Rpdml0eSBpZCBvZiBhY3Rpdml0eSB0aGF0IGlzIGJlaW5nIHBvcHBlZFxuICogQGRlcHJlY2F0ZWQgcmVtb3ZlIHdoZW4gQHNlbnRyeS9hcG0gbm8gbG9uZ2VyIHVzZWRcbiAqL1xuXG5cbmZ1bmN0aW9uIHBvcEFjdGl2aXR5KGFjdGl2aXR5KSB7XG4gIGlmIChhY3Rpdml0eSA9PT0gbnVsbCB8fCBnbG9iYWxUcmFjaW5nSW50ZWdyYXRpb24gPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBnbG9iYWxUcmFjaW5nSW50ZWdyYXRpb24uY29uc3RydWN0b3IucG9wQWN0aXZpdHkoYWN0aXZpdHkpO1xufVxuLyoqXG4gKiBPYnRhaW4gYSBzcGFuIGdpdmVuIGFuIGFjdGl2aXR5IGlkLlxuICogSXMgYSBuby1vcCBpZiBUcmFjaW5nIGludGVncmF0aW9uIGlzIG5vdCB2YWxpZC5cbiAqIEBwYXJhbSBhY3Rpdml0eSBhY3Rpdml0eSBpZCBhc3NvY2lhdGVkIHdpdGggb2J0YWluZWQgc3BhblxuICogQGRlcHJlY2F0ZWQgcmVtb3ZlIHdoZW4gQHNlbnRyeS9hcG0gbm8gbG9uZ2VyIHVzZWRcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEFjdGl2aXR5U3BhbihhY3Rpdml0eSkge1xuICBpZiAoYWN0aXZpdHkgPT09IG51bGwgfHwgZ2xvYmFsVHJhY2luZ0ludGVncmF0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBnbG9iYWxUcmFjaW5nSW50ZWdyYXRpb24uY29uc3RydWN0b3IuZ2V0QWN0aXZpdHlTcGFuKGFjdGl2aXR5KTtcbn1cbi8qKlxuICogVGhlIFByb2ZpbGVyIGNvbXBvbmVudCBsZXZlcmFnZXMgU2VudHJ5J3MgVHJhY2luZyBpbnRlZ3JhdGlvbiB0byBnZW5lcmF0ZVxuICogc3BhbnMgYmFzZWQgb24gY29tcG9uZW50IGxpZmVjeWNsZXMuXG4gKi9cblxuXG52YXIgUHJvZmlsZXIgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoUHJvZmlsZXIsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gUHJvZmlsZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAvKipcbiAgICAgKiBUaGUgc3BhbiBvZiB0aGUgbW91bnQgYWN0aXZpdHlcbiAgICAgKiBNYWRlIHByb3RlY3RlZCBmb3IgdGhlIFJlYWN0IE5hdGl2ZSBTREsgdG8gYWNjZXNzXG4gICAgICovXG5cblxuICAgIF90aGlzLl9tb3VudFNwYW4gPSB1bmRlZmluZWQ7IC8vIFRoZSBhY3Rpdml0eSByZXByZXNlbnRpbmcgaG93IGxvbmcgaXQgdGFrZXMgdG8gbW91bnQgYSBjb21wb25lbnQuXG5cbiAgICBfdGhpcy5fbW91bnRBY3Rpdml0eSA9IG51bGw7XG4gICAgdmFyIF9hID0gX3RoaXMucHJvcHMsXG4gICAgICAgIG5hbWUgPSBfYS5uYW1lLFxuICAgICAgICBfYiA9IF9hLmRpc2FibGVkLFxuICAgICAgICBkaXNhYmxlZCA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfSAvLyBJZiB0aGV5IGFyZSB1c2luZyBAc2VudHJ5L2FwbSwgd2UgbmVlZCB0byBwdXNoL3BvcCBhY3Rpdml0aWVzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cblxuICAgIGlmIChnZXRUcmFjaW5nSW50ZWdyYXRpb24oKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBfdGhpcy5fbW91bnRBY3Rpdml0eSA9IHB1c2hBY3Rpdml0eShuYW1lLCAnbW91bnQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFjdGl2ZVRyYW5zYWN0aW9uID0gZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKTtcblxuICAgICAgaWYgKGFjdGl2ZVRyYW5zYWN0aW9uKSB7XG4gICAgICAgIF90aGlzLl9tb3VudFNwYW4gPSBhY3RpdmVUcmFuc2FjdGlvbi5zdGFydENoaWxkKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCI8XCIgKyBuYW1lICsgXCI+XCIsXG4gICAgICAgICAgb3A6ICdyZWFjdC5tb3VudCdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9IC8vIElmIGEgY29tcG9uZW50IG1vdW50ZWQsIHdlIGNhbiBmaW5pc2ggdGhlIG1vdW50IGFjdGl2aXR5LlxuXG5cbiAgUHJvZmlsZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9tb3VudFNwYW4pIHtcbiAgICAgIHRoaXMuX21vdW50U3Bhbi5maW5pc2goKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICB0aGlzLl9tb3VudFNwYW4gPSBnZXRBY3Rpdml0eVNwYW4odGhpcy5fbW91bnRBY3Rpdml0eSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4gICAgICBwb3BBY3Rpdml0eSh0aGlzLl9tb3VudEFjdGl2aXR5KTtcbiAgICAgIHRoaXMuX21vdW50QWN0aXZpdHkgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBQcm9maWxlci5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciB1cGRhdGVQcm9wcyA9IF9hLnVwZGF0ZVByb3BzLFxuICAgICAgICBfYiA9IF9hLmluY2x1ZGVVcGRhdGVzLFxuICAgICAgICBpbmNsdWRlVXBkYXRlcyA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2I7IC8vIE9ubHkgZ2VuZXJhdGUgYW4gdXBkYXRlIHNwYW4gaWYgaGFzVXBkYXRlU3BhbiBpcyB0cnVlLCBpZiB0aGVyZSBpcyBhIHZhbGlkIG1vdW50U3BhbixcbiAgICAvLyBhbmQgaWYgdGhlIHVwZGF0ZVByb3BzIGhhdmUgY2hhbmdlZC4gSXQgaXMgb2sgdG8gbm90IGRvIGEgZGVlcCBlcXVhbGl0eSBjaGVjayBoZXJlIGFzIGl0IGlzIGV4cGVuc2l2ZS5cbiAgICAvLyBXZSBhcmUganVzdCB0cnlpbmcgdG8gZ2l2ZSBiYXNlbGluZSBjbHVlcyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG4gICAgaWYgKGluY2x1ZGVVcGRhdGVzICYmIHRoaXMuX21vdW50U3BhbiAmJiB1cGRhdGVQcm9wcyAhPT0gdGhpcy5wcm9wcy51cGRhdGVQcm9wcykge1xuICAgICAgLy8gU2VlIHdoYXQgcHJvcHMgaGF2ZWQgY2hhbmdlZCBiZXR3ZWVuIHRoZSBwcmV2aW91cyBwcm9wcywgYW5kIHRoZSBjdXJyZW50IHByb3BzLiBUaGlzIGlzXG4gICAgICAvLyBzZXQgYXMgZGF0YSBvbiB0aGUgc3Bhbi4gV2UganVzdCBzdG9yZSB0aGUgcHJvcCBrZXlzIGFzIHRoZSB2YWx1ZXMgY291bGQgYmUgcG90ZW5pYWxseSB2ZXJ5IGxhcmdlLlxuICAgICAgdmFyIGNoYW5nZWRQcm9wcyA9IE9iamVjdC5rZXlzKHVwZGF0ZVByb3BzKS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVByb3BzW2tdICE9PSBfdGhpcy5wcm9wcy51cGRhdGVQcm9wc1trXTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY2hhbmdlZFByb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gVGhlIHVwZGF0ZSBzcGFuIGlzIGEgcG9pbnQgaW4gdGltZSBzcGFuIHdpdGggMCBkdXJhdGlvbiwganVzdCBzaWduaWZ5aW5nIHRoYXQgdGhlIGNvbXBvbmVudFxuICAgICAgICAvLyBoYXMgYmVlbiB1cGRhdGVkLlxuICAgICAgICB2YXIgbm93ID0gdGltZXN0YW1wV2l0aE1zKCk7XG5cbiAgICAgICAgdGhpcy5fbW91bnRTcGFuLnN0YXJ0Q2hpbGQoe1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNoYW5nZWRQcm9wczogY2hhbmdlZFByb3BzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCI8XCIgKyB0aGlzLnByb3BzLm5hbWUgKyBcIj5cIixcbiAgICAgICAgICBlbmRUaW1lc3RhbXA6IG5vdyxcbiAgICAgICAgICBvcDogXCJyZWFjdC51cGRhdGVcIixcbiAgICAgICAgICBzdGFydFRpbWVzdGFtcDogbm93XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfTsgLy8gSWYgYSBjb21wb25lbnQgaXMgdW5tb3VudGVkLCB3ZSBjYW4gc2F5IGl0IGlzIG5vIGxvbmdlciBvbiB0aGUgc2NyZWVuLlxuICAvLyBUaGlzIG1lYW5zIHdlIGNhbiBmaW5pc2ggdGhlIHNwYW4gcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgcmVuZGVyLlxuXG5cbiAgUHJvZmlsZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfYSA9IHRoaXMucHJvcHMsXG4gICAgICAgIG5hbWUgPSBfYS5uYW1lLFxuICAgICAgICBfYiA9IF9hLmluY2x1ZGVSZW5kZXIsXG4gICAgICAgIGluY2x1ZGVSZW5kZXIgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iO1xuXG4gICAgaWYgKHRoaXMuX21vdW50U3BhbiAmJiBpbmNsdWRlUmVuZGVyKSB7XG4gICAgICAvLyBJZiB3ZSB3ZXJlIGFibGUgdG8gb2J0YWluIHRoZSBzcGFuSWQgb2YgdGhlIG1vdW50IGFjdGl2aXR5LCB3ZSBzaG91bGQgc2V0IHRoZVxuICAgICAgLy8gbmV4dCBhY3Rpdml0eSBhcyBhIGNoaWxkIHRvIHRoZSBjb21wb25lbnQgbW91bnQgYWN0aXZpdHkuXG4gICAgICB0aGlzLl9tb3VudFNwYW4uc3RhcnRDaGlsZCh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIjxcIiArIG5hbWUgKyBcIj5cIixcbiAgICAgICAgZW5kVGltZXN0YW1wOiB0aW1lc3RhbXBXaXRoTXMoKSxcbiAgICAgICAgb3A6IFwicmVhY3QucmVuZGVyXCIsXG4gICAgICAgIHN0YXJ0VGltZXN0YW1wOiB0aGlzLl9tb3VudFNwYW4uZW5kVGltZXN0YW1wXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgUHJvZmlsZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcblxuXG4gIFByb2ZpbGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgaW5jbHVkZVJlbmRlcjogdHJ1ZSxcbiAgICBpbmNsdWRlVXBkYXRlczogdHJ1ZVxuICB9O1xuICByZXR1cm4gUHJvZmlsZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG4vKipcbiAqIHdpdGhQcm9maWxlciBpcyBhIGhpZ2hlciBvcmRlciBjb21wb25lbnQgdGhhdCB3cmFwcyBhXG4gKiBjb21wb25lbnQgaW4gYSB7QGxpbmsgUHJvZmlsZXJ9IGNvbXBvbmVudC4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdFxuICogdGhlIGhpZ2hlciBvcmRlciBjb21wb25lbnQgYmUgdXNlZCBvdmVyIHRoZSByZWd1bGFyIHtAbGluayBQcm9maWxlcn0gY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSBXcmFwcGVkQ29tcG9uZW50IGNvbXBvbmVudCB0aGF0IGlzIHdyYXBwZWQgYnkgUHJvZmlsZXJcbiAqIEBwYXJhbSBvcHRpb25zIHRoZSB7QGxpbmsgUHJvZmlsZXJQcm9wc30geW91IGNhbiBwYXNzIGludG8gdGhlIFByb2ZpbGVyXG4gKi9cblxuXG5mdW5jdGlvbiB3aXRoUHJvZmlsZXIoV3JhcHBlZENvbXBvbmVudCwgLy8gV2UgZG8gbm90IHdhbnQgdG8gaGF2ZSBgdXBkYXRlUHJvcHNgIGdpdmVuIGluIG9wdGlvbnMsIGl0IGlzIGluc3RlYWQgZmlsbGVkIHRocm91Z2ggdGhlIEhPQy5cbm9wdGlvbnMpIHtcbiAgdmFyIGNvbXBvbmVudERpc3BsYXlOYW1lID0gb3B0aW9ucyAmJiBvcHRpb25zLm5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgVU5LTk9XTl9DT01QT05FTlQ7XG5cbiAgdmFyIFdyYXBwZWQgPSBmdW5jdGlvbiBXcmFwcGVkKHByb3BzKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUHJvZmlsZXIsIF9fYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICBuYW1lOiBjb21wb25lbnREaXNwbGF5TmFtZSxcbiAgICAgIHVwZGF0ZVByb3BzOiBwcm9wc1xuICAgIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIF9fYXNzaWduKHt9LCBwcm9wcykpKTtcbiAgfTtcblxuICBXcmFwcGVkLmRpc3BsYXlOYW1lID0gXCJwcm9maWxlcihcIiArIGNvbXBvbmVudERpc3BsYXlOYW1lICsgXCIpXCI7IC8vIENvcHkgb3ZlciBzdGF0aWMgbWV0aG9kcyBmcm9tIFdyYXBwZWQgY29tcG9uZW50IHRvIFByb2ZpbGVyIEhPQ1xuICAvLyBTZWU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9oaWdoZXItb3JkZXItY29tcG9uZW50cy5odG1sI3N0YXRpYy1tZXRob2RzLW11c3QtYmUtY29waWVkLW92ZXJcblxuICBob2lzdE5vblJlYWN0U3RhdGljcyhXcmFwcGVkLCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgcmV0dXJuIFdyYXBwZWQ7XG59XG4vKipcbiAqXG4gKiBgdXNlUHJvZmlsZXJgIGlzIGEgUmVhY3QgaG9vayB0aGF0IHByb2ZpbGVzIGEgUmVhY3QgY29tcG9uZW50LlxuICpcbiAqIFJlcXVpcmVzIFJlYWN0IDE2Ljggb3IgYWJvdmUuXG4gKiBAcGFyYW0gbmFtZSBkaXNwbGF5TmFtZSBvZiBjb21wb25lbnQgYmVpbmcgcHJvZmlsZWRcbiAqL1xuXG5cbmZ1bmN0aW9uIHVzZVByb2ZpbGVyKG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICBoYXNSZW5kZXJTcGFuOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHZhciBfYSA9IF9fcmVhZChSZWFjdC51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YXIgYWN0aXZlVHJhbnNhY3Rpb24gPSBnZXRBY3RpdmVUcmFuc2FjdGlvbigpO1xuXG4gICAgaWYgKGFjdGl2ZVRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gYWN0aXZlVHJhbnNhY3Rpb24uc3RhcnRDaGlsZCh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIjxcIiArIG5hbWUgKyBcIj5cIixcbiAgICAgICAgb3A6ICdyZWFjdC5tb3VudCdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0pLCAxKSxcbiAgICAgIG1vdW50U3BhbiA9IF9hWzBdO1xuXG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1vdW50U3Bhbikge1xuICAgICAgbW91bnRTcGFuLmZpbmlzaCgpO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAobW91bnRTcGFuICYmIG9wdGlvbnMuaGFzUmVuZGVyU3Bhbikge1xuICAgICAgICBtb3VudFNwYW4uc3RhcnRDaGlsZCh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiPFwiICsgbmFtZSArIFwiPlwiLFxuICAgICAgICAgIGVuZFRpbWVzdGFtcDogdGltZXN0YW1wV2l0aE1zKCksXG4gICAgICAgICAgb3A6IFwicmVhY3QucmVuZGVyXCIsXG4gICAgICAgICAgc3RhcnRUaW1lc3RhbXA6IG1vdW50U3Bhbi5lbmRUaW1lc3RhbXBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTsgLy8gV2Ugb25seSB3YW50IHRoaXMgdG8gcnVuIG9uY2UuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCB7IHdpdGhQcm9maWxlciwgUHJvZmlsZXIsIHVzZVByb2ZpbGVyIH07XG4vKiogR3JhYnMgYWN0aXZlIHRyYW5zYWN0aW9uIG9mZiBzY29wZSAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlVHJhbnNhY3Rpb24oaHViKSB7XG4gIGlmIChodWIgPT09IHZvaWQgMCkge1xuICAgIGh1YiA9IGdldEN1cnJlbnRIdWIoKTtcbiAgfVxuXG4gIGlmIChodWIpIHtcbiAgICB2YXIgc2NvcGUgPSBodWIuZ2V0U2NvcGUoKTtcblxuICAgIGlmIChzY29wZSkge1xuICAgICAgcmV0dXJuIHNjb3BlLmdldFRyYW5zYWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0iLCJpbXBvcnQgeyBfX2Fzc2lnbiwgX19leHRlbmRzLCBfX3JlYWQsIF9fc3ByZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBjYXB0dXJlRXZlbnQsIGNhcHR1cmVFeGNlcHRpb24sIGV2ZW50RnJvbUV4Y2VwdGlvbiwgc2hvd1JlcG9ydERpYWxvZywgd2l0aFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbmltcG9ydCB7IGxvZ2dlciwgcGFyc2VTZW12ZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgcmVhY3RWZXJzaW9uID0gcGFyc2VTZW12ZXIoUmVhY3QudmVyc2lvbik7XG5leHBvcnQgdmFyIFVOS05PV05fQ09NUE9ORU5UID0gJ3Vua25vd24nO1xudmFyIElOSVRJQUxfU1RBVEUgPSB7XG4gIGNvbXBvbmVudFN0YWNrOiBudWxsLFxuICBlcnJvcjogbnVsbCxcbiAgZXZlbnRJZDogbnVsbFxufTtcbi8qKlxuICogTG9ncyByZWFjdCBlcnJvciBib3VuZGFyeSBlcnJvcnMgdG8gU2VudHJ5LiBJZiBvbiBSZWFjdCB2ZXJzaW9uID49IDE3LCBjcmVhdGVzIHN0YWNrIHRyYWNlXG4gKiBmcm9tIGNvbXBvbmVudFN0YWNrIHBhcmFtLCBvdGhlcndpc2UgcmVsaWVzIG9uIGVycm9yIHBhcmFtIGZvciBzdGFja3RyYWNlLlxuICpcbiAqIEBwYXJhbSBlcnJvciBBbiBlcnJvciBjYXB0dXJlZCBieSBSZWFjdCBFcnJvciBCb3VuZGFyeVxuICogQHBhcmFtIGNvbXBvbmVudFN0YWNrIFRoZSBjb21wb25lbnQgc3RhY2t0cmFjZVxuICovXG5cbmZ1bmN0aW9uIGNhcHR1cmVSZWFjdEVycm9yQm91bmRhcnlFcnJvcihlcnJvciwgY29tcG9uZW50U3RhY2spIHtcbiAgdmFyIGVycm9yQm91bmRhcnlFcnJvciA9IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgZXJyb3JCb3VuZGFyeUVycm9yLm5hbWUgPSBcIlJlYWN0IEVycm9yQm91bmRhcnkgXCIgKyBlcnJvckJvdW5kYXJ5RXJyb3IubmFtZTtcbiAgZXJyb3JCb3VuZGFyeUVycm9yLnN0YWNrID0gY29tcG9uZW50U3RhY2s7XG4gIHZhciBlcnJvckJvdW5kYXJ5RXZlbnQgPSB7fTtcbiAgdm9pZCBldmVudEZyb21FeGNlcHRpb24oe30sIGVycm9yQm91bmRhcnlFcnJvcikudGhlbihmdW5jdGlvbiAoZSkge1xuICAgIGVycm9yQm91bmRhcnlFdmVudCA9IGU7XG4gIH0pO1xuXG4gIGlmIChlcnJvckJvdW5kYXJ5RXZlbnQuZXhjZXB0aW9uICYmIEFycmF5LmlzQXJyYXkoZXJyb3JCb3VuZGFyeUV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMpICYmIHJlYWN0VmVyc2lvbi5tYWpvciAmJiByZWFjdFZlcnNpb24ubWFqb3IgPj0gMTcpIHtcbiAgICB2YXIgb3JpZ2luYWxFdmVudF8xID0ge307XG4gICAgdm9pZCBldmVudEZyb21FeGNlcHRpb24oe30sIGVycm9yKS50aGVuKGZ1bmN0aW9uIChlKSB7XG4gICAgICBvcmlnaW5hbEV2ZW50XzEgPSBlO1xuICAgIH0pO1xuXG4gICAgaWYgKG9yaWdpbmFsRXZlbnRfMS5leGNlcHRpb24gJiYgQXJyYXkuaXNBcnJheShvcmlnaW5hbEV2ZW50XzEuZXhjZXB0aW9uLnZhbHVlcykpIHtcbiAgICAgIG9yaWdpbmFsRXZlbnRfMS5leGNlcHRpb24udmFsdWVzID0gX19zcHJlYWQoZXJyb3JCb3VuZGFyeUV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMsIG9yaWdpbmFsRXZlbnRfMS5leGNlcHRpb24udmFsdWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FwdHVyZUV2ZW50KG9yaWdpbmFsRXZlbnRfMSk7XG4gIH1cblxuICByZXR1cm4gY2FwdHVyZUV4Y2VwdGlvbihlcnJvciwge1xuICAgIGNvbnRleHRzOiB7XG4gICAgICByZWFjdDoge1xuICAgICAgICBjb21wb25lbnRTdGFjazogY29tcG9uZW50U3RhY2tcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuLyoqXG4gKiBBIEVycm9yQm91bmRhcnkgY29tcG9uZW50IHRoYXQgbG9ncyBlcnJvcnMgdG8gU2VudHJ5LiBSZXF1aXJlcyBSZWFjdCA+PSAxNi5cbiAqIE5PVEU6IElmIHlvdSBhcmUgYSBTZW50cnkgdXNlciwgYW5kIHlvdSBhcmUgc2VlaW5nIHRoaXMgc3RhY2sgZnJhbWUsIGl0IG1lYW5zIHRoZVxuICogU2VudHJ5IFJlYWN0IFNESyBFcnJvckJvdW5kYXJ5IGNhdWdodCBhbiBlcnJvciBpbnZva2luZyB5b3VyIGFwcGxpY2F0aW9uIGNvZGUuIFRoaXNcbiAqIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBOT1QgaW5kaWNhdGl2ZSBvZiBhIGJ1ZyB3aXRoIHRoZSBTZW50cnkgUmVhY3QgU0RLLlxuICovXG5cblxudmFyIEVycm9yQm91bmRhcnkgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoRXJyb3JCb3VuZGFyeSwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBFcnJvckJvdW5kYXJ5KCkge1xuICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc3RhdGUgPSBJTklUSUFMX1NUQVRFO1xuXG4gICAgX3RoaXMucmVzZXRFcnJvckJvdW5kYXJ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9uUmVzZXQgPSBfdGhpcy5wcm9wcy5vblJlc2V0O1xuICAgICAgdmFyIF9hID0gX3RoaXMuc3RhdGUsXG4gICAgICAgICAgZXJyb3IgPSBfYS5lcnJvcixcbiAgICAgICAgICBjb21wb25lbnRTdGFjayA9IF9hLmNvbXBvbmVudFN0YWNrLFxuICAgICAgICAgIGV2ZW50SWQgPSBfYS5ldmVudElkO1xuXG4gICAgICBpZiAob25SZXNldCkge1xuICAgICAgICBvblJlc2V0KGVycm9yLCBjb21wb25lbnRTdGFjaywgZXZlbnRJZCk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKElOSVRJQUxfU1RBVEUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBFcnJvckJvdW5kYXJ5LnByb3RvdHlwZS5jb21wb25lbnREaWRDYXRjaCA9IGZ1bmN0aW9uIChlcnJvciwgX2EpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNvbXBvbmVudFN0YWNrID0gX2EuY29tcG9uZW50U3RhY2s7XG4gICAgdmFyIF9iID0gdGhpcy5wcm9wcyxcbiAgICAgICAgYmVmb3JlQ2FwdHVyZSA9IF9iLmJlZm9yZUNhcHR1cmUsXG4gICAgICAgIG9uRXJyb3IgPSBfYi5vbkVycm9yLFxuICAgICAgICBzaG93RGlhbG9nID0gX2Iuc2hvd0RpYWxvZyxcbiAgICAgICAgZGlhbG9nT3B0aW9ucyA9IF9iLmRpYWxvZ09wdGlvbnM7XG4gICAgd2l0aFNjb3BlKGZ1bmN0aW9uIChzY29wZSkge1xuICAgICAgaWYgKGJlZm9yZUNhcHR1cmUpIHtcbiAgICAgICAgYmVmb3JlQ2FwdHVyZShzY29wZSwgZXJyb3IsIGNvbXBvbmVudFN0YWNrKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGV2ZW50SWQgPSBjYXB0dXJlUmVhY3RFcnJvckJvdW5kYXJ5RXJyb3IoZXJyb3IsIGNvbXBvbmVudFN0YWNrKTtcblxuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvciwgY29tcG9uZW50U3RhY2ssIGV2ZW50SWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvd0RpYWxvZykge1xuICAgICAgICBzaG93UmVwb3J0RGlhbG9nKF9fYXNzaWduKF9fYXNzaWduKHt9LCBkaWFsb2dPcHRpb25zKSwge1xuICAgICAgICAgIGV2ZW50SWQ6IGV2ZW50SWRcbiAgICAgICAgfSkpO1xuICAgICAgfSAvLyBjb21wb25lbnREaWRDYXRjaCBpcyB1c2VkIG92ZXIgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yXG4gICAgICAvLyBzbyB0aGF0IGNvbXBvbmVudFN0YWNrIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzdGF0ZS5cblxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgY29tcG9uZW50U3RhY2s6IGNvbXBvbmVudFN0YWNrLFxuICAgICAgICBldmVudElkOiBldmVudElkXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBFcnJvckJvdW5kYXJ5LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb25Nb3VudCA9IHRoaXMucHJvcHMub25Nb3VudDtcblxuICAgIGlmIChvbk1vdW50KSB7XG4gICAgICBvbk1vdW50KCk7XG4gICAgfVxuICB9O1xuXG4gIEVycm9yQm91bmRhcnkucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfYSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIGVycm9yID0gX2EuZXJyb3IsXG4gICAgICAgIGNvbXBvbmVudFN0YWNrID0gX2EuY29tcG9uZW50U3RhY2ssXG4gICAgICAgIGV2ZW50SWQgPSBfYS5ldmVudElkO1xuICAgIHZhciBvblVubW91bnQgPSB0aGlzLnByb3BzLm9uVW5tb3VudDtcblxuICAgIGlmIChvblVubW91bnQpIHtcbiAgICAgIG9uVW5tb3VudChlcnJvciwgY29tcG9uZW50U3RhY2ssIGV2ZW50SWQpO1xuICAgIH1cbiAgfTtcblxuICBFcnJvckJvdW5kYXJ5LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9hID0gdGhpcy5wcm9wcyxcbiAgICAgICAgZmFsbGJhY2sgPSBfYS5mYWxsYmFjayxcbiAgICAgICAgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbjtcbiAgICB2YXIgX2IgPSB0aGlzLnN0YXRlLFxuICAgICAgICBlcnJvciA9IF9iLmVycm9yLFxuICAgICAgICBjb21wb25lbnRTdGFjayA9IF9iLmNvbXBvbmVudFN0YWNrLFxuICAgICAgICBldmVudElkID0gX2IuZXZlbnRJZDtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgdmFyIGVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0eXBlb2YgZmFsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZWxlbWVudCA9IGZhbGxiYWNrKHtcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgY29tcG9uZW50U3RhY2s6IGNvbXBvbmVudFN0YWNrLFxuICAgICAgICAgIHJlc2V0RXJyb3I6IHRoaXMucmVzZXRFcnJvckJvdW5kYXJ5LFxuICAgICAgICAgIGV2ZW50SWQ6IGV2ZW50SWRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50ID0gZmFsbGJhY2s7XG4gICAgICB9XG5cbiAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGZhbGxiYWNrKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdmYWxsYmFjayBkaWQgbm90IHByb2R1Y2UgYSB2YWxpZCBSZWFjdEVsZW1lbnQnKTtcbiAgICAgIH0gLy8gRmFpbCBncmFjZWZ1bGx5IGlmIG5vIGZhbGxiYWNrIHByb3ZpZGVkIG9yIGlzIG5vdCB2YWxpZFxuXG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfTtcblxuICByZXR1cm4gRXJyb3JCb3VuZGFyeTtcbn0oUmVhY3QuQ29tcG9uZW50KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuXG5mdW5jdGlvbiB3aXRoRXJyb3JCb3VuZGFyeShXcmFwcGVkQ29tcG9uZW50LCBlcnJvckJvdW5kYXJ5T3B0aW9ucykge1xuICB2YXIgY29tcG9uZW50RGlzcGxheU5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCBVTktOT1dOX0NPTVBPTkVOVDtcblxuICB2YXIgV3JhcHBlZCA9IGZ1bmN0aW9uIFdyYXBwZWQocHJvcHMpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChFcnJvckJvdW5kYXJ5LCBfX2Fzc2lnbih7fSwgZXJyb3JCb3VuZGFyeU9wdGlvbnMpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIF9fYXNzaWduKHt9LCBwcm9wcykpKTtcbiAgfTtcblxuICBXcmFwcGVkLmRpc3BsYXlOYW1lID0gXCJlcnJvckJvdW5kYXJ5KFwiICsgY29tcG9uZW50RGlzcGxheU5hbWUgKyBcIilcIjsgLy8gQ29weSBvdmVyIHN0YXRpYyBtZXRob2RzIGZyb20gV3JhcHBlZCBjb21wb25lbnQgdG8gUHJvZmlsZXIgSE9DXG4gIC8vIFNlZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hpZ2hlci1vcmRlci1jb21wb25lbnRzLmh0bWwjc3RhdGljLW1ldGhvZHMtbXVzdC1iZS1jb3BpZWQtb3ZlclxuXG4gIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdyYXBwZWQsIFdyYXBwZWRDb21wb25lbnQpO1xuICByZXR1cm4gV3JhcHBlZDtcbn1cblxuZXhwb3J0IHsgRXJyb3JCb3VuZGFyeSwgd2l0aEVycm9yQm91bmRhcnkgfTsiLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5pbXBvcnQgeyBjb25maWd1cmVTY29wZSB9IGZyb20gJ0BzZW50cnkvbWluaW1hbCc7XG52YXIgQUNUSU9OX0JSRUFEQ1JVTUJfQ0FURUdPUlkgPSAncmVkdXguYWN0aW9uJztcbnZhciBBQ1RJT05fQlJFQURDUlVNQl9UWVBFID0gJ2luZm8nO1xudmFyIFNUQVRFX0NPTlRFWFRfS0VZID0gJ3JlZHV4LnN0YXRlJztcbnZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgYWN0aW9uVHJhbnNmb3JtZXI6IGZ1bmN0aW9uIGFjdGlvblRyYW5zZm9ybWVyKGFjdGlvbikge1xuICAgIHJldHVybiBhY3Rpb247XG4gIH0sXG4gIHN0YXRlVHJhbnNmb3JtZXI6IGZ1bmN0aW9uIHN0YXRlVHJhbnNmb3JtZXIoc3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGUgfHwgbnVsbDtcbiAgfVxufTtcbi8qKlxuICogQ3JlYXRlcyBhbiBlbmhhbmNlciB0aGF0IHdvdWxkIGJlIHBhc3NlZCB0byBSZWR1eCdzIGNyZWF0ZVN0b3JlIHRvIGxvZyBhY3Rpb25zIGFuZCB0aGUgbGF0ZXN0IHN0YXRlIHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gZW5oYW5jZXJPcHRpb25zIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgZW5oYW5jZXJcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVSZWR1eEVuaGFuY2VyKGVuaGFuY2VyT3B0aW9ucykge1xuICAvLyBOb3RlOiBXZSByZXR1cm4gYW4gYW55IHR5cGUgYXMgdG8gbm90IGhhdmUgdHlwZSBjb25mbGljdHMuXG4gIHZhciBvcHRpb25zID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zKSwgZW5oYW5jZXJPcHRpb25zKTtcblxuICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxTdGF0ZSkge1xuICAgICAgdmFyIHNlbnRyeVJlZHVjZXIgPSBmdW5jdGlvbiBzZW50cnlSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgY29uZmlndXJlU2NvcGUoZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICAgICAgLyogQWN0aW9uIGJyZWFkY3J1bWJzICovXG4gICAgICAgICAgdmFyIHRyYW5zZm9ybWVkQWN0aW9uID0gb3B0aW9ucy5hY3Rpb25UcmFuc2Zvcm1lcihhY3Rpb24pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZEFjdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdHJhbnNmb3JtZWRBY3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNjb3BlLmFkZEJyZWFkY3J1bWIoe1xuICAgICAgICAgICAgICBjYXRlZ29yeTogQUNUSU9OX0JSRUFEQ1JVTUJfQ0FURUdPUlksXG4gICAgICAgICAgICAgIGRhdGE6IHRyYW5zZm9ybWVkQWN0aW9uLFxuICAgICAgICAgICAgICB0eXBlOiBBQ1RJT05fQlJFQURDUlVNQl9UWVBFXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogU2V0IGxhdGVzdCBzdGF0ZSB0byBzY29wZSAqL1xuXG5cbiAgICAgICAgICB2YXIgdHJhbnNmb3JtZWRTdGF0ZSA9IG9wdGlvbnMuc3RhdGVUcmFuc2Zvcm1lcihuZXdTdGF0ZSk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybWVkU3RhdGUgIT09ICd1bmRlZmluZWQnICYmIHRyYW5zZm9ybWVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHNjb3BlLnNldENvbnRleHQoU1RBVEVfQ09OVEVYVF9LRVksIHRyYW5zZm9ybWVkU3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzY29wZS5zZXRDb250ZXh0KFNUQVRFX0NPTlRFWFRfS0VZLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogQWxsb3cgdXNlciB0byBjb25maWd1cmUgc2NvcGUgd2l0aCBsYXRlc3Qgc3RhdGUgKi9cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG5cblxuICAgICAgICAgIHZhciBjb25maWd1cmVTY29wZVdpdGhTdGF0ZSA9IG9wdGlvbnMuY29uZmlndXJlU2NvcGVXaXRoU3RhdGU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ3VyZVNjb3BlV2l0aFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25maWd1cmVTY29wZVdpdGhTdGF0ZShzY29wZSwgbmV3U3RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBuZXh0KHNlbnRyeVJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlUmVkdXhFbmhhbmNlciB9OyIsImltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xudmFyIGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpO1xuLyoqXG4gKiBDcmVhdGVzIHJvdXRpbmcgaW5zdHJ1bWVudGF0aW9uIGZvciBSZWFjdCBSb3V0ZXIgdjNcbiAqIFdvcmtzIGZvciBSZWFjdCBSb3V0ZXIgPj0gMy4yLjAgYW5kIDwgNC4wLjBcbiAqXG4gKiBAcGFyYW0gaGlzdG9yeSBvYmplY3QgZnJvbSB0aGUgYGhpc3RvcnlgIGxpYnJhcnlcbiAqIEBwYXJhbSByb3V0ZXMgYSBsaXN0IG9mIGFsbCByb3V0ZXMsIHNob3VsZCBiZVxuICogQHBhcmFtIG1hdGNoIGBSb3V0ZXIubWF0Y2hgIHV0aWxpdHlcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVhY3RSb3V0ZXJWM0luc3RydW1lbnRhdGlvbihoaXN0b3J5LCByb3V0ZXMsIG1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoc3RhcnRUcmFuc2FjdGlvbiwgc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQsIHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlKSB7XG4gICAgaWYgKHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkID09PSB2b2lkIDApIHtcbiAgICAgIHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2UgPT09IHZvaWQgMCkge1xuICAgICAgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2UgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBhY3RpdmVUcmFuc2FjdGlvbjtcbiAgICB2YXIgcHJldk5hbWU7IC8vIEhhdmUgdG8gdXNlIGdsb2JhbC5sb2NhdGlvbiBiZWNhdXNlIGhpc3RvcnkubG9jYXRpb24gbWlnaHQgbm90IGJlIGRlZmluZWQuXG5cbiAgICBpZiAoc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQgJiYgZ2xvYmFsICYmIGdsb2JhbC5sb2NhdGlvbikge1xuICAgICAgbm9ybWFsaXplVHJhbnNhY3Rpb25OYW1lKHJvdXRlcywgZ2xvYmFsLmxvY2F0aW9uLCBtYXRjaCwgZnVuY3Rpb24gKGxvY2FsTmFtZSkge1xuICAgICAgICBwcmV2TmFtZSA9IGxvY2FsTmFtZTtcbiAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24gPSBzdGFydFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICBuYW1lOiBwcmV2TmFtZSxcbiAgICAgICAgICBvcDogJ3BhZ2Vsb2FkJyxcbiAgICAgICAgICB0YWdzOiB7XG4gICAgICAgICAgICAncm91dGluZy5pbnN0cnVtZW50YXRpb24nOiAncmVhY3Qtcm91dGVyLXYzJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2UgJiYgaGlzdG9yeS5saXN0ZW4pIHtcbiAgICAgIGhpc3RvcnkubGlzdGVuKGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAgICAgICBpZiAobG9jYXRpb24uYWN0aW9uID09PSAnUFVTSCcgfHwgbG9jYXRpb24uYWN0aW9uID09PSAnUE9QJykge1xuICAgICAgICAgIGlmIChhY3RpdmVUcmFuc2FjdGlvbikge1xuICAgICAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24uZmluaXNoKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHRhZ3NfMSA9IHtcbiAgICAgICAgICAgICdyb3V0aW5nLmluc3RydW1lbnRhdGlvbic6ICdyZWFjdC1yb3V0ZXItdjMnXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChwcmV2TmFtZSkge1xuICAgICAgICAgICAgdGFnc18xLmZyb20gPSBwcmV2TmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBub3JtYWxpemVUcmFuc2FjdGlvbk5hbWUocm91dGVzLCBsb2NhdGlvbiwgbWF0Y2gsIGZ1bmN0aW9uIChsb2NhbE5hbWUpIHtcbiAgICAgICAgICAgIHByZXZOYW1lID0gbG9jYWxOYW1lO1xuICAgICAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24gPSBzdGFydFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgICAgbmFtZTogcHJldk5hbWUsXG4gICAgICAgICAgICAgIG9wOiAnbmF2aWdhdGlvbicsXG4gICAgICAgICAgICAgIHRhZ3M6IHRhZ3NfMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbi8qKlxuICogTm9ybWFsaXplIHRyYW5zYWN0aW9uIG5hbWVzIHVzaW5nIGBSb3V0ZXIubWF0Y2hgXG4gKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplVHJhbnNhY3Rpb25OYW1lKGFwcFJvdXRlcywgbG9jYXRpb24sIG1hdGNoLCBjYWxsYmFjaykge1xuICB2YXIgbmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICBtYXRjaCh7XG4gICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgIHJvdXRlczogYXBwUm91dGVzXG4gIH0sIGZ1bmN0aW9uIChlcnJvciwgX3JlZGlyZWN0TG9jYXRpb24sIHJlbmRlclByb3BzKSB7XG4gICAgaWYgKGVycm9yIHx8ICFyZW5kZXJQcm9wcykge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG5hbWUpO1xuICAgIH1cblxuICAgIHZhciByb3V0ZVBhdGggPSBnZXRSb3V0ZVN0cmluZ0Zyb21Sb3V0ZXMocmVuZGVyUHJvcHMucm91dGVzIHx8IFtdKTtcblxuICAgIGlmIChyb3V0ZVBhdGgubGVuZ3RoID09PSAwIHx8IHJvdXRlUGF0aCA9PT0gJy8qJykge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG5hbWUpO1xuICAgIH1cblxuICAgIG5hbWUgPSByb3V0ZVBhdGg7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5hbWUpO1xuICB9KTtcbn1cbi8qKlxuICogR2VuZXJhdGUgcm91dGUgbmFtZSBmcm9tIGFycmF5IG9mIHJvdXRlc1xuICovXG5cblxuZnVuY3Rpb24gZ2V0Um91dGVTdHJpbmdGcm9tUm91dGVzKHJvdXRlcykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm91dGVzKSB8fCByb3V0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIHJvdXRlc1dpdGhQYXRocyA9IHJvdXRlcy5maWx0ZXIoZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgcmV0dXJuICEhcm91dGUucGF0aDtcbiAgfSk7XG4gIHZhciBpbmRleCA9IC0xO1xuXG4gIGZvciAodmFyIHggPSByb3V0ZXNXaXRoUGF0aHMubGVuZ3RoIC0gMTsgeCA+PSAwOyB4LS0pIHtcbiAgICB2YXIgcm91dGUgPSByb3V0ZXNXaXRoUGF0aHNbeF07XG5cbiAgICBpZiAocm91dGUucGF0aCAmJiByb3V0ZS5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgaW5kZXggPSB4O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvdXRlc1dpdGhQYXRocy5zbGljZShpbmRleCkuZmlsdGVyKGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBwYXRoID0gX2EucGF0aDtcbiAgICByZXR1cm4gISFwYXRoO1xuICB9KS5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHBhdGggPSBfYS5wYXRoO1xuICAgIHJldHVybiBwYXRoO1xuICB9KS5qb2luKCcnKTtcbn0iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbnZhciBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3QoKTtcbnZhciBhY3RpdmVUcmFuc2FjdGlvbjtcbmV4cG9ydCBmdW5jdGlvbiByZWFjdFJvdXRlclY0SW5zdHJ1bWVudGF0aW9uKGhpc3RvcnksIHJvdXRlcywgbWF0Y2hQYXRoKSB7XG4gIHJldHVybiBjcmVhdGVSZWFjdFJvdXRlckluc3RydW1lbnRhdGlvbihoaXN0b3J5LCAncmVhY3Qtcm91dGVyLXY0Jywgcm91dGVzLCBtYXRjaFBhdGgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlYWN0Um91dGVyVjVJbnN0cnVtZW50YXRpb24oaGlzdG9yeSwgcm91dGVzLCBtYXRjaFBhdGgpIHtcbiAgcmV0dXJuIGNyZWF0ZVJlYWN0Um91dGVySW5zdHJ1bWVudGF0aW9uKGhpc3RvcnksICdyZWFjdC1yb3V0ZXItdjUnLCByb3V0ZXMsIG1hdGNoUGF0aCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlYWN0Um91dGVySW5zdHJ1bWVudGF0aW9uKGhpc3RvcnksIG5hbWUsIGFsbFJvdXRlcywgbWF0Y2hQYXRoKSB7XG4gIGlmIChhbGxSb3V0ZXMgPT09IHZvaWQgMCkge1xuICAgIGFsbFJvdXRlcyA9IFtdO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SW5pdFBhdGhOYW1lKCkge1xuICAgIGlmIChoaXN0b3J5ICYmIGhpc3RvcnkubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBoaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIH1cblxuICAgIGlmIChnbG9iYWwgJiYgZ2xvYmFsLmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gZ2xvYmFsLmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvbk5hbWUocGF0aG5hbWUpIHtcbiAgICBpZiAoYWxsUm91dGVzLmxlbmd0aCA9PT0gMCB8fCAhbWF0Y2hQYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aG5hbWU7XG4gICAgfVxuXG4gICAgdmFyIGJyYW5jaGVzID0gbWF0Y2hSb3V0ZXMoYWxsUm91dGVzLCBwYXRobmFtZSwgbWF0Y2hQYXRoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IGJyYW5jaGVzLmxlbmd0aDsgeCsrKSB7XG4gICAgICBpZiAoYnJhbmNoZXNbeF0ubWF0Y2guaXNFeGFjdCkge1xuICAgICAgICByZXR1cm4gYnJhbmNoZXNbeF0ubWF0Y2gucGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aG5hbWU7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGN1c3RvbVN0YXJ0VHJhbnNhY3Rpb24sIHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkLCBzdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZSkge1xuICAgIGlmIChzdGFydFRyYW5zYWN0aW9uT25QYWdlTG9hZCA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGFydFRyYW5zYWN0aW9uT25QYWdlTG9hZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlID09PSB2b2lkIDApIHtcbiAgICAgIHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgaW5pdFBhdGhOYW1lID0gZ2V0SW5pdFBhdGhOYW1lKCk7XG5cbiAgICBpZiAoc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQgJiYgaW5pdFBhdGhOYW1lKSB7XG4gICAgICBhY3RpdmVUcmFuc2FjdGlvbiA9IGN1c3RvbVN0YXJ0VHJhbnNhY3Rpb24oe1xuICAgICAgICBuYW1lOiBnZXRUcmFuc2FjdGlvbk5hbWUoaW5pdFBhdGhOYW1lKSxcbiAgICAgICAgb3A6ICdwYWdlbG9hZCcsXG4gICAgICAgIHRhZ3M6IHtcbiAgICAgICAgICAncm91dGluZy5pbnN0cnVtZW50YXRpb24nOiBuYW1lXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZSAmJiBoaXN0b3J5Lmxpc3Rlbikge1xuICAgICAgaGlzdG9yeS5saXN0ZW4oZnVuY3Rpb24gKGxvY2F0aW9uLCBhY3Rpb24pIHtcbiAgICAgICAgaWYgKGFjdGlvbiAmJiAoYWN0aW9uID09PSAnUFVTSCcgfHwgYWN0aW9uID09PSAnUE9QJykpIHtcbiAgICAgICAgICBpZiAoYWN0aXZlVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgIGFjdGl2ZVRyYW5zYWN0aW9uLmZpbmlzaCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciB0YWdzID0ge1xuICAgICAgICAgICAgJ3JvdXRpbmcuaW5zdHJ1bWVudGF0aW9uJzogbmFtZVxuICAgICAgICAgIH07XG4gICAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24gPSBjdXN0b21TdGFydFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIG5hbWU6IGdldFRyYW5zYWN0aW9uTmFtZShsb2NhdGlvbi5wYXRobmFtZSksXG4gICAgICAgICAgICBvcDogJ25hdmlnYXRpb24nLFxuICAgICAgICAgICAgdGFnczogdGFnc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4vKipcbiAqIE1hdGNoZXMgYSBzZXQgb2Ygcm91dGVzIHRvIGEgcGF0aG5hbWVcbiAqIEJhc2VkIG9uIGltcGxlbWVudGF0aW9uIGZyb21cbiAqL1xuXG5cbmZ1bmN0aW9uIG1hdGNoUm91dGVzKHJvdXRlcywgcGF0aG5hbWUsIG1hdGNoUGF0aCwgYnJhbmNoKSB7XG4gIGlmIChicmFuY2ggPT09IHZvaWQgMCkge1xuICAgIGJyYW5jaCA9IFtdO1xuICB9XG5cbiAgcm91dGVzLnNvbWUoZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgdmFyIG1hdGNoID0gcm91dGUucGF0aCA/IG1hdGNoUGF0aChwYXRobmFtZSwgcm91dGUpIDogYnJhbmNoLmxlbmd0aCA/IGJyYW5jaFticmFuY2gubGVuZ3RoIC0gMV0ubWF0Y2ggLy8gdXNlIHBhcmVudCBtYXRjaFxuICAgIDogY29tcHV0ZVJvb3RNYXRjaChwYXRobmFtZSk7IC8vIHVzZSBkZWZhdWx0IFwicm9vdFwiIG1hdGNoXG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGJyYW5jaC5wdXNoKHtcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBtYXRjaDogbWF0Y2hcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocm91dGUucm91dGVzKSB7XG4gICAgICAgIG1hdGNoUm91dGVzKHJvdXRlLnJvdXRlcywgcGF0aG5hbWUsIG1hdGNoUGF0aCwgYnJhbmNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gISFtYXRjaDtcbiAgfSk7XG4gIHJldHVybiBicmFuY2g7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSb290TWF0Y2gocGF0aG5hbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBwYXRoOiAnLycsXG4gICAgdXJsOiAnLycsXG4gICAgcGFyYW1zOiB7fSxcbiAgICBpc0V4YWN0OiBwYXRobmFtZSA9PT0gJy8nXG4gIH07XG59XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTZW50cnlSb3V0aW5nKFJvdXRlKSB7XG4gIHZhciBjb21wb25lbnREaXNwbGF5TmFtZSA9IFJvdXRlLmRpc3BsYXlOYW1lIHx8IFJvdXRlLm5hbWU7XG5cbiAgdmFyIFdyYXBwZWRSb3V0ZSA9IGZ1bmN0aW9uIFdyYXBwZWRSb3V0ZShwcm9wcykge1xuICAgIGlmIChhY3RpdmVUcmFuc2FjdGlvbiAmJiBwcm9wcyAmJiBwcm9wcy5jb21wdXRlZE1hdGNoICYmIHByb3BzLmNvbXB1dGVkTWF0Y2guaXNFeGFjdCkge1xuICAgICAgYWN0aXZlVHJhbnNhY3Rpb24uc2V0TmFtZShwcm9wcy5jb21wdXRlZE1hdGNoLnBhdGgpO1xuICAgIH0gLy8gQHRzLWlnbm9yZSBTZXR0aW5nIG1vcmUgc3BlY2lmaWMgUmVhY3QgQ29tcG9uZW50IHR5cGluZyBmb3IgYFJgIGdlbmVyaWMgYWJvdmVcbiAgICAvLyB3aWxsIGJyZWFrIGFkdmFuY2VkIHR5cGUgaW5mZXJlbmNlIGRvbmUgYnkgcmVhY3Qgcm91dGVyIHBhcmFtczpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZC9ibG9iLzEzZGM0MjM1YzA2OWUyNWZlN2VlMTZlMTFmNTI5ZDkwOWY5ZjNmZjgvdHlwZXMvcmVhY3Qtcm91dGVyL2luZGV4LmQudHMjTDE1NC1MMTY0XG5cblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlLCBfX2Fzc2lnbih7fSwgcHJvcHMpKTtcbiAgfTtcblxuICBXcmFwcGVkUm91dGUuZGlzcGxheU5hbWUgPSBcInNlbnRyeVJvdXRlKFwiICsgY29tcG9uZW50RGlzcGxheU5hbWUgKyBcIilcIjtcbiAgaG9pc3ROb25SZWFjdFN0YXRpY3MoV3JhcHBlZFJvdXRlLCBSb3V0ZSk7IC8vIEB0cy1pZ25vcmUgU2V0dGluZyBtb3JlIHNwZWNpZmljIFJlYWN0IENvbXBvbmVudCB0eXBpbmcgZm9yIGBSYCBnZW5lcmljIGFib3ZlXG4gIC8vIHdpbGwgYnJlYWsgYWR2YW5jZWQgdHlwZSBpbmZlcmVuY2UgZG9uZSBieSByZWFjdCByb3V0ZXIgcGFyYW1zOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZC9ibG9iLzEzZGM0MjM1YzA2OWUyNWZlN2VlMTZlMTFmNTI5ZDkwOWY5ZjNmZjgvdHlwZXMvcmVhY3Qtcm91dGVyL2luZGV4LmQudHMjTDE1NC1MMTY0XG5cbiAgcmV0dXJuIFdyYXBwZWRSb3V0ZTtcbn1cbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLyIsImV4cG9ydCAqIGZyb20gJ0BzZW50cnkvYnJvd3Nlcic7XG5leHBvcnQgeyBpbml0IH0gZnJvbSAnLi9zZGsnO1xuZXhwb3J0IHsgUHJvZmlsZXIsIHdpdGhQcm9maWxlciwgdXNlUHJvZmlsZXIgfSBmcm9tICcuL3Byb2ZpbGVyJztcbmV4cG9ydCB7IEVycm9yQm91bmRhcnksIHdpdGhFcnJvckJvdW5kYXJ5IH0gZnJvbSAnLi9lcnJvcmJvdW5kYXJ5JztcbmV4cG9ydCB7IGNyZWF0ZVJlZHV4RW5oYW5jZXIgfSBmcm9tICcuL3JlZHV4JztcbmV4cG9ydCB7IHJlYWN0Um91dGVyVjNJbnN0cnVtZW50YXRpb24gfSBmcm9tICcuL3JlYWN0cm91dGVydjMnO1xuZXhwb3J0IHsgcmVhY3RSb3V0ZXJWNEluc3RydW1lbnRhdGlvbiwgcmVhY3RSb3V0ZXJWNUluc3RydW1lbnRhdGlvbiwgd2l0aFNlbnRyeVJvdXRpbmcgfSBmcm9tICcuL3JlYWN0cm91dGVyJzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7066\n")},6275:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "ro": function() { return /* binding */ addExtensionMethods; },\n "lb": function() { return /* binding */ startIdleTransaction; }\n});\n\n// UNUSED EXPORTS: _addTracingExtensions\n\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/node_modules/tslib/tslib.es6.js\nvar tslib_es6 = __webpack_require__(7870);\n// EXTERNAL MODULE: ./node_modules/@sentry/hub/esm/hub.js + 1 modules\nvar hub = __webpack_require__(3210);\n;// CONCATENATED MODULE: ./node_modules/@sentry/types/esm/transaction.js\nvar TransactionSamplingMethod;\n\n(function (TransactionSamplingMethod) {\n TransactionSamplingMethod["Explicit"] = "explicitly_set";\n TransactionSamplingMethod["Sampler"] = "client_sampler";\n TransactionSamplingMethod["Rate"] = "client_rate";\n TransactionSamplingMethod["Inheritance"] = "inheritance";\n})(TransactionSamplingMethod || (TransactionSamplingMethod = {}));\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/logger.js\nvar logger = __webpack_require__(245);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/node.js\nvar node = __webpack_require__(7864);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/instrument.js\nvar instrument = __webpack_require__(6710);\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/esm/spanstatus.js\nvar spanstatus = __webpack_require__(6314);\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/esm/utils.js\nvar utils = __webpack_require__(2662);\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/errors.js\n\n\n\n/**\n * Configures global error listeners\n */\n\nfunction registerErrorInstrumentation() {\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: errorCallback,\n type: \'error\'\n });\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: errorCallback,\n type: \'unhandledrejection\'\n });\n}\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\n\nfunction errorCallback() {\n var activeTransaction = (0,utils/* getActiveTransaction */.x1)();\n\n if (activeTransaction) {\n logger/* logger.log */.k.log("[Tracing] Transaction: " + spanstatus/* SpanStatus.InternalError */.p.InternalError + " -> Global error occured");\n activeTransaction.setStatus(spanstatus/* SpanStatus.InternalError */.p.InternalError);\n }\n}\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/esm/idletransaction.js\nvar idletransaction = __webpack_require__(1441);\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/esm/transaction.js\nvar esm_transaction = __webpack_require__(5955);\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/hubextensions.js\n/* module decorator */ module = __webpack_require__.hmd(module);\n\n\n\n\n\n\n\n\n/** Returns all trace headers that are currently on the top scope. */\n\nfunction traceHeaders() {\n var scope = this.getScope();\n\n if (scope) {\n var span = scope.getSpan();\n\n if (span) {\n return {\n \'sentry-trace\': span.toTraceparent()\n };\n }\n }\n\n return {};\n}\n/**\n * Makes a sampling decision for the given transaction and stores it on the transaction.\n *\n * Called every time a transaction is created. Only transactions which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n *\n * @param hub: The hub off of which to read config options\n * @param transaction: The transaction needing a sampling decision\n * @param samplingContext: Default and user-provided data which may be used to help make the decision\n *\n * @returns The given transaction with its `sampled` value set\n */\n\n\nfunction sample(transaction, options, samplingContext) {\n // nothing to do if tracing is not enabled\n if (!(0,utils/* hasTracingEnabled */.zu)()) {\n transaction.sampled = false;\n return transaction;\n } // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n\n\n if (transaction.sampled !== undefined) {\n transaction.setMetadata({\n transactionSampling: {\n method: TransactionSamplingMethod.Explicit\n }\n });\n return transaction;\n } // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should\n // work; prefer the hook if so\n\n\n var sampleRate;\n\n if (typeof options.tracesSampler === \'function\') {\n sampleRate = options.tracesSampler(samplingContext);\n transaction.setMetadata({\n transactionSampling: {\n method: TransactionSamplingMethod.Sampler,\n // cast to number in case it\'s a boolean\n rate: Number(sampleRate)\n }\n });\n } else if (samplingContext.parentSampled !== undefined) {\n sampleRate = samplingContext.parentSampled;\n transaction.setMetadata({\n transactionSampling: {\n method: TransactionSamplingMethod.Inheritance\n }\n });\n } else {\n sampleRate = options.tracesSampleRate;\n transaction.setMetadata({\n transactionSampling: {\n method: TransactionSamplingMethod.Rate,\n // cast to number in case it\'s a boolean\n rate: Number(sampleRate)\n }\n });\n } // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n // only valid values are booleans or numbers between 0 and 1.)\n\n\n if (!isValidSampleRate(sampleRate)) {\n logger/* logger.warn */.k.warn("[Tracing] Discarding transaction because of invalid sample rate.");\n transaction.sampled = false;\n return transaction;\n } // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it\'s a sign the transaction should be dropped\n\n\n if (!sampleRate) {\n logger/* logger.log */.k.log("[Tracing] Discarding transaction because " + (typeof options.tracesSampler === \'function\' ? \'tracesSampler returned 0 or false\' : \'a negative sampling decision was inherited or tracesSampleRate is set to 0\'));\n transaction.sampled = false;\n return transaction;\n } // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n // a boolean, the < comparison will cause it to be automatically cast to 1 if it\'s true and 0 if it\'s false.\n\n\n transaction.sampled = Math.random() < sampleRate; // if we\'re not going to keep it, we\'re done\n\n if (!transaction.sampled) {\n logger/* logger.log */.k.log("[Tracing] Discarding transaction because it\'s not included in the random sample (sampling rate = " + Number(sampleRate) + ")");\n return transaction;\n }\n\n logger/* logger.log */.k.log("[Tracing] starting " + transaction.op + " transaction - " + transaction.name);\n return transaction;\n}\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\n\n\nfunction isValidSampleRate(rate) {\n // we need to check NaN explicitly because it\'s of type \'number\' and therefore wouldn\'t get caught by this typecheck\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNaN(rate) || !(typeof rate === \'number\' || typeof rate === \'boolean\')) {\n logger/* logger.warn */.k.warn("[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got " + JSON.stringify(rate) + " of type " + JSON.stringify(typeof rate) + ".");\n return false;\n } // in case sampleRate is a boolean, it will get automatically cast to 1 if it\'s true and 0 if it\'s false\n\n\n if (rate < 0 || rate > 1) {\n logger/* logger.warn */.k.warn("[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got " + rate + ".");\n return false;\n }\n\n return true;\n}\n/**\n * Creates a new transaction and adds a sampling decision if it doesn\'t yet have one.\n *\n * The Hub.startTransaction method delegates to this method to do its work, passing the Hub instance in as `this`, as if\n * it had been called on the hub directly. Exists as a separate function so that it can be injected into the class as an\n * "extension method."\n *\n * @param this: The Hub starting the transaction\n * @param transactionContext: Data used to configure the transaction\n * @param CustomSamplingContext: Optional data to be provided to the `tracesSampler` function (if any)\n *\n * @returns The new transaction\n *\n * @see {@link Hub.startTransaction}\n */\n\n\nfunction _startTransaction(transactionContext, customSamplingContext) {\n var _a, _b;\n\n var options = ((_a = this.getClient()) === null || _a === void 0 ? void 0 : _a.getOptions()) || {};\n var transaction = new esm_transaction/* Transaction */.Y(transactionContext, this);\n transaction = sample(transaction, options, (0,tslib_es6/* __assign */.pi)({\n parentSampled: transactionContext.parentSampled,\n transactionContext: transactionContext\n }, customSamplingContext));\n\n if (transaction.sampled) {\n transaction.initSpanRecorder((_b = options._experiments) === null || _b === void 0 ? void 0 : _b.maxSpans);\n }\n\n return transaction;\n}\n/**\n * Create new idle transaction.\n */\n\n\nfunction startIdleTransaction(hub, transactionContext, idleTimeout, onScope, customSamplingContext) {\n var _a, _b;\n\n var options = ((_a = hub.getClient()) === null || _a === void 0 ? void 0 : _a.getOptions()) || {};\n var transaction = new idletransaction/* IdleTransaction */.io(transactionContext, hub, idleTimeout, onScope);\n transaction = sample(transaction, options, (0,tslib_es6/* __assign */.pi)({\n parentSampled: transactionContext.parentSampled,\n transactionContext: transactionContext\n }, customSamplingContext));\n\n if (transaction.sampled) {\n transaction.initSpanRecorder((_b = options._experiments) === null || _b === void 0 ? void 0 : _b.maxSpans);\n }\n\n return transaction;\n}\n/**\n * @private\n */\n\nfunction _addTracingExtensions() {\n var carrier = (0,hub/* getMainCarrier */.cu)();\n\n if (!carrier.__SENTRY__) {\n return;\n }\n\n carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n\n if (!carrier.__SENTRY__.extensions.startTransaction) {\n carrier.__SENTRY__.extensions.startTransaction = _startTransaction;\n }\n\n if (!carrier.__SENTRY__.extensions.traceHeaders) {\n carrier.__SENTRY__.extensions.traceHeaders = traceHeaders;\n }\n}\n/**\n * @private\n */\n\nfunction _autoloadDatabaseIntegrations() {\n var carrier = (0,hub/* getMainCarrier */.cu)();\n\n if (!carrier.__SENTRY__) {\n return;\n }\n\n var packageToIntegrationMapping = {\n mongodb: function mongodb() {\n var integration = (0,node/* dynamicRequire */.l$)(module, \'./integrations/mongo\');\n return new integration.Mongo();\n },\n mongoose: function mongoose() {\n var integration = (0,node/* dynamicRequire */.l$)(module, \'./integrations/mongo\');\n return new integration.Mongo({\n mongoose: true\n });\n },\n mysql: function mysql() {\n var integration = (0,node/* dynamicRequire */.l$)(module, \'./integrations/mysql\');\n return new integration.Mysql();\n },\n pg: function pg() {\n var integration = (0,node/* dynamicRequire */.l$)(module, \'./integrations/postgres\');\n return new integration.Postgres();\n }\n };\n var mappedPackages = Object.keys(packageToIntegrationMapping).filter(function (moduleName) {\n return !!(0,node/* loadModule */.$y)(moduleName);\n }).map(function (pkg) {\n try {\n return packageToIntegrationMapping[pkg]();\n } catch (e) {\n return undefined;\n }\n }).filter(function (p) {\n return p;\n });\n\n if (mappedPackages.length > 0) {\n carrier.__SENTRY__.integrations = (0,tslib_es6/* __spread */.fl)(carrier.__SENTRY__.integrations || [], mappedPackages);\n }\n}\n/**\n * This patches the global object and injects the Tracing extensions methods\n */\n\n\nfunction addExtensionMethods() {\n _addTracingExtensions(); // Detect and automatically load specified integrations.\n\n\n if ((0,node/* isNodeEnv */.KV)()) {\n _autoloadDatabaseIntegrations();\n } // If an error happens globally, we should make sure transaction status is set to error.\n\n\n registerErrorInstrumentation();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL2VzbS90cmFuc2FjdGlvbi5qcz8zNmU2Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9lc20vZXJyb3JzLmpzPzY3OTgiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL2VzbS9odWJleHRlbnNpb25zLmpzPzM0MjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyw4REFBOEQsRzs7Ozs7Ozs7Ozs7O0FDUEc7QUFDeEI7QUFDSztBQUMvQztBQUNBO0FBQ0E7O0FBRU87QUFDUCxFQUFFLCtDQUF5QjtBQUMzQjtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUUsK0NBQXlCO0FBQzNCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEIsc0NBQW9COztBQUU5QztBQUNBLElBQUksNEJBQVUsNkJBQTZCLHdEQUF3QjtBQUNuRSxnQ0FBZ0Msd0RBQXdCO0FBQ3hEO0FBQ0EsQzs7Ozs7OztBQzVCbUQ7QUFDTjtBQUNhO0FBQ29CO0FBQ3RCO0FBQ0o7QUFDUjtBQUNBO0FBQzVDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLE9BQU8sbUNBQWlCO0FBQ3hCO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNILFVBQVU7OztBQUdWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlDQUFpQztBQUNqRDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxQ0FBcUM7QUFDckQ7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw4QkFBOEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7O0FBR0E7QUFDQSxJQUFJLDhCQUFXO0FBQ2Y7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0EsSUFBSSw0QkFBVTtBQUNkO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBLG1EQUFtRDs7QUFFbkQ7QUFDQSxJQUFJLDRCQUFVO0FBQ2Q7QUFDQTs7QUFFQSxFQUFFLDRCQUFVO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDhCQUFXO0FBQ2Y7QUFDQSxHQUFHOzs7QUFHSDtBQUNBLElBQUksOEJBQVc7QUFDZjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixrQ0FBVztBQUNuQyw2Q0FBNkMsOEJBQVE7QUFDckQ7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdPO0FBQ1A7O0FBRUE7QUFDQSx3QkFBd0IsdUNBQWU7QUFDdkMsNkNBQTZDLDhCQUFRO0FBQ3JEO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1AsZ0JBQWdCLDhCQUFjOztBQUU5QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLDhCQUFjOztBQUU5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QiwrQkFBYztBQUN0QztBQUNBLEtBQUs7QUFDTDtBQUNBLHdCQUF3QiwrQkFBYztBQUN0QztBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLHdCQUF3QiwrQkFBYztBQUN0QztBQUNBLEtBQUs7QUFDTDtBQUNBLHdCQUF3QiwrQkFBYztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsMkJBQVU7QUFDdkIsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7QUFDQSxzQ0FBc0MsOEJBQVE7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR087QUFDUCwwQkFBMEI7OztBQUcxQixNQUFNLDBCQUFTO0FBQ2Y7QUFDQSxHQUFHOzs7QUFHSCxFQUFFLDRCQUE0QjtBQUM5QiIsImZpbGUiOiI2Mjc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBUcmFuc2FjdGlvblNhbXBsaW5nTWV0aG9kO1xuXG4oZnVuY3Rpb24gKFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2QpIHtcbiAgVHJhbnNhY3Rpb25TYW1wbGluZ01ldGhvZFtcIkV4cGxpY2l0XCJdID0gXCJleHBsaWNpdGx5X3NldFwiO1xuICBUcmFuc2FjdGlvblNhbXBsaW5nTWV0aG9kW1wiU2FtcGxlclwiXSA9IFwiY2xpZW50X3NhbXBsZXJcIjtcbiAgVHJhbnNhY3Rpb25TYW1wbGluZ01ldGhvZFtcIlJhdGVcIl0gPSBcImNsaWVudF9yYXRlXCI7XG4gIFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2RbXCJJbmhlcml0YW5jZVwiXSA9IFwiaW5oZXJpdGFuY2VcIjtcbn0pKFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2QgfHwgKFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2QgPSB7fSkpOyIsImltcG9ydCB7IGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0IHsgU3BhblN0YXR1cyB9IGZyb20gJy4vc3BhbnN0YXR1cyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVUcmFuc2FjdGlvbiB9IGZyb20gJy4vdXRpbHMnO1xuLyoqXG4gKiBDb25maWd1cmVzIGdsb2JhbCBlcnJvciBsaXN0ZW5lcnNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJFcnJvckluc3RydW1lbnRhdGlvbigpIHtcbiAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgY2FsbGJhY2s6IGVycm9yQ2FsbGJhY2ssXG4gICAgdHlwZTogJ2Vycm9yJ1xuICB9KTtcbiAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgY2FsbGJhY2s6IGVycm9yQ2FsbGJhY2ssXG4gICAgdHlwZTogJ3VuaGFuZGxlZHJlamVjdGlvbidcbiAgfSk7XG59XG4vKipcbiAqIElmIGFuIGVycm9yIG9yIHVuaGFuZGxlZCBwcm9taXNlIG9jY3Vycywgd2UgbWFyayB0aGUgYWN0aXZlIHRyYW5zYWN0aW9uIGFzIGZhaWxlZFxuICovXG5cbmZ1bmN0aW9uIGVycm9yQ2FsbGJhY2soKSB7XG4gIHZhciBhY3RpdmVUcmFuc2FjdGlvbiA9IGdldEFjdGl2ZVRyYW5zYWN0aW9uKCk7XG5cbiAgaWYgKGFjdGl2ZVRyYW5zYWN0aW9uKSB7XG4gICAgbG9nZ2VyLmxvZyhcIltUcmFjaW5nXSBUcmFuc2FjdGlvbjogXCIgKyBTcGFuU3RhdHVzLkludGVybmFsRXJyb3IgKyBcIiAtPiBHbG9iYWwgZXJyb3Igb2NjdXJlZFwiKTtcbiAgICBhY3RpdmVUcmFuc2FjdGlvbi5zZXRTdGF0dXMoU3BhblN0YXR1cy5JbnRlcm5hbEVycm9yKTtcbiAgfVxufSIsImltcG9ydCB7IF9fYXNzaWduLCBfX3JlYWQsIF9fc3ByZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBnZXRNYWluQ2FycmllciB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2QgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGR5bmFtaWNSZXF1aXJlLCBpc05vZGVFbnYsIGxvYWRNb2R1bGUsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJFcnJvckluc3RydW1lbnRhdGlvbiB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IElkbGVUcmFuc2FjdGlvbiB9IGZyb20gJy4vaWRsZXRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBoYXNUcmFjaW5nRW5hYmxlZCB9IGZyb20gJy4vdXRpbHMnO1xuLyoqIFJldHVybnMgYWxsIHRyYWNlIGhlYWRlcnMgdGhhdCBhcmUgY3VycmVudGx5IG9uIHRoZSB0b3Agc2NvcGUuICovXG5cbmZ1bmN0aW9uIHRyYWNlSGVhZGVycygpIHtcbiAgdmFyIHNjb3BlID0gdGhpcy5nZXRTY29wZSgpO1xuXG4gIGlmIChzY29wZSkge1xuICAgIHZhciBzcGFuID0gc2NvcGUuZ2V0U3BhbigpO1xuXG4gICAgaWYgKHNwYW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdzZW50cnktdHJhY2UnOiBzcGFuLnRvVHJhY2VwYXJlbnQoKVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge307XG59XG4vKipcbiAqIE1ha2VzIGEgc2FtcGxpbmcgZGVjaXNpb24gZm9yIHRoZSBnaXZlbiB0cmFuc2FjdGlvbiBhbmQgc3RvcmVzIGl0IG9uIHRoZSB0cmFuc2FjdGlvbi5cbiAqXG4gKiBDYWxsZWQgZXZlcnkgdGltZSBhIHRyYW5zYWN0aW9uIGlzIGNyZWF0ZWQuIE9ubHkgdHJhbnNhY3Rpb25zIHdoaWNoIGVtZXJnZSB3aXRoIGEgYHNhbXBsZWRgIHZhbHVlIG9mIGB0cnVlYCB3aWxsIGJlXG4gKiBzZW50IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gaHViOiBUaGUgaHViIG9mZiBvZiB3aGljaCB0byByZWFkIGNvbmZpZyBvcHRpb25zXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb246IFRoZSB0cmFuc2FjdGlvbiBuZWVkaW5nIGEgc2FtcGxpbmcgZGVjaXNpb25cbiAqIEBwYXJhbSBzYW1wbGluZ0NvbnRleHQ6IERlZmF1bHQgYW5kIHVzZXItcHJvdmlkZWQgZGF0YSB3aGljaCBtYXkgYmUgdXNlZCB0byBoZWxwIG1ha2UgdGhlIGRlY2lzaW9uXG4gKlxuICogQHJldHVybnMgVGhlIGdpdmVuIHRyYW5zYWN0aW9uIHdpdGggaXRzIGBzYW1wbGVkYCB2YWx1ZSBzZXRcbiAqL1xuXG5cbmZ1bmN0aW9uIHNhbXBsZSh0cmFuc2FjdGlvbiwgb3B0aW9ucywgc2FtcGxpbmdDb250ZXh0KSB7XG4gIC8vIG5vdGhpbmcgdG8gZG8gaWYgdHJhY2luZyBpcyBub3QgZW5hYmxlZFxuICBpZiAoIWhhc1RyYWNpbmdFbmFibGVkKCkpIHtcbiAgICB0cmFuc2FjdGlvbi5zYW1wbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9IC8vIGlmIHRoZSB1c2VyIGhhcyBmb3JjZWQgYSBzYW1wbGluZyBkZWNpc2lvbiBieSBwYXNzaW5nIGEgYHNhbXBsZWRgIHZhbHVlIGluIHRoZWlyIHRyYW5zYWN0aW9uIGNvbnRleHQsIGdvIHdpdGggdGhhdFxuXG5cbiAgaWYgKHRyYW5zYWN0aW9uLnNhbXBsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRyYW5zYWN0aW9uLnNldE1ldGFkYXRhKHtcbiAgICAgIHRyYW5zYWN0aW9uU2FtcGxpbmc6IHtcbiAgICAgICAgbWV0aG9kOiBUcmFuc2FjdGlvblNhbXBsaW5nTWV0aG9kLkV4cGxpY2l0XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9IC8vIHdlIHdvdWxkIGhhdmUgYmFpbGVkIGFscmVhZHkgaWYgbmVpdGhlciBgdHJhY2VzU2FtcGxlcmAgbm9yIGB0cmFjZXNTYW1wbGVSYXRlYCB3ZXJlIGRlZmluZWQsIHNvIG9uZSBvZiB0aGVzZSBzaG91bGRcbiAgLy8gd29yazsgcHJlZmVyIHRoZSBob29rIGlmIHNvXG5cblxuICB2YXIgc2FtcGxlUmF0ZTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMudHJhY2VzU2FtcGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNhbXBsZVJhdGUgPSBvcHRpb25zLnRyYWNlc1NhbXBsZXIoc2FtcGxpbmdDb250ZXh0KTtcbiAgICB0cmFuc2FjdGlvbi5zZXRNZXRhZGF0YSh7XG4gICAgICB0cmFuc2FjdGlvblNhbXBsaW5nOiB7XG4gICAgICAgIG1ldGhvZDogVHJhbnNhY3Rpb25TYW1wbGluZ01ldGhvZC5TYW1wbGVyLFxuICAgICAgICAvLyBjYXN0IHRvIG51bWJlciBpbiBjYXNlIGl0J3MgYSBib29sZWFuXG4gICAgICAgIHJhdGU6IE51bWJlcihzYW1wbGVSYXRlKVxuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHNhbXBsaW5nQ29udGV4dC5wYXJlbnRTYW1wbGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICBzYW1wbGVSYXRlID0gc2FtcGxpbmdDb250ZXh0LnBhcmVudFNhbXBsZWQ7XG4gICAgdHJhbnNhY3Rpb24uc2V0TWV0YWRhdGEoe1xuICAgICAgdHJhbnNhY3Rpb25TYW1wbGluZzoge1xuICAgICAgICBtZXRob2Q6IFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2QuSW5oZXJpdGFuY2VcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzYW1wbGVSYXRlID0gb3B0aW9ucy50cmFjZXNTYW1wbGVSYXRlO1xuICAgIHRyYW5zYWN0aW9uLnNldE1ldGFkYXRhKHtcbiAgICAgIHRyYW5zYWN0aW9uU2FtcGxpbmc6IHtcbiAgICAgICAgbWV0aG9kOiBUcmFuc2FjdGlvblNhbXBsaW5nTWV0aG9kLlJhdGUsXG4gICAgICAgIC8vIGNhc3QgdG8gbnVtYmVyIGluIGNhc2UgaXQncyBhIGJvb2xlYW5cbiAgICAgICAgcmF0ZTogTnVtYmVyKHNhbXBsZVJhdGUpXG4gICAgICB9XG4gICAgfSk7XG4gIH0gLy8gU2luY2UgdGhpcyBpcyBjb21pbmcgZnJvbSB0aGUgdXNlciAob3IgZnJvbSBhIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IHRoZSB1c2VyKSwgd2hvIGtub3dzIHdoYXQgd2UgbWlnaHQgZ2V0LiAoVGhlXG4gIC8vIG9ubHkgdmFsaWQgdmFsdWVzIGFyZSBib29sZWFucyBvciBudW1iZXJzIGJldHdlZW4gMCBhbmQgMS4pXG5cblxuICBpZiAoIWlzVmFsaWRTYW1wbGVSYXRlKHNhbXBsZVJhdGUpKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJbVHJhY2luZ10gRGlzY2FyZGluZyB0cmFuc2FjdGlvbiBiZWNhdXNlIG9mIGludmFsaWQgc2FtcGxlIHJhdGUuXCIpO1xuICAgIHRyYW5zYWN0aW9uLnNhbXBsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH0gLy8gaWYgdGhlIGZ1bmN0aW9uIHJldHVybmVkIDAgKG9yIGZhbHNlKSwgb3IgaWYgYHRyYWNlc1NhbXBsZVJhdGVgIGlzIDAsIGl0J3MgYSBzaWduIHRoZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgZHJvcHBlZFxuXG5cbiAgaWYgKCFzYW1wbGVSYXRlKSB7XG4gICAgbG9nZ2VyLmxvZyhcIltUcmFjaW5nXSBEaXNjYXJkaW5nIHRyYW5zYWN0aW9uIGJlY2F1c2UgXCIgKyAodHlwZW9mIG9wdGlvbnMudHJhY2VzU2FtcGxlciA9PT0gJ2Z1bmN0aW9uJyA/ICd0cmFjZXNTYW1wbGVyIHJldHVybmVkIDAgb3IgZmFsc2UnIDogJ2EgbmVnYXRpdmUgc2FtcGxpbmcgZGVjaXNpb24gd2FzIGluaGVyaXRlZCBvciB0cmFjZXNTYW1wbGVSYXRlIGlzIHNldCB0byAwJykpO1xuICAgIHRyYW5zYWN0aW9uLnNhbXBsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH0gLy8gTm93IHdlIHJvbGwgdGhlIGRpY2UuIE1hdGgucmFuZG9tIGlzIGluY2x1c2l2ZSBvZiAwLCBidXQgbm90IG9mIDEsIHNvIHN0cmljdCA8IGlzIHNhZmUgaGVyZS4gSW4gY2FzZSBzYW1wbGVSYXRlIGlzXG4gIC8vIGEgYm9vbGVhbiwgdGhlIDwgY29tcGFyaXNvbiB3aWxsIGNhdXNlIGl0IHRvIGJlIGF1dG9tYXRpY2FsbHkgY2FzdCB0byAxIGlmIGl0J3MgdHJ1ZSBhbmQgMCBpZiBpdCdzIGZhbHNlLlxuXG5cbiAgdHJhbnNhY3Rpb24uc2FtcGxlZCA9IE1hdGgucmFuZG9tKCkgPCBzYW1wbGVSYXRlOyAvLyBpZiB3ZSdyZSBub3QgZ29pbmcgdG8ga2VlcCBpdCwgd2UncmUgZG9uZVxuXG4gIGlmICghdHJhbnNhY3Rpb24uc2FtcGxlZCkge1xuICAgIGxvZ2dlci5sb2coXCJbVHJhY2luZ10gRGlzY2FyZGluZyB0cmFuc2FjdGlvbiBiZWNhdXNlIGl0J3Mgbm90IGluY2x1ZGVkIGluIHRoZSByYW5kb20gc2FtcGxlIChzYW1wbGluZyByYXRlID0gXCIgKyBOdW1iZXIoc2FtcGxlUmF0ZSkgKyBcIilcIik7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgbG9nZ2VyLmxvZyhcIltUcmFjaW5nXSBzdGFydGluZyBcIiArIHRyYW5zYWN0aW9uLm9wICsgXCIgdHJhbnNhY3Rpb24gLSBcIiArIHRyYW5zYWN0aW9uLm5hbWUpO1xuICByZXR1cm4gdHJhbnNhY3Rpb247XG59XG4vKipcbiAqIENoZWNrcyB0aGUgZ2l2ZW4gc2FtcGxlIHJhdGUgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkIHR5cGUgYW5kIHZhbHVlIChhIGJvb2xlYW4sIG9yIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSkuXG4gKi9cblxuXG5mdW5jdGlvbiBpc1ZhbGlkU2FtcGxlUmF0ZShyYXRlKSB7XG4gIC8vIHdlIG5lZWQgdG8gY2hlY2sgTmFOIGV4cGxpY2l0bHkgYmVjYXVzZSBpdCdzIG9mIHR5cGUgJ251bWJlcicgYW5kIHRoZXJlZm9yZSB3b3VsZG4ndCBnZXQgY2F1Z2h0IGJ5IHRoaXMgdHlwZWNoZWNrXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGlmIChpc05hTihyYXRlKSB8fCAhKHR5cGVvZiByYXRlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgcmF0ZSA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgIGxvZ2dlci53YXJuKFwiW1RyYWNpbmddIEdpdmVuIHNhbXBsZSByYXRlIGlzIGludmFsaWQuIFNhbXBsZSByYXRlIG11c3QgYmUgYSBib29sZWFuIG9yIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS4gR290IFwiICsgSlNPTi5zdHJpbmdpZnkocmF0ZSkgKyBcIiBvZiB0eXBlIFwiICsgSlNPTi5zdHJpbmdpZnkodHlwZW9mIHJhdGUpICsgXCIuXCIpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBpbiBjYXNlIHNhbXBsZVJhdGUgaXMgYSBib29sZWFuLCBpdCB3aWxsIGdldCBhdXRvbWF0aWNhbGx5IGNhc3QgdG8gMSBpZiBpdCdzIHRydWUgYW5kIDAgaWYgaXQncyBmYWxzZVxuXG5cbiAgaWYgKHJhdGUgPCAwIHx8IHJhdGUgPiAxKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJbVHJhY2luZ10gR2l2ZW4gc2FtcGxlIHJhdGUgaXMgaW52YWxpZC4gU2FtcGxlIHJhdGUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuIEdvdCBcIiArIHJhdGUgKyBcIi5cIik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdHJhbnNhY3Rpb24gYW5kIGFkZHMgYSBzYW1wbGluZyBkZWNpc2lvbiBpZiBpdCBkb2Vzbid0IHlldCBoYXZlIG9uZS5cbiAqXG4gKiBUaGUgSHViLnN0YXJ0VHJhbnNhY3Rpb24gbWV0aG9kIGRlbGVnYXRlcyB0byB0aGlzIG1ldGhvZCB0byBkbyBpdHMgd29yaywgcGFzc2luZyB0aGUgSHViIGluc3RhbmNlIGluIGFzIGB0aGlzYCwgYXMgaWZcbiAqIGl0IGhhZCBiZWVuIGNhbGxlZCBvbiB0aGUgaHViIGRpcmVjdGx5LiBFeGlzdHMgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGF0IGl0IGNhbiBiZSBpbmplY3RlZCBpbnRvIHRoZSBjbGFzcyBhcyBhblxuICogXCJleHRlbnNpb24gbWV0aG9kLlwiXG4gKlxuICogQHBhcmFtIHRoaXM6IFRoZSBIdWIgc3RhcnRpbmcgdGhlIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25Db250ZXh0OiBEYXRhIHVzZWQgdG8gY29uZmlndXJlIHRoZSB0cmFuc2FjdGlvblxuICogQHBhcmFtIEN1c3RvbVNhbXBsaW5nQ29udGV4dDogT3B0aW9uYWwgZGF0YSB0byBiZSBwcm92aWRlZCB0byB0aGUgYHRyYWNlc1NhbXBsZXJgIGZ1bmN0aW9uIChpZiBhbnkpXG4gKlxuICogQHJldHVybnMgVGhlIG5ldyB0cmFuc2FjdGlvblxuICpcbiAqIEBzZWUge0BsaW5rIEh1Yi5zdGFydFRyYW5zYWN0aW9ufVxuICovXG5cblxuZnVuY3Rpb24gX3N0YXJ0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25Db250ZXh0LCBjdXN0b21TYW1wbGluZ0NvbnRleHQpIHtcbiAgdmFyIF9hLCBfYjtcblxuICB2YXIgb3B0aW9ucyA9ICgoX2EgPSB0aGlzLmdldENsaWVudCgpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0T3B0aW9ucygpKSB8fCB7fTtcbiAgdmFyIHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uQ29udGV4dCwgdGhpcyk7XG4gIHRyYW5zYWN0aW9uID0gc2FtcGxlKHRyYW5zYWN0aW9uLCBvcHRpb25zLCBfX2Fzc2lnbih7XG4gICAgcGFyZW50U2FtcGxlZDogdHJhbnNhY3Rpb25Db250ZXh0LnBhcmVudFNhbXBsZWQsXG4gICAgdHJhbnNhY3Rpb25Db250ZXh0OiB0cmFuc2FjdGlvbkNvbnRleHRcbiAgfSwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KSk7XG5cbiAgaWYgKHRyYW5zYWN0aW9uLnNhbXBsZWQpIHtcbiAgICB0cmFuc2FjdGlvbi5pbml0U3BhblJlY29yZGVyKChfYiA9IG9wdGlvbnMuX2V4cGVyaW1lbnRzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubWF4U3BhbnMpO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zYWN0aW9uO1xufVxuLyoqXG4gKiBDcmVhdGUgbmV3IGlkbGUgdHJhbnNhY3Rpb24uXG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRJZGxlVHJhbnNhY3Rpb24oaHViLCB0cmFuc2FjdGlvbkNvbnRleHQsIGlkbGVUaW1lb3V0LCBvblNjb3BlLCBjdXN0b21TYW1wbGluZ0NvbnRleHQpIHtcbiAgdmFyIF9hLCBfYjtcblxuICB2YXIgb3B0aW9ucyA9ICgoX2EgPSBodWIuZ2V0Q2xpZW50KCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRPcHRpb25zKCkpIHx8IHt9O1xuICB2YXIgdHJhbnNhY3Rpb24gPSBuZXcgSWRsZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uQ29udGV4dCwgaHViLCBpZGxlVGltZW91dCwgb25TY29wZSk7XG4gIHRyYW5zYWN0aW9uID0gc2FtcGxlKHRyYW5zYWN0aW9uLCBvcHRpb25zLCBfX2Fzc2lnbih7XG4gICAgcGFyZW50U2FtcGxlZDogdHJhbnNhY3Rpb25Db250ZXh0LnBhcmVudFNhbXBsZWQsXG4gICAgdHJhbnNhY3Rpb25Db250ZXh0OiB0cmFuc2FjdGlvbkNvbnRleHRcbiAgfSwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KSk7XG5cbiAgaWYgKHRyYW5zYWN0aW9uLnNhbXBsZWQpIHtcbiAgICB0cmFuc2FjdGlvbi5pbml0U3BhblJlY29yZGVyKChfYiA9IG9wdGlvbnMuX2V4cGVyaW1lbnRzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubWF4U3BhbnMpO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zYWN0aW9uO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBfYWRkVHJhY2luZ0V4dGVuc2lvbnMoKSB7XG4gIHZhciBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTtcblxuICBpZiAoIWNhcnJpZXIuX19TRU5UUllfXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zID0gY2Fycmllci5fX1NFTlRSWV9fLmV4dGVuc2lvbnMgfHwge307XG5cbiAgaWYgKCFjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy5zdGFydFRyYW5zYWN0aW9uKSB7XG4gICAgY2Fycmllci5fX1NFTlRSWV9fLmV4dGVuc2lvbnMuc3RhcnRUcmFuc2FjdGlvbiA9IF9zdGFydFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgaWYgKCFjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy50cmFjZUhlYWRlcnMpIHtcbiAgICBjYXJyaWVyLl9fU0VOVFJZX18uZXh0ZW5zaW9ucy50cmFjZUhlYWRlcnMgPSB0cmFjZUhlYWRlcnM7XG4gIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBfYXV0b2xvYWREYXRhYmFzZUludGVncmF0aW9ucygpIHtcbiAgdmFyIGNhcnJpZXIgPSBnZXRNYWluQ2FycmllcigpO1xuXG4gIGlmICghY2Fycmllci5fX1NFTlRSWV9fKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhY2thZ2VUb0ludGVncmF0aW9uTWFwcGluZyA9IHtcbiAgICBtb25nb2RiOiBmdW5jdGlvbiBtb25nb2RiKCkge1xuICAgICAgdmFyIGludGVncmF0aW9uID0gZHluYW1pY1JlcXVpcmUobW9kdWxlLCAnLi9pbnRlZ3JhdGlvbnMvbW9uZ28nKTtcbiAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb24uTW9uZ28oKTtcbiAgICB9LFxuICAgIG1vbmdvb3NlOiBmdW5jdGlvbiBtb25nb29zZSgpIHtcbiAgICAgIHZhciBpbnRlZ3JhdGlvbiA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgJy4vaW50ZWdyYXRpb25zL21vbmdvJyk7XG4gICAgICByZXR1cm4gbmV3IGludGVncmF0aW9uLk1vbmdvKHtcbiAgICAgICAgbW9uZ29vc2U6IHRydWVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbXlzcWw6IGZ1bmN0aW9uIG15c3FsKCkge1xuICAgICAgdmFyIGludGVncmF0aW9uID0gZHluYW1pY1JlcXVpcmUobW9kdWxlLCAnLi9pbnRlZ3JhdGlvbnMvbXlzcWwnKTtcbiAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb24uTXlzcWwoKTtcbiAgICB9LFxuICAgIHBnOiBmdW5jdGlvbiBwZygpIHtcbiAgICAgIHZhciBpbnRlZ3JhdGlvbiA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgJy4vaW50ZWdyYXRpb25zL3Bvc3RncmVzJyk7XG4gICAgICByZXR1cm4gbmV3IGludGVncmF0aW9uLlBvc3RncmVzKCk7XG4gICAgfVxuICB9O1xuICB2YXIgbWFwcGVkUGFja2FnZXMgPSBPYmplY3Qua2V5cyhwYWNrYWdlVG9JbnRlZ3JhdGlvbk1hcHBpbmcpLmZpbHRlcihmdW5jdGlvbiAobW9kdWxlTmFtZSkge1xuICAgIHJldHVybiAhIWxvYWRNb2R1bGUobW9kdWxlTmFtZSk7XG4gIH0pLm1hcChmdW5jdGlvbiAocGtnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwYWNrYWdlVG9JbnRlZ3JhdGlvbk1hcHBpbmdbcGtnXSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9KS5maWx0ZXIoZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gcDtcbiAgfSk7XG5cbiAgaWYgKG1hcHBlZFBhY2thZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBjYXJyaWVyLl9fU0VOVFJZX18uaW50ZWdyYXRpb25zID0gX19zcHJlYWQoY2Fycmllci5fX1NFTlRSWV9fLmludGVncmF0aW9ucyB8fCBbXSwgbWFwcGVkUGFja2FnZXMpO1xuICB9XG59XG4vKipcbiAqIFRoaXMgcGF0Y2hlcyB0aGUgZ2xvYmFsIG9iamVjdCBhbmQgaW5qZWN0cyB0aGUgVHJhY2luZyBleHRlbnNpb25zIG1ldGhvZHNcbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFeHRlbnNpb25NZXRob2RzKCkge1xuICBfYWRkVHJhY2luZ0V4dGVuc2lvbnMoKTsgLy8gRGV0ZWN0IGFuZCBhdXRvbWF0aWNhbGx5IGxvYWQgc3BlY2lmaWVkIGludGVncmF0aW9ucy5cblxuXG4gIGlmIChpc05vZGVFbnYoKSkge1xuICAgIF9hdXRvbG9hZERhdGFiYXNlSW50ZWdyYXRpb25zKCk7XG4gIH0gLy8gSWYgYW4gZXJyb3IgaGFwcGVucyBnbG9iYWxseSwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0cmFuc2FjdGlvbiBzdGF0dXMgaXMgc2V0IHRvIGVycm9yLlxuXG5cbiAgcmVnaXN0ZXJFcnJvckluc3RydW1lbnRhdGlvbigpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6275\n')},1441:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"nT\": function() { return /* binding */ DEFAULT_IDLE_TIMEOUT; },\n/* harmony export */ \"io\": function() { return /* binding */ IdleTransaction; }\n/* harmony export */ });\n/* unused harmony exports HEARTBEAT_INTERVAL, IdleTransactionSpanRecorder */\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7870);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5153);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(245);\n/* harmony import */ var _span__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6369);\n/* harmony import */ var _spanstatus__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6314);\n/* harmony import */ var _transaction__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5955);\n\n\n\n\n\nvar DEFAULT_IDLE_TIMEOUT = 1000;\nvar HEARTBEAT_INTERVAL = 5000;\n/**\n * @inheritDoc\n */\n\nvar IdleTransactionSpanRecorder =\n/** @class */\nfunction (_super) {\n (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__extends */ .ZT)(IdleTransactionSpanRecorder, _super);\n\n function IdleTransactionSpanRecorder(_pushActivity, _popActivity, transactionSpanId, maxlen) {\n if (transactionSpanId === void 0) {\n transactionSpanId = '';\n }\n\n var _this = _super.call(this, maxlen) || this;\n\n _this._pushActivity = _pushActivity;\n _this._popActivity = _popActivity;\n _this.transactionSpanId = transactionSpanId;\n return _this;\n }\n /**\n * @inheritDoc\n */\n\n\n IdleTransactionSpanRecorder.prototype.add = function (span) {\n var _this = this; // We should make sure we do not push and pop activities for\n // the transaction that this span recorder belongs to.\n\n\n if (span.spanId !== this.transactionSpanId) {\n // We patch span.finish() to pop an activity after setting an endTimestamp.\n span.finish = function (endTimestamp) {\n span.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_1__/* .timestampWithMs */ ._I)();\n\n _this._popActivity(span.spanId);\n }; // We should only push new activities if the span does not have an end timestamp.\n\n\n if (span.endTimestamp === undefined) {\n this._pushActivity(span.spanId);\n }\n }\n\n _super.prototype.add.call(this, span);\n };\n\n return IdleTransactionSpanRecorder;\n}(_span__WEBPACK_IMPORTED_MODULE_2__/* .SpanRecorder */ .g);\n\n\n/**\n * An IdleTransaction is a transaction that automatically finishes. It does this by tracking child spans as activities.\n * You can have multiple IdleTransactions active, but if the `onScope` option is specified, the idle transaction will\n * put itself on the scope on creation.\n */\n\nvar IdleTransaction =\n/** @class */\nfunction (_super) {\n (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__extends */ .ZT)(IdleTransaction, _super);\n\n function IdleTransaction(transactionContext, _idleHub,\n /**\n * The time to wait in ms until the idle transaction will be finished.\n * @default 1000\n */\n _idleTimeout, // If an idle transaction should be put itself on and off the scope automatically.\n _onScope) {\n if (_idleTimeout === void 0) {\n _idleTimeout = DEFAULT_IDLE_TIMEOUT;\n }\n\n if (_onScope === void 0) {\n _onScope = false;\n }\n\n var _this = _super.call(this, transactionContext, _idleHub) || this;\n\n _this._idleHub = _idleHub;\n _this._idleTimeout = _idleTimeout;\n _this._onScope = _onScope; // Activities store a list of active spans\n\n _this.activities = {}; // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n\n _this._heartbeatCounter = 0; // We should not use heartbeat if we finished a transaction\n\n _this._finished = false;\n _this._beforeFinishCallbacks = [];\n\n if (_idleHub && _onScope) {\n // There should only be one active transaction on the scope\n clearActiveTransaction(_idleHub); // We set the transaction here on the scope so error events pick up the trace\n // context and attach it to the error.\n\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log(\"Setting idle transaction on scope. Span ID: \" + _this.spanId);\n\n _idleHub.configureScope(function (scope) {\n return scope.setSpan(_this);\n });\n }\n\n _this._initTimeout = setTimeout(function () {\n if (!_this._finished) {\n _this.finish();\n }\n }, _this._idleTimeout);\n return _this;\n }\n /** {@inheritDoc} */\n\n\n IdleTransaction.prototype.finish = function (endTimestamp) {\n var e_1, _a;\n\n var _this = this;\n\n if (endTimestamp === void 0) {\n endTimestamp = (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_1__/* .timestampWithMs */ ._I)();\n }\n\n this._finished = true;\n this.activities = {};\n\n if (this.spanRecorder) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log('[Tracing] finishing IdleTransaction', new Date(endTimestamp * 1000).toISOString(), this.op);\n\n try {\n for (var _b = (0,tslib__WEBPACK_IMPORTED_MODULE_0__/* .__values */ .XA)(this._beforeFinishCallbacks), _c = _b.next(); !_c.done; _c = _b.next()) {\n var callback = _c.value;\n callback(this, endTimestamp);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n this.spanRecorder.spans = this.spanRecorder.spans.filter(function (span) {\n // If we are dealing with the transaction itself, we just return it\n if (span.spanId === _this.spanId) {\n return true;\n } // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n\n\n if (!span.endTimestamp) {\n span.endTimestamp = endTimestamp;\n span.setStatus(_spanstatus__WEBPACK_IMPORTED_MODULE_4__/* .SpanStatus.Cancelled */ .p.Cancelled);\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n }\n\n var keepSpan = span.startTimestamp < endTimestamp;\n\n if (!keepSpan) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log('[Tracing] discarding Span since it happened after Transaction was finished', JSON.stringify(span, undefined, 2));\n }\n\n return keepSpan;\n });\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log('[Tracing] flushing IdleTransaction');\n } else {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log('[Tracing] No active IdleTransaction');\n } // this._onScope is true if the transaction was previously on the scope.\n\n\n if (this._onScope) {\n clearActiveTransaction(this._idleHub);\n }\n\n return _super.prototype.finish.call(this, endTimestamp);\n };\n /**\n * Register a callback function that gets excecuted before the transaction finishes.\n * Useful for cleanup or if you want to add any additional spans based on current context.\n *\n * This is exposed because users have no other way of running something before an idle transaction\n * finishes.\n */\n\n\n IdleTransaction.prototype.registerBeforeFinishCallback = function (callback) {\n this._beforeFinishCallbacks.push(callback);\n };\n /**\n * @inheritDoc\n */\n\n\n IdleTransaction.prototype.initSpanRecorder = function (maxlen) {\n var _this = this;\n\n if (!this.spanRecorder) {\n var pushActivity = function pushActivity(id) {\n if (_this._finished) {\n return;\n }\n\n _this._pushActivity(id);\n };\n\n var popActivity = function popActivity(id) {\n if (_this._finished) {\n return;\n }\n\n _this._popActivity(id);\n };\n\n this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanId, maxlen); // Start heartbeat so that transactions do not run forever.\n\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log('Starting heartbeat');\n\n this._pingHeartbeat();\n }\n\n this.spanRecorder.add(this);\n };\n /**\n * Start tracking a specific activity.\n * @param spanId The span id that represents the activity\n */\n\n\n IdleTransaction.prototype._pushActivity = function (spanId) {\n if (this._initTimeout) {\n clearTimeout(this._initTimeout);\n this._initTimeout = undefined;\n }\n\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log(\"[Tracing] pushActivity: \" + spanId);\n this.activities[spanId] = true;\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log('[Tracing] new activities count', Object.keys(this.activities).length);\n };\n /**\n * Remove an activity from usage\n * @param spanId The span id that represents the activity\n */\n\n\n IdleTransaction.prototype._popActivity = function (spanId) {\n var _this = this;\n\n if (this.activities[spanId]) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log(\"[Tracing] popActivity \" + spanId); // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\n delete this.activities[spanId];\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log('[Tracing] new activities count', Object.keys(this.activities).length);\n }\n\n if (Object.keys(this.activities).length === 0) {\n var timeout = this._idleTimeout; // We need to add the timeout here to have the real endtimestamp of the transaction\n // Remember timestampWithMs is in seconds, timeout is in ms\n\n var end_1 = (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_1__/* .timestampWithMs */ ._I)() + timeout / 1000;\n setTimeout(function () {\n if (!_this._finished) {\n _this.finish(end_1);\n }\n }, timeout);\n }\n };\n /**\n * Checks when entries of this.activities are not changing for 3 beats.\n * If this occurs we finish the transaction.\n */\n\n\n IdleTransaction.prototype._beat = function () {\n // We should not be running heartbeat if the idle transaction is finished.\n if (this._finished) {\n return;\n }\n\n var heartbeatString = Object.keys(this.activities).join('');\n\n if (heartbeatString === this._prevHeartbeatString) {\n this._heartbeatCounter += 1;\n } else {\n this._heartbeatCounter = 1;\n }\n\n this._prevHeartbeatString = heartbeatString;\n\n if (this._heartbeatCounter >= 3) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log(\"[Tracing] Transaction finished because of no change for 3 heart beats\");\n this.setStatus(_spanstatus__WEBPACK_IMPORTED_MODULE_4__/* .SpanStatus.DeadlineExceeded */ .p.DeadlineExceeded);\n this.setTag('heartbeat', 'failed');\n this.finish();\n } else {\n this._pingHeartbeat();\n }\n };\n /**\n * Pings the heartbeat\n */\n\n\n IdleTransaction.prototype._pingHeartbeat = function () {\n var _this = this;\n\n _sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .logger.log */ .k.log(\"pinging Heartbeat -> current counter: \" + this._heartbeatCounter);\n setTimeout(function () {\n _this._beat();\n }, HEARTBEAT_INTERVAL);\n };\n\n return IdleTransaction;\n}(_transaction__WEBPACK_IMPORTED_MODULE_5__/* .Transaction */ .Y);\n\n\n/**\n * Reset active transaction on scope\n */\n\nfunction clearActiveTransaction(hub) {\n if (hub) {\n var scope = hub.getScope();\n\n if (scope) {\n var transaction = scope.getTransaction();\n\n if (transaction) {\n scope.setSpan(undefined);\n }\n }\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL2lkbGV0cmFuc2FjdGlvbi5qcz8zNjBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQTRDO0FBQ1k7QUFDbEI7QUFDSTtBQUNFO0FBQ3JDO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRSwwREFBUzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLHFCQUFxQjtBQUNyQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsOEVBQThFLHdFQUFlOztBQUU3RjtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLENBQUMsd0RBQVk7O0FBRXlCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRSwwREFBUzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUIsMEJBQTBCOztBQUUxQixnQ0FBZ0M7O0FBRWhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVDQUF1QztBQUN2Qzs7QUFFQSxNQUFNLGtFQUFVOztBQUVoQjtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxPQUFPLFlBQVk7OztBQUduQjtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUJBQXFCLHdFQUFlO0FBQ3BDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLGtFQUFVOztBQUVoQjtBQUNBLHNCQUFzQix5REFBUSw4Q0FBOEMsVUFBVTtBQUN0RjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBLHlCQUF5QixnRkFBb0I7QUFDN0MsVUFBVSxrRUFBVTtBQUNwQjs7QUFFQTs7QUFFQTtBQUNBLFVBQVUsa0VBQVU7QUFDcEI7O0FBRUE7QUFDQSxPQUFPO0FBQ1AsTUFBTSxrRUFBVTtBQUNoQixLQUFLO0FBQ0wsTUFBTSxrRUFBVTtBQUNoQixLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMEdBQTBHOztBQUUxRyxNQUFNLGtFQUFVOztBQUVoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLGtFQUFVO0FBQ2Q7QUFDQSxJQUFJLGtFQUFVO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sa0VBQVUsb0NBQW9DOztBQUVwRDtBQUNBLE1BQU0sa0VBQVU7QUFDaEI7O0FBRUE7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUEsa0JBQWtCLHdFQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxNQUFNLGtFQUFVO0FBQ2hCLHFCQUFxQiw4RkFBMkI7QUFDaEQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsSUFBSSxrRUFBVTtBQUNkO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDLENBQUMsOERBQVc7O0FBRWM7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxNDQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19leHRlbmRzLCBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgbG9nZ2VyLCB0aW1lc3RhbXBXaXRoTXMgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IFNwYW5SZWNvcmRlciB9IGZyb20gJy4vc3Bhbic7XG5pbXBvcnQgeyBTcGFuU3RhdHVzIH0gZnJvbSAnLi9zcGFuc3RhdHVzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgdmFyIERFRkFVTFRfSURMRV9USU1FT1VUID0gMTAwMDtcbmV4cG9ydCB2YXIgSEVBUlRCRUFUX0lOVEVSVkFMID0gNTAwMDtcbi8qKlxuICogQGluaGVyaXREb2NcbiAqL1xuXG52YXIgSWRsZVRyYW5zYWN0aW9uU3BhblJlY29yZGVyID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKElkbGVUcmFuc2FjdGlvblNwYW5SZWNvcmRlciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBJZGxlVHJhbnNhY3Rpb25TcGFuUmVjb3JkZXIoX3B1c2hBY3Rpdml0eSwgX3BvcEFjdGl2aXR5LCB0cmFuc2FjdGlvblNwYW5JZCwgbWF4bGVuKSB7XG4gICAgaWYgKHRyYW5zYWN0aW9uU3BhbklkID09PSB2b2lkIDApIHtcbiAgICAgIHRyYW5zYWN0aW9uU3BhbklkID0gJyc7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWF4bGVuKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuX3B1c2hBY3Rpdml0eSA9IF9wdXNoQWN0aXZpdHk7XG4gICAgX3RoaXMuX3BvcEFjdGl2aXR5ID0gX3BvcEFjdGl2aXR5O1xuICAgIF90aGlzLnRyYW5zYWN0aW9uU3BhbklkID0gdHJhbnNhY3Rpb25TcGFuSWQ7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIElkbGVUcmFuc2FjdGlvblNwYW5SZWNvcmRlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHNwYW4pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzOyAvLyBXZSBzaG91bGQgbWFrZSBzdXJlIHdlIGRvIG5vdCBwdXNoIGFuZCBwb3AgYWN0aXZpdGllcyBmb3JcbiAgICAvLyB0aGUgdHJhbnNhY3Rpb24gdGhhdCB0aGlzIHNwYW4gcmVjb3JkZXIgYmVsb25ncyB0by5cblxuXG4gICAgaWYgKHNwYW4uc3BhbklkICE9PSB0aGlzLnRyYW5zYWN0aW9uU3BhbklkKSB7XG4gICAgICAvLyBXZSBwYXRjaCBzcGFuLmZpbmlzaCgpIHRvIHBvcCBhbiBhY3Rpdml0eSBhZnRlciBzZXR0aW5nIGFuIGVuZFRpbWVzdGFtcC5cbiAgICAgIHNwYW4uZmluaXNoID0gZnVuY3Rpb24gKGVuZFRpbWVzdGFtcCkge1xuICAgICAgICBzcGFuLmVuZFRpbWVzdGFtcCA9IHR5cGVvZiBlbmRUaW1lc3RhbXAgPT09ICdudW1iZXInID8gZW5kVGltZXN0YW1wIDogdGltZXN0YW1wV2l0aE1zKCk7XG5cbiAgICAgICAgX3RoaXMuX3BvcEFjdGl2aXR5KHNwYW4uc3BhbklkKTtcbiAgICAgIH07IC8vIFdlIHNob3VsZCBvbmx5IHB1c2ggbmV3IGFjdGl2aXRpZXMgaWYgdGhlIHNwYW4gZG9lcyBub3QgaGF2ZSBhbiBlbmQgdGltZXN0YW1wLlxuXG5cbiAgICAgIGlmIChzcGFuLmVuZFRpbWVzdGFtcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3B1c2hBY3Rpdml0eShzcGFuLnNwYW5JZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3N1cGVyLnByb3RvdHlwZS5hZGQuY2FsbCh0aGlzLCBzcGFuKTtcbiAgfTtcblxuICByZXR1cm4gSWRsZVRyYW5zYWN0aW9uU3BhblJlY29yZGVyO1xufShTcGFuUmVjb3JkZXIpO1xuXG5leHBvcnQgeyBJZGxlVHJhbnNhY3Rpb25TcGFuUmVjb3JkZXIgfTtcbi8qKlxuICogQW4gSWRsZVRyYW5zYWN0aW9uIGlzIGEgdHJhbnNhY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IGZpbmlzaGVzLiBJdCBkb2VzIHRoaXMgYnkgdHJhY2tpbmcgY2hpbGQgc3BhbnMgYXMgYWN0aXZpdGllcy5cbiAqIFlvdSBjYW4gaGF2ZSBtdWx0aXBsZSBJZGxlVHJhbnNhY3Rpb25zIGFjdGl2ZSwgYnV0IGlmIHRoZSBgb25TY29wZWAgb3B0aW9uIGlzIHNwZWNpZmllZCwgdGhlIGlkbGUgdHJhbnNhY3Rpb24gd2lsbFxuICogcHV0IGl0c2VsZiBvbiB0aGUgc2NvcGUgb24gY3JlYXRpb24uXG4gKi9cblxudmFyIElkbGVUcmFuc2FjdGlvbiA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhJZGxlVHJhbnNhY3Rpb24sIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gSWRsZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uQ29udGV4dCwgX2lkbGVIdWIsXG4gIC8qKlxuICAgKiBUaGUgdGltZSB0byB3YWl0IGluIG1zIHVudGlsIHRoZSBpZGxlIHRyYW5zYWN0aW9uIHdpbGwgYmUgZmluaXNoZWQuXG4gICAqIEBkZWZhdWx0IDEwMDBcbiAgICovXG4gIF9pZGxlVGltZW91dCwgLy8gSWYgYW4gaWRsZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgcHV0IGl0c2VsZiBvbiBhbmQgb2ZmIHRoZSBzY29wZSBhdXRvbWF0aWNhbGx5LlxuICBfb25TY29wZSkge1xuICAgIGlmIChfaWRsZVRpbWVvdXQgPT09IHZvaWQgMCkge1xuICAgICAgX2lkbGVUaW1lb3V0ID0gREVGQVVMVF9JRExFX1RJTUVPVVQ7XG4gICAgfVxuXG4gICAgaWYgKF9vblNjb3BlID09PSB2b2lkIDApIHtcbiAgICAgIF9vblNjb3BlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHJhbnNhY3Rpb25Db250ZXh0LCBfaWRsZUh1YikgfHwgdGhpcztcblxuICAgIF90aGlzLl9pZGxlSHViID0gX2lkbGVIdWI7XG4gICAgX3RoaXMuX2lkbGVUaW1lb3V0ID0gX2lkbGVUaW1lb3V0O1xuICAgIF90aGlzLl9vblNjb3BlID0gX29uU2NvcGU7IC8vIEFjdGl2aXRpZXMgc3RvcmUgYSBsaXN0IG9mIGFjdGl2ZSBzcGFuc1xuXG4gICAgX3RoaXMuYWN0aXZpdGllcyA9IHt9OyAvLyBBbW91bnQgb2YgdGltZXMgaGVhcnRiZWF0IGhhcyBjb3VudGVkLiBXaWxsIGNhdXNlIHRyYW5zYWN0aW9uIHRvIGZpbmlzaCBhZnRlciAzIGJlYXRzLlxuXG4gICAgX3RoaXMuX2hlYXJ0YmVhdENvdW50ZXIgPSAwOyAvLyBXZSBzaG91bGQgbm90IHVzZSBoZWFydGJlYXQgaWYgd2UgZmluaXNoZWQgYSB0cmFuc2FjdGlvblxuXG4gICAgX3RoaXMuX2ZpbmlzaGVkID0gZmFsc2U7XG4gICAgX3RoaXMuX2JlZm9yZUZpbmlzaENhbGxiYWNrcyA9IFtdO1xuXG4gICAgaWYgKF9pZGxlSHViICYmIF9vblNjb3BlKSB7XG4gICAgICAvLyBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgYWN0aXZlIHRyYW5zYWN0aW9uIG9uIHRoZSBzY29wZVxuICAgICAgY2xlYXJBY3RpdmVUcmFuc2FjdGlvbihfaWRsZUh1Yik7IC8vIFdlIHNldCB0aGUgdHJhbnNhY3Rpb24gaGVyZSBvbiB0aGUgc2NvcGUgc28gZXJyb3IgZXZlbnRzIHBpY2sgdXAgdGhlIHRyYWNlXG4gICAgICAvLyBjb250ZXh0IGFuZCBhdHRhY2ggaXQgdG8gdGhlIGVycm9yLlxuXG4gICAgICBsb2dnZXIubG9nKFwiU2V0dGluZyBpZGxlIHRyYW5zYWN0aW9uIG9uIHNjb3BlLiBTcGFuIElEOiBcIiArIF90aGlzLnNwYW5JZCk7XG5cbiAgICAgIF9pZGxlSHViLmNvbmZpZ3VyZVNjb3BlKGZ1bmN0aW9uIChzY29wZSkge1xuICAgICAgICByZXR1cm4gc2NvcGUuc2V0U3BhbihfdGhpcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBfdGhpcy5faW5pdFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICAgIF90aGlzLmZpbmlzaCgpO1xuICAgICAgfVxuICAgIH0sIF90aGlzLl9pZGxlVGltZW91dCk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKiB7QGluaGVyaXREb2N9ICovXG5cblxuICBJZGxlVHJhbnNhY3Rpb24ucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uIChlbmRUaW1lc3RhbXApIHtcbiAgICB2YXIgZV8xLCBfYTtcblxuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoZW5kVGltZXN0YW1wID09PSB2b2lkIDApIHtcbiAgICAgIGVuZFRpbWVzdGFtcCA9IHRpbWVzdGFtcFdpdGhNcygpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2aXRpZXMgPSB7fTtcblxuICAgIGlmICh0aGlzLnNwYW5SZWNvcmRlcikge1xuICAgICAgbG9nZ2VyLmxvZygnW1RyYWNpbmddIGZpbmlzaGluZyBJZGxlVHJhbnNhY3Rpb24nLCBuZXcgRGF0ZShlbmRUaW1lc3RhbXAgKiAxMDAwKS50b0lTT1N0cmluZygpLCB0aGlzLm9wKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyh0aGlzLl9iZWZvcmVGaW5pc2hDYWxsYmFja3MpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGNhbGxiYWNrID0gX2MudmFsdWU7XG4gICAgICAgICAgY2FsbGJhY2sodGhpcywgZW5kVGltZXN0YW1wKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZV8xXzEpIHtcbiAgICAgICAgZV8xID0ge1xuICAgICAgICAgIGVycm9yOiBlXzFfMVxuICAgICAgICB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3BhblJlY29yZGVyLnNwYW5zID0gdGhpcy5zcGFuUmVjb3JkZXIuc3BhbnMuZmlsdGVyKGZ1bmN0aW9uIChzcGFuKSB7XG4gICAgICAgIC8vIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIHRyYW5zYWN0aW9uIGl0c2VsZiwgd2UganVzdCByZXR1cm4gaXRcbiAgICAgICAgaWYgKHNwYW4uc3BhbklkID09PSBfdGhpcy5zcGFuSWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyBXZSBjYW5jZWwgYWxsIHBlbmRpbmcgc3BhbnMgd2l0aCBzdGF0dXMgXCJjYW5jZWxsZWRcIiB0byBpbmRpY2F0ZSB0aGUgaWRsZSB0cmFuc2FjdGlvbiB3YXMgZmluaXNoZWQgZWFybHlcblxuXG4gICAgICAgIGlmICghc3Bhbi5lbmRUaW1lc3RhbXApIHtcbiAgICAgICAgICBzcGFuLmVuZFRpbWVzdGFtcCA9IGVuZFRpbWVzdGFtcDtcbiAgICAgICAgICBzcGFuLnNldFN0YXR1cyhTcGFuU3RhdHVzLkNhbmNlbGxlZCk7XG4gICAgICAgICAgbG9nZ2VyLmxvZygnW1RyYWNpbmddIGNhbmNlbGxpbmcgc3BhbiBzaW5jZSB0cmFuc2FjdGlvbiBlbmRlZCBlYXJseScsIEpTT04uc3RyaW5naWZ5KHNwYW4sIHVuZGVmaW5lZCwgMikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtlZXBTcGFuID0gc3Bhbi5zdGFydFRpbWVzdGFtcCA8IGVuZFRpbWVzdGFtcDtcblxuICAgICAgICBpZiAoIWtlZXBTcGFuKSB7XG4gICAgICAgICAgbG9nZ2VyLmxvZygnW1RyYWNpbmddIGRpc2NhcmRpbmcgU3BhbiBzaW5jZSBpdCBoYXBwZW5lZCBhZnRlciBUcmFuc2FjdGlvbiB3YXMgZmluaXNoZWQnLCBKU09OLnN0cmluZ2lmeShzcGFuLCB1bmRlZmluZWQsIDIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZWVwU3BhbjtcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmxvZygnW1RyYWNpbmddIGZsdXNoaW5nIElkbGVUcmFuc2FjdGlvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIubG9nKCdbVHJhY2luZ10gTm8gYWN0aXZlIElkbGVUcmFuc2FjdGlvbicpO1xuICAgIH0gLy8gdGhpcy5fb25TY29wZSBpcyB0cnVlIGlmIHRoZSB0cmFuc2FjdGlvbiB3YXMgcHJldmlvdXNseSBvbiB0aGUgc2NvcGUuXG5cblxuICAgIGlmICh0aGlzLl9vblNjb3BlKSB7XG4gICAgICBjbGVhckFjdGl2ZVRyYW5zYWN0aW9uKHRoaXMuX2lkbGVIdWIpO1xuICAgIH1cblxuICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmZpbmlzaC5jYWxsKHRoaXMsIGVuZFRpbWVzdGFtcCk7XG4gIH07XG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZ2V0cyBleGNlY3V0ZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBmaW5pc2hlcy5cbiAgICogVXNlZnVsIGZvciBjbGVhbnVwIG9yIGlmIHlvdSB3YW50IHRvIGFkZCBhbnkgYWRkaXRpb25hbCBzcGFucyBiYXNlZCBvbiBjdXJyZW50IGNvbnRleHQuXG4gICAqXG4gICAqIFRoaXMgaXMgZXhwb3NlZCBiZWNhdXNlIHVzZXJzIGhhdmUgbm8gb3RoZXIgd2F5IG9mIHJ1bm5pbmcgc29tZXRoaW5nIGJlZm9yZSBhbiBpZGxlIHRyYW5zYWN0aW9uXG4gICAqIGZpbmlzaGVzLlxuICAgKi9cblxuXG4gIElkbGVUcmFuc2FjdGlvbi5wcm90b3R5cGUucmVnaXN0ZXJCZWZvcmVGaW5pc2hDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHRoaXMuX2JlZm9yZUZpbmlzaENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgSWRsZVRyYW5zYWN0aW9uLnByb3RvdHlwZS5pbml0U3BhblJlY29yZGVyID0gZnVuY3Rpb24gKG1heGxlbikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuc3BhblJlY29yZGVyKSB7XG4gICAgICB2YXIgcHVzaEFjdGl2aXR5ID0gZnVuY3Rpb24gcHVzaEFjdGl2aXR5KGlkKSB7XG4gICAgICAgIGlmIChfdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5fcHVzaEFjdGl2aXR5KGlkKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBwb3BBY3Rpdml0eSA9IGZ1bmN0aW9uIHBvcEFjdGl2aXR5KGlkKSB7XG4gICAgICAgIGlmIChfdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5fcG9wQWN0aXZpdHkoaWQpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5zcGFuUmVjb3JkZXIgPSBuZXcgSWRsZVRyYW5zYWN0aW9uU3BhblJlY29yZGVyKHB1c2hBY3Rpdml0eSwgcG9wQWN0aXZpdHksIHRoaXMuc3BhbklkLCBtYXhsZW4pOyAvLyBTdGFydCBoZWFydGJlYXQgc28gdGhhdCB0cmFuc2FjdGlvbnMgZG8gbm90IHJ1biBmb3JldmVyLlxuXG4gICAgICBsb2dnZXIubG9nKCdTdGFydGluZyBoZWFydGJlYXQnKTtcblxuICAgICAgdGhpcy5fcGluZ0hlYXJ0YmVhdCgpO1xuICAgIH1cblxuICAgIHRoaXMuc3BhblJlY29yZGVyLmFkZCh0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIFN0YXJ0IHRyYWNraW5nIGEgc3BlY2lmaWMgYWN0aXZpdHkuXG4gICAqIEBwYXJhbSBzcGFuSWQgVGhlIHNwYW4gaWQgdGhhdCByZXByZXNlbnRzIHRoZSBhY3Rpdml0eVxuICAgKi9cblxuXG4gIElkbGVUcmFuc2FjdGlvbi5wcm90b3R5cGUuX3B1c2hBY3Rpdml0eSA9IGZ1bmN0aW9uIChzcGFuSWQpIHtcbiAgICBpZiAodGhpcy5faW5pdFRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9pbml0VGltZW91dCk7XG4gICAgICB0aGlzLl9pbml0VGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKFwiW1RyYWNpbmddIHB1c2hBY3Rpdml0eTogXCIgKyBzcGFuSWQpO1xuICAgIHRoaXMuYWN0aXZpdGllc1tzcGFuSWRdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKCdbVHJhY2luZ10gbmV3IGFjdGl2aXRpZXMgY291bnQnLCBPYmplY3Qua2V5cyh0aGlzLmFjdGl2aXRpZXMpLmxlbmd0aCk7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYWN0aXZpdHkgZnJvbSB1c2FnZVxuICAgKiBAcGFyYW0gc3BhbklkIFRoZSBzcGFuIGlkIHRoYXQgcmVwcmVzZW50cyB0aGUgYWN0aXZpdHlcbiAgICovXG5cblxuICBJZGxlVHJhbnNhY3Rpb24ucHJvdG90eXBlLl9wb3BBY3Rpdml0eSA9IGZ1bmN0aW9uIChzcGFuSWQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuYWN0aXZpdGllc1tzcGFuSWRdKSB7XG4gICAgICBsb2dnZXIubG9nKFwiW1RyYWNpbmddIHBvcEFjdGl2aXR5IFwiICsgc3BhbklkKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuXG4gICAgICBkZWxldGUgdGhpcy5hY3Rpdml0aWVzW3NwYW5JZF07XG4gICAgICBsb2dnZXIubG9nKCdbVHJhY2luZ10gbmV3IGFjdGl2aXRpZXMgY291bnQnLCBPYmplY3Qua2V5cyh0aGlzLmFjdGl2aXRpZXMpLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuYWN0aXZpdGllcykubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgdGltZW91dCA9IHRoaXMuX2lkbGVUaW1lb3V0OyAvLyBXZSBuZWVkIHRvIGFkZCB0aGUgdGltZW91dCBoZXJlIHRvIGhhdmUgdGhlIHJlYWwgZW5kdGltZXN0YW1wIG9mIHRoZSB0cmFuc2FjdGlvblxuICAgICAgLy8gUmVtZW1iZXIgdGltZXN0YW1wV2l0aE1zIGlzIGluIHNlY29uZHMsIHRpbWVvdXQgaXMgaW4gbXNcblxuICAgICAgdmFyIGVuZF8xID0gdGltZXN0YW1wV2l0aE1zKCkgKyB0aW1lb3V0IC8gMTAwMDtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzLl9maW5pc2hlZCkge1xuICAgICAgICAgIF90aGlzLmZpbmlzaChlbmRfMSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrcyB3aGVuIGVudHJpZXMgb2YgdGhpcy5hY3Rpdml0aWVzIGFyZSBub3QgY2hhbmdpbmcgZm9yIDMgYmVhdHMuXG4gICAqIElmIHRoaXMgb2NjdXJzIHdlIGZpbmlzaCB0aGUgdHJhbnNhY3Rpb24uXG4gICAqL1xuXG5cbiAgSWRsZVRyYW5zYWN0aW9uLnByb3RvdHlwZS5fYmVhdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaGVhcnRiZWF0IGlmIHRoZSBpZGxlIHRyYW5zYWN0aW9uIGlzIGZpbmlzaGVkLlxuICAgIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBoZWFydGJlYXRTdHJpbmcgPSBPYmplY3Qua2V5cyh0aGlzLmFjdGl2aXRpZXMpLmpvaW4oJycpO1xuXG4gICAgaWYgKGhlYXJ0YmVhdFN0cmluZyA9PT0gdGhpcy5fcHJldkhlYXJ0YmVhdFN0cmluZykge1xuICAgICAgdGhpcy5faGVhcnRiZWF0Q291bnRlciArPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9oZWFydGJlYXRDb3VudGVyID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLl9wcmV2SGVhcnRiZWF0U3RyaW5nID0gaGVhcnRiZWF0U3RyaW5nO1xuXG4gICAgaWYgKHRoaXMuX2hlYXJ0YmVhdENvdW50ZXIgPj0gMykge1xuICAgICAgbG9nZ2VyLmxvZyhcIltUcmFjaW5nXSBUcmFuc2FjdGlvbiBmaW5pc2hlZCBiZWNhdXNlIG9mIG5vIGNoYW5nZSBmb3IgMyBoZWFydCBiZWF0c1wiKTtcbiAgICAgIHRoaXMuc2V0U3RhdHVzKFNwYW5TdGF0dXMuRGVhZGxpbmVFeGNlZWRlZCk7XG4gICAgICB0aGlzLnNldFRhZygnaGVhcnRiZWF0JywgJ2ZhaWxlZCcpO1xuICAgICAgdGhpcy5maW5pc2goKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcGluZ0hlYXJ0YmVhdCgpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIFBpbmdzIHRoZSBoZWFydGJlYXRcbiAgICovXG5cblxuICBJZGxlVHJhbnNhY3Rpb24ucHJvdG90eXBlLl9waW5nSGVhcnRiZWF0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBsb2dnZXIubG9nKFwicGluZ2luZyBIZWFydGJlYXQgLT4gY3VycmVudCBjb3VudGVyOiBcIiArIHRoaXMuX2hlYXJ0YmVhdENvdW50ZXIpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuX2JlYXQoKTtcbiAgICB9LCBIRUFSVEJFQVRfSU5URVJWQUwpO1xuICB9O1xuXG4gIHJldHVybiBJZGxlVHJhbnNhY3Rpb247XG59KFRyYW5zYWN0aW9uKTtcblxuZXhwb3J0IHsgSWRsZVRyYW5zYWN0aW9uIH07XG4vKipcbiAqIFJlc2V0IGFjdGl2ZSB0cmFuc2FjdGlvbiBvbiBzY29wZVxuICovXG5cbmZ1bmN0aW9uIGNsZWFyQWN0aXZlVHJhbnNhY3Rpb24oaHViKSB7XG4gIGlmIChodWIpIHtcbiAgICB2YXIgc2NvcGUgPSBodWIuZ2V0U2NvcGUoKTtcblxuICAgIGlmIChzY29wZSkge1xuICAgICAgdmFyIHRyYW5zYWN0aW9uID0gc2NvcGUuZ2V0VHJhbnNhY3Rpb24oKTtcblxuICAgICAgaWYgKHRyYW5zYWN0aW9uKSB7XG4gICAgICAgIHNjb3BlLnNldFNwYW4odW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1441\n")},7374:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"IdleTransaction\": function() { return /* reexport */ idletransaction/* IdleTransaction */.io; },\n \"Integrations\": function() { return /* binding */ Integrations; },\n \"Span\": function() { return /* reexport */ span/* Span */.D; },\n \"SpanStatus\": function() { return /* reexport */ spanstatus/* SpanStatus */.p; },\n \"TRACEPARENT_REGEXP\": function() { return /* reexport */ utils/* TRACEPARENT_REGEXP */.Ke; },\n \"Transaction\": function() { return /* reexport */ transaction/* Transaction */.Y; },\n \"addExtensionMethods\": function() { return /* reexport */ hubextensions/* addExtensionMethods */.ro; },\n \"defaultRequestInstrumentationOptions\": function() { return /* reexport */ defaultRequestInstrumentationOptions; },\n \"extractTraceparentData\": function() { return /* reexport */ utils/* extractTraceparentData */.qG; },\n \"getActiveTransaction\": function() { return /* reexport */ utils/* getActiveTransaction */.x1; },\n \"hasTracingEnabled\": function() { return /* reexport */ utils/* hasTracingEnabled */.zu; },\n \"registerRequestInstrumentation\": function() { return /* reexport */ instrumentOutgoingRequests; },\n \"startIdleTransaction\": function() { return /* reexport */ hubextensions/* startIdleTransaction */.lb; },\n \"stripUrlQueryAndFragment\": function() { return /* reexport */ misc/* stripUrlQueryAndFragment */.rt; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/@sentry/tracing/esm/integrations/index.js\nvar integrations_namespaceObject = {};\n__webpack_require__.r(integrations_namespaceObject);\n__webpack_require__.d(integrations_namespaceObject, {\n \"Express\": function() { return Express; },\n \"Mongo\": function() { return Mongo; },\n \"Mysql\": function() { return Mysql; },\n \"Postgres\": function() { return Postgres; }\n});\n\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/node_modules/tslib/tslib.es6.js\nvar tslib_es6 = __webpack_require__(7870);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/logger.js\nvar logger = __webpack_require__(245);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/misc.js\nvar misc = __webpack_require__(2861);\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/esm/hubextensions.js + 2 modules\nvar hubextensions = __webpack_require__(6275);\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/esm/idletransaction.js\nvar idletransaction = __webpack_require__(1441);\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/esm/spanstatus.js\nvar spanstatus = __webpack_require__(6314);\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/esm/utils.js\nvar utils = __webpack_require__(2662);\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/backgroundtab.js\n\n\n\nvar global = (0,misc/* getGlobalObject */.Rf)();\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\n\nfunction registerBackgroundTabDetection() {\n if (global && global.document) {\n global.document.addEventListener('visibilitychange', function () {\n var activeTransaction = (0,utils/* getActiveTransaction */.x1)();\n\n if (global.document.hidden && activeTransaction) {\n logger/* logger.log */.k.log(\"[Tracing] Transaction: \" + spanstatus/* SpanStatus.Cancelled */.p.Cancelled + \" -> since tab moved to the background, op: \" + activeTransaction.op); // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n\n if (!activeTransaction.status) {\n activeTransaction.setStatus(spanstatus/* SpanStatus.Cancelled */.p.Cancelled);\n }\n\n activeTransaction.setTag('visibilitychange', 'document.hidden');\n activeTransaction.finish();\n }\n });\n } else {\n logger/* logger.warn */.k.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/node.js\nvar node = __webpack_require__(7864);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/time.js\nvar time = __webpack_require__(5153);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/browser.js\nvar browser = __webpack_require__(595);\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/bindReporter.js\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar bindReporter = function bindReporter(callback, metric, reportAllChanges) {\n var prevValue;\n return function (forceReport) {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n metric.delta = metric.value - (prevValue || 0); // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n\n if (metric.delta || prevValue === undefined) {\n prevValue = metric.value;\n callback(metric);\n }\n }\n }\n };\n};\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/generateUniqueID.js\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nvar generateUniqueID = function generateUniqueID() {\n return \"v2-\" + Date.now() + \"-\" + (Math.floor(Math.random() * (9e12 - 1)) + 1e12);\n};\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/initMetric.js\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar initMetric = function initMetric(name, value) {\n return {\n name: name,\n value: value !== null && value !== void 0 ? value : -1,\n delta: 0,\n entries: [],\n id: generateUniqueID()\n };\n};\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/observe.js\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nvar observe = function observe(type, callback) {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n // More extensive feature detect needed for Firefox due to:\n // https://github.com/GoogleChrome/web-vitals/issues/142\n if (type === 'first-input' && !('PerformanceEventTiming' in self)) {\n return;\n }\n\n var po = new PerformanceObserver(function (l) {\n return l.getEntries().map(callback);\n });\n po.observe({\n type: type,\n buffered: true\n });\n return po;\n }\n } catch (e) {// Do nothing.\n }\n\n return;\n};\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/onHidden.js\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar onHidden = function onHidden(cb, once) {\n var onHiddenOrPageHide = function onHiddenOrPageHide(event) {\n if (event.type === 'pagehide' || (0,misc/* getGlobalObject */.Rf)().document.visibilityState === 'hidden') {\n cb(event);\n\n if (once) {\n removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n removeEventListener('pagehide', onHiddenOrPageHide, true);\n }\n }\n };\n\n addEventListener('visibilitychange', onHiddenOrPageHide, true); // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n\n addEventListener('pagehide', onHiddenOrPageHide, true);\n};\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/web-vitals/getCLS.js\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n\n\nvar getCLS = function getCLS(onReport, reportAllChanges) {\n var metric = initMetric('CLS', 0);\n var report;\n var sessionValue = 0;\n var sessionEntries = [];\n\n var entryHandler = function entryHandler(entry) {\n // Only count layout shifts without recent user input.\n // TODO: Figure out why entry can be undefined\n if (entry && !entry.hadRecentInput) {\n var firstSessionEntry = sessionEntries[0];\n var lastSessionEntry = sessionEntries[sessionEntries.length - 1]; // If the entry occurred less than 1 second after the previous entry and\n // less than 5 seconds after the first entry in the session, include the\n // entry in the current session. Otherwise, start a new session.\n\n if (sessionValue && sessionEntries.length !== 0 && entry.startTime - lastSessionEntry.startTime < 1000 && entry.startTime - firstSessionEntry.startTime < 5000) {\n sessionValue += entry.value;\n sessionEntries.push(entry);\n } else {\n sessionValue = entry.value;\n sessionEntries = [entry];\n } // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n\n\n if (sessionValue > metric.value) {\n metric.value = sessionValue;\n metric.entries = sessionEntries;\n\n if (report) {\n report();\n }\n }\n }\n };\n\n var po = observe('layout-shift', entryHandler);\n\n if (po) {\n report = bindReporter(onReport, metric, reportAllChanges);\n onHidden(function () {\n po.takeRecords().map(entryHandler);\n report(true);\n });\n }\n};\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/getVisibilityWatcher.js\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nvar firstHiddenTime = -1;\n\nvar initHiddenTime = function initHiddenTime() {\n return (0,misc/* getGlobalObject */.Rf)().document.visibilityState === 'hidden' ? 0 : Infinity;\n};\n\nvar trackChanges = function trackChanges() {\n // Update the time if/when the document becomes hidden.\n onHidden(function (_a) {\n var timeStamp = _a.timeStamp;\n firstHiddenTime = timeStamp;\n }, true);\n};\n\nvar getVisibilityWatcher = function getVisibilityWatcher() {\n if (firstHiddenTime < 0) {\n // If the document is hidden when this code runs, assume it was hidden\n // since navigation start. This isn't a perfect heuristic, but it's the\n // best we can do until an API is available to support querying past\n // visibilityState.\n firstHiddenTime = initHiddenTime();\n trackChanges();\n }\n\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n }\n\n };\n};\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/web-vitals/getFID.js\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n\n\n\nvar getFID = function getFID(onReport, reportAllChanges) {\n var visibilityWatcher = getVisibilityWatcher();\n var metric = initMetric('FID');\n var report;\n\n var entryHandler = function entryHandler(entry) {\n // Only report if the page wasn't hidden prior to the first input.\n if (report && entry.startTime < visibilityWatcher.firstHiddenTime) {\n metric.value = entry.processingStart - entry.startTime;\n metric.entries.push(entry);\n report(true);\n }\n };\n\n var po = observe('first-input', entryHandler);\n\n if (po) {\n report = bindReporter(onReport, metric, reportAllChanges);\n onHidden(function () {\n po.takeRecords().map(entryHandler);\n po.disconnect();\n }, true);\n }\n};\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/web-vitals/getLCP.js\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n\n\n\nvar reportedMetricIDs = {};\nvar getLCP = function getLCP(onReport, reportAllChanges) {\n var visibilityWatcher = getVisibilityWatcher();\n var metric = initMetric('LCP');\n var report;\n\n var entryHandler = function entryHandler(entry) {\n // The startTime attribute returns the value of the renderTime if it is not 0,\n // and the value of the loadTime otherwise.\n var value = entry.startTime; // If the page was hidden prior to paint time of the entry,\n // ignore it and mark the metric as final, otherwise add the entry.\n\n if (value < visibilityWatcher.firstHiddenTime) {\n metric.value = value;\n metric.entries.push(entry);\n }\n\n if (report) {\n report();\n }\n };\n\n var po = observe('largest-contentful-paint', entryHandler);\n\n if (po) {\n report = bindReporter(onReport, metric, reportAllChanges);\n\n var stopListening_1 = function stopListening_1() {\n if (!reportedMetricIDs[metric.id]) {\n po.takeRecords().map(entryHandler);\n po.disconnect();\n reportedMetricIDs[metric.id] = true;\n report(true);\n }\n }; // Stop listening after input. Note: while scrolling is an input that\n // stop LCP observation, it's unreliable since it can be programmatically\n // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n\n\n ['keydown', 'click'].forEach(function (type) {\n addEventListener(type, stopListening_1, {\n once: true,\n capture: true\n });\n });\n onHidden(stopListening_1, true);\n }\n};\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/metrics.js\n\n\n\n\n\n\n\nvar metrics_global = (0,misc/* getGlobalObject */.Rf)();\nvar DEFAULT_METRICS_INSTR_OPTIONS = {\n _reportAllChanges: false\n};\n/** Class tracking metrics */\n\nvar MetricsInstrumentation =\n/** @class */\nfunction () {\n function MetricsInstrumentation(_options) {\n var _a, _b;\n\n this._measurements = {};\n this._performanceCursor = 0;\n\n if (!(0,node/* isNodeEnv */.KV)() && ((_a = metrics_global) === null || _a === void 0 ? void 0 : _a.performance) && ((_b = metrics_global) === null || _b === void 0 ? void 0 : _b.document)) {\n if (metrics_global.performance.mark) {\n metrics_global.performance.mark('sentry-tracing-init');\n }\n\n this._trackCLS();\n\n this._trackLCP(_options._reportAllChanges);\n\n this._trackFID();\n }\n }\n /** Add performance related spans to a transaction */\n\n\n MetricsInstrumentation.prototype.addPerformanceEntries = function (transaction) {\n var _this = this;\n\n if (!metrics_global || !metrics_global.performance || !metrics_global.performance.getEntries || !time/* browserPerformanceTimeOrigin */.Z1) {\n // Gatekeeper if performance API not available\n return;\n }\n\n logger/* logger.log */.k.log('[Tracing] Adding & adjusting spans using Performance API');\n var timeOrigin = (0,utils/* msToSec */.XL)(time/* browserPerformanceTimeOrigin */.Z1);\n var entryScriptSrc;\n\n if (metrics_global.document && metrics_global.document.scripts) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (var i = 0; i < metrics_global.document.scripts.length; i++) {\n // We go through all scripts on the page and look for 'data-entry'\n // We remember the name and measure the time between this script finished loading and\n // our mark 'sentry-tracing-init'\n if (metrics_global.document.scripts[i].dataset.entry === 'true') {\n entryScriptSrc = metrics_global.document.scripts[i].src;\n break;\n }\n }\n }\n\n var entryScriptStartTimestamp;\n var tracingInitMarkStartTime;\n var responseStartTimestamp;\n var requestStartTimestamp;\n metrics_global.performance.getEntries().slice(this._performanceCursor).forEach(function (entry) {\n var startTime = (0,utils/* msToSec */.XL)(entry.startTime);\n var duration = (0,utils/* msToSec */.XL)(entry.duration);\n\n if (transaction.op === 'navigation' && timeOrigin + startTime < transaction.startTimestamp) {\n return;\n }\n\n switch (entry.entryType) {\n case 'navigation':\n {\n addNavigationSpans(transaction, entry, timeOrigin);\n responseStartTimestamp = timeOrigin + (0,utils/* msToSec */.XL)(entry.responseStart);\n requestStartTimestamp = timeOrigin + (0,utils/* msToSec */.XL)(entry.requestStart);\n break;\n }\n\n case 'mark':\n case 'paint':\n case 'measure':\n {\n var startTimestamp = addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n\n if (tracingInitMarkStartTime === undefined && entry.name === 'sentry-tracing-init') {\n tracingInitMarkStartTime = startTimestamp;\n } // capture web vitals\n\n\n var firstHidden = getVisibilityWatcher(); // Only report if the page wasn't hidden prior to the web vital.\n\n var shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n if (entry.name === 'first-paint' && shouldRecord) {\n logger/* logger.log */.k.log('[Measurements] Adding FP');\n _this._measurements['fp'] = {\n value: entry.startTime\n };\n _this._measurements['mark.fp'] = {\n value: startTimestamp\n };\n }\n\n if (entry.name === 'first-contentful-paint' && shouldRecord) {\n logger/* logger.log */.k.log('[Measurements] Adding FCP');\n _this._measurements['fcp'] = {\n value: entry.startTime\n };\n _this._measurements['mark.fcp'] = {\n value: startTimestamp\n };\n }\n\n break;\n }\n\n case 'resource':\n {\n var resourceName = entry.name.replace(metrics_global.location.origin, '');\n var endTimestamp = addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin); // We remember the entry script end time to calculate the difference to the first init mark\n\n if (entryScriptStartTimestamp === undefined && (entryScriptSrc || '').indexOf(resourceName) > -1) {\n entryScriptStartTimestamp = endTimestamp;\n }\n\n break;\n }\n\n default: // Ignore other entry types.\n\n }\n });\n\n if (entryScriptStartTimestamp !== undefined && tracingInitMarkStartTime !== undefined) {\n _startChild(transaction, {\n description: 'evaluation',\n endTimestamp: tracingInitMarkStartTime,\n op: 'script',\n startTimestamp: entryScriptStartTimestamp\n });\n }\n\n this._performanceCursor = Math.max(performance.getEntries().length - 1, 0);\n\n this._trackNavigator(transaction); // Measurements are only available for pageload transactions\n\n\n if (transaction.op === 'pageload') {\n // normalize applicable web vital values to be relative to transaction.startTimestamp\n var timeOrigin_1 = (0,utils/* msToSec */.XL)(time/* browserPerformanceTimeOrigin */.Z1); // Generate TTFB (Time to First Byte), which measured as the time between the beginning of the transaction and the\n // start of the response in milliseconds\n\n if (typeof responseStartTimestamp === 'number') {\n logger/* logger.log */.k.log('[Measurements] Adding TTFB');\n this._measurements['ttfb'] = {\n value: (responseStartTimestamp - transaction.startTimestamp) * 1000\n };\n\n if (typeof requestStartTimestamp === 'number' && requestStartTimestamp <= responseStartTimestamp) {\n // Capture the time spent making the request and receiving the first byte of the response.\n // This is the time between the start of the request and the start of the response in milliseconds.\n this._measurements['ttfb.requestTime'] = {\n value: (responseStartTimestamp - requestStartTimestamp) * 1000\n };\n }\n }\n\n ['fcp', 'fp', 'lcp'].forEach(function (name) {\n if (!_this._measurements[name] || timeOrigin_1 >= transaction.startTimestamp) {\n return;\n } // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n // to be adjusted to be relative to transaction.startTimestamp.\n\n\n var oldValue = _this._measurements[name].value;\n var measurementTimestamp = timeOrigin_1 + (0,utils/* msToSec */.XL)(oldValue); // normalizedValue should be in milliseconds\n\n var normalizedValue = Math.abs((measurementTimestamp - transaction.startTimestamp) * 1000);\n var delta = normalizedValue - oldValue;\n logger/* logger.log */.k.log(\"[Measurements] Normalized \" + name + \" from \" + oldValue + \" to \" + normalizedValue + \" (\" + delta + \")\");\n _this._measurements[name].value = normalizedValue;\n });\n\n if (this._measurements['mark.fid'] && this._measurements['fid']) {\n // create span for FID\n _startChild(transaction, {\n description: 'first input delay',\n endTimestamp: this._measurements['mark.fid'].value + (0,utils/* msToSec */.XL)(this._measurements['fid'].value),\n op: 'web.vitals',\n startTimestamp: this._measurements['mark.fid'].value\n });\n } // If FCP is not recorded we should not record the cls value\n // according to the new definition of CLS.\n\n\n if (!('fcp' in this._measurements)) {\n delete this._measurements.cls;\n }\n\n transaction.setMeasurements(this._measurements);\n\n this._tagMetricInfo(transaction);\n }\n };\n /** Add LCP / CLS data to transaction to allow debugging */\n\n\n MetricsInstrumentation.prototype._tagMetricInfo = function (transaction) {\n if (this._lcpEntry) {\n logger/* logger.log */.k.log('[Measurements] Adding LCP Data'); // Capture Properties of the LCP element that contributes to the LCP.\n\n if (this._lcpEntry.element) {\n transaction.setTag('lcp.element', (0,browser/* htmlTreeAsString */.R)(this._lcpEntry.element));\n }\n\n if (this._lcpEntry.id) {\n transaction.setTag('lcp.id', this._lcpEntry.id);\n }\n\n if (this._lcpEntry.url) {\n // Trim URL to the first 200 characters.\n transaction.setTag('lcp.url', this._lcpEntry.url.trim().slice(0, 200));\n }\n\n transaction.setTag('lcp.size', this._lcpEntry.size);\n } // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n\n\n if (this._clsEntry && this._clsEntry.sources) {\n logger/* logger.log */.k.log('[Measurements] Adding CLS Data');\n\n this._clsEntry.sources.forEach(function (source, index) {\n return transaction.setTag(\"cls.source.\" + (index + 1), (0,browser/* htmlTreeAsString */.R)(source.node));\n });\n }\n };\n /** Starts tracking the Cumulative Layout Shift on the current page. */\n\n\n MetricsInstrumentation.prototype._trackCLS = function () {\n var _this = this; // See:\n // https://web.dev/evolving-cls/\n // https://web.dev/cls-web-tooling/\n\n\n getCLS(function (metric) {\n var entry = metric.entries.pop();\n\n if (!entry) {\n return;\n }\n\n logger/* logger.log */.k.log('[Measurements] Adding CLS');\n _this._measurements['cls'] = {\n value: metric.value\n };\n _this._clsEntry = entry;\n });\n };\n /**\n * Capture the information of the user agent.\n */\n\n\n MetricsInstrumentation.prototype._trackNavigator = function (transaction) {\n var navigator = metrics_global.navigator;\n\n if (!navigator) {\n return;\n } // track network connectivity\n\n\n var connection = navigator.connection;\n\n if (connection) {\n if (connection.effectiveType) {\n transaction.setTag('effectiveConnectionType', connection.effectiveType);\n }\n\n if (connection.type) {\n transaction.setTag('connectionType', connection.type);\n }\n\n if (isMeasurementValue(connection.rtt)) {\n this._measurements['connection.rtt'] = {\n value: connection.rtt\n };\n }\n\n if (isMeasurementValue(connection.downlink)) {\n this._measurements['connection.downlink'] = {\n value: connection.downlink\n };\n }\n }\n\n if (isMeasurementValue(navigator.deviceMemory)) {\n transaction.setTag('deviceMemory', String(navigator.deviceMemory));\n }\n\n if (isMeasurementValue(navigator.hardwareConcurrency)) {\n transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n }\n };\n /** Starts tracking the Largest Contentful Paint on the current page. */\n\n\n MetricsInstrumentation.prototype._trackLCP = function (reportAllChanges) {\n var _this = this;\n\n getLCP(function (metric) {\n var entry = metric.entries.pop();\n\n if (!entry) {\n return;\n }\n\n var timeOrigin = (0,utils/* msToSec */.XL)(time/* browserPerformanceTimeOrigin */.Z1);\n var startTime = (0,utils/* msToSec */.XL)(entry.startTime);\n logger/* logger.log */.k.log('[Measurements] Adding LCP');\n _this._measurements['lcp'] = {\n value: metric.value\n };\n _this._measurements['mark.lcp'] = {\n value: timeOrigin + startTime\n };\n _this._lcpEntry = entry;\n }, reportAllChanges);\n };\n /** Starts tracking the First Input Delay on the current page. */\n\n\n MetricsInstrumentation.prototype._trackFID = function () {\n var _this = this;\n\n getFID(function (metric) {\n var entry = metric.entries.pop();\n\n if (!entry) {\n return;\n }\n\n var timeOrigin = (0,utils/* msToSec */.XL)(time/* browserPerformanceTimeOrigin */.Z1);\n var startTime = (0,utils/* msToSec */.XL)(entry.startTime);\n logger/* logger.log */.k.log('[Measurements] Adding FID');\n _this._measurements['fid'] = {\n value: metric.value\n };\n _this._measurements['mark.fid'] = {\n value: timeOrigin + startTime\n };\n });\n };\n\n return MetricsInstrumentation;\n}();\n\n\n/** Instrument navigation entries */\n\nfunction addNavigationSpans(transaction, entry, timeOrigin) {\n addPerformanceNavigationTiming({\n transaction: transaction,\n entry: entry,\n event: 'unloadEvent',\n timeOrigin: timeOrigin\n });\n addPerformanceNavigationTiming({\n transaction: transaction,\n entry: entry,\n event: 'redirect',\n timeOrigin: timeOrigin\n });\n addPerformanceNavigationTiming({\n transaction: transaction,\n entry: entry,\n event: 'domContentLoadedEvent',\n timeOrigin: timeOrigin\n });\n addPerformanceNavigationTiming({\n transaction: transaction,\n entry: entry,\n event: 'loadEvent',\n timeOrigin: timeOrigin\n });\n addPerformanceNavigationTiming({\n transaction: transaction,\n entry: entry,\n event: 'connect',\n timeOrigin: timeOrigin\n });\n addPerformanceNavigationTiming({\n transaction: transaction,\n entry: entry,\n event: 'secureConnection',\n timeOrigin: timeOrigin,\n eventEnd: 'connectEnd',\n description: 'TLS/SSL'\n });\n addPerformanceNavigationTiming({\n transaction: transaction,\n entry: entry,\n event: 'fetch',\n timeOrigin: timeOrigin,\n eventEnd: 'domainLookupStart',\n description: 'cache'\n });\n addPerformanceNavigationTiming({\n transaction: transaction,\n entry: entry,\n event: 'domainLookup',\n timeOrigin: timeOrigin,\n description: 'DNS'\n });\n addRequest(transaction, entry, timeOrigin);\n}\n/** Create measure related spans */\n\n\nfunction addMeasureSpans(transaction, entry, startTime, duration, timeOrigin) {\n var measureStartTimestamp = timeOrigin + startTime;\n var measureEndTimestamp = measureStartTimestamp + duration;\n\n _startChild(transaction, {\n description: entry.name,\n endTimestamp: measureEndTimestamp,\n op: entry.entryType,\n startTimestamp: measureStartTimestamp\n });\n\n return measureStartTimestamp;\n}\n/** Create resource-related spans */\n\n\nfunction addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin) {\n // we already instrument based on fetch and xhr, so we don't need to\n // duplicate spans here.\n if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n return undefined;\n }\n\n var data = {};\n\n if ('transferSize' in entry) {\n data['Transfer Size'] = entry.transferSize;\n }\n\n if ('encodedBodySize' in entry) {\n data['Encoded Body Size'] = entry.encodedBodySize;\n }\n\n if ('decodedBodySize' in entry) {\n data['Decoded Body Size'] = entry.decodedBodySize;\n }\n\n var startTimestamp = timeOrigin + startTime;\n var endTimestamp = startTimestamp + duration;\n\n _startChild(transaction, {\n description: resourceName,\n endTimestamp: endTimestamp,\n op: entry.initiatorType ? \"resource.\" + entry.initiatorType : 'resource',\n startTimestamp: startTimestamp,\n data: data\n });\n\n return endTimestamp;\n}\n/** Create performance navigation related spans */\n\nfunction addPerformanceNavigationTiming(props) {\n var transaction = props.transaction,\n entry = props.entry,\n event = props.event,\n timeOrigin = props.timeOrigin,\n eventEnd = props.eventEnd,\n description = props.description;\n var end = eventEnd ? entry[eventEnd] : entry[event + \"End\"];\n var start = entry[event + \"Start\"];\n\n if (!start || !end) {\n return;\n }\n\n _startChild(transaction, {\n op: 'browser',\n description: description !== null && description !== void 0 ? description : event,\n startTimestamp: timeOrigin + (0,utils/* msToSec */.XL)(start),\n endTimestamp: timeOrigin + (0,utils/* msToSec */.XL)(end)\n });\n}\n/** Create request and response related spans */\n\n\nfunction addRequest(transaction, entry, timeOrigin) {\n _startChild(transaction, {\n op: 'browser',\n description: 'request',\n startTimestamp: timeOrigin + (0,utils/* msToSec */.XL)(entry.requestStart),\n endTimestamp: timeOrigin + (0,utils/* msToSec */.XL)(entry.responseEnd)\n });\n\n _startChild(transaction, {\n op: 'browser',\n description: 'response',\n startTimestamp: timeOrigin + (0,utils/* msToSec */.XL)(entry.responseStart),\n endTimestamp: timeOrigin + (0,utils/* msToSec */.XL)(entry.responseEnd)\n });\n}\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\n\n\nfunction _startChild(transaction, _a) {\n var startTimestamp = _a.startTimestamp,\n ctx = (0,tslib_es6/* __rest */._T)(_a, [\"startTimestamp\"]);\n\n if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n transaction.startTimestamp = startTimestamp;\n }\n\n return transaction.startChild((0,tslib_es6/* __assign */.pi)({\n startTimestamp: startTimestamp\n }, ctx));\n}\n/**\n * Checks if a given value is a valid measurement value.\n */\n\nfunction isMeasurementValue(value) {\n return typeof value === 'number' && isFinite(value);\n}\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/string.js\nvar string = __webpack_require__(7940);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/instrument.js\nvar instrument = __webpack_require__(6710);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/is.js\nvar is = __webpack_require__(2684);\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/request.js\n\n\n\n\nvar DEFAULT_TRACING_ORIGINS = ['localhost', /^\\//];\nvar defaultRequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n tracingOrigins: DEFAULT_TRACING_ORIGINS\n};\n/** Registers span creators for xhr and fetch requests */\n\nfunction instrumentOutgoingRequests(_options) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var _a = (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, defaultRequestInstrumentationOptions), _options),\n traceFetch = _a.traceFetch,\n traceXHR = _a.traceXHR,\n tracingOrigins = _a.tracingOrigins,\n shouldCreateSpanForRequest = _a.shouldCreateSpanForRequest; // We should cache url -> decision so that we don't have to compute\n // regexp everytime we create a request.\n\n\n var urlMap = {};\n\n var defaultShouldCreateSpan = function defaultShouldCreateSpan(url) {\n if (urlMap[url]) {\n return urlMap[url];\n }\n\n var origins = tracingOrigins;\n urlMap[url] = origins.some(function (origin) {\n return (0,string/* isMatchingPattern */.zC)(url, origin);\n }) && !(0,string/* isMatchingPattern */.zC)(url, 'sentry_key');\n return urlMap[url];\n }; // We want that our users don't have to re-implement shouldCreateSpanForRequest themselves\n // That's why we filter out already unwanted Spans from tracingOrigins\n\n\n var shouldCreateSpan = defaultShouldCreateSpan;\n\n if (typeof shouldCreateSpanForRequest === 'function') {\n shouldCreateSpan = function shouldCreateSpan(url) {\n return defaultShouldCreateSpan(url) && shouldCreateSpanForRequest(url);\n };\n }\n\n var spans = {};\n\n if (traceFetch) {\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: function callback(handlerData) {\n fetchCallback(handlerData, shouldCreateSpan, spans);\n },\n type: 'fetch'\n });\n }\n\n if (traceXHR) {\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: function callback(handlerData) {\n xhrCallback(handlerData, shouldCreateSpan, spans);\n },\n type: 'xhr'\n });\n }\n}\n/**\n * Create and track fetch request spans\n */\n\nfunction fetchCallback(handlerData, shouldCreateSpan, spans) {\n if (!(0,utils/* hasTracingEnabled */.zu)() || !(handlerData.fetchData && shouldCreateSpan(handlerData.fetchData.url))) {\n return;\n }\n\n if (handlerData.endTimestamp && handlerData.fetchData.__span) {\n var span = spans[handlerData.fetchData.__span];\n\n if (span) {\n if (handlerData.response) {\n // TODO (kmclb) remove this once types PR goes through\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n span.setHttpStatus(handlerData.response.status);\n } else if (handlerData.error) {\n span.setStatus(spanstatus/* SpanStatus.InternalError */.p.InternalError);\n }\n\n span.finish(); // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\n delete spans[handlerData.fetchData.__span];\n }\n\n return;\n }\n\n var activeTransaction = (0,utils/* getActiveTransaction */.x1)();\n\n if (activeTransaction) {\n var span = activeTransaction.startChild({\n data: (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, handlerData.fetchData), {\n type: 'fetch'\n }),\n description: handlerData.fetchData.method + \" \" + handlerData.fetchData.url,\n op: 'http.client'\n });\n handlerData.fetchData.__span = span.spanId;\n spans[span.spanId] = span;\n var request = handlerData.args[0] = handlerData.args[0]; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n var options = handlerData.args[1] = handlerData.args[1] || {};\n var headers = options.headers;\n\n if ((0,is/* isInstanceOf */.V9)(request, Request)) {\n headers = request.headers;\n }\n\n if (headers) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (typeof headers.append === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n headers.append('sentry-trace', span.toTraceparent());\n } else if (Array.isArray(headers)) {\n headers = (0,tslib_es6/* __spread */.fl)(headers, [['sentry-trace', span.toTraceparent()]]);\n } else {\n headers = (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, headers), {\n 'sentry-trace': span.toTraceparent()\n });\n }\n } else {\n headers = {\n 'sentry-trace': span.toTraceparent()\n };\n }\n\n options.headers = headers;\n }\n}\n/**\n * Create and track xhr request spans\n */\n\nfunction xhrCallback(handlerData, shouldCreateSpan, spans) {\n var _a, _b;\n\n if (!(0,utils/* hasTracingEnabled */.zu)() || ((_a = handlerData.xhr) === null || _a === void 0 ? void 0 : _a.__sentry_own_request__) || !(((_b = handlerData.xhr) === null || _b === void 0 ? void 0 : _b.__sentry_xhr__) && shouldCreateSpan(handlerData.xhr.__sentry_xhr__.url))) {\n return;\n }\n\n var xhr = handlerData.xhr.__sentry_xhr__; // check first if the request has finished and is tracked by an existing span which should now end\n\n if (handlerData.endTimestamp && handlerData.xhr.__sentry_xhr_span_id__) {\n var span = spans[handlerData.xhr.__sentry_xhr_span_id__];\n\n if (span) {\n span.setHttpStatus(xhr.status_code);\n span.finish(); // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\n delete spans[handlerData.xhr.__sentry_xhr_span_id__];\n }\n\n return;\n } // if not, create a new span to track it\n\n\n var activeTransaction = (0,utils/* getActiveTransaction */.x1)();\n\n if (activeTransaction) {\n var span = activeTransaction.startChild({\n data: (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, xhr.data), {\n type: 'xhr',\n method: xhr.method,\n url: xhr.url\n }),\n description: xhr.method + \" \" + xhr.url,\n op: 'http.client'\n });\n handlerData.xhr.__sentry_xhr_span_id__ = span.spanId;\n spans[handlerData.xhr.__sentry_xhr_span_id__] = span;\n\n if (handlerData.xhr.setRequestHeader) {\n try {\n handlerData.xhr.setRequestHeader('sentry-trace', span.toTraceparent());\n } catch (_) {// Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n }\n }\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/router.js\n\nvar router_global = (0,misc/* getGlobalObject */.Rf)();\n/**\n * Default function implementing pageload and navigation transactions\n */\n\nfunction instrumentRoutingWithDefaults(customStartTransaction, startTransactionOnPageLoad, startTransactionOnLocationChange) {\n if (startTransactionOnPageLoad === void 0) {\n startTransactionOnPageLoad = true;\n }\n\n if (startTransactionOnLocationChange === void 0) {\n startTransactionOnLocationChange = true;\n }\n\n if (!router_global || !router_global.location) {\n logger/* logger.warn */.k.warn('Could not initialize routing instrumentation due to invalid location');\n return;\n }\n\n var startingUrl = router_global.location.href;\n var activeTransaction;\n\n if (startTransactionOnPageLoad) {\n activeTransaction = customStartTransaction({\n name: router_global.location.pathname,\n op: 'pageload'\n });\n }\n\n if (startTransactionOnLocationChange) {\n (0,instrument/* addInstrumentationHandler */.o)({\n callback: function callback(_a) {\n var to = _a.to,\n from = _a.from;\n /**\n * This early return is there to account for some cases where a navigation transaction starts right after\n * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n * create an uneccessary navigation transaction.\n *\n * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n * only be caused in certain development environments where the usage of a hot module reloader is causing\n * errors.\n */\n\n if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n startingUrl = undefined;\n return;\n }\n\n if (from !== to) {\n startingUrl = undefined;\n\n if (activeTransaction) {\n logger/* logger.log */.k.log(\"[Tracing] Finishing current transaction with op: \" + activeTransaction.op); // If there's an open transaction on the scope, we need to finish it before creating an new one.\n\n activeTransaction.finish();\n }\n\n activeTransaction = customStartTransaction({\n name: router_global.location.pathname,\n op: 'navigation'\n });\n }\n },\n type: 'history'\n });\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/browser/browsertracing.js\n\n\n\n\n\n\n\n\n\n\nvar DEFAULT_MAX_TRANSACTION_DURATION_SECONDS = 600;\n\nvar DEFAULT_BROWSER_TRACING_OPTIONS = (0,tslib_es6/* __assign */.pi)({\n idleTimeout: idletransaction/* DEFAULT_IDLE_TIMEOUT */.nT,\n markBackgroundTransactions: true,\n maxTransactionDuration: DEFAULT_MAX_TRANSACTION_DURATION_SECONDS,\n routingInstrumentation: instrumentRoutingWithDefaults,\n startTransactionOnLocationChange: true,\n startTransactionOnPageLoad: true\n}, defaultRequestInstrumentationOptions);\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n */\n\n\nvar BrowserTracing =\n/** @class */\nfunction () {\n function BrowserTracing(_options) {\n /**\n * @inheritDoc\n */\n this.name = BrowserTracing.id;\n this._emitOptionsWarning = false;\n var tracingOrigins = defaultRequestInstrumentationOptions.tracingOrigins; // NOTE: Logger doesn't work in constructors, as it's initialized after integrations instances\n\n if (_options && _options.tracingOrigins && Array.isArray(_options.tracingOrigins) && _options.tracingOrigins.length !== 0) {\n tracingOrigins = _options.tracingOrigins;\n } else {\n this._emitOptionsWarning = true;\n }\n\n this.options = (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, DEFAULT_BROWSER_TRACING_OPTIONS), _options), {\n tracingOrigins: tracingOrigins\n });\n this._metrics = new MetricsInstrumentation((0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, DEFAULT_METRICS_INSTR_OPTIONS), this.options._metricOptions));\n }\n /**\n * @inheritDoc\n */\n\n\n BrowserTracing.prototype.setupOnce = function (_, getCurrentHub) {\n var _this = this;\n\n this._getCurrentHub = getCurrentHub;\n\n if (this._emitOptionsWarning) {\n logger/* logger.warn */.k.warn('[Tracing] You need to define `tracingOrigins` in the options. Set an array of urls or patterns to trace.');\n logger/* logger.warn */.k.warn(\"[Tracing] We added a reasonable default for you: \" + defaultRequestInstrumentationOptions.tracingOrigins);\n } // eslint-disable-next-line @typescript-eslint/unbound-method\n\n\n var _a = this.options,\n instrumentRouting = _a.routingInstrumentation,\n startTransactionOnLocationChange = _a.startTransactionOnLocationChange,\n startTransactionOnPageLoad = _a.startTransactionOnPageLoad,\n markBackgroundTransactions = _a.markBackgroundTransactions,\n traceFetch = _a.traceFetch,\n traceXHR = _a.traceXHR,\n tracingOrigins = _a.tracingOrigins,\n shouldCreateSpanForRequest = _a.shouldCreateSpanForRequest;\n instrumentRouting(function (context) {\n return _this._createRouteTransaction(context);\n }, startTransactionOnPageLoad, startTransactionOnLocationChange);\n\n if (markBackgroundTransactions) {\n registerBackgroundTabDetection();\n }\n\n instrumentOutgoingRequests({\n traceFetch: traceFetch,\n traceXHR: traceXHR,\n tracingOrigins: tracingOrigins,\n shouldCreateSpanForRequest: shouldCreateSpanForRequest\n });\n };\n /** Create routing idle transaction. */\n\n\n BrowserTracing.prototype._createRouteTransaction = function (context) {\n var _this = this;\n\n if (!this._getCurrentHub) {\n logger/* logger.warn */.k.warn(\"[Tracing] Did not create \" + context.op + \" transaction because _getCurrentHub is invalid.\");\n return undefined;\n } // eslint-disable-next-line @typescript-eslint/unbound-method\n\n\n var _a = this.options,\n beforeNavigate = _a.beforeNavigate,\n idleTimeout = _a.idleTimeout,\n maxTransactionDuration = _a.maxTransactionDuration;\n var parentContextFromHeader = context.op === 'pageload' ? getHeaderContext() : undefined;\n\n var expandedContext = (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, context), parentContextFromHeader), {\n trimEnd: true\n });\n\n var modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext; // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n // from being sent to Sentry).\n\n var finalContext = modifiedContext === undefined ? (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, expandedContext), {\n sampled: false\n }) : modifiedContext;\n\n if (finalContext.sampled === false) {\n logger/* logger.log */.k.log(\"[Tracing] Will not send \" + finalContext.op + \" transaction because of beforeNavigate.\");\n }\n\n logger/* logger.log */.k.log(\"[Tracing] Starting \" + finalContext.op + \" transaction on scope\");\n\n var hub = this._getCurrentHub();\n\n var location = (0,misc/* getGlobalObject */.Rf)().location;\n var idleTransaction = (0,hubextensions/* startIdleTransaction */.lb)(hub, finalContext, idleTimeout, true, {\n location: location\n });\n idleTransaction.registerBeforeFinishCallback(function (transaction, endTimestamp) {\n _this._metrics.addPerformanceEntries(transaction);\n\n adjustTransactionDuration((0,utils/* secToMs */.WB)(maxTransactionDuration), transaction, endTimestamp);\n });\n return idleTransaction;\n };\n /**\n * @inheritDoc\n */\n\n\n BrowserTracing.id = 'BrowserTracing';\n return BrowserTracing;\n}();\n\n\n/**\n * Gets transaction context from a sentry-trace meta.\n *\n * @returns Transaction context data from the header or undefined if there's no header or the header is malformed\n */\n\nfunction getHeaderContext() {\n var header = getMetaContent('sentry-trace');\n\n if (header) {\n return (0,utils/* extractTraceparentData */.qG)(header);\n }\n\n return undefined;\n}\n/** Returns the value of a meta tag */\n\nfunction getMetaContent(metaName) {\n var el = (0,misc/* getGlobalObject */.Rf)().document.querySelector(\"meta[name=\" + metaName + \"]\");\n return el ? el.getAttribute('content') : null;\n}\n/** Adjusts transaction value based on max transaction duration */\n\nfunction adjustTransactionDuration(maxDuration, transaction, endTimestamp) {\n var diff = endTimestamp - transaction.startTimestamp;\n var isOutdatedTransaction = endTimestamp && (diff > maxDuration || diff < 0);\n\n if (isOutdatedTransaction) {\n transaction.setStatus(spanstatus/* SpanStatus.DeadlineExceeded */.p.DeadlineExceeded);\n transaction.setTag('maxTransactionDurationExceeded', 'true');\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/integrations/node/express.js\n\n\n/**\n * Express integration\n *\n * Provides an request and error handler for Express framework as well as tracing capabilities\n */\n\nvar Express =\n/** @class */\nfunction () {\n /**\n * @inheritDoc\n */\n function Express(options) {\n if (options === void 0) {\n options = {};\n }\n /**\n * @inheritDoc\n */\n\n\n this.name = Express.id;\n this._router = options.router || options.app;\n this._methods = (Array.isArray(options.methods) ? options.methods : []).concat('use');\n }\n /**\n * @inheritDoc\n */\n\n\n Express.prototype.setupOnce = function () {\n if (!this._router) {\n logger/* logger.error */.k.error('ExpressIntegration is missing an Express instance');\n return;\n }\n\n instrumentMiddlewares(this._router, this._methods);\n };\n /**\n * @inheritDoc\n */\n\n\n Express.id = 'Express';\n return Express;\n}();\n\n\n/**\n * Wraps original middleware function in a tracing call, which stores the info about the call as a span,\n * and finishes it once the middleware is done invoking.\n *\n * Express middlewares have 3 various forms, thus we have to take care of all of them:\n * // sync\n * app.use(function (req, res) { ... })\n * // async\n * app.use(function (req, res, next) { ... })\n * // error handler\n * app.use(function (err, req, res, next) { ... })\n *\n * They all internally delegate to the `router[method]` of the given application instance.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-explicit-any\n\nfunction wrap(fn, method) {\n var arity = fn.length;\n\n switch (arity) {\n case 2:\n {\n return function (req, res) {\n var transaction = res.__sentry_transaction;\n\n if (transaction) {\n var span_1 = transaction.startChild({\n description: fn.name,\n op: \"middleware.\" + method\n });\n res.once('finish', function () {\n span_1.finish();\n });\n }\n\n return fn.call(this, req, res);\n };\n }\n\n case 3:\n {\n return function (req, res, next) {\n var _a;\n\n var transaction = res.__sentry_transaction;\n var span = (_a = transaction) === null || _a === void 0 ? void 0 : _a.startChild({\n description: fn.name,\n op: \"middleware.\" + method\n });\n fn.call(this, req, res, function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var _a;\n\n (_a = span) === null || _a === void 0 ? void 0 : _a.finish();\n next.call.apply(next, (0,tslib_es6/* __spread */.fl)([this], args));\n });\n };\n }\n\n case 4:\n {\n return function (err, req, res, next) {\n var _a;\n\n var transaction = res.__sentry_transaction;\n var span = (_a = transaction) === null || _a === void 0 ? void 0 : _a.startChild({\n description: fn.name,\n op: \"middleware.\" + method\n });\n fn.call(this, err, req, res, function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var _a;\n\n (_a = span) === null || _a === void 0 ? void 0 : _a.finish();\n next.call.apply(next, (0,tslib_es6/* __spread */.fl)([this], args));\n });\n };\n }\n\n default:\n {\n throw new Error(\"Express middleware takes 2-4 arguments. Got: \" + arity);\n }\n }\n}\n/**\n * Takes all the function arguments passed to the original `app` or `router` method, eg. `app.use` or `router.use`\n * and wraps every function, as well as array of functions with a call to our `wrap` method.\n * We have to take care of the arrays as well as iterate over all of the arguments,\n * as `app.use` can accept middlewares in few various forms.\n *\n * app.use([<path>], <fn>)\n * app.use([<path>], <fn>, ...<fn>)\n * app.use([<path>], ...<fn>[])\n */\n\n\nfunction wrapMiddlewareArgs(args, method) {\n return args.map(function (arg) {\n if (typeof arg === 'function') {\n return wrap(arg, method);\n }\n\n if (Array.isArray(arg)) {\n return arg.map(function (a) {\n if (typeof a === 'function') {\n return wrap(a, method);\n }\n\n return a;\n });\n }\n\n return arg;\n });\n}\n/**\n * Patches original router to utilize our tracing functionality\n */\n\n\nfunction patchMiddleware(router, method) {\n var originalCallback = router[method];\n\n router[method] = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n return originalCallback.call.apply(originalCallback, (0,tslib_es6/* __spread */.fl)([this], wrapMiddlewareArgs(args, method)));\n };\n\n return router;\n}\n/**\n * Patches original router methods\n */\n\n\nfunction instrumentMiddlewares(router, methods) {\n if (methods === void 0) {\n methods = [];\n }\n\n methods.forEach(function (method) {\n return patchMiddleware(router, method);\n });\n}\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/object.js + 1 modules\nvar object = __webpack_require__(150);\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/integrations/node/postgres.js\n\n/** Tracing integration for node-postgres package */\n\nvar Postgres =\n/** @class */\nfunction () {\n function Postgres(options) {\n if (options === void 0) {\n options = {};\n }\n /**\n * @inheritDoc\n */\n\n\n this.name = Postgres.id;\n this._usePgNative = !!options.usePgNative;\n }\n /**\n * @inheritDoc\n */\n\n\n Postgres.prototype.setupOnce = function (_, getCurrentHub) {\n var _a;\n\n var pkg = (0,node/* loadModule */.$y)('pg');\n\n if (!pkg) {\n logger/* logger.error */.k.error('Postgres Integration was unable to require `pg` package.');\n return;\n }\n\n if (this._usePgNative && !((_a = pkg.native) === null || _a === void 0 ? void 0 : _a.Client)) {\n logger/* logger.error */.k.error(\"Postgres Integration was unable to access 'pg-native' bindings.\");\n return;\n }\n\n var Client = (this._usePgNative ? pkg.native : pkg).Client;\n /**\n * function (query, callback) => void\n * function (query, params, callback) => void\n * function (query) => Promise\n * function (query, params) => Promise\n * function (pg.Cursor) => pg.Cursor\n */\n\n (0,object/* fill */.hl)(Client.prototype, 'query', function (orig) {\n return function (config, values, callback) {\n var _a, _b, _c;\n\n var scope = getCurrentHub().getScope();\n var parentSpan = (_a = scope) === null || _a === void 0 ? void 0 : _a.getSpan();\n var span = (_b = parentSpan) === null || _b === void 0 ? void 0 : _b.startChild({\n description: typeof config === 'string' ? config : config.text,\n op: \"db\"\n });\n\n if (typeof callback === 'function') {\n return orig.call(this, config, values, function (err, result) {\n var _a;\n\n (_a = span) === null || _a === void 0 ? void 0 : _a.finish();\n callback(err, result);\n });\n }\n\n if (typeof values === 'function') {\n return orig.call(this, config, function (err, result) {\n var _a;\n\n (_a = span) === null || _a === void 0 ? void 0 : _a.finish();\n values(err, result);\n });\n }\n\n var rv = typeof values !== 'undefined' ? orig.call(this, config, values) : orig.call(this, config);\n\n if ((0,is/* isThenable */.J8)(rv)) {\n return rv.then(function (res) {\n var _a;\n\n (_a = span) === null || _a === void 0 ? void 0 : _a.finish();\n return res;\n });\n }\n\n (_c = span) === null || _c === void 0 ? void 0 : _c.finish();\n return rv;\n };\n });\n };\n /**\n * @inheritDoc\n */\n\n\n Postgres.id = 'Postgres';\n return Postgres;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/integrations/node/mysql.js\n\n/** Tracing integration for node-mysql package */\n\nvar Mysql =\n/** @class */\nfunction () {\n function Mysql() {\n /**\n * @inheritDoc\n */\n this.name = Mysql.id;\n }\n /**\n * @inheritDoc\n */\n\n\n Mysql.prototype.setupOnce = function (_, getCurrentHub) {\n var pkg = (0,node/* loadModule */.$y)('mysql/lib/Connection.js');\n\n if (!pkg) {\n logger/* logger.error */.k.error('Mysql Integration was unable to require `mysql` package.');\n return;\n } // The original function will have one of these signatures:\n // function (callback) => void\n // function (options, callback) => void\n // function (options, values, callback) => void\n\n\n (0,object/* fill */.hl)(pkg, 'createQuery', function (orig) {\n return function (options, values, callback) {\n var _a, _b;\n\n var scope = getCurrentHub().getScope();\n var parentSpan = (_a = scope) === null || _a === void 0 ? void 0 : _a.getSpan();\n var span = (_b = parentSpan) === null || _b === void 0 ? void 0 : _b.startChild({\n description: typeof options === 'string' ? options : options.sql,\n op: \"db\"\n });\n\n if (typeof callback === 'function') {\n return orig.call(this, options, values, function (err, result, fields) {\n var _a;\n\n (_a = span) === null || _a === void 0 ? void 0 : _a.finish();\n callback(err, result, fields);\n });\n }\n\n if (typeof values === 'function') {\n return orig.call(this, options, function (err, result, fields) {\n var _a;\n\n (_a = span) === null || _a === void 0 ? void 0 : _a.finish();\n values(err, result, fields);\n });\n }\n\n return orig.call(this, options, values, callback);\n };\n });\n };\n /**\n * @inheritDoc\n */\n\n\n Mysql.id = 'Mysql';\n return Mysql;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/integrations/node/mongo.js\n\n\nvar OPERATIONS = ['aggregate', 'bulkWrite', 'countDocuments', 'createIndex', 'createIndexes', 'deleteMany', 'deleteOne', 'distinct', 'drop', 'dropIndex', 'dropIndexes', 'estimatedDocumentCount', 'find', 'findOne', 'findOneAndDelete', 'findOneAndReplace', 'findOneAndUpdate', 'indexes', 'indexExists', 'indexInformation', 'initializeOrderedBulkOp', 'insertMany', 'insertOne', 'isCapped', 'mapReduce', 'options', 'parallelCollectionScan', 'rename', 'replaceOne', 'stats', 'updateMany', 'updateOne']; // All of the operations above take `options` and `callback` as their final parameters, but some of them\n// take additional parameters as well. For those operations, this is a map of\n// { <operation name>: [<names of additional parameters>] }, as a way to know what to call the operation's\n// positional arguments when we add them to the span's `data` object later\n\nvar OPERATION_SIGNATURES = {\n // aggregate intentionally not included because `pipeline` arguments are too complex to serialize well\n // see https://github.com/getsentry/sentry-javascript/pull/3102\n bulkWrite: ['operations'],\n countDocuments: ['query'],\n createIndex: ['fieldOrSpec'],\n createIndexes: ['indexSpecs'],\n deleteMany: ['filter'],\n deleteOne: ['filter'],\n distinct: ['key', 'query'],\n dropIndex: ['indexName'],\n find: ['query'],\n findOne: ['query'],\n findOneAndDelete: ['filter'],\n findOneAndReplace: ['filter', 'replacement'],\n findOneAndUpdate: ['filter', 'update'],\n indexExists: ['indexes'],\n insertMany: ['docs'],\n insertOne: ['doc'],\n mapReduce: ['map', 'reduce'],\n rename: ['newName'],\n replaceOne: ['filter', 'doc'],\n updateMany: ['filter', 'update'],\n updateOne: ['filter', 'update']\n};\n/** Tracing integration for mongo package */\n\nvar Mongo =\n/** @class */\nfunction () {\n /**\n * @inheritDoc\n */\n function Mongo(options) {\n if (options === void 0) {\n options = {};\n }\n /**\n * @inheritDoc\n */\n\n\n this.name = Mongo.id;\n this._operations = Array.isArray(options.operations) ? options.operations : OPERATIONS;\n this._describeOperations = 'describeOperations' in options ? options.describeOperations : true;\n this._useMongoose = !!options.useMongoose;\n }\n /**\n * @inheritDoc\n */\n\n\n Mongo.prototype.setupOnce = function (_, getCurrentHub) {\n var moduleName = this._useMongoose ? 'mongoose' : 'mongodb';\n var pkg = (0,node/* loadModule */.$y)(moduleName);\n\n if (!pkg) {\n logger/* logger.error */.k.error(\"Mongo Integration was unable to require `\" + moduleName + \"` package.\");\n return;\n }\n\n this._instrumentOperations(pkg.Collection, this._operations, getCurrentHub);\n };\n /**\n * Patches original collection methods\n */\n\n\n Mongo.prototype._instrumentOperations = function (collection, operations, getCurrentHub) {\n var _this = this;\n\n operations.forEach(function (operation) {\n return _this._patchOperation(collection, operation, getCurrentHub);\n });\n };\n /**\n * Patches original collection to utilize our tracing functionality\n */\n\n\n Mongo.prototype._patchOperation = function (collection, operation, getCurrentHub) {\n if (!(operation in collection.prototype)) return;\n\n var getSpanContext = this._getSpanContextFromOperationArguments.bind(this);\n\n (0,object/* fill */.hl)(collection.prototype, operation, function (orig) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var _a, _b, _c, _d;\n\n var lastArg = args[args.length - 1];\n var scope = getCurrentHub().getScope();\n var parentSpan = (_a = scope) === null || _a === void 0 ? void 0 : _a.getSpan(); // Check if the operation was passed a callback. (mapReduce requires a different check, as\n // its (non-callback) arguments can also be functions.)\n\n if (typeof lastArg !== 'function' || operation === 'mapReduce' && args.length === 2) {\n var span_1 = (_b = parentSpan) === null || _b === void 0 ? void 0 : _b.startChild(getSpanContext(this, operation, args));\n var maybePromise = orig.call.apply(orig, (0,tslib_es6/* __spread */.fl)([this], args));\n\n if ((0,is/* isThenable */.J8)(maybePromise)) {\n return maybePromise.then(function (res) {\n var _a;\n\n (_a = span_1) === null || _a === void 0 ? void 0 : _a.finish();\n return res;\n });\n } else {\n (_c = span_1) === null || _c === void 0 ? void 0 : _c.finish();\n return maybePromise;\n }\n }\n\n var span = (_d = parentSpan) === null || _d === void 0 ? void 0 : _d.startChild(getSpanContext(this, operation, args.slice(0, -1)));\n return orig.call.apply(orig, (0,tslib_es6/* __spread */.fl)([this], args.slice(0, -1), [function (err, result) {\n var _a;\n\n (_a = span) === null || _a === void 0 ? void 0 : _a.finish();\n lastArg(err, result);\n }]));\n };\n });\n };\n /**\n * Form a SpanContext based on the user input to a given operation.\n */\n\n\n Mongo.prototype._getSpanContextFromOperationArguments = function (collection, operation, args) {\n var data = {\n collectionName: collection.collectionName,\n dbName: collection.dbName,\n namespace: collection.namespace\n };\n var spanContext = {\n op: \"db\",\n description: operation,\n data: data\n }; // If the operation takes no arguments besides `options` and `callback`, or if argument\n // collection is disabled for this operation, just return early.\n\n var signature = OPERATION_SIGNATURES[operation];\n var shouldDescribe = Array.isArray(this._describeOperations) ? this._describeOperations.includes(operation) : this._describeOperations;\n\n if (!signature || !shouldDescribe) {\n return spanContext;\n }\n\n try {\n // Special case for `mapReduce`, as the only one accepting functions as arguments.\n if (operation === 'mapReduce') {\n var _a = (0,tslib_es6/* __read */.CR)(args, 2),\n map = _a[0],\n reduce = _a[1];\n\n data[signature[0]] = typeof map === 'string' ? map : map.name || '<anonymous>';\n data[signature[1]] = typeof reduce === 'string' ? reduce : reduce.name || '<anonymous>';\n } else {\n for (var i = 0; i < signature.length; i++) {\n data[signature[i]] = JSON.stringify(args[i]);\n }\n }\n } catch (_oO) {// no-empty\n }\n\n return spanContext;\n };\n /**\n * @inheritDoc\n */\n\n\n Mongo.id = 'Mongo';\n return Mongo;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/integrations/index.js\n\n\n\n\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/esm/span.js\nvar span = __webpack_require__(6369);\n// EXTERNAL MODULE: ./node_modules/@sentry/tracing/esm/transaction.js\nvar transaction = __webpack_require__(5955);\n;// CONCATENATED MODULE: ./node_modules/@sentry/tracing/esm/index.js\n\n\n\n\n\nvar Integrations = (0,tslib_es6/* __assign */.pi)((0,tslib_es6/* __assign */.pi)({}, integrations_namespaceObject), {\n BrowserTracing: BrowserTracing\n});\n\n\n\n\n\n\n\n // We are patching the global object with our hub extension methods\n\n(0,hubextensions/* addExtensionMethods */.ro)();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL2Jyb3dzZXIvYmFja2dyb3VuZHRhYi5qcz9kYjIxIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9lc20vYnJvd3Nlci93ZWItdml0YWxzL2xpYi9iaW5kUmVwb3J0ZXIuanM/NDAxMyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL2Jyb3dzZXIvd2ViLXZpdGFscy9saWIvZ2VuZXJhdGVVbmlxdWVJRC5qcz81MDRhIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9lc20vYnJvd3Nlci93ZWItdml0YWxzL2xpYi9pbml0TWV0cmljLmpzP2NmZmEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL2VzbS9icm93c2VyL3dlYi12aXRhbHMvbGliL29ic2VydmUuanM/MTE4ZCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL2Jyb3dzZXIvd2ViLXZpdGFscy9saWIvb25IaWRkZW4uanM/ZjA3NiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRDTFMuanM/ODhjYyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL2Jyb3dzZXIvd2ViLXZpdGFscy9saWIvZ2V0VmlzaWJpbGl0eVdhdGNoZXIuanM/MWJjMyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRGSUQuanM/MmY2OCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRMQ1AuanM/NzZkMSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL2Jyb3dzZXIvbWV0cmljcy5qcz9iZDQ0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9lc20vYnJvd3Nlci9yZXF1ZXN0LmpzPzY3YTciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL2VzbS9icm93c2VyL3JvdXRlci5qcz81YjE4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9lc20vYnJvd3Nlci9icm93c2VydHJhY2luZy5qcz8zZmNkIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9lc20vaW50ZWdyYXRpb25zL25vZGUvZXhwcmVzcy5qcz81NWM0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9lc20vaW50ZWdyYXRpb25zL25vZGUvcG9zdGdyZXMuanM/YWUwZSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL2ludGVncmF0aW9ucy9ub2RlL215c3FsLmpzPzEyYWMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL2VzbS9pbnRlZ3JhdGlvbnMvbm9kZS9tb25nby5qcz9jZTkzIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9lc20vaW50ZWdyYXRpb25zL2luZGV4LmpzP2UyNjIiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL2VzbS9pbmRleC5qcz8yMzBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBd0Q7QUFDYjtBQUNLO0FBQ2hELGFBQWEsZ0NBQWU7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0EsOEJBQThCLHNDQUFvQjs7QUFFbEQ7QUFDQSxRQUFRLDRCQUFVLDZCQUE2QixnREFBb0IseUVBQXlFO0FBQzVJOztBQUVBO0FBQ0Esc0NBQXNDLGdEQUFvQjtBQUMxRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNILElBQUksOEJBQVc7QUFDZjtBQUNBLEM7Ozs7Ozs7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNPO0FBQ1A7QUFDQSxFOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDc0Q7QUFDL0M7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxnQkFBZ0I7QUFDeEI7QUFDQSxFOztBQ3hCQTtBQUNB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QUNBLEtBQUssY0FBYztBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7OztBQ3pMd0M7QUFDRTtBQUNOOzs7Ozs7O0FDRko7QUFDVTtBQUNXO0FBQ0E7O0FBRXRELG1CQUFtQiw4QkFBUSxDQUFDLDhCQUFRLEdBQUcsRUFBRSw0QkFBbUI7QUFDNUQsa0JBQWtCLGNBQWM7QUFDaEMsQ0FBQzs7QUFFdUI7QUFDTTtBQUNjO0FBRTBFO0FBQzVFO0FBQ1U7QUFDRzs7QUFFdkQsNkNBQW1CO0FBQ1kiLCJmaWxlIjoiNzM3NC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEdsb2JhbE9iamVjdCwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgeyBTcGFuU3RhdHVzIH0gZnJvbSAnLi4vc3BhbnN0YXR1cyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbnZhciBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3QoKTtcbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgdGhhdCBjYW5jZWxzIGFuZCBmaW5pc2hlcyBhIHRyYW5zYWN0aW9uIHdoZW4gdGhlIGdsb2JhbFxuICogZG9jdW1lbnQgaXMgaGlkZGVuLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckJhY2tncm91bmRUYWJEZXRlY3Rpb24oKSB7XG4gIGlmIChnbG9iYWwgJiYgZ2xvYmFsLmRvY3VtZW50KSB7XG4gICAgZ2xvYmFsLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYWN0aXZlVHJhbnNhY3Rpb24gPSBnZXRBY3RpdmVUcmFuc2FjdGlvbigpO1xuXG4gICAgICBpZiAoZ2xvYmFsLmRvY3VtZW50LmhpZGRlbiAmJiBhY3RpdmVUcmFuc2FjdGlvbikge1xuICAgICAgICBsb2dnZXIubG9nKFwiW1RyYWNpbmddIFRyYW5zYWN0aW9uOiBcIiArIFNwYW5TdGF0dXMuQ2FuY2VsbGVkICsgXCIgLT4gc2luY2UgdGFiIG1vdmVkIHRvIHRoZSBiYWNrZ3JvdW5kLCBvcDogXCIgKyBhY3RpdmVUcmFuc2FjdGlvbi5vcCk7IC8vIFdlIHNob3VsZCBub3Qgc2V0IHN0YXR1cyBpZiBpdCBpcyBhbHJlYWR5IHNldCwgdGhpcyBwcmV2ZW50IGltcG9ydGFudCBzdGF0dXNlcyBsaWtlXG4gICAgICAgIC8vIGVycm9yIG9yIGRhdGEgbG9zcyBmcm9tIGJlaW5nIG92ZXJ3cml0dGVuIG9uIHRyYW5zYWN0aW9uLlxuXG4gICAgICAgIGlmICghYWN0aXZlVHJhbnNhY3Rpb24uc3RhdHVzKSB7XG4gICAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24uc2V0U3RhdHVzKFNwYW5TdGF0dXMuQ2FuY2VsbGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjdGl2ZVRyYW5zYWN0aW9uLnNldFRhZygndmlzaWJpbGl0eWNoYW5nZScsICdkb2N1bWVudC5oaWRkZW4nKTtcbiAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24uZmluaXNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tUcmFjaW5nXSBDb3VsZCBub3Qgc2V0IHVwIGJhY2tncm91bmQgdGFiIGRldGVjdGlvbiBkdWUgdG8gbGFjayBvZiBnbG9iYWwgZG9jdW1lbnQnKTtcbiAgfVxufSIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuZXhwb3J0IHZhciBiaW5kUmVwb3J0ZXIgPSBmdW5jdGlvbiBiaW5kUmVwb3J0ZXIoY2FsbGJhY2ssIG1ldHJpYywgcmVwb3J0QWxsQ2hhbmdlcykge1xuICB2YXIgcHJldlZhbHVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGZvcmNlUmVwb3J0KSB7XG4gICAgaWYgKG1ldHJpYy52YWx1ZSA+PSAwKSB7XG4gICAgICBpZiAoZm9yY2VSZXBvcnQgfHwgcmVwb3J0QWxsQ2hhbmdlcykge1xuICAgICAgICBtZXRyaWMuZGVsdGEgPSBtZXRyaWMudmFsdWUgLSAocHJldlZhbHVlIHx8IDApOyAvLyBSZXBvcnQgdGhlIG1ldHJpYyBpZiB0aGVyZSdzIGEgbm9uLXplcm8gZGVsdGEgb3IgaWYgbm8gcHJldmlvdXNcbiAgICAgICAgLy8gdmFsdWUgZXhpc3RzICh3aGljaCBjYW4gaGFwcGVuIGluIHRoZSBjYXNlIG9mIHRoZSBkb2N1bWVudCBiZWNvbWluZ1xuICAgICAgICAvLyBoaWRkZW4gd2hlbiB0aGUgbWV0cmljIHZhbHVlIGlzIDApLlxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWUvd2ViLXZpdGFscy9pc3N1ZXMvMTRcblxuICAgICAgICBpZiAobWV0cmljLmRlbHRhIHx8IHByZXZWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJldlZhbHVlID0gbWV0cmljLnZhbHVlO1xuICAgICAgICAgIGNhbGxiYWNrKG1ldHJpYyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59OyIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1hbnRseSBnZW5lcmF0ZSBhIHVuaXF1ZSwgMzAtY2hhciBzdHJpbmcgYnkgY29tYmluaW5nIGEgdmVyc2lvblxuICogbnVtYmVyLCB0aGUgY3VycmVudCB0aW1lc3RhbXAgd2l0aCBhIDEzLWRpZ2l0IG51bWJlciBpbnRlZ2VyLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgdmFyIGdlbmVyYXRlVW5pcXVlSUQgPSBmdW5jdGlvbiBnZW5lcmF0ZVVuaXF1ZUlEKCkge1xuICByZXR1cm4gXCJ2Mi1cIiArIERhdGUubm93KCkgKyBcIi1cIiArIChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoOWUxMiAtIDEpKSArIDFlMTIpO1xufTsiLCIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlSUQgfSBmcm9tICcuL2dlbmVyYXRlVW5pcXVlSUQnO1xuZXhwb3J0IHZhciBpbml0TWV0cmljID0gZnVuY3Rpb24gaW5pdE1ldHJpYyhuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgdmFsdWU6IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6IC0xLFxuICAgIGRlbHRhOiAwLFxuICAgIGVudHJpZXM6IFtdLFxuICAgIGlkOiBnZW5lcmF0ZVVuaXF1ZUlEKClcbiAgfTtcbn07IiwiLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogVGFrZXMgYSBwZXJmb3JtYW5jZSBlbnRyeSB0eXBlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgY3JlYXRlcyBhXG4gKiBgUGVyZm9ybWFuY2VPYnNlcnZlcmAgaW5zdGFuY2UgdGhhdCB3aWxsIG9ic2VydmUgdGhlIHNwZWNpZmllZCBlbnRyeSB0eXBlXG4gKiB3aXRoIGJ1ZmZlcmluZyBlbmFibGVkIGFuZCBjYWxsIHRoZSBjYWxsYmFjayBfZm9yIGVhY2ggZW50cnlfLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYWxzbyBmZWF0dXJlLWRldGVjdHMgZW50cnkgc3VwcG9ydCBhbmQgd3JhcHMgdGhlIGxvZ2ljIGluIGFcbiAqIHRyeS9jYXRjaCB0byBhdm9pZCBlcnJvcnMgaW4gdW5zdXBwb3J0aW5nIGJyb3dzZXJzLlxuICovXG5leHBvcnQgdmFyIG9ic2VydmUgPSBmdW5jdGlvbiBvYnNlcnZlKHR5cGUsIGNhbGxiYWNrKSB7XG4gIHRyeSB7XG4gICAgaWYgKFBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3VwcG9ydGVkRW50cnlUeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgLy8gTW9yZSBleHRlbnNpdmUgZmVhdHVyZSBkZXRlY3QgbmVlZGVkIGZvciBGaXJlZm94IGR1ZSB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWUvd2ViLXZpdGFscy9pc3N1ZXMvMTQyXG4gICAgICBpZiAodHlwZSA9PT0gJ2ZpcnN0LWlucHV0JyAmJiAhKCdQZXJmb3JtYW5jZUV2ZW50VGltaW5nJyBpbiBzZWxmKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwbyA9IG5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgIHJldHVybiBsLmdldEVudHJpZXMoKS5tYXAoY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICBwby5vYnNlcnZlKHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgYnVmZmVyZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBvO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkgey8vIERvIG5vdGhpbmcuXG4gIH1cblxuICByZXR1cm47XG59OyIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5leHBvcnQgdmFyIG9uSGlkZGVuID0gZnVuY3Rpb24gb25IaWRkZW4oY2IsIG9uY2UpIHtcbiAgdmFyIG9uSGlkZGVuT3JQYWdlSGlkZSA9IGZ1bmN0aW9uIG9uSGlkZGVuT3JQYWdlSGlkZShldmVudCkge1xuICAgIGlmIChldmVudC50eXBlID09PSAncGFnZWhpZGUnIHx8IGdldEdsb2JhbE9iamVjdCgpLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgIGNiKGV2ZW50KTtcblxuICAgICAgaWYgKG9uY2UpIHtcbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uSGlkZGVuT3JQYWdlSGlkZSwgdHJ1ZSk7XG4gICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgb25IaWRkZW5PclBhZ2VIaWRlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uSGlkZGVuT3JQYWdlSGlkZSwgdHJ1ZSk7IC8vIFNvbWUgYnJvd3NlcnMgaGF2ZSBidWdneSBpbXBsZW1lbnRhdGlvbnMgb2YgdmlzaWJpbGl0eWNoYW5nZSxcbiAgLy8gc28gd2UgdXNlIHBhZ2VoaWRlIGluIGFkZGl0aW9uLCBqdXN0IHRvIGJlIHNhZmUuXG5cbiAgYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCBvbkhpZGRlbk9yUGFnZUhpZGUsIHRydWUpO1xufTsiLCIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGJpbmRSZXBvcnRlciB9IGZyb20gJy4vbGliL2JpbmRSZXBvcnRlcic7XG5pbXBvcnQgeyBpbml0TWV0cmljIH0gZnJvbSAnLi9saWIvaW5pdE1ldHJpYyc7XG5pbXBvcnQgeyBvYnNlcnZlIH0gZnJvbSAnLi9saWIvb2JzZXJ2ZSc7XG5pbXBvcnQgeyBvbkhpZGRlbiB9IGZyb20gJy4vbGliL29uSGlkZGVuJztcbmV4cG9ydCB2YXIgZ2V0Q0xTID0gZnVuY3Rpb24gZ2V0Q0xTKG9uUmVwb3J0LCByZXBvcnRBbGxDaGFuZ2VzKSB7XG4gIHZhciBtZXRyaWMgPSBpbml0TWV0cmljKCdDTFMnLCAwKTtcbiAgdmFyIHJlcG9ydDtcbiAgdmFyIHNlc3Npb25WYWx1ZSA9IDA7XG4gIHZhciBzZXNzaW9uRW50cmllcyA9IFtdO1xuXG4gIHZhciBlbnRyeUhhbmRsZXIgPSBmdW5jdGlvbiBlbnRyeUhhbmRsZXIoZW50cnkpIHtcbiAgICAvLyBPbmx5IGNvdW50IGxheW91dCBzaGlmdHMgd2l0aG91dCByZWNlbnQgdXNlciBpbnB1dC5cbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBlbnRyeSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgaWYgKGVudHJ5ICYmICFlbnRyeS5oYWRSZWNlbnRJbnB1dCkge1xuICAgICAgdmFyIGZpcnN0U2Vzc2lvbkVudHJ5ID0gc2Vzc2lvbkVudHJpZXNbMF07XG4gICAgICB2YXIgbGFzdFNlc3Npb25FbnRyeSA9IHNlc3Npb25FbnRyaWVzW3Nlc3Npb25FbnRyaWVzLmxlbmd0aCAtIDFdOyAvLyBJZiB0aGUgZW50cnkgb2NjdXJyZWQgbGVzcyB0aGFuIDEgc2Vjb25kIGFmdGVyIHRoZSBwcmV2aW91cyBlbnRyeSBhbmRcbiAgICAgIC8vIGxlc3MgdGhhbiA1IHNlY29uZHMgYWZ0ZXIgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBzZXNzaW9uLCBpbmNsdWRlIHRoZVxuICAgICAgLy8gZW50cnkgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbi4gT3RoZXJ3aXNlLCBzdGFydCBhIG5ldyBzZXNzaW9uLlxuXG4gICAgICBpZiAoc2Vzc2lvblZhbHVlICYmIHNlc3Npb25FbnRyaWVzLmxlbmd0aCAhPT0gMCAmJiBlbnRyeS5zdGFydFRpbWUgLSBsYXN0U2Vzc2lvbkVudHJ5LnN0YXJ0VGltZSA8IDEwMDAgJiYgZW50cnkuc3RhcnRUaW1lIC0gZmlyc3RTZXNzaW9uRW50cnkuc3RhcnRUaW1lIDwgNTAwMCkge1xuICAgICAgICBzZXNzaW9uVmFsdWUgKz0gZW50cnkudmFsdWU7XG4gICAgICAgIHNlc3Npb25FbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Vzc2lvblZhbHVlID0gZW50cnkudmFsdWU7XG4gICAgICAgIHNlc3Npb25FbnRyaWVzID0gW2VudHJ5XTtcbiAgICAgIH0gLy8gSWYgdGhlIGN1cnJlbnQgc2Vzc2lvbiB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBDTFMgdmFsdWUsXG4gICAgICAvLyB1cGRhdGUgQ0xTIGFuZCB0aGUgZW50cmllcyBjb250cmlidXRpbmcgdG8gaXQuXG5cblxuICAgICAgaWYgKHNlc3Npb25WYWx1ZSA+IG1ldHJpYy52YWx1ZSkge1xuICAgICAgICBtZXRyaWMudmFsdWUgPSBzZXNzaW9uVmFsdWU7XG4gICAgICAgIG1ldHJpYy5lbnRyaWVzID0gc2Vzc2lvbkVudHJpZXM7XG5cbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIHJlcG9ydCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBwbyA9IG9ic2VydmUoJ2xheW91dC1zaGlmdCcsIGVudHJ5SGFuZGxlcik7XG5cbiAgaWYgKHBvKSB7XG4gICAgcmVwb3J0ID0gYmluZFJlcG9ydGVyKG9uUmVwb3J0LCBtZXRyaWMsIHJlcG9ydEFsbENoYW5nZXMpO1xuICAgIG9uSGlkZGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHBvLnRha2VSZWNvcmRzKCkubWFwKGVudHJ5SGFuZGxlcik7XG4gICAgICByZXBvcnQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cbn07IiwiLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IG9uSGlkZGVuIH0gZnJvbSAnLi9vbkhpZGRlbic7XG52YXIgZmlyc3RIaWRkZW5UaW1lID0gLTE7XG5cbnZhciBpbml0SGlkZGVuVGltZSA9IGZ1bmN0aW9uIGluaXRIaWRkZW5UaW1lKCkge1xuICByZXR1cm4gZ2V0R2xvYmFsT2JqZWN0KCkuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJyA/IDAgOiBJbmZpbml0eTtcbn07XG5cbnZhciB0cmFja0NoYW5nZXMgPSBmdW5jdGlvbiB0cmFja0NoYW5nZXMoKSB7XG4gIC8vIFVwZGF0ZSB0aGUgdGltZSBpZi93aGVuIHRoZSBkb2N1bWVudCBiZWNvbWVzIGhpZGRlbi5cbiAgb25IaWRkZW4oZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHRpbWVTdGFtcCA9IF9hLnRpbWVTdGFtcDtcbiAgICBmaXJzdEhpZGRlblRpbWUgPSB0aW1lU3RhbXA7XG4gIH0sIHRydWUpO1xufTtcblxuZXhwb3J0IHZhciBnZXRWaXNpYmlsaXR5V2F0Y2hlciA9IGZ1bmN0aW9uIGdldFZpc2liaWxpdHlXYXRjaGVyKCkge1xuICBpZiAoZmlyc3RIaWRkZW5UaW1lIDwgMCkge1xuICAgIC8vIElmIHRoZSBkb2N1bWVudCBpcyBoaWRkZW4gd2hlbiB0aGlzIGNvZGUgcnVucywgYXNzdW1lIGl0IHdhcyBoaWRkZW5cbiAgICAvLyBzaW5jZSBuYXZpZ2F0aW9uIHN0YXJ0LiBUaGlzIGlzbid0IGEgcGVyZmVjdCBoZXVyaXN0aWMsIGJ1dCBpdCdzIHRoZVxuICAgIC8vIGJlc3Qgd2UgY2FuIGRvIHVudGlsIGFuIEFQSSBpcyBhdmFpbGFibGUgdG8gc3VwcG9ydCBxdWVyeWluZyBwYXN0XG4gICAgLy8gdmlzaWJpbGl0eVN0YXRlLlxuICAgIGZpcnN0SGlkZGVuVGltZSA9IGluaXRIaWRkZW5UaW1lKCk7XG4gICAgdHJhY2tDaGFuZ2VzKCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGdldCBmaXJzdEhpZGRlblRpbWUoKSB7XG4gICAgICByZXR1cm4gZmlyc3RIaWRkZW5UaW1lO1xuICAgIH1cblxuICB9O1xufTsiLCIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGJpbmRSZXBvcnRlciB9IGZyb20gJy4vbGliL2JpbmRSZXBvcnRlcic7XG5pbXBvcnQgeyBnZXRWaXNpYmlsaXR5V2F0Y2hlciB9IGZyb20gJy4vbGliL2dldFZpc2liaWxpdHlXYXRjaGVyJztcbmltcG9ydCB7IGluaXRNZXRyaWMgfSBmcm9tICcuL2xpYi9pbml0TWV0cmljJztcbmltcG9ydCB7IG9ic2VydmUgfSBmcm9tICcuL2xpYi9vYnNlcnZlJztcbmltcG9ydCB7IG9uSGlkZGVuIH0gZnJvbSAnLi9saWIvb25IaWRkZW4nO1xuZXhwb3J0IHZhciBnZXRGSUQgPSBmdW5jdGlvbiBnZXRGSUQob25SZXBvcnQsIHJlcG9ydEFsbENoYW5nZXMpIHtcbiAgdmFyIHZpc2liaWxpdHlXYXRjaGVyID0gZ2V0VmlzaWJpbGl0eVdhdGNoZXIoKTtcbiAgdmFyIG1ldHJpYyA9IGluaXRNZXRyaWMoJ0ZJRCcpO1xuICB2YXIgcmVwb3J0O1xuXG4gIHZhciBlbnRyeUhhbmRsZXIgPSBmdW5jdGlvbiBlbnRyeUhhbmRsZXIoZW50cnkpIHtcbiAgICAvLyBPbmx5IHJlcG9ydCBpZiB0aGUgcGFnZSB3YXNuJ3QgaGlkZGVuIHByaW9yIHRvIHRoZSBmaXJzdCBpbnB1dC5cbiAgICBpZiAocmVwb3J0ICYmIGVudHJ5LnN0YXJ0VGltZSA8IHZpc2liaWxpdHlXYXRjaGVyLmZpcnN0SGlkZGVuVGltZSkge1xuICAgICAgbWV0cmljLnZhbHVlID0gZW50cnkucHJvY2Vzc2luZ1N0YXJ0IC0gZW50cnkuc3RhcnRUaW1lO1xuICAgICAgbWV0cmljLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICByZXBvcnQodHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwbyA9IG9ic2VydmUoJ2ZpcnN0LWlucHV0JywgZW50cnlIYW5kbGVyKTtcblxuICBpZiAocG8pIHtcbiAgICByZXBvcnQgPSBiaW5kUmVwb3J0ZXIob25SZXBvcnQsIG1ldHJpYywgcmVwb3J0QWxsQ2hhbmdlcyk7XG4gICAgb25IaWRkZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcG8udGFrZVJlY29yZHMoKS5tYXAoZW50cnlIYW5kbGVyKTtcbiAgICAgIHBvLmRpc2Nvbm5lY3QoKTtcbiAgICB9LCB0cnVlKTtcbiAgfVxufTsiLCIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGJpbmRSZXBvcnRlciB9IGZyb20gJy4vbGliL2JpbmRSZXBvcnRlcic7XG5pbXBvcnQgeyBnZXRWaXNpYmlsaXR5V2F0Y2hlciB9IGZyb20gJy4vbGliL2dldFZpc2liaWxpdHlXYXRjaGVyJztcbmltcG9ydCB7IGluaXRNZXRyaWMgfSBmcm9tICcuL2xpYi9pbml0TWV0cmljJztcbmltcG9ydCB7IG9ic2VydmUgfSBmcm9tICcuL2xpYi9vYnNlcnZlJztcbmltcG9ydCB7IG9uSGlkZGVuIH0gZnJvbSAnLi9saWIvb25IaWRkZW4nO1xudmFyIHJlcG9ydGVkTWV0cmljSURzID0ge307XG5leHBvcnQgdmFyIGdldExDUCA9IGZ1bmN0aW9uIGdldExDUChvblJlcG9ydCwgcmVwb3J0QWxsQ2hhbmdlcykge1xuICB2YXIgdmlzaWJpbGl0eVdhdGNoZXIgPSBnZXRWaXNpYmlsaXR5V2F0Y2hlcigpO1xuICB2YXIgbWV0cmljID0gaW5pdE1ldHJpYygnTENQJyk7XG4gIHZhciByZXBvcnQ7XG5cbiAgdmFyIGVudHJ5SGFuZGxlciA9IGZ1bmN0aW9uIGVudHJ5SGFuZGxlcihlbnRyeSkge1xuICAgIC8vIFRoZSBzdGFydFRpbWUgYXR0cmlidXRlIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSByZW5kZXJUaW1lIGlmIGl0IGlzIG5vdCAwLFxuICAgIC8vIGFuZCB0aGUgdmFsdWUgb2YgdGhlIGxvYWRUaW1lIG90aGVyd2lzZS5cbiAgICB2YXIgdmFsdWUgPSBlbnRyeS5zdGFydFRpbWU7IC8vIElmIHRoZSBwYWdlIHdhcyBoaWRkZW4gcHJpb3IgdG8gcGFpbnQgdGltZSBvZiB0aGUgZW50cnksXG4gICAgLy8gaWdub3JlIGl0IGFuZCBtYXJrIHRoZSBtZXRyaWMgYXMgZmluYWwsIG90aGVyd2lzZSBhZGQgdGhlIGVudHJ5LlxuXG4gICAgaWYgKHZhbHVlIDwgdmlzaWJpbGl0eVdhdGNoZXIuZmlyc3RIaWRkZW5UaW1lKSB7XG4gICAgICBtZXRyaWMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIG1ldHJpYy5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIH1cblxuICAgIGlmIChyZXBvcnQpIHtcbiAgICAgIHJlcG9ydCgpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcG8gPSBvYnNlcnZlKCdsYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnQnLCBlbnRyeUhhbmRsZXIpO1xuXG4gIGlmIChwbykge1xuICAgIHJlcG9ydCA9IGJpbmRSZXBvcnRlcihvblJlcG9ydCwgbWV0cmljLCByZXBvcnRBbGxDaGFuZ2VzKTtcblxuICAgIHZhciBzdG9wTGlzdGVuaW5nXzEgPSBmdW5jdGlvbiBzdG9wTGlzdGVuaW5nXzEoKSB7XG4gICAgICBpZiAoIXJlcG9ydGVkTWV0cmljSURzW21ldHJpYy5pZF0pIHtcbiAgICAgICAgcG8udGFrZVJlY29yZHMoKS5tYXAoZW50cnlIYW5kbGVyKTtcbiAgICAgICAgcG8uZGlzY29ubmVjdCgpO1xuICAgICAgICByZXBvcnRlZE1ldHJpY0lEc1ttZXRyaWMuaWRdID0gdHJ1ZTtcbiAgICAgICAgcmVwb3J0KHRydWUpO1xuICAgICAgfVxuICAgIH07IC8vIFN0b3AgbGlzdGVuaW5nIGFmdGVyIGlucHV0LiBOb3RlOiB3aGlsZSBzY3JvbGxpbmcgaXMgYW4gaW5wdXQgdGhhdFxuICAgIC8vIHN0b3AgTENQIG9ic2VydmF0aW9uLCBpdCdzIHVucmVsaWFibGUgc2luY2UgaXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHlcbiAgICAvLyBnZW5lcmF0ZWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZS93ZWItdml0YWxzL2lzc3Vlcy83NVxuXG5cbiAgICBbJ2tleWRvd24nLCAnY2xpY2snXS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBhZGRFdmVudExpc3RlbmVyKHR5cGUsIHN0b3BMaXN0ZW5pbmdfMSwge1xuICAgICAgICBvbmNlOiB0cnVlLFxuICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvbkhpZGRlbihzdG9wTGlzdGVuaW5nXzEsIHRydWUpO1xuICB9XG59OyIsImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4sIGdldEdsb2JhbE9iamVjdCwgaHRtbFRyZWVBc1N0cmluZywgaXNOb2RlRW52LCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IG1zVG9TZWMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBnZXRDTFMgfSBmcm9tICcuL3dlYi12aXRhbHMvZ2V0Q0xTJztcbmltcG9ydCB7IGdldEZJRCB9IGZyb20gJy4vd2ViLXZpdGFscy9nZXRGSUQnO1xuaW1wb3J0IHsgZ2V0TENQIH0gZnJvbSAnLi93ZWItdml0YWxzL2dldExDUCc7XG5pbXBvcnQgeyBnZXRWaXNpYmlsaXR5V2F0Y2hlciB9IGZyb20gJy4vd2ViLXZpdGFscy9saWIvZ2V0VmlzaWJpbGl0eVdhdGNoZXInO1xudmFyIGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpO1xuZXhwb3J0IHZhciBERUZBVUxUX01FVFJJQ1NfSU5TVFJfT1BUSU9OUyA9IHtcbiAgX3JlcG9ydEFsbENoYW5nZXM6IGZhbHNlXG59O1xuLyoqIENsYXNzIHRyYWNraW5nIG1ldHJpY3MgICovXG5cbnZhciBNZXRyaWNzSW5zdHJ1bWVudGF0aW9uID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWV0cmljc0luc3RydW1lbnRhdGlvbihfb3B0aW9ucykge1xuICAgIHZhciBfYSwgX2I7XG5cbiAgICB0aGlzLl9tZWFzdXJlbWVudHMgPSB7fTtcbiAgICB0aGlzLl9wZXJmb3JtYW5jZUN1cnNvciA9IDA7XG5cbiAgICBpZiAoIWlzTm9kZUVudigpICYmICgoX2EgPSBnbG9iYWwpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wZXJmb3JtYW5jZSkgJiYgKChfYiA9IGdsb2JhbCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmRvY3VtZW50KSkge1xuICAgICAgaWYgKGdsb2JhbC5wZXJmb3JtYW5jZS5tYXJrKSB7XG4gICAgICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5tYXJrKCdzZW50cnktdHJhY2luZy1pbml0Jyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3RyYWNrQ0xTKCk7XG5cbiAgICAgIHRoaXMuX3RyYWNrTENQKF9vcHRpb25zLl9yZXBvcnRBbGxDaGFuZ2VzKTtcblxuICAgICAgdGhpcy5fdHJhY2tGSUQoKTtcbiAgICB9XG4gIH1cbiAgLyoqIEFkZCBwZXJmb3JtYW5jZSByZWxhdGVkIHNwYW5zIHRvIGEgdHJhbnNhY3Rpb24gKi9cblxuXG4gIE1ldHJpY3NJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLmFkZFBlcmZvcm1hbmNlRW50cmllcyA9IGZ1bmN0aW9uICh0cmFuc2FjdGlvbikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAoIWdsb2JhbCB8fCAhZ2xvYmFsLnBlcmZvcm1hbmNlIHx8ICFnbG9iYWwucGVyZm9ybWFuY2UuZ2V0RW50cmllcyB8fCAhYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbikge1xuICAgICAgLy8gR2F0ZWtlZXBlciBpZiBwZXJmb3JtYW5jZSBBUEkgbm90IGF2YWlsYWJsZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZ2dlci5sb2coJ1tUcmFjaW5nXSBBZGRpbmcgJiBhZGp1c3Rpbmcgc3BhbnMgdXNpbmcgUGVyZm9ybWFuY2UgQVBJJyk7XG4gICAgdmFyIHRpbWVPcmlnaW4gPSBtc1RvU2VjKGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4pO1xuICAgIHZhciBlbnRyeVNjcmlwdFNyYztcblxuICAgIGlmIChnbG9iYWwuZG9jdW1lbnQgJiYgZ2xvYmFsLmRvY3VtZW50LnNjcmlwdHMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbG9iYWwuZG9jdW1lbnQuc2NyaXB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBXZSBnbyB0aHJvdWdoIGFsbCBzY3JpcHRzIG9uIHRoZSBwYWdlIGFuZCBsb29rIGZvciAnZGF0YS1lbnRyeSdcbiAgICAgICAgLy8gV2UgcmVtZW1iZXIgdGhlIG5hbWUgYW5kIG1lYXN1cmUgdGhlIHRpbWUgYmV0d2VlbiB0aGlzIHNjcmlwdCBmaW5pc2hlZCBsb2FkaW5nIGFuZFxuICAgICAgICAvLyBvdXIgbWFyayAnc2VudHJ5LXRyYWNpbmctaW5pdCdcbiAgICAgICAgaWYgKGdsb2JhbC5kb2N1bWVudC5zY3JpcHRzW2ldLmRhdGFzZXQuZW50cnkgPT09ICd0cnVlJykge1xuICAgICAgICAgIGVudHJ5U2NyaXB0U3JjID0gZ2xvYmFsLmRvY3VtZW50LnNjcmlwdHNbaV0uc3JjO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVudHJ5U2NyaXB0U3RhcnRUaW1lc3RhbXA7XG4gICAgdmFyIHRyYWNpbmdJbml0TWFya1N0YXJ0VGltZTtcbiAgICB2YXIgcmVzcG9uc2VTdGFydFRpbWVzdGFtcDtcbiAgICB2YXIgcmVxdWVzdFN0YXJ0VGltZXN0YW1wO1xuICAgIGdsb2JhbC5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzKCkuc2xpY2UodGhpcy5fcGVyZm9ybWFuY2VDdXJzb3IpLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICB2YXIgc3RhcnRUaW1lID0gbXNUb1NlYyhlbnRyeS5zdGFydFRpbWUpO1xuICAgICAgdmFyIGR1cmF0aW9uID0gbXNUb1NlYyhlbnRyeS5kdXJhdGlvbik7XG5cbiAgICAgIGlmICh0cmFuc2FjdGlvbi5vcCA9PT0gJ25hdmlnYXRpb24nICYmIHRpbWVPcmlnaW4gKyBzdGFydFRpbWUgPCB0cmFuc2FjdGlvbi5zdGFydFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZW50cnkuZW50cnlUeXBlKSB7XG4gICAgICAgIGNhc2UgJ25hdmlnYXRpb24nOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZE5hdmlnYXRpb25TcGFucyh0cmFuc2FjdGlvbiwgZW50cnksIHRpbWVPcmlnaW4pO1xuICAgICAgICAgICAgcmVzcG9uc2VTdGFydFRpbWVzdGFtcCA9IHRpbWVPcmlnaW4gKyBtc1RvU2VjKGVudHJ5LnJlc3BvbnNlU3RhcnQpO1xuICAgICAgICAgICAgcmVxdWVzdFN0YXJ0VGltZXN0YW1wID0gdGltZU9yaWdpbiArIG1zVG9TZWMoZW50cnkucmVxdWVzdFN0YXJ0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlICdtYXJrJzpcbiAgICAgICAgY2FzZSAncGFpbnQnOlxuICAgICAgICBjYXNlICdtZWFzdXJlJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgc3RhcnRUaW1lc3RhbXAgPSBhZGRNZWFzdXJlU3BhbnModHJhbnNhY3Rpb24sIGVudHJ5LCBzdGFydFRpbWUsIGR1cmF0aW9uLCB0aW1lT3JpZ2luKTtcblxuICAgICAgICAgICAgaWYgKHRyYWNpbmdJbml0TWFya1N0YXJ0VGltZSA9PT0gdW5kZWZpbmVkICYmIGVudHJ5Lm5hbWUgPT09ICdzZW50cnktdHJhY2luZy1pbml0Jykge1xuICAgICAgICAgICAgICB0cmFjaW5nSW5pdE1hcmtTdGFydFRpbWUgPSBzdGFydFRpbWVzdGFtcDtcbiAgICAgICAgICAgIH0gLy8gY2FwdHVyZSB3ZWIgdml0YWxzXG5cblxuICAgICAgICAgICAgdmFyIGZpcnN0SGlkZGVuID0gZ2V0VmlzaWJpbGl0eVdhdGNoZXIoKTsgLy8gT25seSByZXBvcnQgaWYgdGhlIHBhZ2Ugd2Fzbid0IGhpZGRlbiBwcmlvciB0byB0aGUgd2ViIHZpdGFsLlxuXG4gICAgICAgICAgICB2YXIgc2hvdWxkUmVjb3JkID0gZW50cnkuc3RhcnRUaW1lIDwgZmlyc3RIaWRkZW4uZmlyc3RIaWRkZW5UaW1lO1xuXG4gICAgICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gJ2ZpcnN0LXBhaW50JyAmJiBzaG91bGRSZWNvcmQpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIEZQJyk7XG4gICAgICAgICAgICAgIF90aGlzLl9tZWFzdXJlbWVudHNbJ2ZwJ10gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnN0YXJ0VGltZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBfdGhpcy5fbWVhc3VyZW1lbnRzWydtYXJrLmZwJ10gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0YXJ0VGltZXN0YW1wXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbnRyeS5uYW1lID09PSAnZmlyc3QtY29udGVudGZ1bC1wYWludCcgJiYgc2hvdWxkUmVjb3JkKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBGQ1AnKTtcbiAgICAgICAgICAgICAgX3RoaXMuX21lYXN1cmVtZW50c1snZmNwJ10gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnN0YXJ0VGltZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBfdGhpcy5fbWVhc3VyZW1lbnRzWydtYXJrLmZjcCddID0ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBzdGFydFRpbWVzdGFtcFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAncmVzb3VyY2UnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXNvdXJjZU5hbWUgPSBlbnRyeS5uYW1lLnJlcGxhY2UoZ2xvYmFsLmxvY2F0aW9uLm9yaWdpbiwgJycpO1xuICAgICAgICAgICAgdmFyIGVuZFRpbWVzdGFtcCA9IGFkZFJlc291cmNlU3BhbnModHJhbnNhY3Rpb24sIGVudHJ5LCByZXNvdXJjZU5hbWUsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHRpbWVPcmlnaW4pOyAvLyBXZSByZW1lbWJlciB0aGUgZW50cnkgc2NyaXB0IGVuZCB0aW1lIHRvIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSB0byB0aGUgZmlyc3QgaW5pdCBtYXJrXG5cbiAgICAgICAgICAgIGlmIChlbnRyeVNjcmlwdFN0YXJ0VGltZXN0YW1wID09PSB1bmRlZmluZWQgJiYgKGVudHJ5U2NyaXB0U3JjIHx8ICcnKS5pbmRleE9mKHJlc291cmNlTmFtZSkgPiAtMSkge1xuICAgICAgICAgICAgICBlbnRyeVNjcmlwdFN0YXJ0VGltZXN0YW1wID0gZW5kVGltZXN0YW1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDogLy8gSWdub3JlIG90aGVyIGVudHJ5IHR5cGVzLlxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZW50cnlTY3JpcHRTdGFydFRpbWVzdGFtcCAhPT0gdW5kZWZpbmVkICYmIHRyYWNpbmdJbml0TWFya1N0YXJ0VGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBfc3RhcnRDaGlsZCh0cmFuc2FjdGlvbiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ2V2YWx1YXRpb24nLFxuICAgICAgICBlbmRUaW1lc3RhbXA6IHRyYWNpbmdJbml0TWFya1N0YXJ0VGltZSxcbiAgICAgICAgb3A6ICdzY3JpcHQnLFxuICAgICAgICBzdGFydFRpbWVzdGFtcDogZW50cnlTY3JpcHRTdGFydFRpbWVzdGFtcFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVyZm9ybWFuY2VDdXJzb3IgPSBNYXRoLm1heChwZXJmb3JtYW5jZS5nZXRFbnRyaWVzKCkubGVuZ3RoIC0gMSwgMCk7XG5cbiAgICB0aGlzLl90cmFja05hdmlnYXRvcih0cmFuc2FjdGlvbik7IC8vIE1lYXN1cmVtZW50cyBhcmUgb25seSBhdmFpbGFibGUgZm9yIHBhZ2Vsb2FkIHRyYW5zYWN0aW9uc1xuXG5cbiAgICBpZiAodHJhbnNhY3Rpb24ub3AgPT09ICdwYWdlbG9hZCcpIHtcbiAgICAgIC8vIG5vcm1hbGl6ZSBhcHBsaWNhYmxlIHdlYiB2aXRhbCB2YWx1ZXMgdG8gYmUgcmVsYXRpdmUgdG8gdHJhbnNhY3Rpb24uc3RhcnRUaW1lc3RhbXBcbiAgICAgIHZhciB0aW1lT3JpZ2luXzEgPSBtc1RvU2VjKGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4pOyAvLyBHZW5lcmF0ZSBUVEZCIChUaW1lIHRvIEZpcnN0IEJ5dGUpLCB3aGljaCBtZWFzdXJlZCBhcyB0aGUgdGltZSBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zYWN0aW9uIGFuZCB0aGVcbiAgICAgIC8vIHN0YXJ0IG9mIHRoZSByZXNwb25zZSBpbiBtaWxsaXNlY29uZHNcblxuICAgICAgaWYgKHR5cGVvZiByZXNwb25zZVN0YXJ0VGltZXN0YW1wID09PSAnbnVtYmVyJykge1xuICAgICAgICBsb2dnZXIubG9nKCdbTWVhc3VyZW1lbnRzXSBBZGRpbmcgVFRGQicpO1xuICAgICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ3R0ZmInXSA9IHtcbiAgICAgICAgICB2YWx1ZTogKHJlc3BvbnNlU3RhcnRUaW1lc3RhbXAgLSB0cmFuc2FjdGlvbi5zdGFydFRpbWVzdGFtcCkgKiAxMDAwXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0U3RhcnRUaW1lc3RhbXAgPT09ICdudW1iZXInICYmIHJlcXVlc3RTdGFydFRpbWVzdGFtcCA8PSByZXNwb25zZVN0YXJ0VGltZXN0YW1wKSB7XG4gICAgICAgICAgLy8gQ2FwdHVyZSB0aGUgdGltZSBzcGVudCBtYWtpbmcgdGhlIHJlcXVlc3QgYW5kIHJlY2VpdmluZyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmVzcG9uc2UuXG4gICAgICAgICAgLy8gVGhpcyBpcyB0aGUgdGltZSBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgcmVxdWVzdCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSByZXNwb25zZSBpbiBtaWxsaXNlY29uZHMuXG4gICAgICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWyd0dGZiLnJlcXVlc3RUaW1lJ10gPSB7XG4gICAgICAgICAgICB2YWx1ZTogKHJlc3BvbnNlU3RhcnRUaW1lc3RhbXAgLSByZXF1ZXN0U3RhcnRUaW1lc3RhbXApICogMTAwMFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgWydmY3AnLCAnZnAnLCAnbGNwJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoIV90aGlzLl9tZWFzdXJlbWVudHNbbmFtZV0gfHwgdGltZU9yaWdpbl8xID49IHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFRoZSB3ZWIgdml0YWxzLCBmY3AsIGZwLCBsY3AsIGFuZCB0dGZiLCBhbGwgbWVhc3VyZSByZWxhdGl2ZSB0byB0aW1lT3JpZ2luLlxuICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB0aW1lT3JpZ2luIGlzIG5vdCBjYXB0dXJlZCB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIHNwYW4gZGF0YSwgc28gdGhlc2Ugd2ViIHZpdGFscyB3aWxsIG5lZWRcbiAgICAgICAgLy8gdG8gYmUgYWRqdXN0ZWQgdG8gYmUgcmVsYXRpdmUgdG8gdHJhbnNhY3Rpb24uc3RhcnRUaW1lc3RhbXAuXG5cblxuICAgICAgICB2YXIgb2xkVmFsdWUgPSBfdGhpcy5fbWVhc3VyZW1lbnRzW25hbWVdLnZhbHVlO1xuICAgICAgICB2YXIgbWVhc3VyZW1lbnRUaW1lc3RhbXAgPSB0aW1lT3JpZ2luXzEgKyBtc1RvU2VjKG9sZFZhbHVlKTsgLy8gbm9ybWFsaXplZFZhbHVlIHNob3VsZCBiZSBpbiBtaWxsaXNlY29uZHNcblxuICAgICAgICB2YXIgbm9ybWFsaXplZFZhbHVlID0gTWF0aC5hYnMoKG1lYXN1cmVtZW50VGltZXN0YW1wIC0gdHJhbnNhY3Rpb24uc3RhcnRUaW1lc3RhbXApICogMTAwMCk7XG4gICAgICAgIHZhciBkZWx0YSA9IG5vcm1hbGl6ZWRWYWx1ZSAtIG9sZFZhbHVlO1xuICAgICAgICBsb2dnZXIubG9nKFwiW01lYXN1cmVtZW50c10gTm9ybWFsaXplZCBcIiArIG5hbWUgKyBcIiBmcm9tIFwiICsgb2xkVmFsdWUgKyBcIiB0byBcIiArIG5vcm1hbGl6ZWRWYWx1ZSArIFwiIChcIiArIGRlbHRhICsgXCIpXCIpO1xuICAgICAgICBfdGhpcy5fbWVhc3VyZW1lbnRzW25hbWVdLnZhbHVlID0gbm9ybWFsaXplZFZhbHVlO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLl9tZWFzdXJlbWVudHNbJ21hcmsuZmlkJ10gJiYgdGhpcy5fbWVhc3VyZW1lbnRzWydmaWQnXSkge1xuICAgICAgICAvLyBjcmVhdGUgc3BhbiBmb3IgRklEXG4gICAgICAgIF9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdmaXJzdCBpbnB1dCBkZWxheScsXG4gICAgICAgICAgZW5kVGltZXN0YW1wOiB0aGlzLl9tZWFzdXJlbWVudHNbJ21hcmsuZmlkJ10udmFsdWUgKyBtc1RvU2VjKHRoaXMuX21lYXN1cmVtZW50c1snZmlkJ10udmFsdWUpLFxuICAgICAgICAgIG9wOiAnd2ViLnZpdGFscycsXG4gICAgICAgICAgc3RhcnRUaW1lc3RhbXA6IHRoaXMuX21lYXN1cmVtZW50c1snbWFyay5maWQnXS52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gSWYgRkNQIGlzIG5vdCByZWNvcmRlZCB3ZSBzaG91bGQgbm90IHJlY29yZCB0aGUgY2xzIHZhbHVlXG4gICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIG5ldyBkZWZpbml0aW9uIG9mIENMUy5cblxuXG4gICAgICBpZiAoISgnZmNwJyBpbiB0aGlzLl9tZWFzdXJlbWVudHMpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tZWFzdXJlbWVudHMuY2xzO1xuICAgICAgfVxuXG4gICAgICB0cmFuc2FjdGlvbi5zZXRNZWFzdXJlbWVudHModGhpcy5fbWVhc3VyZW1lbnRzKTtcblxuICAgICAgdGhpcy5fdGFnTWV0cmljSW5mbyh0cmFuc2FjdGlvbik7XG4gICAgfVxuICB9O1xuICAvKiogQWRkIExDUCAvIENMUyBkYXRhIHRvIHRyYW5zYWN0aW9uIHRvIGFsbG93IGRlYnVnZ2luZyAqL1xuXG5cbiAgTWV0cmljc0luc3RydW1lbnRhdGlvbi5wcm90b3R5cGUuX3RhZ01ldHJpY0luZm8gPSBmdW5jdGlvbiAodHJhbnNhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5fbGNwRW50cnkpIHtcbiAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBMQ1AgRGF0YScpOyAvLyBDYXB0dXJlIFByb3BlcnRpZXMgb2YgdGhlIExDUCBlbGVtZW50IHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIExDUC5cblxuICAgICAgaWYgKHRoaXMuX2xjcEVudHJ5LmVsZW1lbnQpIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdsY3AuZWxlbWVudCcsIGh0bWxUcmVlQXNTdHJpbmcodGhpcy5fbGNwRW50cnkuZWxlbWVudCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fbGNwRW50cnkuaWQpIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdsY3AuaWQnLCB0aGlzLl9sY3BFbnRyeS5pZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9sY3BFbnRyeS51cmwpIHtcbiAgICAgICAgLy8gVHJpbSBVUkwgdG8gdGhlIGZpcnN0IDIwMCBjaGFyYWN0ZXJzLlxuICAgICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2xjcC51cmwnLCB0aGlzLl9sY3BFbnRyeS51cmwudHJpbSgpLnNsaWNlKDAsIDIwMCkpO1xuICAgICAgfVxuXG4gICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2xjcC5zaXplJywgdGhpcy5fbGNwRW50cnkuc2l6ZSk7XG4gICAgfSAvLyBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9MYXlvdXRTaGlmdFxuXG5cbiAgICBpZiAodGhpcy5fY2xzRW50cnkgJiYgdGhpcy5fY2xzRW50cnkuc291cmNlcykge1xuICAgICAgbG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIENMUyBEYXRhJyk7XG5cbiAgICAgIHRoaXMuX2Nsc0VudHJ5LnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb24uc2V0VGFnKFwiY2xzLnNvdXJjZS5cIiArIChpbmRleCArIDEpLCBodG1sVHJlZUFzU3RyaW5nKHNvdXJjZS5ub2RlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIC8qKiBTdGFydHMgdHJhY2tpbmcgdGhlIEN1bXVsYXRpdmUgTGF5b3V0IFNoaWZ0IG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXG5cblxuICBNZXRyaWNzSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlwZS5fdHJhY2tDTFMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpczsgLy8gU2VlOlxuICAgIC8vIGh0dHBzOi8vd2ViLmRldi9ldm9sdmluZy1jbHMvXG4gICAgLy8gaHR0cHM6Ly93ZWIuZGV2L2Nscy13ZWItdG9vbGluZy9cblxuXG4gICAgZ2V0Q0xTKGZ1bmN0aW9uIChtZXRyaWMpIHtcbiAgICAgIHZhciBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzLnBvcCgpO1xuXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIENMUycpO1xuICAgICAgX3RoaXMuX21lYXN1cmVtZW50c1snY2xzJ10gPSB7XG4gICAgICAgIHZhbHVlOiBtZXRyaWMudmFsdWVcbiAgICAgIH07XG4gICAgICBfdGhpcy5fY2xzRW50cnkgPSBlbnRyeTtcbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIENhcHR1cmUgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSB1c2VyIGFnZW50LlxuICAgKi9cblxuXG4gIE1ldHJpY3NJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLl90cmFja05hdmlnYXRvciA9IGZ1bmN0aW9uICh0cmFuc2FjdGlvbikge1xuICAgIHZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG4gICAgaWYgKCFuYXZpZ2F0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHRyYWNrIG5ldHdvcmsgY29ubmVjdGl2aXR5XG5cblxuICAgIHZhciBjb25uZWN0aW9uID0gbmF2aWdhdG9yLmNvbm5lY3Rpb247XG5cbiAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgaWYgKGNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSkge1xuICAgICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2VmZmVjdGl2ZUNvbm5lY3Rpb25UeXBlJywgY29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbm5lY3Rpb24udHlwZSkge1xuICAgICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2Nvbm5lY3Rpb25UeXBlJywgY29ubmVjdGlvbi50eXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTWVhc3VyZW1lbnRWYWx1ZShjb25uZWN0aW9uLnJ0dCkpIHtcbiAgICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWydjb25uZWN0aW9uLnJ0dCddID0ge1xuICAgICAgICAgIHZhbHVlOiBjb25uZWN0aW9uLnJ0dFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNNZWFzdXJlbWVudFZhbHVlKGNvbm5lY3Rpb24uZG93bmxpbmspKSB7XG4gICAgICAgIHRoaXMuX21lYXN1cmVtZW50c1snY29ubmVjdGlvbi5kb3dubGluayddID0ge1xuICAgICAgICAgIHZhbHVlOiBjb25uZWN0aW9uLmRvd25saW5rXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzTWVhc3VyZW1lbnRWYWx1ZShuYXZpZ2F0b3IuZGV2aWNlTWVtb3J5KSkge1xuICAgICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdkZXZpY2VNZW1vcnknLCBTdHJpbmcobmF2aWdhdG9yLmRldmljZU1lbW9yeSkpO1xuICAgIH1cblxuICAgIGlmIChpc01lYXN1cmVtZW50VmFsdWUobmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kpKSB7XG4gICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2hhcmR3YXJlQ29uY3VycmVuY3knLCBTdHJpbmcobmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kpKTtcbiAgICB9XG4gIH07XG4gIC8qKiBTdGFydHMgdHJhY2tpbmcgdGhlIExhcmdlc3QgQ29udGVudGZ1bCBQYWludCBvbiB0aGUgY3VycmVudCBwYWdlLiAqL1xuXG5cbiAgTWV0cmljc0luc3RydW1lbnRhdGlvbi5wcm90b3R5cGUuX3RyYWNrTENQID0gZnVuY3Rpb24gKHJlcG9ydEFsbENoYW5nZXMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgZ2V0TENQKGZ1bmN0aW9uIChtZXRyaWMpIHtcbiAgICAgIHZhciBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzLnBvcCgpO1xuXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRpbWVPcmlnaW4gPSBtc1RvU2VjKGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4pO1xuICAgICAgdmFyIHN0YXJ0VGltZSA9IG1zVG9TZWMoZW50cnkuc3RhcnRUaW1lKTtcbiAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBMQ1AnKTtcbiAgICAgIF90aGlzLl9tZWFzdXJlbWVudHNbJ2xjcCddID0ge1xuICAgICAgICB2YWx1ZTogbWV0cmljLnZhbHVlXG4gICAgICB9O1xuICAgICAgX3RoaXMuX21lYXN1cmVtZW50c1snbWFyay5sY3AnXSA9IHtcbiAgICAgICAgdmFsdWU6IHRpbWVPcmlnaW4gKyBzdGFydFRpbWVcbiAgICAgIH07XG4gICAgICBfdGhpcy5fbGNwRW50cnkgPSBlbnRyeTtcbiAgICB9LCByZXBvcnRBbGxDaGFuZ2VzKTtcbiAgfTtcbiAgLyoqIFN0YXJ0cyB0cmFja2luZyB0aGUgRmlyc3QgSW5wdXQgRGVsYXkgb24gdGhlIGN1cnJlbnQgcGFnZS4gKi9cblxuXG4gIE1ldHJpY3NJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLl90cmFja0ZJRCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgZ2V0RklEKGZ1bmN0aW9uIChtZXRyaWMpIHtcbiAgICAgIHZhciBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzLnBvcCgpO1xuXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRpbWVPcmlnaW4gPSBtc1RvU2VjKGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4pO1xuICAgICAgdmFyIHN0YXJ0VGltZSA9IG1zVG9TZWMoZW50cnkuc3RhcnRUaW1lKTtcbiAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBGSUQnKTtcbiAgICAgIF90aGlzLl9tZWFzdXJlbWVudHNbJ2ZpZCddID0ge1xuICAgICAgICB2YWx1ZTogbWV0cmljLnZhbHVlXG4gICAgICB9O1xuICAgICAgX3RoaXMuX21lYXN1cmVtZW50c1snbWFyay5maWQnXSA9IHtcbiAgICAgICAgdmFsdWU6IHRpbWVPcmlnaW4gKyBzdGFydFRpbWVcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE1ldHJpY3NJbnN0cnVtZW50YXRpb247XG59KCk7XG5cbmV4cG9ydCB7IE1ldHJpY3NJbnN0cnVtZW50YXRpb24gfTtcbi8qKiBJbnN0cnVtZW50IG5hdmlnYXRpb24gZW50cmllcyAqL1xuXG5mdW5jdGlvbiBhZGROYXZpZ2F0aW9uU3BhbnModHJhbnNhY3Rpb24sIGVudHJ5LCB0aW1lT3JpZ2luKSB7XG4gIGFkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyh7XG4gICAgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uLFxuICAgIGVudHJ5OiBlbnRyeSxcbiAgICBldmVudDogJ3VubG9hZEV2ZW50JyxcbiAgICB0aW1lT3JpZ2luOiB0aW1lT3JpZ2luXG4gIH0pO1xuICBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoe1xuICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbixcbiAgICBlbnRyeTogZW50cnksXG4gICAgZXZlbnQ6ICdyZWRpcmVjdCcsXG4gICAgdGltZU9yaWdpbjogdGltZU9yaWdpblxuICB9KTtcbiAgYWRkUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKHtcbiAgICB0cmFuc2FjdGlvbjogdHJhbnNhY3Rpb24sXG4gICAgZW50cnk6IGVudHJ5LFxuICAgIGV2ZW50OiAnZG9tQ29udGVudExvYWRlZEV2ZW50JyxcbiAgICB0aW1lT3JpZ2luOiB0aW1lT3JpZ2luXG4gIH0pO1xuICBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoe1xuICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbixcbiAgICBlbnRyeTogZW50cnksXG4gICAgZXZlbnQ6ICdsb2FkRXZlbnQnLFxuICAgIHRpbWVPcmlnaW46IHRpbWVPcmlnaW5cbiAgfSk7XG4gIGFkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyh7XG4gICAgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uLFxuICAgIGVudHJ5OiBlbnRyeSxcbiAgICBldmVudDogJ2Nvbm5lY3QnLFxuICAgIHRpbWVPcmlnaW46IHRpbWVPcmlnaW5cbiAgfSk7XG4gIGFkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyh7XG4gICAgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uLFxuICAgIGVudHJ5OiBlbnRyeSxcbiAgICBldmVudDogJ3NlY3VyZUNvbm5lY3Rpb24nLFxuICAgIHRpbWVPcmlnaW46IHRpbWVPcmlnaW4sXG4gICAgZXZlbnRFbmQ6ICdjb25uZWN0RW5kJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RMUy9TU0wnXG4gIH0pO1xuICBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoe1xuICAgIHRyYW5zYWN0aW9uOiB0cmFuc2FjdGlvbixcbiAgICBlbnRyeTogZW50cnksXG4gICAgZXZlbnQ6ICdmZXRjaCcsXG4gICAgdGltZU9yaWdpbjogdGltZU9yaWdpbixcbiAgICBldmVudEVuZDogJ2RvbWFpbkxvb2t1cFN0YXJ0JyxcbiAgICBkZXNjcmlwdGlvbjogJ2NhY2hlJ1xuICB9KTtcbiAgYWRkUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKHtcbiAgICB0cmFuc2FjdGlvbjogdHJhbnNhY3Rpb24sXG4gICAgZW50cnk6IGVudHJ5LFxuICAgIGV2ZW50OiAnZG9tYWluTG9va3VwJyxcbiAgICB0aW1lT3JpZ2luOiB0aW1lT3JpZ2luLFxuICAgIGRlc2NyaXB0aW9uOiAnRE5TJ1xuICB9KTtcbiAgYWRkUmVxdWVzdCh0cmFuc2FjdGlvbiwgZW50cnksIHRpbWVPcmlnaW4pO1xufVxuLyoqIENyZWF0ZSBtZWFzdXJlIHJlbGF0ZWQgc3BhbnMgKi9cblxuXG5mdW5jdGlvbiBhZGRNZWFzdXJlU3BhbnModHJhbnNhY3Rpb24sIGVudHJ5LCBzdGFydFRpbWUsIGR1cmF0aW9uLCB0aW1lT3JpZ2luKSB7XG4gIHZhciBtZWFzdXJlU3RhcnRUaW1lc3RhbXAgPSB0aW1lT3JpZ2luICsgc3RhcnRUaW1lO1xuICB2YXIgbWVhc3VyZUVuZFRpbWVzdGFtcCA9IG1lYXN1cmVTdGFydFRpbWVzdGFtcCArIGR1cmF0aW9uO1xuXG4gIF9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgZGVzY3JpcHRpb246IGVudHJ5Lm5hbWUsXG4gICAgZW5kVGltZXN0YW1wOiBtZWFzdXJlRW5kVGltZXN0YW1wLFxuICAgIG9wOiBlbnRyeS5lbnRyeVR5cGUsXG4gICAgc3RhcnRUaW1lc3RhbXA6IG1lYXN1cmVTdGFydFRpbWVzdGFtcFxuICB9KTtcblxuICByZXR1cm4gbWVhc3VyZVN0YXJ0VGltZXN0YW1wO1xufVxuLyoqIENyZWF0ZSByZXNvdXJjZS1yZWxhdGVkIHNwYW5zICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFJlc291cmNlU3BhbnModHJhbnNhY3Rpb24sIGVudHJ5LCByZXNvdXJjZU5hbWUsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHRpbWVPcmlnaW4pIHtcbiAgLy8gd2UgYWxyZWFkeSBpbnN0cnVtZW50IGJhc2VkIG9uIGZldGNoIGFuZCB4aHIsIHNvIHdlIGRvbid0IG5lZWQgdG9cbiAgLy8gZHVwbGljYXRlIHNwYW5zIGhlcmUuXG4gIGlmIChlbnRyeS5pbml0aWF0b3JUeXBlID09PSAneG1saHR0cHJlcXVlc3QnIHx8IGVudHJ5LmluaXRpYXRvclR5cGUgPT09ICdmZXRjaCcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIGRhdGEgPSB7fTtcblxuICBpZiAoJ3RyYW5zZmVyU2l6ZScgaW4gZW50cnkpIHtcbiAgICBkYXRhWydUcmFuc2ZlciBTaXplJ10gPSBlbnRyeS50cmFuc2ZlclNpemU7XG4gIH1cblxuICBpZiAoJ2VuY29kZWRCb2R5U2l6ZScgaW4gZW50cnkpIHtcbiAgICBkYXRhWydFbmNvZGVkIEJvZHkgU2l6ZSddID0gZW50cnkuZW5jb2RlZEJvZHlTaXplO1xuICB9XG5cbiAgaWYgKCdkZWNvZGVkQm9keVNpemUnIGluIGVudHJ5KSB7XG4gICAgZGF0YVsnRGVjb2RlZCBCb2R5IFNpemUnXSA9IGVudHJ5LmRlY29kZWRCb2R5U2l6ZTtcbiAgfVxuXG4gIHZhciBzdGFydFRpbWVzdGFtcCA9IHRpbWVPcmlnaW4gKyBzdGFydFRpbWU7XG4gIHZhciBlbmRUaW1lc3RhbXAgPSBzdGFydFRpbWVzdGFtcCArIGR1cmF0aW9uO1xuXG4gIF9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgZGVzY3JpcHRpb246IHJlc291cmNlTmFtZSxcbiAgICBlbmRUaW1lc3RhbXA6IGVuZFRpbWVzdGFtcCxcbiAgICBvcDogZW50cnkuaW5pdGlhdG9yVHlwZSA/IFwicmVzb3VyY2UuXCIgKyBlbnRyeS5pbml0aWF0b3JUeXBlIDogJ3Jlc291cmNlJyxcbiAgICBzdGFydFRpbWVzdGFtcDogc3RhcnRUaW1lc3RhbXAsXG4gICAgZGF0YTogZGF0YVxuICB9KTtcblxuICByZXR1cm4gZW5kVGltZXN0YW1wO1xufVxuLyoqIENyZWF0ZSBwZXJmb3JtYW5jZSBuYXZpZ2F0aW9uIHJlbGF0ZWQgc3BhbnMgKi9cblxuZnVuY3Rpb24gYWRkUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKHByb3BzKSB7XG4gIHZhciB0cmFuc2FjdGlvbiA9IHByb3BzLnRyYW5zYWN0aW9uLFxuICAgICAgZW50cnkgPSBwcm9wcy5lbnRyeSxcbiAgICAgIGV2ZW50ID0gcHJvcHMuZXZlbnQsXG4gICAgICB0aW1lT3JpZ2luID0gcHJvcHMudGltZU9yaWdpbixcbiAgICAgIGV2ZW50RW5kID0gcHJvcHMuZXZlbnRFbmQsXG4gICAgICBkZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICB2YXIgZW5kID0gZXZlbnRFbmQgPyBlbnRyeVtldmVudEVuZF0gOiBlbnRyeVtldmVudCArIFwiRW5kXCJdO1xuICB2YXIgc3RhcnQgPSBlbnRyeVtldmVudCArIFwiU3RhcnRcIl07XG5cbiAgaWYgKCFzdGFydCB8fCAhZW5kKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgX3N0YXJ0Q2hpbGQodHJhbnNhY3Rpb24sIHtcbiAgICBvcDogJ2Jyb3dzZXInLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiAhPT0gbnVsbCAmJiBkZXNjcmlwdGlvbiAhPT0gdm9pZCAwID8gZGVzY3JpcHRpb24gOiBldmVudCxcbiAgICBzdGFydFRpbWVzdGFtcDogdGltZU9yaWdpbiArIG1zVG9TZWMoc3RhcnQpLFxuICAgIGVuZFRpbWVzdGFtcDogdGltZU9yaWdpbiArIG1zVG9TZWMoZW5kKVxuICB9KTtcbn1cbi8qKiBDcmVhdGUgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcmVsYXRlZCBzcGFucyAqL1xuXG5cbmZ1bmN0aW9uIGFkZFJlcXVlc3QodHJhbnNhY3Rpb24sIGVudHJ5LCB0aW1lT3JpZ2luKSB7XG4gIF9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgb3A6ICdicm93c2VyJyxcbiAgICBkZXNjcmlwdGlvbjogJ3JlcXVlc3QnLFxuICAgIHN0YXJ0VGltZXN0YW1wOiB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbnRyeS5yZXF1ZXN0U3RhcnQpLFxuICAgIGVuZFRpbWVzdGFtcDogdGltZU9yaWdpbiArIG1zVG9TZWMoZW50cnkucmVzcG9uc2VFbmQpXG4gIH0pO1xuXG4gIF9zdGFydENoaWxkKHRyYW5zYWN0aW9uLCB7XG4gICAgb3A6ICdicm93c2VyJyxcbiAgICBkZXNjcmlwdGlvbjogJ3Jlc3BvbnNlJyxcbiAgICBzdGFydFRpbWVzdGFtcDogdGltZU9yaWdpbiArIG1zVG9TZWMoZW50cnkucmVzcG9uc2VTdGFydCksXG4gICAgZW5kVGltZXN0YW1wOiB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbnRyeS5yZXNwb25zZUVuZClcbiAgfSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzdGFydCBjaGlsZCBvbiB0cmFuc2FjdGlvbnMuIFRoaXMgZnVuY3Rpb24gd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgdHJhbnNhY3Rpb24gd2lsbFxuICogdXNlIHRoZSBzdGFydCB0aW1lc3RhbXAgb2YgdGhlIGNyZWF0ZWQgY2hpbGQgc3BhbiBpZiBpdCBpcyBlYXJsaWVyIHRoYW4gdGhlIHRyYW5zYWN0aW9ucyBhY3R1YWxcbiAqIHN0YXJ0IHRpbWVzdGFtcC5cbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBfc3RhcnRDaGlsZCh0cmFuc2FjdGlvbiwgX2EpIHtcbiAgdmFyIHN0YXJ0VGltZXN0YW1wID0gX2Euc3RhcnRUaW1lc3RhbXAsXG4gICAgICBjdHggPSBfX3Jlc3QoX2EsIFtcInN0YXJ0VGltZXN0YW1wXCJdKTtcblxuICBpZiAoc3RhcnRUaW1lc3RhbXAgJiYgdHJhbnNhY3Rpb24uc3RhcnRUaW1lc3RhbXAgPiBzdGFydFRpbWVzdGFtcCkge1xuICAgIHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wID0gc3RhcnRUaW1lc3RhbXA7XG4gIH1cblxuICByZXR1cm4gdHJhbnNhY3Rpb24uc3RhcnRDaGlsZChfX2Fzc2lnbih7XG4gICAgc3RhcnRUaW1lc3RhbXA6IHN0YXJ0VGltZXN0YW1wXG4gIH0sIGN0eCkpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiB2YWx1ZSBpcyBhIHZhbGlkIG1lYXN1cmVtZW50IHZhbHVlLlxuICovXG5cbmZ1bmN0aW9uIGlzTWVhc3VyZW1lbnRWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSk7XG59IiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fcmVhZCwgX19zcHJlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIsIGlzSW5zdGFuY2VPZiwgaXNNYXRjaGluZ1BhdHRlcm4gfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IFNwYW5TdGF0dXMgfSBmcm9tICcuLi9zcGFuc3RhdHVzJztcbmltcG9ydCB7IGdldEFjdGl2ZVRyYW5zYWN0aW9uLCBoYXNUcmFjaW5nRW5hYmxlZCB9IGZyb20gJy4uL3V0aWxzJztcbmV4cG9ydCB2YXIgREVGQVVMVF9UUkFDSU5HX09SSUdJTlMgPSBbJ2xvY2FsaG9zdCcsIC9eXFwvL107XG5leHBvcnQgdmFyIGRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyA9IHtcbiAgdHJhY2VGZXRjaDogdHJ1ZSxcbiAgdHJhY2VYSFI6IHRydWUsXG4gIHRyYWNpbmdPcmlnaW5zOiBERUZBVUxUX1RSQUNJTkdfT1JJR0lOU1xufTtcbi8qKiBSZWdpc3RlcnMgc3BhbiBjcmVhdG9ycyBmb3IgeGhyIGFuZCBmZXRjaCByZXF1ZXN0cyAgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RydW1lbnRPdXRnb2luZ1JlcXVlc3RzKF9vcHRpb25zKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgdmFyIF9hID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyksIF9vcHRpb25zKSxcbiAgICAgIHRyYWNlRmV0Y2ggPSBfYS50cmFjZUZldGNoLFxuICAgICAgdHJhY2VYSFIgPSBfYS50cmFjZVhIUixcbiAgICAgIHRyYWNpbmdPcmlnaW5zID0gX2EudHJhY2luZ09yaWdpbnMsXG4gICAgICBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCA9IF9hLnNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0OyAvLyBXZSBzaG91bGQgY2FjaGUgdXJsIC0+IGRlY2lzaW9uIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjb21wdXRlXG4gIC8vIHJlZ2V4cCBldmVyeXRpbWUgd2UgY3JlYXRlIGEgcmVxdWVzdC5cblxuXG4gIHZhciB1cmxNYXAgPSB7fTtcblxuICB2YXIgZGVmYXVsdFNob3VsZENyZWF0ZVNwYW4gPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkQ3JlYXRlU3Bhbih1cmwpIHtcbiAgICBpZiAodXJsTWFwW3VybF0pIHtcbiAgICAgIHJldHVybiB1cmxNYXBbdXJsXTtcbiAgICB9XG5cbiAgICB2YXIgb3JpZ2lucyA9IHRyYWNpbmdPcmlnaW5zO1xuICAgIHVybE1hcFt1cmxdID0gb3JpZ2lucy5zb21lKGZ1bmN0aW9uIChvcmlnaW4pIHtcbiAgICAgIHJldHVybiBpc01hdGNoaW5nUGF0dGVybih1cmwsIG9yaWdpbik7XG4gICAgfSkgJiYgIWlzTWF0Y2hpbmdQYXR0ZXJuKHVybCwgJ3NlbnRyeV9rZXknKTtcbiAgICByZXR1cm4gdXJsTWFwW3VybF07XG4gIH07IC8vIFdlIHdhbnQgdGhhdCBvdXIgdXNlcnMgZG9uJ3QgaGF2ZSB0byByZS1pbXBsZW1lbnQgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QgdGhlbXNlbHZlc1xuICAvLyBUaGF0J3Mgd2h5IHdlIGZpbHRlciBvdXQgYWxyZWFkeSB1bndhbnRlZCBTcGFucyBmcm9tIHRyYWNpbmdPcmlnaW5zXG5cblxuICB2YXIgc2hvdWxkQ3JlYXRlU3BhbiA9IGRlZmF1bHRTaG91bGRDcmVhdGVTcGFuO1xuXG4gIGlmICh0eXBlb2Ygc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzaG91bGRDcmVhdGVTcGFuID0gZnVuY3Rpb24gc2hvdWxkQ3JlYXRlU3Bhbih1cmwpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0U2hvdWxkQ3JlYXRlU3Bhbih1cmwpICYmIHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0KHVybCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBzcGFucyA9IHt9O1xuXG4gIGlmICh0cmFjZUZldGNoKSB7XG4gICAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgICBjYWxsYmFjazogZnVuY3Rpb24gY2FsbGJhY2soaGFuZGxlckRhdGEpIHtcbiAgICAgICAgZmV0Y2hDYWxsYmFjayhoYW5kbGVyRGF0YSwgc2hvdWxkQ3JlYXRlU3Bhbiwgc3BhbnMpO1xuICAgICAgfSxcbiAgICAgIHR5cGU6ICdmZXRjaCdcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0cmFjZVhIUikge1xuICAgIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKGhhbmRsZXJEYXRhKSB7XG4gICAgICAgIHhockNhbGxiYWNrKGhhbmRsZXJEYXRhLCBzaG91bGRDcmVhdGVTcGFuLCBzcGFucyk7XG4gICAgICB9LFxuICAgICAgdHlwZTogJ3hocidcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW5kIHRyYWNrIGZldGNoIHJlcXVlc3Qgc3BhbnNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2hDYWxsYmFjayhoYW5kbGVyRGF0YSwgc2hvdWxkQ3JlYXRlU3Bhbiwgc3BhbnMpIHtcbiAgaWYgKCFoYXNUcmFjaW5nRW5hYmxlZCgpIHx8ICEoaGFuZGxlckRhdGEuZmV0Y2hEYXRhICYmIHNob3VsZENyZWF0ZVNwYW4oaGFuZGxlckRhdGEuZmV0Y2hEYXRhLnVybCkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGhhbmRsZXJEYXRhLmVuZFRpbWVzdGFtcCAmJiBoYW5kbGVyRGF0YS5mZXRjaERhdGEuX19zcGFuKSB7XG4gICAgdmFyIHNwYW4gPSBzcGFuc1toYW5kbGVyRGF0YS5mZXRjaERhdGEuX19zcGFuXTtcblxuICAgIGlmIChzcGFuKSB7XG4gICAgICBpZiAoaGFuZGxlckRhdGEucmVzcG9uc2UpIHtcbiAgICAgICAgLy8gVE9ETyAoa21jbGIpIHJlbW92ZSB0aGlzIG9uY2UgdHlwZXMgUFIgZ29lcyB0aHJvdWdoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgc3Bhbi5zZXRIdHRwU3RhdHVzKGhhbmRsZXJEYXRhLnJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZXJEYXRhLmVycm9yKSB7XG4gICAgICAgIHNwYW4uc2V0U3RhdHVzKFNwYW5TdGF0dXMuSW50ZXJuYWxFcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHNwYW4uZmluaXNoKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcblxuICAgICAgZGVsZXRlIHNwYW5zW2hhbmRsZXJEYXRhLmZldGNoRGF0YS5fX3NwYW5dO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBhY3RpdmVUcmFuc2FjdGlvbiA9IGdldEFjdGl2ZVRyYW5zYWN0aW9uKCk7XG5cbiAgaWYgKGFjdGl2ZVRyYW5zYWN0aW9uKSB7XG4gICAgdmFyIHNwYW4gPSBhY3RpdmVUcmFuc2FjdGlvbi5zdGFydENoaWxkKHtcbiAgICAgIGRhdGE6IF9fYXNzaWduKF9fYXNzaWduKHt9LCBoYW5kbGVyRGF0YS5mZXRjaERhdGEpLCB7XG4gICAgICAgIHR5cGU6ICdmZXRjaCdcbiAgICAgIH0pLFxuICAgICAgZGVzY3JpcHRpb246IGhhbmRsZXJEYXRhLmZldGNoRGF0YS5tZXRob2QgKyBcIiBcIiArIGhhbmRsZXJEYXRhLmZldGNoRGF0YS51cmwsXG4gICAgICBvcDogJ2h0dHAuY2xpZW50J1xuICAgIH0pO1xuICAgIGhhbmRsZXJEYXRhLmZldGNoRGF0YS5fX3NwYW4gPSBzcGFuLnNwYW5JZDtcbiAgICBzcGFuc1tzcGFuLnNwYW5JZF0gPSBzcGFuO1xuICAgIHZhciByZXF1ZXN0ID0gaGFuZGxlckRhdGEuYXJnc1swXSA9IGhhbmRsZXJEYXRhLmFyZ3NbMF07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cbiAgICB2YXIgb3B0aW9ucyA9IGhhbmRsZXJEYXRhLmFyZ3NbMV0gPSBoYW5kbGVyRGF0YS5hcmdzWzFdIHx8IHt9O1xuICAgIHZhciBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzO1xuXG4gICAgaWYgKGlzSW5zdGFuY2VPZihyZXF1ZXN0LCBSZXF1ZXN0KSkge1xuICAgICAgaGVhZGVycyA9IHJlcXVlc3QuaGVhZGVycztcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVycykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgaWYgKHR5cGVvZiBoZWFkZXJzLmFwcGVuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKCdzZW50cnktdHJhY2UnLCBzcGFuLnRvVHJhY2VwYXJlbnQoKSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVycyA9IF9fc3ByZWFkKGhlYWRlcnMsIFtbJ3NlbnRyeS10cmFjZScsIHNwYW4udG9UcmFjZXBhcmVudCgpXV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVycyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBoZWFkZXJzKSwge1xuICAgICAgICAgICdzZW50cnktdHJhY2UnOiBzcGFuLnRvVHJhY2VwYXJlbnQoKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVycyA9IHtcbiAgICAgICAgJ3NlbnRyeS10cmFjZSc6IHNwYW4udG9UcmFjZXBhcmVudCgpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9wdGlvbnMuaGVhZGVycyA9IGhlYWRlcnM7XG4gIH1cbn1cbi8qKlxuICogQ3JlYXRlIGFuZCB0cmFjayB4aHIgcmVxdWVzdCBzcGFuc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB4aHJDYWxsYmFjayhoYW5kbGVyRGF0YSwgc2hvdWxkQ3JlYXRlU3Bhbiwgc3BhbnMpIHtcbiAgdmFyIF9hLCBfYjtcblxuICBpZiAoIWhhc1RyYWNpbmdFbmFibGVkKCkgfHwgKChfYSA9IGhhbmRsZXJEYXRhLnhocikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLl9fc2VudHJ5X293bl9yZXF1ZXN0X18pIHx8ICEoKChfYiA9IGhhbmRsZXJEYXRhLnhocikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLl9fc2VudHJ5X3hocl9fKSAmJiBzaG91bGRDcmVhdGVTcGFuKGhhbmRsZXJEYXRhLnhoci5fX3NlbnRyeV94aHJfXy51cmwpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB4aHIgPSBoYW5kbGVyRGF0YS54aHIuX19zZW50cnlfeGhyX187IC8vIGNoZWNrIGZpcnN0IGlmIHRoZSByZXF1ZXN0IGhhcyBmaW5pc2hlZCBhbmQgaXMgdHJhY2tlZCBieSBhbiBleGlzdGluZyBzcGFuIHdoaWNoIHNob3VsZCBub3cgZW5kXG5cbiAgaWYgKGhhbmRsZXJEYXRhLmVuZFRpbWVzdGFtcCAmJiBoYW5kbGVyRGF0YS54aHIuX19zZW50cnlfeGhyX3NwYW5faWRfXykge1xuICAgIHZhciBzcGFuID0gc3BhbnNbaGFuZGxlckRhdGEueGhyLl9fc2VudHJ5X3hocl9zcGFuX2lkX19dO1xuXG4gICAgaWYgKHNwYW4pIHtcbiAgICAgIHNwYW4uc2V0SHR0cFN0YXR1cyh4aHIuc3RhdHVzX2NvZGUpO1xuICAgICAgc3Bhbi5maW5pc2goKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuXG4gICAgICBkZWxldGUgc3BhbnNbaGFuZGxlckRhdGEueGhyLl9fc2VudHJ5X3hocl9zcGFuX2lkX19dO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBpZiBub3QsIGNyZWF0ZSBhIG5ldyBzcGFuIHRvIHRyYWNrIGl0XG5cblxuICB2YXIgYWN0aXZlVHJhbnNhY3Rpb24gPSBnZXRBY3RpdmVUcmFuc2FjdGlvbigpO1xuXG4gIGlmIChhY3RpdmVUcmFuc2FjdGlvbikge1xuICAgIHZhciBzcGFuID0gYWN0aXZlVHJhbnNhY3Rpb24uc3RhcnRDaGlsZCh7XG4gICAgICBkYXRhOiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgeGhyLmRhdGEpLCB7XG4gICAgICAgIHR5cGU6ICd4aHInLFxuICAgICAgICBtZXRob2Q6IHhoci5tZXRob2QsXG4gICAgICAgIHVybDogeGhyLnVybFxuICAgICAgfSksXG4gICAgICBkZXNjcmlwdGlvbjogeGhyLm1ldGhvZCArIFwiIFwiICsgeGhyLnVybCxcbiAgICAgIG9wOiAnaHR0cC5jbGllbnQnXG4gICAgfSk7XG4gICAgaGFuZGxlckRhdGEueGhyLl9fc2VudHJ5X3hocl9zcGFuX2lkX18gPSBzcGFuLnNwYW5JZDtcbiAgICBzcGFuc1toYW5kbGVyRGF0YS54aHIuX19zZW50cnlfeGhyX3NwYW5faWRfX10gPSBzcGFuO1xuXG4gICAgaWYgKGhhbmRsZXJEYXRhLnhoci5zZXRSZXF1ZXN0SGVhZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyRGF0YS54aHIuc2V0UmVxdWVzdEhlYWRlcignc2VudHJ5LXRyYWNlJywgc3Bhbi50b1RyYWNlcGFyZW50KCkpO1xuICAgICAgfSBjYXRjaCAoXykgey8vIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFJlcXVlc3RIZWFkZXInIG9uICdYTUxIdHRwUmVxdWVzdCc6IFRoZSBvYmplY3QncyBzdGF0ZSBtdXN0IGJlIE9QRU5FRC5cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgeyBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBnZXRHbG9iYWxPYmplY3QsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xudmFyIGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpO1xuLyoqXG4gKiBEZWZhdWx0IGZ1bmN0aW9uIGltcGxlbWVudGluZyBwYWdlbG9hZCBhbmQgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbnNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW5zdHJ1bWVudFJvdXRpbmdXaXRoRGVmYXVsdHMoY3VzdG9tU3RhcnRUcmFuc2FjdGlvbiwgc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQsIHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlKSB7XG4gIGlmIChzdGFydFRyYW5zYWN0aW9uT25QYWdlTG9hZCA9PT0gdm9pZCAwKSB7XG4gICAgc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlID09PSB2b2lkIDApIHtcbiAgICBzdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZSA9IHRydWU7XG4gIH1cblxuICBpZiAoIWdsb2JhbCB8fCAhZ2xvYmFsLmxvY2F0aW9uKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCBpbml0aWFsaXplIHJvdXRpbmcgaW5zdHJ1bWVudGF0aW9uIGR1ZSB0byBpbnZhbGlkIGxvY2F0aW9uJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHN0YXJ0aW5nVXJsID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XG4gIHZhciBhY3RpdmVUcmFuc2FjdGlvbjtcblxuICBpZiAoc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQpIHtcbiAgICBhY3RpdmVUcmFuc2FjdGlvbiA9IGN1c3RvbVN0YXJ0VHJhbnNhY3Rpb24oe1xuICAgICAgbmFtZTogZ2xvYmFsLmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgb3A6ICdwYWdlbG9hZCdcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChzdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZSkge1xuICAgIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIGNhbGxiYWNrKF9hKSB7XG4gICAgICAgIHZhciB0byA9IF9hLnRvLFxuICAgICAgICAgICAgZnJvbSA9IF9hLmZyb207XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGVhcmx5IHJldHVybiBpcyB0aGVyZSB0byBhY2NvdW50IGZvciBzb21lIGNhc2VzIHdoZXJlIGEgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbiBzdGFydHMgcmlnaHQgYWZ0ZXJcbiAgICAgICAgICogbG9uZy1ydW5uaW5nIHBhZ2Vsb2FkLiBXZSBtYWtlIHN1cmUgdGhhdCBpZiBgZnJvbWAgaXMgdW5kZWZpbmVkIGFuZCBhIHZhbGlkIGBzdGFydGluZ1VSTGAgZXhpc3RzLCB3ZSBkb24ndFxuICAgICAgICAgKiBjcmVhdGUgYW4gdW5lY2Nlc3NhcnkgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyB3YXMgaGFyZCB0byBkdXBsaWNhdGUsIGJ1dCB0aGlzIGJlaGF2aW9yIHN0b3BwZWQgYXMgc29vbiBhcyB0aGlzIGZpeCB3YXMgYXBwbGllZC4gVGhpcyBpc3N1ZSBtaWdodCBhbHNvXG4gICAgICAgICAqIG9ubHkgYmUgY2F1c2VkIGluIGNlcnRhaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIHdoZXJlIHRoZSB1c2FnZSBvZiBhIGhvdCBtb2R1bGUgcmVsb2FkZXIgaXMgY2F1c2luZ1xuICAgICAgICAgKiBlcnJvcnMuXG4gICAgICAgICAqL1xuXG4gICAgICAgIGlmIChmcm9tID09PSB1bmRlZmluZWQgJiYgc3RhcnRpbmdVcmwgJiYgc3RhcnRpbmdVcmwuaW5kZXhPZih0bykgIT09IC0xKSB7XG4gICAgICAgICAgc3RhcnRpbmdVcmwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyb20gIT09IHRvKSB7XG4gICAgICAgICAgc3RhcnRpbmdVcmwgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoYWN0aXZlVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgIGxvZ2dlci5sb2coXCJbVHJhY2luZ10gRmluaXNoaW5nIGN1cnJlbnQgdHJhbnNhY3Rpb24gd2l0aCBvcDogXCIgKyBhY3RpdmVUcmFuc2FjdGlvbi5vcCk7IC8vIElmIHRoZXJlJ3MgYW4gb3BlbiB0cmFuc2FjdGlvbiBvbiB0aGUgc2NvcGUsIHdlIG5lZWQgdG8gZmluaXNoIGl0IGJlZm9yZSBjcmVhdGluZyBhbiBuZXcgb25lLlxuXG4gICAgICAgICAgICBhY3RpdmVUcmFuc2FjdGlvbi5maW5pc2goKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3RpdmVUcmFuc2FjdGlvbiA9IGN1c3RvbVN0YXJ0VHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgbmFtZTogZ2xvYmFsLmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgICAgb3A6ICduYXZpZ2F0aW9uJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdHlwZTogJ2hpc3RvcnknXG4gICAgfSk7XG4gIH1cbn0iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0LCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IHN0YXJ0SWRsZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vaHViZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBERUZBVUxUX0lETEVfVElNRU9VVCB9IGZyb20gJy4uL2lkbGV0cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBTcGFuU3RhdHVzIH0gZnJvbSAnLi4vc3BhbnN0YXR1cyc7XG5pbXBvcnQgeyBleHRyYWN0VHJhY2VwYXJlbnREYXRhLCBzZWNUb01zIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJCYWNrZ3JvdW5kVGFiRGV0ZWN0aW9uIH0gZnJvbSAnLi9iYWNrZ3JvdW5kdGFiJztcbmltcG9ydCB7IERFRkFVTFRfTUVUUklDU19JTlNUUl9PUFRJT05TLCBNZXRyaWNzSW5zdHJ1bWVudGF0aW9uIH0gZnJvbSAnLi9tZXRyaWNzJztcbmltcG9ydCB7IGRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucywgaW5zdHJ1bWVudE91dGdvaW5nUmVxdWVzdHMgfSBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHsgaW5zdHJ1bWVudFJvdXRpbmdXaXRoRGVmYXVsdHMgfSBmcm9tICcuL3JvdXRlcic7XG5leHBvcnQgdmFyIERFRkFVTFRfTUFYX1RSQU5TQUNUSU9OX0RVUkFUSU9OX1NFQ09ORFMgPSA2MDA7XG5cbnZhciBERUZBVUxUX0JST1dTRVJfVFJBQ0lOR19PUFRJT05TID0gX19hc3NpZ24oe1xuICBpZGxlVGltZW91dDogREVGQVVMVF9JRExFX1RJTUVPVVQsXG4gIG1hcmtCYWNrZ3JvdW5kVHJhbnNhY3Rpb25zOiB0cnVlLFxuICBtYXhUcmFuc2FjdGlvbkR1cmF0aW9uOiBERUZBVUxUX01BWF9UUkFOU0FDVElPTl9EVVJBVElPTl9TRUNPTkRTLFxuICByb3V0aW5nSW5zdHJ1bWVudGF0aW9uOiBpbnN0cnVtZW50Um91dGluZ1dpdGhEZWZhdWx0cyxcbiAgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2U6IHRydWUsXG4gIHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkOiB0cnVlXG59LCBkZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMpO1xuLyoqXG4gKiBUaGUgQnJvd3NlciBUcmFjaW5nIGludGVncmF0aW9uIGF1dG9tYXRpY2FsbHkgaW5zdHJ1bWVudHMgYnJvd3NlciBwYWdlbG9hZC9uYXZpZ2F0aW9uXG4gKiBhY3Rpb25zIGFzIHRyYW5zYWN0aW9ucywgYW5kIGNhcHR1cmVzIHJlcXVlc3RzLCBtZXRyaWNzIGFuZCBlcnJvcnMgYXMgc3BhbnMuXG4gKlxuICogVGhlIGludGVncmF0aW9uIGNhbiBiZSBjb25maWd1cmVkIHdpdGggYSB2YXJpZXR5IG9mIG9wdGlvbnMsIGFuZCBjYW4gYmUgZXh0ZW5kZWQgdG8gdXNlXG4gKiBhbnkgcm91dGluZyBsaWJyYXJ5LiBUaGlzIGludGVncmF0aW9uIHVzZXMge0BzZWUgSWRsZVRyYW5zYWN0aW9ufSB0byBjcmVhdGUgdHJhbnNhY3Rpb25zLlxuICovXG5cblxudmFyIEJyb3dzZXJUcmFjaW5nID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQnJvd3NlclRyYWNpbmcoX29wdGlvbnMpIHtcbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IEJyb3dzZXJUcmFjaW5nLmlkO1xuICAgIHRoaXMuX2VtaXRPcHRpb25zV2FybmluZyA9IGZhbHNlO1xuICAgIHZhciB0cmFjaW5nT3JpZ2lucyA9IGRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucy50cmFjaW5nT3JpZ2luczsgLy8gTk9URTogTG9nZ2VyIGRvZXNuJ3Qgd29yayBpbiBjb25zdHJ1Y3RvcnMsIGFzIGl0J3MgaW5pdGlhbGl6ZWQgYWZ0ZXIgaW50ZWdyYXRpb25zIGluc3RhbmNlc1xuXG4gICAgaWYgKF9vcHRpb25zICYmIF9vcHRpb25zLnRyYWNpbmdPcmlnaW5zICYmIEFycmF5LmlzQXJyYXkoX29wdGlvbnMudHJhY2luZ09yaWdpbnMpICYmIF9vcHRpb25zLnRyYWNpbmdPcmlnaW5zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdHJhY2luZ09yaWdpbnMgPSBfb3B0aW9ucy50cmFjaW5nT3JpZ2lucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZW1pdE9wdGlvbnNXYXJuaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbih7fSwgREVGQVVMVF9CUk9XU0VSX1RSQUNJTkdfT1BUSU9OUyksIF9vcHRpb25zKSwge1xuICAgICAgdHJhY2luZ09yaWdpbnM6IHRyYWNpbmdPcmlnaW5zXG4gICAgfSk7XG4gICAgdGhpcy5fbWV0cmljcyA9IG5ldyBNZXRyaWNzSW5zdHJ1bWVudGF0aW9uKF9fYXNzaWduKF9fYXNzaWduKHt9LCBERUZBVUxUX01FVFJJQ1NfSU5TVFJfT1BUSU9OUyksIHRoaXMub3B0aW9ucy5fbWV0cmljT3B0aW9ucykpO1xuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIEJyb3dzZXJUcmFjaW5nLnByb3RvdHlwZS5zZXR1cE9uY2UgPSBmdW5jdGlvbiAoXywgZ2V0Q3VycmVudEh1Yikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9nZXRDdXJyZW50SHViID0gZ2V0Q3VycmVudEh1YjtcblxuICAgIGlmICh0aGlzLl9lbWl0T3B0aW9uc1dhcm5pbmcpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbVHJhY2luZ10gWW91IG5lZWQgdG8gZGVmaW5lIGB0cmFjaW5nT3JpZ2luc2AgaW4gdGhlIG9wdGlvbnMuIFNldCBhbiBhcnJheSBvZiB1cmxzIG9yIHBhdHRlcm5zIHRvIHRyYWNlLicpO1xuICAgICAgbG9nZ2VyLndhcm4oXCJbVHJhY2luZ10gV2UgYWRkZWQgYSByZWFzb25hYmxlIGRlZmF1bHQgZm9yIHlvdTogXCIgKyBkZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMudHJhY2luZ09yaWdpbnMpO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuXG5cbiAgICB2YXIgX2EgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGluc3RydW1lbnRSb3V0aW5nID0gX2Eucm91dGluZ0luc3RydW1lbnRhdGlvbixcbiAgICAgICAgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2UgPSBfYS5zdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZSxcbiAgICAgICAgc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQgPSBfYS5zdGFydFRyYW5zYWN0aW9uT25QYWdlTG9hZCxcbiAgICAgICAgbWFya0JhY2tncm91bmRUcmFuc2FjdGlvbnMgPSBfYS5tYXJrQmFja2dyb3VuZFRyYW5zYWN0aW9ucyxcbiAgICAgICAgdHJhY2VGZXRjaCA9IF9hLnRyYWNlRmV0Y2gsXG4gICAgICAgIHRyYWNlWEhSID0gX2EudHJhY2VYSFIsXG4gICAgICAgIHRyYWNpbmdPcmlnaW5zID0gX2EudHJhY2luZ09yaWdpbnMsXG4gICAgICAgIHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0ID0gX2Euc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3Q7XG4gICAgaW5zdHJ1bWVudFJvdXRpbmcoZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIHJldHVybiBfdGhpcy5fY3JlYXRlUm91dGVUcmFuc2FjdGlvbihjb250ZXh0KTtcbiAgICB9LCBzdGFydFRyYW5zYWN0aW9uT25QYWdlTG9hZCwgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2UpO1xuXG4gICAgaWYgKG1hcmtCYWNrZ3JvdW5kVHJhbnNhY3Rpb25zKSB7XG4gICAgICByZWdpc3RlckJhY2tncm91bmRUYWJEZXRlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBpbnN0cnVtZW50T3V0Z29pbmdSZXF1ZXN0cyh7XG4gICAgICB0cmFjZUZldGNoOiB0cmFjZUZldGNoLFxuICAgICAgdHJhY2VYSFI6IHRyYWNlWEhSLFxuICAgICAgdHJhY2luZ09yaWdpbnM6IHRyYWNpbmdPcmlnaW5zLFxuICAgICAgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3Q6IHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0XG4gICAgfSk7XG4gIH07XG4gIC8qKiBDcmVhdGUgcm91dGluZyBpZGxlIHRyYW5zYWN0aW9uLiAqL1xuXG5cbiAgQnJvd3NlclRyYWNpbmcucHJvdG90eXBlLl9jcmVhdGVSb3V0ZVRyYW5zYWN0aW9uID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKCF0aGlzLl9nZXRDdXJyZW50SHViKSB7XG4gICAgICBsb2dnZXIud2FybihcIltUcmFjaW5nXSBEaWQgbm90IGNyZWF0ZSBcIiArIGNvbnRleHQub3AgKyBcIiB0cmFuc2FjdGlvbiBiZWNhdXNlIF9nZXRDdXJyZW50SHViIGlzIGludmFsaWQuXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcblxuXG4gICAgdmFyIF9hID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBiZWZvcmVOYXZpZ2F0ZSA9IF9hLmJlZm9yZU5hdmlnYXRlLFxuICAgICAgICBpZGxlVGltZW91dCA9IF9hLmlkbGVUaW1lb3V0LFxuICAgICAgICBtYXhUcmFuc2FjdGlvbkR1cmF0aW9uID0gX2EubWF4VHJhbnNhY3Rpb25EdXJhdGlvbjtcbiAgICB2YXIgcGFyZW50Q29udGV4dEZyb21IZWFkZXIgPSBjb250ZXh0Lm9wID09PSAncGFnZWxvYWQnID8gZ2V0SGVhZGVyQ29udGV4dCgpIDogdW5kZWZpbmVkO1xuXG4gICAgdmFyIGV4cGFuZGVkQ29udGV4dCA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb250ZXh0KSwgcGFyZW50Q29udGV4dEZyb21IZWFkZXIpLCB7XG4gICAgICB0cmltRW5kOiB0cnVlXG4gICAgfSk7XG5cbiAgICB2YXIgbW9kaWZpZWRDb250ZXh0ID0gdHlwZW9mIGJlZm9yZU5hdmlnYXRlID09PSAnZnVuY3Rpb24nID8gYmVmb3JlTmF2aWdhdGUoZXhwYW5kZWRDb250ZXh0KSA6IGV4cGFuZGVkQ29udGV4dDsgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIGJlZm9yZU5hdmlnYXRlIGNhbiByZXR1cm4gdW5kZWZpbmVkIHRvIFwiZHJvcFwiIHRoZSB0cmFuc2FjdGlvbiAocHJldmVudCBpdFxuICAgIC8vIGZyb20gYmVpbmcgc2VudCB0byBTZW50cnkpLlxuXG4gICAgdmFyIGZpbmFsQ29udGV4dCA9IG1vZGlmaWVkQ29udGV4dCA9PT0gdW5kZWZpbmVkID8gX19hc3NpZ24oX19hc3NpZ24oe30sIGV4cGFuZGVkQ29udGV4dCksIHtcbiAgICAgIHNhbXBsZWQ6IGZhbHNlXG4gICAgfSkgOiBtb2RpZmllZENvbnRleHQ7XG5cbiAgICBpZiAoZmluYWxDb250ZXh0LnNhbXBsZWQgPT09IGZhbHNlKSB7XG4gICAgICBsb2dnZXIubG9nKFwiW1RyYWNpbmddIFdpbGwgbm90IHNlbmQgXCIgKyBmaW5hbENvbnRleHQub3AgKyBcIiB0cmFuc2FjdGlvbiBiZWNhdXNlIG9mIGJlZm9yZU5hdmlnYXRlLlwiKTtcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKFwiW1RyYWNpbmddIFN0YXJ0aW5nIFwiICsgZmluYWxDb250ZXh0Lm9wICsgXCIgdHJhbnNhY3Rpb24gb24gc2NvcGVcIik7XG5cbiAgICB2YXIgaHViID0gdGhpcy5fZ2V0Q3VycmVudEh1YigpO1xuXG4gICAgdmFyIGxvY2F0aW9uID0gZ2V0R2xvYmFsT2JqZWN0KCkubG9jYXRpb247XG4gICAgdmFyIGlkbGVUcmFuc2FjdGlvbiA9IHN0YXJ0SWRsZVRyYW5zYWN0aW9uKGh1YiwgZmluYWxDb250ZXh0LCBpZGxlVGltZW91dCwgdHJ1ZSwge1xuICAgICAgbG9jYXRpb246IGxvY2F0aW9uXG4gICAgfSk7XG4gICAgaWRsZVRyYW5zYWN0aW9uLnJlZ2lzdGVyQmVmb3JlRmluaXNoQ2FsbGJhY2soZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBlbmRUaW1lc3RhbXApIHtcbiAgICAgIF90aGlzLl9tZXRyaWNzLmFkZFBlcmZvcm1hbmNlRW50cmllcyh0cmFuc2FjdGlvbik7XG5cbiAgICAgIGFkanVzdFRyYW5zYWN0aW9uRHVyYXRpb24oc2VjVG9NcyhtYXhUcmFuc2FjdGlvbkR1cmF0aW9uKSwgdHJhbnNhY3Rpb24sIGVuZFRpbWVzdGFtcCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGlkbGVUcmFuc2FjdGlvbjtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgQnJvd3NlclRyYWNpbmcuaWQgPSAnQnJvd3NlclRyYWNpbmcnO1xuICByZXR1cm4gQnJvd3NlclRyYWNpbmc7XG59KCk7XG5cbmV4cG9ydCB7IEJyb3dzZXJUcmFjaW5nIH07XG4vKipcbiAqIEdldHMgdHJhbnNhY3Rpb24gY29udGV4dCBmcm9tIGEgc2VudHJ5LXRyYWNlIG1ldGEuXG4gKlxuICogQHJldHVybnMgVHJhbnNhY3Rpb24gY29udGV4dCBkYXRhIGZyb20gdGhlIGhlYWRlciBvciB1bmRlZmluZWQgaWYgdGhlcmUncyBubyBoZWFkZXIgb3IgdGhlIGhlYWRlciBpcyBtYWxmb3JtZWRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyQ29udGV4dCgpIHtcbiAgdmFyIGhlYWRlciA9IGdldE1ldGFDb250ZW50KCdzZW50cnktdHJhY2UnKTtcblxuICBpZiAoaGVhZGVyKSB7XG4gICAgcmV0dXJuIGV4dHJhY3RUcmFjZXBhcmVudERhdGEoaGVhZGVyKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4vKiogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBtZXRhIHRhZyAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YUNvbnRlbnQobWV0YU5hbWUpIHtcbiAgdmFyIGVsID0gZ2V0R2xvYmFsT2JqZWN0KCkuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT1cIiArIG1ldGFOYW1lICsgXCJdXCIpO1xuICByZXR1cm4gZWwgPyBlbC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKSA6IG51bGw7XG59XG4vKiogQWRqdXN0cyB0cmFuc2FjdGlvbiB2YWx1ZSBiYXNlZCBvbiBtYXggdHJhbnNhY3Rpb24gZHVyYXRpb24gKi9cblxuZnVuY3Rpb24gYWRqdXN0VHJhbnNhY3Rpb25EdXJhdGlvbihtYXhEdXJhdGlvbiwgdHJhbnNhY3Rpb24sIGVuZFRpbWVzdGFtcCkge1xuICB2YXIgZGlmZiA9IGVuZFRpbWVzdGFtcCAtIHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wO1xuICB2YXIgaXNPdXRkYXRlZFRyYW5zYWN0aW9uID0gZW5kVGltZXN0YW1wICYmIChkaWZmID4gbWF4RHVyYXRpb24gfHwgZGlmZiA8IDApO1xuXG4gIGlmIChpc091dGRhdGVkVHJhbnNhY3Rpb24pIHtcbiAgICB0cmFuc2FjdGlvbi5zZXRTdGF0dXMoU3BhblN0YXR1cy5EZWFkbGluZUV4Y2VlZGVkKTtcbiAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ21heFRyYW5zYWN0aW9uRHVyYXRpb25FeGNlZWRlZCcsICd0cnVlJyk7XG4gIH1cbn0iLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbi8qKlxuICogRXhwcmVzcyBpbnRlZ3JhdGlvblxuICpcbiAqIFByb3ZpZGVzIGFuIHJlcXVlc3QgYW5kIGVycm9yIGhhbmRsZXIgZm9yIEV4cHJlc3MgZnJhbWV3b3JrIGFzIHdlbGwgYXMgdHJhY2luZyBjYXBhYmlsaXRpZXNcbiAqL1xuXG52YXIgRXhwcmVzcyA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgZnVuY3Rpb24gRXhwcmVzcyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuXG5cbiAgICB0aGlzLm5hbWUgPSBFeHByZXNzLmlkO1xuICAgIHRoaXMuX3JvdXRlciA9IG9wdGlvbnMucm91dGVyIHx8IG9wdGlvbnMuYXBwO1xuICAgIHRoaXMuX21ldGhvZHMgPSAoQXJyYXkuaXNBcnJheShvcHRpb25zLm1ldGhvZHMpID8gb3B0aW9ucy5tZXRob2RzIDogW10pLmNvbmNhdCgndXNlJyk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgRXhwcmVzcy5wcm90b3R5cGUuc2V0dXBPbmNlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fcm91dGVyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0V4cHJlc3NJbnRlZ3JhdGlvbiBpcyBtaXNzaW5nIGFuIEV4cHJlc3MgaW5zdGFuY2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnN0cnVtZW50TWlkZGxld2FyZXModGhpcy5fcm91dGVyLCB0aGlzLl9tZXRob2RzKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgRXhwcmVzcy5pZCA9ICdFeHByZXNzJztcbiAgcmV0dXJuIEV4cHJlc3M7XG59KCk7XG5cbmV4cG9ydCB7IEV4cHJlc3MgfTtcbi8qKlxuICogV3JhcHMgb3JpZ2luYWwgbWlkZGxld2FyZSBmdW5jdGlvbiBpbiBhIHRyYWNpbmcgY2FsbCwgd2hpY2ggc3RvcmVzIHRoZSBpbmZvIGFib3V0IHRoZSBjYWxsIGFzIGEgc3BhbixcbiAqIGFuZCBmaW5pc2hlcyBpdCBvbmNlIHRoZSBtaWRkbGV3YXJlIGlzIGRvbmUgaW52b2tpbmcuXG4gKlxuICogRXhwcmVzcyBtaWRkbGV3YXJlcyBoYXZlIDMgdmFyaW91cyBmb3JtcywgdGh1cyB3ZSBoYXZlIHRvIHRha2UgY2FyZSBvZiBhbGwgb2YgdGhlbTpcbiAqIC8vIHN5bmNcbiAqIGFwcC51c2UoZnVuY3Rpb24gKHJlcSwgcmVzKSB7IC4uLiB9KVxuICogLy8gYXN5bmNcbiAqIGFwcC51c2UoZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7IC4uLiB9KVxuICogLy8gZXJyb3IgaGFuZGxlclxuICogYXBwLnVzZShmdW5jdGlvbiAoZXJyLCByZXEsIHJlcywgbmV4dCkgeyAuLi4gfSlcbiAqXG4gKiBUaGV5IGFsbCBpbnRlcm5hbGx5IGRlbGVnYXRlIHRvIHRoZSBgcm91dGVyW21ldGhvZF1gIG9mIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuZnVuY3Rpb24gd3JhcChmbiwgbWV0aG9kKSB7XG4gIHZhciBhcml0eSA9IGZuLmxlbmd0aDtcblxuICBzd2l0Y2ggKGFyaXR5KSB7XG4gICAgY2FzZSAyOlxuICAgICAge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHJlcSwgcmVzKSB7XG4gICAgICAgICAgdmFyIHRyYW5zYWN0aW9uID0gcmVzLl9fc2VudHJ5X3RyYW5zYWN0aW9uO1xuXG4gICAgICAgICAgaWYgKHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc3Bhbl8xID0gdHJhbnNhY3Rpb24uc3RhcnRDaGlsZCh7XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmbi5uYW1lLFxuICAgICAgICAgICAgICBvcDogXCJtaWRkbGV3YXJlLlwiICsgbWV0aG9kXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlcy5vbmNlKCdmaW5pc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHNwYW5fMS5maW5pc2goKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIHJlcSwgcmVzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgIGNhc2UgMzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuICAgICAgICAgIHZhciBfYTtcblxuICAgICAgICAgIHZhciB0cmFuc2FjdGlvbiA9IHJlcy5fX3NlbnRyeV90cmFuc2FjdGlvbjtcbiAgICAgICAgICB2YXIgc3BhbiA9IChfYSA9IHRyYW5zYWN0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3RhcnRDaGlsZCh7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZm4ubmFtZSxcbiAgICAgICAgICAgIG9wOiBcIm1pZGRsZXdhcmUuXCIgKyBtZXRob2RcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmbi5jYWxsKHRoaXMsIHJlcSwgcmVzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBfYTtcblxuICAgICAgICAgICAgKF9hID0gc3BhbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZpbmlzaCgpO1xuICAgICAgICAgICAgbmV4dC5jYWxsLmFwcGx5KG5leHQsIF9fc3ByZWFkKFt0aGlzXSwgYXJncykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgY2FzZSA0OlxuICAgICAge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgcmVxLCByZXMsIG5leHQpIHtcbiAgICAgICAgICB2YXIgX2E7XG5cbiAgICAgICAgICB2YXIgdHJhbnNhY3Rpb24gPSByZXMuX19zZW50cnlfdHJhbnNhY3Rpb247XG4gICAgICAgICAgdmFyIHNwYW4gPSAoX2EgPSB0cmFuc2FjdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0YXJ0Q2hpbGQoe1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGZuLm5hbWUsXG4gICAgICAgICAgICBvcDogXCJtaWRkbGV3YXJlLlwiICsgbWV0aG9kXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm4uY2FsbCh0aGlzLCBlcnIsIHJlcSwgcmVzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBfYTtcblxuICAgICAgICAgICAgKF9hID0gc3BhbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZpbmlzaCgpO1xuICAgICAgICAgICAgbmV4dC5jYWxsLmFwcGx5KG5leHQsIF9fc3ByZWFkKFt0aGlzXSwgYXJncykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwcmVzcyBtaWRkbGV3YXJlIHRha2VzIDItNCBhcmd1bWVudHMuIEdvdDogXCIgKyBhcml0eSk7XG4gICAgICB9XG4gIH1cbn1cbi8qKlxuICogVGFrZXMgYWxsIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBvcmlnaW5hbCBgYXBwYCBvciBgcm91dGVyYCBtZXRob2QsIGVnLiBgYXBwLnVzZWAgb3IgYHJvdXRlci51c2VgXG4gKiBhbmQgd3JhcHMgZXZlcnkgZnVuY3Rpb24sIGFzIHdlbGwgYXMgYXJyYXkgb2YgZnVuY3Rpb25zIHdpdGggYSBjYWxsIHRvIG91ciBgd3JhcGAgbWV0aG9kLlxuICogV2UgaGF2ZSB0byB0YWtlIGNhcmUgb2YgdGhlIGFycmF5cyBhcyB3ZWxsIGFzIGl0ZXJhdGUgb3ZlciBhbGwgb2YgdGhlIGFyZ3VtZW50cyxcbiAqIGFzIGBhcHAudXNlYCBjYW4gYWNjZXB0IG1pZGRsZXdhcmVzIGluIGZldyB2YXJpb3VzIGZvcm1zLlxuICpcbiAqIGFwcC51c2UoWzxwYXRoPl0sIDxmbj4pXG4gKiBhcHAudXNlKFs8cGF0aD5dLCA8Zm4+LCAuLi48Zm4+KVxuICogYXBwLnVzZShbPHBhdGg+XSwgLi4uPGZuPltdKVxuICovXG5cblxuZnVuY3Rpb24gd3JhcE1pZGRsZXdhcmVBcmdzKGFyZ3MsIG1ldGhvZCkge1xuICByZXR1cm4gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gd3JhcChhcmcsIG1ldGhvZCk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgcmV0dXJuIGFyZy5tYXAoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHdyYXAoYSwgbWV0aG9kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZztcbiAgfSk7XG59XG4vKipcbiAqIFBhdGNoZXMgb3JpZ2luYWwgcm91dGVyIHRvIHV0aWxpemUgb3VyIHRyYWNpbmcgZnVuY3Rpb25hbGl0eVxuICovXG5cblxuZnVuY3Rpb24gcGF0Y2hNaWRkbGV3YXJlKHJvdXRlciwgbWV0aG9kKSB7XG4gIHZhciBvcmlnaW5hbENhbGxiYWNrID0gcm91dGVyW21ldGhvZF07XG5cbiAgcm91dGVyW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdpbmFsQ2FsbGJhY2suY2FsbC5hcHBseShvcmlnaW5hbENhbGxiYWNrLCBfX3NwcmVhZChbdGhpc10sIHdyYXBNaWRkbGV3YXJlQXJncyhhcmdzLCBtZXRob2QpKSk7XG4gIH07XG5cbiAgcmV0dXJuIHJvdXRlcjtcbn1cbi8qKlxuICogUGF0Y2hlcyBvcmlnaW5hbCByb3V0ZXIgbWV0aG9kc1xuICovXG5cblxuZnVuY3Rpb24gaW5zdHJ1bWVudE1pZGRsZXdhcmVzKHJvdXRlciwgbWV0aG9kcykge1xuICBpZiAobWV0aG9kcyA9PT0gdm9pZCAwKSB7XG4gICAgbWV0aG9kcyA9IFtdO1xuICB9XG5cbiAgbWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICByZXR1cm4gcGF0Y2hNaWRkbGV3YXJlKHJvdXRlciwgbWV0aG9kKTtcbiAgfSk7XG59IiwiaW1wb3J0IHsgZmlsbCwgaXNUaGVuYWJsZSwgbG9hZE1vZHVsZSwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG4vKiogVHJhY2luZyBpbnRlZ3JhdGlvbiBmb3Igbm9kZS1wb3N0Z3JlcyBwYWNrYWdlICovXG5cbnZhciBQb3N0Z3JlcyA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBvc3RncmVzKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG5cblxuICAgIHRoaXMubmFtZSA9IFBvc3RncmVzLmlkO1xuICAgIHRoaXMuX3VzZVBnTmF0aXZlID0gISFvcHRpb25zLnVzZVBnTmF0aXZlO1xuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFBvc3RncmVzLnByb3RvdHlwZS5zZXR1cE9uY2UgPSBmdW5jdGlvbiAoXywgZ2V0Q3VycmVudEh1Yikge1xuICAgIHZhciBfYTtcblxuICAgIHZhciBwa2cgPSBsb2FkTW9kdWxlKCdwZycpO1xuXG4gICAgaWYgKCFwa2cpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignUG9zdGdyZXMgSW50ZWdyYXRpb24gd2FzIHVuYWJsZSB0byByZXF1aXJlIGBwZ2AgcGFja2FnZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdXNlUGdOYXRpdmUgJiYgISgoX2EgPSBwa2cubmF0aXZlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuQ2xpZW50KSkge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiUG9zdGdyZXMgSW50ZWdyYXRpb24gd2FzIHVuYWJsZSB0byBhY2Nlc3MgJ3BnLW5hdGl2ZScgYmluZGluZ3MuXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBDbGllbnQgPSAodGhpcy5fdXNlUGdOYXRpdmUgPyBwa2cubmF0aXZlIDogcGtnKS5DbGllbnQ7XG4gICAgLyoqXG4gICAgICogZnVuY3Rpb24gKHF1ZXJ5LCBjYWxsYmFjaykgPT4gdm9pZFxuICAgICAqIGZ1bmN0aW9uIChxdWVyeSwgcGFyYW1zLCBjYWxsYmFjaykgPT4gdm9pZFxuICAgICAqIGZ1bmN0aW9uIChxdWVyeSkgPT4gUHJvbWlzZVxuICAgICAqIGZ1bmN0aW9uIChxdWVyeSwgcGFyYW1zKSA9PiBQcm9taXNlXG4gICAgICogZnVuY3Rpb24gKHBnLkN1cnNvcikgPT4gcGcuQ3Vyc29yXG4gICAgICovXG5cbiAgICBmaWxsKENsaWVudC5wcm90b3R5cGUsICdxdWVyeScsIGZ1bmN0aW9uIChvcmlnKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGNvbmZpZywgdmFsdWVzLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcblxuICAgICAgICB2YXIgc2NvcGUgPSBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTtcbiAgICAgICAgdmFyIHBhcmVudFNwYW4gPSAoX2EgPSBzY29wZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFNwYW4oKTtcbiAgICAgICAgdmFyIHNwYW4gPSAoX2IgPSBwYXJlbnRTcGFuKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3RhcnRDaGlsZCh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnID8gY29uZmlnIDogY29uZmlnLnRleHQsXG4gICAgICAgICAgb3A6IFwiZGJcIlxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCBjb25maWcsIHZhbHVlcywgZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG5cbiAgICAgICAgICAgIChfYSA9IHNwYW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maW5pc2goKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCBjb25maWcsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuXG4gICAgICAgICAgICAoX2EgPSBzcGFuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmluaXNoKCk7XG4gICAgICAgICAgICB2YWx1ZXMoZXJyLCByZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJ2ID0gdHlwZW9mIHZhbHVlcyAhPT0gJ3VuZGVmaW5lZCcgPyBvcmlnLmNhbGwodGhpcywgY29uZmlnLCB2YWx1ZXMpIDogb3JpZy5jYWxsKHRoaXMsIGNvbmZpZyk7XG5cbiAgICAgICAgaWYgKGlzVGhlbmFibGUocnYpKSB7XG4gICAgICAgICAgcmV0dXJuIHJ2LnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdmFyIF9hO1xuXG4gICAgICAgICAgICAoX2EgPSBzcGFuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgKF9jID0gc3BhbikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmZpbmlzaCgpO1xuICAgICAgICByZXR1cm4gcnY7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBQb3N0Z3Jlcy5pZCA9ICdQb3N0Z3Jlcyc7XG4gIHJldHVybiBQb3N0Z3Jlcztcbn0oKTtcblxuZXhwb3J0IHsgUG9zdGdyZXMgfTsiLCJpbXBvcnQgeyBmaWxsLCBsb2FkTW9kdWxlLCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbi8qKiBUcmFjaW5nIGludGVncmF0aW9uIGZvciBub2RlLW15c3FsIHBhY2thZ2UgKi9cblxudmFyIE15c3FsID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTXlzcWwoKSB7XG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBNeXNxbC5pZDtcbiAgfVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBNeXNxbC5wcm90b3R5cGUuc2V0dXBPbmNlID0gZnVuY3Rpb24gKF8sIGdldEN1cnJlbnRIdWIpIHtcbiAgICB2YXIgcGtnID0gbG9hZE1vZHVsZSgnbXlzcWwvbGliL0Nvbm5lY3Rpb24uanMnKTtcblxuICAgIGlmICghcGtnKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ015c3FsIEludGVncmF0aW9uIHdhcyB1bmFibGUgdG8gcmVxdWlyZSBgbXlzcWxgIHBhY2thZ2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gd2lsbCBoYXZlIG9uZSBvZiB0aGVzZSBzaWduYXR1cmVzOlxuICAgIC8vICAgIGZ1bmN0aW9uIChjYWxsYmFjaykgPT4gdm9pZFxuICAgIC8vICAgIGZ1bmN0aW9uIChvcHRpb25zLCBjYWxsYmFjaykgPT4gdm9pZFxuICAgIC8vICAgIGZ1bmN0aW9uIChvcHRpb25zLCB2YWx1ZXMsIGNhbGxiYWNrKSA9PiB2b2lkXG5cblxuICAgIGZpbGwocGtnLCAnY3JlYXRlUXVlcnknLCBmdW5jdGlvbiAob3JpZykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvcHRpb25zLCB2YWx1ZXMsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG5cbiAgICAgICAgdmFyIHNjb3BlID0gZ2V0Q3VycmVudEh1YigpLmdldFNjb3BlKCk7XG4gICAgICAgIHZhciBwYXJlbnRTcGFuID0gKF9hID0gc2NvcGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRTcGFuKCk7XG4gICAgICAgIHZhciBzcGFuID0gKF9iID0gcGFyZW50U3BhbikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0YXJ0Q2hpbGQoe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycgPyBvcHRpb25zIDogb3B0aW9ucy5zcWwsXG4gICAgICAgICAgb3A6IFwiZGJcIlxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCBvcHRpb25zLCB2YWx1ZXMsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCwgZmllbGRzKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG5cbiAgICAgICAgICAgIChfYSA9IHNwYW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maW5pc2goKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0LCBmaWVsZHMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb3JpZy5jYWxsKHRoaXMsIG9wdGlvbnMsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCwgZmllbGRzKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG5cbiAgICAgICAgICAgIChfYSA9IHNwYW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maW5pc2goKTtcbiAgICAgICAgICAgIHZhbHVlcyhlcnIsIHJlc3VsdCwgZmllbGRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnLmNhbGwodGhpcywgb3B0aW9ucywgdmFsdWVzLCBjYWxsYmFjayk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBNeXNxbC5pZCA9ICdNeXNxbCc7XG4gIHJldHVybiBNeXNxbDtcbn0oKTtcblxuZXhwb3J0IHsgTXlzcWwgfTsiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBmaWxsLCBpc1RoZW5hYmxlLCBsb2FkTW9kdWxlLCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbnZhciBPUEVSQVRJT05TID0gWydhZ2dyZWdhdGUnLCAnYnVsa1dyaXRlJywgJ2NvdW50RG9jdW1lbnRzJywgJ2NyZWF0ZUluZGV4JywgJ2NyZWF0ZUluZGV4ZXMnLCAnZGVsZXRlTWFueScsICdkZWxldGVPbmUnLCAnZGlzdGluY3QnLCAnZHJvcCcsICdkcm9wSW5kZXgnLCAnZHJvcEluZGV4ZXMnLCAnZXN0aW1hdGVkRG9jdW1lbnRDb3VudCcsICdmaW5kJywgJ2ZpbmRPbmUnLCAnZmluZE9uZUFuZERlbGV0ZScsICdmaW5kT25lQW5kUmVwbGFjZScsICdmaW5kT25lQW5kVXBkYXRlJywgJ2luZGV4ZXMnLCAnaW5kZXhFeGlzdHMnLCAnaW5kZXhJbmZvcm1hdGlvbicsICdpbml0aWFsaXplT3JkZXJlZEJ1bGtPcCcsICdpbnNlcnRNYW55JywgJ2luc2VydE9uZScsICdpc0NhcHBlZCcsICdtYXBSZWR1Y2UnLCAnb3B0aW9ucycsICdwYXJhbGxlbENvbGxlY3Rpb25TY2FuJywgJ3JlbmFtZScsICdyZXBsYWNlT25lJywgJ3N0YXRzJywgJ3VwZGF0ZU1hbnknLCAndXBkYXRlT25lJ107IC8vIEFsbCBvZiB0aGUgb3BlcmF0aW9ucyBhYm92ZSB0YWtlIGBvcHRpb25zYCBhbmQgYGNhbGxiYWNrYCBhcyB0aGVpciBmaW5hbCBwYXJhbWV0ZXJzLCBidXQgc29tZSBvZiB0aGVtXG4vLyB0YWtlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcyB3ZWxsLiBGb3IgdGhvc2Ugb3BlcmF0aW9ucywgdGhpcyBpcyBhIG1hcCBvZlxuLy8geyA8b3BlcmF0aW9uIG5hbWU+OiAgWzxuYW1lcyBvZiBhZGRpdGlvbmFsIHBhcmFtZXRlcnM+XSB9LCBhcyBhIHdheSB0byBrbm93IHdoYXQgdG8gY2FsbCB0aGUgb3BlcmF0aW9uJ3Ncbi8vIHBvc2l0aW9uYWwgYXJndW1lbnRzIHdoZW4gd2UgYWRkIHRoZW0gdG8gdGhlIHNwYW4ncyBgZGF0YWAgb2JqZWN0IGxhdGVyXG5cbnZhciBPUEVSQVRJT05fU0lHTkFUVVJFUyA9IHtcbiAgLy8gYWdncmVnYXRlIGludGVudGlvbmFsbHkgbm90IGluY2x1ZGVkIGJlY2F1c2UgYHBpcGVsaW5lYCBhcmd1bWVudHMgYXJlIHRvbyBjb21wbGV4IHRvIHNlcmlhbGl6ZSB3ZWxsXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L3B1bGwvMzEwMlxuICBidWxrV3JpdGU6IFsnb3BlcmF0aW9ucyddLFxuICBjb3VudERvY3VtZW50czogWydxdWVyeSddLFxuICBjcmVhdGVJbmRleDogWydmaWVsZE9yU3BlYyddLFxuICBjcmVhdGVJbmRleGVzOiBbJ2luZGV4U3BlY3MnXSxcbiAgZGVsZXRlTWFueTogWydmaWx0ZXInXSxcbiAgZGVsZXRlT25lOiBbJ2ZpbHRlciddLFxuICBkaXN0aW5jdDogWydrZXknLCAncXVlcnknXSxcbiAgZHJvcEluZGV4OiBbJ2luZGV4TmFtZSddLFxuICBmaW5kOiBbJ3F1ZXJ5J10sXG4gIGZpbmRPbmU6IFsncXVlcnknXSxcbiAgZmluZE9uZUFuZERlbGV0ZTogWydmaWx0ZXInXSxcbiAgZmluZE9uZUFuZFJlcGxhY2U6IFsnZmlsdGVyJywgJ3JlcGxhY2VtZW50J10sXG4gIGZpbmRPbmVBbmRVcGRhdGU6IFsnZmlsdGVyJywgJ3VwZGF0ZSddLFxuICBpbmRleEV4aXN0czogWydpbmRleGVzJ10sXG4gIGluc2VydE1hbnk6IFsnZG9jcyddLFxuICBpbnNlcnRPbmU6IFsnZG9jJ10sXG4gIG1hcFJlZHVjZTogWydtYXAnLCAncmVkdWNlJ10sXG4gIHJlbmFtZTogWyduZXdOYW1lJ10sXG4gIHJlcGxhY2VPbmU6IFsnZmlsdGVyJywgJ2RvYyddLFxuICB1cGRhdGVNYW55OiBbJ2ZpbHRlcicsICd1cGRhdGUnXSxcbiAgdXBkYXRlT25lOiBbJ2ZpbHRlcicsICd1cGRhdGUnXVxufTtcbi8qKiBUcmFjaW5nIGludGVncmF0aW9uIGZvciBtb25nbyBwYWNrYWdlICovXG5cbnZhciBNb25nbyA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgZnVuY3Rpb24gTW9uZ28ob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cblxuXG4gICAgdGhpcy5uYW1lID0gTW9uZ28uaWQ7XG4gICAgdGhpcy5fb3BlcmF0aW9ucyA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5vcGVyYXRpb25zKSA/IG9wdGlvbnMub3BlcmF0aW9ucyA6IE9QRVJBVElPTlM7XG4gICAgdGhpcy5fZGVzY3JpYmVPcGVyYXRpb25zID0gJ2Rlc2NyaWJlT3BlcmF0aW9ucycgaW4gb3B0aW9ucyA/IG9wdGlvbnMuZGVzY3JpYmVPcGVyYXRpb25zIDogdHJ1ZTtcbiAgICB0aGlzLl91c2VNb25nb29zZSA9ICEhb3B0aW9ucy51c2VNb25nb29zZTtcbiAgfVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBNb25nby5wcm90b3R5cGUuc2V0dXBPbmNlID0gZnVuY3Rpb24gKF8sIGdldEN1cnJlbnRIdWIpIHtcbiAgICB2YXIgbW9kdWxlTmFtZSA9IHRoaXMuX3VzZU1vbmdvb3NlID8gJ21vbmdvb3NlJyA6ICdtb25nb2RiJztcbiAgICB2YXIgcGtnID0gbG9hZE1vZHVsZShtb2R1bGVOYW1lKTtcblxuICAgIGlmICghcGtnKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJNb25nbyBJbnRlZ3JhdGlvbiB3YXMgdW5hYmxlIHRvIHJlcXVpcmUgYFwiICsgbW9kdWxlTmFtZSArIFwiYCBwYWNrYWdlLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnN0cnVtZW50T3BlcmF0aW9ucyhwa2cuQ29sbGVjdGlvbiwgdGhpcy5fb3BlcmF0aW9ucywgZ2V0Q3VycmVudEh1Yik7XG4gIH07XG4gIC8qKlxuICAgKiBQYXRjaGVzIG9yaWdpbmFsIGNvbGxlY3Rpb24gbWV0aG9kc1xuICAgKi9cblxuXG4gIE1vbmdvLnByb3RvdHlwZS5faW5zdHJ1bWVudE9wZXJhdGlvbnMgPSBmdW5jdGlvbiAoY29sbGVjdGlvbiwgb3BlcmF0aW9ucywgZ2V0Q3VycmVudEh1Yikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBvcGVyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9wZXJhdGlvbikge1xuICAgICAgcmV0dXJuIF90aGlzLl9wYXRjaE9wZXJhdGlvbihjb2xsZWN0aW9uLCBvcGVyYXRpb24sIGdldEN1cnJlbnRIdWIpO1xuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogUGF0Y2hlcyBvcmlnaW5hbCBjb2xsZWN0aW9uIHRvIHV0aWxpemUgb3VyIHRyYWNpbmcgZnVuY3Rpb25hbGl0eVxuICAgKi9cblxuXG4gIE1vbmdvLnByb3RvdHlwZS5fcGF0Y2hPcGVyYXRpb24gPSBmdW5jdGlvbiAoY29sbGVjdGlvbiwgb3BlcmF0aW9uLCBnZXRDdXJyZW50SHViKSB7XG4gICAgaWYgKCEob3BlcmF0aW9uIGluIGNvbGxlY3Rpb24ucHJvdG90eXBlKSkgcmV0dXJuO1xuXG4gICAgdmFyIGdldFNwYW5Db250ZXh0ID0gdGhpcy5fZ2V0U3BhbkNvbnRleHRGcm9tT3BlcmF0aW9uQXJndW1lbnRzLmJpbmQodGhpcyk7XG5cbiAgICBmaWxsKGNvbGxlY3Rpb24ucHJvdG90eXBlLCBvcGVyYXRpb24sIGZ1bmN0aW9uIChvcmlnKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuXG4gICAgICAgIHZhciBsYXN0QXJnID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICB2YXIgc2NvcGUgPSBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTtcbiAgICAgICAgdmFyIHBhcmVudFNwYW4gPSAoX2EgPSBzY29wZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFNwYW4oKTsgLy8gQ2hlY2sgaWYgdGhlIG9wZXJhdGlvbiB3YXMgcGFzc2VkIGEgY2FsbGJhY2suIChtYXBSZWR1Y2UgcmVxdWlyZXMgYSBkaWZmZXJlbnQgY2hlY2ssIGFzXG4gICAgICAgIC8vIGl0cyAobm9uLWNhbGxiYWNrKSBhcmd1bWVudHMgY2FuIGFsc28gYmUgZnVuY3Rpb25zLilcblxuICAgICAgICBpZiAodHlwZW9mIGxhc3RBcmcgIT09ICdmdW5jdGlvbicgfHwgb3BlcmF0aW9uID09PSAnbWFwUmVkdWNlJyAmJiBhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHZhciBzcGFuXzEgPSAoX2IgPSBwYXJlbnRTcGFuKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3RhcnRDaGlsZChnZXRTcGFuQ29udGV4dCh0aGlzLCBvcGVyYXRpb24sIGFyZ3MpKTtcbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gb3JpZy5jYWxsLmFwcGx5KG9yaWcsIF9fc3ByZWFkKFt0aGlzXSwgYXJncykpO1xuXG4gICAgICAgICAgaWYgKGlzVGhlbmFibGUobWF5YmVQcm9taXNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgdmFyIF9hO1xuXG4gICAgICAgICAgICAgIChfYSA9IHNwYW5fMSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZpbmlzaCgpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIChfYyA9IHNwYW5fMSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmZpbmlzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3BhbiA9IChfZCA9IHBhcmVudFNwYW4pID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5zdGFydENoaWxkKGdldFNwYW5Db250ZXh0KHRoaXMsIG9wZXJhdGlvbiwgYXJncy5zbGljZSgwLCAtMSkpKTtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbC5hcHBseShvcmlnLCBfX3NwcmVhZChbdGhpc10sIGFyZ3Muc2xpY2UoMCwgLTEpLCBbZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gICAgICAgICAgdmFyIF9hO1xuXG4gICAgICAgICAgKF9hID0gc3BhbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZpbmlzaCgpO1xuICAgICAgICAgIGxhc3RBcmcoZXJyLCByZXN1bHQpO1xuICAgICAgICB9XSkpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIEZvcm0gYSBTcGFuQ29udGV4dCBiYXNlZCBvbiB0aGUgdXNlciBpbnB1dCB0byBhIGdpdmVuIG9wZXJhdGlvbi5cbiAgICovXG5cblxuICBNb25nby5wcm90b3R5cGUuX2dldFNwYW5Db250ZXh0RnJvbU9wZXJhdGlvbkFyZ3VtZW50cyA9IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBvcGVyYXRpb24sIGFyZ3MpIHtcbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIGNvbGxlY3Rpb25OYW1lOiBjb2xsZWN0aW9uLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgZGJOYW1lOiBjb2xsZWN0aW9uLmRiTmFtZSxcbiAgICAgIG5hbWVzcGFjZTogY29sbGVjdGlvbi5uYW1lc3BhY2VcbiAgICB9O1xuICAgIHZhciBzcGFuQ29udGV4dCA9IHtcbiAgICAgIG9wOiBcImRiXCIsXG4gICAgICBkZXNjcmlwdGlvbjogb3BlcmF0aW9uLFxuICAgICAgZGF0YTogZGF0YVxuICAgIH07IC8vIElmIHRoZSBvcGVyYXRpb24gdGFrZXMgbm8gYXJndW1lbnRzIGJlc2lkZXMgYG9wdGlvbnNgIGFuZCBgY2FsbGJhY2tgLCBvciBpZiBhcmd1bWVudFxuICAgIC8vIGNvbGxlY3Rpb24gaXMgZGlzYWJsZWQgZm9yIHRoaXMgb3BlcmF0aW9uLCBqdXN0IHJldHVybiBlYXJseS5cblxuICAgIHZhciBzaWduYXR1cmUgPSBPUEVSQVRJT05fU0lHTkFUVVJFU1tvcGVyYXRpb25dO1xuICAgIHZhciBzaG91bGREZXNjcmliZSA9IEFycmF5LmlzQXJyYXkodGhpcy5fZGVzY3JpYmVPcGVyYXRpb25zKSA/IHRoaXMuX2Rlc2NyaWJlT3BlcmF0aW9ucy5pbmNsdWRlcyhvcGVyYXRpb24pIDogdGhpcy5fZGVzY3JpYmVPcGVyYXRpb25zO1xuXG4gICAgaWYgKCFzaWduYXR1cmUgfHwgIXNob3VsZERlc2NyaWJlKSB7XG4gICAgICByZXR1cm4gc3BhbkNvbnRleHQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgYG1hcFJlZHVjZWAsIGFzIHRoZSBvbmx5IG9uZSBhY2NlcHRpbmcgZnVuY3Rpb25zIGFzIGFyZ3VtZW50cy5cbiAgICAgIGlmIChvcGVyYXRpb24gPT09ICdtYXBSZWR1Y2UnKSB7XG4gICAgICAgIHZhciBfYSA9IF9fcmVhZChhcmdzLCAyKSxcbiAgICAgICAgICAgIG1hcCA9IF9hWzBdLFxuICAgICAgICAgICAgcmVkdWNlID0gX2FbMV07XG5cbiAgICAgICAgZGF0YVtzaWduYXR1cmVbMF1dID0gdHlwZW9mIG1hcCA9PT0gJ3N0cmluZycgPyBtYXAgOiBtYXAubmFtZSB8fCAnPGFub255bW91cz4nO1xuICAgICAgICBkYXRhW3NpZ25hdHVyZVsxXV0gPSB0eXBlb2YgcmVkdWNlID09PSAnc3RyaW5nJyA/IHJlZHVjZSA6IHJlZHVjZS5uYW1lIHx8ICc8YW5vbnltb3VzPic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ25hdHVyZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGRhdGFbc2lnbmF0dXJlW2ldXSA9IEpTT04uc3RyaW5naWZ5KGFyZ3NbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoX29PKSB7Ly8gbm8tZW1wdHlcbiAgICB9XG5cbiAgICByZXR1cm4gc3BhbkNvbnRleHQ7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIE1vbmdvLmlkID0gJ01vbmdvJztcbiAgcmV0dXJuIE1vbmdvO1xufSgpO1xuXG5leHBvcnQgeyBNb25nbyB9OyIsImV4cG9ydCB7IEV4cHJlc3MgfSBmcm9tICcuL25vZGUvZXhwcmVzcyc7XG5leHBvcnQgeyBQb3N0Z3JlcyB9IGZyb20gJy4vbm9kZS9wb3N0Z3Jlcyc7XG5leHBvcnQgeyBNeXNxbCB9IGZyb20gJy4vbm9kZS9teXNxbCc7XG5leHBvcnQgeyBNb25nbyB9IGZyb20gJy4vbm9kZS9tb25nbyc7IiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEJyb3dzZXJUcmFjaW5nIH0gZnJvbSAnLi9icm93c2VyJztcbmltcG9ydCB7IGFkZEV4dGVuc2lvbk1ldGhvZHMgfSBmcm9tICcuL2h1YmV4dGVuc2lvbnMnO1xuaW1wb3J0ICogYXMgVHJhY2luZ0ludGVncmF0aW9ucyBmcm9tICcuL2ludGVncmF0aW9ucyc7XG5cbnZhciBJbnRlZ3JhdGlvbnMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgVHJhY2luZ0ludGVncmF0aW9ucyksIHtcbiAgQnJvd3NlclRyYWNpbmc6IEJyb3dzZXJUcmFjaW5nXG59KTtcblxuZXhwb3J0IHsgSW50ZWdyYXRpb25zIH07XG5leHBvcnQgeyBTcGFuIH0gZnJvbSAnLi9zcGFuJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgeyAvLyBUT0RPIGRlcHJlY2F0ZSBvbGQgbmFtZSBpbiB2N1xuaW5zdHJ1bWVudE91dGdvaW5nUmVxdWVzdHMgYXMgcmVnaXN0ZXJSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uLCBkZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMgfSBmcm9tICcuL2Jyb3dzZXInO1xuZXhwb3J0IHsgU3BhblN0YXR1cyB9IGZyb20gJy4vc3BhbnN0YXR1cyc7XG5leHBvcnQgeyBJZGxlVHJhbnNhY3Rpb24gfSBmcm9tICcuL2lkbGV0cmFuc2FjdGlvbic7XG5leHBvcnQgeyBzdGFydElkbGVUcmFuc2FjdGlvbiB9IGZyb20gJy4vaHViZXh0ZW5zaW9ucyc7IC8vIFdlIGFyZSBwYXRjaGluZyB0aGUgZ2xvYmFsIG9iamVjdCB3aXRoIG91ciBodWIgZXh0ZW5zaW9uIG1ldGhvZHNcblxuYWRkRXh0ZW5zaW9uTWV0aG9kcygpO1xuZXhwb3J0IHsgYWRkRXh0ZW5zaW9uTWV0aG9kcyB9O1xuZXhwb3J0IHsgZXh0cmFjdFRyYWNlcGFyZW50RGF0YSwgZ2V0QWN0aXZlVHJhbnNhY3Rpb24sIGhhc1RyYWNpbmdFbmFibGVkLCBzdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQsIFRSQUNFUEFSRU5UX1JFR0VYUCB9IGZyb20gJy4vdXRpbHMnOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7374\n")},6369:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"g\": function() { return /* binding */ SpanRecorder; },\n/* harmony export */ \"D\": function() { return /* binding */ Span; }\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7870);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2861);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5153);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(150);\n/* harmony import */ var _spanstatus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6314);\n\n\n\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\n\nvar SpanRecorder =\n/** @class */\nfunction () {\n function SpanRecorder(maxlen) {\n if (maxlen === void 0) {\n maxlen = 1000;\n }\n\n this.spans = [];\n this._maxlen = maxlen;\n }\n /**\n * This is just so that we don't run out of memory while recording a lot\n * of spans. At some point we just stop and flush out the start of the\n * trace tree (i.e.the first n spans with the smallest\n * start_timestamp).\n */\n\n\n SpanRecorder.prototype.add = function (span) {\n if (this.spans.length > this._maxlen) {\n span.spanRecorder = undefined;\n } else {\n this.spans.push(span);\n }\n };\n\n return SpanRecorder;\n}();\n\n\n/**\n * Span contains all data about a span\n */\n\nvar Span =\n/** @class */\nfunction () {\n /**\n * You should never call the constructor manually, always use `Sentry.startTransaction()`\n * or call `startChild()` on an existing span.\n * @internal\n * @hideconstructor\n * @hidden\n */\n function Span(spanContext) {\n /**\n * @inheritDoc\n */\n this.traceId = (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_0__/* .uuid4 */ .DM)();\n /**\n * @inheritDoc\n */\n\n this.spanId = (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_0__/* .uuid4 */ .DM)().substring(16);\n /**\n * Timestamp in seconds when the span was created.\n */\n\n this.startTimestamp = (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_1__/* .timestampWithMs */ ._I)();\n /**\n * @inheritDoc\n */\n\n this.tags = {};\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n this.data = {};\n\n if (!spanContext) {\n return this;\n }\n\n if (spanContext.traceId) {\n this.traceId = spanContext.traceId;\n }\n\n if (spanContext.spanId) {\n this.spanId = spanContext.spanId;\n }\n\n if (spanContext.parentSpanId) {\n this.parentSpanId = spanContext.parentSpanId;\n } // We want to include booleans as well here\n\n\n if ('sampled' in spanContext) {\n this.sampled = spanContext.sampled;\n }\n\n if (spanContext.op) {\n this.op = spanContext.op;\n }\n\n if (spanContext.description) {\n this.description = spanContext.description;\n }\n\n if (spanContext.data) {\n this.data = spanContext.data;\n }\n\n if (spanContext.tags) {\n this.tags = spanContext.tags;\n }\n\n if (spanContext.status) {\n this.status = spanContext.status;\n }\n\n if (spanContext.startTimestamp) {\n this.startTimestamp = spanContext.startTimestamp;\n }\n\n if (spanContext.endTimestamp) {\n this.endTimestamp = spanContext.endTimestamp;\n }\n }\n /**\n * @inheritDoc\n * @deprecated\n */\n\n\n Span.prototype.child = function (spanContext) {\n return this.startChild(spanContext);\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.startChild = function (spanContext) {\n var childSpan = new Span((0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)({}, spanContext), {\n parentSpanId: this.spanId,\n sampled: this.sampled,\n traceId: this.traceId\n }));\n childSpan.spanRecorder = this.spanRecorder;\n\n if (childSpan.spanRecorder) {\n childSpan.spanRecorder.add(childSpan);\n }\n\n childSpan.transaction = this.transaction;\n return childSpan;\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.setTag = function (key, value) {\n var _a;\n\n this.tags = (0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)({}, this.tags), (_a = {}, _a[key] = value, _a));\n return this;\n };\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n\n\n Span.prototype.setData = function (key, value) {\n var _a;\n\n this.data = (0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)({}, this.data), (_a = {}, _a[key] = value, _a));\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.setStatus = function (value) {\n this.status = value;\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.setHttpStatus = function (httpStatus) {\n this.setTag('http.status_code', String(httpStatus));\n var spanStatus = _spanstatus__WEBPACK_IMPORTED_MODULE_3__/* .SpanStatus.fromHttpCode */ .p.fromHttpCode(httpStatus);\n\n if (spanStatus !== _spanstatus__WEBPACK_IMPORTED_MODULE_3__/* .SpanStatus.UnknownError */ .p.UnknownError) {\n this.setStatus(spanStatus);\n }\n\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.isSuccess = function () {\n return this.status === _spanstatus__WEBPACK_IMPORTED_MODULE_3__/* .SpanStatus.Ok */ .p.Ok;\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.finish = function (endTimestamp) {\n this.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_1__/* .timestampWithMs */ ._I)();\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.toTraceparent = function () {\n var sampledString = '';\n\n if (this.sampled !== undefined) {\n sampledString = this.sampled ? '-1' : '-0';\n }\n\n return this.traceId + \"-\" + this.spanId + sampledString;\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.toContext = function () {\n return (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_4__/* .dropUndefinedKeys */ .Jr)({\n data: this.data,\n description: this.description,\n endTimestamp: this.endTimestamp,\n op: this.op,\n parentSpanId: this.parentSpanId,\n sampled: this.sampled,\n spanId: this.spanId,\n startTimestamp: this.startTimestamp,\n status: this.status,\n tags: this.tags,\n traceId: this.traceId\n });\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.updateWithContext = function (spanContext) {\n var _a, _b, _c, _d, _e;\n\n this.data = (_a = spanContext.data, _a !== null && _a !== void 0 ? _a : {});\n this.description = spanContext.description;\n this.endTimestamp = spanContext.endTimestamp;\n this.op = spanContext.op;\n this.parentSpanId = spanContext.parentSpanId;\n this.sampled = spanContext.sampled;\n this.spanId = (_b = spanContext.spanId, _b !== null && _b !== void 0 ? _b : this.spanId);\n this.startTimestamp = (_c = spanContext.startTimestamp, _c !== null && _c !== void 0 ? _c : this.startTimestamp);\n this.status = spanContext.status;\n this.tags = (_d = spanContext.tags, _d !== null && _d !== void 0 ? _d : {});\n this.traceId = (_e = spanContext.traceId, _e !== null && _e !== void 0 ? _e : this.traceId);\n return this;\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.getTraceContext = function () {\n return (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_4__/* .dropUndefinedKeys */ .Jr)({\n data: Object.keys(this.data).length > 0 ? this.data : undefined,\n description: this.description,\n op: this.op,\n parent_span_id: this.parentSpanId,\n span_id: this.spanId,\n status: this.status,\n tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n trace_id: this.traceId\n });\n };\n /**\n * @inheritDoc\n */\n\n\n Span.prototype.toJSON = function () {\n return (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_4__/* .dropUndefinedKeys */ .Jr)({\n data: Object.keys(this.data).length > 0 ? this.data : undefined,\n description: this.description,\n op: this.op,\n parent_span_id: this.parentSpanId,\n span_id: this.spanId,\n start_timestamp: this.startTimestamp,\n status: this.status,\n tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n timestamp: this.endTimestamp,\n trace_id: this.traceId\n });\n };\n\n return Span;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL3NwYW4uanM/YzhkNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBaUM7QUFDeUM7QUFDaEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRXVCO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDhEQUFLO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsOERBQUs7QUFDdkI7QUFDQTtBQUNBOztBQUVBLDBCQUEwQix3RUFBZTtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSw2QkFBNkIseURBQVEsQ0FBQyx5REFBUSxHQUFHO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBLGdCQUFnQix5REFBUSxDQUFDLHlEQUFRLEdBQUcsc0JBQXNCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSxnQkFBZ0IseURBQVEsQ0FBQyx5REFBUSxHQUFHLHNCQUFzQjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLHFCQUFxQixzRkFBdUI7O0FBRTVDLHVCQUF1QixzRkFBdUI7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDJCQUEyQixrRUFBYTtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwwRUFBMEUsd0VBQWU7QUFDekY7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsV0FBVywwRUFBaUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RTtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsV0FBVywwRUFBaUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxXQUFXLDBFQUFpQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiNjM2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBkcm9wVW5kZWZpbmVkS2V5cywgdGltZXN0YW1wV2l0aE1zLCB1dWlkNCB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0IHsgU3BhblN0YXR1cyB9IGZyb20gJy4vc3BhbnN0YXR1cyc7XG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIGZpbmlzaGVkIHNwYW5zIGZvciBhIGdpdmVuIHRyYW5zYWN0aW9uXG4gKiBAaW50ZXJuYWxcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBoaWRkZW5cbiAqL1xuXG52YXIgU3BhblJlY29yZGVyID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3BhblJlY29yZGVyKG1heGxlbikge1xuICAgIGlmIChtYXhsZW4gPT09IHZvaWQgMCkge1xuICAgICAgbWF4bGVuID0gMTAwMDtcbiAgICB9XG5cbiAgICB0aGlzLnNwYW5zID0gW107XG4gICAgdGhpcy5fbWF4bGVuID0gbWF4bGVuO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGlzIGp1c3Qgc28gdGhhdCB3ZSBkb24ndCBydW4gb3V0IG9mIG1lbW9yeSB3aGlsZSByZWNvcmRpbmcgYSBsb3RcbiAgICogb2Ygc3BhbnMuIEF0IHNvbWUgcG9pbnQgd2UganVzdCBzdG9wIGFuZCBmbHVzaCBvdXQgdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiB0cmFjZSB0cmVlIChpLmUudGhlIGZpcnN0IG4gc3BhbnMgd2l0aCB0aGUgc21hbGxlc3RcbiAgICogc3RhcnRfdGltZXN0YW1wKS5cbiAgICovXG5cblxuICBTcGFuUmVjb3JkZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChzcGFuKSB7XG4gICAgaWYgKHRoaXMuc3BhbnMubGVuZ3RoID4gdGhpcy5fbWF4bGVuKSB7XG4gICAgICBzcGFuLnNwYW5SZWNvcmRlciA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zcGFucy5wdXNoKHNwYW4pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU3BhblJlY29yZGVyO1xufSgpO1xuXG5leHBvcnQgeyBTcGFuUmVjb3JkZXIgfTtcbi8qKlxuICogU3BhbiBjb250YWlucyBhbGwgZGF0YSBhYm91dCBhIHNwYW5cbiAqL1xuXG52YXIgU3BhbiA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBZb3Ugc2hvdWxkIG5ldmVyIGNhbGwgdGhlIGNvbnN0cnVjdG9yIG1hbnVhbGx5LCBhbHdheXMgdXNlIGBTZW50cnkuc3RhcnRUcmFuc2FjdGlvbigpYFxuICAgKiBvciBjYWxsIGBzdGFydENoaWxkKClgIG9uIGFuIGV4aXN0aW5nIHNwYW4uXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAaGlkZWNvbnN0cnVjdG9yXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIGZ1bmN0aW9uIFNwYW4oc3BhbkNvbnRleHQpIHtcbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHRoaXMudHJhY2VJZCA9IHV1aWQ0KCk7XG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cblxuICAgIHRoaXMuc3BhbklkID0gdXVpZDQoKS5zdWJzdHJpbmcoMTYpO1xuICAgIC8qKlxuICAgICAqIFRpbWVzdGFtcCBpbiBzZWNvbmRzIHdoZW4gdGhlIHNwYW4gd2FzIGNyZWF0ZWQuXG4gICAgICovXG5cbiAgICB0aGlzLnN0YXJ0VGltZXN0YW1wID0gdGltZXN0YW1wV2l0aE1zKCk7XG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cblxuICAgIHRoaXMudGFncyA9IHt9O1xuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblxuICAgIHRoaXMuZGF0YSA9IHt9O1xuXG4gICAgaWYgKCFzcGFuQ29udGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHNwYW5Db250ZXh0LnRyYWNlSWQpIHtcbiAgICAgIHRoaXMudHJhY2VJZCA9IHNwYW5Db250ZXh0LnRyYWNlSWQ7XG4gICAgfVxuXG4gICAgaWYgKHNwYW5Db250ZXh0LnNwYW5JZCkge1xuICAgICAgdGhpcy5zcGFuSWQgPSBzcGFuQ29udGV4dC5zcGFuSWQ7XG4gICAgfVxuXG4gICAgaWYgKHNwYW5Db250ZXh0LnBhcmVudFNwYW5JZCkge1xuICAgICAgdGhpcy5wYXJlbnRTcGFuSWQgPSBzcGFuQ29udGV4dC5wYXJlbnRTcGFuSWQ7XG4gICAgfSAvLyBXZSB3YW50IHRvIGluY2x1ZGUgYm9vbGVhbnMgYXMgd2VsbCBoZXJlXG5cblxuICAgIGlmICgnc2FtcGxlZCcgaW4gc3BhbkNvbnRleHQpIHtcbiAgICAgIHRoaXMuc2FtcGxlZCA9IHNwYW5Db250ZXh0LnNhbXBsZWQ7XG4gICAgfVxuXG4gICAgaWYgKHNwYW5Db250ZXh0Lm9wKSB7XG4gICAgICB0aGlzLm9wID0gc3BhbkNvbnRleHQub3A7XG4gICAgfVxuXG4gICAgaWYgKHNwYW5Db250ZXh0LmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gc3BhbkNvbnRleHQuZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgaWYgKHNwYW5Db250ZXh0LmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHNwYW5Db250ZXh0LmRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHNwYW5Db250ZXh0LnRhZ3MpIHtcbiAgICAgIHRoaXMudGFncyA9IHNwYW5Db250ZXh0LnRhZ3M7XG4gICAgfVxuXG4gICAgaWYgKHNwYW5Db250ZXh0LnN0YXR1cykge1xuICAgICAgdGhpcy5zdGF0dXMgPSBzcGFuQ29udGV4dC5zdGF0dXM7XG4gICAgfVxuXG4gICAgaWYgKHNwYW5Db250ZXh0LnN0YXJ0VGltZXN0YW1wKSB7XG4gICAgICB0aGlzLnN0YXJ0VGltZXN0YW1wID0gc3BhbkNvbnRleHQuc3RhcnRUaW1lc3RhbXA7XG4gICAgfVxuXG4gICAgaWYgKHNwYW5Db250ZXh0LmVuZFRpbWVzdGFtcCkge1xuICAgICAgdGhpcy5lbmRUaW1lc3RhbXAgPSBzcGFuQ29udGV4dC5lbmRUaW1lc3RhbXA7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cblxuXG4gIFNwYW4ucHJvdG90eXBlLmNoaWxkID0gZnVuY3Rpb24gKHNwYW5Db250ZXh0KSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRDaGlsZChzcGFuQ29udGV4dCk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNwYW4ucHJvdG90eXBlLnN0YXJ0Q2hpbGQgPSBmdW5jdGlvbiAoc3BhbkNvbnRleHQpIHtcbiAgICB2YXIgY2hpbGRTcGFuID0gbmV3IFNwYW4oX19hc3NpZ24oX19hc3NpZ24oe30sIHNwYW5Db250ZXh0KSwge1xuICAgICAgcGFyZW50U3BhbklkOiB0aGlzLnNwYW5JZCxcbiAgICAgIHNhbXBsZWQ6IHRoaXMuc2FtcGxlZCxcbiAgICAgIHRyYWNlSWQ6IHRoaXMudHJhY2VJZFxuICAgIH0pKTtcbiAgICBjaGlsZFNwYW4uc3BhblJlY29yZGVyID0gdGhpcy5zcGFuUmVjb3JkZXI7XG5cbiAgICBpZiAoY2hpbGRTcGFuLnNwYW5SZWNvcmRlcikge1xuICAgICAgY2hpbGRTcGFuLnNwYW5SZWNvcmRlci5hZGQoY2hpbGRTcGFuKTtcbiAgICB9XG5cbiAgICBjaGlsZFNwYW4udHJhbnNhY3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uO1xuICAgIHJldHVybiBjaGlsZFNwYW47XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNwYW4ucHJvdG90eXBlLnNldFRhZyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIF9hO1xuXG4gICAgdGhpcy50YWdzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMudGFncyksIChfYSA9IHt9LCBfYVtrZXldID0gdmFsdWUsIF9hKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcblxuXG4gIFNwYW4ucHJvdG90eXBlLnNldERhdGEgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBfYTtcblxuICAgIHRoaXMuZGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLmRhdGEpLCAoX2EgPSB7fSwgX2Fba2V5XSA9IHZhbHVlLCBfYSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBTcGFuLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB0aGlzLnN0YXR1cyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBTcGFuLnByb3RvdHlwZS5zZXRIdHRwU3RhdHVzID0gZnVuY3Rpb24gKGh0dHBTdGF0dXMpIHtcbiAgICB0aGlzLnNldFRhZygnaHR0cC5zdGF0dXNfY29kZScsIFN0cmluZyhodHRwU3RhdHVzKSk7XG4gICAgdmFyIHNwYW5TdGF0dXMgPSBTcGFuU3RhdHVzLmZyb21IdHRwQ29kZShodHRwU3RhdHVzKTtcblxuICAgIGlmIChzcGFuU3RhdHVzICE9PSBTcGFuU3RhdHVzLlVua25vd25FcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0dXMoc3BhblN0YXR1cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNwYW4ucHJvdG90eXBlLmlzU3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IFNwYW5TdGF0dXMuT2s7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNwYW4ucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uIChlbmRUaW1lc3RhbXApIHtcbiAgICB0aGlzLmVuZFRpbWVzdGFtcCA9IHR5cGVvZiBlbmRUaW1lc3RhbXAgPT09ICdudW1iZXInID8gZW5kVGltZXN0YW1wIDogdGltZXN0YW1wV2l0aE1zKCk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNwYW4ucHJvdG90eXBlLnRvVHJhY2VwYXJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNhbXBsZWRTdHJpbmcgPSAnJztcblxuICAgIGlmICh0aGlzLnNhbXBsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2FtcGxlZFN0cmluZyA9IHRoaXMuc2FtcGxlZCA/ICctMScgOiAnLTAnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRyYWNlSWQgKyBcIi1cIiArIHRoaXMuc3BhbklkICsgc2FtcGxlZFN0cmluZztcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgU3Bhbi5wcm90b3R5cGUudG9Db250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkcm9wVW5kZWZpbmVkS2V5cyh7XG4gICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIGVuZFRpbWVzdGFtcDogdGhpcy5lbmRUaW1lc3RhbXAsXG4gICAgICBvcDogdGhpcy5vcCxcbiAgICAgIHBhcmVudFNwYW5JZDogdGhpcy5wYXJlbnRTcGFuSWQsXG4gICAgICBzYW1wbGVkOiB0aGlzLnNhbXBsZWQsXG4gICAgICBzcGFuSWQ6IHRoaXMuc3BhbklkLFxuICAgICAgc3RhcnRUaW1lc3RhbXA6IHRoaXMuc3RhcnRUaW1lc3RhbXAsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgdGFnczogdGhpcy50YWdzLFxuICAgICAgdHJhY2VJZDogdGhpcy50cmFjZUlkXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNwYW4ucHJvdG90eXBlLnVwZGF0ZVdpdGhDb250ZXh0ID0gZnVuY3Rpb24gKHNwYW5Db250ZXh0KSB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcblxuICAgIHRoaXMuZGF0YSA9IChfYSA9IHNwYW5Db250ZXh0LmRhdGEsIF9hICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9KTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gc3BhbkNvbnRleHQuZGVzY3JpcHRpb247XG4gICAgdGhpcy5lbmRUaW1lc3RhbXAgPSBzcGFuQ29udGV4dC5lbmRUaW1lc3RhbXA7XG4gICAgdGhpcy5vcCA9IHNwYW5Db250ZXh0Lm9wO1xuICAgIHRoaXMucGFyZW50U3BhbklkID0gc3BhbkNvbnRleHQucGFyZW50U3BhbklkO1xuICAgIHRoaXMuc2FtcGxlZCA9IHNwYW5Db250ZXh0LnNhbXBsZWQ7XG4gICAgdGhpcy5zcGFuSWQgPSAoX2IgPSBzcGFuQ29udGV4dC5zcGFuSWQsIF9iICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRoaXMuc3BhbklkKTtcbiAgICB0aGlzLnN0YXJ0VGltZXN0YW1wID0gKF9jID0gc3BhbkNvbnRleHQuc3RhcnRUaW1lc3RhbXAsIF9jICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHRoaXMuc3RhcnRUaW1lc3RhbXApO1xuICAgIHRoaXMuc3RhdHVzID0gc3BhbkNvbnRleHQuc3RhdHVzO1xuICAgIHRoaXMudGFncyA9IChfZCA9IHNwYW5Db250ZXh0LnRhZ3MsIF9kICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IHt9KTtcbiAgICB0aGlzLnRyYWNlSWQgPSAoX2UgPSBzcGFuQ29udGV4dC50cmFjZUlkLCBfZSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiB0aGlzLnRyYWNlSWQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBTcGFuLnByb3RvdHlwZS5nZXRUcmFjZUNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICAgIGRhdGE6IE9iamVjdC5rZXlzKHRoaXMuZGF0YSkubGVuZ3RoID4gMCA/IHRoaXMuZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICBwYXJlbnRfc3Bhbl9pZDogdGhpcy5wYXJlbnRTcGFuSWQsXG4gICAgICBzcGFuX2lkOiB0aGlzLnNwYW5JZCxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICB0YWdzOiBPYmplY3Qua2V5cyh0aGlzLnRhZ3MpLmxlbmd0aCA+IDAgPyB0aGlzLnRhZ3MgOiB1bmRlZmluZWQsXG4gICAgICB0cmFjZV9pZDogdGhpcy50cmFjZUlkXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFNwYW4ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoe1xuICAgICAgZGF0YTogT2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGggPiAwID8gdGhpcy5kYXRhIDogdW5kZWZpbmVkLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBvcDogdGhpcy5vcCxcbiAgICAgIHBhcmVudF9zcGFuX2lkOiB0aGlzLnBhcmVudFNwYW5JZCxcbiAgICAgIHNwYW5faWQ6IHRoaXMuc3BhbklkLFxuICAgICAgc3RhcnRfdGltZXN0YW1wOiB0aGlzLnN0YXJ0VGltZXN0YW1wLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHRhZ3M6IE9iamVjdC5rZXlzKHRoaXMudGFncykubGVuZ3RoID4gMCA/IHRoaXMudGFncyA6IHVuZGVmaW5lZCxcbiAgICAgIHRpbWVzdGFtcDogdGhpcy5lbmRUaW1lc3RhbXAsXG4gICAgICB0cmFjZV9pZDogdGhpcy50cmFjZUlkXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFNwYW47XG59KCk7XG5cbmV4cG9ydCB7IFNwYW4gfTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6369\n")},6314:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "p": function() { return /* binding */ SpanStatus; }\n/* harmony export */ });\n/** The status of an Span. */\n// eslint-disable-next-line import/export\nvar SpanStatus;\n\n(function (SpanStatus) {\n /** The operation completed successfully. */\n SpanStatus["Ok"] = "ok";\n /** Deadline expired before operation could complete. */\n\n SpanStatus["DeadlineExceeded"] = "deadline_exceeded";\n /** 401 Unauthorized (actually does mean unauthenticated according to RFC 7235) */\n\n SpanStatus["Unauthenticated"] = "unauthenticated";\n /** 403 Forbidden */\n\n SpanStatus["PermissionDenied"] = "permission_denied";\n /** 404 Not Found. Some requested entity (file or directory) was not found. */\n\n SpanStatus["NotFound"] = "not_found";\n /** 429 Too Many Requests */\n\n SpanStatus["ResourceExhausted"] = "resource_exhausted";\n /** Client specified an invalid argument. 4xx. */\n\n SpanStatus["InvalidArgument"] = "invalid_argument";\n /** 501 Not Implemented */\n\n SpanStatus["Unimplemented"] = "unimplemented";\n /** 503 Service Unavailable */\n\n SpanStatus["Unavailable"] = "unavailable";\n /** Other/generic 5xx. */\n\n SpanStatus["InternalError"] = "internal_error";\n /** Unknown. Any non-standard HTTP status code. */\n\n SpanStatus["UnknownError"] = "unknown_error";\n /** The operation was cancelled (typically by the user). */\n\n SpanStatus["Cancelled"] = "cancelled";\n /** Already exists (409) */\n\n SpanStatus["AlreadyExists"] = "already_exists";\n /** Operation was rejected because the system is not in a state required for the operation\'s */\n\n SpanStatus["FailedPrecondition"] = "failed_precondition";\n /** The operation was aborted, typically due to a concurrency issue. */\n\n SpanStatus["Aborted"] = "aborted";\n /** Operation was attempted past the valid range. */\n\n SpanStatus["OutOfRange"] = "out_of_range";\n /** Unrecoverable data loss or corruption */\n\n SpanStatus["DataLoss"] = "data_loss";\n})(SpanStatus || (SpanStatus = {})); // eslint-disable-next-line @typescript-eslint/no-namespace, import/export\n\n\n(function (SpanStatus) {\n /**\n * Converts a HTTP status code into a {@link SpanStatus}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or {@link SpanStatus.UnknownError}.\n */\n function fromHttpCode(httpStatus) {\n if (httpStatus < 400) {\n return SpanStatus.Ok;\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return SpanStatus.Unauthenticated;\n\n case 403:\n return SpanStatus.PermissionDenied;\n\n case 404:\n return SpanStatus.NotFound;\n\n case 409:\n return SpanStatus.AlreadyExists;\n\n case 413:\n return SpanStatus.FailedPrecondition;\n\n case 429:\n return SpanStatus.ResourceExhausted;\n\n default:\n return SpanStatus.InvalidArgument;\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return SpanStatus.Unimplemented;\n\n case 503:\n return SpanStatus.Unavailable;\n\n case 504:\n return SpanStatus.DeadlineExceeded;\n\n default:\n return SpanStatus.InternalError;\n }\n }\n\n return SpanStatus.UnknownError;\n }\n\n SpanStatus.fromHttpCode = fromHttpCode;\n})(SpanStatus || (SpanStatus = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL3NwYW5zdGF0dXMuanM/MjBlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ087O0FBRVA7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLGdDQUFnQyxHQUFHOzs7QUFHcEM7QUFDQTtBQUNBLHlDQUF5QyxpQkFBaUI7QUFDMUQ7QUFDQTtBQUNBLGtDQUFrQyw4QkFBOEI7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLGdDQUFnQyIsImZpbGUiOiI2MzE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFRoZSBzdGF0dXMgb2YgYW4gU3Bhbi4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvZXhwb3J0XG5leHBvcnQgdmFyIFNwYW5TdGF0dXM7XG5cbihmdW5jdGlvbiAoU3BhblN0YXR1cykge1xuICAvKiogVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiAqL1xuICBTcGFuU3RhdHVzW1wiT2tcIl0gPSBcIm9rXCI7XG4gIC8qKiBEZWFkbGluZSBleHBpcmVkIGJlZm9yZSBvcGVyYXRpb24gY291bGQgY29tcGxldGUuICovXG5cbiAgU3BhblN0YXR1c1tcIkRlYWRsaW5lRXhjZWVkZWRcIl0gPSBcImRlYWRsaW5lX2V4Y2VlZGVkXCI7XG4gIC8qKiA0MDEgVW5hdXRob3JpemVkIChhY3R1YWxseSBkb2VzIG1lYW4gdW5hdXRoZW50aWNhdGVkIGFjY29yZGluZyB0byBSRkMgNzIzNSkgKi9cblxuICBTcGFuU3RhdHVzW1wiVW5hdXRoZW50aWNhdGVkXCJdID0gXCJ1bmF1dGhlbnRpY2F0ZWRcIjtcbiAgLyoqIDQwMyBGb3JiaWRkZW4gKi9cblxuICBTcGFuU3RhdHVzW1wiUGVybWlzc2lvbkRlbmllZFwiXSA9IFwicGVybWlzc2lvbl9kZW5pZWRcIjtcbiAgLyoqIDQwNCBOb3QgRm91bmQuIFNvbWUgcmVxdWVzdGVkIGVudGl0eSAoZmlsZSBvciBkaXJlY3RvcnkpIHdhcyBub3QgZm91bmQuICovXG5cbiAgU3BhblN0YXR1c1tcIk5vdEZvdW5kXCJdID0gXCJub3RfZm91bmRcIjtcbiAgLyoqIDQyOSBUb28gTWFueSBSZXF1ZXN0cyAqL1xuXG4gIFNwYW5TdGF0dXNbXCJSZXNvdXJjZUV4aGF1c3RlZFwiXSA9IFwicmVzb3VyY2VfZXhoYXVzdGVkXCI7XG4gIC8qKiBDbGllbnQgc3BlY2lmaWVkIGFuIGludmFsaWQgYXJndW1lbnQuIDR4eC4gKi9cblxuICBTcGFuU3RhdHVzW1wiSW52YWxpZEFyZ3VtZW50XCJdID0gXCJpbnZhbGlkX2FyZ3VtZW50XCI7XG4gIC8qKiA1MDEgTm90IEltcGxlbWVudGVkICovXG5cbiAgU3BhblN0YXR1c1tcIlVuaW1wbGVtZW50ZWRcIl0gPSBcInVuaW1wbGVtZW50ZWRcIjtcbiAgLyoqIDUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlICovXG5cbiAgU3BhblN0YXR1c1tcIlVuYXZhaWxhYmxlXCJdID0gXCJ1bmF2YWlsYWJsZVwiO1xuICAvKiogT3RoZXIvZ2VuZXJpYyA1eHguICovXG5cbiAgU3BhblN0YXR1c1tcIkludGVybmFsRXJyb3JcIl0gPSBcImludGVybmFsX2Vycm9yXCI7XG4gIC8qKiBVbmtub3duLiBBbnkgbm9uLXN0YW5kYXJkIEhUVFAgc3RhdHVzIGNvZGUuICovXG5cbiAgU3BhblN0YXR1c1tcIlVua25vd25FcnJvclwiXSA9IFwidW5rbm93bl9lcnJvclwiO1xuICAvKiogVGhlIG9wZXJhdGlvbiB3YXMgY2FuY2VsbGVkICh0eXBpY2FsbHkgYnkgdGhlIHVzZXIpLiAqL1xuXG4gIFNwYW5TdGF0dXNbXCJDYW5jZWxsZWRcIl0gPSBcImNhbmNlbGxlZFwiO1xuICAvKiogQWxyZWFkeSBleGlzdHMgKDQwOSkgKi9cblxuICBTcGFuU3RhdHVzW1wiQWxyZWFkeUV4aXN0c1wiXSA9IFwiYWxyZWFkeV9leGlzdHNcIjtcbiAgLyoqIE9wZXJhdGlvbiB3YXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgc3lzdGVtIGlzIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3MgKi9cblxuICBTcGFuU3RhdHVzW1wiRmFpbGVkUHJlY29uZGl0aW9uXCJdID0gXCJmYWlsZWRfcHJlY29uZGl0aW9uXCI7XG4gIC8qKiBUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLCB0eXBpY2FsbHkgZHVlIHRvIGEgY29uY3VycmVuY3kgaXNzdWUuICovXG5cbiAgU3BhblN0YXR1c1tcIkFib3J0ZWRcIl0gPSBcImFib3J0ZWRcIjtcbiAgLyoqIE9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIHBhc3QgdGhlIHZhbGlkIHJhbmdlLiAqL1xuXG4gIFNwYW5TdGF0dXNbXCJPdXRPZlJhbmdlXCJdID0gXCJvdXRfb2ZfcmFuZ2VcIjtcbiAgLyoqIFVucmVjb3ZlcmFibGUgZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24gKi9cblxuICBTcGFuU3RhdHVzW1wiRGF0YUxvc3NcIl0gPSBcImRhdGFfbG9zc1wiO1xufSkoU3BhblN0YXR1cyB8fCAoU3BhblN0YXR1cyA9IHt9KSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlLCBpbXBvcnQvZXhwb3J0XG5cblxuKGZ1bmN0aW9uIChTcGFuU3RhdHVzKSB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIEhUVFAgc3RhdHVzIGNvZGUgaW50byBhIHtAbGluayBTcGFuU3RhdHVzfS5cbiAgICpcbiAgICogQHBhcmFtIGh0dHBTdGF0dXMgVGhlIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGUuXG4gICAqIEByZXR1cm5zIFRoZSBzcGFuIHN0YXR1cyBvciB7QGxpbmsgU3BhblN0YXR1cy5Vbmtub3duRXJyb3J9LlxuICAgKi9cbiAgZnVuY3Rpb24gZnJvbUh0dHBDb2RlKGh0dHBTdGF0dXMpIHtcbiAgICBpZiAoaHR0cFN0YXR1cyA8IDQwMCkge1xuICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuT2s7XG4gICAgfVxuXG4gICAgaWYgKGh0dHBTdGF0dXMgPj0gNDAwICYmIGh0dHBTdGF0dXMgPCA1MDApIHtcbiAgICAgIHN3aXRjaCAoaHR0cFN0YXR1cykge1xuICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5VbmF1dGhlbnRpY2F0ZWQ7XG5cbiAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuUGVybWlzc2lvbkRlbmllZDtcblxuICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5Ob3RGb3VuZDtcblxuICAgICAgICBjYXNlIDQwOTpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5BbHJlYWR5RXhpc3RzO1xuXG4gICAgICAgIGNhc2UgNDEzOlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLkZhaWxlZFByZWNvbmRpdGlvbjtcblxuICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5SZXNvdXJjZUV4aGF1c3RlZDtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLkludmFsaWRBcmd1bWVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaHR0cFN0YXR1cyA+PSA1MDAgJiYgaHR0cFN0YXR1cyA8IDYwMCkge1xuICAgICAgc3dpdGNoIChodHRwU3RhdHVzKSB7XG4gICAgICAgIGNhc2UgNTAxOlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLlVuaW1wbGVtZW50ZWQ7XG5cbiAgICAgICAgY2FzZSA1MDM6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuVW5hdmFpbGFibGU7XG5cbiAgICAgICAgY2FzZSA1MDQ6XG4gICAgICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuRGVhZGxpbmVFeGNlZWRlZDtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLkludGVybmFsRXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwYW5TdGF0dXMuVW5rbm93bkVycm9yO1xuICB9XG5cbiAgU3BhblN0YXR1cy5mcm9tSHR0cENvZGUgPSBmcm9tSHR0cENvZGU7XG59KShTcGFuU3RhdHVzIHx8IChTcGFuU3RhdHVzID0ge30pKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6314\n')},5955:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Y\": function() { return /* binding */ Transaction; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_string_trim_end_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8702);\n/* harmony import */ var core_js_modules_es_string_trim_end_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_trim_end_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7870);\n/* harmony import */ var _sentry_hub__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3210);\n/* harmony import */ var _sentry_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2649);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2684);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(245);\n/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(150);\n/* harmony import */ var _span__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6369);\n\n\n\n\n\n\n/** JSDoc */\n\nvar Transaction =\n/** @class */\nfunction (_super) {\n (0,tslib__WEBPACK_IMPORTED_MODULE_1__/* .__extends */ .ZT)(Transaction, _super);\n /**\n * This constructor should never be called manually. Those instrumenting tracing should use\n * `Sentry.startTransaction()`, and internal methods should use `hub.startTransaction()`.\n * @internal\n * @hideconstructor\n * @hidden\n */\n\n\n function Transaction(transactionContext, hub) {\n var _this = _super.call(this, transactionContext) || this;\n\n _this._measurements = {};\n /**\n * The reference to the current hub.\n */\n\n _this._hub = (0,_sentry_hub__WEBPACK_IMPORTED_MODULE_2__/* .getCurrentHub */ .Gd)();\n\n if ((0,_sentry_utils__WEBPACK_IMPORTED_MODULE_3__/* .isInstanceOf */ .V9)(hub, _sentry_hub__WEBPACK_IMPORTED_MODULE_2__/* .Hub */ .Xb)) {\n _this._hub = hub;\n }\n\n _this.name = transactionContext.name || '';\n _this.metadata = transactionContext.metadata || {};\n _this._trimEnd = transactionContext.trimEnd; // this is because transactions are also spans, and spans have a transaction pointer\n\n _this.transaction = _this;\n return _this;\n }\n /**\n * JSDoc\n */\n\n\n Transaction.prototype.setName = function (name) {\n this.name = name;\n };\n /**\n * Attaches SpanRecorder to the span itself\n * @param maxlen maximum number of spans that can be recorded\n */\n\n\n Transaction.prototype.initSpanRecorder = function (maxlen) {\n if (maxlen === void 0) {\n maxlen = 1000;\n }\n\n if (!this.spanRecorder) {\n this.spanRecorder = new _span__WEBPACK_IMPORTED_MODULE_4__/* .SpanRecorder */ .g(maxlen);\n }\n\n this.spanRecorder.add(this);\n };\n /**\n * Set observed measurements for this transaction.\n * @hidden\n */\n\n\n Transaction.prototype.setMeasurements = function (measurements) {\n this._measurements = (0,tslib__WEBPACK_IMPORTED_MODULE_1__/* .__assign */ .pi)({}, measurements);\n };\n /**\n * Set metadata for this transaction.\n * @hidden\n */\n\n\n Transaction.prototype.setMetadata = function (newMetadata) {\n this.metadata = (0,tslib__WEBPACK_IMPORTED_MODULE_1__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_1__/* .__assign */ .pi)({}, this.metadata), newMetadata);\n };\n /**\n * @inheritDoc\n */\n\n\n Transaction.prototype.finish = function (endTimestamp) {\n var _this = this;\n\n var _a, _b, _c; // This transaction is already finished, so we should not flush it again.\n\n\n if (this.endTimestamp !== undefined) {\n return undefined;\n }\n\n if (!this.name) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_5__/* .logger.warn */ .k.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n this.name = '<unlabeled transaction>';\n } // just sets the end timestamp\n\n\n _super.prototype.finish.call(this, endTimestamp);\n\n if (this.sampled !== true) {\n // At this point if `sampled !== true` we want to discard the transaction.\n _sentry_utils__WEBPACK_IMPORTED_MODULE_5__/* .logger.log */ .k.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n (_c = (_a = this._hub.getClient()) === null || _a === void 0 ? void 0 : (_b = _a.getTransport()).recordLostEvent) === null || _c === void 0 ? void 0 : _c.call(_b, _sentry_types__WEBPACK_IMPORTED_MODULE_6__/* .Outcome.SampleRate */ .k.SampleRate, 'transaction');\n return undefined;\n }\n\n var finishedSpans = this.spanRecorder ? this.spanRecorder.spans.filter(function (s) {\n return s !== _this && s.endTimestamp;\n }) : [];\n\n if (this._trimEnd && finishedSpans.length > 0) {\n this.endTimestamp = finishedSpans.reduce(function (prev, current) {\n if (prev.endTimestamp && current.endTimestamp) {\n return prev.endTimestamp > current.endTimestamp ? prev : current;\n }\n\n return prev;\n }).endTimestamp;\n }\n\n var transaction = {\n contexts: {\n trace: this.getTraceContext()\n },\n spans: finishedSpans,\n start_timestamp: this.startTimestamp,\n tags: this.tags,\n timestamp: this.endTimestamp,\n transaction: this.name,\n type: 'transaction',\n debug_meta: this.metadata\n };\n var hasMeasurements = Object.keys(this._measurements).length > 0;\n\n if (hasMeasurements) {\n _sentry_utils__WEBPACK_IMPORTED_MODULE_5__/* .logger.log */ .k.log('[Measurements] Adding measurements to transaction', JSON.stringify(this._measurements, undefined, 2));\n transaction.measurements = this._measurements;\n }\n\n _sentry_utils__WEBPACK_IMPORTED_MODULE_5__/* .logger.log */ .k.log(\"[Tracing] Finishing \" + this.op + \" transaction: \" + this.name + \".\");\n return this._hub.captureEvent(transaction);\n };\n /**\n * @inheritDoc\n */\n\n\n Transaction.prototype.toContext = function () {\n var spanContext = _super.prototype.toContext.call(this);\n\n return (0,_sentry_utils__WEBPACK_IMPORTED_MODULE_7__/* .dropUndefinedKeys */ .Jr)((0,tslib__WEBPACK_IMPORTED_MODULE_1__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_1__/* .__assign */ .pi)({}, spanContext), {\n name: this.name,\n trimEnd: this._trimEnd\n }));\n };\n /**\n * @inheritDoc\n */\n\n\n Transaction.prototype.updateWithContext = function (transactionContext) {\n var _a;\n\n _super.prototype.updateWithContext.call(this, transactionContext);\n\n this.name = (_a = transactionContext.name, _a !== null && _a !== void 0 ? _a : '');\n this._trimEnd = transactionContext.trimEnd;\n return this;\n };\n\n return Transaction;\n}(_span__WEBPACK_IMPORTED_MODULE_4__/* .Span */ .D);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL3RyYW5zYWN0aW9uLmpzPzMwNGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQStDO0FBQ0g7QUFDSztBQUNUO0FBQ2dDO0FBQ2Y7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRSwwREFBUztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixvRUFBYTs7QUFFOUIsUUFBUSxxRUFBWSxNQUFNLHNEQUFHO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEIsd0RBQVk7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLHlCQUF5Qix5REFBUSxHQUFHO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0Esb0JBQW9CLHlEQUFRLENBQUMseURBQVEsR0FBRztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSxtQkFBbUI7OztBQUduQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLG9FQUFXO0FBQ2pCO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBLE1BQU0sa0VBQVU7QUFDaEIseUtBQXlLLGlGQUFrQjtBQUMzTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sa0VBQVU7QUFDaEI7QUFDQTs7QUFFQSxJQUFJLGtFQUFVO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSxXQUFXLDBFQUFpQixDQUFDLHlEQUFRLENBQUMseURBQVEsR0FBRztBQUNqRDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxDQUFDLGdEQUFTIiwiZmlsZSI6IjU5NTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0tZW5kLmpzXCI7XG5pbXBvcnQgeyBfX2Fzc2lnbiwgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50SHViLCBIdWIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgeyBPdXRjb21lIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBkcm9wVW5kZWZpbmVkS2V5cywgaXNJbnN0YW5jZU9mLCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCB7IFNwYW4gYXMgU3BhbkNsYXNzLCBTcGFuUmVjb3JkZXIgfSBmcm9tICcuL3NwYW4nO1xuLyoqIEpTRG9jICovXG5cbnZhciBUcmFuc2FjdGlvbiA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhUcmFuc2FjdGlvbiwgX3N1cGVyKTtcbiAgLyoqXG4gICAqIFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBtYW51YWxseS4gVGhvc2UgaW5zdHJ1bWVudGluZyB0cmFjaW5nIHNob3VsZCB1c2VcbiAgICogYFNlbnRyeS5zdGFydFRyYW5zYWN0aW9uKClgLCBhbmQgaW50ZXJuYWwgbWV0aG9kcyBzaG91bGQgdXNlIGBodWIuc3RhcnRUcmFuc2FjdGlvbigpYC5cbiAgICogQGludGVybmFsXG4gICAqIEBoaWRlY29uc3RydWN0b3JcbiAgICogQGhpZGRlblxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uQ29udGV4dCwgaHViKSB7XG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHJhbnNhY3Rpb25Db250ZXh0KSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuX21lYXN1cmVtZW50cyA9IHt9O1xuICAgIC8qKlxuICAgICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgaHViLlxuICAgICAqL1xuXG4gICAgX3RoaXMuX2h1YiA9IGdldEN1cnJlbnRIdWIoKTtcblxuICAgIGlmIChpc0luc3RhbmNlT2YoaHViLCBIdWIpKSB7XG4gICAgICBfdGhpcy5faHViID0gaHViO1xuICAgIH1cblxuICAgIF90aGlzLm5hbWUgPSB0cmFuc2FjdGlvbkNvbnRleHQubmFtZSB8fCAnJztcbiAgICBfdGhpcy5tZXRhZGF0YSA9IHRyYW5zYWN0aW9uQ29udGV4dC5tZXRhZGF0YSB8fCB7fTtcbiAgICBfdGhpcy5fdHJpbUVuZCA9IHRyYW5zYWN0aW9uQ29udGV4dC50cmltRW5kOyAvLyB0aGlzIGlzIGJlY2F1c2UgdHJhbnNhY3Rpb25zIGFyZSBhbHNvIHNwYW5zLCBhbmQgc3BhbnMgaGF2ZSBhIHRyYW5zYWN0aW9uIHBvaW50ZXJcblxuICAgIF90aGlzLnRyYW5zYWN0aW9uID0gX3RoaXM7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBKU0RvY1xuICAgKi9cblxuXG4gIFRyYW5zYWN0aW9uLnByb3RvdHlwZS5zZXROYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9O1xuICAvKipcbiAgICogQXR0YWNoZXMgU3BhblJlY29yZGVyIHRvIHRoZSBzcGFuIGl0c2VsZlxuICAgKiBAcGFyYW0gbWF4bGVuIG1heGltdW0gbnVtYmVyIG9mIHNwYW5zIHRoYXQgY2FuIGJlIHJlY29yZGVkXG4gICAqL1xuXG5cbiAgVHJhbnNhY3Rpb24ucHJvdG90eXBlLmluaXRTcGFuUmVjb3JkZXIgPSBmdW5jdGlvbiAobWF4bGVuKSB7XG4gICAgaWYgKG1heGxlbiA9PT0gdm9pZCAwKSB7XG4gICAgICBtYXhsZW4gPSAxMDAwO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zcGFuUmVjb3JkZXIpIHtcbiAgICAgIHRoaXMuc3BhblJlY29yZGVyID0gbmV3IFNwYW5SZWNvcmRlcihtYXhsZW4pO1xuICAgIH1cblxuICAgIHRoaXMuc3BhblJlY29yZGVyLmFkZCh0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIFNldCBvYnNlcnZlZCBtZWFzdXJlbWVudHMgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqIEBoaWRkZW5cbiAgICovXG5cblxuICBUcmFuc2FjdGlvbi5wcm90b3R5cGUuc2V0TWVhc3VyZW1lbnRzID0gZnVuY3Rpb24gKG1lYXN1cmVtZW50cykge1xuICAgIHRoaXMuX21lYXN1cmVtZW50cyA9IF9fYXNzaWduKHt9LCBtZWFzdXJlbWVudHMpO1xuICB9O1xuICAvKipcbiAgICogU2V0IG1ldGFkYXRhIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKiBAaGlkZGVuXG4gICAqL1xuXG5cbiAgVHJhbnNhY3Rpb24ucHJvdG90eXBlLnNldE1ldGFkYXRhID0gZnVuY3Rpb24gKG5ld01ldGFkYXRhKSB7XG4gICAgdGhpcy5tZXRhZGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLm1ldGFkYXRhKSwgbmV3TWV0YWRhdGEpO1xuICB9O1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cblxuICBUcmFuc2FjdGlvbi5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24gKGVuZFRpbWVzdGFtcCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgX2EsIF9iLCBfYzsgLy8gVGhpcyB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5IGZpbmlzaGVkLCBzbyB3ZSBzaG91bGQgbm90IGZsdXNoIGl0IGFnYWluLlxuXG5cbiAgICBpZiAodGhpcy5lbmRUaW1lc3RhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1RyYW5zYWN0aW9uIGhhcyBubyBuYW1lLCBmYWxsaW5nIGJhY2sgdG8gYDx1bmxhYmVsZWQgdHJhbnNhY3Rpb24+YC4nKTtcbiAgICAgIHRoaXMubmFtZSA9ICc8dW5sYWJlbGVkIHRyYW5zYWN0aW9uPic7XG4gICAgfSAvLyBqdXN0IHNldHMgdGhlIGVuZCB0aW1lc3RhbXBcblxuXG4gICAgX3N1cGVyLnByb3RvdHlwZS5maW5pc2guY2FsbCh0aGlzLCBlbmRUaW1lc3RhbXApO1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlZCAhPT0gdHJ1ZSkge1xuICAgICAgLy8gQXQgdGhpcyBwb2ludCBpZiBgc2FtcGxlZCAhPT0gdHJ1ZWAgd2Ugd2FudCB0byBkaXNjYXJkIHRoZSB0cmFuc2FjdGlvbi5cbiAgICAgIGxvZ2dlci5sb2coJ1tUcmFjaW5nXSBEaXNjYXJkaW5nIHRyYW5zYWN0aW9uIGJlY2F1c2UgaXRzIHRyYWNlIHdhcyBub3QgY2hvc2VuIHRvIGJlIHNhbXBsZWQuJyk7XG4gICAgICAoX2MgPSAoX2EgPSB0aGlzLl9odWIuZ2V0Q2xpZW50KCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2IgPSBfYS5nZXRUcmFuc3BvcnQoKSkucmVjb3JkTG9zdEV2ZW50KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbChfYiwgT3V0Y29tZS5TYW1wbGVSYXRlLCAndHJhbnNhY3Rpb24nKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdmFyIGZpbmlzaGVkU3BhbnMgPSB0aGlzLnNwYW5SZWNvcmRlciA/IHRoaXMuc3BhblJlY29yZGVyLnNwYW5zLmZpbHRlcihmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMgIT09IF90aGlzICYmIHMuZW5kVGltZXN0YW1wO1xuICAgIH0pIDogW107XG5cbiAgICBpZiAodGhpcy5fdHJpbUVuZCAmJiBmaW5pc2hlZFNwYW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZW5kVGltZXN0YW1wID0gZmluaXNoZWRTcGFucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cnJlbnQpIHtcbiAgICAgICAgaWYgKHByZXYuZW5kVGltZXN0YW1wICYmIGN1cnJlbnQuZW5kVGltZXN0YW1wKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXYuZW5kVGltZXN0YW1wID4gY3VycmVudC5lbmRUaW1lc3RhbXAgPyBwcmV2IDogY3VycmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSkuZW5kVGltZXN0YW1wO1xuICAgIH1cblxuICAgIHZhciB0cmFuc2FjdGlvbiA9IHtcbiAgICAgIGNvbnRleHRzOiB7XG4gICAgICAgIHRyYWNlOiB0aGlzLmdldFRyYWNlQ29udGV4dCgpXG4gICAgICB9LFxuICAgICAgc3BhbnM6IGZpbmlzaGVkU3BhbnMsXG4gICAgICBzdGFydF90aW1lc3RhbXA6IHRoaXMuc3RhcnRUaW1lc3RhbXAsXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgICB0aW1lc3RhbXA6IHRoaXMuZW5kVGltZXN0YW1wLFxuICAgICAgdHJhbnNhY3Rpb246IHRoaXMubmFtZSxcbiAgICAgIHR5cGU6ICd0cmFuc2FjdGlvbicsXG4gICAgICBkZWJ1Z19tZXRhOiB0aGlzLm1ldGFkYXRhXG4gICAgfTtcbiAgICB2YXIgaGFzTWVhc3VyZW1lbnRzID0gT2JqZWN0LmtleXModGhpcy5fbWVhc3VyZW1lbnRzKS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKGhhc01lYXN1cmVtZW50cykge1xuICAgICAgbG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIG1lYXN1cmVtZW50cyB0byB0cmFuc2FjdGlvbicsIEpTT04uc3RyaW5naWZ5KHRoaXMuX21lYXN1cmVtZW50cywgdW5kZWZpbmVkLCAyKSk7XG4gICAgICB0cmFuc2FjdGlvbi5tZWFzdXJlbWVudHMgPSB0aGlzLl9tZWFzdXJlbWVudHM7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmxvZyhcIltUcmFjaW5nXSBGaW5pc2hpbmcgXCIgKyB0aGlzLm9wICsgXCIgdHJhbnNhY3Rpb246IFwiICsgdGhpcy5uYW1lICsgXCIuXCIpO1xuICAgIHJldHVybiB0aGlzLl9odWIuY2FwdHVyZUV2ZW50KHRyYW5zYWN0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuXG5cbiAgVHJhbnNhY3Rpb24ucHJvdG90eXBlLnRvQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3BhbkNvbnRleHQgPSBfc3VwZXIucHJvdG90eXBlLnRvQ29udGV4dC5jYWxsKHRoaXMpO1xuXG4gICAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKF9fYXNzaWduKF9fYXNzaWduKHt9LCBzcGFuQ29udGV4dCksIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHRyaW1FbmQ6IHRoaXMuX3RyaW1FbmRcbiAgICB9KSk7XG4gIH07XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cblxuXG4gIFRyYW5zYWN0aW9uLnByb3RvdHlwZS51cGRhdGVXaXRoQ29udGV4dCA9IGZ1bmN0aW9uICh0cmFuc2FjdGlvbkNvbnRleHQpIHtcbiAgICB2YXIgX2E7XG5cbiAgICBfc3VwZXIucHJvdG90eXBlLnVwZGF0ZVdpdGhDb250ZXh0LmNhbGwodGhpcywgdHJhbnNhY3Rpb25Db250ZXh0KTtcblxuICAgIHRoaXMubmFtZSA9IChfYSA9IHRyYW5zYWN0aW9uQ29udGV4dC5uYW1lLCBfYSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyk7XG4gICAgdGhpcy5fdHJpbUVuZCA9IHRyYW5zYWN0aW9uQ29udGV4dC50cmltRW5kO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2FjdGlvbjtcbn0oU3BhbkNsYXNzKTtcblxuZXhwb3J0IHsgVHJhbnNhY3Rpb24gfTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5955\n")},2662:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Ke\": function() { return /* binding */ TRACEPARENT_REGEXP; },\n/* harmony export */ \"zu\": function() { return /* binding */ hasTracingEnabled; },\n/* harmony export */ \"qG\": function() { return /* binding */ extractTraceparentData; },\n/* harmony export */ \"x1\": function() { return /* binding */ getActiveTransaction; },\n/* harmony export */ \"XL\": function() { return /* binding */ msToSec; },\n/* harmony export */ \"WB\": function() { return /* binding */ secToMs; }\n/* harmony export */ });\n/* harmony import */ var _sentry_hub__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3210);\n\nvar TRACEPARENT_REGEXP = new RegExp('^[ \\\\t]*' + // whitespace\n'([0-9a-f]{32})?' + // trace_id\n'-?([0-9a-f]{16})?' + // span_id\n'-?([01])?' + // sampled\n'[ \\\\t]*$');\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\n\nfunction hasTracingEnabled(options) {\n if (options === void 0) {\n options = (_a = (0,_sentry_hub__WEBPACK_IMPORTED_MODULE_0__/* .getCurrentHub */ .Gd)().getClient()) === null || _a === void 0 ? void 0 : _a.getOptions();\n }\n\n var _a;\n\n if (!options) {\n return false;\n }\n\n return 'tracesSampleRate' in options || 'tracesSampler' in options;\n}\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\n\nfunction extractTraceparentData(traceparent) {\n var matches = traceparent.match(TRACEPARENT_REGEXP);\n\n if (matches) {\n var parentSampled = void 0;\n\n if (matches[3] === '1') {\n parentSampled = true;\n } else if (matches[3] === '0') {\n parentSampled = false;\n }\n\n return {\n traceId: matches[1],\n parentSampled: parentSampled,\n parentSpanId: matches[2]\n };\n }\n\n return undefined;\n}\n/** Grabs active transaction off scope, if any */\n\nfunction getActiveTransaction(hub) {\n if (hub === void 0) {\n hub = (0,_sentry_hub__WEBPACK_IMPORTED_MODULE_0__/* .getCurrentHub */ .Gd)();\n }\n\n var _a, _b;\n\n return (_b = (_a = hub) === null || _a === void 0 ? void 0 : _a.getScope()) === null || _b === void 0 ? void 0 : _b.getTransaction();\n}\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\n\nfunction msToSec(time) {\n return time / 1000;\n}\n/**\n * Converts from seconds to milliseconds\n * @param time time in seconds\n */\n\nfunction secToMs(time) {\n return time * 1000;\n} // so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvZXNtL3V0aWxzLmpzPzMyNGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTRDO0FBQ3JDO0FBQ1AsV0FBVyxHQUFHO0FBQ2QsYUFBYSxHQUFHO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQSxvQkFBb0Isb0VBQWE7QUFDakM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBLFVBQVUsb0VBQWE7QUFDdkI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQSxDQUFDIiwiZmlsZSI6IjI2NjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuZXhwb3J0IHZhciBUUkFDRVBBUkVOVF9SRUdFWFAgPSBuZXcgUmVnRXhwKCdeWyBcXFxcdF0qJyArIC8vIHdoaXRlc3BhY2VcbicoWzAtOWEtZl17MzJ9KT8nICsgLy8gdHJhY2VfaWRcbictPyhbMC05YS1mXXsxNn0pPycgKyAvLyBzcGFuX2lkXG4nLT8oWzAxXSk/JyArIC8vIHNhbXBsZWRcbidbIFxcXFx0XSokJyk7XG4vKipcbiAqIERldGVybWluZXMgaWYgdHJhY2luZyBpcyBjdXJyZW50bHkgZW5hYmxlZC5cbiAqXG4gKiBUcmFjaW5nIGlzIGVuYWJsZWQgd2hlbiBhdCBsZWFzdCBvbmUgb2YgYHRyYWNlc1NhbXBsZVJhdGVgIGFuZCBgdHJhY2VzU2FtcGxlcmAgaXMgZGVmaW5lZCBpbiB0aGUgU0RLIGNvbmZpZy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzVHJhY2luZ0VuYWJsZWQob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IChfYSA9IGdldEN1cnJlbnRIdWIoKS5nZXRDbGllbnQoKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldE9wdGlvbnMoKTtcbiAgfVxuXG4gIHZhciBfYTtcblxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gJ3RyYWNlc1NhbXBsZVJhdGUnIGluIG9wdGlvbnMgfHwgJ3RyYWNlc1NhbXBsZXInIGluIG9wdGlvbnM7XG59XG4vKipcbiAqIEV4dHJhY3QgdHJhbnNhY3Rpb24gY29udGV4dCBkYXRhIGZyb20gYSBgc2VudHJ5LXRyYWNlYCBoZWFkZXIuXG4gKlxuICogQHBhcmFtIHRyYWNlcGFyZW50IFRyYWNlcGFyZW50IHN0cmluZ1xuICpcbiAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIGRhdGEgZnJvbSB0aGUgaGVhZGVyLCBvciB1bmRlZmluZWQgaWYgdHJhY2VwYXJlbnQgc3RyaW5nIGlzIG1hbGZvcm1lZFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VHJhY2VwYXJlbnREYXRhKHRyYWNlcGFyZW50KSB7XG4gIHZhciBtYXRjaGVzID0gdHJhY2VwYXJlbnQubWF0Y2goVFJBQ0VQQVJFTlRfUkVHRVhQKTtcblxuICBpZiAobWF0Y2hlcykge1xuICAgIHZhciBwYXJlbnRTYW1wbGVkID0gdm9pZCAwO1xuXG4gICAgaWYgKG1hdGNoZXNbM10gPT09ICcxJykge1xuICAgICAgcGFyZW50U2FtcGxlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChtYXRjaGVzWzNdID09PSAnMCcpIHtcbiAgICAgIHBhcmVudFNhbXBsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHJhY2VJZDogbWF0Y2hlc1sxXSxcbiAgICAgIHBhcmVudFNhbXBsZWQ6IHBhcmVudFNhbXBsZWQsXG4gICAgICBwYXJlbnRTcGFuSWQ6IG1hdGNoZXNbMl1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbi8qKiBHcmFicyBhY3RpdmUgdHJhbnNhY3Rpb24gb2ZmIHNjb3BlLCBpZiBhbnkgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGl2ZVRyYW5zYWN0aW9uKGh1Yikge1xuICBpZiAoaHViID09PSB2b2lkIDApIHtcbiAgICBodWIgPSBnZXRDdXJyZW50SHViKCk7XG4gIH1cblxuICB2YXIgX2EsIF9iO1xuXG4gIHJldHVybiAoX2IgPSAoX2EgPSBodWIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRTY29wZSgpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0VHJhbnNhY3Rpb24oKTtcbn1cbi8qKlxuICogQ29udmVydHMgZnJvbSBtaWxsaXNlY29uZHMgdG8gc2Vjb25kc1xuICogQHBhcmFtIHRpbWUgdGltZSBpbiBtc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtc1RvU2VjKHRpbWUpIHtcbiAgcmV0dXJuIHRpbWUgLyAxMDAwO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBmcm9tIHNlY29uZHMgdG8gbWlsbGlzZWNvbmRzXG4gKiBAcGFyYW0gdGltZSB0aW1lIGluIHNlY29uZHNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2VjVG9Ncyh0aW1lKSB7XG4gIHJldHVybiB0aW1lICogMTAwMDtcbn0gLy8gc28gaXQgY2FuIGJlIHVzZWQgaW4gbWFudWFsIGluc3RydW1lbnRhdGlvbiB3aXRob3V0IG5lY2Vzc2l0YXRpbmcgYSBoYXJkIGRlcGVuZGVuY3kgb24gQHNlbnRyeS91dGlsc1xuXG5leHBvcnQgeyBzdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQgfSBmcm9tICdAc2VudHJ5L3V0aWxzJzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2662\n")},7870:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "ZT": function() { return /* binding */ __extends; },\n/* harmony export */ "pi": function() { return /* binding */ _assign; },\n/* harmony export */ "_T": function() { return /* binding */ __rest; },\n/* harmony export */ "XA": function() { return /* binding */ __values; },\n/* harmony export */ "CR": function() { return /* binding */ __read; },\n/* harmony export */ "fl": function() { return /* binding */ __spread; }\n/* harmony export */ });\n/* unused harmony exports __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\n\nfunction __rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction __param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator["throw"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n "throw": verb(1),\n "return": verb(2)\n }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError("Generator is already executing.");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction __createBinding(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}\nfunction __exportStar(m, exports) {\n for (var p in m) {\n if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];\n }\n}\nfunction __values(o) {\n var s = typeof Symbol === "function" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === "number") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === "function" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i["return"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\nfunction __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n}\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n;\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n\n function verb(n) {\n if (g[n]) i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n }\n\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n\n function fulfill(value) {\n resume("next", value);\n }\n\n function reject(value) {\n resume("throw", value);\n }\n\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction __asyncDelegator(o) {\n var i, p;\n return i = {}, verb("next"), verb("throw", function (e) {\n throw e;\n }), verb("return"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: __await(o[n](v)),\n done: n === "return"\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, "raw", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n\n return cooked;\n}\n;\nfunction __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n }\n result.default = mod;\n return result;\n}\nfunction __importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nfunction __classPrivateFieldGet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError("attempted to get private field on non-instance");\n }\n\n return privateMap.get(receiver);\n}\nfunction __classPrivateFieldSet(receiver, privateMap, value) {\n if (!privateMap.has(receiver)) {\n throw new TypeError("attempted to set private field on non-instance");\n }\n\n privateMap.set(receiver, value);\n return value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcz8wMTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDLE9BQU87QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUUrQjtBQUN4QjtBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwySEFBMkgsY0FBYztBQUN6STtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsaUlBQWlJLHdDQUF3QyxRQUFRO0FBQ2pMO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNPO0FBQ1AsMEJBQTBCLHNCQUFzQjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDTztBQUNQLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7O0FBRUEsc0NBQXNDLFFBQVE7QUFDOUMsb0RBQW9ELFFBQVE7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLHlHQUF5RztBQUN6RztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNzg3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXG52YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgIF9fcHJvdG9fXzogW11cbiAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZC5fX3Byb3RvX18gPSBiO1xuICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICBmdW5jdGlvbiBfXygpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgfVxuXG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxudmFyIF9hc3NpZ24gPSBmdW5jdGlvbiBfX2Fzc2lnbigpIHtcbiAgX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIHJldHVybiBfYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG5leHBvcnQgeyBfYXNzaWduIGFzIF9fYXNzaWduIH07XG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcblxuICBmb3IgKHZhciBwIGluIHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApIHRbcF0gPSBzW3BdO1xuICB9XG5cbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKSBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKSB0W3BbaV1dID0gc1twW2ldXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLFxuICAgICAgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgfVxuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpO1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHtcbiAgICBsYWJlbDogMCxcbiAgICBzZW50OiBmdW5jdGlvbiBzZW50KCkge1xuICAgICAgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdO1xuICAgICAgcmV0dXJuIHRbMV07XG4gICAgfSxcbiAgICB0cnlzOiBbXSxcbiAgICBvcHM6IFtdXG4gIH0sXG4gICAgICBmLFxuICAgICAgeSxcbiAgICAgIHQsXG4gICAgICBnO1xuICByZXR1cm4gZyA9IHtcbiAgICBuZXh0OiB2ZXJiKDApLFxuICAgIFwidGhyb3dcIjogdmVyYigxKSxcbiAgICBcInJldHVyblwiOiB2ZXJiKDIpXG4gIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZztcblxuICBmdW5jdGlvbiB2ZXJiKG4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBzdGVwKFtuLCB2XSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG5cbiAgICB3aGlsZSAoXykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG5cbiAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0ID0gb3A7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIF8ubGFiZWwrKztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBvcFsxXSxcbiAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBfLmxhYmVsKys7XG4gICAgICAgICAgICB5ID0gb3BbMV07XG4gICAgICAgICAgICBvcCA9IFswXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgb3AgPSBfLm9wcy5wb3AoKTtcblxuICAgICAgICAgICAgXy50cnlzLnBvcCgpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkge1xuICAgICAgICAgICAgICBfID0gMDtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgb3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpIHtcbiAgICAgICAgICAgICAgXy5sYWJlbCA9IG9wWzFdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7XG4gICAgICAgICAgICAgIF8ubGFiZWwgPSB0WzFdO1xuICAgICAgICAgICAgICB0ID0gb3A7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkge1xuICAgICAgICAgICAgICBfLmxhYmVsID0gdFsyXTtcblxuICAgICAgICAgICAgICBfLm9wcy5wdXNoKG9wKTtcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuXG4gICAgICAgICAgICBfLnRyeXMucG9wKCk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9wID0gWzYsIGVdO1xuICAgICAgICB5ID0gMDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGYgPSB0ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsXG4gICAgICBkb25lOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fY3JlYXRlQmluZGluZyhvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59XG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcbiAgZm9yICh2YXIgcCBpbiBtKSB7XG4gICAgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgbSA9IHMgJiYgb1tzXSxcbiAgICAgIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IG8gJiYgb1tpKytdLFxuICAgICAgICBkb25lOiAhb1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLFxuICAgICAgcixcbiAgICAgIGFyID0gW10sXG4gICAgICBlO1xuXG4gIHRyeSB7XG4gICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGUgPSB7XG4gICAgICBlcnJvcjogZXJyb3JcbiAgICB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgfVxuXG4gIHJldHVybiBhcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG4gICAgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICB9XG5cbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKSB7XG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspIHtcbiAgICAgIHJba10gPSBhW2pdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSxcbiAgICAgIGksXG4gICAgICBxID0gW107XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuXG4gIGZ1bmN0aW9uIHZlcmIobikge1xuICAgIGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0ZXAoZ1tuXSh2KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0dGxlKHFbMF1bM10sIGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZXAocikge1xuICAgIHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkge1xuICAgIHJlc3VtZShcIm5leHRcIiwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHtcbiAgICBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgdGhyb3cgZTtcbiAgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcblxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHtcbiAgICBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gKHAgPSAhcCkgPyB7XG4gICAgICAgIHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLFxuICAgICAgICBkb25lOiBuID09PSBcInJldHVyblwiXG4gICAgICB9IDogZiA/IGYodikgOiB2O1xuICAgIH0gOiBmO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sXG4gICAgICBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpKTtcblxuICBmdW5jdGlvbiB2ZXJiKG4pIHtcbiAgICBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikge1xuICAgIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgIGRvbmU6IGRcbiAgICAgIH0pO1xuICAgIH0sIHJlamVjdCk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwge1xuICAgICAgdmFsdWU6IHJhd1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvb2tlZC5yYXcgPSByYXc7XG4gIH1cblxuICByZXR1cm4gY29va2VkO1xufVxuO1xuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcbiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSB7XG4gICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcbiAgfVxuICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiBtb2QgJiYgbW9kLl9fZXNNb2R1bGUgPyBtb2QgOiB7XG4gICAgZGVmYXVsdDogbW9kXG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xuICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xuICB9XG5cbiAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xuICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xuICB9XG5cbiAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7870\n')},2355:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "$": function() { return /* binding */ SessionStatus; }\n/* harmony export */ });\n/* unused harmony export RequestSessionStatus */\n/**\n * Session Status\n */\nvar SessionStatus;\n\n(function (SessionStatus) {\n /** JSDoc */\n SessionStatus["Ok"] = "ok";\n /** JSDoc */\n\n SessionStatus["Exited"] = "exited";\n /** JSDoc */\n\n SessionStatus["Crashed"] = "crashed";\n /** JSDoc */\n\n SessionStatus["Abnormal"] = "abnormal";\n})(SessionStatus || (SessionStatus = {}));\n\nvar RequestSessionStatus;\n\n(function (RequestSessionStatus) {\n /** JSDoc */\n RequestSessionStatus["Ok"] = "ok";\n /** JSDoc */\n\n RequestSessionStatus["Errored"] = "errored";\n /** JSDoc */\n\n RequestSessionStatus["Crashed"] = "crashed";\n})(RequestSessionStatus || (RequestSessionStatus = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL2VzbS9zZXNzaW9uLmpzPzIwZjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNPOztBQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUMsc0NBQXNDOztBQUVoQzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyxvREFBb0QiLCJmaWxlIjoiMjM1NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2Vzc2lvbiBTdGF0dXNcbiAqL1xuZXhwb3J0IHZhciBTZXNzaW9uU3RhdHVzO1xuXG4oZnVuY3Rpb24gKFNlc3Npb25TdGF0dXMpIHtcbiAgLyoqIEpTRG9jICovXG4gIFNlc3Npb25TdGF0dXNbXCJPa1wiXSA9IFwib2tcIjtcbiAgLyoqIEpTRG9jICovXG5cbiAgU2Vzc2lvblN0YXR1c1tcIkV4aXRlZFwiXSA9IFwiZXhpdGVkXCI7XG4gIC8qKiBKU0RvYyAqL1xuXG4gIFNlc3Npb25TdGF0dXNbXCJDcmFzaGVkXCJdID0gXCJjcmFzaGVkXCI7XG4gIC8qKiBKU0RvYyAqL1xuXG4gIFNlc3Npb25TdGF0dXNbXCJBYm5vcm1hbFwiXSA9IFwiYWJub3JtYWxcIjtcbn0pKFNlc3Npb25TdGF0dXMgfHwgKFNlc3Npb25TdGF0dXMgPSB7fSkpO1xuXG5leHBvcnQgdmFyIFJlcXVlc3RTZXNzaW9uU3RhdHVzO1xuXG4oZnVuY3Rpb24gKFJlcXVlc3RTZXNzaW9uU3RhdHVzKSB7XG4gIC8qKiBKU0RvYyAqL1xuICBSZXF1ZXN0U2Vzc2lvblN0YXR1c1tcIk9rXCJdID0gXCJva1wiO1xuICAvKiogSlNEb2MgKi9cblxuICBSZXF1ZXN0U2Vzc2lvblN0YXR1c1tcIkVycm9yZWRcIl0gPSBcImVycm9yZWRcIjtcbiAgLyoqIEpTRG9jICovXG5cbiAgUmVxdWVzdFNlc3Npb25TdGF0dXNbXCJDcmFzaGVkXCJdID0gXCJjcmFzaGVkXCI7XG59KShSZXF1ZXN0U2Vzc2lvblN0YXR1cyB8fCAoUmVxdWVzdFNlc3Npb25TdGF0dXMgPSB7fSkpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2355\n')},2649:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "k": function() { return /* binding */ Outcome; }\n/* harmony export */ });\nvar Outcome;\n\n(function (Outcome) {\n Outcome["BeforeSend"] = "before_send";\n Outcome["EventProcessor"] = "event_processor";\n Outcome["NetworkError"] = "network_error";\n Outcome["QueueOverflow"] = "queue_overflow";\n Outcome["RateLimitBackoff"] = "ratelimit_backoff";\n Outcome["SampleRate"] = "sample_rate";\n})(Outcome || (Outcome = {}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL2VzbS90cmFuc3BvcnQuanM/MDc3OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsMEJBQTBCIiwiZmlsZSI6IjI2NDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdmFyIE91dGNvbWU7XG5cbihmdW5jdGlvbiAoT3V0Y29tZSkge1xuICBPdXRjb21lW1wiQmVmb3JlU2VuZFwiXSA9IFwiYmVmb3JlX3NlbmRcIjtcbiAgT3V0Y29tZVtcIkV2ZW50UHJvY2Vzc29yXCJdID0gXCJldmVudF9wcm9jZXNzb3JcIjtcbiAgT3V0Y29tZVtcIk5ldHdvcmtFcnJvclwiXSA9IFwibmV0d29ya19lcnJvclwiO1xuICBPdXRjb21lW1wiUXVldWVPdmVyZmxvd1wiXSA9IFwicXVldWVfb3ZlcmZsb3dcIjtcbiAgT3V0Y29tZVtcIlJhdGVMaW1pdEJhY2tvZmZcIl0gPSBcInJhdGVsaW1pdF9iYWNrb2ZmXCI7XG4gIE91dGNvbWVbXCJTYW1wbGVSYXRlXCJdID0gXCJzYW1wbGVfcmF0ZVwiO1xufSkoT3V0Y29tZSB8fCAoT3V0Y29tZSA9IHt9KSk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2649\n')},595:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "R": function() { return /* binding */ htmlTreeAsString; }\n/* harmony export */ });\n/* harmony import */ var _is__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2684);\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\n\nfunction htmlTreeAsString(elem, keyAttrs) {\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it\'s complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n var currentElem = elem;\n var MAX_TRAVERSE_HEIGHT = 5;\n var MAX_OUTPUT_LEN = 80;\n var out = [];\n var height = 0;\n var len = 0;\n var separator = \' > \';\n var sepLength = separator.length;\n var nextStr = void 0; // eslint-disable-next-line no-plusplus\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs); // bail out if\n // - nextStr is the \'html\' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n\n if (nextStr === \'html\' || height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) {\n break;\n }\n\n out.push(nextStr);\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return \'<unknown>\';\n }\n}\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\n\nfunction _htmlElementAsString(el, keyAttrs) {\n var _a, _b;\n\n var elem = el;\n var out = [];\n var className;\n var classes;\n var key;\n var attr;\n var i;\n\n if (!elem || !elem.tagName) {\n return \'\';\n }\n\n out.push(elem.tagName.toLowerCase()); // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n\n var keyAttrPairs = ((_a = keyAttrs) === null || _a === void 0 ? void 0 : _a.length) ? keyAttrs.filter(function (keyAttr) {\n return elem.getAttribute(keyAttr);\n }).map(function (keyAttr) {\n return [keyAttr, elem.getAttribute(keyAttr)];\n }) : null;\n\n if ((_b = keyAttrPairs) === null || _b === void 0 ? void 0 : _b.length) {\n keyAttrPairs.forEach(function (keyAttrPair) {\n out.push("[" + keyAttrPair[0] + "=\\"" + keyAttrPair[1] + "\\"]");\n });\n } else {\n if (elem.id) {\n out.push("#" + elem.id);\n } // eslint-disable-next-line prefer-const\n\n\n className = elem.className;\n\n if (className && (0,_is__WEBPACK_IMPORTED_MODULE_0__/* .isString */ .HD)(className)) {\n classes = className.split(/\\s+/);\n\n for (i = 0; i < classes.length; i++) {\n out.push("." + classes[i]);\n }\n }\n }\n\n var allowedAttrs = [\'type\', \'name\', \'title\', \'alt\'];\n\n for (i = 0; i < allowedAttrs.length; i++) {\n key = allowedAttrs[i];\n attr = elem.getAttribute(key);\n\n if (attr) {\n out.push("[" + key + "=\\"" + attr + "\\"]");\n }\n }\n\n return out.join(\'\');\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9icm93c2VyLmpzPzgzMmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUEscUJBQXFCLHVEQUFRO0FBQzdCOztBQUVBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsYUFBYSx5QkFBeUI7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjU5NS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi9pcyc7XG4vKipcbiAqIEdpdmVuIGEgY2hpbGQgRE9NIGVsZW1lbnQsIHJldHVybnMgYSBxdWVyeS1zZWxlY3RvciBzdGF0ZW1lbnQgZGVzY3JpYmluZyB0aGF0XG4gKiBhbmQgaXRzIGFuY2VzdG9yc1xuICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGJvZHkgPiBkaXYgPiBpbnB1dCNmb28uYnRuW25hbWU9YmF6XVxuICogQHJldHVybnMgZ2VuZXJhdGVkIERPTSBwYXRoXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGh0bWxUcmVlQXNTdHJpbmcoZWxlbSwga2V5QXR0cnMpIHtcbiAgLy8gdHJ5L2NhdGNoIGJvdGg6XG4gIC8vIC0gYWNjZXNzaW5nIGV2ZW50LnRhcmdldCAoc2VlIGdldHNlbnRyeS9yYXZlbi1qcyM4MzgsICM3NjgpXG4gIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseVxuICAvLyAtIGNhbiB0aHJvdyBhbiBleGNlcHRpb24gaW4gc29tZSBjaXJjdW1zdGFuY2VzLlxuICB0cnkge1xuICAgIHZhciBjdXJyZW50RWxlbSA9IGVsZW07XG4gICAgdmFyIE1BWF9UUkFWRVJTRV9IRUlHSFQgPSA1O1xuICAgIHZhciBNQVhfT1VUUFVUX0xFTiA9IDgwO1xuICAgIHZhciBvdXQgPSBbXTtcbiAgICB2YXIgaGVpZ2h0ID0gMDtcbiAgICB2YXIgbGVuID0gMDtcbiAgICB2YXIgc2VwYXJhdG9yID0gJyA+ICc7XG4gICAgdmFyIHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7XG4gICAgdmFyIG5leHRTdHIgPSB2b2lkIDA7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wbHVzcGx1c1xuXG4gICAgd2hpbGUgKGN1cnJlbnRFbGVtICYmIGhlaWdodCsrIDwgTUFYX1RSQVZFUlNFX0hFSUdIVCkge1xuICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7IC8vIGJhaWwgb3V0IGlmXG4gICAgICAvLyAtIG5leHRTdHIgaXMgdGhlICdodG1sJyBlbGVtZW50XG4gICAgICAvLyAtIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB0aGF0IHdvdWxkIGJlIGNyZWF0ZWQgZXhjZWVkcyBNQVhfT1VUUFVUX0xFTlxuICAgICAgLy8gICAoaWdub3JlIHRoaXMgbGltaXQgaWYgd2UgYXJlIG9uIHRoZSBmaXJzdCBpdGVyYXRpb24pXG5cbiAgICAgIGlmIChuZXh0U3RyID09PSAnaHRtbCcgfHwgaGVpZ2h0ID4gMSAmJiBsZW4gKyBvdXQubGVuZ3RoICogc2VwTGVuZ3RoICsgbmV4dFN0ci5sZW5ndGggPj0gTUFYX09VVFBVVF9MRU4pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG91dC5wdXNoKG5leHRTdHIpO1xuICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoO1xuICAgICAgY3VycmVudEVsZW0gPSBjdXJyZW50RWxlbS5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQucmV2ZXJzZSgpLmpvaW4oc2VwYXJhdG9yKTtcbiAgfSBjYXRjaCAoX29PKSB7XG4gICAgcmV0dXJuICc8dW5rbm93bj4nO1xuICB9XG59XG4vKipcbiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnRcbiAqIGUuZy4gW0hUTUxFbGVtZW50XSA9PiBpbnB1dCNmb28uYnRuW25hbWU9YmF6XVxuICogQHJldHVybnMgZ2VuZXJhdGVkIERPTSBwYXRoXG4gKi9cblxuZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7XG4gIHZhciBfYSwgX2I7XG5cbiAgdmFyIGVsZW0gPSBlbDtcbiAgdmFyIG91dCA9IFtdO1xuICB2YXIgY2xhc3NOYW1lO1xuICB2YXIgY2xhc3NlcztcbiAgdmFyIGtleTtcbiAgdmFyIGF0dHI7XG4gIHZhciBpO1xuXG4gIGlmICghZWxlbSB8fCAhZWxlbS50YWdOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgb3V0LnB1c2goZWxlbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpOyAvLyBQYWlycyBvZiBhdHRyaWJ1dGUga2V5cyBkZWZpbmVkIGluIGBzZXJpYWxpemVBdHRyaWJ1dGVgIGFuZCB0aGVpciB2YWx1ZXMgb24gZWxlbWVudC5cblxuICB2YXIga2V5QXR0clBhaXJzID0gKChfYSA9IGtleUF0dHJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA/IGtleUF0dHJzLmZpbHRlcihmdW5jdGlvbiAoa2V5QXR0cikge1xuICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShrZXlBdHRyKTtcbiAgfSkubWFwKGZ1bmN0aW9uIChrZXlBdHRyKSB7XG4gICAgcmV0dXJuIFtrZXlBdHRyLCBlbGVtLmdldEF0dHJpYnV0ZShrZXlBdHRyKV07XG4gIH0pIDogbnVsbDtcblxuICBpZiAoKF9iID0ga2V5QXR0clBhaXJzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubGVuZ3RoKSB7XG4gICAga2V5QXR0clBhaXJzLmZvckVhY2goZnVuY3Rpb24gKGtleUF0dHJQYWlyKSB7XG4gICAgICBvdXQucHVzaChcIltcIiArIGtleUF0dHJQYWlyWzBdICsgXCI9XFxcIlwiICsga2V5QXR0clBhaXJbMV0gKyBcIlxcXCJdXCIpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGlmIChlbGVtLmlkKSB7XG4gICAgICBvdXQucHVzaChcIiNcIiArIGVsZW0uaWQpO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuXG5cbiAgICBjbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZTtcblxuICAgIGlmIChjbGFzc05hbWUgJiYgaXNTdHJpbmcoY2xhc3NOYW1lKSkge1xuICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBvdXQucHVzaChcIi5cIiArIGNsYXNzZXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBhbGxvd2VkQXR0cnMgPSBbJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTtcblxuICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gYWxsb3dlZEF0dHJzW2ldO1xuICAgIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShrZXkpO1xuXG4gICAgaWYgKGF0dHIpIHtcbiAgICAgIG91dC5wdXNoKFwiW1wiICsga2V5ICsgXCI9XFxcIlwiICsgYXR0ciArIFwiXFxcIl1cIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dC5qb2luKCcnKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///595\n')},6710:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"o\": function() { return /* binding */ addInstrumentationHandler; }\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4850);\n/* harmony import */ var _is__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2684);\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(245);\n/* harmony import */ var _misc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2861);\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(150);\n/* harmony import */ var _stacktrace__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1313);\n/* harmony import */ var _supports__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4712);\n\n\n\n\n\n\n\nvar global = (0,_misc__WEBPACK_IMPORTED_MODULE_0__/* .getGlobalObject */ .Rf)();\n/**\n * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc.\n * - Console API\n * - Fetch API\n * - XHR API\n * - History API\n * - DOM API (click/typing)\n * - Error API\n * - UnhandledRejection API\n */\n\nvar handlers = {};\nvar instrumented = {};\n/** Instruments given API */\n\nfunction instrument(type) {\n if (instrumented[type]) {\n return;\n }\n\n instrumented[type] = true;\n\n switch (type) {\n case 'console':\n instrumentConsole();\n break;\n\n case 'dom':\n instrumentDOM();\n break;\n\n case 'xhr':\n instrumentXHR();\n break;\n\n case 'fetch':\n instrumentFetch();\n break;\n\n case 'history':\n instrumentHistory();\n break;\n\n case 'error':\n instrumentError();\n break;\n\n case 'unhandledrejection':\n instrumentUnhandledRejection();\n break;\n\n default:\n _logger__WEBPACK_IMPORTED_MODULE_1__/* .logger.warn */ .k.warn('unknown instrumentation type:', type);\n }\n}\n/**\n * Add handler that will be called when given type of instrumentation triggers.\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\n\n\nfunction addInstrumentationHandler(handler) {\n if (!handler || typeof handler.type !== 'string' || typeof handler.callback !== 'function') {\n return;\n }\n\n handlers[handler.type] = handlers[handler.type] || [];\n handlers[handler.type].push(handler.callback);\n instrument(handler.type);\n}\n/** JSDoc */\n\nfunction triggerHandlers(type, data) {\n var e_1, _a;\n\n if (!type || !handlers[type]) {\n return;\n }\n\n try {\n for (var _b = (0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__values */ .XA)(handlers[type] || []), _c = _b.next(); !_c.done; _c = _b.next()) {\n var handler = _c.value;\n\n try {\n handler(data);\n } catch (e) {\n _logger__WEBPACK_IMPORTED_MODULE_1__/* .logger.error */ .k.error(\"Error while triggering instrumentation handler.\\nType: \" + type + \"\\nName: \" + (0,_stacktrace__WEBPACK_IMPORTED_MODULE_3__/* .getFunctionName */ .$)(handler) + \"\\nError: \" + e);\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n}\n/** JSDoc */\n\n\nfunction instrumentConsole() {\n if (!('console' in global)) {\n return;\n }\n\n ['debug', 'info', 'warn', 'error', 'log', 'assert'].forEach(function (level) {\n if (!(level in global.console)) {\n return;\n }\n\n (0,_object__WEBPACK_IMPORTED_MODULE_4__/* .fill */ .hl)(global.console, level, function (originalConsoleLevel) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n triggerHandlers('console', {\n args: args,\n level: level\n }); // this fails for some browsers. :(\n\n if (originalConsoleLevel) {\n Function.prototype.apply.call(originalConsoleLevel, global.console, args);\n }\n };\n });\n });\n}\n/** JSDoc */\n\n\nfunction instrumentFetch() {\n if (!(0,_supports__WEBPACK_IMPORTED_MODULE_5__/* .supportsNativeFetch */ .t$)()) {\n return;\n }\n\n (0,_object__WEBPACK_IMPORTED_MODULE_4__/* .fill */ .hl)(global, 'fetch', function (originalFetch) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var handlerData = {\n args: args,\n fetchData: {\n method: getFetchMethod(args),\n url: getFetchUrl(args)\n },\n startTimestamp: Date.now()\n };\n triggerHandlers('fetch', (0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)({}, handlerData)); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\n return originalFetch.apply(global, args).then(function (response) {\n triggerHandlers('fetch', (0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)({}, handlerData), {\n endTimestamp: Date.now(),\n response: response\n }));\n return response;\n }, function (error) {\n triggerHandlers('fetch', (0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)((0,tslib__WEBPACK_IMPORTED_MODULE_2__/* .__assign */ .pi)({}, handlerData), {\n endTimestamp: Date.now(),\n error: error\n })); // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the sentry.javascript SDK caught an error invoking your application code.\n // This is expected behavior and NOT indicative of a bug with sentry.javascript.\n\n throw error;\n });\n };\n });\n}\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\n/** Extract `method` from fetch call arguments */\n\n\nfunction getFetchMethod(fetchArgs) {\n if (fetchArgs === void 0) {\n fetchArgs = [];\n }\n\n if ('Request' in global && (0,_is__WEBPACK_IMPORTED_MODULE_6__/* .isInstanceOf */ .V9)(fetchArgs[0], Request) && fetchArgs[0].method) {\n return String(fetchArgs[0].method).toUpperCase();\n }\n\n if (fetchArgs[1] && fetchArgs[1].method) {\n return String(fetchArgs[1].method).toUpperCase();\n }\n\n return 'GET';\n}\n/** Extract `url` from fetch call arguments */\n\n\nfunction getFetchUrl(fetchArgs) {\n if (fetchArgs === void 0) {\n fetchArgs = [];\n }\n\n if (typeof fetchArgs[0] === 'string') {\n return fetchArgs[0];\n }\n\n if ('Request' in global && (0,_is__WEBPACK_IMPORTED_MODULE_6__/* .isInstanceOf */ .V9)(fetchArgs[0], Request)) {\n return fetchArgs[0].url;\n }\n\n return String(fetchArgs[0]);\n}\n/* eslint-enable @typescript-eslint/no-unsafe-member-access */\n\n/** JSDoc */\n\n\nfunction instrumentXHR() {\n if (!('XMLHttpRequest' in global)) {\n return;\n } // Poor man's implementation of ES6 `Map`, tracking and keeping in sync key and value separately.\n\n\n var requestKeys = [];\n var requestValues = [];\n var xhrproto = XMLHttpRequest.prototype;\n (0,_object__WEBPACK_IMPORTED_MODULE_4__/* .fill */ .hl)(xhrproto, 'open', function (originalOpen) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n } // eslint-disable-next-line @typescript-eslint/no-this-alias\n\n\n var xhr = this;\n var url = args[1];\n xhr.__sentry_xhr__ = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n method: (0,_is__WEBPACK_IMPORTED_MODULE_6__/* .isString */ .HD)(args[0]) ? args[0].toUpperCase() : args[0],\n url: args[1]\n }; // if Sentry key appears in URL, don't capture it as a request\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\n if ((0,_is__WEBPACK_IMPORTED_MODULE_6__/* .isString */ .HD)(url) && xhr.__sentry_xhr__.method === 'POST' && url.match(/sentry_key/)) {\n xhr.__sentry_own_request__ = true;\n }\n\n var onreadystatechangeHandler = function onreadystatechangeHandler() {\n if (xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n if (xhr.__sentry_xhr__) {\n xhr.__sentry_xhr__.status_code = xhr.status;\n }\n } catch (e) {\n /* do nothing */\n }\n\n try {\n var requestPos = requestKeys.indexOf(xhr);\n\n if (requestPos !== -1) {\n // Make sure to pop both key and value to keep it in sync.\n requestKeys.splice(requestPos);\n var args_1 = requestValues.splice(requestPos)[0];\n\n if (xhr.__sentry_xhr__ && args_1[0] !== undefined) {\n xhr.__sentry_xhr__.body = args_1[0];\n }\n }\n } catch (e) {\n /* do nothing */\n }\n\n triggerHandlers('xhr', {\n args: args,\n endTimestamp: Date.now(),\n startTimestamp: Date.now(),\n xhr: xhr\n });\n }\n };\n\n if ('onreadystatechange' in xhr && typeof xhr.onreadystatechange === 'function') {\n (0,_object__WEBPACK_IMPORTED_MODULE_4__/* .fill */ .hl)(xhr, 'onreadystatechange', function (original) {\n return function () {\n var readyStateArgs = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n readyStateArgs[_i] = arguments[_i];\n }\n\n onreadystatechangeHandler();\n return original.apply(xhr, readyStateArgs);\n };\n });\n } else {\n xhr.addEventListener('readystatechange', onreadystatechangeHandler);\n }\n\n return originalOpen.apply(xhr, args);\n };\n });\n (0,_object__WEBPACK_IMPORTED_MODULE_4__/* .fill */ .hl)(xhrproto, 'send', function (originalSend) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n requestKeys.push(this);\n requestValues.push(args);\n triggerHandlers('xhr', {\n args: args,\n startTimestamp: Date.now(),\n xhr: this\n });\n return originalSend.apply(this, args);\n };\n });\n}\n\nvar lastHref;\n/** JSDoc */\n\nfunction instrumentHistory() {\n if (!(0,_supports__WEBPACK_IMPORTED_MODULE_5__/* .supportsHistory */ .Bf)()) {\n return;\n }\n\n var oldOnPopState = global.onpopstate;\n\n global.onpopstate = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var to = global.location.href; // keep track of the current URL state, as we always receive only the updated state\n\n var from = lastHref;\n lastHref = to;\n triggerHandlers('history', {\n from: from,\n to: to\n });\n\n if (oldOnPopState) {\n // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n // https://github.com/getsentry/sentry-javascript/issues/3344\n // https://github.com/bugsnag/bugsnag-js/issues/469\n try {\n return oldOnPopState.apply(this, args);\n } catch (_oO) {// no-empty\n }\n }\n };\n /** @hidden */\n\n\n function historyReplacementFunction(originalHistoryFunction) {\n return function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var url = args.length > 2 ? args[2] : undefined;\n\n if (url) {\n // coerce to string (this is what pushState does)\n var from = lastHref;\n var to = String(url); // keep track of the current URL state, as we always receive only the updated state\n\n lastHref = to;\n triggerHandlers('history', {\n from: from,\n to: to\n });\n }\n\n return originalHistoryFunction.apply(this, args);\n };\n }\n\n (0,_object__WEBPACK_IMPORTED_MODULE_4__/* .fill */ .hl)(global.history, 'pushState', historyReplacementFunction);\n (0,_object__WEBPACK_IMPORTED_MODULE_4__/* .fill */ .hl)(global.history, 'replaceState', historyReplacementFunction);\n}\n\nvar debounceDuration = 1000;\nvar debounceTimerID;\nvar lastCapturedEvent;\n/**\n * Decide whether the current event should finish the debounce of previously captured one.\n * @param previous previously captured event\n * @param current event to be captured\n */\n\nfunction shouldShortcircuitPreviousDebounce(previous, current) {\n // If there was no previous event, it should always be swapped for the new one.\n if (!previous) {\n return true;\n } // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n\n\n if (previous.type !== current.type) {\n return true;\n }\n\n try {\n // If both events have the same type, it's still possible that actions were performed on different targets.\n // e.g. 2 clicks on different buttons.\n if (previous.target !== current.target) {\n return true;\n }\n } catch (e) {// just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n } // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n // to which an event listener was attached), we treat them as the same action, as we want to capture\n // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n\n\n return false;\n}\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\n\n\nfunction shouldSkipDOMEvent(event) {\n // We are only interested in filtering `keypress` events for now.\n if (event.type !== 'keypress') {\n return false;\n }\n\n try {\n var target = event.target;\n\n if (!target || !target.tagName) {\n return true;\n } // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n // e.g.tabbing through elements, hotkeys, etc.\n\n\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return false;\n }\n } catch (e) {// just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n\n return true;\n}\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param handler function that will be triggered\n * @param globalListener indicates whether event was captured by the global event listener\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\n\n\nfunction makeDOMEventHandler(handler, globalListener) {\n if (globalListener === void 0) {\n globalListener = false;\n }\n\n return function (event) {\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors).\n // Ignore if we've already captured that event.\n if (!event || lastCapturedEvent === event) {\n return;\n } // We always want to skip _some_ events.\n\n\n if (shouldSkipDOMEvent(event)) {\n return;\n }\n\n var name = event.type === 'keypress' ? 'input' : event.type; // If there is no debounce timer, it means that we can safely capture the new event and store it for future comparisons.\n\n if (debounceTimerID === undefined) {\n handler({\n event: event,\n name: name,\n global: globalListener\n });\n lastCapturedEvent = event;\n } // If there is a debounce awaiting, see if the new event is different enough to treat it as a unique one.\n // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n else if (shouldShortcircuitPreviousDebounce(lastCapturedEvent, event)) {\n handler({\n event: event,\n name: name,\n global: globalListener\n });\n lastCapturedEvent = event;\n } // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n\n\n clearTimeout(debounceTimerID);\n debounceTimerID = global.setTimeout(function () {\n debounceTimerID = undefined;\n }, debounceDuration);\n };\n}\n/** JSDoc */\n\n\nfunction instrumentDOM() {\n if (!('document' in global)) {\n return;\n } // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n\n\n var triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n var globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n global.document.addEventListener('click', globalDOMEventHandler, false);\n global.document.addEventListener('keypress', globalDOMEventHandler, false); // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n // guaranteed to fire at least once.)\n\n ['EventTarget', 'Node'].forEach(function (target) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n var proto = global[target] && global[target].prototype; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n (0,_object__WEBPACK_IMPORTED_MODULE_4__/* .fill */ .hl)(proto, 'addEventListener', function (originalAddEventListener) {\n return function (type, listener, options) {\n if (type === 'click' || type == 'keypress') {\n try {\n var el = this;\n var handlers_1 = el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {};\n var handlerForType = handlers_1[type] = handlers_1[type] || {\n refCount: 0\n };\n\n if (!handlerForType.handler) {\n var handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n\n handlerForType.refCount += 1;\n } catch (e) {// Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n (0,_object__WEBPACK_IMPORTED_MODULE_4__/* .fill */ .hl)(proto, 'removeEventListener', function (originalRemoveEventListener) {\n return function (type, listener, options) {\n if (type === 'click' || type == 'keypress') {\n try {\n var el = this;\n var handlers_2 = el.__sentry_instrumentation_handlers__ || {};\n var handlerForType = handlers_2[type];\n\n if (handlerForType) {\n handlerForType.refCount -= 1; // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n\n if (handlerForType.refCount <= 0) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n handlerForType.handler = undefined;\n delete handlers_2[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n } // If there are no longer any custom handlers of any type on this element, cleanup everything.\n\n\n if (Object.keys(handlers_2).length === 0) {\n delete el.__sentry_instrumentation_handlers__;\n }\n }\n } catch (e) {// Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n });\n });\n}\n\nvar _oldOnErrorHandler = null;\n/** JSDoc */\n\nfunction instrumentError() {\n _oldOnErrorHandler = global.onerror;\n\n global.onerror = function (msg, url, line, column, error) {\n triggerHandlers('error', {\n column: column,\n error: error,\n line: line,\n msg: msg,\n url: url\n });\n\n if (_oldOnErrorHandler) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n}\n\nvar _oldOnUnhandledRejectionHandler = null;\n/** JSDoc */\n\nfunction instrumentUnhandledRejection() {\n _oldOnUnhandledRejectionHandler = global.onunhandledrejection;\n\n global.onunhandledrejection = function (e) {\n triggerHandlers('unhandledrejection', e);\n\n if (_oldOnUnhandledRejectionHandler) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9pbnN0cnVtZW50LmpzP2I1NzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUEyQztBQUNHO0FBQ1o7QUFDTztBQUNUO0FBQ2U7QUFDbUI7QUFDbEUsYUFBYSxnRUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLDhEQUFXO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLHlEQUFRLHVDQUF1QyxVQUFVO0FBQzNFOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsUUFBUSxnRUFBWSxpRkFBaUYscUVBQWU7QUFDcEg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLHVEQUFJO0FBQ1I7QUFDQTs7QUFFQSx3QkFBd0IsdUJBQXVCO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUyxFQUFFOztBQUVYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNB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O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwiZmlsZSI6IjY3MTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBfX2Fzc2lnbiwgX192YWx1ZXMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGlzSW5zdGFuY2VPZiwgaXNTdHJpbmcgfSBmcm9tICcuL2lzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJy4vbWlzYyc7XG5pbXBvcnQgeyBmaWxsIH0gZnJvbSAnLi9vYmplY3QnO1xuaW1wb3J0IHsgZ2V0RnVuY3Rpb25OYW1lIH0gZnJvbSAnLi9zdGFja3RyYWNlJztcbmltcG9ydCB7IHN1cHBvcnRzSGlzdG9yeSwgc3VwcG9ydHNOYXRpdmVGZXRjaCB9IGZyb20gJy4vc3VwcG9ydHMnO1xudmFyIGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpO1xuLyoqXG4gKiBJbnN0cnVtZW50IG5hdGl2ZSBBUElzIHRvIGNhbGwgaGFuZGxlcnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYnJlYWRjcnVtYnMsIEFQTSBzcGFucyBldGMuXG4gKiAgLSBDb25zb2xlIEFQSVxuICogIC0gRmV0Y2ggQVBJXG4gKiAgLSBYSFIgQVBJXG4gKiAgLSBIaXN0b3J5IEFQSVxuICogIC0gRE9NIEFQSSAoY2xpY2svdHlwaW5nKVxuICogIC0gRXJyb3IgQVBJXG4gKiAgLSBVbmhhbmRsZWRSZWplY3Rpb24gQVBJXG4gKi9cblxudmFyIGhhbmRsZXJzID0ge307XG52YXIgaW5zdHJ1bWVudGVkID0ge307XG4vKiogSW5zdHJ1bWVudHMgZ2l2ZW4gQVBJICovXG5cbmZ1bmN0aW9uIGluc3RydW1lbnQodHlwZSkge1xuICBpZiAoaW5zdHJ1bWVudGVkW3R5cGVdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaW5zdHJ1bWVudGVkW3R5cGVdID0gdHJ1ZTtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdjb25zb2xlJzpcbiAgICAgIGluc3RydW1lbnRDb25zb2xlKCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RvbSc6XG4gICAgICBpbnN0cnVtZW50RE9NKCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3hocic6XG4gICAgICBpbnN0cnVtZW50WEhSKCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZldGNoJzpcbiAgICAgIGluc3RydW1lbnRGZXRjaCgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdoaXN0b3J5JzpcbiAgICAgIGluc3RydW1lbnRIaXN0b3J5KCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIGluc3RydW1lbnRFcnJvcigpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd1bmhhbmRsZWRyZWplY3Rpb24nOlxuICAgICAgaW5zdHJ1bWVudFVuaGFuZGxlZFJlamVjdGlvbigpO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgbG9nZ2VyLndhcm4oJ3Vua25vd24gaW5zdHJ1bWVudGF0aW9uIHR5cGU6JywgdHlwZSk7XG4gIH1cbn1cbi8qKlxuICogQWRkIGhhbmRsZXIgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGdpdmVuIHR5cGUgb2YgaW5zdHJ1bWVudGF0aW9uIHRyaWdnZXJzLlxuICogVXNlIGF0IHlvdXIgb3duIHJpc2ssIHRoaXMgbWlnaHQgYnJlYWsgd2l0aG91dCBjaGFuZ2Vsb2cgbm90aWNlLCBvbmx5IHVzZWQgaW50ZXJuYWxseS5cbiAqIEBoaWRkZW5cbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZXIpIHtcbiAgaWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyLnR5cGUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBoYW5kbGVyLmNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaGFuZGxlcnNbaGFuZGxlci50eXBlXSA9IGhhbmRsZXJzW2hhbmRsZXIudHlwZV0gfHwgW107XG4gIGhhbmRsZXJzW2hhbmRsZXIudHlwZV0ucHVzaChoYW5kbGVyLmNhbGxiYWNrKTtcbiAgaW5zdHJ1bWVudChoYW5kbGVyLnR5cGUpO1xufVxuLyoqIEpTRG9jICovXG5cbmZ1bmN0aW9uIHRyaWdnZXJIYW5kbGVycyh0eXBlLCBkYXRhKSB7XG4gIHZhciBlXzEsIF9hO1xuXG4gIGlmICghdHlwZSB8fCAhaGFuZGxlcnNbdHlwZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoaGFuZGxlcnNbdHlwZV0gfHwgW10pLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IF9jLnZhbHVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciB3aGlsZSB0cmlnZ2VyaW5nIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyLlxcblR5cGU6IFwiICsgdHlwZSArIFwiXFxuTmFtZTogXCIgKyBnZXRGdW5jdGlvbk5hbWUoaGFuZGxlcikgKyBcIlxcbkVycm9yOiBcIiArIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZV8xXzEpIHtcbiAgICBlXzEgPSB7XG4gICAgICBlcnJvcjogZV8xXzFcbiAgICB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjtcbiAgICB9XG4gIH1cbn1cbi8qKiBKU0RvYyAqL1xuXG5cbmZ1bmN0aW9uIGluc3RydW1lbnRDb25zb2xlKCkge1xuICBpZiAoISgnY29uc29sZScgaW4gZ2xvYmFsKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIFsnZGVidWcnLCAnaW5mbycsICd3YXJuJywgJ2Vycm9yJywgJ2xvZycsICdhc3NlcnQnXS5mb3JFYWNoKGZ1bmN0aW9uIChsZXZlbCkge1xuICAgIGlmICghKGxldmVsIGluIGdsb2JhbC5jb25zb2xlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZpbGwoZ2xvYmFsLmNvbnNvbGUsIGxldmVsLCBmdW5jdGlvbiAob3JpZ2luYWxDb25zb2xlTGV2ZWwpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cblxuICAgICAgICB0cmlnZ2VySGFuZGxlcnMoJ2NvbnNvbGUnLCB7XG4gICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICBsZXZlbDogbGV2ZWxcbiAgICAgICAgfSk7IC8vIHRoaXMgZmFpbHMgZm9yIHNvbWUgYnJvd3NlcnMuIDooXG5cbiAgICAgICAgaWYgKG9yaWdpbmFsQ29uc29sZUxldmVsKSB7XG4gICAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwob3JpZ2luYWxDb25zb2xlTGV2ZWwsIGdsb2JhbC5jb25zb2xlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG59XG4vKiogSlNEb2MgKi9cblxuXG5mdW5jdGlvbiBpbnN0cnVtZW50RmV0Y2goKSB7XG4gIGlmICghc3VwcG9ydHNOYXRpdmVGZXRjaCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZmlsbChnbG9iYWwsICdmZXRjaCcsIGZ1bmN0aW9uIChvcmlnaW5hbEZldGNoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGhhbmRsZXJEYXRhID0ge1xuICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICBmZXRjaERhdGE6IHtcbiAgICAgICAgICBtZXRob2Q6IGdldEZldGNoTWV0aG9kKGFyZ3MpLFxuICAgICAgICAgIHVybDogZ2V0RmV0Y2hVcmwoYXJncylcbiAgICAgICAgfSxcbiAgICAgICAgc3RhcnRUaW1lc3RhbXA6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgICB0cmlnZ2VySGFuZGxlcnMoJ2ZldGNoJywgX19hc3NpZ24oe30sIGhhbmRsZXJEYXRhKSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcblxuICAgICAgcmV0dXJuIG9yaWdpbmFsRmV0Y2guYXBwbHkoZ2xvYmFsLCBhcmdzKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICB0cmlnZ2VySGFuZGxlcnMoJ2ZldGNoJywgX19hc3NpZ24oX19hc3NpZ24oe30sIGhhbmRsZXJEYXRhKSwge1xuICAgICAgICAgIGVuZFRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2VcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgdHJpZ2dlckhhbmRsZXJzKCdmZXRjaCcsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBoYW5kbGVyRGF0YSksIHtcbiAgICAgICAgICBlbmRUaW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgIH0pKTsgLy8gTk9URTogSWYgeW91IGFyZSBhIFNlbnRyeSB1c2VyLCBhbmQgeW91IGFyZSBzZWVpbmcgdGhpcyBzdGFjayBmcmFtZSxcbiAgICAgICAgLy8gICAgICAgaXQgbWVhbnMgdGhlIHNlbnRyeS5qYXZhc2NyaXB0IFNESyBjYXVnaHQgYW4gZXJyb3IgaW52b2tpbmcgeW91ciBhcHBsaWNhdGlvbiBjb2RlLlxuICAgICAgICAvLyAgICAgICBUaGlzIGlzIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBOT1QgaW5kaWNhdGl2ZSBvZiBhIGJ1ZyB3aXRoIHNlbnRyeS5qYXZhc2NyaXB0LlxuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfSk7XG59XG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cblxuLyoqIEV4dHJhY3QgYG1ldGhvZGAgZnJvbSBmZXRjaCBjYWxsIGFyZ3VtZW50cyAqL1xuXG5cbmZ1bmN0aW9uIGdldEZldGNoTWV0aG9kKGZldGNoQXJncykge1xuICBpZiAoZmV0Y2hBcmdzID09PSB2b2lkIDApIHtcbiAgICBmZXRjaEFyZ3MgPSBbXTtcbiAgfVxuXG4gIGlmICgnUmVxdWVzdCcgaW4gZ2xvYmFsICYmIGlzSW5zdGFuY2VPZihmZXRjaEFyZ3NbMF0sIFJlcXVlc3QpICYmIGZldGNoQXJnc1swXS5tZXRob2QpIHtcbiAgICByZXR1cm4gU3RyaW5nKGZldGNoQXJnc1swXS5tZXRob2QpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBpZiAoZmV0Y2hBcmdzWzFdICYmIGZldGNoQXJnc1sxXS5tZXRob2QpIHtcbiAgICByZXR1cm4gU3RyaW5nKGZldGNoQXJnc1sxXS5tZXRob2QpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICByZXR1cm4gJ0dFVCc7XG59XG4vKiogRXh0cmFjdCBgdXJsYCBmcm9tIGZldGNoIGNhbGwgYXJndW1lbnRzICovXG5cblxuZnVuY3Rpb24gZ2V0RmV0Y2hVcmwoZmV0Y2hBcmdzKSB7XG4gIGlmIChmZXRjaEFyZ3MgPT09IHZvaWQgMCkge1xuICAgIGZldGNoQXJncyA9IFtdO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmZXRjaEFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZldGNoQXJnc1swXTtcbiAgfVxuXG4gIGlmICgnUmVxdWVzdCcgaW4gZ2xvYmFsICYmIGlzSW5zdGFuY2VPZihmZXRjaEFyZ3NbMF0sIFJlcXVlc3QpKSB7XG4gICAgcmV0dXJuIGZldGNoQXJnc1swXS51cmw7XG4gIH1cblxuICByZXR1cm4gU3RyaW5nKGZldGNoQXJnc1swXSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuXG4vKiogSlNEb2MgKi9cblxuXG5mdW5jdGlvbiBpbnN0cnVtZW50WEhSKCkge1xuICBpZiAoISgnWE1MSHR0cFJlcXVlc3QnIGluIGdsb2JhbCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gUG9vciBtYW4ncyBpbXBsZW1lbnRhdGlvbiBvZiBFUzYgYE1hcGAsIHRyYWNraW5nIGFuZCBrZWVwaW5nIGluIHN5bmMga2V5IGFuZCB2YWx1ZSBzZXBhcmF0ZWx5LlxuXG5cbiAgdmFyIHJlcXVlc3RLZXlzID0gW107XG4gIHZhciByZXF1ZXN0VmFsdWVzID0gW107XG4gIHZhciB4aHJwcm90byA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZTtcbiAgZmlsbCh4aHJwcm90bywgJ29wZW4nLCBmdW5jdGlvbiAob3JpZ2luYWxPcGVuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cblxuICAgICAgdmFyIHhociA9IHRoaXM7XG4gICAgICB2YXIgdXJsID0gYXJnc1sxXTtcbiAgICAgIHhoci5fX3NlbnRyeV94aHJfXyA9IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBtZXRob2Q6IGlzU3RyaW5nKGFyZ3NbMF0pID8gYXJnc1swXS50b1VwcGVyQ2FzZSgpIDogYXJnc1swXSxcbiAgICAgICAgdXJsOiBhcmdzWzFdXG4gICAgICB9OyAvLyBpZiBTZW50cnkga2V5IGFwcGVhcnMgaW4gVVJMLCBkb24ndCBjYXB0dXJlIGl0IGFzIGEgcmVxdWVzdFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuXG4gICAgICBpZiAoaXNTdHJpbmcodXJsKSAmJiB4aHIuX19zZW50cnlfeGhyX18ubWV0aG9kID09PSAnUE9TVCcgJiYgdXJsLm1hdGNoKC9zZW50cnlfa2V5LykpIHtcbiAgICAgICAgeGhyLl9fc2VudHJ5X293bl9yZXF1ZXN0X18gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgb25yZWFkeXN0YXRlY2hhbmdlSGFuZGxlciA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZUhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyB0b3VjaGluZyBzdGF0dXNDb2RlIGluIHNvbWUgcGxhdGZvcm1zIHRocm93c1xuICAgICAgICAgICAgLy8gYW4gZXhjZXB0aW9uXG4gICAgICAgICAgICBpZiAoeGhyLl9fc2VudHJ5X3hocl9fKSB7XG4gICAgICAgICAgICAgIHhoci5fX3NlbnRyeV94aHJfXy5zdGF0dXNfY29kZSA9IHhoci5zdGF0dXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLyogZG8gbm90aGluZyAqL1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdFBvcyA9IHJlcXVlc3RLZXlzLmluZGV4T2YoeGhyKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RQb3MgIT09IC0xKSB7XG4gICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBwb3AgYm90aCBrZXkgYW5kIHZhbHVlIHRvIGtlZXAgaXQgaW4gc3luYy5cbiAgICAgICAgICAgICAgcmVxdWVzdEtleXMuc3BsaWNlKHJlcXVlc3RQb3MpO1xuICAgICAgICAgICAgICB2YXIgYXJnc18xID0gcmVxdWVzdFZhbHVlcy5zcGxpY2UocmVxdWVzdFBvcylbMF07XG5cbiAgICAgICAgICAgICAgaWYgKHhoci5fX3NlbnRyeV94aHJfXyAmJiBhcmdzXzFbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHhoci5fX3NlbnRyeV94aHJfXy5ib2R5ID0gYXJnc18xWzBdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLyogZG8gbm90aGluZyAqL1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyaWdnZXJIYW5kbGVycygneGhyJywge1xuICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgIGVuZFRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHN0YXJ0VGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgeGhyOiB4aHJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKCdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIHhociAmJiB0eXBlb2YgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmaWxsKHhociwgJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVhZHlTdGF0ZUFyZ3MgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgcmVhZHlTdGF0ZUFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb25yZWFkeXN0YXRlY2hhbmdlSGFuZGxlcigpO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHhociwgcmVhZHlTdGF0ZUFyZ3MpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBvbnJlYWR5c3RhdGVjaGFuZ2VIYW5kbGVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yaWdpbmFsT3Blbi5hcHBseSh4aHIsIGFyZ3MpO1xuICAgIH07XG4gIH0pO1xuICBmaWxsKHhocnByb3RvLCAnc2VuZCcsIGZ1bmN0aW9uIChvcmlnaW5hbFNlbmQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgfVxuXG4gICAgICByZXF1ZXN0S2V5cy5wdXNoKHRoaXMpO1xuICAgICAgcmVxdWVzdFZhbHVlcy5wdXNoKGFyZ3MpO1xuICAgICAgdHJpZ2dlckhhbmRsZXJzKCd4aHInLCB7XG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIHN0YXJ0VGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICB4aHI6IHRoaXNcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9yaWdpbmFsU2VuZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9KTtcbn1cblxudmFyIGxhc3RIcmVmO1xuLyoqIEpTRG9jICovXG5cbmZ1bmN0aW9uIGluc3RydW1lbnRIaXN0b3J5KCkge1xuICBpZiAoIXN1cHBvcnRzSGlzdG9yeSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG9sZE9uUG9wU3RhdGUgPSBnbG9iYWwub25wb3BzdGF0ZTtcblxuICBnbG9iYWwub25wb3BzdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG5cbiAgICB2YXIgdG8gPSBnbG9iYWwubG9jYXRpb24uaHJlZjsgLy8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBVUkwgc3RhdGUsIGFzIHdlIGFsd2F5cyByZWNlaXZlIG9ubHkgdGhlIHVwZGF0ZWQgc3RhdGVcblxuICAgIHZhciBmcm9tID0gbGFzdEhyZWY7XG4gICAgbGFzdEhyZWYgPSB0bztcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ2hpc3RvcnknLCB7XG4gICAgICBmcm9tOiBmcm9tLFxuICAgICAgdG86IHRvXG4gICAgfSk7XG5cbiAgICBpZiAob2xkT25Qb3BTdGF0ZSkge1xuICAgICAgLy8gQXBwYXJlbnRseSB0aGlzIGNhbiB0aHJvdyBpbiBGaXJlZm94IHdoZW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50ZWQgcGx1Z2luIGlzIGluc3RhbGxlZC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzMzNDRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idWdzbmFnL2J1Z3NuYWctanMvaXNzdWVzLzQ2OVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9sZE9uUG9wU3RhdGUuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9IGNhdGNoIChfb08pIHsvLyBuby1lbXB0eVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLyoqIEBoaWRkZW4gKi9cblxuXG4gIGZ1bmN0aW9uIGhpc3RvcnlSZXBsYWNlbWVudEZ1bmN0aW9uKG9yaWdpbmFsSGlzdG9yeUZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHVybCA9IGFyZ3MubGVuZ3RoID4gMiA/IGFyZ3NbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgLy8gY29lcmNlIHRvIHN0cmluZyAodGhpcyBpcyB3aGF0IHB1c2hTdGF0ZSBkb2VzKVxuICAgICAgICB2YXIgZnJvbSA9IGxhc3RIcmVmO1xuICAgICAgICB2YXIgdG8gPSBTdHJpbmcodXJsKTsgLy8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBVUkwgc3RhdGUsIGFzIHdlIGFsd2F5cyByZWNlaXZlIG9ubHkgdGhlIHVwZGF0ZWQgc3RhdGVcblxuICAgICAgICBsYXN0SHJlZiA9IHRvO1xuICAgICAgICB0cmlnZ2VySGFuZGxlcnMoJ2hpc3RvcnknLCB7XG4gICAgICAgICAgZnJvbTogZnJvbSxcbiAgICAgICAgICB0bzogdG9cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbEhpc3RvcnlGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgZmlsbChnbG9iYWwuaGlzdG9yeSwgJ3B1c2hTdGF0ZScsIGhpc3RvcnlSZXBsYWNlbWVudEZ1bmN0aW9uKTtcbiAgZmlsbChnbG9iYWwuaGlzdG9yeSwgJ3JlcGxhY2VTdGF0ZScsIGhpc3RvcnlSZXBsYWNlbWVudEZ1bmN0aW9uKTtcbn1cblxudmFyIGRlYm91bmNlRHVyYXRpb24gPSAxMDAwO1xudmFyIGRlYm91bmNlVGltZXJJRDtcbnZhciBsYXN0Q2FwdHVyZWRFdmVudDtcbi8qKlxuICogRGVjaWRlIHdoZXRoZXIgdGhlIGN1cnJlbnQgZXZlbnQgc2hvdWxkIGZpbmlzaCB0aGUgZGVib3VuY2Ugb2YgcHJldmlvdXNseSBjYXB0dXJlZCBvbmUuXG4gKiBAcGFyYW0gcHJldmlvdXMgcHJldmlvdXNseSBjYXB0dXJlZCBldmVudFxuICogQHBhcmFtIGN1cnJlbnQgZXZlbnQgdG8gYmUgY2FwdHVyZWRcbiAqL1xuXG5mdW5jdGlvbiBzaG91bGRTaG9ydGNpcmN1aXRQcmV2aW91c0RlYm91bmNlKHByZXZpb3VzLCBjdXJyZW50KSB7XG4gIC8vIElmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBldmVudCwgaXQgc2hvdWxkIGFsd2F5cyBiZSBzd2FwcGVkIGZvciB0aGUgbmV3IG9uZS5cbiAgaWYgKCFwcmV2aW91cykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIElmIGJvdGggZXZlbnRzIGhhdmUgZGlmZmVyZW50IHR5cGUsIHRoZW4gdXNlciBkZWZpbml0ZWx5IHBlcmZvcm1lZCB0d28gc2VwYXJhdGUgYWN0aW9ucy4gZS5nLiBjbGljayArIGtleXByZXNzLlxuXG5cbiAgaWYgKHByZXZpb3VzLnR5cGUgIT09IGN1cnJlbnQudHlwZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBJZiBib3RoIGV2ZW50cyBoYXZlIHRoZSBzYW1lIHR5cGUsIGl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCBhY3Rpb25zIHdlcmUgcGVyZm9ybWVkIG9uIGRpZmZlcmVudCB0YXJnZXRzLlxuICAgIC8vIGUuZy4gMiBjbGlja3Mgb24gZGlmZmVyZW50IGJ1dHRvbnMuXG4gICAgaWYgKHByZXZpb3VzLnRhcmdldCAhPT0gY3VycmVudC50YXJnZXQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkgey8vIGp1c3QgYWNjZXNzaW5nIGB0YXJnZXRgIHByb3BlcnR5IGNhbiB0aHJvdyBhbiBleGNlcHRpb24gaW4gc29tZSByYXJlIGNpcmN1bXN0YW5jZXNcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzgzOFxuICB9IC8vIElmIGJvdGggZXZlbnRzIGhhdmUgdGhlIHNhbWUgdHlwZSBfYW5kXyBzYW1lIGB0YXJnZXRgIChhbiBlbGVtZW50IHdoaWNoIHRyaWdnZXJlZCBhbiBldmVudCwgX25vdCBuZWNlc3NhcmlseV9cbiAgLy8gdG8gd2hpY2ggYW4gZXZlbnQgbGlzdGVuZXIgd2FzIGF0dGFjaGVkKSwgd2UgdHJlYXQgdGhlbSBhcyB0aGUgc2FtZSBhY3Rpb24sIGFzIHdlIHdhbnQgdG8gY2FwdHVyZVxuICAvLyBvbmx5IG9uZSBicmVhZGNydW1iLiBlLmcuIG11bHRpcGxlIGNsaWNrcyBvbiB0aGUgc2FtZSBidXR0b24sIG9yIHR5cGluZyBpbnNpZGUgYSB1c2VyIGlucHV0IGJveC5cblxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogRGVjaWRlIHdoZXRoZXIgYW4gZXZlbnQgc2hvdWxkIGJlIGNhcHR1cmVkLlxuICogQHBhcmFtIGV2ZW50IGV2ZW50IHRvIGJlIGNhcHR1cmVkXG4gKi9cblxuXG5mdW5jdGlvbiBzaG91bGRTa2lwRE9NRXZlbnQoZXZlbnQpIHtcbiAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBmaWx0ZXJpbmcgYGtleXByZXNzYCBldmVudHMgZm9yIG5vdy5cbiAgaWYgKGV2ZW50LnR5cGUgIT09ICdrZXlwcmVzcycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LnRhZ05hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gT25seSBjb25zaWRlciBrZXlwcmVzcyBldmVudHMgb24gYWN0dWFsIGlucHV0IGVsZW1lbnRzLiBUaGlzIHdpbGwgZGlzcmVnYXJkIGtleXByZXNzZXMgdGFyZ2V0aW5nIGJvZHlcbiAgICAvLyBlLmcudGFiYmluZyB0aHJvdWdoIGVsZW1lbnRzLCBob3RrZXlzLCBldGMuXG5cblxuICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YXJnZXQuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHsvLyBqdXN0IGFjY2Vzc2luZyBgdGFyZ2V0YCBwcm9wZXJ0eSBjYW4gdGhyb3cgYW4gZXhjZXB0aW9uIGluIHNvbWUgcmFyZSBjaXJjdW1zdGFuY2VzXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84MzhcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBXcmFwcyBhZGRFdmVudExpc3RlbmVyIHRvIGNhcHR1cmUgVUkgYnJlYWRjcnVtYnNcbiAqIEBwYXJhbSBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWRcbiAqIEBwYXJhbSBnbG9iYWxMaXN0ZW5lciBpbmRpY2F0ZXMgd2hldGhlciBldmVudCB3YXMgY2FwdHVyZWQgYnkgdGhlIGdsb2JhbCBldmVudCBsaXN0ZW5lclxuICogQHJldHVybnMgd3JhcHBlZCBicmVhZGNydW1iIGV2ZW50cyBoYW5kbGVyXG4gKiBAaGlkZGVuXG4gKi9cblxuXG5mdW5jdGlvbiBtYWtlRE9NRXZlbnRIYW5kbGVyKGhhbmRsZXIsIGdsb2JhbExpc3RlbmVyKSB7XG4gIGlmIChnbG9iYWxMaXN0ZW5lciA9PT0gdm9pZCAwKSB7XG4gICAgZ2xvYmFsTGlzdGVuZXIgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoaXMgaGFuZGxlciBtaWdodCB0cmlnZ2VyIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZVxuICAgIC8vIGV2ZW50IChlLmcuIGV2ZW50IHByb3BhZ2F0aW9uIHRocm91Z2ggbm9kZSBhbmNlc3RvcnMpLlxuICAgIC8vIElnbm9yZSBpZiB3ZSd2ZSBhbHJlYWR5IGNhcHR1cmVkIHRoYXQgZXZlbnQuXG4gICAgaWYgKCFldmVudCB8fCBsYXN0Q2FwdHVyZWRFdmVudCA9PT0gZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIGFsd2F5cyB3YW50IHRvIHNraXAgX3NvbWVfIGV2ZW50cy5cblxuXG4gICAgaWYgKHNob3VsZFNraXBET01FdmVudChldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9IGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycgPyAnaW5wdXQnIDogZXZlbnQudHlwZTsgLy8gSWYgdGhlcmUgaXMgbm8gZGVib3VuY2UgdGltZXIsIGl0IG1lYW5zIHRoYXQgd2UgY2FuIHNhZmVseSBjYXB0dXJlIHRoZSBuZXcgZXZlbnQgYW5kIHN0b3JlIGl0IGZvciBmdXR1cmUgY29tcGFyaXNvbnMuXG5cbiAgICBpZiAoZGVib3VuY2VUaW1lcklEID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhbmRsZXIoe1xuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIGdsb2JhbDogZ2xvYmFsTGlzdGVuZXJcbiAgICAgIH0pO1xuICAgICAgbGFzdENhcHR1cmVkRXZlbnQgPSBldmVudDtcbiAgICB9IC8vIElmIHRoZXJlIGlzIGEgZGVib3VuY2UgYXdhaXRpbmcsIHNlZSBpZiB0aGUgbmV3IGV2ZW50IGlzIGRpZmZlcmVudCBlbm91Z2ggdG8gdHJlYXQgaXQgYXMgYSB1bmlxdWUgb25lLlxuICAgIC8vIElmIHRoYXQncyB0aGUgY2FzZSwgZW1pdCB0aGUgcHJldmlvdXMgZXZlbnQgYW5kIHN0b3JlIGxvY2FsbHkgdGhlIG5ld2x5LWNhcHR1cmVkIERPTSBldmVudC5cbiAgICBlbHNlIGlmIChzaG91bGRTaG9ydGNpcmN1aXRQcmV2aW91c0RlYm91bmNlKGxhc3RDYXB0dXJlZEV2ZW50LCBldmVudCkpIHtcbiAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgZ2xvYmFsOiBnbG9iYWxMaXN0ZW5lclxuICAgICAgICB9KTtcbiAgICAgICAgbGFzdENhcHR1cmVkRXZlbnQgPSBldmVudDtcbiAgICAgIH0gLy8gU3RhcnQgYSBuZXcgZGVib3VuY2UgdGltZXIgdGhhdCB3aWxsIHByZXZlbnQgdXMgZnJvbSBjYXB0dXJpbmcgbXVsdGlwbGUgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGdyb3VwZWQgdG9nZXRoZXIuXG5cblxuICAgIGNsZWFyVGltZW91dChkZWJvdW5jZVRpbWVySUQpO1xuICAgIGRlYm91bmNlVGltZXJJRCA9IGdsb2JhbC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlYm91bmNlVGltZXJJRCA9IHVuZGVmaW5lZDtcbiAgICB9LCBkZWJvdW5jZUR1cmF0aW9uKTtcbiAgfTtcbn1cbi8qKiBKU0RvYyAqL1xuXG5cbmZ1bmN0aW9uIGluc3RydW1lbnRET00oKSB7XG4gIGlmICghKCdkb2N1bWVudCcgaW4gZ2xvYmFsKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBNYWtlIGl0IHNvIHRoYXQgYW55IGNsaWNrIG9yIGtleXByZXNzIHRoYXQgaXMgdW5oYW5kbGVkIC8gYnViYmxlZCB1cCBhbGwgdGhlIHdheSB0byB0aGUgZG9jdW1lbnQgdHJpZ2dlcnMgb3VyIGRvbVxuICAvLyBoYW5kbGVycy4gKE5vcm1hbGx5IHdlIGhhdmUgb25seSBvbmUsIHdoaWNoIGNhcHR1cmVzIGEgYnJlYWRjcnVtYiBmb3IgZWFjaCBjbGljayBvciBrZXlwcmVzcy4pIERvIHRoaXMgYmVmb3JlXG4gIC8vIHdlIGluc3RydW1lbnQgYGFkZEV2ZW50TGlzdGVuZXJgIHNvIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIGF0dGFjaGluZyB0aGlzIGhhbmRsZXIgdHdpY2UuXG5cblxuICB2YXIgdHJpZ2dlckRPTUhhbmRsZXIgPSB0cmlnZ2VySGFuZGxlcnMuYmluZChudWxsLCAnZG9tJyk7XG4gIHZhciBnbG9iYWxET01FdmVudEhhbmRsZXIgPSBtYWtlRE9NRXZlbnRIYW5kbGVyKHRyaWdnZXJET01IYW5kbGVyLCB0cnVlKTtcbiAgZ2xvYmFsLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZ2xvYmFsRE9NRXZlbnRIYW5kbGVyLCBmYWxzZSk7XG4gIGdsb2JhbC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIGdsb2JhbERPTUV2ZW50SGFuZGxlciwgZmFsc2UpOyAvLyBBZnRlciBob29raW5nIGludG8gY2xpY2sgYW5kIGtleXByZXNzIGV2ZW50cyBidWJibGVkIHVwIHRvIGBkb2N1bWVudGAsIHdlIGFsc28gaG9vayBpbnRvIHVzZXItaGFuZGxlZFxuICAvLyBjbGlja3MgJiBrZXlwcmVzc2VzLCBieSBhZGRpbmcgYW4gZXZlbnQgbGlzdGVuZXIgb2Ygb3VyIG93biB0byBhbnkgZWxlbWVudCB0byB3aGljaCB0aGV5IGFkZCBhIGxpc3RlbmVyLiBUaGF0XG4gIC8vIHdheSwgd2hlbmV2ZXIgb25lIG9mIHRoZWlyIGhhbmRsZXJzIGlzIHRyaWdnZXJlZCwgb3VycyB3aWxsIGJlLCB0b28uIChUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZWlyIGhhbmRsZXJcbiAgLy8gY291bGQgcG90ZW50aWFsbHkgcHJldmVudCB0aGUgZXZlbnQgZnJvbSBidWJibGluZyB1cCB0byBvdXIgZ2xvYmFsIGxpc3RlbmVycy4gVGhpcyB3YXksIG91ciBoYW5kbGVyIGFyZSBzdGlsbFxuICAvLyBndWFyYW50ZWVkIHRvIGZpcmUgYXQgbGVhc3Qgb25jZS4pXG5cbiAgWydFdmVudFRhcmdldCcsICdOb2RlJ10uZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIHZhciBwcm90byA9IGdsb2JhbFt0YXJnZXRdICYmIGdsb2JhbFt0YXJnZXRdLnByb3RvdHlwZTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzcywgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5cbiAgICBpZiAoIXByb3RvIHx8ICFwcm90by5oYXNPd25Qcm9wZXJ0eSB8fCAhcHJvdG8uaGFzT3duUHJvcGVydHkoJ2FkZEV2ZW50TGlzdGVuZXInKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZpbGwocHJvdG8sICdhZGRFdmVudExpc3RlbmVyJywgZnVuY3Rpb24gKG9yaWdpbmFsQWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2NsaWNrJyB8fCB0eXBlID09ICdrZXlwcmVzcycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcztcbiAgICAgICAgICAgIHZhciBoYW5kbGVyc18xID0gZWwuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX18gPSBlbC5fX3NlbnRyeV9pbnN0cnVtZW50YXRpb25faGFuZGxlcnNfXyB8fCB7fTtcbiAgICAgICAgICAgIHZhciBoYW5kbGVyRm9yVHlwZSA9IGhhbmRsZXJzXzFbdHlwZV0gPSBoYW5kbGVyc18xW3R5cGVdIHx8IHtcbiAgICAgICAgICAgICAgcmVmQ291bnQ6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICghaGFuZGxlckZvclR5cGUuaGFuZGxlcikge1xuICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IG1ha2VET01FdmVudEhhbmRsZXIodHJpZ2dlckRPTUhhbmRsZXIpO1xuICAgICAgICAgICAgICBoYW5kbGVyRm9yVHlwZS5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgb3JpZ2luYWxBZGRFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhhbmRsZXJGb3JUeXBlLnJlZkNvdW50ICs9IDE7XG4gICAgICAgICAgfSBjYXRjaCAoZSkgey8vIEFjY2Vzc2luZyBkb20gcHJvcGVydGllcyBpcyBhbHdheXMgZnJhZ2lsZS5cbiAgICAgICAgICAgIC8vIEFsc28gYWxsb3dzIHVzIHRvIHNraXAgYGFkZEV2ZW50TGlzdGVucnNgIGNhbGxzIHdpdGggbm8gcHJvcGVyIGB0aGlzYCBjb250ZXh0LlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnaW5hbEFkZEV2ZW50TGlzdGVuZXIuY2FsbCh0aGlzLCB0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIGZpbGwocHJvdG8sICdyZW1vdmVFdmVudExpc3RlbmVyJywgZnVuY3Rpb24gKG9yaWdpbmFsUmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2NsaWNrJyB8fCB0eXBlID09ICdrZXlwcmVzcycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcztcbiAgICAgICAgICAgIHZhciBoYW5kbGVyc18yID0gZWwuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX18gfHwge307XG4gICAgICAgICAgICB2YXIgaGFuZGxlckZvclR5cGUgPSBoYW5kbGVyc18yW3R5cGVdO1xuXG4gICAgICAgICAgICBpZiAoaGFuZGxlckZvclR5cGUpIHtcbiAgICAgICAgICAgICAgaGFuZGxlckZvclR5cGUucmVmQ291bnQgLT0gMTsgLy8gSWYgdGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgY3VzdG9tIGhhbmRsZXJzIG9mIHRoZSBjdXJyZW50IHR5cGUgb24gdGhpcyBlbGVtZW50LCB3ZSBjYW4gcmVtb3ZlIG91cnMsIHRvby5cblxuICAgICAgICAgICAgICBpZiAoaGFuZGxlckZvclR5cGUucmVmQ291bnQgPD0gMCkge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsUmVtb3ZlRXZlbnRMaXN0ZW5lci5jYWxsKHRoaXMsIHR5cGUsIGhhbmRsZXJGb3JUeXBlLmhhbmRsZXIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXJGb3JUeXBlLmhhbmRsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGhhbmRsZXJzXzJbdHlwZV07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgICAgICAgIH0gLy8gSWYgdGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgY3VzdG9tIGhhbmRsZXJzIG9mIGFueSB0eXBlIG9uIHRoaXMgZWxlbWVudCwgY2xlYW51cCBldmVyeXRoaW5nLlxuXG5cbiAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGhhbmRsZXJzXzIpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBlbC5fX3NlbnRyeV9pbnN0cnVtZW50YXRpb25faGFuZGxlcnNfXztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHsvLyBBY2Nlc3NpbmcgZG9tIHByb3BlcnRpZXMgaXMgYWx3YXlzIGZyYWdpbGUuXG4gICAgICAgICAgICAvLyBBbHNvIGFsbG93cyB1cyB0byBza2lwIGBhZGRFdmVudExpc3RlbnJzYCBjYWxscyB3aXRoIG5vIHByb3BlciBgdGhpc2AgY29udGV4dC5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW1vdmVFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbnZhciBfb2xkT25FcnJvckhhbmRsZXIgPSBudWxsO1xuLyoqIEpTRG9jICovXG5cbmZ1bmN0aW9uIGluc3RydW1lbnRFcnJvcigpIHtcbiAgX29sZE9uRXJyb3JIYW5kbGVyID0gZ2xvYmFsLm9uZXJyb3I7XG5cbiAgZ2xvYmFsLm9uZXJyb3IgPSBmdW5jdGlvbiAobXNnLCB1cmwsIGxpbmUsIGNvbHVtbiwgZXJyb3IpIHtcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ2Vycm9yJywge1xuICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgICBsaW5lOiBsaW5lLFxuICAgICAgbXNnOiBtc2csXG4gICAgICB1cmw6IHVybFxuICAgIH0pO1xuXG4gICAgaWYgKF9vbGRPbkVycm9ySGFuZGxlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgcmV0dXJuIF9vbGRPbkVycm9ySGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxudmFyIF9vbGRPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIgPSBudWxsO1xuLyoqIEpTRG9jICovXG5cbmZ1bmN0aW9uIGluc3RydW1lbnRVbmhhbmRsZWRSZWplY3Rpb24oKSB7XG4gIF9vbGRPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb247XG5cbiAgZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uID0gZnVuY3Rpb24gKGUpIHtcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ3VuaGFuZGxlZHJlamVjdGlvbicsIGUpO1xuXG4gICAgaWYgKF9vbGRPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgIHJldHVybiBfb2xkT25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6710\n")},2684:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"VZ\": function() { return /* binding */ isError; },\n/* harmony export */ \"VW\": function() { return /* binding */ isErrorEvent; },\n/* harmony export */ \"TX\": function() { return /* binding */ isDOMError; },\n/* harmony export */ \"fm\": function() { return /* binding */ isDOMException; },\n/* harmony export */ \"HD\": function() { return /* binding */ isString; },\n/* harmony export */ \"pt\": function() { return /* binding */ isPrimitive; },\n/* harmony export */ \"PO\": function() { return /* binding */ isPlainObject; },\n/* harmony export */ \"cO\": function() { return /* binding */ isEvent; },\n/* harmony export */ \"kK\": function() { return /* binding */ isElement; },\n/* harmony export */ \"Kj\": function() { return /* binding */ isRegExp; },\n/* harmony export */ \"J8\": function() { return /* binding */ isThenable; },\n/* harmony export */ \"Cy\": function() { return /* binding */ isSyntheticEvent; },\n/* harmony export */ \"V9\": function() { return /* binding */ isInstanceOf; }\n/* harmony export */ });\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n switch (Object.prototype.toString.call(wat)) {\n case '[object Error]':\n return true;\n\n case '[object Exception]':\n return true;\n\n case '[object DOMException]':\n return true;\n\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isErrorEvent(wat) {\n return Object.prototype.toString.call(wat) === '[object ErrorEvent]';\n}\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isDOMError(wat) {\n return Object.prototype.toString.call(wat) === '[object DOMError]';\n}\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isDOMException(wat) {\n return Object.prototype.toString.call(wat) === '[object DOMException]';\n}\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isString(wat) {\n return Object.prototype.toString.call(wat) === '[object String]';\n}\n/**\n * Checks whether given value's is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isPrimitive(wat) {\n return wat === null || typeof wat !== 'object' && typeof wat !== 'function';\n}\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isPlainObject(wat) {\n return Object.prototype.toString.call(wat) === '[object Object]';\n}\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isEvent(wat) {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isElement(wat) {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isRegExp(wat) {\n return Object.prototype.toString.call(wat) === '[object RegExp]';\n}\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\n\nfunction isThenable(wat) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\n\nfunction isSyntheticEvent(wat) {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\n\nfunction isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9pcy5qcz8zN2FmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLGNBQWM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxtQkFBbUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksaUJBQWlCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGtCQUFrQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksY0FBYztBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxnQkFBZ0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZUFBZTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHVCQUF1QjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxtQkFBbUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6IjI2ODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXMgKi9cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgb25lIG9mIGEgZmV3IEVycm9yIG9yIEVycm9yLWxpa2VcbiAqIHtAbGluayBpc0Vycm9yfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7XG4gIHN3aXRjaCAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdhdCkpIHtcbiAgICBjYXNlICdbb2JqZWN0IEVycm9yXSc6XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgJ1tvYmplY3QgRE9NRXhjZXB0aW9uXSc6XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gaXNJbnN0YW5jZU9mKHdhdCwgRXJyb3IpO1xuICB9XG59XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBFcnJvckV2ZW50XG4gKiB7QGxpbmsgaXNFcnJvckV2ZW50fS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvckV2ZW50KHdhdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdhdCkgPT09ICdbb2JqZWN0IEVycm9yRXZlbnRdJztcbn1cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIERPTUVycm9yXG4gKiB7QGxpbmsgaXNET01FcnJvcn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRE9NRXJyb3Iod2F0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgRE9NRXJyb3JdJztcbn1cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIERPTUV4Y2VwdGlvblxuICoge0BsaW5rIGlzRE9NRXhjZXB0aW9ufS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNET01FeGNlcHRpb24od2F0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgRE9NRXhjZXB0aW9uXSc7XG59XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZ1xuICoge0BsaW5rIGlzU3RyaW5nfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG59XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgaXMgYSBwcmltaXRpdmUgKHVuZGVmaW5lZCwgbnVsbCwgbnVtYmVyLCBib29sZWFuLCBzdHJpbmcsIGJpZ2ludCwgc3ltYm9sKVxuICoge0BsaW5rIGlzUHJpbWl0aXZlfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmUod2F0KSB7XG4gIHJldHVybiB3YXQgPT09IG51bGwgfHwgdHlwZW9mIHdhdCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHdhdCAhPT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB7QGxpbmsgaXNQbGFpbk9iamVjdH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qod2F0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBFdmVudCBpbnN0YW5jZVxuICoge0BsaW5rIGlzRXZlbnR9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V2ZW50KHdhdCkge1xuICByZXR1cm4gdHlwZW9mIEV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFdmVudCk7XG59XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBFbGVtZW50IGluc3RhbmNlXG4gKiB7QGxpbmsgaXNFbGVtZW50fS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50KHdhdCkge1xuICByZXR1cm4gdHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGlzSW5zdGFuY2VPZih3YXQsIEVsZW1lbnQpO1xufVxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYW4gcmVnZXhwXG4gKiB7QGxpbmsgaXNSZWdFeHB9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZ0V4cCh3YXQpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3YXQpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaGFzIGEgdGhlbiBmdW5jdGlvbi5cbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RoZW5hYmxlKHdhdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gIHJldHVybiBCb29sZWFuKHdhdCAmJiB3YXQudGhlbiAmJiB0eXBlb2Ygd2F0LnRoZW4gPT09ICdmdW5jdGlvbicpO1xufVxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudFxuICoge0BsaW5rIGlzU3ludGhldGljRXZlbnR9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh3YXQpICYmICduYXRpdmVFdmVudCcgaW4gd2F0ICYmICdwcmV2ZW50RGVmYXVsdCcgaW4gd2F0ICYmICdzdG9wUHJvcGFnYXRpb24nIGluIHdhdDtcbn1cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIGluc3RhbmNlIG9mIHByb3ZpZGVkIGNvbnN0cnVjdG9yLlxuICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkge1xuICB0cnkge1xuICAgIHJldHVybiB3YXQgaW5zdGFuY2VvZiBiYXNlO1xuICB9IGNhdGNoIChfZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2684\n")},245:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"k\": function() { return /* binding */ logger; }\n/* harmony export */ });\n/* harmony import */ var _misc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2861);\n/* eslint-disable @typescript-eslint/no-explicit-any */\n // TODO: Implement different loggers for different environments\n\nvar global = (0,_misc__WEBPACK_IMPORTED_MODULE_0__/* .getGlobalObject */ .Rf)();\n/** Prefix for logging strings */\n\nvar PREFIX = 'Sentry Logger ';\n/** JSDoc */\n\nvar Logger =\n/** @class */\nfunction () {\n /** JSDoc */\n function Logger() {\n this._enabled = false;\n }\n /** JSDoc */\n\n\n Logger.prototype.disable = function () {\n this._enabled = false;\n };\n /** JSDoc */\n\n\n Logger.prototype.enable = function () {\n this._enabled = true;\n };\n /** JSDoc */\n\n\n Logger.prototype.log = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n if (!this._enabled) {\n return;\n }\n\n (0,_misc__WEBPACK_IMPORTED_MODULE_0__/* .consoleSandbox */ .Cf)(function () {\n global.console.log(PREFIX + \"[Log]: \" + args.join(' '));\n });\n };\n /** JSDoc */\n\n\n Logger.prototype.warn = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n if (!this._enabled) {\n return;\n }\n\n (0,_misc__WEBPACK_IMPORTED_MODULE_0__/* .consoleSandbox */ .Cf)(function () {\n global.console.warn(PREFIX + \"[Warn]: \" + args.join(' '));\n });\n };\n /** JSDoc */\n\n\n Logger.prototype.error = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n if (!this._enabled) {\n return;\n }\n\n (0,_misc__WEBPACK_IMPORTED_MODULE_0__/* .consoleSandbox */ .Cf)(function () {\n global.console.error(PREFIX + \"[Error]: \" + args.join(' '));\n });\n };\n\n return Logger;\n}(); // Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\n\n\nglobal.__SENTRY__ = global.__SENTRY__ || {};\nvar logger = global.__SENTRY__.logger || (global.__SENTRY__.logger = new Logger());\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9sb2dnZXIuanM/MGQ5NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDeUQ7O0FBRXpELGFBQWEsZ0VBQWU7QUFDNUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLCtEQUFjO0FBQ2xCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLCtEQUFjO0FBQ2xCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLCtEQUFjO0FBQ2xCO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQyxHQUFHOzs7QUFHSjtBQUNBIiwiZmlsZSI6IjI0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IGNvbnNvbGVTYW5kYm94LCBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICcuL21pc2MnOyAvLyBUT0RPOiBJbXBsZW1lbnQgZGlmZmVyZW50IGxvZ2dlcnMgZm9yIGRpZmZlcmVudCBlbnZpcm9ubWVudHNcblxudmFyIGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpO1xuLyoqIFByZWZpeCBmb3IgbG9nZ2luZyBzdHJpbmdzICovXG5cbnZhciBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnO1xuLyoqIEpTRG9jICovXG5cbnZhciBMb2dnZXIgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICAvKiogSlNEb2MgKi9cbiAgZnVuY3Rpb24gTG9nZ2VyKCkge1xuICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgfVxuICAvKiogSlNEb2MgKi9cblxuXG4gIExvZ2dlci5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgTG9nZ2VyLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgTG9nZ2VyLnByb3RvdHlwZS5sb2cgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZVNhbmRib3goZnVuY3Rpb24gKCkge1xuICAgICAgZ2xvYmFsLmNvbnNvbGUubG9nKFBSRUZJWCArIFwiW0xvZ106IFwiICsgYXJncy5qb2luKCcgJykpO1xuICAgIH0pO1xuICB9O1xuICAvKiogSlNEb2MgKi9cblxuXG4gIExvZ2dlci5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlU2FuZGJveChmdW5jdGlvbiAoKSB7XG4gICAgICBnbG9iYWwuY29uc29sZS53YXJuKFBSRUZJWCArIFwiW1dhcm5dOiBcIiArIGFyZ3Muam9pbignICcpKTtcbiAgICB9KTtcbiAgfTtcbiAgLyoqIEpTRG9jICovXG5cblxuICBMb2dnZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGVTYW5kYm94KGZ1bmN0aW9uICgpIHtcbiAgICAgIGdsb2JhbC5jb25zb2xlLmVycm9yKFBSRUZJWCArIFwiW0Vycm9yXTogXCIgKyBhcmdzLmpvaW4oJyAnKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIExvZ2dlcjtcbn0oKTsgLy8gRW5zdXJlIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBsb2dnZXIgaW5zdGFuY2UsIGV2ZW4gaWYgbXVsdGlwbGUgdmVyc2lvbnMgb2YgQHNlbnRyeS91dGlscyBhcmUgYmVpbmcgdXNlZFxuXG5cbmdsb2JhbC5fX1NFTlRSWV9fID0gZ2xvYmFsLl9fU0VOVFJZX18gfHwge307XG52YXIgbG9nZ2VyID0gZ2xvYmFsLl9fU0VOVFJZX18ubG9nZ2VyIHx8IChnbG9iYWwuX19TRU5UUllfXy5sb2dnZXIgPSBuZXcgTG9nZ2VyKCkpO1xuZXhwb3J0IHsgbG9nZ2VyIH07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///245\n")},2861:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Rf\": function() { return /* binding */ getGlobalObject; },\n/* harmony export */ \"DM\": function() { return /* binding */ uuid4; },\n/* harmony export */ \"en\": function() { return /* binding */ parseUrl; },\n/* harmony export */ \"jH\": function() { return /* binding */ getEventDescription; },\n/* harmony export */ \"Cf\": function() { return /* binding */ consoleSandbox; },\n/* harmony export */ \"Db\": function() { return /* binding */ addExceptionTypeValue; },\n/* harmony export */ \"EG\": function() { return /* binding */ addExceptionMechanism; },\n/* harmony export */ \"l4\": function() { return /* binding */ getLocationHref; },\n/* harmony export */ \"J4\": function() { return /* binding */ parseSemver; },\n/* harmony export */ \"JY\": function() { return /* binding */ parseRetryAfterHeader; },\n/* harmony export */ \"rt\": function() { return /* binding */ stripUrlQueryAndFragment; }\n/* harmony export */ });\n/* unused harmony export addContextToFrame */\n/* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7864);\n\n\nvar fallbackGlobalObject = {};\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\n\nfunction getGlobalObject() {\n return (0,_node__WEBPACK_IMPORTED_MODULE_0__/* .isNodeEnv */ .KV)() ? __webpack_require__.g : typeof window !== 'undefined' // eslint-disable-line no-restricted-globals\n ? window // eslint-disable-line no-restricted-globals\n : typeof self !== 'undefined' ? self : fallbackGlobalObject;\n}\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\n\nfunction uuid4() {\n var global = getGlobalObject();\n var crypto = global.crypto || global.msCrypto;\n\n if (!(crypto === void 0) && crypto.getRandomValues) {\n // Use window.crypto API if available\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr); // set 4 in byte 7\n // eslint-disable-next-line no-bitwise\n\n arr[3] = arr[3] & 0xfff | 0x4000; // set 2 most significant bits of byte 9 to '10'\n // eslint-disable-next-line no-bitwise\n\n arr[4] = arr[4] & 0x3fff | 0x8000;\n\n var pad = function pad(num) {\n var v = num.toString(16);\n\n while (v.length < 4) {\n v = \"0\" + v;\n }\n\n return v;\n };\n\n return pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7]);\n } // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n\n\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n // eslint-disable-next-line no-bitwise\n var r = Math.random() * 16 | 0; // eslint-disable-next-line no-bitwise\n\n var v = c === 'x' ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n}\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\n\nfunction parseUrl(url) {\n if (!url) {\n return {};\n }\n\n var match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n if (!match) {\n return {};\n } // coerce to undefined values to empty string so we don't get 'undefined'\n\n\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n relative: match[5] + query + fragment\n };\n}\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\n\nfunction getEventDescription(event) {\n if (event.message) {\n return event.message;\n }\n\n if (event.exception && event.exception.values && event.exception.values[0]) {\n var exception = event.exception.values[0];\n\n if (exception.type && exception.value) {\n return exception.type + \": \" + exception.value;\n }\n\n return exception.type || exception.value || event.event_id || '<unknown>';\n }\n\n return event.event_id || '<unknown>';\n}\n/** JSDoc */\n\nfunction consoleSandbox(callback) {\n var global = getGlobalObject();\n var levels = ['debug', 'info', 'warn', 'error', 'log', 'assert'];\n\n if (!('console' in global)) {\n return callback();\n } // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\n\n var originalConsole = global.console;\n var wrappedLevels = {}; // Restore all wrapped console methods\n\n levels.forEach(function (level) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (level in global.console && originalConsole[level].__sentry_original__) {\n wrappedLevels[level] = originalConsole[level];\n originalConsole[level] = originalConsole[level].__sentry_original__;\n }\n }); // Perform callback manipulations\n\n var result = callback(); // Revert restoration to wrapped state\n\n Object.keys(wrappedLevels).forEach(function (level) {\n originalConsole[level] = wrappedLevels[level];\n });\n return result;\n}\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\n\nfunction addExceptionTypeValue(event, value, type) {\n event.exception = event.exception || {};\n event.exception.values = event.exception.values || [];\n event.exception.values[0] = event.exception.values[0] || {};\n event.exception.values[0].value = event.exception.values[0].value || value || '';\n event.exception.values[0].type = event.exception.values[0].type || type || 'Error';\n}\n/**\n * Adds exception mechanism to a given event.\n * @param event The event to modify.\n * @param mechanism Mechanism of the mechanism.\n * @hidden\n */\n\nfunction addExceptionMechanism(event, mechanism) {\n if (mechanism === void 0) {\n mechanism = {};\n } // TODO: Use real type with `keyof Mechanism` thingy and maybe make it better?\n\n\n try {\n // @ts-ignore Type 'Mechanism | {}' is not assignable to type 'Mechanism | undefined'\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values[0].mechanism = event.exception.values[0].mechanism || {};\n Object.keys(mechanism).forEach(function (key) {\n // @ts-ignore Mechanism has no index signature\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values[0].mechanism[key] = mechanism[key];\n });\n } catch (_oO) {// no-empty\n }\n}\n/**\n * A safe form of location.href\n */\n\nfunction getLocationHref() {\n var global = getGlobalObject();\n\n try {\n return global.document.location.href;\n } catch (oO) {\n return '';\n }\n} // https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\n\nvar SEMVER_REGEXP = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\n\nfunction parseSemver(input) {\n var match = input.match(SEMVER_REGEXP) || [];\n var major = parseInt(match[1], 10);\n var minor = parseInt(match[2], 10);\n var patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4]\n };\n}\nvar defaultRetryAfter = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param now current unix timestamp\n * @param header string representation of 'Retry-After' header\n */\n\nfunction parseRetryAfterHeader(now, header) {\n if (!header) {\n return defaultRetryAfter;\n }\n\n var headerDelay = parseInt(\"\" + header, 10);\n\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n var headerDate = Date.parse(\"\" + header);\n\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n\n return defaultRetryAfter;\n}\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\n\nfunction addContextToFrame(lines, frame, linesOfContext) {\n if (linesOfContext === void 0) {\n linesOfContext = 5;\n }\n\n var lineno = frame.lineno || 0;\n var maxLines = lines.length;\n var sourceLine = Math.max(Math.min(maxLines, lineno - 1), 0);\n frame.pre_context = lines.slice(Math.max(0, sourceLine - linesOfContext), sourceLine).map(function (line) {\n return snipLine(line, 0);\n });\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n frame.post_context = lines.slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext).map(function (line) {\n return snipLine(line, 0);\n });\n}\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\n\nfunction stripUrlQueryAndFragment(urlPath) {\n // eslint-disable-next-line no-useless-escape\n return urlPath.split(/[\\?#]/, 1)[0];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9taXNjLmpzP2Q5NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQW1DO0FBQ0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1AsU0FBUywwREFBUyxLQUFLLHFCQUFNO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQzs7QUFFQSxxQ0FBcUM7QUFDckM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFOztBQUVMLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUcsY0FBYztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBIiwiZmlsZSI6IjI4NjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGVFbnYgfSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IHsgc25pcExpbmUgfSBmcm9tICcuL3N0cmluZyc7XG52YXIgZmFsbGJhY2tHbG9iYWxPYmplY3QgPSB7fTtcbi8qKlxuICogU2FmZWx5IGdldCBnbG9iYWwgc2NvcGUgb2JqZWN0XG4gKlxuICogQHJldHVybnMgR2xvYmFsIHNjb3BlIG9iamVjdFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxPYmplY3QoKSB7XG4gIHJldHVybiBpc05vZGVFbnYoKSA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gID8gd2luZG93IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IGZhbGxiYWNrR2xvYmFsT2JqZWN0O1xufVxuLyoqXG4gKiBVVUlENCBnZW5lcmF0b3JcbiAqXG4gKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1dWlkNCgpIHtcbiAgdmFyIGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpO1xuICB2YXIgY3J5cHRvID0gZ2xvYmFsLmNyeXB0byB8fCBnbG9iYWwubXNDcnlwdG87XG5cbiAgaWYgKCEoY3J5cHRvID09PSB2b2lkIDApICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBVc2Ugd2luZG93LmNyeXB0byBBUEkgaWYgYXZhaWxhYmxlXG4gICAgdmFyIGFyciA9IG5ldyBVaW50MTZBcnJheSg4KTtcbiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7IC8vIHNldCA0IGluIGJ5dGUgN1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG5cbiAgICBhcnJbM10gPSBhcnJbM10gJiAweGZmZiB8IDB4NDAwMDsgLy8gc2V0IDIgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIGJ5dGUgOSB0byAnMTAnXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcblxuICAgIGFycls0XSA9IGFycls0XSAmIDB4M2ZmZiB8IDB4ODAwMDtcblxuICAgIHZhciBwYWQgPSBmdW5jdGlvbiBwYWQobnVtKSB7XG4gICAgICB2YXIgdiA9IG51bS50b1N0cmluZygxNik7XG5cbiAgICAgIHdoaWxlICh2Lmxlbmd0aCA8IDQpIHtcbiAgICAgICAgdiA9IFwiMFwiICsgdjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHY7XG4gICAgfTtcblxuICAgIHJldHVybiBwYWQoYXJyWzBdKSArIHBhZChhcnJbMV0pICsgcGFkKGFyclsyXSkgKyBwYWQoYXJyWzNdKSArIHBhZChhcnJbNF0pICsgcGFkKGFycls1XSkgKyBwYWQoYXJyWzZdKSArIHBhZChhcnJbN10pO1xuICB9IC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdC8yMTE3NTIzIzIxMTc1MjNcblxuXG4gIHJldHVybiAneHh4eHh4eHh4eHh4NHh4eHl4eHh4eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcblxuICAgIHZhciB2ID0gYyA9PT0gJ3gnID8gciA6IHIgJiAweDMgfCAweDg7XG4gICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICB9KTtcbn1cbi8qKlxuICogUGFyc2VzIHN0cmluZyBmb3JtIG9mIFVSTCBpbnRvIGFuIG9iamVjdFxuICogLy8gYm9ycm93ZWQgZnJvbSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNhcHBlbmRpeC1CXG4gKiAvLyBpbnRlbnRpb25hbGx5IHVzaW5nIHJlZ2V4IGFuZCBub3QgPGEvPiBocmVmIHBhcnNpbmcgdHJpY2sgYmVjYXVzZSBSZWFjdCBOYXRpdmUgYW5kIG90aGVyXG4gKiAvLyBlbnZpcm9ubWVudHMgd2hlcmUgRE9NIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGVcbiAqIEByZXR1cm5zIHBhcnNlZCBVUkwgb2JqZWN0XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXJsKHVybCkge1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHZhciBtYXRjaCA9IHVybC5tYXRjaCgvXigoW146Lz8jXSspOik/KFxcL1xcLyhbXi8/I10qKSk/KFtePyNdKikoXFw/KFteI10qKSk/KCMoLiopKT8kLyk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB7fTtcbiAgfSAvLyBjb2VyY2UgdG8gdW5kZWZpbmVkIHZhbHVlcyB0byBlbXB0eSBzdHJpbmcgc28gd2UgZG9uJ3QgZ2V0ICd1bmRlZmluZWQnXG5cblxuICB2YXIgcXVlcnkgPSBtYXRjaFs2XSB8fCAnJztcbiAgdmFyIGZyYWdtZW50ID0gbWF0Y2hbOF0gfHwgJyc7XG4gIHJldHVybiB7XG4gICAgaG9zdDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV0sXG4gICAgcHJvdG9jb2w6IG1hdGNoWzJdLFxuICAgIHJlbGF0aXZlOiBtYXRjaFs1XSArIHF1ZXJ5ICsgZnJhZ21lbnRcbiAgfTtcbn1cbi8qKlxuICogRXh0cmFjdHMgZWl0aGVyIG1lc3NhZ2Ugb3IgdHlwZSt2YWx1ZSBmcm9tIGFuIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHVzZXItZmFjaW5nIGxvZ3NcbiAqIEByZXR1cm5zIGV2ZW50J3MgZGVzY3JpcHRpb25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudCkge1xuICBpZiAoZXZlbnQubWVzc2FnZSkge1xuICAgIHJldHVybiBldmVudC5tZXNzYWdlO1xuICB9XG5cbiAgaWYgKGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0pIHtcbiAgICB2YXIgZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXTtcblxuICAgIGlmIChleGNlcHRpb24udHlwZSAmJiBleGNlcHRpb24udmFsdWUpIHtcbiAgICAgIHJldHVybiBleGNlcHRpb24udHlwZSArIFwiOiBcIiArIGV4Y2VwdGlvbi52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhjZXB0aW9uLnR5cGUgfHwgZXhjZXB0aW9uLnZhbHVlIHx8IGV2ZW50LmV2ZW50X2lkIHx8ICc8dW5rbm93bj4nO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50LmV2ZW50X2lkIHx8ICc8dW5rbm93bj4nO1xufVxuLyoqIEpTRG9jICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykge1xuICB2YXIgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0KCk7XG4gIHZhciBsZXZlbHMgPSBbJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdsb2cnLCAnYXNzZXJ0J107XG5cbiAgaWYgKCEoJ2NvbnNvbGUnIGluIGdsb2JhbCkpIHtcbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG5cblxuICB2YXIgb3JpZ2luYWxDb25zb2xlID0gZ2xvYmFsLmNvbnNvbGU7XG4gIHZhciB3cmFwcGVkTGV2ZWxzID0ge307IC8vIFJlc3RvcmUgYWxsIHdyYXBwZWQgY29uc29sZSBtZXRob2RzXG5cbiAgbGV2ZWxzLmZvckVhY2goZnVuY3Rpb24gKGxldmVsKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIGlmIChsZXZlbCBpbiBnbG9iYWwuY29uc29sZSAmJiBvcmlnaW5hbENvbnNvbGVbbGV2ZWxdLl9fc2VudHJ5X29yaWdpbmFsX18pIHtcbiAgICAgIHdyYXBwZWRMZXZlbHNbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlW2xldmVsXTtcbiAgICAgIG9yaWdpbmFsQ29uc29sZVtsZXZlbF0gPSBvcmlnaW5hbENvbnNvbGVbbGV2ZWxdLl9fc2VudHJ5X29yaWdpbmFsX187XG4gICAgfVxuICB9KTsgLy8gUGVyZm9ybSBjYWxsYmFjayBtYW5pcHVsYXRpb25zXG5cbiAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKCk7IC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlXG5cbiAgT2JqZWN0LmtleXMod3JhcHBlZExldmVscykuZm9yRWFjaChmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICBvcmlnaW5hbENvbnNvbGVbbGV2ZWxdID0gd3JhcHBlZExldmVsc1tsZXZlbF07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBBZGRzIGV4Y2VwdGlvbiB2YWx1ZXMsIHR5cGUgYW5kIHZhbHVlIHRvIGFuIHN5bnRoZXRpYyBFeGNlcHRpb24uXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgZXhjZXB0aW9uLlxuICogQHBhcmFtIHR5cGUgVHlwZSBvZiB0aGUgZXhjZXB0aW9uLlxuICogQGhpZGRlblxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRFeGNlcHRpb25UeXBlVmFsdWUoZXZlbnQsIHZhbHVlLCB0eXBlKSB7XG4gIGV2ZW50LmV4Y2VwdGlvbiA9IGV2ZW50LmV4Y2VwdGlvbiB8fCB7fTtcbiAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgfHwgW107XG4gIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0gPSBldmVudC5leGNlcHRpb24udmFsdWVzWzBdIHx8IHt9O1xuICBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnZhbHVlID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS52YWx1ZSB8fCB2YWx1ZSB8fCAnJztcbiAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS50eXBlID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS50eXBlIHx8IHR5cGUgfHwgJ0Vycm9yJztcbn1cbi8qKlxuICogQWRkcyBleGNlcHRpb24gbWVjaGFuaXNtIHRvIGEgZ2l2ZW4gZXZlbnQuXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSBtZWNoYW5pc20gTWVjaGFuaXNtIG9mIHRoZSBtZWNoYW5pc20uXG4gKiBAaGlkZGVuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEV4Y2VwdGlvbk1lY2hhbmlzbShldmVudCwgbWVjaGFuaXNtKSB7XG4gIGlmIChtZWNoYW5pc20gPT09IHZvaWQgMCkge1xuICAgIG1lY2hhbmlzbSA9IHt9O1xuICB9IC8vIFRPRE86IFVzZSByZWFsIHR5cGUgd2l0aCBga2V5b2YgTWVjaGFuaXNtYCB0aGluZ3kgYW5kIG1heWJlIG1ha2UgaXQgYmV0dGVyP1xuXG5cbiAgdHJ5IHtcbiAgICAvLyBAdHMtaWdub3JlIFR5cGUgJ01lY2hhbmlzbSB8IHt9JyBpcyBub3QgYXNzaWduYWJsZSB0byB0eXBlICdNZWNoYW5pc20gfCB1bmRlZmluZWQnXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLm1lY2hhbmlzbSA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0ubWVjaGFuaXNtIHx8IHt9O1xuICAgIE9iamVjdC5rZXlzKG1lY2hhbmlzbSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAvLyBAdHMtaWdub3JlIE1lY2hhbmlzbSBoYXMgbm8gaW5kZXggc2lnbmF0dXJlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5tZWNoYW5pc21ba2V5XSA9IG1lY2hhbmlzbVtrZXldO1xuICAgIH0pO1xuICB9IGNhdGNoIChfb08pIHsvLyBuby1lbXB0eVxuICB9XG59XG4vKipcbiAqIEEgc2FmZSBmb3JtIG9mIGxvY2F0aW9uLmhyZWZcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYXRpb25IcmVmKCkge1xuICB2YXIgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0KCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZ2xvYmFsLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG4gIH0gY2F0Y2ggKG9PKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59IC8vIGh0dHBzOi8vc2VtdmVyLm9yZy8jaXMtdGhlcmUtYS1zdWdnZXN0ZWQtcmVndWxhci1leHByZXNzaW9uLXJlZ2V4LXRvLWNoZWNrLWEtc2VtdmVyLXN0cmluZ1xuXG52YXIgU0VNVkVSX1JFR0VYUCA9IC9eKDB8WzEtOV1cXGQqKVxcLigwfFsxLTldXFxkKilcXC4oMHxbMS05XVxcZCopKD86LSgoPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikoPzpcXC4oPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikpKikpPyg/OlxcKyhbMC05YS16QS1aLV0rKD86XFwuWzAtOWEtekEtWi1dKykqKSk/JC87XG4vKipcbiAqIFBhcnNlcyBpbnB1dCBpbnRvIGEgU2VtVmVyIGludGVyZmFjZVxuICogQHBhcmFtIGlucHV0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNlbXZlciB2ZXJzaW9uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VtdmVyKGlucHV0KSB7XG4gIHZhciBtYXRjaCA9IGlucHV0Lm1hdGNoKFNFTVZFUl9SRUdFWFApIHx8IFtdO1xuICB2YXIgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICB2YXIgbWlub3IgPSBwYXJzZUludChtYXRjaFsyXSwgMTApO1xuICB2YXIgcGF0Y2ggPSBwYXJzZUludChtYXRjaFszXSwgMTApO1xuICByZXR1cm4ge1xuICAgIGJ1aWxkbWV0YWRhdGE6IG1hdGNoWzVdLFxuICAgIG1ham9yOiBpc05hTihtYWpvcikgPyB1bmRlZmluZWQgOiBtYWpvcixcbiAgICBtaW5vcjogaXNOYU4obWlub3IpID8gdW5kZWZpbmVkIDogbWlub3IsXG4gICAgcGF0Y2g6IGlzTmFOKHBhdGNoKSA/IHVuZGVmaW5lZCA6IHBhdGNoLFxuICAgIHByZXJlbGVhc2U6IG1hdGNoWzRdXG4gIH07XG59XG52YXIgZGVmYXVsdFJldHJ5QWZ0ZXIgPSA2MCAqIDEwMDA7IC8vIDYwIHNlY29uZHNcblxuLyoqXG4gKiBFeHRyYWN0cyBSZXRyeS1BZnRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlciBvciByZXR1cm5zIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSBub3cgY3VycmVudCB1bml4IHRpbWVzdGFtcFxuICogQHBhcmFtIGhlYWRlciBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgJ1JldHJ5LUFmdGVyJyBoZWFkZXJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZXRyeUFmdGVySGVhZGVyKG5vdywgaGVhZGVyKSB7XG4gIGlmICghaGVhZGVyKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRSZXRyeUFmdGVyO1xuICB9XG5cbiAgdmFyIGhlYWRlckRlbGF5ID0gcGFyc2VJbnQoXCJcIiArIGhlYWRlciwgMTApO1xuXG4gIGlmICghaXNOYU4oaGVhZGVyRGVsYXkpKSB7XG4gICAgcmV0dXJuIGhlYWRlckRlbGF5ICogMTAwMDtcbiAgfVxuXG4gIHZhciBoZWFkZXJEYXRlID0gRGF0ZS5wYXJzZShcIlwiICsgaGVhZGVyKTtcblxuICBpZiAoIWlzTmFOKGhlYWRlckRhdGUpKSB7XG4gICAgcmV0dXJuIGhlYWRlckRhdGUgLSBub3c7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFJldHJ5QWZ0ZXI7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBjb250ZXh0IChwcmUvcG9zdC9saW5lKSBsaW5lcyB0byB0aGUgcHJvdmlkZWQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gbGluZXMgc3RyaW5nW10gY29udGFpbmluZyBhbGwgbGluZXNcbiAqIEBwYXJhbSBmcmFtZSBTdGFja0ZyYW1lIHRoYXQgd2lsbCBiZSBtdXRhdGVkXG4gKiBAcGFyYW0gbGluZXNPZkNvbnRleHQgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgd2Ugd2FudCB0byBhZGQgcHJlL3Bvc3RcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29udGV4dFRvRnJhbWUobGluZXMsIGZyYW1lLCBsaW5lc09mQ29udGV4dCkge1xuICBpZiAobGluZXNPZkNvbnRleHQgPT09IHZvaWQgMCkge1xuICAgIGxpbmVzT2ZDb250ZXh0ID0gNTtcbiAgfVxuXG4gIHZhciBsaW5lbm8gPSBmcmFtZS5saW5lbm8gfHwgMDtcbiAgdmFyIG1heExpbmVzID0gbGluZXMubGVuZ3RoO1xuICB2YXIgc291cmNlTGluZSA9IE1hdGgubWF4KE1hdGgubWluKG1heExpbmVzLCBsaW5lbm8gLSAxKSwgMCk7XG4gIGZyYW1lLnByZV9jb250ZXh0ID0gbGluZXMuc2xpY2UoTWF0aC5tYXgoMCwgc291cmNlTGluZSAtIGxpbmVzT2ZDb250ZXh0KSwgc291cmNlTGluZSkubWFwKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgcmV0dXJuIHNuaXBMaW5lKGxpbmUsIDApO1xuICB9KTtcbiAgZnJhbWUuY29udGV4dF9saW5lID0gc25pcExpbmUobGluZXNbTWF0aC5taW4obWF4TGluZXMgLSAxLCBzb3VyY2VMaW5lKV0sIGZyYW1lLmNvbG5vIHx8IDApO1xuICBmcmFtZS5wb3N0X2NvbnRleHQgPSBsaW5lcy5zbGljZShNYXRoLm1pbihzb3VyY2VMaW5lICsgMSwgbWF4TGluZXMpLCBzb3VyY2VMaW5lICsgMSArIGxpbmVzT2ZDb250ZXh0KS5tYXAoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICByZXR1cm4gc25pcExpbmUobGluZSwgMCk7XG4gIH0pO1xufVxuLyoqXG4gKiBTdHJpcCB0aGUgcXVlcnkgc3RyaW5nIGFuZCBmcmFnbWVudCBvZmYgb2YgYSBnaXZlbiBVUkwgb3IgcGF0aCAoaWYgcHJlc2VudClcbiAqXG4gKiBAcGFyYW0gdXJsUGF0aCBGdWxsIFVSTCBvciBwYXRoLCBpbmNsdWRpbmcgcG9zc2libGUgcXVlcnkgc3RyaW5nIGFuZC9vciBmcmFnbWVudFxuICogQHJldHVybnMgVVJMIG9yIHBhdGggd2l0aG91dCBxdWVyeSBzdHJpbmcgb3IgZnJhZ21lbnRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50KHVybFBhdGgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gIHJldHVybiB1cmxQYXRoLnNwbGl0KC9bXFw/I10vLCAxKVswXTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2861\n")},7864:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KV\": function() { return /* binding */ isNodeEnv; },\n/* harmony export */ \"l$\": function() { return /* binding */ dynamicRequire; },\n/* harmony export */ \"$y\": function() { return /* binding */ loadModule; }\n/* harmony export */ });\n/* module decorator */ module = __webpack_require__.hmd(module);\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nfunction isNodeEnv() {\n return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\n}\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n\nfunction dynamicRequire(mod, request) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return mod.require(request);\n}\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\n\nfunction loadModule(moduleName) {\n var mod;\n\n try {\n mod = dynamicRequire(module, moduleName);\n } catch (e) {// no-empty\n }\n\n try {\n var cwd = dynamicRequire(module, 'process').cwd;\n mod = dynamicRequire(module, cwd() + \"/node_modules/\" + moduleName);\n } catch (e) {// no-empty\n }\n\n return mod;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9ub2RlLmpzP2IwZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRkFBa0YsaUJBQWlCO0FBQ25HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmOztBQUVBO0FBQ0EiLCJmaWxlIjoiNzg2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgd2UncmUgaW4gdGhlIE5vZGUuanMgb3IgQnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byBnaXZlbiBxdWVzdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlRW52KCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyA/IHByb2Nlc3MgOiAwKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xufVxuLyoqXG4gKiBSZXF1aXJlcyBhIG1vZHVsZSB3aGljaCBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBidW5kbGVyIG1pbmlmaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcmVxdWVzdCBUaGUgbW9kdWxlIHBhdGggdG8gcmVzb2x2ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXG5leHBvcnQgZnVuY3Rpb24gZHluYW1pY1JlcXVpcmUobW9kLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgcmV0dXJuIG1vZC5yZXF1aXJlKHJlcXVlc3QpO1xufVxuLyoqXG4gKiBIZWxwZXIgZm9yIGR5bmFtaWNhbGx5IGxvYWRpbmcgbW9kdWxlIHRoYXQgc2hvdWxkIHdvcmsgd2l0aCBsaW5rZWQgZGVwZW5kZW5jaWVzLlxuICogVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBfc2hvdWxkXyBiZSB1c2luZyBgcmVxdWlyZShyZXF1aXJlLnJlc29sdmUobW9kdWxlTmFtZSwgeyBwYXRoczogW2N3ZCgpXSB9KSlgXG4gKiBIb3dldmVyIGl0J3MgX25vdCBwb3NzaWJsZV8gdG8gZG8gdGhhdCB3aXRoIFdlYnBhY2ssIGFzIGl0IGhhcyB0byBrbm93IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGR1cmluZ1xuICogYnVpbGQgdGltZS4gYHJlcXVpcmUucmVzb2x2ZWAgaXMgYWxzbyBub3QgYXZhaWxhYmxlIGluIGFueSBvdGhlciB3YXksIHNvIHdlIGNhbm5vdCBjcmVhdGUsXG4gKiBhIGZha2UgaGVscGVyIGxpa2Ugd2UgZG8gd2l0aCBgZHluYW1pY1JlcXVpcmVgLlxuICpcbiAqIFdlIGFsd2F5cyBwcmVmZXIgdG8gdXNlIGxvY2FsIHBhY2thZ2UsIHRodXMgdGhlIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBlYXJseSBmcm9tIGVhY2ggYHRyeS9jYXRjaGAgYmxvY2suXG4gKiBUaGF0IGlzIHRvIG1pbWljIHRoZSBiZWhhdmlvciBvZiBgcmVxdWlyZS5yZXNvbHZlYCBleGFjdGx5LlxuICpcbiAqIEBwYXJhbSBtb2R1bGVOYW1lIG1vZHVsZSBuYW1lIHRvIHJlcXVpcmVcbiAqIEByZXR1cm5zIHBvc3NpYmx5IHJlcXVpcmVkIG1vZHVsZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTW9kdWxlKG1vZHVsZU5hbWUpIHtcbiAgdmFyIG1vZDtcblxuICB0cnkge1xuICAgIG1vZCA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgbW9kdWxlTmFtZSk7XG4gIH0gY2F0Y2ggKGUpIHsvLyBuby1lbXB0eVxuICB9XG5cbiAgdHJ5IHtcbiAgICB2YXIgY3dkID0gZHluYW1pY1JlcXVpcmUobW9kdWxlLCAncHJvY2VzcycpLmN3ZDtcbiAgICBtb2QgPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsIGN3ZCgpICsgXCIvbm9kZV9tb2R1bGVzL1wiICsgbW9kdWxlTmFtZSk7XG4gIH0gY2F0Y2ggKGUpIHsvLyBuby1lbXB0eVxuICB9XG5cbiAgcmV0dXJuIG1vZDtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7864\n")},150:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"Jr\": function() { return /* binding */ dropUndefinedKeys; },\n \"zf\": function() { return /* binding */ extractExceptionKeysForMessage; },\n \"hl\": function() { return /* binding */ fill; },\n \"Fv\": function() { return /* binding */ normalize; },\n \"Qy\": function() { return /* binding */ normalizeToSize; },\n \"_j\": function() { return /* binding */ urlEncode; }\n});\n\n// UNUSED EXPORTS: walk\n\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/node_modules/tslib/tslib.es6.js\nvar tslib_es6 = __webpack_require__(4850);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/browser.js\nvar browser = __webpack_require__(595);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/is.js\nvar is = __webpack_require__(2684);\n;// CONCATENATED MODULE: ./node_modules/@sentry/utils/esm/memo.js\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/**\n * Memo class used for decycle json objects. Uses WeakSet if available otherwise array.\n */\nvar Memo =\n/** @class */\nfunction () {\n function Memo() {\n this._hasWeakSet = typeof WeakSet === 'function';\n this._inner = this._hasWeakSet ? new WeakSet() : [];\n }\n /**\n * Sets obj to remember.\n * @param obj Object to remember\n */\n\n\n Memo.prototype.memoize = function (obj) {\n if (this._hasWeakSet) {\n if (this._inner.has(obj)) {\n return true;\n }\n\n this._inner.add(obj);\n\n return false;\n } // eslint-disable-next-line @typescript-eslint/prefer-for-of\n\n\n for (var i = 0; i < this._inner.length; i++) {\n var value = this._inner[i];\n\n if (value === obj) {\n return true;\n }\n }\n\n this._inner.push(obj);\n\n return false;\n };\n /**\n * Removes object from internal storage.\n * @param obj Object to forget\n */\n\n\n Memo.prototype.unmemoize = function (obj) {\n if (this._hasWeakSet) {\n this._inner.delete(obj);\n } else {\n for (var i = 0; i < this._inner.length; i++) {\n if (this._inner[i] === obj) {\n this._inner.splice(i, 1);\n\n break;\n }\n }\n }\n };\n\n return Memo;\n}();\n\n\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/stacktrace.js\nvar stacktrace = __webpack_require__(1313);\n// EXTERNAL MODULE: ./node_modules/@sentry/utils/esm/string.js\nvar string = __webpack_require__(7940);\n;// CONCATENATED MODULE: ./node_modules/@sentry/utils/esm/object.js\n\n\n\n\n\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\n\nfunction fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n\n var original = source[name];\n var wrapped = replacementFactory(original); // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n\n if (typeof wrapped === 'function') {\n try {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __sentry_original__: {\n enumerable: false,\n value: original\n }\n });\n } catch (_Oo) {// This can throw if multiple fill happens on a global object like XMLHttpRequest\n // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n }\n }\n\n source[name] = wrapped;\n}\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\n\nfunction urlEncode(object) {\n return Object.keys(object).map(function (key) {\n return encodeURIComponent(key) + \"=\" + encodeURIComponent(object[key]);\n }).join('&');\n}\n/**\n * Transforms any object into an object literal with all its attributes\n * attached to it.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n */\n\nfunction getWalkSource(value) {\n if ((0,is/* isError */.VZ)(value)) {\n var error = value;\n var err = {\n message: error.message,\n name: error.name,\n stack: error.stack\n };\n\n for (var i in error) {\n if (Object.prototype.hasOwnProperty.call(error, i)) {\n err[i] = error[i];\n }\n }\n\n return err;\n }\n\n if ((0,is/* isEvent */.cO)(value)) {\n var event_1 = value;\n var source = {}; // Accessing event attributes can throw (see https://github.com/getsentry/sentry-javascript/issues/768 and\n // https://github.com/getsentry/sentry-javascript/issues/838), but accessing `type` hasn't been wrapped in a\n // try-catch in at least two years and no one's complained, so that's likely not an issue anymore\n\n source.type = event_1.type;\n\n try {\n source.target = (0,is/* isElement */.kK)(event_1.target) ? (0,browser/* htmlTreeAsString */.R)(event_1.target) : Object.prototype.toString.call(event_1.target);\n } catch (_oO) {\n source.target = '<unknown>';\n }\n\n try {\n source.currentTarget = (0,is/* isElement */.kK)(event_1.currentTarget) ? (0,browser/* htmlTreeAsString */.R)(event_1.currentTarget) : Object.prototype.toString.call(event_1.currentTarget);\n } catch (_oO) {\n source.currentTarget = '<unknown>';\n }\n\n if (typeof CustomEvent !== 'undefined' && (0,is/* isInstanceOf */.V9)(value, CustomEvent)) {\n source.detail = event_1.detail;\n }\n\n for (var attr in event_1) {\n if (Object.prototype.hasOwnProperty.call(event_1, attr)) {\n source[attr] = event_1[attr];\n }\n }\n\n return source;\n }\n\n return value;\n}\n/** Calculates bytes size of input string */\n\n\nfunction utf8Length(value) {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n/** Calculates bytes size of input object */\n\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n/** JSDoc */\n\n\nfunction normalizeToSize(object, // Default Node.js REPL depth\ndepth, // 100kB, as 200kB is max payload size, so half sounds reasonable\nmaxSize) {\n if (depth === void 0) {\n depth = 3;\n }\n\n if (maxSize === void 0) {\n maxSize = 100 * 1024;\n }\n\n var serialized = normalize(object, depth);\n\n if (jsonSize(serialized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return serialized;\n}\n/**\n * Transform any non-primitive, BigInt, or Symbol-type value into a string. Acts as a no-op on strings, numbers,\n * booleans, null, and undefined.\n *\n * @param value The value to stringify\n * @returns For non-primitive, BigInt, and Symbol-type values, a string denoting the value's type, type and value, or\n * type and `description` property, respectively. For non-BigInt, non-Symbol primitives, returns the original value,\n * unchanged.\n */\n\nfunction serializeValue(value) {\n var type = Object.prototype.toString.call(value); // Node.js REPL notation\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (type === '[object Object]') {\n return '[Object]';\n }\n\n if (type === '[object Array]') {\n return '[Array]';\n }\n\n var normalized = normalizeValue(value);\n return (0,is/* isPrimitive */.pt)(normalized) ? normalized : type;\n}\n/**\n * normalizeValue()\n *\n * Takes unserializable input and make it serializable friendly\n *\n * - translates undefined/NaN values to \"[undefined]\"/\"[NaN]\" respectively,\n * - serializes Error objects\n * - filter global objects\n */\n\n\nfunction normalizeValue(value, key) {\n if (key === 'domain' && value && typeof value === 'object' && value._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n if (typeof __webpack_require__.g !== 'undefined' && value === __webpack_require__.g) {\n return '[Global]';\n } // It's safe to use `window` and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n // eslint-disable-next-line no-restricted-globals\n\n\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n } // eslint-disable-next-line no-restricted-globals\n\n\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n } // React's SyntheticEvent thingy\n\n\n if ((0,is/* isSyntheticEvent */.Cy)(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && value !== value) {\n return '[NaN]';\n }\n\n if (value === void 0) {\n return '[undefined]';\n }\n\n if (typeof value === 'function') {\n return \"[Function: \" + (0,stacktrace/* getFunctionName */.$)(value) + \"]\";\n } // symbols and bigints are considered primitives by TS, but aren't natively JSON-serilaizable\n\n\n if (typeof value === 'symbol') {\n return \"[\" + String(value) + \"]\";\n }\n\n if (typeof value === 'bigint') {\n return \"[BigInt: \" + String(value) + \"]\";\n }\n\n return value;\n}\n/**\n * Walks an object to perform a normalization on it\n *\n * @param key of object that's walked in current iteration\n * @param value object to be walked\n * @param depth Optional number indicating how deep should walking be performed\n * @param memo Optional Memo class handling decycling\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\n\nfunction walk(key, value, depth, memo) {\n if (depth === void 0) {\n depth = +Infinity;\n }\n\n if (memo === void 0) {\n memo = new Memo();\n } // If we reach the maximum depth, serialize whatever has left\n\n\n if (depth === 0) {\n return serializeValue(value);\n }\n /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n // If value implements `toJSON` method, call it and return early\n\n\n if (value !== null && value !== undefined && typeof value.toJSON === 'function') {\n return value.toJSON();\n }\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n // If normalized value is a primitive, there are no branches left to walk, so we can just bail out, as theres no point in going down that branch any further\n\n\n var normalized = normalizeValue(value, key);\n\n if ((0,is/* isPrimitive */.pt)(normalized)) {\n return normalized;\n } // Create source that we will use for next itterations, either objectified error object (Error type with extracted keys:value pairs) or the input itself\n\n\n var source = getWalkSource(value); // Create an accumulator that will act as a parent for all future itterations of that branch\n\n var acc = Array.isArray(value) ? [] : {}; // If we already walked that branch, bail out, as it's circular reference\n\n if (memo.memoize(value)) {\n return '[Circular ~]';\n } // Walk all keys of the source\n\n\n for (var innerKey in source) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(source, innerKey)) {\n continue;\n } // Recursively walk through all the child nodes\n\n\n acc[innerKey] = walk(innerKey, source[innerKey], depth - 1, memo);\n } // Once walked through all the branches, remove the parent from memo storage\n\n\n memo.unmemoize(value); // Return accumulated values\n\n return acc;\n}\n/**\n * normalize()\n *\n * - Creates a copy to prevent original input mutation\n * - Skip non-enumerablers\n * - Calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializeable values (undefined/NaN/Functions) to serializable format\n * - Translates known global objects/Classes to a string representations\n * - Takes care of Error objects serialization\n * - Optionally limit depth of final output\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nfunction normalize(input, depth) {\n try {\n return JSON.parse(JSON.stringify(input, function (key, value) {\n return walk(key, value, depth);\n }));\n } catch (_oO) {\n return '**non-serializable**';\n }\n}\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nfunction extractExceptionKeysForMessage(exception, maxLength) {\n if (maxLength === void 0) {\n maxLength = 40;\n }\n\n var keys = Object.keys(getWalkSource(exception));\n keys.sort();\n\n if (!keys.length) {\n return '[object has no keys]';\n }\n\n if (keys[0].length >= maxLength) {\n return (0,string/* truncate */.$G)(keys[0], maxLength);\n }\n\n for (var includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n var serialized = keys.slice(0, includedKeys).join(', ');\n\n if (serialized.length > maxLength) {\n continue;\n }\n\n if (includedKeys === keys.length) {\n return serialized;\n }\n\n return (0,string/* truncate */.$G)(serialized, maxLength);\n }\n\n return '';\n}\n/**\n * Given any object, return the new object with removed keys that value was `undefined`.\n * Works recursively on objects and arrays.\n */\n\nfunction dropUndefinedKeys(val) {\n var e_1, _a;\n\n if ((0,is/* isPlainObject */.PO)(val)) {\n var obj = val;\n var rv = {};\n\n try {\n for (var _b = (0,tslib_es6/* __values */.XA)(Object.keys(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n\n if (typeof obj[key] !== 'undefined') {\n rv[key] = dropUndefinedKeys(obj[key]);\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return rv;\n }\n\n if (Array.isArray(val)) {\n return val.map(dropUndefinedKeys);\n }\n\n return val;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9tZW1vLmpzPzdkMmYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9lc20vb2JqZWN0LmpzPzBhZjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0wsbUJBQW1CLHdCQUF3QjtBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxxQkFBcUIsd0JBQXdCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7Ozs7Ozs7O0FDbkVnQztBQUNZO0FBQ2tFO0FBQ2pGO0FBQ2lCO0FBQ1g7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssY0FBYztBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLHNCQUFPO0FBQ2I7QUFDQTtBQUNB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WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzICovXG5cbi8qKlxuICogTWVtbyBjbGFzcyB1c2VkIGZvciBkZWN5Y2xlIGpzb24gb2JqZWN0cy4gVXNlcyBXZWFrU2V0IGlmIGF2YWlsYWJsZSBvdGhlcndpc2UgYXJyYXkuXG4gKi9cbnZhciBNZW1vID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWVtbygpIHtcbiAgICB0aGlzLl9oYXNXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbic7XG4gICAgdGhpcy5faW5uZXIgPSB0aGlzLl9oYXNXZWFrU2V0ID8gbmV3IFdlYWtTZXQoKSA6IFtdO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIG9iaiB0byByZW1lbWJlci5cbiAgICogQHBhcmFtIG9iaiBPYmplY3QgdG8gcmVtZW1iZXJcbiAgICovXG5cblxuICBNZW1vLnByb3RvdHlwZS5tZW1vaXplID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmICh0aGlzLl9oYXNXZWFrU2V0KSB7XG4gICAgICBpZiAodGhpcy5faW5uZXIuaGFzKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lubmVyLmFkZChvYmopO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9pbm5lci5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5faW5uZXJbaV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gb2JqKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2lubmVyLnB1c2gob2JqKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlbW92ZXMgb2JqZWN0IGZyb20gaW50ZXJuYWwgc3RvcmFnZS5cbiAgICogQHBhcmFtIG9iaiBPYmplY3QgdG8gZm9yZ2V0XG4gICAqL1xuXG5cbiAgTWVtby5wcm90b3R5cGUudW5tZW1vaXplID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmICh0aGlzLl9oYXNXZWFrU2V0KSB7XG4gICAgICB0aGlzLl9pbm5lci5kZWxldGUob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9pbm5lci5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5faW5uZXJbaV0gPT09IG9iaikge1xuICAgICAgICAgIHRoaXMuX2lubmVyLnNwbGljZShpLCAxKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBNZW1vO1xufSgpO1xuXG5leHBvcnQgeyBNZW1vIH07IiwiaW1wb3J0IHsgX192YWx1ZXMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGh0bWxUcmVlQXNTdHJpbmcgfSBmcm9tICcuL2Jyb3dzZXInO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0Vycm9yLCBpc0V2ZW50LCBpc0luc3RhbmNlT2YsIGlzUGxhaW5PYmplY3QsIGlzUHJpbWl0aXZlLCBpc1N5bnRoZXRpY0V2ZW50IH0gZnJvbSAnLi9pcyc7XG5pbXBvcnQgeyBNZW1vIH0gZnJvbSAnLi9tZW1vJztcbmltcG9ydCB7IGdldEZ1bmN0aW9uTmFtZSB9IGZyb20gJy4vc3RhY2t0cmFjZSc7XG5pbXBvcnQgeyB0cnVuY2F0ZSB9IGZyb20gJy4vc3RyaW5nJztcbi8qKlxuICogUmVwbGFjZSBhIG1ldGhvZCBpbiBhbiBvYmplY3Qgd2l0aCBhIHdyYXBwZWQgdmVyc2lvbiBvZiBpdHNlbGYuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBBbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG1ldGhvZCB0byBiZSB3cmFwcGVkLlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0byBiZSB3cmFwcGVkLlxuICogQHBhcmFtIHJlcGxhY2VtZW50RmFjdG9yeSBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBtZXRob2QgYW5kIHJldHVybnMgYVxuICogd3JhcHBlZCB2ZXJzaW9uLiBOb3RlOiBUaGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYHJlcGxhY2VtZW50RmFjdG9yeWAgbmVlZHMgdG8gYmUgYSBub24tYXJyb3cgZnVuY3Rpb24sIGluIG9yZGVyIHRvXG4gKiBwcmVzZXJ2ZSB0aGUgY29ycmVjdCB2YWx1ZSBvZiBgdGhpc2AsIGFuZCB0aGUgb3JpZ2luYWwgbWV0aG9kIG11c3QgYmUgY2FsbGVkIHVzaW5nIGBvcmlnTWV0aG9kLmNhbGwodGhpcywgPG90aGVyXG4gKiBhcmdzPilgIG9yIGBvcmlnTWV0aG9kLmFwcGx5KHRoaXMsIFs8b3RoZXIgYXJncz5dKWAgKHJhdGhlciB0aGFuIGJlaW5nIGNhbGxlZCBkaXJlY3RseSksIGFnYWluIHRvIHByZXNlcnZlIGB0aGlzYC5cbiAqIEByZXR1cm5zIHZvaWRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmlsbChzb3VyY2UsIG5hbWUsIHJlcGxhY2VtZW50RmFjdG9yeSkge1xuICBpZiAoIShuYW1lIGluIHNvdXJjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgb3JpZ2luYWwgPSBzb3VyY2VbbmFtZV07XG4gIHZhciB3cmFwcGVkID0gcmVwbGFjZW1lbnRGYWN0b3J5KG9yaWdpbmFsKTsgLy8gTWFrZSBzdXJlIGl0J3MgYSBmdW5jdGlvbiBmaXJzdCwgYXMgd2UgbmVlZCB0byBhdHRhY2ggYW4gZW1wdHkgcHJvdG90eXBlIGZvciBgZGVmaW5lUHJvcGVydGllc2AgdG8gd29ya1xuICAvLyBvdGhlcndpc2UgaXQnbGwgdGhyb3cgXCJUeXBlRXJyb3I6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIGNhbGxlZCBvbiBub24tb2JqZWN0XCJcblxuICBpZiAodHlwZW9mIHdyYXBwZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgd3JhcHBlZC5wcm90b3R5cGUgPSB3cmFwcGVkLnByb3RvdHlwZSB8fCB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdyYXBwZWQsIHtcbiAgICAgICAgX19zZW50cnlfb3JpZ2luYWxfXzoge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiBvcmlnaW5hbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfT28pIHsvLyBUaGlzIGNhbiB0aHJvdyBpZiBtdWx0aXBsZSBmaWxsIGhhcHBlbnMgb24gYSBnbG9iYWwgb2JqZWN0IGxpa2UgWE1MSHR0cFJlcXVlc3RcbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzIwNDNcbiAgICB9XG4gIH1cblxuICBzb3VyY2VbbmFtZV0gPSB3cmFwcGVkO1xufVxuLyoqXG4gKiBFbmNvZGVzIGdpdmVuIG9iamVjdCBpbnRvIHVybC1mcmllbmRseSBmb3JtYXRcbiAqXG4gKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXNcbiAqIEByZXR1cm5zIHN0cmluZyBFbmNvZGVkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChvYmplY3Rba2V5XSk7XG4gIH0pLmpvaW4oJyYnKTtcbn1cbi8qKlxuICogVHJhbnNmb3JtcyBhbnkgb2JqZWN0IGludG8gYW4gb2JqZWN0IGxpdGVyYWwgd2l0aCBhbGwgaXRzIGF0dHJpYnV0ZXNcbiAqIGF0dGFjaGVkIHRvIGl0LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBJbml0aWFsIHNvdXJjZSB0aGF0IHdlIGhhdmUgdG8gdHJhbnNmb3JtIGluIG9yZGVyIGZvciBpdCB0byBiZSB1c2FibGUgYnkgdGhlIHNlcmlhbGl6ZXJcbiAqL1xuXG5mdW5jdGlvbiBnZXRXYWxrU291cmNlKHZhbHVlKSB7XG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIHZhciBlcnJvciA9IHZhbHVlO1xuICAgIHZhciBlcnIgPSB7XG4gICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgbmFtZTogZXJyb3IubmFtZSxcbiAgICAgIHN0YWNrOiBlcnJvci5zdGFja1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBpIGluIGVycm9yKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCBpKSkge1xuICAgICAgICBlcnJbaV0gPSBlcnJvcltpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyO1xuICB9XG5cbiAgaWYgKGlzRXZlbnQodmFsdWUpKSB7XG4gICAgdmFyIGV2ZW50XzEgPSB2YWx1ZTtcbiAgICB2YXIgc291cmNlID0ge307IC8vIEFjY2Vzc2luZyBldmVudCBhdHRyaWJ1dGVzIGNhbiB0aHJvdyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzc2OCBhbmRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84MzgpLCBidXQgYWNjZXNzaW5nIGB0eXBlYCBoYXNuJ3QgYmVlbiB3cmFwcGVkIGluIGFcbiAgICAvLyB0cnktY2F0Y2ggaW4gYXQgbGVhc3QgdHdvIHllYXJzIGFuZCBubyBvbmUncyBjb21wbGFpbmVkLCBzbyB0aGF0J3MgbGlrZWx5IG5vdCBhbiBpc3N1ZSBhbnltb3JlXG5cbiAgICBzb3VyY2UudHlwZSA9IGV2ZW50XzEudHlwZTtcblxuICAgIHRyeSB7XG4gICAgICBzb3VyY2UudGFyZ2V0ID0gaXNFbGVtZW50KGV2ZW50XzEudGFyZ2V0KSA/IGh0bWxUcmVlQXNTdHJpbmcoZXZlbnRfMS50YXJnZXQpIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV2ZW50XzEudGFyZ2V0KTtcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIHNvdXJjZS50YXJnZXQgPSAnPHVua25vd24+JztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgc291cmNlLmN1cnJlbnRUYXJnZXQgPSBpc0VsZW1lbnQoZXZlbnRfMS5jdXJyZW50VGFyZ2V0KSA/IGh0bWxUcmVlQXNTdHJpbmcoZXZlbnRfMS5jdXJyZW50VGFyZ2V0KSA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldmVudF8xLmN1cnJlbnRUYXJnZXQpO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgc291cmNlLmN1cnJlbnRUYXJnZXQgPSAnPHVua25vd24+JztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIEN1c3RvbUV2ZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2YodmFsdWUsIEN1c3RvbUV2ZW50KSkge1xuICAgICAgc291cmNlLmRldGFpbCA9IGV2ZW50XzEuZGV0YWlsO1xuICAgIH1cblxuICAgIGZvciAodmFyIGF0dHIgaW4gZXZlbnRfMSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChldmVudF8xLCBhdHRyKSkge1xuICAgICAgICBzb3VyY2VbYXR0cl0gPSBldmVudF8xW2F0dHJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG4vKiogQ2FsY3VsYXRlcyBieXRlcyBzaXplIG9mIGlucHV0IHN0cmluZyAqL1xuXG5cbmZ1bmN0aW9uIHV0ZjhMZW5ndGgodmFsdWUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgcmV0dXJuIH4tZW5jb2RlVVJJKHZhbHVlKS5zcGxpdCgvJS4ufC4vKS5sZW5ndGg7XG59XG4vKiogQ2FsY3VsYXRlcyBieXRlcyBzaXplIG9mIGlucHV0IG9iamVjdCAqL1xuXG5cbmZ1bmN0aW9uIGpzb25TaXplKHZhbHVlKSB7XG4gIHJldHVybiB1dGY4TGVuZ3RoKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG59XG4vKiogSlNEb2MgKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVG9TaXplKG9iamVjdCwgLy8gRGVmYXVsdCBOb2RlLmpzIFJFUEwgZGVwdGhcbmRlcHRoLCAvLyAxMDBrQiwgYXMgMjAwa0IgaXMgbWF4IHBheWxvYWQgc2l6ZSwgc28gaGFsZiBzb3VuZHMgcmVhc29uYWJsZVxubWF4U2l6ZSkge1xuICBpZiAoZGVwdGggPT09IHZvaWQgMCkge1xuICAgIGRlcHRoID0gMztcbiAgfVxuXG4gIGlmIChtYXhTaXplID09PSB2b2lkIDApIHtcbiAgICBtYXhTaXplID0gMTAwICogMTAyNDtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gbm9ybWFsaXplKG9iamVjdCwgZGVwdGgpO1xuXG4gIGlmIChqc29uU2l6ZShzZXJpYWxpemVkKSA+IG1heFNpemUpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplVG9TaXplKG9iamVjdCwgZGVwdGggLSAxLCBtYXhTaXplKTtcbiAgfVxuXG4gIHJldHVybiBzZXJpYWxpemVkO1xufVxuLyoqXG4gKiBUcmFuc2Zvcm0gYW55IG5vbi1wcmltaXRpdmUsIEJpZ0ludCwgb3IgU3ltYm9sLXR5cGUgdmFsdWUgaW50byBhIHN0cmluZy4gQWN0cyBhcyBhIG5vLW9wIG9uIHN0cmluZ3MsIG51bWJlcnMsXG4gKiBib29sZWFucywgbnVsbCwgYW5kIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeVxuICogQHJldHVybnMgRm9yIG5vbi1wcmltaXRpdmUsIEJpZ0ludCwgYW5kIFN5bWJvbC10eXBlIHZhbHVlcywgYSBzdHJpbmcgZGVub3RpbmcgdGhlIHZhbHVlJ3MgdHlwZSwgdHlwZSBhbmQgdmFsdWUsIG9yXG4gKiAgdHlwZSBhbmQgYGRlc2NyaXB0aW9uYCBwcm9wZXJ0eSwgcmVzcGVjdGl2ZWx5LiBGb3Igbm9uLUJpZ0ludCwgbm9uLVN5bWJvbCBwcmltaXRpdmVzLCByZXR1cm5zIHRoZSBvcmlnaW5hbCB2YWx1ZSxcbiAqICB1bmNoYW5nZWQuXG4gKi9cblxuZnVuY3Rpb24gc2VyaWFsaXplVmFsdWUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpOyAvLyBOb2RlLmpzIFJFUEwgbm90YXRpb25cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlmICh0eXBlID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIHJldHVybiAnW09iamVjdF0nO1xuICB9XG5cbiAgaWYgKHR5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICByZXR1cm4gJ1tBcnJheV0nO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIHJldHVybiBpc1ByaW1pdGl2ZShub3JtYWxpemVkKSA/IG5vcm1hbGl6ZWQgOiB0eXBlO1xufVxuLyoqXG4gKiBub3JtYWxpemVWYWx1ZSgpXG4gKlxuICogVGFrZXMgdW5zZXJpYWxpemFibGUgaW5wdXQgYW5kIG1ha2UgaXQgc2VyaWFsaXphYmxlIGZyaWVuZGx5XG4gKlxuICogLSB0cmFuc2xhdGVzIHVuZGVmaW5lZC9OYU4gdmFsdWVzIHRvIFwiW3VuZGVmaW5lZF1cIi9cIltOYU5dXCIgcmVzcGVjdGl2ZWx5LFxuICogLSBzZXJpYWxpemVzIEVycm9yIG9iamVjdHNcbiAqIC0gZmlsdGVyIGdsb2JhbCBvYmplY3RzXG4gKi9cblxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdkb21haW4nICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuX2V2ZW50cykge1xuICAgIHJldHVybiAnW0RvbWFpbl0nO1xuICB9XG5cbiAgaWYgKGtleSA9PT0gJ2RvbWFpbkVtaXR0ZXInKSB7XG4gICAgcmV0dXJuICdbRG9tYWluRW1pdHRlcl0nO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBnbG9iYWwpIHtcbiAgICByZXR1cm4gJ1tHbG9iYWxdJztcbiAgfSAvLyBJdCdzIHNhZmUgdG8gdXNlIGB3aW5kb3dgIGFuZCBgZG9jdW1lbnRgIGhlcmUgaW4gdGhpcyBtYW5uZXIsIGFzIHdlIGFyZSBhc3NlcnRpbmcgdXNpbmcgYHR5cGVvZmAgZmlyc3RcbiAgLy8gd2hpY2ggd29uJ3QgdGhyb3cgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcblxuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gd2luZG93KSB7XG4gICAgcmV0dXJuICdbV2luZG93XSc7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuXG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgPT09IGRvY3VtZW50KSB7XG4gICAgcmV0dXJuICdbRG9jdW1lbnRdJztcbiAgfSAvLyBSZWFjdCdzIFN5bnRoZXRpY0V2ZW50IHRoaW5neVxuXG5cbiAgaWYgKGlzU3ludGhldGljRXZlbnQodmFsdWUpKSB7XG4gICAgcmV0dXJuICdbU3ludGhldGljRXZlbnRdJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiAnW05hTl0nO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gJ1t1bmRlZmluZWRdJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gXCJbRnVuY3Rpb246IFwiICsgZ2V0RnVuY3Rpb25OYW1lKHZhbHVlKSArIFwiXVwiO1xuICB9IC8vIHN5bWJvbHMgYW5kIGJpZ2ludHMgYXJlIGNvbnNpZGVyZWQgcHJpbWl0aXZlcyBieSBUUywgYnV0IGFyZW4ndCBuYXRpdmVseSBKU09OLXNlcmlsYWl6YWJsZVxuXG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICByZXR1cm4gXCJbXCIgKyBTdHJpbmcodmFsdWUpICsgXCJdXCI7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiBcIltCaWdJbnQ6IFwiICsgU3RyaW5nKHZhbHVlKSArIFwiXVwiO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuLyoqXG4gKiBXYWxrcyBhbiBvYmplY3QgdG8gcGVyZm9ybSBhIG5vcm1hbGl6YXRpb24gb24gaXRcbiAqXG4gKiBAcGFyYW0ga2V5IG9mIG9iamVjdCB0aGF0J3Mgd2Fsa2VkIGluIGN1cnJlbnQgaXRlcmF0aW9uXG4gKiBAcGFyYW0gdmFsdWUgb2JqZWN0IHRvIGJlIHdhbGtlZFxuICogQHBhcmFtIGRlcHRoIE9wdGlvbmFsIG51bWJlciBpbmRpY2F0aW5nIGhvdyBkZWVwIHNob3VsZCB3YWxraW5nIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIG1lbW8gT3B0aW9uYWwgTWVtbyBjbGFzcyBoYW5kbGluZyBkZWN5Y2xpbmdcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcblxuXG5leHBvcnQgZnVuY3Rpb24gd2FsayhrZXksIHZhbHVlLCBkZXB0aCwgbWVtbykge1xuICBpZiAoZGVwdGggPT09IHZvaWQgMCkge1xuICAgIGRlcHRoID0gK0luZmluaXR5O1xuICB9XG5cbiAgaWYgKG1lbW8gPT09IHZvaWQgMCkge1xuICAgIG1lbW8gPSBuZXcgTWVtbygpO1xuICB9IC8vIElmIHdlIHJlYWNoIHRoZSBtYXhpbXVtIGRlcHRoLCBzZXJpYWxpemUgd2hhdGV2ZXIgaGFzIGxlZnRcblxuXG4gIGlmIChkZXB0aCA9PT0gMCkge1xuICAgIHJldHVybiBzZXJpYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gIC8vIElmIHZhbHVlIGltcGxlbWVudHMgYHRvSlNPTmAgbWV0aG9kLCBjYWxsIGl0IGFuZCByZXR1cm4gZWFybHlcblxuXG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWUudG9KU09OKCk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbiAgLy8gSWYgbm9ybWFsaXplZCB2YWx1ZSBpcyBhIHByaW1pdGl2ZSwgdGhlcmUgYXJlIG5vIGJyYW5jaGVzIGxlZnQgdG8gd2Fsaywgc28gd2UgY2FuIGp1c3QgYmFpbCBvdXQsIGFzIHRoZXJlcyBubyBwb2ludCBpbiBnb2luZyBkb3duIHRoYXQgYnJhbmNoIGFueSBmdXJ0aGVyXG5cblxuICB2YXIgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlLCBrZXkpO1xuXG4gIGlmIChpc1ByaW1pdGl2ZShub3JtYWxpemVkKSkge1xuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9IC8vIENyZWF0ZSBzb3VyY2UgdGhhdCB3ZSB3aWxsIHVzZSBmb3IgbmV4dCBpdHRlcmF0aW9ucywgZWl0aGVyIG9iamVjdGlmaWVkIGVycm9yIG9iamVjdCAoRXJyb3IgdHlwZSB3aXRoIGV4dHJhY3RlZCBrZXlzOnZhbHVlIHBhaXJzKSBvciB0aGUgaW5wdXQgaXRzZWxmXG5cblxuICB2YXIgc291cmNlID0gZ2V0V2Fsa1NvdXJjZSh2YWx1ZSk7IC8vIENyZWF0ZSBhbiBhY2N1bXVsYXRvciB0aGF0IHdpbGwgYWN0IGFzIGEgcGFyZW50IGZvciBhbGwgZnV0dXJlIGl0dGVyYXRpb25zIG9mIHRoYXQgYnJhbmNoXG5cbiAgdmFyIGFjYyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fTsgLy8gSWYgd2UgYWxyZWFkeSB3YWxrZWQgdGhhdCBicmFuY2gsIGJhaWwgb3V0LCBhcyBpdCdzIGNpcmN1bGFyIHJlZmVyZW5jZVxuXG4gIGlmIChtZW1vLm1lbW9pemUodmFsdWUpKSB7XG4gICAgcmV0dXJuICdbQ2lyY3VsYXIgfl0nO1xuICB9IC8vIFdhbGsgYWxsIGtleXMgb2YgdGhlIHNvdXJjZVxuXG5cbiAgZm9yICh2YXIgaW5uZXJLZXkgaW4gc291cmNlKSB7XG4gICAgLy8gQXZvaWQgaXRlcmF0aW5nIG92ZXIgZmllbGRzIGluIHRoZSBwcm90b3R5cGUgaWYgdGhleSd2ZSBzb21laG93IGJlZW4gZXhwb3NlZCB0byBlbnVtZXJhdGlvbi5cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGlubmVyS2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBSZWN1cnNpdmVseSB3YWxrIHRocm91Z2ggYWxsIHRoZSBjaGlsZCBub2Rlc1xuXG5cbiAgICBhY2NbaW5uZXJLZXldID0gd2Fsayhpbm5lcktleSwgc291cmNlW2lubmVyS2V5XSwgZGVwdGggLSAxLCBtZW1vKTtcbiAgfSAvLyBPbmNlIHdhbGtlZCB0aHJvdWdoIGFsbCB0aGUgYnJhbmNoZXMsIHJlbW92ZSB0aGUgcGFyZW50IGZyb20gbWVtbyBzdG9yYWdlXG5cblxuICBtZW1vLnVubWVtb2l6ZSh2YWx1ZSk7IC8vIFJldHVybiBhY2N1bXVsYXRlZCB2YWx1ZXNcblxuICByZXR1cm4gYWNjO1xufVxuLyoqXG4gKiBub3JtYWxpemUoKVxuICpcbiAqIC0gQ3JlYXRlcyBhIGNvcHkgdG8gcHJldmVudCBvcmlnaW5hbCBpbnB1dCBtdXRhdGlvblxuICogLSBTa2lwIG5vbi1lbnVtZXJhYmxlcnNcbiAqIC0gQ2FsbHMgYHRvSlNPTmAgaWYgaW1wbGVtZW50ZWRcbiAqIC0gUmVtb3ZlcyBjaXJjdWxhciByZWZlcmVuY2VzXG4gKiAtIFRyYW5zbGF0ZXMgbm9uLXNlcmlhbGl6ZWFibGUgdmFsdWVzICh1bmRlZmluZWQvTmFOL0Z1bmN0aW9ucykgdG8gc2VyaWFsaXphYmxlIGZvcm1hdFxuICogLSBUcmFuc2xhdGVzIGtub3duIGdsb2JhbCBvYmplY3RzL0NsYXNzZXMgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25zXG4gKiAtIFRha2VzIGNhcmUgb2YgRXJyb3Igb2JqZWN0cyBzZXJpYWxpemF0aW9uXG4gKiAtIE9wdGlvbmFsbHkgbGltaXQgZGVwdGggb2YgZmluYWwgb3V0cHV0XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUoaW5wdXQsIGRlcHRoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gd2FsayhrZXksIHZhbHVlLCBkZXB0aCk7XG4gICAgfSkpO1xuICB9IGNhdGNoIChfb08pIHtcbiAgICByZXR1cm4gJyoqbm9uLXNlcmlhbGl6YWJsZSoqJztcbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbnkgY2FwdHVyZWQgZXhjZXB0aW9uLCBleHRyYWN0IGl0cyBrZXlzIGFuZCBjcmVhdGUgYSBzb3J0ZWRcbiAqIGFuZCB0cnVuY2F0ZWQgbGlzdCB0aGF0IHdpbGwgYmUgdXNlZCBpbnNpZGUgdGhlIGV2ZW50IG1lc3NhZ2UuXG4gKiBlZy4gYE5vbi1lcnJvciBleGNlcHRpb24gY2FwdHVyZWQgd2l0aCBrZXlzOiBmb28sIGJhciwgYmF6YFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEV4Y2VwdGlvbktleXNGb3JNZXNzYWdlKGV4Y2VwdGlvbiwgbWF4TGVuZ3RoKSB7XG4gIGlmIChtYXhMZW5ndGggPT09IHZvaWQgMCkge1xuICAgIG1heExlbmd0aCA9IDQwO1xuICB9XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhnZXRXYWxrU291cmNlKGV4Y2VwdGlvbikpO1xuICBrZXlzLnNvcnQoKTtcblxuICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0IGhhcyBubyBrZXlzXSc7XG4gIH1cblxuICBpZiAoa2V5c1swXS5sZW5ndGggPj0gbWF4TGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydW5jYXRlKGtleXNbMF0sIG1heExlbmd0aCk7XG4gIH1cblxuICBmb3IgKHZhciBpbmNsdWRlZEtleXMgPSBrZXlzLmxlbmd0aDsgaW5jbHVkZWRLZXlzID4gMDsgaW5jbHVkZWRLZXlzLS0pIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9IGtleXMuc2xpY2UoMCwgaW5jbHVkZWRLZXlzKS5qb2luKCcsICcpO1xuXG4gICAgaWYgKHNlcmlhbGl6ZWQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZWRLZXlzID09PSBrZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydW5jYXRlKHNlcmlhbGl6ZWQsIG1heExlbmd0aCk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIEdpdmVuIGFueSBvYmplY3QsIHJldHVybiB0aGUgbmV3IG9iamVjdCB3aXRoIHJlbW92ZWQga2V5cyB0aGF0IHZhbHVlIHdhcyBgdW5kZWZpbmVkYC5cbiAqIFdvcmtzIHJlY3Vyc2l2ZWx5IG9uIG9iamVjdHMgYW5kIGFycmF5cy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZHJvcFVuZGVmaW5lZEtleXModmFsKSB7XG4gIHZhciBlXzEsIF9hO1xuXG4gIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICB2YXIgb2JqID0gdmFsO1xuICAgIHZhciBydiA9IHt9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoT2JqZWN0LmtleXMob2JqKSksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGtleSA9IF9jLnZhbHVlO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcnZba2V5XSA9IGRyb3BVbmRlZmluZWRLZXlzKG9ialtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVfMV8xKSB7XG4gICAgICBlXzEgPSB7XG4gICAgICAgIGVycm9yOiBlXzFfMVxuICAgICAgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBydjtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gdmFsLm1hcChkcm9wVW5kZWZpbmVkS2V5cyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///150\n")},1313:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"$\": function() { return /* binding */ getFunctionName; }\n/* harmony export */ });\nvar defaultFunctionName = '<anonymous>';\n/**\n * Safely extract function name from itself\n */\n\nfunction getFunctionName(fn) {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9zdGFja3RyYWNlLmpzPzdmOTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEzMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7XG4vKipcbiAqIFNhZmVseSBleHRyYWN0IGZ1bmN0aW9uIG5hbWUgZnJvbSBpdHNlbGZcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFmbiB8fCB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBmbi5uYW1lIHx8IGRlZmF1bHRGdW5jdGlvbk5hbWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHNcbiAgICAvLyBjYW4gY2F1c2UgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS5cbiAgICByZXR1cm4gZGVmYXVsdEZ1bmN0aW9uTmFtZTtcbiAgfVxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1313\n")},7940:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"$G\": function() { return /* binding */ truncate; },\n/* harmony export */ \"nK\": function() { return /* binding */ safeJoin; },\n/* harmony export */ \"zC\": function() { return /* binding */ isMatchingPattern; }\n/* harmony export */ });\n/* unused harmony export snipLine */\n/* harmony import */ var _is__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2684);\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\n\nfunction truncate(str, max) {\n if (max === void 0) {\n max = 0;\n }\n\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n\n return str.length <= max ? str : str.substr(0, max) + \"...\";\n}\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\n\nfunction snipLine(line, colno) {\n var newLine = line;\n var ll = newLine.length;\n\n if (ll <= 150) {\n return newLine;\n }\n\n if (colno > ll) {\n // eslint-disable-next-line no-param-reassign\n colno = ll;\n }\n\n var start = Math.max(colno - 60, 0);\n\n if (start < 5) {\n start = 0;\n }\n\n var end = Math.min(start + 140, ll);\n\n if (end > ll - 5) {\n end = ll;\n }\n\n if (end === ll) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n\n if (start > 0) {\n newLine = \"'{snip} \" + newLine;\n }\n\n if (end < ll) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\nfunction safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return '';\n }\n\n var output = []; // eslint-disable-next-line @typescript-eslint/prefer-for-of\n\n for (var i = 0; i < input.length; i++) {\n var value = input[i];\n\n try {\n output.push(String(value));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n/**\n * Checks if the value matches a regex or includes the string\n * @param value The string value to be checked against\n * @param pattern Either a regex or a string that must be contained in value\n */\n\nfunction isMatchingPattern(value, pattern) {\n if (!(0,_is__WEBPACK_IMPORTED_MODULE_0__/* .isString */ .HD)(value)) {\n return false;\n }\n\n if ((0,_is__WEBPACK_IMPORTED_MODULE_0__/* .isRegExp */ .Kj)(pattern)) {\n return pattern.test(value);\n }\n\n if (typeof pattern === 'string') {\n return value.indexOf(pattern) !== -1;\n }\n\n return false;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9zdHJpbmcuanM/YmMwMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsaUJBQWlCLEtBQUs7QUFDdEI7O0FBRUE7QUFDQSxrQkFBa0IsS0FBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCOztBQUVsQixpQkFBaUIsa0JBQWtCO0FBQ25DOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1AsT0FBTyx1REFBUTtBQUNmO0FBQ0E7O0FBRUEsTUFBTSx1REFBUTtBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiNzk0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUmVnRXhwLCBpc1N0cmluZyB9IGZyb20gJy4vaXMnO1xuLyoqXG4gKiBUcnVuY2F0ZXMgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBtYXhpbXVtIGNoYXJhY3RlcnMgY291bnRcbiAqXG4gKiBAcGFyYW0gc3RyIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBtYXggTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0cnVuY2F0ZWQgc3RyaW5nICgwID0gdW5saW1pdGVkKVxuICogQHJldHVybnMgc3RyaW5nIEVuY29kZWRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGUoc3RyLCBtYXgpIHtcbiAgaWYgKG1heCA9PT0gdm9pZCAwKSB7XG4gICAgbWF4ID0gMDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCBtYXggPT09IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5sZW5ndGggPD0gbWF4ID8gc3RyIDogc3RyLnN1YnN0cigwLCBtYXgpICsgXCIuLi5cIjtcbn1cbi8qKlxuICogVGhpcyBpcyBiYXNpY2FsbHkganVzdCBgdHJpbV9saW5lYCBmcm9tXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS9ibG9iL21hc3Rlci9zcmMvc2VudHJ5L2xhbmcvamF2YXNjcmlwdC9wcm9jZXNzb3IucHkjTDY3XG4gKlxuICogQHBhcmFtIHN0ciBBbiBvYmplY3QgdGhhdCBjb250YWlucyBzZXJpYWxpemFibGUgdmFsdWVzXG4gKiBAcGFyYW0gbWF4IE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdHJ1bmNhdGVkIHN0cmluZ1xuICogQHJldHVybnMgc3RyaW5nIEVuY29kZWRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc25pcExpbmUobGluZSwgY29sbm8pIHtcbiAgdmFyIG5ld0xpbmUgPSBsaW5lO1xuICB2YXIgbGwgPSBuZXdMaW5lLmxlbmd0aDtcblxuICBpZiAobGwgPD0gMTUwKSB7XG4gICAgcmV0dXJuIG5ld0xpbmU7XG4gIH1cblxuICBpZiAoY29sbm8gPiBsbCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIGNvbG5vID0gbGw7XG4gIH1cblxuICB2YXIgc3RhcnQgPSBNYXRoLm1heChjb2xubyAtIDYwLCAwKTtcblxuICBpZiAoc3RhcnQgPCA1KSB7XG4gICAgc3RhcnQgPSAwO1xuICB9XG5cbiAgdmFyIGVuZCA9IE1hdGgubWluKHN0YXJ0ICsgMTQwLCBsbCk7XG5cbiAgaWYgKGVuZCA+IGxsIC0gNSkge1xuICAgIGVuZCA9IGxsO1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gbGwpIHtcbiAgICBzdGFydCA9IE1hdGgubWF4KGVuZCAtIDE0MCwgMCk7XG4gIH1cblxuICBuZXdMaW5lID0gbmV3TGluZS5zbGljZShzdGFydCwgZW5kKTtcblxuICBpZiAoc3RhcnQgPiAwKSB7XG4gICAgbmV3TGluZSA9IFwiJ3tzbmlwfSBcIiArIG5ld0xpbmU7XG4gIH1cblxuICBpZiAoZW5kIDwgbGwpIHtcbiAgICBuZXdMaW5lICs9ICcge3NuaXB9JztcbiAgfVxuXG4gIHJldHVybiBuZXdMaW5lO1xufVxuLyoqXG4gKiBKb2luIHZhbHVlcyBpbiBhcnJheVxuICogQHBhcmFtIGlucHV0IGFycmF5IG9mIHZhbHVlcyB0byBiZSBqb2luZWQgdG9nZXRoZXJcbiAqIEBwYXJhbSBkZWxpbWl0ZXIgc3RyaW5nIHRvIGJlIHBsYWNlZCBpbi1iZXR3ZWVuIHZhbHVlc1xuICogQHJldHVybnMgSm9pbmVkIHZhbHVlc1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZUpvaW4oaW5wdXQsIGRlbGltaXRlcikge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIG91dHB1dCA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHZhbHVlID0gaW5wdXRbaV07XG5cbiAgICB0cnkge1xuICAgICAgb3V0cHV0LnB1c2goU3RyaW5nKHZhbHVlKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgb3V0cHV0LnB1c2goJ1t2YWx1ZSBjYW5ub3QgYmUgc2VyaWFsaXplZF0nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0LmpvaW4oZGVsaW1pdGVyKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSB2YWx1ZSBtYXRjaGVzIGEgcmVnZXggb3IgaW5jbHVkZXMgdGhlIHN0cmluZ1xuICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdmFsdWUgdG8gYmUgY2hlY2tlZCBhZ2FpbnN0XG4gKiBAcGFyYW0gcGF0dGVybiBFaXRoZXIgYSByZWdleCBvciBhIHN0cmluZyB0aGF0IG11c3QgYmUgY29udGFpbmVkIGluIHZhbHVlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdQYXR0ZXJuKHZhbHVlLCBwYXR0ZXJuKSB7XG4gIGlmICghaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdCh2YWx1ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YocGF0dGVybikgIT09IC0xO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7940\n")},4712:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Ak\": function() { return /* binding */ supportsFetch; },\n/* harmony export */ \"Du\": function() { return /* binding */ isNativeFetch; },\n/* harmony export */ \"t$\": function() { return /* binding */ supportsNativeFetch; },\n/* harmony export */ \"hv\": function() { return /* binding */ supportsReferrerPolicy; },\n/* harmony export */ \"Bf\": function() { return /* binding */ supportsHistory; }\n/* harmony export */ });\n/* unused harmony exports supportsErrorEvent, supportsDOMError, supportsDOMException, supportsReportingObserver */\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(245);\n/* harmony import */ var _misc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2861);\n\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent('');\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsDOMError() {\n try {\n // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n // 1 argument required, but only 0 present.\n // @ts-ignore It really needs 1 argument, not 0.\n new DOMError('');\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsDOMException() {\n try {\n new DOMException('');\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsFetch() {\n if (!('fetch' in (0,_misc__WEBPACK_IMPORTED_MODULE_0__/* .getGlobalObject */ .Rf)())) {\n return false;\n }\n\n try {\n new Headers();\n new Request('');\n new Response();\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\n\nfunction isNativeFetch(func) {\n return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\n\nfunction supportsNativeFetch() {\n if (!supportsFetch()) {\n return false;\n }\n\n var global = (0,_misc__WEBPACK_IMPORTED_MODULE_0__/* .getGlobalObject */ .Rf)(); // Fast path to avoid DOM I/O\n // eslint-disable-next-line @typescript-eslint/unbound-method\n\n if (isNativeFetch(global.fetch)) {\n return true;\n } // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n // so create a \"pure\" iframe to see if that has native fetch\n\n\n var result = false;\n var doc = global.document; // eslint-disable-next-line deprecation/deprecation\n\n if (doc && typeof doc.createElement === \"function\") {\n try {\n var sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n\n if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n result = isNativeFetch(sandbox.contentWindow.fetch);\n }\n\n doc.head.removeChild(sandbox);\n } catch (err) {\n _logger__WEBPACK_IMPORTED_MODULE_1__/* .logger.warn */ .k.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n }\n }\n\n return result;\n}\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsReportingObserver() {\n return 'ReportingObserver' in getGlobalObject();\n}\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsReferrerPolicy() {\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n if (!supportsFetch()) {\n return false;\n }\n\n try {\n new Request('_', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\n\nfunction supportsHistory() {\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var global = (0,_misc__WEBPACK_IMPORTED_MODULE_0__/* .getGlobalObject */ .Rf)();\n /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n var chrome = global.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n\n var hasHistoryApi = 'history' in global && !!global.history.pushState && !!global.history.replaceState;\n return !isChromePackagedApp && hasHistoryApi;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9zdXBwb3J0cy5qcz82Yzg1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBa0M7QUFDTztBQUN6QztBQUNBO0FBQ0EsSUFBSSx5QkFBeUI7QUFDN0I7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHVCQUF1QjtBQUMzQjtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksMkJBQTJCO0FBQy9CO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBOztBQUVPO0FBQ1AsbUJBQW1CLGdFQUFlO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQLDBDQUEwQyx1QkFBdUI7QUFDakU7QUFDQTtBQUNBO0FBQ0EsSUFBSSwwQkFBMEI7QUFDOUI7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBLGVBQWUsZ0VBQWUsR0FBRztBQUNqQzs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxNQUFNLDhEQUFXO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdDQUFnQztBQUNwQztBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksNkJBQTZCO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxzQkFBc0I7QUFDMUI7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBZTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDcxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJy4vbWlzYyc7XG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBFcnJvckV2ZW50IG9iamVjdHNcbiAqIHtAbGluayBzdXBwb3J0c0Vycm9yRXZlbnR9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzRXJyb3JFdmVudCgpIHtcbiAgdHJ5IHtcbiAgICBuZXcgRXJyb3JFdmVudCgnJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIERPTUVycm9yIG9iamVjdHNcbiAqIHtAbGluayBzdXBwb3J0c0RPTUVycm9yfS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c0RPTUVycm9yKCkge1xuICB0cnkge1xuICAgIC8vIENocm9tZTogVk04OToxIFVuY2F1Z2h0IFR5cGVFcnJvcjogRmFpbGVkIHRvIGNvbnN0cnVjdCAnRE9NRXJyb3InOlxuICAgIC8vIDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC5cbiAgICAvLyBAdHMtaWdub3JlIEl0IHJlYWxseSBuZWVkcyAxIGFyZ3VtZW50LCBub3QgMC5cbiAgICBuZXcgRE9NRXJyb3IoJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBET01FeGNlcHRpb24gb2JqZWN0c1xuICoge0BsaW5rIHN1cHBvcnRzRE9NRXhjZXB0aW9ufS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c0RPTUV4Y2VwdGlvbigpIHtcbiAgdHJ5IHtcbiAgICBuZXcgRE9NRXhjZXB0aW9uKCcnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgRmV0Y2ggQVBJXG4gKiB7QGxpbmsgc3VwcG9ydHNGZXRjaH0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNGZXRjaCgpIHtcbiAgaWYgKCEoJ2ZldGNoJyBpbiBnZXRHbG9iYWxPYmplY3QoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIG5ldyBIZWFkZXJzKCk7XG4gICAgbmV3IFJlcXVlc3QoJycpO1xuICAgIG5ldyBSZXNwb25zZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIGlzTmF0aXZlRmV0Y2ggY2hlY2tzIGlmIHRoZSBnaXZlbiBmdW5jdGlvbiBpcyBhIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBmZXRjaCgpXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBpc05hdGl2ZUZldGNoKGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmMgJiYgL15mdW5jdGlvbiBmZXRjaFxcKFxcKVxccytcXHtcXHMrXFxbbmF0aXZlIGNvZGVcXF1cXHMrXFx9JC8udGVzdChmdW5jLnRvU3RyaW5nKCkpO1xufVxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgRmV0Y2ggQVBJIG5hdGl2ZWx5XG4gKiB7QGxpbmsgc3VwcG9ydHNOYXRpdmVGZXRjaH0uXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiBgd2luZG93LmZldGNoYCBpcyBuYXRpdmVseSBpbXBsZW1lbnRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzTmF0aXZlRmV0Y2goKSB7XG4gIGlmICghc3VwcG9ydHNGZXRjaCgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpOyAvLyBGYXN0IHBhdGggdG8gYXZvaWQgRE9NIEkvT1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG5cbiAgaWYgKGlzTmF0aXZlRmV0Y2goZ2xvYmFsLmZldGNoKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIHdpbmRvdy5mZXRjaCBpcyBpbXBsZW1lbnRlZCwgYnV0IGlzIHBvbHlmaWxsZWQgb3IgYWxyZWFkeSB3cmFwcGVkIChlLmc6IGJ5IGEgY2hyb21lIGV4dGVuc2lvbilcbiAgLy8gc28gY3JlYXRlIGEgXCJwdXJlXCIgaWZyYW1lIHRvIHNlZSBpZiB0aGF0IGhhcyBuYXRpdmUgZmV0Y2hcblxuXG4gIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG5cbiAgaWYgKGRvYyAmJiB0eXBlb2YgZG9jLmNyZWF0ZUVsZW1lbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgc2FuZGJveCA9IGRvYy5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgIHNhbmRib3guaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKHNhbmRib3gpO1xuXG4gICAgICBpZiAoc2FuZGJveC5jb250ZW50V2luZG93ICYmIHNhbmRib3guY29udGVudFdpbmRvdy5mZXRjaCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgIHJlc3VsdCA9IGlzTmF0aXZlRmV0Y2goc2FuZGJveC5jb250ZW50V2luZG93LmZldGNoKTtcbiAgICAgIH1cblxuICAgICAgZG9jLmhlYWQucmVtb3ZlQ2hpbGQoc2FuZGJveCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IGNyZWF0ZSBzYW5kYm94IGlmcmFtZSBmb3IgcHVyZSBmZXRjaCBjaGVjaywgYmFpbGluZyB0byB3aW5kb3cuZmV0Y2g6ICcsIGVycik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIFJlcG9ydGluZ09ic2VydmVyIEFQSVxuICoge0BsaW5rIHN1cHBvcnRzUmVwb3J0aW5nT2JzZXJ2ZXJ9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzUmVwb3J0aW5nT2JzZXJ2ZXIoKSB7XG4gIHJldHVybiAnUmVwb3J0aW5nT2JzZXJ2ZXInIGluIGdldEdsb2JhbE9iamVjdCgpO1xufVxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgUmVmZXJyZXIgUG9saWN5IEFQSVxuICoge0BsaW5rIHN1cHBvcnRzUmVmZXJyZXJQb2xpY3l9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzUmVmZXJyZXJQb2xpY3koKSB7XG4gIC8vIERlc3BpdGUgYWxsIHN0YXJzIGluIHRoZSBza3kgc2F5aW5nIHRoYXQgRWRnZSBzdXBwb3J0cyBvbGQgZHJhZnQgc3ludGF4LCBha2EgJ25ldmVyJywgJ2Fsd2F5cycsICdvcmlnaW4nIGFuZCAnZGVmYXVsdFxuICAvLyBodHRwczovL2Nhbml1c2UuY29tLyNmZWF0PXJlZmVycmVyLXBvbGljeVxuICAvLyBJdCBkb2Vzbid0LiBBbmQgaXQgdGhyb3cgZXhjZXB0aW9uIGluc3RlYWQgb2YgaWdub3JpbmcgdGhpcyBwYXJhbWV0ZXIuLi5cbiAgLy8gUkVGOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3JhdmVuLWpzL2lzc3Vlcy8xMjMzXG4gIGlmICghc3VwcG9ydHNGZXRjaCgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBuZXcgUmVxdWVzdCgnXycsIHtcbiAgICAgIHJlZmVycmVyUG9saWN5OiAnb3JpZ2luJ1xuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBIaXN0b3J5IEFQSVxuICoge0BsaW5rIHN1cHBvcnRzSGlzdG9yeX0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNIaXN0b3J5KCkge1xuICAvLyBOT1RFOiBpbiBDaHJvbWUgQXBwIGVudmlyb25tZW50LCB0b3VjaGluZyBoaXN0b3J5LnB1c2hTdGF0ZSwgKmV2ZW4gaW5zaWRlXG4gIC8vICAgICAgIGEgdHJ5L2NhdGNoIGJsb2NrKiwgd2lsbCBjYXVzZSBDaHJvbWUgdG8gb3V0cHV0IGFuIGVycm9yIHRvIGNvbnNvbGUuZXJyb3JcbiAgLy8gYm9ycm93ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9wdWxsLzEzOTQ1L2ZpbGVzXG4gIHZhciBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3QoKTtcbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cbiAgdmFyIGNocm9tZSA9IGdsb2JhbC5jaHJvbWU7XG4gIHZhciBpc0Nocm9tZVBhY2thZ2VkQXBwID0gY2hyb21lICYmIGNocm9tZS5hcHAgJiYgY2hyb21lLmFwcC5ydW50aW1lO1xuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuXG4gIHZhciBoYXNIaXN0b3J5QXBpID0gJ2hpc3RvcnknIGluIGdsb2JhbCAmJiAhIWdsb2JhbC5oaXN0b3J5LnB1c2hTdGF0ZSAmJiAhIWdsb2JhbC5oaXN0b3J5LnJlcGxhY2VTdGF0ZTtcbiAgcmV0dXJuICFpc0Nocm9tZVBhY2thZ2VkQXBwICYmIGhhc0hpc3RvcnlBcGk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4712\n")},5370:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "c": function() { return /* binding */ SyncPromise; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7727);\n/* harmony import */ var core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _is__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2684);\n\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\n/* eslint-disable @typescript-eslint/typedef */\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** SyncPromise internal states */\n\nvar States;\n\n(function (States) {\n /** Pending */\n States["PENDING"] = "PENDING";\n /** Resolved / OK */\n\n States["RESOLVED"] = "RESOLVED";\n /** Rejected / Error */\n\n States["REJECTED"] = "REJECTED";\n})(States || (States = {}));\n/**\n * Thenable class that behaves like a Promise and follows it\'s interface\n * but is not async internally\n */\n\n\nvar SyncPromise =\n/** @class */\nfunction () {\n function SyncPromise(executor) {\n var _this = this;\n\n this._state = States.PENDING;\n this._handlers = [];\n /** JSDoc */\n\n this._resolve = function (value) {\n _this._setResult(States.RESOLVED, value);\n };\n /** JSDoc */\n\n\n this._reject = function (reason) {\n _this._setResult(States.REJECTED, reason);\n };\n /** JSDoc */\n\n\n this._setResult = function (state, value) {\n if (_this._state !== States.PENDING) {\n return;\n }\n\n if ((0,_is__WEBPACK_IMPORTED_MODULE_1__/* .isThenable */ .J8)(value)) {\n void value.then(_this._resolve, _this._reject);\n return;\n }\n\n _this._state = state;\n _this._value = value;\n\n _this._executeHandlers();\n }; // TODO: FIXME\n\n /** JSDoc */\n\n\n this._attachHandler = function (handler) {\n _this._handlers = _this._handlers.concat(handler);\n\n _this._executeHandlers();\n };\n /** JSDoc */\n\n\n this._executeHandlers = function () {\n if (_this._state === States.PENDING) {\n return;\n }\n\n var cachedHandlers = _this._handlers.slice();\n\n _this._handlers = [];\n cachedHandlers.forEach(function (handler) {\n if (handler.done) {\n return;\n }\n\n if (_this._state === States.RESOLVED) {\n if (handler.onfulfilled) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n handler.onfulfilled(_this._value);\n }\n }\n\n if (_this._state === States.REJECTED) {\n if (handler.onrejected) {\n handler.onrejected(_this._value);\n }\n }\n\n handler.done = true;\n });\n };\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n /** JSDoc */\n\n\n SyncPromise.resolve = function (value) {\n return new SyncPromise(function (resolve) {\n resolve(value);\n });\n };\n /** JSDoc */\n\n\n SyncPromise.reject = function (reason) {\n return new SyncPromise(function (_, reject) {\n reject(reason);\n });\n };\n /** JSDoc */\n\n\n SyncPromise.all = function (collection) {\n return new SyncPromise(function (resolve, reject) {\n if (!Array.isArray(collection)) {\n reject(new TypeError("Promise.all requires an array as input."));\n return;\n }\n\n if (collection.length === 0) {\n resolve([]);\n return;\n }\n\n var counter = collection.length;\n var resolvedCollection = [];\n collection.forEach(function (item, index) {\n void SyncPromise.resolve(item).then(function (value) {\n resolvedCollection[index] = value;\n counter -= 1;\n\n if (counter !== 0) {\n return;\n }\n\n resolve(resolvedCollection);\n }).then(null, reject);\n });\n });\n };\n /** JSDoc */\n\n\n SyncPromise.prototype.then = function (_onfulfilled, _onrejected) {\n var _this = this;\n\n return new SyncPromise(function (resolve, reject) {\n _this._attachHandler({\n done: false,\n onfulfilled: function onfulfilled(result) {\n if (!_onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result);\n return;\n }\n\n try {\n resolve(_onfulfilled(result));\n return;\n } catch (e) {\n reject(e);\n return;\n }\n },\n onrejected: function onrejected(reason) {\n if (!_onrejected) {\n reject(reason);\n return;\n }\n\n try {\n resolve(_onrejected(reason));\n return;\n } catch (e) {\n reject(e);\n return;\n }\n }\n });\n });\n };\n /** JSDoc */\n\n\n SyncPromise.prototype.catch = function (onrejected) {\n return this.then(function (val) {\n return val;\n }, onrejected);\n };\n /** JSDoc */\n\n\n SyncPromise.prototype.finally = function (onfinally) {\n var _this = this;\n\n return new SyncPromise(function (resolve, reject) {\n var val;\n var isRejected;\n return _this.then(function (value) {\n isRejected = false;\n val = value;\n\n if (onfinally) {\n onfinally();\n }\n }, function (reason) {\n isRejected = true;\n val = reason;\n\n if (onfinally) {\n onfinally();\n }\n }).then(function () {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val);\n });\n });\n };\n /** JSDoc */\n\n\n SyncPromise.prototype.toString = function () {\n return \'[object SyncPromise]\';\n };\n\n return SyncPromise;\n}();\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS9zeW5jcHJvbWlzZS5qcz8yMTI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUErQzs7QUFFL0M7O0FBRUE7O0FBRUE7O0FBRUE7QUFDa0M7QUFDbEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUMsd0JBQXdCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUseURBQVU7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOztBQUVOOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDIiwiZmlsZSI6IjUzNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5LmpzXCI7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZWRlZiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IGlzVGhlbmFibGUgfSBmcm9tICcuL2lzJztcbi8qKiBTeW5jUHJvbWlzZSBpbnRlcm5hbCBzdGF0ZXMgKi9cblxudmFyIFN0YXRlcztcblxuKGZ1bmN0aW9uIChTdGF0ZXMpIHtcbiAgLyoqIFBlbmRpbmcgKi9cbiAgU3RhdGVzW1wiUEVORElOR1wiXSA9IFwiUEVORElOR1wiO1xuICAvKiogUmVzb2x2ZWQgLyBPSyAqL1xuXG4gIFN0YXRlc1tcIlJFU09MVkVEXCJdID0gXCJSRVNPTFZFRFwiO1xuICAvKiogUmVqZWN0ZWQgLyBFcnJvciAqL1xuXG4gIFN0YXRlc1tcIlJFSkVDVEVEXCJdID0gXCJSRUpFQ1RFRFwiO1xufSkoU3RhdGVzIHx8IChTdGF0ZXMgPSB7fSkpO1xuLyoqXG4gKiBUaGVuYWJsZSBjbGFzcyB0aGF0IGJlaGF2ZXMgbGlrZSBhIFByb21pc2UgYW5kIGZvbGxvd3MgaXQncyBpbnRlcmZhY2VcbiAqIGJ1dCBpcyBub3QgYXN5bmMgaW50ZXJuYWxseVxuICovXG5cblxudmFyIFN5bmNQcm9taXNlID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3luY1Byb21pc2UoZXhlY3V0b3IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5fc3RhdGUgPSBTdGF0ZXMuUEVORElORztcbiAgICB0aGlzLl9oYW5kbGVycyA9IFtdO1xuICAgIC8qKiBKU0RvYyAqL1xuXG4gICAgdGhpcy5fcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgX3RoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVTT0xWRUQsIHZhbHVlKTtcbiAgICB9O1xuICAgIC8qKiBKU0RvYyAqL1xuXG5cbiAgICB0aGlzLl9yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBfdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRUpFQ1RFRCwgcmVhc29uKTtcbiAgICB9O1xuICAgIC8qKiBKU0RvYyAqL1xuXG5cbiAgICB0aGlzLl9zZXRSZXN1bHQgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlKSB7XG4gICAgICBpZiAoX3RoaXMuX3N0YXRlICE9PSBTdGF0ZXMuUEVORElORykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgICB2b2lkIHZhbHVlLnRoZW4oX3RoaXMuX3Jlc29sdmUsIF90aGlzLl9yZWplY3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLl9zdGF0ZSA9IHN0YXRlO1xuICAgICAgX3RoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICAgIF90aGlzLl9leGVjdXRlSGFuZGxlcnMoKTtcbiAgICB9OyAvLyBUT0RPOiBGSVhNRVxuXG4gICAgLyoqIEpTRG9jICovXG5cblxuICAgIHRoaXMuX2F0dGFjaEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgX3RoaXMuX2hhbmRsZXJzID0gX3RoaXMuX2hhbmRsZXJzLmNvbmNhdChoYW5kbGVyKTtcblxuICAgICAgX3RoaXMuX2V4ZWN1dGVIYW5kbGVycygpO1xuICAgIH07XG4gICAgLyoqIEpTRG9jICovXG5cblxuICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5fc3RhdGUgPT09IFN0YXRlcy5QRU5ESU5HKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNhY2hlZEhhbmRsZXJzID0gX3RoaXMuX2hhbmRsZXJzLnNsaWNlKCk7XG5cbiAgICAgIF90aGlzLl9oYW5kbGVycyA9IFtdO1xuICAgICAgY2FjaGVkSGFuZGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICBpZiAoaGFuZGxlci5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF90aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlJFU09MVkVEKSB7XG4gICAgICAgICAgaWYgKGhhbmRsZXIub25mdWxmaWxsZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgICAgIGhhbmRsZXIub25mdWxmaWxsZWQoX3RoaXMuX3ZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX3RoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVKRUNURUQpIHtcbiAgICAgICAgICBpZiAoaGFuZGxlci5vbnJlamVjdGVkKSB7XG4gICAgICAgICAgICBoYW5kbGVyLm9ucmVqZWN0ZWQoX3RoaXMuX3ZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVyLmRvbmUgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcih0aGlzLl9yZXNvbHZlLCB0aGlzLl9yZWplY3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3JlamVjdChlKTtcbiAgICB9XG4gIH1cbiAgLyoqIEpTRG9jICovXG5cblxuICBTeW5jUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfSk7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgU3luY1Byb21pc2UucmVqZWN0ID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoZnVuY3Rpb24gKF8sIHJlamVjdCkge1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSk7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgU3luY1Byb21pc2UuYWxsID0gZnVuY3Rpb24gKGNvbGxlY3Rpb24pIHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcihcIlByb21pc2UuYWxsIHJlcXVpcmVzIGFuIGFycmF5IGFzIGlucHV0LlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjb3VudGVyID0gY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICB2YXIgcmVzb2x2ZWRDb2xsZWN0aW9uID0gW107XG4gICAgICBjb2xsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHZvaWQgU3luY1Byb21pc2UucmVzb2x2ZShpdGVtKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHJlc29sdmVkQ29sbGVjdGlvbltpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICBjb3VudGVyIC09IDE7XG5cbiAgICAgICAgICBpZiAoY291bnRlciAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUocmVzb2x2ZWRDb2xsZWN0aW9uKTtcbiAgICAgICAgfSkudGhlbihudWxsLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgU3luY1Byb21pc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAoX29uZnVsZmlsbGVkLCBfb25yZWplY3RlZCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIF90aGlzLl9hdHRhY2hIYW5kbGVyKHtcbiAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgIG9uZnVsZmlsbGVkOiBmdW5jdGlvbiBvbmZ1bGZpbGxlZChyZXN1bHQpIHtcbiAgICAgICAgICBpZiAoIV9vbmZ1bGZpbGxlZCkge1xuICAgICAgICAgICAgLy8gVE9ETzogwq9cXF8o44OEKV8vwq9cbiAgICAgICAgICAgIC8vIFRPRE86IEZJWE1FXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc29sdmUoX29uZnVsZmlsbGVkKHJlc3VsdCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9ucmVqZWN0ZWQ6IGZ1bmN0aW9uIG9ucmVqZWN0ZWQocmVhc29uKSB7XG4gICAgICAgICAgaWYgKCFfb25yZWplY3RlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc29sdmUoX29ucmVqZWN0ZWQocmVhc29uKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgU3luY1Byb21pc2UucHJvdG90eXBlLmNhdGNoID0gZnVuY3Rpb24gKG9ucmVqZWN0ZWQpIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSwgb25yZWplY3RlZCk7XG4gIH07XG4gIC8qKiBKU0RvYyAqL1xuXG5cbiAgU3luY1Byb21pc2UucHJvdG90eXBlLmZpbmFsbHkgPSBmdW5jdGlvbiAob25maW5hbGx5KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHZhbDtcbiAgICAgIHZhciBpc1JlamVjdGVkO1xuICAgICAgcmV0dXJuIF90aGlzLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlzUmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKG9uZmluYWxseSkge1xuICAgICAgICAgIG9uZmluYWxseSgpO1xuICAgICAgICB9XG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIGlzUmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICB2YWwgPSByZWFzb247XG5cbiAgICAgICAgaWYgKG9uZmluYWxseSkge1xuICAgICAgICAgIG9uZmluYWxseSgpO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzUmVqZWN0ZWQpIHtcbiAgICAgICAgICByZWplY3QodmFsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKHZhbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgLyoqIEpTRG9jICovXG5cblxuICBTeW5jUHJvbWlzZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0IFN5bmNQcm9taXNlXSc7XG4gIH07XG5cbiAgcmV0dXJuIFN5bmNQcm9taXNlO1xufSgpO1xuXG5leHBvcnQgeyBTeW5jUHJvbWlzZSB9OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5370\n')},5153:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"yW\": function() { return /* binding */ dateTimestampInSeconds; },\n/* harmony export */ \"ph\": function() { return /* binding */ timestampInSeconds; },\n/* harmony export */ \"_I\": function() { return /* binding */ timestampWithMs; },\n/* harmony export */ \"Z1\": function() { return /* binding */ browserPerformanceTimeOrigin; }\n/* harmony export */ });\n/* unused harmony exports usingPerformanceAPI, _browserPerformanceTimeOriginMode */\n/* harmony import */ var _misc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2861);\n/* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7864);\n/* module decorator */ module = __webpack_require__.hmd(module);\n\n\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\n\nvar dateTimestampSource = {\n nowSeconds: function nowSeconds() {\n return Date.now() / 1000;\n }\n};\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\n\nfunction getBrowserPerformance() {\n var performance = (0,_misc__WEBPACK_IMPORTED_MODULE_0__/* .getGlobalObject */ .Rf)().performance;\n\n if (!performance || !performance.now) {\n return undefined;\n } // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n //\n // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n // performance.now() gives a date arbitrarily in the past.\n //\n // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n // undefined.\n //\n // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n // interact with data coming out of performance entries.\n //\n // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n // observed skews that can be as long as days, weeks or months.\n //\n // See https://github.com/getsentry/sentry-javascript/issues/2590.\n //\n // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n // transactions of long-lived web pages.\n\n\n var timeOrigin = Date.now() - performance.now();\n return {\n now: function now() {\n return performance.now();\n },\n timeOrigin: timeOrigin\n };\n}\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\n\n\nfunction getNodePerformance() {\n try {\n var perfHooks = (0,_node__WEBPACK_IMPORTED_MODULE_1__/* .dynamicRequire */ .l$)(module, 'perf_hooks');\n return perfHooks.performance;\n } catch (_) {\n return undefined;\n }\n}\n/**\n * The Performance API implementation for the current platform, if available.\n */\n\n\nvar platformPerformance = (0,_node__WEBPACK_IMPORTED_MODULE_1__/* .isNodeEnv */ .KV)() ? getNodePerformance() : getBrowserPerformance();\nvar timestampSource = platformPerformance === undefined ? dateTimestampSource : {\n nowSeconds: function nowSeconds() {\n return (platformPerformance.timeOrigin + platformPerformance.now()) / 1000;\n }\n};\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\n\nvar dateTimestampInSeconds = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * See `usingPerformanceAPI` to test whether the Performance API is used.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\n\nvar timestampInSeconds = timestampSource.nowSeconds.bind(timestampSource); // Re-exported with an old name for backwards-compatibility.\n\nvar timestampWithMs = timestampInSeconds;\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\n\nvar usingPerformanceAPI = platformPerformance !== undefined;\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\n\nvar _browserPerformanceTimeOriginMode;\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\n\nvar browserPerformanceTimeOrigin = function () {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n var performance = (0,_misc__WEBPACK_IMPORTED_MODULE_0__/* .getGlobalObject */ .Rf)().performance;\n\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n var threshold = 3600 * 1000;\n var performanceNow = performance.now();\n var dateNow = Date.now(); // if timeOrigin isn't available set delta to threshold so it isn't used\n\n var timeOriginDelta = performance.timeOrigin ? Math.abs(performance.timeOrigin + performanceNow - dateNow) : threshold;\n var timeOriginIsReliable = timeOriginDelta < threshold; // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n\n var navigationStart = performance.timing && performance.timing.navigationStart;\n var hasNavigationStart = typeof navigationStart === 'number'; // if navigationStart isn't available set delta to threshold so it isn't used\n\n var navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n var navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n } // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n\n\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL2VzbS90aW1lLmpzPzNlOTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUF5QztBQUNVO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsZ0VBQWU7O0FBRW5DO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxvQkFBb0IsK0RBQWM7QUFDbEM7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSwwQkFBMEIsMERBQVM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU8sMEVBQTBFOztBQUUxRTtBQUNQO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGdFQUFlOztBQUVuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0RBQStEOztBQUUvRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNTE1My5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJy4vbWlzYyc7XG5pbXBvcnQgeyBkeW5hbWljUmVxdWlyZSwgaXNOb2RlRW52IH0gZnJvbSAnLi9ub2RlJztcbi8qKlxuICogQSBUaW1lc3RhbXBTb3VyY2UgaW1wbGVtZW50YXRpb24gZm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZSBQZXJmb3JtYW5jZSBXZWIgQVBJIG5hdGl2ZWx5LlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIFRpbWVzdGFtcFNvdXJjZSBkb2VzIG5vdCB1c2UgYSBtb25vdG9uaWMgY2xvY2suIEEgY2FsbCB0byBgbm93U2Vjb25kc2AgbWF5IHJldHVybiBhIHRpbWVzdGFtcCBlYXJsaWVyXG4gKiB0aGFuIGEgcHJldmlvdXNseSByZXR1cm5lZCB2YWx1ZS4gV2UgZG8gbm90IHRyeSB0byBlbXVsYXRlIGEgbW9ub3RvbmljIGJlaGF2aW9yIGluIG9yZGVyIHRvIGZhY2lsaXRhdGUgZGVidWdnaW5nLiBJdFxuICogaXMgbW9yZSBvYnZpb3VzIHRvIGV4cGxhaW4gXCJ3aHkgZG9lcyBteSBzcGFuIGhhdmUgbmVnYXRpdmUgZHVyYXRpb25cIiB0aGFuIFwid2h5IG15IHNwYW5zIGhhdmUgemVybyBkdXJhdGlvblwiLlxuICovXG5cbnZhciBkYXRlVGltZXN0YW1wU291cmNlID0ge1xuICBub3dTZWNvbmRzOiBmdW5jdGlvbiBub3dTZWNvbmRzKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC8gMTAwMDtcbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBuYXRpdmUgUGVyZm9ybWFuY2UgQVBJIGJyb3dzZXIgaW1wbGVtZW50YXRpb24sIG9yIHVuZGVmaW5lZCBmb3IgYnJvd3NlcnMgdGhhdCBkbyBub3RcbiAqIHN1cHBvcnQgdGhlIEFQSS5cbiAqXG4gKiBXcmFwcGluZyB0aGUgbmF0aXZlIEFQSSB3b3JrcyBhcm91bmQgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgZnJvbSBkaWZmZXJlbnQgYnJvd3NlcnMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0QnJvd3NlclBlcmZvcm1hbmNlKCkge1xuICB2YXIgcGVyZm9ybWFuY2UgPSBnZXRHbG9iYWxPYmplY3QoKS5wZXJmb3JtYW5jZTtcblxuICBpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJmb3JtYW5jZS5ub3cpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IC8vIFJlcGxhY2UgcGVyZm9ybWFuY2UudGltZU9yaWdpbiB3aXRoIG91ciBvd24gdGltZU9yaWdpbiBiYXNlZCBvbiBEYXRlLm5vdygpLlxuICAvL1xuICAvLyBUaGlzIGlzIGEgcGFydGlhbCB3b3JrYXJvdW5kIGZvciBicm93c2VycyByZXBvcnRpbmcgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBzdWNoIHRoYXQgcGVyZm9ybWFuY2UudGltZU9yaWdpbiArXG4gIC8vIHBlcmZvcm1hbmNlLm5vdygpIGdpdmVzIGEgZGF0ZSBhcmJpdHJhcmlseSBpbiB0aGUgcGFzdC5cbiAgLy9cbiAgLy8gQWRkaXRpb25hbGx5LCBjb21wdXRpbmcgdGltZU9yaWdpbiBpbiB0aGlzIHdheSBmaWxscyB0aGUgZ2FwIGZvciBicm93c2VycyB3aGVyZSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIGlzXG4gIC8vIHVuZGVmaW5lZC5cbiAgLy9cbiAgLy8gVGhlIGFzc3VtcHRpb24gdGhhdCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCkgfj0gRGF0ZS5ub3coKSBpcyBmbGF3ZWQsIGJ1dCB3ZSBkZXBlbmQgb24gaXQgdG9cbiAgLy8gaW50ZXJhY3Qgd2l0aCBkYXRhIGNvbWluZyBvdXQgb2YgcGVyZm9ybWFuY2UgZW50cmllcy5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IGRlc3BpdGUgcmVjb21tZW5kYXRpb25zIGFnYWluc3QgaXQgaW4gdGhlIHNwZWMsIGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJIHdpdGggYSBjbG9jayB0aGF0XG4gIC8vIG1pZ2h0IHN0b3Agd2hlbiB0aGUgY29tcHV0ZXIgaXMgYXNsZWVwIChhbmQgcGVyaGFwcyB1bmRlciBvdGhlciBjaXJjdW1zdGFuY2VzKS4gU3VjaCBiZWhhdmlvciBjYXVzZXNcbiAgLy8gcGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlLm5vdygpIHRvIGhhdmUgYW4gYXJiaXRyYXJ5IHNrZXcgb3ZlciBEYXRlLm5vdygpLiBJbiBsYXB0b3AgY29tcHV0ZXJzLCB3ZSBoYXZlXG4gIC8vIG9ic2VydmVkIHNrZXdzIHRoYXQgY2FuIGJlIGFzIGxvbmcgYXMgZGF5cywgd2Vla3Mgb3IgbW9udGhzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMjU5MC5cbiAgLy9cbiAgLy8gQlVHOiBkZXNwaXRlIG91ciBiZXN0IGludGVudGlvbnMsIHRoaXMgd29ya2Fyb3VuZCBoYXMgaXRzIGxpbWl0YXRpb25zLiBJdCBtb3N0bHkgYWRkcmVzc2VzIHRpbWluZ3Mgb2YgcGFnZWxvYWRcbiAgLy8gdHJhbnNhY3Rpb25zLCBidXQgaWdub3JlcyB0aGUgc2tldyBidWlsdCB1cCBvdmVyIHRpbWUgdGhhdCBjYW4gYXZlcnNlbHkgYWZmZWN0IHRpbWVzdGFtcHMgb2YgbmF2aWdhdGlvblxuICAvLyB0cmFuc2FjdGlvbnMgb2YgbG9uZy1saXZlZCB3ZWIgcGFnZXMuXG5cblxuICB2YXIgdGltZU9yaWdpbiA9IERhdGUubm93KCkgLSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgcmV0dXJuIHtcbiAgICBub3c6IGZ1bmN0aW9uIG5vdygpIHtcbiAgICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB9LFxuICAgIHRpbWVPcmlnaW46IHRpbWVPcmlnaW5cbiAgfTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgbmF0aXZlIFBlcmZvcm1hbmNlIEFQSSBpbXBsZW1lbnRhdGlvbiBmcm9tIE5vZGUuanMuIFJldHVybnMgdW5kZWZpbmVkIGluIG9sZCBOb2RlLmpzIHZlcnNpb25zIHRoYXQgZG9uJ3RcbiAqIGltcGxlbWVudCB0aGUgQVBJLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0Tm9kZVBlcmZvcm1hbmNlKCkge1xuICB0cnkge1xuICAgIHZhciBwZXJmSG9va3MgPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsICdwZXJmX2hvb2tzJyk7XG4gICAgcmV0dXJuIHBlcmZIb29rcy5wZXJmb3JtYW5jZTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbi8qKlxuICogVGhlIFBlcmZvcm1hbmNlIEFQSSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0sIGlmIGF2YWlsYWJsZS5cbiAqL1xuXG5cbnZhciBwbGF0Zm9ybVBlcmZvcm1hbmNlID0gaXNOb2RlRW52KCkgPyBnZXROb2RlUGVyZm9ybWFuY2UoKSA6IGdldEJyb3dzZXJQZXJmb3JtYW5jZSgpO1xudmFyIHRpbWVzdGFtcFNvdXJjZSA9IHBsYXRmb3JtUGVyZm9ybWFuY2UgPT09IHVuZGVmaW5lZCA/IGRhdGVUaW1lc3RhbXBTb3VyY2UgOiB7XG4gIG5vd1NlY29uZHM6IGZ1bmN0aW9uIG5vd1NlY29uZHMoKSB7XG4gICAgcmV0dXJuIChwbGF0Zm9ybVBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwbGF0Zm9ybVBlcmZvcm1hbmNlLm5vdygpKSAvIDEwMDA7XG4gIH1cbn07XG4vKipcbiAqIFJldHVybnMgYSB0aW1lc3RhbXAgaW4gc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaCB1c2luZyB0aGUgRGF0ZSBBUEkuXG4gKi9cblxuZXhwb3J0IHZhciBkYXRlVGltZXN0YW1wSW5TZWNvbmRzID0gZGF0ZVRpbWVzdGFtcFNvdXJjZS5ub3dTZWNvbmRzLmJpbmQoZGF0ZVRpbWVzdGFtcFNvdXJjZSk7XG4vKipcbiAqIFJldHVybnMgYSB0aW1lc3RhbXAgaW4gc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaCB1c2luZyBlaXRoZXIgdGhlIFBlcmZvcm1hbmNlIG9yIERhdGUgQVBJcywgZGVwZW5kaW5nIG9uIHRoZVxuICogYXZhaWxhYmlsaXR5IG9mIHRoZSBQZXJmb3JtYW5jZSBBUEkuXG4gKlxuICogU2VlIGB1c2luZ1BlcmZvcm1hbmNlQVBJYCB0byB0ZXN0IHdoZXRoZXIgdGhlIFBlcmZvcm1hbmNlIEFQSSBpcyB1c2VkLlxuICpcbiAqIEJVRzogTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93IGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJLCB0aGUgY2xvY2sgbWlnaHQgc3RvcCB3aGVuIHRoZSBjb21wdXRlciBpc1xuICogYXNsZWVwLiBUaGlzIGNyZWF0ZXMgYSBza2V3IGJldHdlZW4gYGRhdGVUaW1lc3RhbXBJblNlY29uZHNgIGFuZCBgdGltZXN0YW1wSW5TZWNvbmRzYC4gVGhlXG4gKiBza2V3IGNhbiBncm93IHRvIGFyYml0cmFyeSBhbW91bnRzIGxpa2UgZGF5cywgd2Vla3Mgb3IgbW9udGhzLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAuXG4gKi9cblxuZXhwb3J0IHZhciB0aW1lc3RhbXBJblNlY29uZHMgPSB0aW1lc3RhbXBTb3VyY2Uubm93U2Vjb25kcy5iaW5kKHRpbWVzdGFtcFNvdXJjZSk7IC8vIFJlLWV4cG9ydGVkIHdpdGggYW4gb2xkIG5hbWUgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LlxuXG5leHBvcnQgdmFyIHRpbWVzdGFtcFdpdGhNcyA9IHRpbWVzdGFtcEluU2Vjb25kcztcbi8qKlxuICogQSBib29sZWFuIHRoYXQgaXMgdHJ1ZSB3aGVuIHRpbWVzdGFtcEluU2Vjb25kcyB1c2VzIHRoZSBQZXJmb3JtYW5jZSBBUEkgdG8gcHJvZHVjZSBtb25vdG9uaWMgdGltZXN0YW1wcy5cbiAqL1xuXG5leHBvcnQgdmFyIHVzaW5nUGVyZm9ybWFuY2VBUEkgPSBwbGF0Zm9ybVBlcmZvcm1hbmNlICE9PSB1bmRlZmluZWQ7XG4vKipcbiAqIEludGVybmFsIGhlbHBlciB0byBzdG9yZSB3aGF0IGlzIHRoZSBzb3VyY2Ugb2YgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiBiZWxvdy4gRm9yIGRlYnVnZ2luZyBvbmx5LlxuICovXG5cbmV4cG9ydCB2YXIgX2Jyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW5Nb2RlO1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC4gVGhpcyB2YWx1ZSBpcyBvbmx5IHVzYWJsZSBpbiBhIGJyb3dzZXIsIGFuZCBvbmx5IHdoZW4gdGhlXG4gKiBwZXJmb3JtYW5jZSBBUEkgaXMgYXZhaWxhYmxlLlxuICovXG5cbmV4cG9ydCB2YXIgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVW5mb3J0dW5hdGVseSBicm93c2VycyBtYXkgcmVwb3J0IGFuIGluYWNjdXJhdGUgdGltZSBvcmlnaW4gZGF0YSwgdGhyb3VnaCBlaXRoZXIgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBvclxuICAvLyBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LCB3aGljaCByZXN1bHRzIGluIHBvb3IgcmVzdWx0cyBpbiBwZXJmb3JtYW5jZSBkYXRhLiBXZSBvbmx5IHRyZWF0IHRpbWUgb3JpZ2luXG4gIC8vIGRhdGEgYXMgcmVsaWFibGUgaWYgdGhleSBhcmUgd2l0aGluIGEgcmVhc29uYWJsZSB0aHJlc2hvbGQgb2YgdGhlIGN1cnJlbnQgdGltZS5cbiAgdmFyIHBlcmZvcm1hbmNlID0gZ2V0R2xvYmFsT2JqZWN0KCkucGVyZm9ybWFuY2U7XG5cbiAgaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7XG4gICAgX2Jyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW5Nb2RlID0gJ25vbmUnO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgdGhyZXNob2xkID0gMzYwMCAqIDEwMDA7XG4gIHZhciBwZXJmb3JtYW5jZU5vdyA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICB2YXIgZGF0ZU5vdyA9IERhdGUubm93KCk7IC8vIGlmIHRpbWVPcmlnaW4gaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZFxuXG4gIHZhciB0aW1lT3JpZ2luRGVsdGEgPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luID8gTWF0aC5hYnMocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlTm93IC0gZGF0ZU5vdykgOiB0aHJlc2hvbGQ7XG4gIHZhciB0aW1lT3JpZ2luSXNSZWxpYWJsZSA9IHRpbWVPcmlnaW5EZWx0YSA8IHRocmVzaG9sZDsgLy8gV2hpbGUgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4sIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW5cbiAgLy8gaXMgbm90IGFzIHdpZGVseSBzdXBwb3J0ZWQuIE5hbWVseSwgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBpcyB1bmRlZmluZWQgaW4gU2FmYXJpIGFzIG9mIHdyaXRpbmcuXG4gIC8vIEFsc28gYXMgb2Ygd3JpdGluZywgcGVyZm9ybWFuY2UudGltaW5nIGlzIG5vdCBhdmFpbGFibGUgaW4gV2ViIFdvcmtlcnMgaW4gbWFpbnN0cmVhbSBicm93c2Vycywgc28gaXQgaXMgbm90IGFsd2F5c1xuICAvLyBhIHZhbGlkIGZhbGxiYWNrLiBJbiB0aGUgYWJzZW5jZSBvZiBhbiBpbml0aWFsIHRpbWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIsIGZhbGxiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGVcbiAgLy8gRGF0ZSBBUEkuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuXG4gIHZhciBuYXZpZ2F0aW9uU3RhcnQgPSBwZXJmb3JtYW5jZS50aW1pbmcgJiYgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydDtcbiAgdmFyIGhhc05hdmlnYXRpb25TdGFydCA9IHR5cGVvZiBuYXZpZ2F0aW9uU3RhcnQgPT09ICdudW1iZXInOyAvLyBpZiBuYXZpZ2F0aW9uU3RhcnQgaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZFxuXG4gIHZhciBuYXZpZ2F0aW9uU3RhcnREZWx0YSA9IGhhc05hdmlnYXRpb25TdGFydCA/IE1hdGguYWJzKG5hdmlnYXRpb25TdGFydCArIHBlcmZvcm1hbmNlTm93IC0gZGF0ZU5vdykgOiB0aHJlc2hvbGQ7XG4gIHZhciBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlID0gbmF2aWdhdGlvblN0YXJ0RGVsdGEgPCB0aHJlc2hvbGQ7XG5cbiAgaWYgKHRpbWVPcmlnaW5Jc1JlbGlhYmxlIHx8IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUpIHtcbiAgICAvLyBVc2UgdGhlIG1vcmUgcmVsaWFibGUgdGltZSBvcmlnaW5cbiAgICBpZiAodGltZU9yaWdpbkRlbHRhIDw9IG5hdmlnYXRpb25TdGFydERlbHRhKSB7XG4gICAgICBfYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbk1vZGUgPSAndGltZU9yaWdpbic7XG4gICAgICByZXR1cm4gcGVyZm9ybWFuY2UudGltZU9yaWdpbjtcbiAgICB9IGVsc2Uge1xuICAgICAgX2Jyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW5Nb2RlID0gJ25hdmlnYXRpb25TdGFydCc7XG4gICAgICByZXR1cm4gbmF2aWdhdGlvblN0YXJ0O1xuICAgIH1cbiAgfSAvLyBFaXRoZXIgYm90aCB0aW1lT3JpZ2luIGFuZCBuYXZpZ2F0aW9uU3RhcnQgYXJlIHNrZXdlZCBvciBuZWl0aGVyIGlzIGF2YWlsYWJsZSwgZmFsbGJhY2sgdG8gRGF0ZS5cblxuXG4gIF9icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luTW9kZSA9ICdkYXRlTm93JztcbiAgcmV0dXJuIGRhdGVOb3c7XG59KCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5153\n")},4850:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "ZT": function() { return /* binding */ __extends; },\n/* harmony export */ "pi": function() { return /* binding */ _assign; },\n/* harmony export */ "XA": function() { return /* binding */ __values; },\n/* harmony export */ "CR": function() { return /* binding */ __read; }\n/* harmony export */ });\n/* unused harmony exports __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\n\nfunction __rest(s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {\n if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n }\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction __param(paramIndex, decorator) {\n return function (target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator["throw"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n "throw": verb(1),\n "return": verb(2)\n }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError("Generator is already executing.");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nfunction __createBinding(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}\nfunction __exportStar(m, exports) {\n for (var p in m) {\n if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p];\n }\n}\nfunction __values(o) {\n var s = typeof Symbol === "function" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === "number") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === "function" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i["return"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n}\nfunction __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n}\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n;\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n var g = generator.apply(thisArg, _arguments || []),\n i,\n q = [];\n return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i;\n\n function verb(n) {\n if (g[n]) i[n] = function (v) {\n return new Promise(function (a, b) {\n q.push([n, v, a, b]) > 1 || resume(n, v);\n });\n };\n }\n\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n\n function step(r) {\n r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n\n function fulfill(value) {\n resume("next", value);\n }\n\n function reject(value) {\n resume("throw", value);\n }\n\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction __asyncDelegator(o) {\n var i, p;\n return i = {}, verb("next"), verb("throw", function (e) {\n throw e;\n }), verb("return"), i[Symbol.iterator] = function () {\n return this;\n }, i;\n\n function verb(n, f) {\n i[n] = o[n] ? function (v) {\n return (p = !p) ? {\n value: __await(o[n](v)),\n done: n === "return"\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n var m = o[Symbol.asyncIterator],\n i;\n return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {\n return this;\n }, i);\n\n function verb(n) {\n i[n] = o[n] && function (v) {\n return new Promise(function (resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function (v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) {\n Object.defineProperty(cooked, "raw", {\n value: raw\n });\n } else {\n cooked.raw = raw;\n }\n\n return cooked;\n}\n;\nfunction __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n }\n result.default = mod;\n return result;\n}\nfunction __importDefault(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nfunction __classPrivateFieldGet(receiver, privateMap) {\n if (!privateMap.has(receiver)) {\n throw new TypeError("attempted to get private field on non-instance");\n }\n\n return privateMap.get(receiver);\n}\nfunction __classPrivateFieldSet(receiver, privateMap, value) {\n if (!privateMap.has(receiver)) {\n throw new TypeError("attempted to set private field on non-instance");\n }\n\n privateMap.set(receiver, value);\n return value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanM/Y2ZhYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEMsT0FBTztBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRStCO0FBQ3hCO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDJIQUEySCxjQUFjO0FBQ3pJO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxpSUFBaUksd0NBQXdDLFFBQVE7QUFDakw7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ087QUFDUCwwQkFBMEIsc0JBQXNCO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNPO0FBQ1AsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTs7QUFFQSxzQ0FBc0MsUUFBUTtBQUM5QyxvREFBb0QsUUFBUTtBQUM1RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLGVBQWU7QUFDZjtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EseUdBQXlHO0FBQ3pHO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI0ODUwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cbnZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgX19wcm90b19fOiBbXVxuICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBkLl9fcHJvdG9fXyA9IGI7XG4gIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gIGZ1bmN0aW9uIF9fKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICB9XG5cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG52YXIgX2Fzc2lnbiA9IGZ1bmN0aW9uIF9fYXNzaWduKCkge1xuICBfYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBzID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBwIGluIHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHQ7XG4gIH07XG5cbiAgcmV0dXJuIF9hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5cbmV4cG9ydCB7IF9hc3NpZ24gYXMgX19hc3NpZ24gfTtcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuXG4gIGZvciAodmFyIHAgaW4gcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMCkgdFtwXSA9IHNbcF07XG4gIH1cblxuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpIHRbcFtpXV0gPSBzW3BbaV1dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsXG4gICAgICBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO2Vsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICB9XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG4gICAgfVxuXG4gICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0ge1xuICAgIGxhYmVsOiAwLFxuICAgIHNlbnQ6IGZ1bmN0aW9uIHNlbnQoKSB7XG4gICAgICBpZiAodFswXSAmIDEpIHRocm93IHRbMV07XG4gICAgICByZXR1cm4gdFsxXTtcbiAgICB9LFxuICAgIHRyeXM6IFtdLFxuICAgIG9wczogW11cbiAgfSxcbiAgICAgIGYsXG4gICAgICB5LFxuICAgICAgdCxcbiAgICAgIGc7XG4gIHJldHVybiBnID0ge1xuICAgIG5leHQ6IHZlcmIoMCksXG4gICAgXCJ0aHJvd1wiOiB2ZXJiKDEpLFxuICAgIFwicmV0dXJuXCI6IHZlcmIoMilcbiAgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBnO1xuXG4gIGZ1bmN0aW9uIHZlcmIobikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIHN0ZXAoW24sIHZdKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcblxuICAgIHdoaWxlIChfKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcblxuICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHQgPSBvcDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgXy5sYWJlbCsrO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IG9wWzFdLFxuICAgICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIF8ubGFiZWwrKztcbiAgICAgICAgICAgIHkgPSBvcFsxXTtcbiAgICAgICAgICAgIG9wID0gWzBdO1xuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICBvcCA9IF8ub3BzLnBvcCgpO1xuXG4gICAgICAgICAgICBfLnRyeXMucG9wKCk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICAgIF8gPSAwO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCBvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkge1xuICAgICAgICAgICAgICBfLmxhYmVsID0gb3BbMV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHtcbiAgICAgICAgICAgICAgXy5sYWJlbCA9IHRbMV07XG4gICAgICAgICAgICAgIHQgPSBvcDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7XG4gICAgICAgICAgICAgIF8ubGFiZWwgPSB0WzJdO1xuXG4gICAgICAgICAgICAgIF8ub3BzLnB1c2gob3ApO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG5cbiAgICAgICAgICAgIF8udHJ5cy5wb3AoKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgb3AgPSBbNiwgZV07XG4gICAgICAgIHkgPSAwO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZiA9IHQgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCxcbiAgICAgIGRvbmU6IHRydWVcbiAgICB9O1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX19jcmVhdGVCaW5kaW5nKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykge1xuICBmb3IgKHZhciBwIGluIG0pIHtcbiAgICBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsXG4gICAgICBtID0gcyAmJiBvW3NdLFxuICAgICAgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogbyAmJiBvW2krK10sXG4gICAgICAgIGRvbmU6ICFvXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksXG4gICAgICByLFxuICAgICAgYXIgPSBbXSxcbiAgICAgIGU7XG5cbiAgdHJ5IHtcbiAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkge1xuICAgICAgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZSA9IHtcbiAgICAgIGVycm9yOiBlcnJvclxuICAgIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXI7XG59XG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICB9XG5cbiAgcmV0dXJuIGFyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcbiAgICBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIH1cblxuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspIHtcbiAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKykge1xuICAgICAgcltrXSA9IGFbal07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHI7XG59XG47XG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLFxuICAgICAgaSxcbiAgICAgIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGk7XG5cbiAgZnVuY3Rpb24gdmVyYihuKSB7XG4gICAgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHtcbiAgICB0cnkge1xuICAgICAgc3RlcChnW25dKHYpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXR0bGUocVswXVszXSwgZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RlcChyKSB7XG4gICAgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7XG4gIH1cblxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7XG4gICAgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHtcbiAgICByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikge1xuICAgIGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICB0aHJvdyBlO1xuICB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuXG4gIGZ1bmN0aW9uIHZlcmIobiwgZikge1xuICAgIGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiAocCA9ICFwKSA/IHtcbiAgICAgICAgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksXG4gICAgICAgIGRvbmU6IG4gPT09IFwicmV0dXJuXCJcbiAgICAgIH0gOiBmID8gZih2KSA6IHY7XG4gICAgfSA6IGY7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxcbiAgICAgIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGkpO1xuXG4gIGZ1bmN0aW9uIHZlcmIobikge1xuICAgIGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgZG9uZTogZFxuICAgICAgfSk7XG4gICAgfSwgcmVqZWN0KTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7XG4gICAgICB2YWx1ZTogcmF3XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29va2VkLnJhdyA9IHJhdztcbiAgfVxuXG4gIHJldHVybiBjb29rZWQ7XG59XG47XG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIHtcbiAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xuICB9XG4gIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIG1vZCAmJiBtb2QuX19lc01vZHVsZSA/IG1vZCA6IHtcbiAgICBkZWZhdWx0OiBtb2RcbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XG4gIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XG4gIH1cblxuICByZXR1cm4gcHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XG4gIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XG4gIH1cblxuICBwcml2YXRlTWFwLnNldChyZWNlaXZlciwgdmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4850\n')},9771:function(__unused_webpack_module,exports){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.default = void 0;\n\nfunction startsWith(string, target, position) {\n var length = string.length;\n position = position == null ? 0 : position;\n\n if (position < 0) {\n position = 0;\n } else if (position > length) {\n position = length;\n }\n\n target = "".concat(target);\n return string.slice(position, position + target.length) == target;\n}\n\nfunction getBrowserLang() {\n if (typeof window === "undefined") {\n return null;\n }\n\n var lang = window.navigator.languages && window.navigator.languages[0] || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage || window.navigator.systemLanguage || null;\n return lang;\n}\n\nfunction normalizeCode(code) {\n return code.toLowerCase().replace(/-/, "_");\n}\n\nfunction getPreferredLanguage(options) {\n if (!options) {\n return getBrowserLang();\n }\n\n var languages = options.languages,\n fallback = options.fallback;\n\n if (!options.languages) {\n return fallback;\n } // some browsers report language as en-US instead of en_US\n\n\n var browserLanguage = normalizeCode(getBrowserLang());\n\n if (!browserLanguage) {\n return fallback;\n }\n\n var match = languages.filter(function (lang) {\n return normalizeCode(lang) === browserLanguage;\n });\n\n if (match.length > 0) {\n return match[0] || fallback;\n } // en == en_US\n\n\n var matchCodeOnly = languages.filter(function (lang) {\n return startsWith(browserLanguage, lang);\n });\n return matchCodeOnly[0] || fallback;\n}\n\nvar _default = getPreferredLanguage;\nexports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9icm93c2VyLWxhbmcvZGlzdC9pbmRleC5qcz9iNmY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLGVBQWU7O0FBRWY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLGVBQWUiLCJmaWxlIjoiOTc3MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG5mdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PSBudWxsID8gMCA6IHBvc2l0aW9uO1xuXG4gIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICBwb3NpdGlvbiA9IDA7XG4gIH0gZWxzZSBpZiAocG9zaXRpb24gPiBsZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IGxlbmd0aDtcbiAgfVxuXG4gIHRhcmdldCA9IFwiXCIuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgdGFyZ2V0Lmxlbmd0aCkgPT0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBnZXRCcm93c2VyTGFuZygpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsYW5nID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXMgJiYgd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSB8fCB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJMYW5ndWFnZSB8fCB3aW5kb3cubmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlIHx8IG51bGw7XG4gIHJldHVybiBsYW5nO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb2RlKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tLywgXCJfXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRQcmVmZXJyZWRMYW5ndWFnZShvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIHJldHVybiBnZXRCcm93c2VyTGFuZygpO1xuICB9XG5cbiAgdmFyIGxhbmd1YWdlcyA9IG9wdGlvbnMubGFuZ3VhZ2VzLFxuICAgICAgZmFsbGJhY2sgPSBvcHRpb25zLmZhbGxiYWNrO1xuXG4gIGlmICghb3B0aW9ucy5sYW5ndWFnZXMpIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH0gLy8gc29tZSBicm93c2VycyByZXBvcnQgbGFuZ3VhZ2UgYXMgZW4tVVMgaW5zdGVhZCBvZiBlbl9VU1xuXG5cbiAgdmFyIGJyb3dzZXJMYW5ndWFnZSA9IG5vcm1hbGl6ZUNvZGUoZ2V0QnJvd3NlckxhbmcoKSk7XG5cbiAgaWYgKCFicm93c2VyTGFuZ3VhZ2UpIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cblxuICB2YXIgbWF0Y2ggPSBsYW5ndWFnZXMuZmlsdGVyKGZ1bmN0aW9uIChsYW5nKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNvZGUobGFuZykgPT09IGJyb3dzZXJMYW5ndWFnZTtcbiAgfSk7XG5cbiAgaWYgKG1hdGNoLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gfHwgZmFsbGJhY2s7XG4gIH0gLy8gZW4gPT0gZW5fVVNcblxuXG4gIHZhciBtYXRjaENvZGVPbmx5ID0gbGFuZ3VhZ2VzLmZpbHRlcihmdW5jdGlvbiAobGFuZykge1xuICAgIHJldHVybiBzdGFydHNXaXRoKGJyb3dzZXJMYW5ndWFnZSwgbGFuZyk7XG4gIH0pO1xuICByZXR1cm4gbWF0Y2hDb2RlT25seVswXSB8fCBmYWxsYmFjaztcbn1cblxudmFyIF9kZWZhdWx0ID0gZ2V0UHJlZmVycmVkTGFuZ3VhZ2U7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9771\n')},6494:function(module){"use strict";eval("\n\nmodule.exports = Object.assign;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnkvZGlzdC9pbnRlcm5hbC1wbHVnaW5zL2J1bmRsZS1vcHRpbWlzYXRpb25zL3BvbHlmaWxscy9vYmplY3QtYXNzaWduLmpzP2ViZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIiLCJmaWxlIjoiNjQ5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ247Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6494\n")},5706:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar reactIs = __webpack_require__(8812);\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcz83MzFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGNBQWMsbUJBQU8sQ0FBQyxJQUFVO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLGlCQUFpQjtBQUNwQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiI1NzA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cblxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5706\n")},165:function(__unused_webpack_module,exports){"use strict";eval('/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar b = "function" === typeof Symbol && Symbol.for,\n c = b ? Symbol.for("react.element") : 60103,\n d = b ? Symbol.for("react.portal") : 60106,\n e = b ? Symbol.for("react.fragment") : 60107,\n f = b ? Symbol.for("react.strict_mode") : 60108,\n g = b ? Symbol.for("react.profiler") : 60114,\n h = b ? Symbol.for("react.provider") : 60109,\n k = b ? Symbol.for("react.context") : 60110,\n l = b ? Symbol.for("react.async_mode") : 60111,\n m = b ? Symbol.for("react.concurrent_mode") : 60111,\n n = b ? Symbol.for("react.forward_ref") : 60112,\n p = b ? Symbol.for("react.suspense") : 60113,\n q = b ? Symbol.for("react.suspense_list") : 60120,\n r = b ? Symbol.for("react.memo") : 60115,\n t = b ? Symbol.for("react.lazy") : 60116,\n v = b ? Symbol.for("react.block") : 60121,\n w = b ? Symbol.for("react.fundamental") : 60117,\n x = b ? Symbol.for("react.responder") : 60118,\n y = b ? Symbol.for("react.scope") : 60119;\n\nfunction z(a) {\n if ("object" === typeof a && null !== a) {\n var u = a.$$typeof;\n\n switch (u) {\n case c:\n switch (a = a.type, a) {\n case l:\n case m:\n case e:\n case g:\n case f:\n case p:\n return a;\n\n default:\n switch (a = a && a.$$typeof, a) {\n case k:\n case n:\n case t:\n case r:\n case h:\n return a;\n\n default:\n return u;\n }\n\n }\n\n case d:\n return u;\n }\n }\n}\n\nfunction A(a) {\n return z(a) === m;\n}\n\nexports.AsyncMode = l;\nexports.ConcurrentMode = m;\nexports.ContextConsumer = k;\nexports.ContextProvider = h;\nexports.Element = c;\nexports.ForwardRef = n;\nexports.Fragment = e;\nexports.Lazy = t;\nexports.Memo = r;\nexports.Portal = d;\nexports.Profiler = g;\nexports.StrictMode = f;\nexports.Suspense = p;\n\nexports.isAsyncMode = function (a) {\n return A(a) || z(a) === l;\n};\n\nexports.isConcurrentMode = A;\n\nexports.isContextConsumer = function (a) {\n return z(a) === k;\n};\n\nexports.isContextProvider = function (a) {\n return z(a) === h;\n};\n\nexports.isElement = function (a) {\n return "object" === typeof a && null !== a && a.$$typeof === c;\n};\n\nexports.isForwardRef = function (a) {\n return z(a) === n;\n};\n\nexports.isFragment = function (a) {\n return z(a) === e;\n};\n\nexports.isLazy = function (a) {\n return z(a) === t;\n};\n\nexports.isMemo = function (a) {\n return z(a) === r;\n};\n\nexports.isPortal = function (a) {\n return z(a) === d;\n};\n\nexports.isProfiler = function (a) {\n return z(a) === g;\n};\n\nexports.isStrictMode = function (a) {\n return z(a) === f;\n};\n\nexports.isSuspense = function (a) {\n return z(a) === p;\n};\n\nexports.isValidElementType = function (a) {\n return "string" === typeof a || "function" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || "object" === typeof a && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v);\n};\n\nexports.typeOf = z;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanM/YWQxMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2E7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQjtBQUNqQixzQkFBc0I7QUFDdEIsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2QixlQUFlO0FBQ2Ysa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixZQUFZO0FBQ1osWUFBWTtBQUNaLGNBQWM7QUFDZCxnQkFBZ0I7QUFDaEIsa0JBQWtCO0FBQ2xCLGdCQUFnQjs7QUFFaEIsbUJBQW1CO0FBQ25CO0FBQ0E7O0FBRUEsd0JBQXdCOztBQUV4Qix5QkFBeUI7QUFDekI7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTs7QUFFQSxjQUFjIiwiZmlsZSI6IjE2NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYiA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJiBTeW1ib2wuZm9yLFxuICAgIGMgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIikgOiA2MDEwMyxcbiAgICBkID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIikgOiA2MDEwNixcbiAgICBlID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSA6IDYwMTA3LFxuICAgIGYgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpIDogNjAxMDgsXG4gICAgZyA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIikgOiA2MDExNCxcbiAgICBoID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSA6IDYwMTA5LFxuICAgIGsgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIikgOiA2MDExMCxcbiAgICBsID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpIDogNjAxMTEsXG4gICAgbSA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpIDogNjAxMTEsXG4gICAgbiA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIikgOiA2MDExMixcbiAgICBwID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSA6IDYwMTEzLFxuICAgIHEgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIikgOiA2MDEyMCxcbiAgICByID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpIDogNjAxMTUsXG4gICAgdCA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSA6IDYwMTE2LFxuICAgIHYgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LmJsb2NrXCIpIDogNjAxMjEsXG4gICAgdyA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QuZnVuZGFtZW50YWxcIikgOiA2MDExNyxcbiAgICB4ID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIikgOiA2MDExOCxcbiAgICB5ID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKSA6IDYwMTE5O1xuXG5mdW5jdGlvbiB6KGEpIHtcbiAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBhICYmIG51bGwgIT09IGEpIHtcbiAgICB2YXIgdSA9IGEuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKHUpIHtcbiAgICAgIGNhc2UgYzpcbiAgICAgICAgc3dpdGNoIChhID0gYS50eXBlLCBhKSB7XG4gICAgICAgICAgY2FzZSBsOlxuICAgICAgICAgIGNhc2UgbTpcbiAgICAgICAgICBjYXNlIGU6XG4gICAgICAgICAgY2FzZSBnOlxuICAgICAgICAgIGNhc2UgZjpcbiAgICAgICAgICBjYXNlIHA6XG4gICAgICAgICAgICByZXR1cm4gYTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzd2l0Y2ggKGEgPSBhICYmIGEuJCR0eXBlb2YsIGEpIHtcbiAgICAgICAgICAgICAgY2FzZSBrOlxuICAgICAgICAgICAgICBjYXNlIG46XG4gICAgICAgICAgICAgIGNhc2UgdDpcbiAgICAgICAgICAgICAgY2FzZSByOlxuICAgICAgICAgICAgICBjYXNlIGg6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGE7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgZDpcbiAgICAgICAgcmV0dXJuIHU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIEEoYSkge1xuICByZXR1cm4geihhKSA9PT0gbTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBsO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IG07XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IGs7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IGg7XG5leHBvcnRzLkVsZW1lbnQgPSBjO1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gbjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBlO1xuZXhwb3J0cy5MYXp5ID0gdDtcbmV4cG9ydHMuTWVtbyA9IHI7XG5leHBvcnRzLlBvcnRhbCA9IGQ7XG5leHBvcnRzLlByb2ZpbGVyID0gZztcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IGY7XG5leHBvcnRzLlN1c3BlbnNlID0gcDtcblxuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBBKGEpIHx8IHooYSkgPT09IGw7XG59O1xuXG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBBO1xuXG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHooYSkgPT09IGs7XG59O1xuXG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHooYSkgPT09IGg7XG59O1xuXG5leHBvcnRzLmlzRWxlbWVudCA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBcIm9iamVjdFwiID09PSB0eXBlb2YgYSAmJiBudWxsICE9PSBhICYmIGEuJCR0eXBlb2YgPT09IGM7XG59O1xuXG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSBuO1xufTtcblxuZXhwb3J0cy5pc0ZyYWdtZW50ID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHooYSkgPT09IGU7XG59O1xuXG5leHBvcnRzLmlzTGF6eSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSB0O1xufTtcblxuZXhwb3J0cy5pc01lbW8gPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4geihhKSA9PT0gcjtcbn07XG5cbmV4cG9ydHMuaXNQb3J0YWwgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4geihhKSA9PT0gZDtcbn07XG5cbmV4cG9ydHMuaXNQcm9maWxlciA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSBnO1xufTtcblxuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4geihhKSA9PT0gZjtcbn07XG5cbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSBwO1xufTtcblxuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGEgfHwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYSB8fCBhID09PSBlIHx8IGEgPT09IG0gfHwgYSA9PT0gZyB8fCBhID09PSBmIHx8IGEgPT09IHAgfHwgYSA9PT0gcSB8fCBcIm9iamVjdFwiID09PSB0eXBlb2YgYSAmJiBudWxsICE9PSBhICYmIChhLiQkdHlwZW9mID09PSB0IHx8IGEuJCR0eXBlb2YgPT09IHIgfHwgYS4kJHR5cGVvZiA9PT0gaCB8fCBhLiQkdHlwZW9mID09PSBrIHx8IGEuJCR0eXBlb2YgPT09IG4gfHwgYS4kJHR5cGVvZiA9PT0gdyB8fCBhLiQkdHlwZW9mID09PSB4IHx8IGEuJCR0eXBlb2YgPT09IHkgfHwgYS4kJHR5cGVvZiA9PT0gdik7XG59O1xuXG5leHBvcnRzLnR5cGVPZiA9IHo7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///165\n')},8812:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nif (true) {\n module.exports = __webpack_require__(165);\n} else {}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcz8zOTgxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksSUFBcUM7QUFDekMsRUFBRSx5Q0FBNEQ7QUFDOUQsQ0FBQyxNQUFNIiwiZmlsZSI6Ijg4MTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8812\n")},9108:function(module){"use strict";eval("\n\nfunction shallowEqualObjects(objA, objB) {\n if (objA === objB) {\n return true;\n }\n\n if (!objA || !objB) {\n return false;\n }\n\n var aKeys = Object.keys(objA);\n var bKeys = Object.keys(objB);\n var len = aKeys.length;\n\n if (bKeys.length !== len) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n var key = aKeys[i];\n\n if (objA[key] !== objB[key] || !Object.prototype.hasOwnProperty.call(objB, key)) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqualObjects;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9zaGFsbG93LWVxdWFsL29iamVjdHMvaW5kZXguanM/MzYxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6IjkxMDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbE9iamVjdHMob2JqQSwgb2JqQikge1xuICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFvYmpBIHx8ICFvYmpCKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGFLZXlzID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBiS2V5cyA9IE9iamVjdC5rZXlzKG9iakIpO1xuICB2YXIgbGVuID0gYUtleXMubGVuZ3RoO1xuXG4gIGlmIChiS2V5cy5sZW5ndGggIT09IGxlbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIga2V5ID0gYUtleXNbaV07XG5cbiAgICBpZiAob2JqQVtrZXldICE9PSBvYmpCW2tleV0gfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmpCLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hhbGxvd0VxdWFsT2JqZWN0czsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9108\n")},8037:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('var __webpack_unused_export__;\n\n\nvar _interopRequireDefault = __webpack_require__(5318);\n\n__webpack_unused_export__ = true;\nexports.dq = withPrefix;\nexports.mc = withAssetPrefix;\nexports.c4 = exports.ZP = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(__webpack_require__(7316));\n\nvar _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(1506));\n\nvar _inheritsLoose2 = _interopRequireDefault(__webpack_require__(5354));\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(7154));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(5697));\n\nvar _react = _interopRequireDefault(__webpack_require__(7294));\n\nvar _reachRouter = __webpack_require__(9499);\n\nvar _utils = __webpack_require__(2098);\n\nvar _parsePath = __webpack_require__(1752);\n\nexports.cP = _parsePath.parsePath;\nvar _excluded = ["to", "getProps", "onClick", "onMouseEnter", "activeClassName", "activeStyle", "innerRef", "partiallyActive", "state", "replace", "_location"];\n\nvar isAbsolutePath = function isAbsolutePath(path) {\n return path === null || path === void 0 ? void 0 : path.startsWith("/");\n};\n\nfunction withPrefix(path, prefix) {\n var _ref, _prefix;\n\n if (prefix === void 0) {\n prefix = getGlobalBasePrefix();\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n if (path.startsWith("./") || path.startsWith("../")) {\n return path;\n }\n\n var base = (_ref = (_prefix = prefix) !== null && _prefix !== void 0 ? _prefix : getGlobalPathPrefix()) !== null && _ref !== void 0 ? _ref : "/";\n return "" + (base !== null && base !== void 0 && base.endsWith("/") ? base.slice(0, -1) : base) + (path.startsWith("/") ? path : "/" + path);\n} // These global values are wrapped in typeof clauses to ensure the values exist.\n// This is especially problematic in unit testing of this component.\n\n\nvar getGlobalPathPrefix = function getGlobalPathPrefix() {\n return false ? 0 : "/justice40-tool/842-69a4eec";\n};\n\nvar getGlobalBasePrefix = function getGlobalBasePrefix() {\n return false ? 0 : "/justice40-tool/842-69a4eec";\n};\n\nvar isLocalLink = function isLocalLink(path) {\n return path && !path.startsWith("http://") && !path.startsWith("https://") && !path.startsWith("//");\n};\n\nfunction withAssetPrefix(path) {\n return withPrefix(path, getGlobalPathPrefix());\n}\n\nfunction absolutify(path, current) {\n // If it\'s already absolute, return as-is\n if (isAbsolutePath(path)) {\n return path;\n }\n\n return (0, _utils.resolve)(path, current);\n}\n\nvar rewriteLinkPath = function rewriteLinkPath(path, relativeTo) {\n if (typeof path === "number") {\n return path;\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n return isAbsolutePath(path) ? withPrefix(path) : absolutify(path, relativeTo);\n};\n\nvar NavLinkPropTypes = {\n activeClassName: _propTypes.default.string,\n activeStyle: _propTypes.default.object,\n partiallyActive: _propTypes.default.bool\n}; // Set up IntersectionObserver\n\nvar createIntersectionObserver = function createIntersectionObserver(el, cb) {\n var io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (el === entry.target) {\n // Check if element is within viewport, remove listener, destroy observer, and run link callback.\n // MSEdge doesn\'t currently support isIntersecting, so also test for an intersectionRatio > 0\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(el);\n io.disconnect();\n cb();\n }\n }\n });\n }); // Add element to the observer\n\n io.observe(el);\n return {\n instance: io,\n el: el\n };\n};\n\nfunction GatsbyLinkLocationWrapper(props) {\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Location, null, function (_ref2) {\n var location = _ref2.location;\n return /*#__PURE__*/_react.default.createElement(GatsbyLink, (0, _extends2.default)({}, props, {\n _location: location\n }));\n });\n}\n\nvar GatsbyLink = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(GatsbyLink, _React$Component);\n\n function GatsbyLink(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // Default to no support for IntersectionObserver\n\n _this.defaultGetProps = function (_ref3) {\n var isPartiallyCurrent = _ref3.isPartiallyCurrent,\n isCurrent = _ref3.isCurrent;\n\n if (_this.props.partiallyActive ? isPartiallyCurrent : isCurrent) {\n return {\n className: [_this.props.className, _this.props.activeClassName].filter(Boolean).join(" "),\n style: (0, _extends2.default)({}, _this.props.style, _this.props.activeStyle)\n };\n }\n\n return null;\n };\n\n var IOSupported = false;\n\n if (typeof window !== "undefined" && window.IntersectionObserver) {\n IOSupported = true;\n }\n\n _this.state = {\n IOSupported: IOSupported\n };\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = GatsbyLink.prototype;\n\n _proto._prefetch = function _prefetch() {\n var currentPath = window.location.pathname; // reach router should have the correct state\n\n if (this.props._location && this.props._location.pathname) {\n currentPath = this.props._location.pathname;\n }\n\n var rewrittenPath = rewriteLinkPath(this.props.to, currentPath);\n var newPathName = (0, _parsePath.parsePath)(rewrittenPath).pathname; // Prefech is used to speed up next navigations. When you use it on the current navigation,\n // there could be a race-condition where Chrome uses the stale data instead of waiting for the network to complete\n\n if (currentPath !== newPathName) {\n ___loader.enqueue(newPathName);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // Preserve non IO functionality if no support\n if (this.props.to !== prevProps.to && !this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n // Preserve non IO functionality if no support\n if (!this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (!this.io) {\n return;\n }\n\n var _this$io = this.io,\n instance = _this$io.instance,\n el = _this$io.el;\n instance.unobserve(el);\n instance.disconnect();\n };\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.props.innerRef && this.props.innerRef.hasOwnProperty("current")) {\n this.props.innerRef.current = ref;\n } else if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n\n if (this.state.IOSupported && ref) {\n // If IO supported and element reference found, setup Observer functionality\n this.io = createIntersectionObserver(ref, function () {\n _this2._prefetch();\n });\n }\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$props = this.props,\n to = _this$props.to,\n _this$props$getProps = _this$props.getProps,\n getProps = _this$props$getProps === void 0 ? this.defaultGetProps : _this$props$getProps,\n _onClick = _this$props.onClick,\n _onMouseEnter = _this$props.onMouseEnter,\n $activeClassName = _this$props.activeClassName,\n $activeStyle = _this$props.activeStyle,\n $innerRef = _this$props.innerRef,\n partiallyActive = _this$props.partiallyActive,\n state = _this$props.state,\n replace = _this$props.replace,\n _location = _this$props._location,\n rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props, _excluded);\n\n if (false) {}\n\n var prefixedTo = rewriteLinkPath(to, _location.pathname);\n\n if (!isLocalLink(prefixedTo)) {\n return /*#__PURE__*/_react.default.createElement("a", (0, _extends2.default)({\n href: prefixedTo\n }, rest));\n }\n\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Link, (0, _extends2.default)({\n to: prefixedTo,\n state: state,\n getProps: getProps,\n innerRef: this.handleRef,\n onMouseEnter: function onMouseEnter(e) {\n if (_onMouseEnter) {\n _onMouseEnter(e);\n }\n\n ___loader.hovering((0, _parsePath.parsePath)(prefixedTo).pathname);\n },\n onClick: function onClick(e) {\n if (_onClick) {\n _onClick(e);\n }\n\n if (e.button === 0 && // ignore right clicks\n !_this3.props.target && // let browser handle "target=_blank"\n !e.defaultPrevented && // onClick prevented default\n !e.metaKey && // ignore clicks with modifier keys...\n !e.altKey && !e.ctrlKey && !e.shiftKey) {\n e.preventDefault();\n var shouldReplace = replace;\n\n var isCurrent = encodeURI(prefixedTo) === _location.pathname;\n\n if (typeof replace !== "boolean" && isCurrent) {\n shouldReplace = true;\n } // Make sure the necessary scripts and data are\n // loaded before continuing.\n\n\n window.___navigate(prefixedTo, {\n state: state,\n replace: shouldReplace\n });\n }\n\n return true;\n }\n }, rest));\n };\n\n return GatsbyLink;\n}(_react.default.Component);\n\nGatsbyLink.propTypes = (0, _extends2.default)({}, NavLinkPropTypes, {\n onClick: _propTypes.default.func,\n to: _propTypes.default.string.isRequired,\n replace: _propTypes.default.bool,\n state: _propTypes.default.object\n});\n\nvar _default = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n return /*#__PURE__*/_react.default.createElement(GatsbyLinkLocationWrapper, (0, _extends2.default)({\n innerRef: ref\n }, props));\n});\n\nexports.ZP = _default;\n\nvar navigate = function navigate(to, options) {\n window.___navigate(rewriteLinkPath(to, window.location.pathname), options);\n};\n\nexports.c4 = navigate;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktbGluay9pbmRleC5qcz9mOTkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYiw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4Qzs7QUFFbkYseUJBQWtCO0FBQ2xCLFVBQWtCO0FBQ2xCLFVBQXVCO0FBQ3ZCLFVBQWdCLEdBQUcsVUFBZTs7QUFFbEMsNERBQTRELG1CQUFPLENBQUMsSUFBcUQ7O0FBRXpILHFEQUFxRCxtQkFBTyxDQUFDLElBQThDOztBQUUzRyw2Q0FBNkMsbUJBQU8sQ0FBQyxJQUFzQzs7QUFFM0YsdUNBQXVDLG1CQUFPLENBQUMsSUFBZ0M7O0FBRS9FLHdDQUF3QyxtQkFBTyxDQUFDLElBQVk7O0FBRTVELG9DQUFvQyxtQkFBTyxDQUFDLElBQU87O0FBRW5ELG1CQUFtQixtQkFBTyxDQUFDLElBQXdCOztBQUVuRCxhQUFhLG1CQUFPLENBQUMsSUFBa0M7O0FBRXZELGlCQUFpQixtQkFBTyxDQUFDLElBQWM7O0FBRXZDLFVBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0EsU0FBUyxNQUFxQyxHQUFHLENBQW9FLEdBQUcsNkJBQWU7QUFDdkk7O0FBRUE7QUFDQSxTQUFTLE1BQXFDLEdBQUcsQ0FBZ0UsR0FBRyw2QkFBYTtBQUNqSTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUcsRUFBRTs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3RUFBd0U7QUFDeEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxLQUF5RCxFQUFFLEVBRTlEOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDOztBQUVELGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQsVUFBZTs7QUFFZjtBQUNBO0FBQ0E7O0FBRUEsVUFBZ0IiLCJmaWxlIjoiODAzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMud2l0aFByZWZpeCA9IHdpdGhQcmVmaXg7XG5leHBvcnRzLndpdGhBc3NldFByZWZpeCA9IHdpdGhBc3NldFByZWZpeDtcbmV4cG9ydHMubmF2aWdhdGUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xuXG52YXIgX2Fzc2VydFRoaXNJbml0aWFsaXplZDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKSk7XG5cbnZhciBfaW5oZXJpdHNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzTG9vc2VcIikpO1xuXG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcblxudmFyIF9wcm9wVHlwZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcblxudmFyIF9yZWFjaFJvdXRlciA9IHJlcXVpcmUoXCJAZ2F0c2J5anMvcmVhY2gtcm91dGVyXCIpO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZShcIkBnYXRzYnlqcy9yZWFjaC1yb3V0ZXIvbGliL3V0aWxzXCIpO1xuXG52YXIgX3BhcnNlUGF0aCA9IHJlcXVpcmUoXCIuL3BhcnNlLXBhdGhcIik7XG5cbmV4cG9ydHMucGFyc2VQYXRoID0gX3BhcnNlUGF0aC5wYXJzZVBhdGg7XG52YXIgX2V4Y2x1ZGVkID0gW1widG9cIiwgXCJnZXRQcm9wc1wiLCBcIm9uQ2xpY2tcIiwgXCJvbk1vdXNlRW50ZXJcIiwgXCJhY3RpdmVDbGFzc05hbWVcIiwgXCJhY3RpdmVTdHlsZVwiLCBcImlubmVyUmVmXCIsIFwicGFydGlhbGx5QWN0aXZlXCIsIFwic3RhdGVcIiwgXCJyZXBsYWNlXCIsIFwiX2xvY2F0aW9uXCJdO1xuXG52YXIgaXNBYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiBpc0Fic29sdXRlUGF0aChwYXRoKSB7XG4gIHJldHVybiBwYXRoID09PSBudWxsIHx8IHBhdGggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhdGguc3RhcnRzV2l0aChcIi9cIik7XG59O1xuXG5mdW5jdGlvbiB3aXRoUHJlZml4KHBhdGgsIHByZWZpeCkge1xuICB2YXIgX3JlZiwgX3ByZWZpeDtcblxuICBpZiAocHJlZml4ID09PSB2b2lkIDApIHtcbiAgICBwcmVmaXggPSBnZXRHbG9iYWxCYXNlUHJlZml4KCk7XG4gIH1cblxuICBpZiAoIWlzTG9jYWxMaW5rKHBhdGgpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBpZiAocGF0aC5zdGFydHNXaXRoKFwiLi9cIikgfHwgcGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICB2YXIgYmFzZSA9IChfcmVmID0gKF9wcmVmaXggPSBwcmVmaXgpICE9PSBudWxsICYmIF9wcmVmaXggIT09IHZvaWQgMCA/IF9wcmVmaXggOiBnZXRHbG9iYWxQYXRoUHJlZml4KCkpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBcIi9cIjtcbiAgcmV0dXJuIFwiXCIgKyAoYmFzZSAhPT0gbnVsbCAmJiBiYXNlICE9PSB2b2lkIDAgJiYgYmFzZS5lbmRzV2l0aChcIi9cIikgPyBiYXNlLnNsaWNlKDAsIC0xKSA6IGJhc2UpICsgKHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogXCIvXCIgKyBwYXRoKTtcbn0gLy8gVGhlc2UgZ2xvYmFsIHZhbHVlcyBhcmUgd3JhcHBlZCBpbiB0eXBlb2YgY2xhdXNlcyB0byBlbnN1cmUgdGhlIHZhbHVlcyBleGlzdC5cbi8vIFRoaXMgaXMgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBpbiB1bml0IHRlc3Rpbmcgb2YgdGhpcyBjb21wb25lbnQuXG5cblxudmFyIGdldEdsb2JhbFBhdGhQcmVmaXggPSBmdW5jdGlvbiBnZXRHbG9iYWxQYXRoUHJlZml4KCkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gdHlwZW9mIF9fUEFUSF9QUkVGSVhfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fUEFUSF9QUkVGSVhfXyA6IHVuZGVmaW5lZCA6IF9fUEFUSF9QUkVGSVhfXztcbn07XG5cbnZhciBnZXRHbG9iYWxCYXNlUHJlZml4ID0gZnVuY3Rpb24gZ2V0R2xvYmFsQmFzZVByZWZpeCgpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHR5cGVvZiBfX0JBU0VfUEFUSF9fICE9PSBcInVuZGVmaW5lZFwiID8gX19CQVNFX1BBVEhfXyA6IHVuZGVmaW5lZCA6IF9fQkFTRV9QQVRIX187XG59O1xuXG52YXIgaXNMb2NhbExpbmsgPSBmdW5jdGlvbiBpc0xvY2FsTGluayhwYXRoKSB7XG4gIHJldHVybiBwYXRoICYmICFwYXRoLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpICYmICFwYXRoLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSAmJiAhcGF0aC5zdGFydHNXaXRoKFwiLy9cIik7XG59O1xuXG5mdW5jdGlvbiB3aXRoQXNzZXRQcmVmaXgocGF0aCkge1xuICByZXR1cm4gd2l0aFByZWZpeChwYXRoLCBnZXRHbG9iYWxQYXRoUHJlZml4KCkpO1xufVxuXG5mdW5jdGlvbiBhYnNvbHV0aWZ5KHBhdGgsIGN1cnJlbnQpIHtcbiAgLy8gSWYgaXQncyBhbHJlYWR5IGFic29sdXRlLCByZXR1cm4gYXMtaXNcbiAgaWYgKGlzQWJzb2x1dGVQYXRoKHBhdGgpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICByZXR1cm4gKDAsIF91dGlscy5yZXNvbHZlKShwYXRoLCBjdXJyZW50KTtcbn1cblxudmFyIHJld3JpdGVMaW5rUGF0aCA9IGZ1bmN0aW9uIHJld3JpdGVMaW5rUGF0aChwYXRoLCByZWxhdGl2ZVRvKSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgaWYgKCFpc0xvY2FsTGluayhwYXRoKSkge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgcmV0dXJuIGlzQWJzb2x1dGVQYXRoKHBhdGgpID8gd2l0aFByZWZpeChwYXRoKSA6IGFic29sdXRpZnkocGF0aCwgcmVsYXRpdmVUbyk7XG59O1xuXG52YXIgTmF2TGlua1Byb3BUeXBlcyA9IHtcbiAgYWN0aXZlQ2xhc3NOYW1lOiBfcHJvcFR5cGVzLmRlZmF1bHQuc3RyaW5nLFxuICBhY3RpdmVTdHlsZTogX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCxcbiAgcGFydGlhbGx5QWN0aXZlOiBfcHJvcFR5cGVzLmRlZmF1bHQuYm9vbFxufTsgLy8gU2V0IHVwIEludGVyc2VjdGlvbk9ic2VydmVyXG5cbnZhciBjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlciA9IGZ1bmN0aW9uIGNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyKGVsLCBjYikge1xuICB2YXIgaW8gPSBuZXcgd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgaWYgKGVsID09PSBlbnRyeS50YXJnZXQpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudCBpcyB3aXRoaW4gdmlld3BvcnQsIHJlbW92ZSBsaXN0ZW5lciwgZGVzdHJveSBvYnNlcnZlciwgYW5kIHJ1biBsaW5rIGNhbGxiYWNrLlxuICAgICAgICAvLyBNU0VkZ2UgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBpc0ludGVyc2VjdGluZywgc28gYWxzbyB0ZXN0IGZvciAgYW4gaW50ZXJzZWN0aW9uUmF0aW8gPiAwXG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZyB8fCBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA+IDApIHtcbiAgICAgICAgICBpby51bm9ic2VydmUoZWwpO1xuICAgICAgICAgIGlvLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pOyAvLyBBZGQgZWxlbWVudCB0byB0aGUgb2JzZXJ2ZXJcblxuICBpby5vYnNlcnZlKGVsKTtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW8sXG4gICAgZWw6IGVsXG4gIH07XG59O1xuXG5mdW5jdGlvbiBHYXRzYnlMaW5rTG9jYXRpb25XcmFwcGVyKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfcmVhY2hSb3V0ZXIuTG9jYXRpb24sIG51bGwsIGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBsb2NhdGlvbiA9IF9yZWYyLmxvY2F0aW9uO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChHYXRzYnlMaW5rLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgX2xvY2F0aW9uOiBsb2NhdGlvblxuICAgIH0pKTtcbiAgfSk7XG59XG5cbnZhciBHYXRzYnlMaW5rID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gICgwLCBfaW5oZXJpdHNMb29zZTIuZGVmYXVsdCkoR2F0c2J5TGluaywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gR2F0c2J5TGluayhwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzOyAvLyBEZWZhdWx0IHRvIG5vIHN1cHBvcnQgZm9yIEludGVyc2VjdGlvbk9ic2VydmVyXG5cbiAgICBfdGhpcy5kZWZhdWx0R2V0UHJvcHMgPSBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgIHZhciBpc1BhcnRpYWxseUN1cnJlbnQgPSBfcmVmMy5pc1BhcnRpYWxseUN1cnJlbnQsXG4gICAgICAgICAgaXNDdXJyZW50ID0gX3JlZjMuaXNDdXJyZW50O1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMucGFydGlhbGx5QWN0aXZlID8gaXNQYXJ0aWFsbHlDdXJyZW50IDogaXNDdXJyZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBbX3RoaXMucHJvcHMuY2xhc3NOYW1lLCBfdGhpcy5wcm9wcy5hY3RpdmVDbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgICAgICBzdHlsZTogKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgX3RoaXMucHJvcHMuc3R5bGUsIF90aGlzLnByb3BzLmFjdGl2ZVN0eWxlKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIElPU3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIElPU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIElPU3VwcG9ydGVkOiBJT1N1cHBvcnRlZFxuICAgIH07XG4gICAgX3RoaXMuaGFuZGxlUmVmID0gX3RoaXMuaGFuZGxlUmVmLmJpbmQoKDAsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQyLmRlZmF1bHQpKF90aGlzKSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEdhdHNieUxpbmsucHJvdG90eXBlO1xuXG4gIF9wcm90by5fcHJlZmV0Y2ggPSBmdW5jdGlvbiBfcHJlZmV0Y2goKSB7XG4gICAgdmFyIGN1cnJlbnRQYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOyAvLyByZWFjaCByb3V0ZXIgc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3Qgc3RhdGVcblxuICAgIGlmICh0aGlzLnByb3BzLl9sb2NhdGlvbiAmJiB0aGlzLnByb3BzLl9sb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgY3VycmVudFBhdGggPSB0aGlzLnByb3BzLl9sb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG5cbiAgICB2YXIgcmV3cml0dGVuUGF0aCA9IHJld3JpdGVMaW5rUGF0aCh0aGlzLnByb3BzLnRvLCBjdXJyZW50UGF0aCk7XG4gICAgdmFyIG5ld1BhdGhOYW1lID0gKDAsIF9wYXJzZVBhdGgucGFyc2VQYXRoKShyZXdyaXR0ZW5QYXRoKS5wYXRobmFtZTsgLy8gUHJlZmVjaCBpcyB1c2VkIHRvIHNwZWVkIHVwIG5leHQgbmF2aWdhdGlvbnMuIFdoZW4geW91IHVzZSBpdCBvbiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uLFxuICAgIC8vIHRoZXJlIGNvdWxkIGJlIGEgcmFjZS1jb25kaXRpb24gd2hlcmUgQ2hyb21lIHVzZXMgdGhlIHN0YWxlIGRhdGEgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgbmV0d29yayB0byBjb21wbGV0ZVxuXG4gICAgaWYgKGN1cnJlbnRQYXRoICE9PSBuZXdQYXRoTmFtZSkge1xuICAgICAgX19fbG9hZGVyLmVucXVldWUobmV3UGF0aE5hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgLy8gUHJlc2VydmUgbm9uIElPIGZ1bmN0aW9uYWxpdHkgaWYgbm8gc3VwcG9ydFxuICAgIGlmICh0aGlzLnByb3BzLnRvICE9PSBwcmV2UHJvcHMudG8gJiYgIXRoaXMuc3RhdGUuSU9TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX3ByZWZldGNoKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIFByZXNlcnZlIG5vbiBJTyBmdW5jdGlvbmFsaXR5IGlmIG5vIHN1cHBvcnRcbiAgICBpZiAoIXRoaXMuc3RhdGUuSU9TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX3ByZWZldGNoKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICghdGhpcy5pbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRpbyA9IHRoaXMuaW8sXG4gICAgICAgIGluc3RhbmNlID0gX3RoaXMkaW8uaW5zdGFuY2UsXG4gICAgICAgIGVsID0gX3RoaXMkaW8uZWw7XG4gICAgaW5zdGFuY2UudW5vYnNlcnZlKGVsKTtcbiAgICBpbnN0YW5jZS5kaXNjb25uZWN0KCk7XG4gIH07XG5cbiAgX3Byb3RvLmhhbmRsZVJlZiA9IGZ1bmN0aW9uIGhhbmRsZVJlZihyZWYpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmICh0aGlzLnByb3BzLmlubmVyUmVmICYmIHRoaXMucHJvcHMuaW5uZXJSZWYuaGFzT3duUHJvcGVydHkoXCJjdXJyZW50XCIpKSB7XG4gICAgICB0aGlzLnByb3BzLmlubmVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmlubmVyUmVmKSB7XG4gICAgICB0aGlzLnByb3BzLmlubmVyUmVmKHJlZik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUuSU9TdXBwb3J0ZWQgJiYgcmVmKSB7XG4gICAgICAvLyBJZiBJTyBzdXBwb3J0ZWQgYW5kIGVsZW1lbnQgcmVmZXJlbmNlIGZvdW5kLCBzZXR1cCBPYnNlcnZlciBmdW5jdGlvbmFsaXR5XG4gICAgICB0aGlzLmlvID0gY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5fcHJlZmV0Y2goKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgdG8gPSBfdGhpcyRwcm9wcy50byxcbiAgICAgICAgX3RoaXMkcHJvcHMkZ2V0UHJvcHMgPSBfdGhpcyRwcm9wcy5nZXRQcm9wcyxcbiAgICAgICAgZ2V0UHJvcHMgPSBfdGhpcyRwcm9wcyRnZXRQcm9wcyA9PT0gdm9pZCAwID8gdGhpcy5kZWZhdWx0R2V0UHJvcHMgOiBfdGhpcyRwcm9wcyRnZXRQcm9wcyxcbiAgICAgICAgX29uQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbkNsaWNrLFxuICAgICAgICBfb25Nb3VzZUVudGVyID0gX3RoaXMkcHJvcHMub25Nb3VzZUVudGVyLFxuICAgICAgICAkYWN0aXZlQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgICAkYWN0aXZlU3R5bGUgPSBfdGhpcyRwcm9wcy5hY3RpdmVTdHlsZSxcbiAgICAgICAgJGlubmVyUmVmID0gX3RoaXMkcHJvcHMuaW5uZXJSZWYsXG4gICAgICAgIHBhcnRpYWxseUFjdGl2ZSA9IF90aGlzJHByb3BzLnBhcnRpYWxseUFjdGl2ZSxcbiAgICAgICAgc3RhdGUgPSBfdGhpcyRwcm9wcy5zdGF0ZSxcbiAgICAgICAgcmVwbGFjZSA9IF90aGlzJHByb3BzLnJlcGxhY2UsXG4gICAgICAgIF9sb2NhdGlvbiA9IF90aGlzJHByb3BzLl9sb2NhdGlvbixcbiAgICAgICAgcmVzdCA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmICFpc0xvY2FsTGluayh0bykpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkV4dGVybmFsIGxpbmsgXCIgKyB0byArIFwiIHdhcyBkZXRlY3RlZCBpbiBhIExpbmsgY29tcG9uZW50LiBVc2UgdGhlIExpbmsgY29tcG9uZW50IG9ubHkgZm9yIGludGVybmFsIGxpbmtzLiBTZWU6IGh0dHBzOi8vZ2F0c2J5LmRldi9pbnRlcm5hbC1saW5rc1wiKTtcbiAgICB9XG5cbiAgICB2YXIgcHJlZml4ZWRUbyA9IHJld3JpdGVMaW5rUGF0aCh0bywgX2xvY2F0aW9uLnBhdGhuYW1lKTtcblxuICAgIGlmICghaXNMb2NhbExpbmsocHJlZml4ZWRUbykpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIiwgKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgIGhyZWY6IHByZWZpeGVkVG9cbiAgICAgIH0sIHJlc3QpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX3JlYWNoUm91dGVyLkxpbmssICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgdG86IHByZWZpeGVkVG8sXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBnZXRQcm9wczogZ2V0UHJvcHMsXG4gICAgICBpbm5lclJlZjogdGhpcy5oYW5kbGVSZWYsXG4gICAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcihlKSB7XG4gICAgICAgIGlmIChfb25Nb3VzZUVudGVyKSB7XG4gICAgICAgICAgX29uTW91c2VFbnRlcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9fX2xvYWRlci5ob3ZlcmluZygoMCwgX3BhcnNlUGF0aC5wYXJzZVBhdGgpKHByZWZpeGVkVG8pLnBhdGhuYW1lKTtcbiAgICAgIH0sXG4gICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgICAgaWYgKF9vbkNsaWNrKSB7XG4gICAgICAgICAgX29uQ2xpY2soZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS5idXR0b24gPT09IDAgJiYgLy8gaWdub3JlIHJpZ2h0IGNsaWNrc1xuICAgICAgICAhX3RoaXMzLnByb3BzLnRhcmdldCAmJiAvLyBsZXQgYnJvd3NlciBoYW5kbGUgXCJ0YXJnZXQ9X2JsYW5rXCJcbiAgICAgICAgIWUuZGVmYXVsdFByZXZlbnRlZCAmJiAvLyBvbkNsaWNrIHByZXZlbnRlZCBkZWZhdWx0XG4gICAgICAgICFlLm1ldGFLZXkgJiYgLy8gaWdub3JlIGNsaWNrcyB3aXRoIG1vZGlmaWVyIGtleXMuLi5cbiAgICAgICAgIWUuYWx0S2V5ICYmICFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdmFyIHNob3VsZFJlcGxhY2UgPSByZXBsYWNlO1xuXG4gICAgICAgICAgdmFyIGlzQ3VycmVudCA9IGVuY29kZVVSSShwcmVmaXhlZFRvKSA9PT0gX2xvY2F0aW9uLnBhdGhuYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlICE9PSBcImJvb2xlYW5cIiAmJiBpc0N1cnJlbnQpIHtcbiAgICAgICAgICAgIHNob3VsZFJlcGxhY2UgPSB0cnVlO1xuICAgICAgICAgIH0gLy8gTWFrZSBzdXJlIHRoZSBuZWNlc3Nhcnkgc2NyaXB0cyBhbmQgZGF0YSBhcmVcbiAgICAgICAgICAvLyBsb2FkZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG5cblxuICAgICAgICAgIHdpbmRvdy5fX19uYXZpZ2F0ZShwcmVmaXhlZFRvLCB7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICByZXBsYWNlOiBzaG91bGRSZXBsYWNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCByZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuIEdhdHNieUxpbms7XG59KF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCk7XG5cbkdhdHNieUxpbmsucHJvcFR5cGVzID0gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgTmF2TGlua1Byb3BUeXBlcywge1xuICBvbkNsaWNrOiBfcHJvcFR5cGVzLmRlZmF1bHQuZnVuYyxcbiAgdG86IF9wcm9wVHlwZXMuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcmVwbGFjZTogX3Byb3BUeXBlcy5kZWZhdWx0LmJvb2wsXG4gIHN0YXRlOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0XG59KTtcblxudmFyIF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEdhdHNieUxpbmtMb2NhdGlvbldyYXBwZXIsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgIGlubmVyUmVmOiByZWZcbiAgfSwgcHJvcHMpKTtcbn0pO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcblxudmFyIG5hdmlnYXRlID0gZnVuY3Rpb24gbmF2aWdhdGUodG8sIG9wdGlvbnMpIHtcbiAgd2luZG93Ll9fX25hdmlnYXRlKHJld3JpdGVMaW5rUGF0aCh0bywgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnRzLm5hdmlnYXRlID0gbmF2aWdhdGU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8037\n')},1752:function(__unused_webpack_module,exports){"use strict";eval('\n\nexports.__esModule = true;\nexports.parsePath = parsePath;\n\nfunction parsePath(path) {\n var pathname = path || "/";\n var search = "";\n var hash = "";\n var hashIndex = pathname.indexOf("#");\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf("?");\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === "?" ? "" : search,\n hash: hash === "#" ? "" : hash\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktbGluay9wYXJzZS1wYXRoLmpzPzcyZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTc1Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5wYXJzZVBhdGggPSBwYXJzZVBhdGg7XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gIHZhciBwYXRobmFtZSA9IHBhdGggfHwgXCIvXCI7XG4gIHZhciBzZWFyY2ggPSBcIlwiO1xuICB2YXIgaGFzaCA9IFwiXCI7XG4gIHZhciBoYXNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKFwiI1wiKTtcblxuICBpZiAoaGFzaEluZGV4ICE9PSAtMSkge1xuICAgIGhhc2ggPSBwYXRobmFtZS5zdWJzdHIoaGFzaEluZGV4KTtcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnN1YnN0cigwLCBoYXNoSW5kZXgpO1xuICB9XG5cbiAgdmFyIHNlYXJjaEluZGV4ID0gcGF0aG5hbWUuaW5kZXhPZihcIj9cIik7XG5cbiAgaWYgKHNlYXJjaEluZGV4ICE9PSAtMSkge1xuICAgIHNlYXJjaCA9IHBhdGhuYW1lLnN1YnN0cihzZWFyY2hJbmRleCk7XG4gICAgcGF0aG5hbWUgPSBwYXRobmFtZS5zdWJzdHIoMCwgc2VhcmNoSW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgc2VhcmNoOiBzZWFyY2ggPT09IFwiP1wiID8gXCJcIiA6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoID09PSBcIiNcIiA/IFwiXCIgOiBoYXNoXG4gIH07XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1752\n')},9679:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = true;\nexports.p2 = exports.$C = void 0;\n\nvar _scrollHandler = __webpack_require__(1432);\n\nexports.$C = _scrollHandler.ScrollHandler;\n\nvar _useScrollRestoration = __webpack_require__(4855);\n\nexports.p2 = _useScrollRestoration.useScrollRestoration;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC9pbmRleC5qcz9lZTEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYix5QkFBa0I7QUFDbEIsVUFBNEIsR0FBRyxVQUFxQjs7QUFFcEQscUJBQXFCLG1CQUFPLENBQUMsSUFBa0I7O0FBRS9DLFVBQXFCOztBQUVyQiw0QkFBNEIsbUJBQU8sQ0FBQyxJQUEwQjs7QUFFOUQsVUFBNEIiLCJmaWxlIjoiOTY3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy51c2VTY3JvbGxSZXN0b3JhdGlvbiA9IGV4cG9ydHMuU2Nyb2xsQ29udGV4dCA9IHZvaWQgMDtcblxudmFyIF9zY3JvbGxIYW5kbGVyID0gcmVxdWlyZShcIi4vc2Nyb2xsLWhhbmRsZXJcIik7XG5cbmV4cG9ydHMuU2Nyb2xsQ29udGV4dCA9IF9zY3JvbGxIYW5kbGVyLlNjcm9sbEhhbmRsZXI7XG5cbnZhciBfdXNlU2Nyb2xsUmVzdG9yYXRpb24gPSByZXF1aXJlKFwiLi91c2Utc2Nyb2xsLXJlc3RvcmF0aW9uXCIpO1xuXG5leHBvcnRzLnVzZVNjcm9sbFJlc3RvcmF0aW9uID0gX3VzZVNjcm9sbFJlc3RvcmF0aW9uLnVzZVNjcm9sbFJlc3RvcmF0aW9uOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9679\n")},1432:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('\n\nvar _interopRequireDefault = __webpack_require__(5318);\n\nexports.__esModule = true;\nexports.ScrollHandler = exports.ScrollContext = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(1506));\n\nvar _inheritsLoose2 = _interopRequireDefault(__webpack_require__(5354));\n\nvar React = _interopRequireWildcard(__webpack_require__(7294));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(5697));\n\nvar _sessionStorage = __webpack_require__(1142);\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar ScrollContext = /*#__PURE__*/React.createContext(new _sessionStorage.SessionStorage());\nexports.ScrollContext = ScrollContext;\nScrollContext.displayName = "GatsbyScrollContext";\n\nvar ScrollHandler = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(ScrollHandler, _React$Component);\n\n function ScrollHandler() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this._stateStorage = new _sessionStorage.SessionStorage();\n _this._isTicking = false;\n _this._latestKnownScrollY = 0;\n\n _this.scrollListener = function () {\n _this._latestKnownScrollY = window.scrollY;\n\n if (!_this._isTicking) {\n _this._isTicking = true;\n requestAnimationFrame(_this._saveScroll.bind((0, _assertThisInitialized2.default)(_this)));\n }\n };\n\n _this.windowScroll = function (position, prevProps) {\n if (_this.shouldUpdateScroll(prevProps, _this.props)) {\n window.scrollTo(0, position);\n }\n };\n\n _this.scrollToHash = function (hash, prevProps) {\n var node = document.getElementById(hash.substring(1));\n\n if (node && _this.shouldUpdateScroll(prevProps, _this.props)) {\n node.scrollIntoView();\n }\n };\n\n _this.shouldUpdateScroll = function (prevRouterProps, routerProps) {\n var shouldUpdateScroll = _this.props.shouldUpdateScroll;\n\n if (!shouldUpdateScroll) {\n return true;\n } // Hack to allow accessing this._stateStorage.\n\n\n return shouldUpdateScroll.call((0, _assertThisInitialized2.default)(_this), prevRouterProps, routerProps);\n };\n\n return _this;\n }\n\n var _proto = ScrollHandler.prototype;\n\n _proto._saveScroll = function _saveScroll() {\n var key = this.props.location.key || null;\n\n if (key) {\n this._stateStorage.save(this.props.location, key, this._latestKnownScrollY);\n }\n\n this._isTicking = false;\n };\n\n _proto.componentDidMount = function componentDidMount() {\n window.addEventListener("scroll", this.scrollListener);\n var scrollPosition;\n var _this$props$location = this.props.location,\n key = _this$props$location.key,\n hash = _this$props$location.hash;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n\n if (scrollPosition) {\n this.windowScroll(scrollPosition, undefined);\n } else if (hash) {\n this.scrollToHash(decodeURI(hash), undefined);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n window.removeEventListener("scroll", this.scrollListener);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props$location2 = this.props.location,\n hash = _this$props$location2.hash,\n key = _this$props$location2.key;\n var scrollPosition;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n /** There are two pieces of state: the browser url and\n * history state which keeps track of scroll position\n * Native behaviour prescribes that we ought to restore scroll position\n * when a user navigates back in their browser (this is the `POP` action)\n * Currently, reach router has a bug that prevents this at https://github.com/reach/router/issues/228\n * So we _always_ stick to the url as a source of truth — if the url\n * contains a hash, we scroll to it\n */\n\n\n if (hash) {\n this.scrollToHash(decodeURI(hash), prevProps);\n } else {\n this.windowScroll(scrollPosition, prevProps);\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(ScrollContext.Provider, {\n value: this._stateStorage\n }, this.props.children);\n };\n\n return ScrollHandler;\n}(React.Component);\n\nexports.ScrollHandler = ScrollHandler;\nScrollHandler.propTypes = {\n shouldUpdateScroll: _propTypes.default.func,\n children: _propTypes.default.element.isRequired,\n location: _propTypes.default.object.isRequired\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC9zY3JvbGwtaGFuZGxlci5qcz8xMjdjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDZCQUE2QixtQkFBTyxDQUFDLElBQThDOztBQUVuRixrQkFBa0I7QUFDbEIscUJBQXFCLEdBQUcscUJBQXFCOztBQUU3QyxxREFBcUQsbUJBQU8sQ0FBQyxJQUE4Qzs7QUFFM0csNkNBQTZDLG1CQUFPLENBQUMsSUFBc0M7O0FBRTNGLG9DQUFvQyxtQkFBTyxDQUFDLElBQU87O0FBRW5ELHdDQUF3QyxtQkFBTyxDQUFDLElBQVk7O0FBRTVELHNCQUFzQixtQkFBTyxDQUFDLElBQW1COztBQUVqRCxnREFBZ0QsZ0RBQWdELHVDQUF1QyxzQ0FBc0Msb0ZBQW9GLDJEQUEyRCxFQUFFLGVBQWU7O0FBRTdVLG9EQUFvRCw2Q0FBNkMsWUFBWSxFQUFFLDRFQUE0RSxTQUFTLGdCQUFnQixFQUFFLG1EQUFtRCwrQkFBK0IsdUJBQXVCLEVBQUUsaUJBQWlCLHNGQUFzRix1QkFBdUIsMkVBQTJFLHFGQUFxRixzQ0FBc0MsMENBQTBDLEVBQUUsT0FBTyx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLGFBQWEsd0JBQXdCLEVBQUUsZUFBZTs7QUFFbHlCO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1RUFBdUUsYUFBYTtBQUNwRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDOztBQUVELHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjE0MzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLlNjcm9sbEhhbmRsZXIgPSBleHBvcnRzLlNjcm9sbENvbnRleHQgPSB2b2lkIDA7XG5cbnZhciBfYXNzZXJ0VGhpc0luaXRpYWxpemVkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpKTtcblxudmFyIF9pbmhlcml0c0xvb3NlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNMb29zZVwiKSk7XG5cbnZhciBSZWFjdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5cbnZhciBfc2Vzc2lvblN0b3JhZ2UgPSByZXF1aXJlKFwiLi9zZXNzaW9uLXN0b3JhZ2VcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkgeyBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7IHZhciBjYWNoZUJhYmVsSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7IHZhciBjYWNoZU5vZGVJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApIHsgcmV0dXJuIG5vZGVJbnRlcm9wID8gY2FjaGVOb2RlSW50ZXJvcCA6IGNhY2hlQmFiZWxJbnRlcm9wOyB9KShub2RlSW50ZXJvcCk7IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqLCBub2RlSW50ZXJvcCkgeyBpZiAoIW5vZGVJbnRlcm9wICYmIG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHsgcmV0dXJuIHsgZGVmYXVsdDogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoa2V5ICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7IHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOyBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7IH0gZWxzZSB7IG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSB9IG5ld09iai5kZWZhdWx0ID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbnZhciBTY3JvbGxDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobmV3IF9zZXNzaW9uU3RvcmFnZS5TZXNzaW9uU3RvcmFnZSgpKTtcbmV4cG9ydHMuU2Nyb2xsQ29udGV4dCA9IFNjcm9sbENvbnRleHQ7XG5TY3JvbGxDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJHYXRzYnlTY3JvbGxDb250ZXh0XCI7XG5cbnZhciBTY3JvbGxIYW5kbGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gICgwLCBfaW5oZXJpdHNMb29zZTIuZGVmYXVsdCkoU2Nyb2xsSGFuZGxlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU2Nyb2xsSGFuZGxlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5fc3RhdGVTdG9yYWdlID0gbmV3IF9zZXNzaW9uU3RvcmFnZS5TZXNzaW9uU3RvcmFnZSgpO1xuICAgIF90aGlzLl9pc1RpY2tpbmcgPSBmYWxzZTtcbiAgICBfdGhpcy5fbGF0ZXN0S25vd25TY3JvbGxZID0gMDtcblxuICAgIF90aGlzLnNjcm9sbExpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuX2xhdGVzdEtub3duU2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZO1xuXG4gICAgICBpZiAoIV90aGlzLl9pc1RpY2tpbmcpIHtcbiAgICAgICAgX3RoaXMuX2lzVGlja2luZyA9IHRydWU7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fc2F2ZVNjcm9sbC5iaW5kKCgwLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkMi5kZWZhdWx0KShfdGhpcykpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMud2luZG93U2Nyb2xsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChfdGhpcy5zaG91bGRVcGRhdGVTY3JvbGwocHJldlByb3BzLCBfdGhpcy5wcm9wcykpIHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuc2Nyb2xsVG9IYXNoID0gZnVuY3Rpb24gKGhhc2gsIHByZXZQcm9wcykge1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoYXNoLnN1YnN0cmluZygxKSk7XG5cbiAgICAgIGlmIChub2RlICYmIF90aGlzLnNob3VsZFVwZGF0ZVNjcm9sbChwcmV2UHJvcHMsIF90aGlzLnByb3BzKSkge1xuICAgICAgICBub2RlLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnNob3VsZFVwZGF0ZVNjcm9sbCA9IGZ1bmN0aW9uIChwcmV2Um91dGVyUHJvcHMsIHJvdXRlclByb3BzKSB7XG4gICAgICB2YXIgc2hvdWxkVXBkYXRlU2Nyb2xsID0gX3RoaXMucHJvcHMuc2hvdWxkVXBkYXRlU2Nyb2xsO1xuXG4gICAgICBpZiAoIXNob3VsZFVwZGF0ZVNjcm9sbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gSGFjayB0byBhbGxvdyBhY2Nlc3NpbmcgdGhpcy5fc3RhdGVTdG9yYWdlLlxuXG5cbiAgICAgIHJldHVybiBzaG91bGRVcGRhdGVTY3JvbGwuY2FsbCgoMCwgX2Fzc2VydFRoaXNJbml0aWFsaXplZDIuZGVmYXVsdCkoX3RoaXMpLCBwcmV2Um91dGVyUHJvcHMsIHJvdXRlclByb3BzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFNjcm9sbEhhbmRsZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5fc2F2ZVNjcm9sbCA9IGZ1bmN0aW9uIF9zYXZlU2Nyb2xsKCkge1xuICAgIHZhciBrZXkgPSB0aGlzLnByb3BzLmxvY2F0aW9uLmtleSB8fCBudWxsO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgdGhpcy5fc3RhdGVTdG9yYWdlLnNhdmUodGhpcy5wcm9wcy5sb2NhdGlvbiwga2V5LCB0aGlzLl9sYXRlc3RLbm93blNjcm9sbFkpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVGlja2luZyA9IGZhbHNlO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xuICAgIHZhciBzY3JvbGxQb3NpdGlvbjtcbiAgICB2YXIgX3RoaXMkcHJvcHMkbG9jYXRpb24gPSB0aGlzLnByb3BzLmxvY2F0aW9uLFxuICAgICAgICBrZXkgPSBfdGhpcyRwcm9wcyRsb2NhdGlvbi5rZXksXG4gICAgICAgIGhhc2ggPSBfdGhpcyRwcm9wcyRsb2NhdGlvbi5oYXNoO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLl9zdGF0ZVN0b3JhZ2UucmVhZCh0aGlzLnByb3BzLmxvY2F0aW9uLCBrZXkpO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxQb3NpdGlvbikge1xuICAgICAgdGhpcy53aW5kb3dTY3JvbGwoc2Nyb2xsUG9zaXRpb24sIHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIGlmIChoYXNoKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvSGFzaChkZWNvZGVVUkkoaGFzaCksIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgdmFyIF90aGlzJHByb3BzJGxvY2F0aW9uMiA9IHRoaXMucHJvcHMubG9jYXRpb24sXG4gICAgICAgIGhhc2ggPSBfdGhpcyRwcm9wcyRsb2NhdGlvbjIuaGFzaCxcbiAgICAgICAga2V5ID0gX3RoaXMkcHJvcHMkbG9jYXRpb24yLmtleTtcbiAgICB2YXIgc2Nyb2xsUG9zaXRpb247XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBzY3JvbGxQb3NpdGlvbiA9IHRoaXMuX3N0YXRlU3RvcmFnZS5yZWFkKHRoaXMucHJvcHMubG9jYXRpb24sIGtleSk7XG4gICAgfVxuICAgIC8qKiAgVGhlcmUgYXJlIHR3byBwaWVjZXMgb2Ygc3RhdGU6IHRoZSBicm93c2VyIHVybCBhbmRcbiAgICAgKiBoaXN0b3J5IHN0YXRlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHNjcm9sbCBwb3NpdGlvblxuICAgICAqIE5hdGl2ZSBiZWhhdmlvdXIgcHJlc2NyaWJlcyB0aGF0IHdlIG91Z2h0IHRvIHJlc3RvcmUgc2Nyb2xsIHBvc2l0aW9uXG4gICAgICogd2hlbiBhIHVzZXIgbmF2aWdhdGVzIGJhY2sgaW4gdGhlaXIgYnJvd3NlciAodGhpcyBpcyB0aGUgYFBPUGAgYWN0aW9uKVxuICAgICAqIEN1cnJlbnRseSwgcmVhY2ggcm91dGVyIGhhcyBhIGJ1ZyB0aGF0IHByZXZlbnRzIHRoaXMgYXQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWNoL3JvdXRlci9pc3N1ZXMvMjI4XG4gICAgICogU28gd2UgX2Fsd2F5c18gc3RpY2sgdG8gdGhlIHVybCBhcyBhIHNvdXJjZSBvZiB0cnV0aCDigJQgaWYgdGhlIHVybFxuICAgICAqIGNvbnRhaW5zIGEgaGFzaCwgd2Ugc2Nyb2xsIHRvIGl0XG4gICAgICovXG5cblxuICAgIGlmIChoYXNoKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvSGFzaChkZWNvZGVVUkkoaGFzaCksIHByZXZQcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2luZG93U2Nyb2xsKHNjcm9sbFBvc2l0aW9uLCBwcmV2UHJvcHMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogdGhpcy5fc3RhdGVTdG9yYWdlXG4gICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH07XG5cbiAgcmV0dXJuIFNjcm9sbEhhbmRsZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbmV4cG9ydHMuU2Nyb2xsSGFuZGxlciA9IFNjcm9sbEhhbmRsZXI7XG5TY3JvbGxIYW5kbGVyLnByb3BUeXBlcyA9IHtcbiAgc2hvdWxkVXBkYXRlU2Nyb2xsOiBfcHJvcFR5cGVzLmRlZmF1bHQuZnVuYyxcbiAgY2hpbGRyZW46IF9wcm9wVHlwZXMuZGVmYXVsdC5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIGxvY2F0aW9uOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWRcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1432\n')},1142:function(__unused_webpack_module,exports){"use strict";eval('\n\nexports.__esModule = true;\nexports.SessionStorage = void 0;\nvar STATE_KEY_PREFIX = "@@scroll|";\nvar GATSBY_ROUTER_SCROLL_STATE = "___GATSBY_REACT_ROUTER_SCROLL";\n\nvar SessionStorage = /*#__PURE__*/function () {\n function SessionStorage() {}\n\n var _proto = SessionStorage.prototype;\n\n _proto.read = function read(location, key) {\n var stateKey = this.getStateKey(location, key);\n\n try {\n var value = window.sessionStorage.getItem(stateKey);\n return value ? JSON.parse(value) : 0;\n } catch (e) {\n if (false) {}\n\n if (window && window[GATSBY_ROUTER_SCROLL_STATE] && window[GATSBY_ROUTER_SCROLL_STATE][stateKey]) {\n return window[GATSBY_ROUTER_SCROLL_STATE][stateKey];\n }\n\n return 0;\n }\n };\n\n _proto.save = function save(location, key, value) {\n var stateKey = this.getStateKey(location, key);\n var storedValue = JSON.stringify(value);\n\n try {\n window.sessionStorage.setItem(stateKey, storedValue);\n } catch (e) {\n if (window && window[GATSBY_ROUTER_SCROLL_STATE]) {\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n } else {\n window[GATSBY_ROUTER_SCROLL_STATE] = {};\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n }\n\n if (false) {}\n }\n };\n\n _proto.getStateKey = function getStateKey(location, key) {\n var stateKeyBase = "" + STATE_KEY_PREFIX + location.pathname;\n return key === null || typeof key === "undefined" ? stateKeyBase : stateKeyBase + "|" + key;\n };\n\n return SessionStorage;\n}();\n\nexports.SessionStorage = SessionStorage;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC9zZXNzaW9uLXN0b3JhZ2UuanM/ZmUxNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7QUFDbEIsc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxVQUFVLEtBQXFDLEVBQUUsRUFFMUM7O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLEtBQXFDLEVBQUUsRUFFMUM7QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCxzQkFBc0IiLCJmaWxlIjoiMTE0Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5TZXNzaW9uU3RvcmFnZSA9IHZvaWQgMDtcbnZhciBTVEFURV9LRVlfUFJFRklYID0gXCJAQHNjcm9sbHxcIjtcbnZhciBHQVRTQllfUk9VVEVSX1NDUk9MTF9TVEFURSA9IFwiX19fR0FUU0JZX1JFQUNUX1JPVVRFUl9TQ1JPTExcIjtcblxudmFyIFNlc3Npb25TdG9yYWdlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU2Vzc2lvblN0b3JhZ2UoKSB7fVxuXG4gIHZhciBfcHJvdG8gPSBTZXNzaW9uU3RvcmFnZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnJlYWQgPSBmdW5jdGlvbiByZWFkKGxvY2F0aW9uLCBrZXkpIHtcbiAgICB2YXIgc3RhdGVLZXkgPSB0aGlzLmdldFN0YXRlS2V5KGxvY2F0aW9uLCBrZXkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWx1ZSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHN0YXRlS2V5KTtcbiAgICAgIHJldHVybiB2YWx1ZSA/IEpTT04ucGFyc2UodmFsdWUpIDogMDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltnYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbF0gVW5hYmxlIHRvIGFjY2VzcyBzZXNzaW9uU3RvcmFnZTsgc2Vzc2lvblN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZS5cIik7XG4gICAgICB9XG5cbiAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXSAmJiB3aW5kb3dbR0FUU0JZX1JPVVRFUl9TQ1JPTExfU1RBVEVdW3N0YXRlS2V5XSkge1xuICAgICAgICByZXR1cm4gd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXVtzdGF0ZUtleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2F2ZSA9IGZ1bmN0aW9uIHNhdmUobG9jYXRpb24sIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgc3RhdGVLZXkgPSB0aGlzLmdldFN0YXRlS2V5KGxvY2F0aW9uLCBrZXkpO1xuICAgIHZhciBzdG9yZWRWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuICAgIHRyeSB7XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShzdGF0ZUtleSwgc3RvcmVkVmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXSkge1xuICAgICAgICB3aW5kb3dbR0FUU0JZX1JPVVRFUl9TQ1JPTExfU1RBVEVdW3N0YXRlS2V5XSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXSA9IHt9O1xuICAgICAgICB3aW5kb3dbR0FUU0JZX1JPVVRFUl9TQ1JPTExfU1RBVEVdW3N0YXRlS2V5XSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltnYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbF0gVW5hYmxlIHRvIHNhdmUgc3RhdGUgaW4gc2Vzc2lvblN0b3JhZ2U7IHNlc3Npb25TdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0U3RhdGVLZXkgPSBmdW5jdGlvbiBnZXRTdGF0ZUtleShsb2NhdGlvbiwga2V5KSB7XG4gICAgdmFyIHN0YXRlS2V5QmFzZSA9IFwiXCIgKyBTVEFURV9LRVlfUFJFRklYICsgbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgcmV0dXJuIGtleSA9PT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSBcInVuZGVmaW5lZFwiID8gc3RhdGVLZXlCYXNlIDogc3RhdGVLZXlCYXNlICsgXCJ8XCIgKyBrZXk7XG4gIH07XG5cbiAgcmV0dXJuIFNlc3Npb25TdG9yYWdlO1xufSgpO1xuXG5leHBvcnRzLlNlc3Npb25TdG9yYWdlID0gU2Vzc2lvblN0b3JhZ2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1142\n')},4855:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nexports.useScrollRestoration = useScrollRestoration;\n\nvar _scrollHandler = __webpack_require__(1432);\n\nvar _react = __webpack_require__(7294);\n\nvar _reachRouter = __webpack_require__(9499);\n\nfunction useScrollRestoration(identifier) {\n var location = (0, _reachRouter.useLocation)();\n var state = (0, _react.useContext)(_scrollHandler.ScrollContext);\n var ref = (0, _react.useRef)(null);\n (0, _react.useLayoutEffect)(function () {\n if (ref.current) {\n var position = state.read(location, identifier);\n ref.current.scrollTo(0, position || 0);\n }\n }, [location.key]);\n return {\n ref: ref,\n onScroll: function onScroll() {\n if (ref.current) {\n state.save(location, identifier, ref.current.scrollTop);\n }\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC91c2Utc2Nyb2xsLXJlc3RvcmF0aW9uLmpzP2RlZWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCLDRCQUE0Qjs7QUFFNUIscUJBQXFCLG1CQUFPLENBQUMsSUFBa0I7O0FBRS9DLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI0ODU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnVzZVNjcm9sbFJlc3RvcmF0aW9uID0gdXNlU2Nyb2xsUmVzdG9yYXRpb247XG5cbnZhciBfc2Nyb2xsSGFuZGxlciA9IHJlcXVpcmUoXCIuL3Njcm9sbC1oYW5kbGVyXCIpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG52YXIgX3JlYWNoUm91dGVyID0gcmVxdWlyZShcIkBnYXRzYnlqcy9yZWFjaC1yb3V0ZXJcIik7XG5cbmZ1bmN0aW9uIHVzZVNjcm9sbFJlc3RvcmF0aW9uKGlkZW50aWZpZXIpIHtcbiAgdmFyIGxvY2F0aW9uID0gKDAsIF9yZWFjaFJvdXRlci51c2VMb2NhdGlvbikoKTtcbiAgdmFyIHN0YXRlID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfc2Nyb2xsSGFuZGxlci5TY3JvbGxDb250ZXh0KTtcbiAgdmFyIHJlZiA9ICgwLCBfcmVhY3QudXNlUmVmKShudWxsKTtcbiAgKDAsIF9yZWFjdC51c2VMYXlvdXRFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IHN0YXRlLnJlYWQobG9jYXRpb24sIGlkZW50aWZpZXIpO1xuICAgICAgcmVmLmN1cnJlbnQuc2Nyb2xsVG8oMCwgcG9zaXRpb24gfHwgMCk7XG4gICAgfVxuICB9LCBbbG9jYXRpb24ua2V5XSk7XG4gIHJldHVybiB7XG4gICAgcmVmOiByZWYsXG4gICAgb25TY3JvbGw6IGZ1bmN0aW9uIG9uU2Nyb2xsKCkge1xuICAgICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICAgIHN0YXRlLnNhdmUobG9jYXRpb24sIGlkZW50aWZpZXIsIHJlZi5jdXJyZW50LnNjcm9sbFRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4855\n")},4999:function(__unused_webpack_module,exports,__webpack_require__){eval('// prefer default export if available\nvar preferDefault=function preferDefault(m){return m&&m.default||m;};exports.components={"component---src-pages-404-tsx":function componentSrcPages404Tsx(){return Promise.all(/* import() | component---src-pages-404-tsx */[__webpack_require__.e(532), __webpack_require__.e(30), __webpack_require__.e(351), __webpack_require__.e(218)]).then(__webpack_require__.bind(__webpack_require__, 9458));},"component---src-pages-cejst-tsx":function componentSrcPagesCejstTsx(){return Promise.all(/* import() | component---src-pages-cejst-tsx */[__webpack_require__.e(532), __webpack_require__.e(30), __webpack_require__.e(644), __webpack_require__.e(351), __webpack_require__.e(281)]).then(__webpack_require__.bind(__webpack_require__, 1317));},"component---src-pages-contact-tsx":function componentSrcPagesContactTsx(){return Promise.all(/* import() | component---src-pages-contact-tsx */[__webpack_require__.e(532), __webpack_require__.e(30), __webpack_require__.e(351), __webpack_require__.e(650)]).then(__webpack_require__.bind(__webpack_require__, 440));},"component---src-pages-index-tsx":function componentSrcPagesIndexTsx(){return Promise.all(/* import() | component---src-pages-index-tsx */[__webpack_require__.e(532), __webpack_require__.e(30), __webpack_require__.e(351), __webpack_require__.e(691)]).then(__webpack_require__.bind(__webpack_require__, 9697));},"component---src-pages-methodology-tsx":function componentSrcPagesMethodologyTsx(){return Promise.all(/* import() | component---src-pages-methodology-tsx */[__webpack_require__.e(532), __webpack_require__.e(30), __webpack_require__.e(351), __webpack_require__.e(647)]).then(__webpack_require__.bind(__webpack_require__, 1095));}};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9fdGhpc19pc192aXJ0dWFsX2ZzX3BhdGhfLyR2aXJ0dWFsL2FzeW5jLXJlcXVpcmVzLmpzPzM2YzEiXSwibmFtZXMiOlsicHJlZmVyRGVmYXVsdCIsIm0iLCJkZWZhdWx0IiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxHQUFNQSxjQUFhLENBQUcsUUFBaEJBLGNBQWdCLENBQUFDLENBQUMsUUFBS0EsRUFBQyxFQUFJQSxDQUFDLENBQUNDLE9BQVIsRUFBb0JELENBQXhCLEVBQXZCLENBRUFFLGtCQUFBLENBQXFCLENBQ25CLGdDQUFpQyx5Q0FBTSxxT0FBTixFQURkLENBRW5CLGtDQUFtQywyQ0FBTSxtUUFBTixFQUZoQixDQUduQixvQ0FBcUMsNkNBQU0sd09BQU4sRUFIbEIsQ0FJbkIsa0NBQW1DLDJDQUFNLHVPQUFOLEVBSmhCLENBS25CLHdDQUF5QyxpREFBTSw2T0FBTixFQUx0QixDQUFyQiIsImZpbGUiOiI0OTk5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcHJlZmVyIGRlZmF1bHQgZXhwb3J0IGlmIGF2YWlsYWJsZVxuY29uc3QgcHJlZmVyRGVmYXVsdCA9IG0gPT4gKG0gJiYgbS5kZWZhdWx0KSB8fCBtXG5cbmV4cG9ydHMuY29tcG9uZW50cyA9IHtcbiAgXCJjb21wb25lbnQtLS1zcmMtcGFnZXMtNDA0LXRzeFwiOiAoKSA9PiBpbXBvcnQoXCIuLy4uLy4uLy4uL3NyYy9wYWdlcy80MDQudHN4XCIgLyogd2VicGFja0NodW5rTmFtZTogXCJjb21wb25lbnQtLS1zcmMtcGFnZXMtNDA0LXRzeFwiICovKSxcbiAgXCJjb21wb25lbnQtLS1zcmMtcGFnZXMtY2Vqc3QtdHN4XCI6ICgpID0+IGltcG9ydChcIi4vLi4vLi4vLi4vc3JjL3BhZ2VzL2NlanN0LnRzeFwiIC8qIHdlYnBhY2tDaHVua05hbWU6IFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLWNlanN0LXRzeFwiICovKSxcbiAgXCJjb21wb25lbnQtLS1zcmMtcGFnZXMtY29udGFjdC10c3hcIjogKCkgPT4gaW1wb3J0KFwiLi8uLi8uLi8uLi9zcmMvcGFnZXMvY29udGFjdC50c3hcIiAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImNvbXBvbmVudC0tLXNyYy1wYWdlcy1jb250YWN0LXRzeFwiICovKSxcbiAgXCJjb21wb25lbnQtLS1zcmMtcGFnZXMtaW5kZXgtdHN4XCI6ICgpID0+IGltcG9ydChcIi4vLi4vLi4vLi4vc3JjL3BhZ2VzL2luZGV4LnRzeFwiIC8qIHdlYnBhY2tDaHVua05hbWU6IFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLWluZGV4LXRzeFwiICovKSxcbiAgXCJjb21wb25lbnQtLS1zcmMtcGFnZXMtbWV0aG9kb2xvZ3ktdHN4XCI6ICgpID0+IGltcG9ydChcIi4vLi4vLi4vLi4vc3JjL3BhZ2VzL21ldGhvZG9sb2d5LnRzeFwiIC8qIHdlYnBhY2tDaHVua05hbWU6IFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLW1ldGhvZG9sb2d5LXRzeFwiICovKVxufVxuXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4999\n')},5182:function(module,__unused_webpack_exports,__webpack_require__){eval('module.exports=[{plugin:__webpack_require__(5526),options:{"plugins":[],"path":"/home/runner/work/justice40-tool/justice40-tool/client/src/intl","languages":["en","es"],"defaultLanguage":"en","redirect":true}},{plugin:__webpack_require__(6101),options:{"plugins":[],"dsn":"https://da0c28c22c9e4ff69d81650cabdec3d9@o1022662.ingest.sentry.io/5989007","sampleRate":0.7}},{plugin:__webpack_require__(9037),options:{"plugins":[]}}];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9hcGktcnVubmVyLWJyb3dzZXItcGx1Z2lucy5qcz8yZGUyIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJwbHVnaW4iLCJyZXF1aXJlIiwib3B0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsT0FBUCxDQUFpQixDQUFDLENBQ1pDLE1BQU0sQ0FBRUMsbUJBQU8sQ0FBQyxJQUFELENBREgsQ0FFWkMsT0FBTyxDQUFFLENBQUMsVUFBVSxFQUFYLENBQWMsT0FBTyxpRUFBckIsQ0FBdUYsWUFBWSxDQUFDLElBQUQsQ0FBTSxJQUFOLENBQW5HLENBQStHLGtCQUFrQixJQUFqSSxDQUFzSSxXQUFXLElBQWpKLENBRkcsQ0FBRCxDQUdYLENBQ0FGLE1BQU0sQ0FBRUMsbUJBQU8sQ0FBQyxJQUFELENBRGYsQ0FFQUMsT0FBTyxDQUFFLENBQUMsVUFBVSxFQUFYLENBQWMsTUFBTSw0RUFBcEIsQ0FBaUcsYUFBYSxHQUE5RyxDQUZULENBSFcsQ0FNWCxDQUNBRixNQUFNLENBQUVDLG1CQUFPLENBQUMsSUFBRCxDQURmLENBRUFDLE9BQU8sQ0FBRSxDQUFDLFVBQVUsRUFBWCxDQUZULENBTlcsQ0FBakIiLCJmaWxlIjoiNTE4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gW3tcbiAgICAgIHBsdWdpbjogcmVxdWlyZSgnLi4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4taW50bC9nYXRzYnktYnJvd3Nlci5qcycpLFxuICAgICAgb3B0aW9uczoge1wicGx1Z2luc1wiOltdLFwicGF0aFwiOlwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L3NyYy9pbnRsXCIsXCJsYW5ndWFnZXNcIjpbXCJlblwiLFwiZXNcIl0sXCJkZWZhdWx0TGFuZ3VhZ2VcIjpcImVuXCIsXCJyZWRpcmVjdFwiOnRydWV9LFxuICAgIH0se1xuICAgICAgcGx1Z2luOiByZXF1aXJlKCcuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9nYXRzYnkvZ2F0c2J5LWJyb3dzZXIuanMnKSxcbiAgICAgIG9wdGlvbnM6IHtcInBsdWdpbnNcIjpbXSxcImRzblwiOlwiaHR0cHM6Ly9kYTBjMjhjMjJjOWU0ZmY2OWQ4MTY1MGNhYmRlYzNkOUBvMTAyMjY2Mi5pbmdlc3Quc2VudHJ5LmlvLzU5ODkwMDdcIixcInNhbXBsZVJhdGVcIjowLjd9LFxuICAgIH0se1xuICAgICAgcGx1Z2luOiByZXF1aXJlKCcuLi9nYXRzYnktYnJvd3Nlci5qcycpLFxuICAgICAgb3B0aW9uczoge1wicGx1Z2luc1wiOltdfSxcbiAgICB9XVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5182\n')},7343:function(__unused_webpack_module,exports,__webpack_require__){eval('var plugins=__webpack_require__(5182);var _require$publicLoader=__webpack_require__(8741)/* .publicLoader */ .jN,getResourceURLsForPathname=_require$publicLoader.getResourceURLsForPathname,loadPage=_require$publicLoader.loadPage,loadPageSync=_require$publicLoader.loadPageSync;exports.h=function(api,args,defaultReturn,argTransform){if(args===void 0){args={};}// Hooks for gatsby-cypress\'s API handler\nif(undefined){if(window.___apiHandler){window.___apiHandler(api);}else if(window.___resolvedAPIs){window.___resolvedAPIs.push(api);}else{window.___resolvedAPIs=[api];}}var results=plugins.map(function(plugin){if(!plugin.plugin[api]){return undefined;}args.getResourceURLsForPathname=getResourceURLsForPathname;args.loadPage=loadPage;args.loadPageSync=loadPageSync;var result=plugin.plugin[api](args,plugin.options);if(result&&argTransform){args=argTransform({args:args,result:result,plugin:plugin});}return result;});// Filter out undefined results.\nresults=results.filter(function(result){return typeof result!=="undefined";});if(results.length>0){return results;}else if(defaultReturn){return[defaultReturn];}else{return[];}};exports.I=function(api,args,defaultReturn){return plugins.reduce(function(previous,next){return next.plugin[api]?previous.then(function(){return next.plugin[api](args,next.options);}):previous;},Promise.resolve());};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9hcGktcnVubmVyLWJyb3dzZXIuanM/YzZkYiJdLCJuYW1lcyI6WyJwbHVnaW5zIiwicmVxdWlyZSIsImdldFJlc291cmNlVVJMc0ZvclBhdGhuYW1lIiwibG9hZFBhZ2UiLCJsb2FkUGFnZVN5bmMiLCJleHBvcnRzIiwiYXBpIiwiYXJncyIsImRlZmF1bHRSZXR1cm4iLCJhcmdUcmFuc2Zvcm0iLCJwcm9jZXNzIiwid2luZG93IiwiX19fYXBpSGFuZGxlciIsIl9fX3Jlc29sdmVkQVBJcyIsInB1c2giLCJyZXN1bHRzIiwibWFwIiwicGx1Z2luIiwidW5kZWZpbmVkIiwicmVzdWx0Iiwib3B0aW9ucyIsImZpbHRlciIsImxlbmd0aCIsInJlZHVjZSIsInByZXZpb3VzIiwibmV4dCIsInRoZW4iLCJQcm9taXNlIiwicmVzb2x2ZSJdLCJtYXBwaW5ncyI6IkFBQUEsR0FBTUEsUUFBTyxDQUFHQyxtQkFBTyxDQUFDLEtBQXhCLENBQ0EsMEJBSUlBLGdEQUpKLENBQ0VDLDBCQURGLHVCQUNFQSwwQkFERixDQUVFQyxRQUZGLHVCQUVFQSxRQUZGLENBR0VDLFlBSEYsdUJBR0VBLFlBSEYsQ0FNQUMsU0FBQSxDQUFvQixTQUFDQyxHQUFELENBQU1DLElBQU4sQ0FBaUJDLGFBQWpCLENBQWdDQyxZQUFoQyxDQUFpRCxJQUEzQ0YsSUFBMkMsV0FBM0NBLElBQTJDLENBQXBDLEVBQW9DLEVBQ25FO0FBQ0EsR0FBSUcsU0FBSixDQUFpQyxDQUMvQixHQUFJQyxNQUFNLENBQUNDLGFBQVgsQ0FBMEIsQ0FDeEJELE1BQU0sQ0FBQ0MsYUFBUCxDQUFxQk4sR0FBckIsRUFDRCxDQUZELElBRU8sSUFBSUssTUFBTSxDQUFDRSxlQUFYLENBQTRCLENBQ2pDRixNQUFNLENBQUNFLGVBQVAsQ0FBdUJDLElBQXZCLENBQTRCUixHQUE1QixFQUNELENBRk0sSUFFQSxDQUNMSyxNQUFNLENBQUNFLGVBQVAsQ0FBeUIsQ0FBQ1AsR0FBRCxDQUF6QixDQUNELENBQ0YsQ0FFRCxHQUFJUyxRQUFPLENBQUdmLE9BQU8sQ0FBQ2dCLEdBQVIsQ0FBWSxTQUFBQyxNQUFNLENBQUksQ0FDbEMsR0FBSSxDQUFDQSxNQUFNLENBQUNBLE1BQVAsQ0FBY1gsR0FBZCxDQUFMLENBQXlCLENBQ3ZCLE1BQU9ZLFVBQVAsQ0FDRCxDQUVEWCxJQUFJLENBQUNMLDBCQUFMLENBQWtDQSwwQkFBbEMsQ0FDQUssSUFBSSxDQUFDSixRQUFMLENBQWdCQSxRQUFoQixDQUNBSSxJQUFJLENBQUNILFlBQUwsQ0FBb0JBLFlBQXBCLENBRUEsR0FBTWUsT0FBTSxDQUFHRixNQUFNLENBQUNBLE1BQVAsQ0FBY1gsR0FBZCxFQUFtQkMsSUFBbkIsQ0FBeUJVLE1BQU0sQ0FBQ0csT0FBaEMsQ0FBZixDQUNBLEdBQUlELE1BQU0sRUFBSVYsWUFBZCxDQUE0QixDQUMxQkYsSUFBSSxDQUFHRSxZQUFZLENBQUMsQ0FBRUYsSUFBSSxDQUFKQSxJQUFGLENBQVFZLE1BQU0sQ0FBTkEsTUFBUixDQUFnQkYsTUFBTSxDQUFOQSxNQUFoQixDQUFELENBQW5CLENBQ0QsQ0FDRCxNQUFPRSxPQUFQLENBQ0QsQ0FkYSxDQUFkLENBZ0JBO0FBQ0FKLE9BQU8sQ0FBR0EsT0FBTyxDQUFDTSxNQUFSLENBQWUsU0FBQUYsTUFBTSxRQUFJLE9BQU9BLE9BQVAsY0FBSixFQUFyQixDQUFWLENBRUEsR0FBSUosT0FBTyxDQUFDTyxNQUFSLENBQWlCLENBQXJCLENBQXdCLENBQ3RCLE1BQU9QLFFBQVAsQ0FDRCxDQUZELElBRU8sSUFBSVAsYUFBSixDQUFtQixDQUN4QixNQUFPLENBQUNBLGFBQUQsQ0FBUCxDQUNELENBRk0sSUFFQSxDQUNMLE1BQU8sRUFBUCxDQUNELENBQ0YsQ0F0Q0QsQ0F3Q0FILFNBQUEsQ0FBeUIsU0FBQ0MsR0FBRCxDQUFNQyxJQUFOLENBQVlDLGFBQVosUUFDdkJSLFFBQU8sQ0FBQ3VCLE1BQVIsQ0FDRSxTQUFDQyxRQUFELENBQVdDLElBQVgsUUFDRUEsS0FBSSxDQUFDUixNQUFMLENBQVlYLEdBQVosRUFDSWtCLFFBQVEsQ0FBQ0UsSUFBVCxDQUFjLGlCQUFNRCxLQUFJLENBQUNSLE1BQUwsQ0FBWVgsR0FBWixFQUFpQkMsSUFBakIsQ0FBdUJrQixJQUFJLENBQUNMLE9BQTVCLENBQU4sRUFBZCxDQURKLENBRUlJLFFBSE4sRUFERixDQUtFRyxPQUFPLENBQUNDLE9BQVIsRUFMRixDQUR1QixFQUF6QiIsImZpbGUiOiI3MzQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcGx1Z2lucyA9IHJlcXVpcmUoYC4vYXBpLXJ1bm5lci1icm93c2VyLXBsdWdpbnNgKVxuY29uc3Qge1xuICBnZXRSZXNvdXJjZVVSTHNGb3JQYXRobmFtZSxcbiAgbG9hZFBhZ2UsXG4gIGxvYWRQYWdlU3luYyxcbn0gPSByZXF1aXJlKGAuL2xvYWRlcmApLnB1YmxpY0xvYWRlclxuXG5leHBvcnRzLmFwaVJ1bm5lciA9IChhcGksIGFyZ3MgPSB7fSwgZGVmYXVsdFJldHVybiwgYXJnVHJhbnNmb3JtKSA9PiB7XG4gIC8vIEhvb2tzIGZvciBnYXRzYnktY3lwcmVzcydzIEFQSSBoYW5kbGVyXG4gIGlmIChwcm9jZXNzLmVudi5DWVBSRVNTX1NVUFBPUlQpIHtcbiAgICBpZiAod2luZG93Ll9fX2FwaUhhbmRsZXIpIHtcbiAgICAgIHdpbmRvdy5fX19hcGlIYW5kbGVyKGFwaSlcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5fX19yZXNvbHZlZEFQSXMpIHtcbiAgICAgIHdpbmRvdy5fX19yZXNvbHZlZEFQSXMucHVzaChhcGkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5fX19yZXNvbHZlZEFQSXMgPSBbYXBpXVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHRzID0gcGx1Z2lucy5tYXAocGx1Z2luID0+IHtcbiAgICBpZiAoIXBsdWdpbi5wbHVnaW5bYXBpXSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGFyZ3MuZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUgPSBnZXRSZXNvdXJjZVVSTHNGb3JQYXRobmFtZVxuICAgIGFyZ3MubG9hZFBhZ2UgPSBsb2FkUGFnZVxuICAgIGFyZ3MubG9hZFBhZ2VTeW5jID0gbG9hZFBhZ2VTeW5jXG5cbiAgICBjb25zdCByZXN1bHQgPSBwbHVnaW4ucGx1Z2luW2FwaV0oYXJncywgcGx1Z2luLm9wdGlvbnMpXG4gICAgaWYgKHJlc3VsdCAmJiBhcmdUcmFuc2Zvcm0pIHtcbiAgICAgIGFyZ3MgPSBhcmdUcmFuc2Zvcm0oeyBhcmdzLCByZXN1bHQsIHBsdWdpbiB9KVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0pXG5cbiAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgcmVzdWx0cy5cbiAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiB0eXBlb2YgcmVzdWx0ICE9PSBgdW5kZWZpbmVkYClcblxuICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfSBlbHNlIGlmIChkZWZhdWx0UmV0dXJuKSB7XG4gICAgcmV0dXJuIFtkZWZhdWx0UmV0dXJuXVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBbXVxuICB9XG59XG5cbmV4cG9ydHMuYXBpUnVubmVyQXN5bmMgPSAoYXBpLCBhcmdzLCBkZWZhdWx0UmV0dXJuKSA9PlxuICBwbHVnaW5zLnJlZHVjZShcbiAgICAocHJldmlvdXMsIG5leHQpID0+XG4gICAgICBuZXh0LnBsdWdpblthcGldXG4gICAgICAgID8gcHJldmlvdXMudGhlbigoKSA9PiBuZXh0LnBsdWdpblthcGldKGFyZ3MsIG5leHQub3B0aW9ucykpXG4gICAgICAgIDogcHJldmlvdXMsXG4gICAgUHJvbWlzZS5yZXNvbHZlKClcbiAgKVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7343\n')},8110:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": function() { return /* binding */ _cache_emitter; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/mitt/dist/mitt.es.js\n// \n// An event handler can take an optional event argument\n// and should not return a value\n \n \n\n// An array of all currently registered event handlers for a type\n \n \n// A map of event types and their corresponding event handlers.\n \n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `"*"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `"*"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `"*"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all[\'*\'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\n/* harmony default export */ var mitt_es = (mitt);\n//# sourceMappingURL=mitt.es.js.map\n\n;// CONCATENATED MODULE: ./.cache/emitter.js\nvar emitter=mitt_es();/* harmony default export */ var _cache_emitter = (emitter);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9taXR0L2Rpc3QvbWl0dC5lcy5qcz8xNGI3Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vLmNhY2hlL2VtaXR0ZXIuanM/ZTcyYSJdLCJuYW1lcyI6WyJlbWl0dGVyIiwibWl0dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7OztBQUlBOzs7QUFHQTs7Ozs7O0FBTUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxJQUFJO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxjQUFjLEVBQUU7QUFDckUsb0RBQW9ELG9CQUFvQixFQUFFO0FBQzFFO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBZSxJQUFJLEVBQUM7QUFDcEI7OztBQzdEQSxHQUFNQSxRQUFPLENBQUdDLE9BQUksRUFBcEIsQ0FDQSxtREFBZUQsT0FBZiIsImZpbGUiOiI4MTEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gICAgICBcbi8vIEFuIGV2ZW50IGhhbmRsZXIgY2FuIHRha2UgYW4gb3B0aW9uYWwgZXZlbnQgYXJndW1lbnRcbi8vIGFuZCBzaG91bGQgbm90IHJldHVybiBhIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4vLyBBbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IHJlZ2lzdGVyZWQgZXZlbnQgaGFuZGxlcnMgZm9yIGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuLy8gQSBtYXAgb2YgZXZlbnQgdHlwZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgXG5cbi8qKiBNaXR0OiBUaW55ICh+MjAwYikgZnVuY3Rpb25hbCBldmVudCBlbWl0dGVyIC8gcHVic3ViLlxuICogIEBuYW1lIG1pdHRcbiAqICBAcmV0dXJucyB7TWl0dH1cbiAqL1xuZnVuY3Rpb24gbWl0dChhbGwgICAgICAgICAgICAgICAgICkge1xuXHRhbGwgPSBhbGwgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIFJlZ2lzdGVyIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIGxpc3RlbiBmb3IsIG9yIGBcIipcImAgZm9yIGFsbCBldmVudHNcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBGdW5jdGlvbiB0byBjYWxsIGluIHJlc3BvbnNlIHRvIGdpdmVuIGV2ZW50XG5cdFx0ICogQG1lbWJlck9mIG1pdHRcblx0XHQgKi9cblx0XHRvbjogZnVuY3Rpb24gb24odHlwZSAgICAgICAgLCBoYW5kbGVyICAgICAgICAgICAgICApIHtcblx0XHRcdChhbGxbdHlwZV0gfHwgKGFsbFt0eXBlXSA9IFtdKSkucHVzaChoYW5kbGVyKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIHVucmVnaXN0ZXIgYGhhbmRsZXJgIGZyb20sIG9yIGBcIipcImBcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBIYW5kbGVyIGZ1bmN0aW9uIHRvIHJlbW92ZVxuXHRcdCAqIEBtZW1iZXJPZiBtaXR0XG5cdFx0ICovXG5cdFx0b2ZmOiBmdW5jdGlvbiBvZmYodHlwZSAgICAgICAgLCBoYW5kbGVyICAgICAgICAgICAgICApIHtcblx0XHRcdGlmIChhbGxbdHlwZV0pIHtcblx0XHRcdFx0YWxsW3R5cGVdLnNwbGljZShhbGxbdHlwZV0uaW5kZXhPZihoYW5kbGVyKSA+Pj4gMCwgMSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEludm9rZSBhbGwgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqIElmIHByZXNlbnQsIGBcIipcImAgaGFuZGxlcnMgYXJlIGludm9rZWQgYWZ0ZXIgdHlwZS1tYXRjaGVkIGhhbmRsZXJzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgIFRoZSBldmVudCB0eXBlIHRvIGludm9rZVxuXHRcdCAqIEBwYXJhbSB7QW55fSBbZXZ0XSAgQW55IHZhbHVlIChvYmplY3QgaXMgcmVjb21tZW5kZWQgYW5kIHBvd2VyZnVsKSwgcGFzc2VkIHRvIGVhY2ggaGFuZGxlclxuXHRcdCAqIEBtZW1iZXJPZiBtaXR0XG5cdFx0ICovXG5cdFx0ZW1pdDogZnVuY3Rpb24gZW1pdCh0eXBlICAgICAgICAsIGV2dCAgICAgKSB7XG5cdFx0XHQoYWxsW3R5cGVdIHx8IFtdKS5zbGljZSgpLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyBoYW5kbGVyKGV2dCk7IH0pO1xuXHRcdFx0KGFsbFsnKiddIHx8IFtdKS5zbGljZSgpLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyBoYW5kbGVyKHR5cGUsIGV2dCk7IH0pO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWl0dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pdHQuZXMuanMubWFwXG4iLCJpbXBvcnQgbWl0dCBmcm9tIFwibWl0dFwiXG5cbmNvbnN0IGVtaXR0ZXIgPSBtaXR0KClcbmV4cG9ydCBkZWZhdWx0IGVtaXR0ZXJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8110\n')},2257:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "UD": function() { return /* binding */ findMatchPath; },\n "Cj": function() { return /* binding */ findPath; },\n "GA": function() { return /* binding */ grabMatchParams; },\n "DS": function() { return /* binding */ setMatchPaths; }\n});\n\n// UNUSED EXPORTS: cleanPath\n\n// EXTERNAL MODULE: ./node_modules/@gatsbyjs/reach-router/lib/utils.js\nvar utils = __webpack_require__(2098);\n// EXTERNAL MODULE: ./.cache/strip-prefix.js\nvar strip_prefix = __webpack_require__(1578);\n;// CONCATENATED MODULE: ./.cache/normalize-page-path.js\n/* harmony default export */ var normalize_page_path = (function(path){if(path===undefined){return path;}if(path==="/"){return"/";}if(path.charAt(path.length-1)==="/"){return path.slice(0,-1);}return path;});\n// EXTERNAL MODULE: ./.cache/redirect-utils.js + 1 modules\nvar redirect_utils = __webpack_require__(5166);\n;// CONCATENATED MODULE: ./.cache/find-path.js\nvar pathCache=new Map();var matchPaths=[];var trimPathname=function trimPathname(rawPathname){var pathname=decodeURIComponent(rawPathname);// Remove the pathPrefix from the pathname.\nvar trimmedPathname=(0,strip_prefix/* default */.Z)(pathname,decodeURIComponent("/justice40-tool/842-69a4eec"))// Remove any hashfragment\n.split("#")[0]// Remove search query\n.split("?")[0];return trimmedPathname;};function absolutify(path){// If it\'s already absolute, return as-is\nif(path.startsWith("/")||path.startsWith("https://")||path.startsWith("http://")){return path;}// Calculate path relative to current location, adding a trailing slash to\n// match behavior of @reach/router\nreturn new URL(path,window.location.href+(window.location.href.endsWith("/")?"":"/")).pathname;}/**\n * Set list of matchPaths\n *\n * @param {Array<{path: string, matchPath: string}>} value collection of matchPaths\n */var setMatchPaths=function setMatchPaths(value){matchPaths=value;};/**\n * Return a matchpath url\n * if `match-paths.json` contains `{ "/foo*": "/page1", ...}`, then\n * `/foo?bar=far` => `/page1`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string|null}\n */var findMatchPath=function findMatchPath(rawPathname){var trimmedPathname=cleanPath(rawPathname);var pickPaths=matchPaths.map(function(_ref){var path=_ref.path,matchPath=_ref.matchPath;return{path:matchPath,originalPath:path};});var path=(0,utils.pick)(pickPaths,trimmedPathname);if(path){return normalize_page_path(path.route.originalPath);}return null;};/**\n * Return a matchpath params from reach/router rules\n * if `match-paths.json` contains `{ ":bar/*foo" }`, and the path is /baz/zaz/zoo\n * then it returns\n * { bar: baz, foo: zaz/zoo }\n *\n * @param {string} rawPathname A raw pathname\n * @return {object}\n */var grabMatchParams=function grabMatchParams(rawPathname){var trimmedPathname=cleanPath(rawPathname);var pickPaths=matchPaths.map(function(_ref2){var path=_ref2.path,matchPath=_ref2.matchPath;return{path:matchPath,originalPath:path};});var path=(0,utils.pick)(pickPaths,trimmedPathname);if(path){return path.params;}return{};};// Given a raw URL path, returns the cleaned version of it (trim off\n// `#` and query params), or if it matches an entry in\n// `match-paths.json`, its matched path is returned\n//\n// E.g. `/foo?bar=far` => `/foo`\n//\n// Or if `match-paths.json` contains `{ "/foo*": "/page1", ...}`, then\n// `/foo?bar=far` => `/page1`\nvar findPath=function findPath(rawPathname){var trimmedPathname=trimPathname(absolutify(rawPathname));if(pathCache.has(trimmedPathname)){return pathCache.get(trimmedPathname);}var redirect=(0,redirect_utils/* maybeGetBrowserRedirect */.J)(rawPathname);if(redirect){return findPath(redirect.toPath);}var foundPath=findMatchPath(trimmedPathname);if(!foundPath){foundPath=cleanPath(rawPathname);}pathCache.set(trimmedPathname,foundPath);return foundPath;};/**\n * Clean a url and converts /index.html => /\n * E.g. `/foo?bar=far` => `/foo`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string}\n */var cleanPath=function cleanPath(rawPathname){var trimmedPathname=trimPathname(absolutify(rawPathname));var foundPath=trimmedPathname;if(foundPath==="/index.html"){foundPath="/";}foundPath=normalize_page_path(foundPath);return foundPath;};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9ub3JtYWxpemUtcGFnZS1wYXRoLmpzPzY3YjUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi8uY2FjaGUvZmluZC1wYXRoLmpzP2RmNDQiXSwibmFtZXMiOlsicGF0aCIsInVuZGVmaW5lZCIsImNoYXJBdCIsImxlbmd0aCIsInNsaWNlIiwicGF0aENhY2hlIiwiTWFwIiwibWF0Y2hQYXRocyIsInRyaW1QYXRobmFtZSIsInJhd1BhdGhuYW1lIiwicGF0aG5hbWUiLCJkZWNvZGVVUklDb21wb25lbnQiLCJ0cmltbWVkUGF0aG5hbWUiLCJzdHJpcFByZWZpeCIsIl9fQkFTRV9QQVRIX18iLCJzcGxpdCIsImFic29sdXRpZnkiLCJzdGFydHNXaXRoIiwiVVJMIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiZW5kc1dpdGgiLCJzZXRNYXRjaFBhdGhzIiwidmFsdWUiLCJmaW5kTWF0Y2hQYXRoIiwiY2xlYW5QYXRoIiwicGlja1BhdGhzIiwibWFwIiwibWF0Y2hQYXRoIiwib3JpZ2luYWxQYXRoIiwicGljayIsIm5vcm1hbGl6ZVBhZ2VQYXRoIiwicm91dGUiLCJncmFiTWF0Y2hQYXJhbXMiLCJwYXJhbXMiLCJmaW5kUGF0aCIsImhhcyIsImdldCIsInJlZGlyZWN0IiwibWF5YmVHZXRCcm93c2VyUmVkaXJlY3QiLCJ0b1BhdGgiLCJmb3VuZFBhdGgiLCJzZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBZSxTQUFBQSxJQUFJLENBQUksQ0FDckIsR0FBSUEsSUFBSSxHQUFLQyxTQUFiLENBQXdCLENBQ3RCLE1BQU9ELEtBQVAsQ0FDRCxDQUNELEdBQUlBLElBQUksTUFBUixDQUFrQixDQUNoQixVQUNELENBQ0QsR0FBSUEsSUFBSSxDQUFDRSxNQUFMLENBQVlGLElBQUksQ0FBQ0csTUFBTCxDQUFjLENBQTFCLE9BQUosQ0FBMEMsQ0FDeEMsTUFBT0gsS0FBSSxD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cG9ydCBkZWZhdWx0IHBhdGggPT4ge1xuICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuICBpZiAocGF0aCA9PT0gYC9gKSB7XG4gICAgcmV0dXJuIGAvYFxuICB9XG4gIGlmIChwYXRoLmNoYXJBdChwYXRoLmxlbmd0aCAtIDEpID09PSBgL2ApIHtcbiAgICByZXR1cm4gcGF0aC5zbGljZSgwLCAtMSlcbiAgfVxuICByZXR1cm4gcGF0aFxufVxuIiwiaW1wb3J0IHsgcGljayB9IGZyb20gXCJAZ2F0c2J5anMvcmVhY2gtcm91dGVyL2xpYi91dGlsc1wiXG5pbXBvcnQgc3RyaXBQcmVmaXggZnJvbSBcIi4vc3RyaXAtcHJlZml4XCJcbmltcG9ydCBub3JtYWxpemVQYWdlUGF0aCBmcm9tIFwiLi9ub3JtYWxpemUtcGFnZS1wYXRoXCJcbmltcG9ydCB7IG1heWJlR2V0QnJvd3NlclJlZGlyZWN0IH0gZnJvbSBcIi4vcmVkaXJlY3QtdXRpbHMuanNcIlxuXG5jb25zdCBwYXRoQ2FjaGUgPSBuZXcgTWFwKClcbmxldCBtYXRjaFBhdGhzID0gW11cblxuY29uc3QgdHJpbVBhdGhuYW1lID0gcmF3UGF0aG5hbWUgPT4ge1xuICBjb25zdCBwYXRobmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChyYXdQYXRobmFtZSlcbiAgLy8gUmVtb3ZlIHRoZSBwYXRoUHJlZml4IGZyb20gdGhlIHBhdGhuYW1lLlxuICBjb25zdCB0cmltbWVkUGF0aG5hbWUgPSBzdHJpcFByZWZpeChcbiAgICBwYXRobmFtZSxcbiAgICBkZWNvZGVVUklDb21wb25lbnQoX19CQVNFX1BBVEhfXylcbiAgKVxuICAgIC8vIFJlbW92ZSBhbnkgaGFzaGZyYWdtZW50XG4gICAgLnNwbGl0KGAjYClbMF1cbiAgICAvLyBSZW1vdmUgc2VhcmNoIHF1ZXJ5XG4gICAgLnNwbGl0KGA/YClbMF1cblxuICByZXR1cm4gdHJpbW1lZFBhdGhuYW1lXG59XG5cbmZ1bmN0aW9uIGFic29sdXRpZnkocGF0aCkge1xuICAvLyBJZiBpdCdzIGFscmVhZHkgYWJzb2x1dGUsIHJldHVybiBhcy1pc1xuICBpZiAoXG4gICAgcGF0aC5zdGFydHNXaXRoKGAvYCkgfHxcbiAgICBwYXRoLnN0YXJ0c1dpdGgoYGh0dHBzOi8vYCkgfHxcbiAgICBwYXRoLnN0YXJ0c1dpdGgoYGh0dHA6Ly9gKVxuICApIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG4gIC8vIENhbGN1bGF0ZSBwYXRoIHJlbGF0aXZlIHRvIGN1cnJlbnQgbG9jYXRpb24sIGFkZGluZyBhIHRyYWlsaW5nIHNsYXNoIHRvXG4gIC8vIG1hdGNoIGJlaGF2aW9yIG9mIEByZWFjaC9yb3V0ZXJcbiAgcmV0dXJuIG5ldyBVUkwoXG4gICAgcGF0aCxcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiArICh3aW5kb3cubG9jYXRpb24uaHJlZi5lbmRzV2l0aChgL2ApID8gYGAgOiBgL2ApXG4gICkucGF0aG5hbWVcbn1cblxuLyoqXG4gKiBTZXQgbGlzdCBvZiBtYXRjaFBhdGhzXG4gKlxuICogQHBhcmFtIHtBcnJheTx7cGF0aDogc3RyaW5nLCBtYXRjaFBhdGg6IHN0cmluZ30+fSB2YWx1ZSBjb2xsZWN0aW9uIG9mIG1hdGNoUGF0aHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hdGNoUGF0aHMgPSB2YWx1ZSA9PiB7XG4gIG1hdGNoUGF0aHMgPSB2YWx1ZVxufVxuXG4vKipcbiAqIFJldHVybiBhIG1hdGNocGF0aCB1cmxcbiAqIGlmIGBtYXRjaC1wYXRocy5qc29uYCBjb250YWlucyBgeyBcIi9mb28qXCI6IFwiL3BhZ2UxXCIsIC4uLn1gLCB0aGVuXG4gKiBgL2Zvbz9iYXI9ZmFyYCA9PiBgL3BhZ2UxYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdQYXRobmFtZSBBIHJhdyBwYXRobmFtZVxuICogQHJldHVybiB7c3RyaW5nfG51bGx9XG4gKi9cbmV4cG9ydCBjb25zdCBmaW5kTWF0Y2hQYXRoID0gcmF3UGF0aG5hbWUgPT4ge1xuICBjb25zdCB0cmltbWVkUGF0aG5hbWUgPSBjbGVhblBhdGgocmF3UGF0aG5hbWUpXG5cbiAgY29uc3QgcGlja1BhdGhzID0gbWF0Y2hQYXRocy5tYXAoKHsgcGF0aCwgbWF0Y2hQYXRoIH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogbWF0Y2hQYXRoLFxuICAgICAgb3JpZ2luYWxQYXRoOiBwYXRoLFxuICAgIH1cbiAgfSlcblxuICBjb25zdCBwYXRoID0gcGljayhwaWNrUGF0aHMsIHRyaW1tZWRQYXRobmFtZSlcblxuICBpZiAocGF0aCkge1xuICAgIHJldHVybiBub3JtYWxpemVQYWdlUGF0aChwYXRoLnJvdXRlLm9yaWdpbmFsUGF0aClcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogUmV0dXJuIGEgbWF0Y2hwYXRoIHBhcmFtcyBmcm9tIHJlYWNoL3JvdXRlciBydWxlc1xuICogaWYgYG1hdGNoLXBhdGhzLmpzb25gIGNvbnRhaW5zIGB7IFwiOmJhci8qZm9vXCIgfWAsIGFuZCB0aGUgcGF0aCBpcyAvYmF6L3phei96b29cbiAqIHRoZW4gaXQgcmV0dXJuc1xuICogIHsgYmFyOiBiYXosIGZvbzogemF6L3pvbyB9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd1BhdGhuYW1lIEEgcmF3IHBhdGhuYW1lXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBncmFiTWF0Y2hQYXJhbXMgPSByYXdQYXRobmFtZSA9PiB7XG4gIGNvbnN0IHRyaW1tZWRQYXRobmFtZSA9IGNsZWFuUGF0aChyYXdQYXRobmFtZSlcblxuICBjb25zdCBwaWNrUGF0aHMgPSBtYXRjaFBhdGhzLm1hcCgoeyBwYXRoLCBtYXRjaFBhdGggfSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBtYXRjaFBhdGgsXG4gICAgICBvcmlnaW5hbFBhdGg6IHBhdGgsXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IHBhdGggPSBwaWNrKHBpY2tQYXRocywgdHJpbW1lZFBhdGhuYW1lKVxuXG4gIGlmIChwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgucGFyYW1zXG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuLy8gR2l2ZW4gYSByYXcgVVJMIHBhdGgsIHJldHVybnMgdGhlIGNsZWFuZWQgdmVyc2lvbiBvZiBpdCAodHJpbSBvZmZcbi8vIGAjYCBhbmQgcXVlcnkgcGFyYW1zKSwgb3IgaWYgaXQgbWF0Y2hlcyBhbiBlbnRyeSBpblxuLy8gYG1hdGNoLXBhdGhzLmpzb25gLCBpdHMgbWF0Y2hlZCBwYXRoIGlzIHJldHVybmVkXG4vL1xuLy8gRS5nLiBgL2Zvbz9iYXI9ZmFyYCA9PiBgL2Zvb2Bcbi8vXG4vLyBPciBpZiBgbWF0Y2gtcGF0aHMuanNvbmAgY29udGFpbnMgYHsgXCIvZm9vKlwiOiBcIi9wYWdlMVwiLCAuLi59YCwgdGhlblxuLy8gYC9mb28/YmFyPWZhcmAgPT4gYC9wYWdlMWBcbmV4cG9ydCBjb25zdCBmaW5kUGF0aCA9IHJhd1BhdGhuYW1lID0+IHtcbiAgY29uc3QgdHJpbW1lZFBhdGhuYW1lID0gdHJpbVBhdGhuYW1lKGFic29sdXRpZnkocmF3UGF0aG5hbWUpKVxuICBpZiAocGF0aENhY2hlLmhhcyh0cmltbWVkUGF0aG5hbWUpKSB7XG4gICAgcmV0dXJuIHBhdGhDYWNoZS5nZXQodHJpbW1lZFBhdGhuYW1lKVxuICB9XG5cbiAgY29uc3QgcmVkaXJlY3QgPSBtYXliZUdldEJyb3dzZXJSZWRpcmVjdChyYXdQYXRobmFtZSlcbiAgaWYgKHJlZGlyZWN0KSB7XG4gICAgcmV0dXJuIGZpbmRQYXRoKHJlZGlyZWN0LnRvUGF0aClcbiAgfVxuXG4gIGxldCBmb3VuZFBhdGggPSBmaW5kTWF0Y2hQYXRoKHRyaW1tZWRQYXRobmFtZSlcblxuICBpZiAoIWZvdW5kUGF0aCkge1xuICAgIGZvdW5kUGF0aCA9IGNsZWFuUGF0aChyYXdQYXRobmFtZSlcbiAgfVxuXG4gIHBhdGhDYWNoZS5zZXQodHJpbW1lZFBhdGhuYW1lLCBmb3VuZFBhdGgpXG5cbiAgcmV0dXJuIGZvdW5kUGF0aFxufVxuXG4vKipcbiAqIENsZWFuIGEgdXJsIGFuZCBjb252ZXJ0cyAvaW5kZXguaHRtbCA9PiAvXG4gKiBFLmcuIGAvZm9vP2Jhcj1mYXJgID0+IGAvZm9vYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdQYXRobmFtZSBBIHJhdyBwYXRobmFtZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgY2xlYW5QYXRoID0gcmF3UGF0aG5hbWUgPT4ge1xuICBjb25zdCB0cmltbWVkUGF0aG5hbWUgPSB0cmltUGF0aG5hbWUoYWJzb2x1dGlmeShyYXdQYXRobmFtZSkpXG5cbiAgbGV0IGZvdW5kUGF0aCA9IHRyaW1tZWRQYXRobmFtZVxuICBpZiAoZm91bmRQYXRoID09PSBgL2luZGV4Lmh0bWxgKSB7XG4gICAgZm91bmRQYXRoID0gYC9gXG4gIH1cblxuICBmb3VuZFBhdGggPSBub3JtYWxpemVQYWdlUGF0aChmb3VuZFBhdGgpXG5cbiAgcmV0dXJuIGZvdW5kUGF0aFxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2257\n')},5444:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Link": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.ZP; },\n/* harmony export */ "withAssetPrefix": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.mc; },\n/* harmony export */ "withPrefix": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.dq; },\n/* harmony export */ "graphql": function() { return /* binding */ graphql; },\n/* harmony export */ "parsePath": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.cP; },\n/* harmony export */ "navigate": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.c4; },\n/* harmony export */ "useScrollRestoration": function() { return /* reexport safe */ gatsby_react_router_scroll__WEBPACK_IMPORTED_MODULE_2__.p2; },\n/* harmony export */ "StaticQueryContext": function() { return /* binding */ StaticQueryContext; },\n/* harmony export */ "StaticQuery": function() { return /* binding */ StaticQuery; },\n/* harmony export */ "PageRenderer": function() { return /* reexport default from dynamic */ _public_page_renderer__WEBPACK_IMPORTED_MODULE_3___default.a; },\n/* harmony export */ "useStaticQuery": function() { return /* binding */ useStaticQuery; },\n/* harmony export */ "prefetchPathname": function() { return /* binding */ prefetchPathname; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7294);\n/* harmony import */ var gatsby_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8037);\n/* harmony import */ var gatsby_react_router_scroll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9679);\n/* harmony import */ var _public_page_renderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(861);\n/* harmony import */ var _public_page_renderer__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_public_page_renderer__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8741);\nvar prefetchPathname=_loader__WEBPACK_IMPORTED_MODULE_4__/* .default.enqueue */ .ZP.enqueue;var StaticQueryContext=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});function StaticQueryDataRenderer(_ref){var staticQueryData=_ref.staticQueryData,data=_ref.data,query=_ref.query,render=_ref.render;var finalData=data?data.data:staticQueryData[query]&&staticQueryData[query].data;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,finalData&&render(finalData),!finalData&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",null,"Loading (StaticQuery)"));}var StaticQuery=function StaticQuery(props){var data=props.data,query=props.query,render=props.render,children=props.children;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StaticQueryContext.Consumer,null,function(staticQueryData){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StaticQueryDataRenderer,{data:data,query:query,render:render||children,staticQueryData:staticQueryData});});};var useStaticQuery=function useStaticQuery(query){var _context$query;if(typeof react__WEBPACK_IMPORTED_MODULE_0__.useContext!=="function"&&"production"==="development"){throw new Error("You\'re likely using a version of React that doesn\'t support Hooks\\n"+"Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.");}var context=react__WEBPACK_IMPORTED_MODULE_0__.useContext(StaticQueryContext);// query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n// to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n// catch the misuse of the API and give proper direction\nif(isNaN(Number(query))){throw new Error("useStaticQuery was called with a string but expects to be called using `graphql`. Try this:\\n\\nimport { useStaticQuery, graphql } from \'gatsby\';\\n\\nuseStaticQuery(graphql`"+query+"`);\\n");}if((_context$query=context[query])!==null&&_context$query!==void 0&&_context$query.data){return context[query].data;}else{throw new Error("The result of this StaticQuery could not be fetched.\\n\\n"+"This is likely a bug in Gatsby and if refreshing the page does not fix it, "+"please open an issue in https://github.com/gatsbyjs/gatsby/issues");}};function graphql(){throw new Error("It appears like Gatsby is misconfigured. Gatsby related `graphql` calls "+"are supposed to only be evaluated at compile time, and then compiled away. "+"Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n"+"Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.");}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9nYXRzYnktYnJvd3Nlci1lbnRyeS5qcz81OWJjIl0sIm5hbWVzIjpbInByZWZldGNoUGF0aG5hbWUiLCJsb2FkZXIiLCJTdGF0aWNRdWVyeUNvbnRleHQiLCJSZWFjdCIsIlN0YXRpY1F1ZXJ5RGF0YVJlbmRlcmVyIiwic3RhdGljUXVlcnlEYXRhIiwiZGF0YSIsInF1ZXJ5IiwicmVuZGVyIiwiZmluYWxEYXRhIiwiU3RhdGljUXVlcnkiLCJwcm9wcyIsImNoaWxkcmVuIiwidXNlU3RhdGljUXVlcnkiLCJwcm9jZXNzIiwiRXJyb3IiLCJjb250ZXh0IiwiaXNOYU4iLCJOdW1iZXIiLCJncmFwaHFsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSxHQUFNQSxpQkFBZ0IsQ0FBR0Msc0VBQXpCLENBRUEsR0FBTUMsbUJBQWtCLGNBQUdDLGdEQUFBLENBQW9CLEVBQXBCLENBQTNCLENBRUEsUUFBU0Msd0JBQVQsTUFBMkUsSUFBeENDLGdCQUF3QyxNQUF4Q0EsZUFBd0MsQ0FBdkJDLElBQXVCLE1BQXZCQSxJQUF1QixDQUFqQkMsS0FBaUIsTUFBakJBLEtBQWlCLENBQVZDLE1BQVUsTUFBVkEsTUFBVSxDQUN6RSxHQUFNQyxVQUFTLENBQUdILElBQUksQ0FDbEJBLElBQUksQ0FBQ0EsSUFEYSxDQUVsQkQsZUFBZSxDQUFDRSxLQUFELENBQWYsRUFBMEJGLGVBQWUsQ0FBQ0UsS0FBRCxDQUFmLENBQXVCRCxJQUZyRCxDQUlBLG1CQUNFLGlEQUFDLDJDQUFELE1BQ0dHLFNBQVMsRUFBSUQsTUFBTSxDQUFDQyxTQUFELENBRHRCLENBRUcsQ0FBQ0EsU0FBRCxlQUFjLG9GQUZqQixDQURGLENBTUQsQ0FFRCxHQUFNQyxZQUFXLENBQUcsUUFBZEEsWUFBYyxDQUFBQyxLQUFLLENBQUksQ0FDM0IsR0FBUUwsS0FBUixDQUEwQ0ssS0FBMUMsQ0FBUUwsSUFBUixDQUFjQyxLQUFkLENBQTBDSSxLQUExQyxDQUFjSixLQUFkLENBQXFCQyxNQUFyQixDQUEwQ0csS0FBMUMsQ0FBcUJILE1BQXJCLENBQTZCSSxRQUE3QixDQUEwQ0QsS0FBMUMsQ0FBNkJDLFFBQTdCLENBRUEsbUJBQ0UsaURBQUMsa0JBQUQsQ0FBb0IsUUFBcEIsTUFDRyxTQUFBUCxlQUFlLHFCQUNkLGlEQUFDLHVCQUFELEVBQ0UsSUFBSSxDQUFFQyxJQURSLENBRUUsS0FBSyxDQUFFQyxLQUZULENBR0UsTUFBTSxDQUFFQyxNQUFNLEVBQUlJLFFBSHBCLENBSUUsZUFBZSxDQUFFUCxlQUpuQixFQURjLEVBRGxCLENBREYsQ0FZRCxDQWZELENBaUJBLEdBQU1RLGVBQWMsQ0FBRyxRQUFqQkEsZUFBaUIsQ0FBQU4sS0FBSyxDQUFJLG9CQUM5QixHQUNFLE1BQU9KLDhDQUFQLGVBQ0FXLFlBQUEsZ0JBRkYsQ0FHRSxDQUNBLEtBQU0sSUFBSUMsTUFBSixDQUNKLDJKQURJLENBQU4sQ0FJRCxDQUNELEdBQU1DLFFBQU8sQ0FBR2IsNkNBQUEsQ0FBaUJELGtCQUFqQixDQUFoQixDQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUllLEtBQUssQ0FBQ0MsTUFBTSxDQUFDWCxLQUFELENBQVAsQ0FBVCxDQUEwQixDQUN4QixLQUFNLElBQUlRLE1BQUosK0tBSWdCUixLQUpoQixTQUFOLENBTUQsQ0FFRCxtQkFBSVMsT0FBTyxDQUFDVCxLQUFELENBQVgsbUNBQUksZUFBZ0JELElBQXBCLENBQTBCLENBQ3hCLE1BQU9VLFFBQU8sQ0FBQ1QsS0FBRCxDQUFQLENBQWVELElBQXRCLENBQ0QsQ0FGRCxJQUVPLENBQ0wsS0FBTSxJQUFJUyxNQUFKLENBQ0osNE1BREksQ0FBTixDQUtELENBQ0YsQ0FqQ0QsQ0EwQ0EsUUFBU0ksUUFBVCxFQUFtQixDQUNqQixLQUFNLElBQUlKLE1BQUosQ0FDSixxVkFESSxDQUFOLENBTUQiLCJmaWxlIjoiNTQ0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgTGluaywge1xuICB3aXRoUHJlZml4LFxuICB3aXRoQXNzZXRQcmVmaXgsXG4gIG5hdmlnYXRlLFxuICBwdXNoLFxuICByZXBsYWNlLFxuICBuYXZpZ2F0ZVRvLFxuICBwYXJzZVBhdGgsXG59IGZyb20gXCJnYXRzYnktbGlua1wiXG5pbXBvcnQgeyB1c2VTY3JvbGxSZXN0b3JhdGlvbiB9IGZyb20gXCJnYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbFwiXG5pbXBvcnQgUGFnZVJlbmRlcmVyIGZyb20gXCIuL3B1YmxpYy1wYWdlLXJlbmRlcmVyXCJcbmltcG9ydCBsb2FkZXIgZnJvbSBcIi4vbG9hZGVyXCJcblxuY29uc3QgcHJlZmV0Y2hQYXRobmFtZSA9IGxvYWRlci5lbnF1ZXVlXG5cbmNvbnN0IFN0YXRpY1F1ZXJ5Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoe30pXG5cbmZ1bmN0aW9uIFN0YXRpY1F1ZXJ5RGF0YVJlbmRlcmVyKHsgc3RhdGljUXVlcnlEYXRhLCBkYXRhLCBxdWVyeSwgcmVuZGVyIH0pIHtcbiAgY29uc3QgZmluYWxEYXRhID0gZGF0YVxuICAgID8gZGF0YS5kYXRhXG4gICAgOiBzdGF0aWNRdWVyeURhdGFbcXVlcnldICYmIHN0YXRpY1F1ZXJ5RGF0YVtxdWVyeV0uZGF0YVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAge2ZpbmFsRGF0YSAmJiByZW5kZXIoZmluYWxEYXRhKX1cbiAgICAgIHshZmluYWxEYXRhICYmIDxkaXY+TG9hZGluZyAoU3RhdGljUXVlcnkpPC9kaXY+fVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cblxuY29uc3QgU3RhdGljUXVlcnkgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHsgZGF0YSwgcXVlcnksIHJlbmRlciwgY2hpbGRyZW4gfSA9IHByb3BzXG5cbiAgcmV0dXJuIChcbiAgICA8U3RhdGljUXVlcnlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAge3N0YXRpY1F1ZXJ5RGF0YSA9PiAoXG4gICAgICAgIDxTdGF0aWNRdWVyeURhdGFSZW5kZXJlclxuICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgcXVlcnk9e3F1ZXJ5fVxuICAgICAgICAgIHJlbmRlcj17cmVuZGVyIHx8IGNoaWxkcmVufVxuICAgICAgICAgIHN0YXRpY1F1ZXJ5RGF0YT17c3RhdGljUXVlcnlEYXRhfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1N0YXRpY1F1ZXJ5Q29udGV4dC5Db25zdW1lcj5cbiAgKVxufVxuXG5jb25zdCB1c2VTdGF0aWNRdWVyeSA9IHF1ZXJ5ID0+IHtcbiAgaWYgKFxuICAgIHR5cGVvZiBSZWFjdC51c2VDb250ZXh0ICE9PSBgZnVuY3Rpb25gICYmXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IGBkZXZlbG9wbWVudGBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFlvdSdyZSBsaWtlbHkgdXNpbmcgYSB2ZXJzaW9uIG9mIFJlYWN0IHRoYXQgZG9lc24ndCBzdXBwb3J0IEhvb2tzXFxuYCArXG4gICAgICAgIGBQbGVhc2UgdXBkYXRlIFJlYWN0IGFuZCBSZWFjdERPTSB0byAxNi44LjAgb3IgbGF0ZXIgdG8gdXNlIHRoZSB1c2VTdGF0aWNRdWVyeSBob29rLmBcbiAgICApXG4gIH1cbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU3RhdGljUXVlcnlDb250ZXh0KVxuXG4gIC8vIHF1ZXJ5IGlzIGEgc3RyaW5naWZpZWQgbnVtYmVyIGxpa2UgYDMzMDM4ODJgIHdoZW4gd3JhcHBlZCB3aXRoIGdyYXBocWwsIElmIGEgdXNlciBmb3JnZXRzXG4gIC8vIHRvIHdyYXAgdGhlIHF1ZXJ5IGluIGEgZ3JxcGhxbCwgdGhlbiBjYXN0aW5nIGl0IHRvIGEgTnVtYmVyIHJlc3VsdHMgaW4gYE5hTmAgYWxsb3dpbmcgdXMgdG9cbiAgLy8gY2F0Y2ggdGhlIG1pc3VzZSBvZiB0aGUgQVBJIGFuZCBnaXZlIHByb3BlciBkaXJlY3Rpb25cbiAgaWYgKGlzTmFOKE51bWJlcihxdWVyeSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1c2VTdGF0aWNRdWVyeSB3YXMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYnV0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHVzaW5nIFxcYGdyYXBocWxcXGAuIFRyeSB0aGlzOlxuXG5pbXBvcnQgeyB1c2VTdGF0aWNRdWVyeSwgZ3JhcGhxbCB9IGZyb20gJ2dhdHNieSc7XG5cbnVzZVN0YXRpY1F1ZXJ5KGdyYXBocWxcXGAke3F1ZXJ5fVxcYCk7XG5gKVxuICB9XG5cbiAgaWYgKGNvbnRleHRbcXVlcnldPy5kYXRhKSB7XG4gICAgcmV0dXJuIGNvbnRleHRbcXVlcnldLmRhdGFcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHJlc3VsdCBvZiB0aGlzIFN0YXRpY1F1ZXJ5IGNvdWxkIG5vdCBiZSBmZXRjaGVkLlxcblxcbmAgK1xuICAgICAgICBgVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gR2F0c2J5IGFuZCBpZiByZWZyZXNoaW5nIHRoZSBwYWdlIGRvZXMgbm90IGZpeCBpdCwgYCArXG4gICAgICAgIGBwbGVhc2Ugb3BlbiBhbiBpc3N1ZSBpbiBodHRwczovL2dpdGh1Yi5jb20vZ2F0c2J5anMvZ2F0c2J5L2lzc3Vlc2BcbiAgICApXG4gIH1cbn1cblxuU3RhdGljUXVlcnkucHJvcFR5cGVzID0ge1xuICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICBxdWVyeTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMsXG59XG5cbmZ1bmN0aW9uIGdyYXBocWwoKSB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgSXQgYXBwZWFycyBsaWtlIEdhdHNieSBpcyBtaXNjb25maWd1cmVkLiBHYXRzYnkgcmVsYXRlZCBcXGBncmFwaHFsXFxgIGNhbGxzIGAgK1xuICAgICAgYGFyZSBzdXBwb3NlZCB0byBvbmx5IGJlIGV2YWx1YXRlZCBhdCBjb21waWxlIHRpbWUsIGFuZCB0aGVuIGNvbXBpbGVkIGF3YXkuIGAgK1xuICAgICAgYFVuZm9ydHVuYXRlbHksIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcXVlcnkgd2FzIGxlZnQgaW4gdGhlIGNvbXBpbGVkIGNvZGUuXFxuXFxuYCArXG4gICAgICBgVW5sZXNzIHlvdXIgc2l0ZSBoYXMgYSBjb21wbGV4IG9yIGN1c3RvbSBiYWJlbC9HYXRzYnkgY29uZmlndXJhdGlvbiB0aGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBHYXRzYnkuYFxuICApXG59XG5cbmV4cG9ydCB7XG4gIExpbmssXG4gIHdpdGhBc3NldFByZWZpeCxcbiAgd2l0aFByZWZpeCxcbiAgZ3JhcGhxbCxcbiAgcGFyc2VQYXRoLFxuICBuYXZpZ2F0ZSxcbiAgdXNlU2Nyb2xsUmVzdG9yYXRpb24sXG4gIFN0YXRpY1F1ZXJ5Q29udGV4dCxcbiAgU3RhdGljUXVlcnksXG4gIFBhZ2VSZW5kZXJlcixcbiAgdXNlU3RhdGljUXVlcnksXG4gIHByZWZldGNoUGF0aG5hbWUsXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5444\n')},8741:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "uQ": function() { return /* binding */ PageResourceStatus; },\n "kL": function() { return /* binding */ ProdLoader; },\n "ZP": function() { return /* binding */ loader; },\n "hs": function() { return /* binding */ getStaticQueryResults; },\n "jN": function() { return /* binding */ publicLoader; },\n "N1": function() { return /* binding */ setLoader; }\n});\n\n// UNUSED EXPORTS: BaseLoader\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\nvar inheritsLoose = __webpack_require__(1788);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 3 modules\nvar toConsumableArray = __webpack_require__(7329);\n;// CONCATENATED MODULE: ./.cache/prefetch.js\nvar support=function support(feature){if(typeof document==="undefined"){return false;}var fakeLink=document.createElement("link");try{if(fakeLink.relList&&typeof fakeLink.relList.supports==="function"){return fakeLink.relList.supports(feature);}}catch(err){return false;}return false;};var linkPrefetchStrategy=function linkPrefetchStrategy(url,options){return new Promise(function(resolve,reject){if(typeof document==="undefined"){reject();return;}var link=document.createElement("link");link.setAttribute("rel","prefetch");link.setAttribute("href",url);Object.keys(options).forEach(function(key){link.setAttribute(key,options[key]);});link.onload=resolve;link.onerror=reject;var parentElement=document.getElementsByTagName("head")[0]||document.getElementsByName("script")[0].parentNode;parentElement.appendChild(link);});};var xhrPrefetchStrategy=function xhrPrefetchStrategy(url){return new Promise(function(resolve,reject){var req=new XMLHttpRequest();req.open("GET",url,true);req.onload=function(){if(req.status===200){resolve();}else{reject();}};req.send(null);});};var supportedPrefetchStrategy=support("prefetch")?linkPrefetchStrategy:xhrPrefetchStrategy;var preFetched={};var prefetch=function prefetch(url,options){return new Promise(function(resolve){if(preFetched[url]){resolve();return;}supportedPrefetchStrategy(url,options).then(function(){resolve();preFetched[url]=true;}).catch(function(){});// 404s are logged to the console anyway\n});};/* harmony default export */ var _cache_prefetch = (prefetch);\n// EXTERNAL MODULE: ./.cache/emitter.js + 1 modules\nvar emitter = __webpack_require__(8110);\n// EXTERNAL MODULE: ./.cache/find-path.js + 1 modules\nvar find_path = __webpack_require__(2257);\n;// CONCATENATED MODULE: ./.cache/loader.js\n/**\n * Available resource loading statuses\n */var PageResourceStatus={/**\n * At least one of critical resources failed to load\n */Error:"error",/**\n * Resources loaded successfully\n */Success:"success"};var preferDefault=function preferDefault(m){return m&&m.default||m;};var stripSurroundingSlashes=function stripSurroundingSlashes(s){s=s[0]==="/"?s.slice(1):s;s=s.endsWith("/")?s.slice(0,-1):s;return s;};var createPageDataUrl=function createPageDataUrl(path){var fixedPath=path==="/"?"index":stripSurroundingSlashes(path);return "/justice40-tool/842-69a4eec"+"/page-data/"+fixedPath+"/page-data.json";};function doFetch(url,method){if(method===void 0){method="GET";}return new Promise(function(resolve,reject){var req=new XMLHttpRequest();req.open(method,url,true);req.onreadystatechange=function(){if(req.readyState==4){resolve(req);}};req.send(null);});}var doesConnectionSupportPrefetch=function doesConnectionSupportPrefetch(){if("connection"in navigator&&typeof navigator.connection!=="undefined"){if((navigator.connection.effectiveType||"").includes("2g")){return false;}if(navigator.connection.saveData){return false;}}return true;};var toPageResources=function toPageResources(pageData,component){if(component===void 0){component=null;}var page={componentChunkName:pageData.componentChunkName,path:pageData.path,webpackCompilationHash:pageData.webpackCompilationHash,matchPath:pageData.matchPath,staticQueryHashes:pageData.staticQueryHashes};return{component:component,json:pageData.result,page:page};};var BaseLoader=/*#__PURE__*/function(){function BaseLoader(loadComponent,matchPaths){this.inFlightNetworkRequests=new Map();// Map of pagePath -> Page. Where Page is an object with: {\n// status: PageResourceStatus.Success || PageResourceStatus.Error,\n// payload: PageResources, // undefined if PageResourceStatus.Error\n// }\n// PageResources is {\n// component,\n// json: pageData.result,\n// page: {\n// componentChunkName,\n// path,\n// webpackCompilationHash,\n// staticQueryHashes\n// },\n// staticQueryResults\n// }\nthis.pageDb=new Map();this.inFlightDb=new Map();this.staticQueryDb={};this.pageDataDb=new Map();this.prefetchTriggered=new Set();this.prefetchCompleted=new Set();this.loadComponent=loadComponent;(0,find_path/* setMatchPaths */.DS)(matchPaths);}var _proto=BaseLoader.prototype;_proto.memoizedGet=function memoizedGet(url){var _this=this;var inFlightPromise=this.inFlightNetworkRequests.get(url);if(!inFlightPromise){inFlightPromise=doFetch(url,"GET");this.inFlightNetworkRequests.set(url,inFlightPromise);}// Prefer duplication with then + catch over .finally to prevent problems in ie11 + firefox\nreturn inFlightPromise.then(function(response){_this.inFlightNetworkRequests.delete(url);return response;}).catch(function(err){_this.inFlightNetworkRequests.delete(url);throw err;});};_proto.setApiRunner=function setApiRunner(apiRunner){this.apiRunner=apiRunner;this.prefetchDisabled=apiRunner("disableCorePrefetching").some(function(a){return a;});};_proto.fetchPageDataJson=function fetchPageDataJson(loadObj){var _this2=this;var pagePath=loadObj.pagePath,_loadObj$retries=loadObj.retries,retries=_loadObj$retries===void 0?0:_loadObj$retries;var url=createPageDataUrl(pagePath);return this.memoizedGet(url).then(function(req){var status=req.status,responseText=req.responseText;// Handle 200\nif(status===200){try{var jsonPayload=JSON.parse(responseText);if(jsonPayload.path===undefined){throw new Error("not a valid pageData response");}return Object.assign(loadObj,{status:PageResourceStatus.Success,payload:jsonPayload});}catch(err){// continue regardless of error\n}}// Handle 404\nif(status===404||status===200){// If the request was for a 404 page and it doesn\'t exist, we\'re done\nif(pagePath==="/404.html"){return Object.assign(loadObj,{status:PageResourceStatus.Error});}// Need some code here to cache the 404 request. In case\n// multiple loadPageDataJsons result in 404s\nreturn _this2.fetchPageDataJson(Object.assign(loadObj,{pagePath:"/404.html",notFound:true}));}// handle 500 response (Unrecoverable)\nif(status===500){return Object.assign(loadObj,{status:PageResourceStatus.Error});}// Handle everything else, including status === 0, and 503s. Should retry\nif(retries<3){return _this2.fetchPageDataJson(Object.assign(loadObj,{retries:retries+1}));}// Retried 3 times already, result is an error.\nreturn Object.assign(loadObj,{status:PageResourceStatus.Error});});};_proto.loadPageDataJson=function loadPageDataJson(rawPath){var _this3=this;var pagePath=(0,find_path/* findPath */.Cj)(rawPath);if(this.pageDataDb.has(pagePath)){var pageData=this.pageDataDb.get(pagePath);if(true){return Promise.resolve(pageData);}}return this.fetchPageDataJson({pagePath:pagePath}).then(function(pageData){_this3.pageDataDb.set(pagePath,pageData);return pageData;});};_proto.findMatchPath=function findMatchPath(rawPath){return (0,find_path/* findMatchPath */.UD)(rawPath);}// TODO check all uses of this and whether they use undefined for page resources not exist\n;_proto.loadPage=function loadPage(rawPath){var _this4=this;var pagePath=(0,find_path/* findPath */.Cj)(rawPath);if(this.pageDb.has(pagePath)){var page=this.pageDb.get(pagePath);if(true){if(page.error){return{error:page.error,status:page.status};}return Promise.resolve(page.payload);}}if(this.inFlightDb.has(pagePath)){return this.inFlightDb.get(pagePath);}var inFlightPromise=Promise.all([this.loadAppData(),this.loadPageDataJson(pagePath)]).then(function(allData){var result=allData[1];if(result.status===PageResourceStatus.Error){return{status:PageResourceStatus.Error};}var pageData=result.payload;var _pageData=pageData,componentChunkName=_pageData.componentChunkName,_pageData$staticQuery=_pageData.staticQueryHashes,staticQueryHashes=_pageData$staticQuery===void 0?[]:_pageData$staticQuery;var finalResult={};var componentChunkPromise=_this4.loadComponent(componentChunkName).then(function(component){finalResult.createdAt=new Date();var pageResources;if(!component||component instanceof Error){finalResult.status=PageResourceStatus.Error;finalResult.error=component;}else{finalResult.status=PageResourceStatus.Success;if(result.notFound===true){finalResult.notFound=true;}pageData=Object.assign(pageData,{webpackCompilationHash:allData[0]?allData[0].webpackCompilationHash:""});pageResources=toPageResources(pageData,component);}// undefined if final result is an error\nreturn pageResources;});var staticQueryBatchPromise=Promise.all(staticQueryHashes.map(function(staticQueryHash){// Check for cache in case this static query result has already been loaded\nif(_this4.staticQueryDb[staticQueryHash]){var jsonPayload=_this4.staticQueryDb[staticQueryHash];return{staticQueryHash:staticQueryHash,jsonPayload:jsonPayload};}return _this4.memoizedGet("/justice40-tool/842-69a4eec"+"/page-data/sq/d/"+staticQueryHash+".json").then(function(req){var jsonPayload=JSON.parse(req.responseText);return{staticQueryHash:staticQueryHash,jsonPayload:jsonPayload};}).catch(function(){throw new Error("We couldn\'t load \\""+"/justice40-tool/842-69a4eec"+"/page-data/sq/d/"+staticQueryHash+".json\\"");});})).then(function(staticQueryResults){var staticQueryResultsMap={};staticQueryResults.forEach(function(_ref){var staticQueryHash=_ref.staticQueryHash,jsonPayload=_ref.jsonPayload;staticQueryResultsMap[staticQueryHash]=jsonPayload;_this4.staticQueryDb[staticQueryHash]=jsonPayload;});return staticQueryResultsMap;});return Promise.all([componentChunkPromise,staticQueryBatchPromise]).then(function(_ref2){var pageResources=_ref2[0],staticQueryResults=_ref2[1];var payload;if(pageResources){payload=Object.assign({},pageResources,{staticQueryResults:staticQueryResults});finalResult.payload=payload;emitter/* default.emit */.Z.emit("onPostLoadPageResources",{page:payload,pageResources:payload});}_this4.pageDb.set(pagePath,finalResult);if(finalResult.error){return{error:finalResult.error,status:finalResult.status};}return payload;})// when static-query fail to load we throw a better error\n.catch(function(err){return{error:err,status:PageResourceStatus.Error};});});inFlightPromise.then(function(){_this4.inFlightDb.delete(pagePath);}).catch(function(error){_this4.inFlightDb.delete(pagePath);throw error;});this.inFlightDb.set(pagePath,inFlightPromise);return inFlightPromise;}// returns undefined if the page does not exists in cache\n;_proto.loadPageSync=function loadPageSync(rawPath,options){if(options===void 0){options={};}var pagePath=(0,find_path/* findPath */.Cj)(rawPath);if(this.pageDb.has(pagePath)){var _options;var pageData=this.pageDb.get(pagePath);if(pageData.payload){return pageData.payload;}if((_options=options)!==null&&_options!==void 0&&_options.withErrorDetails){return{error:pageData.error,status:pageData.status};}}return undefined;};_proto.shouldPrefetch=function shouldPrefetch(pagePath){// Skip prefetching if we know user is on slow or constrained connection\nif(!doesConnectionSupportPrefetch()){return false;}// Check if the page exists.\nif(this.pageDb.has(pagePath)){return false;}return true;};_proto.prefetch=function prefetch(pagePath){var _this5=this;if(!this.shouldPrefetch(pagePath)){return false;}// Tell plugins with custom prefetching logic that they should start\n// prefetching this path.\nif(!this.prefetchTriggered.has(pagePath)){this.apiRunner("onPrefetchPathname",{pathname:pagePath});this.prefetchTriggered.add(pagePath);}// If a plugin has disabled core prefetching, stop now.\nif(this.prefetchDisabled){return false;}var realPath=(0,find_path/* findPath */.Cj)(pagePath);// Todo make doPrefetch logic cacheable\n// eslint-disable-next-line consistent-return\nthis.doPrefetch(realPath).then(function(){if(!_this5.prefetchCompleted.has(pagePath)){_this5.apiRunner("onPostPrefetchPathname",{pathname:pagePath});_this5.prefetchCompleted.add(pagePath);}});return true;};_proto.doPrefetch=function doPrefetch(pagePath){var _this6=this;var pageDataUrl=createPageDataUrl(pagePath);return _cache_prefetch(pageDataUrl,{crossOrigin:"anonymous",as:"fetch"}).then(function(){return(// This was just prefetched, so will return a response from\n// the cache instead of making another request to the server\n_this6.loadPageDataJson(pagePath));});};_proto.hovering=function hovering(rawPath){this.loadPage(rawPath);};_proto.getResourceURLsForPathname=function getResourceURLsForPathname(rawPath){var pagePath=(0,find_path/* findPath */.Cj)(rawPath);var page=this.pageDataDb.get(pagePath);if(page){var pageResources=toPageResources(page.payload);return[].concat((0,toConsumableArray/* default */.Z)(createComponentUrls(pageResources.page.componentChunkName)),[createPageDataUrl(pagePath)]);}else{return null;}};_proto.isPageNotFound=function isPageNotFound(rawPath){var pagePath=(0,find_path/* findPath */.Cj)(rawPath);var page=this.pageDb.get(pagePath);return!page||page.notFound;};_proto.loadAppData=function loadAppData(retries){var _this7=this;if(retries===void 0){retries=0;}return this.memoizedGet("/justice40-tool/842-69a4eec"+"/page-data/app-data.json").then(function(req){var status=req.status,responseText=req.responseText;var appData;if(status!==200&&retries<3){// Retry 3 times incase of non-200 responses\nreturn _this7.loadAppData(retries+1);}// Handle 200\nif(status===200){try{var jsonPayload=JSON.parse(responseText);if(jsonPayload.webpackCompilationHash===undefined){throw new Error("not a valid app-data response");}appData=jsonPayload;}catch(err){// continue regardless of error\n}}return appData;});};return BaseLoader;}();var createComponentUrls=function createComponentUrls(componentChunkName){return(window.___chunkMapping[componentChunkName]||[]).map(function(chunk){return "/justice40-tool/842-69a4eec"+chunk;});};var ProdLoader=/*#__PURE__*/function(_BaseLoader){(0,inheritsLoose/* default */.Z)(ProdLoader,_BaseLoader);function ProdLoader(asyncRequires,matchPaths){var loadComponent=function loadComponent(chunkName){if(!asyncRequires.components[chunkName]){throw new Error("We couldn\'t find the correct component chunk with the name "+chunkName);}return asyncRequires.components[chunkName]().then(preferDefault)// loader will handle the case when component is error\n.catch(function(err){return err;});};return _BaseLoader.call(this,loadComponent,matchPaths)||this;}var _proto2=ProdLoader.prototype;_proto2.doPrefetch=function doPrefetch(pagePath){return _BaseLoader.prototype.doPrefetch.call(this,pagePath).then(function(result){if(result.status!==PageResourceStatus.Success){return Promise.resolve();}var pageData=result.payload;var chunkName=pageData.componentChunkName;var componentUrls=createComponentUrls(chunkName);return Promise.all(componentUrls.map(_cache_prefetch)).then(function(){return pageData;});});};_proto2.loadPageDataJson=function loadPageDataJson(rawPath){return _BaseLoader.prototype.loadPageDataJson.call(this,rawPath).then(function(data){if(data.notFound){// check if html file exist using HEAD request:\n// if it does we should navigate to it instead of showing 404\nreturn doFetch(rawPath,"HEAD").then(function(req){if(req.status===200){// page (.html file) actually exist (or we asked for 404 )\n// returning page resources status as errored to trigger\n// regular browser navigation to given page\nreturn{status:PageResourceStatus.Error};}// if HEAD request wasn\'t 200, return notFound result\n// and show 404 page\nreturn data;});}return data;});};return ProdLoader;}(BaseLoader);var instance;var setLoader=function setLoader(_loader){instance=_loader;};var publicLoader={enqueue:function enqueue(rawPath){return instance.prefetch(rawPath);},// Real methods\ngetResourceURLsForPathname:function getResourceURLsForPathname(rawPath){return instance.getResourceURLsForPathname(rawPath);},loadPage:function loadPage(rawPath){return instance.loadPage(rawPath);},// TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour\nloadPageSync:function loadPageSync(rawPath,options){if(options===void 0){options={};}return instance.loadPageSync(rawPath,options);},prefetch:function prefetch(rawPath){return instance.prefetch(rawPath);},isPageNotFound:function isPageNotFound(rawPath){return instance.isPageNotFound(rawPath);},hovering:function hovering(rawPath){return instance.hovering(rawPath);},loadAppData:function loadAppData(){return instance.loadAppData();}};/* harmony default export */ var loader = (publicLoader);function getStaticQueryResults(){if(instance){return instance.staticQueryDb;}else{return{};}}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wcmVmZXRjaC5qcz9hOTNiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vLmNhY2hlL2xvYWRlci5qcz83YTYxIl0sIm5hbWVzIjpbInN1cHBvcnQiLCJmZWF0dXJlIiwiZG9jdW1lbnQiLCJmYWtlTGluayIsImNyZWF0ZUVsZW1lbnQiLCJyZWxMaXN0Iiwic3VwcG9ydHMiLCJlcnIiLCJsaW5rUHJlZmV0Y2hTdHJhdGVneSIsInVybCIsIm9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImxpbmsiLCJzZXRBdHRyaWJ1dGUiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIm9ubG9hZCIsIm9uZXJyb3IiLCJwYXJlbnRFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXRFbGVtZW50c0J5TmFtZSIsInBhcmVudE5vZGUiLCJhcHBlbmRDaGlsZCIsInhoclByZWZldGNoU3RyYXRlZ3kiLCJyZXEiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJzdGF0dXMiLCJzZW5kIiwic3VwcG9ydGVkUHJlZmV0Y2hTdHJhdGVneSIsInByZUZldGNoZWQiLCJwcmVmZXRjaCIsInRoZW4iLCJjYXRjaCIsIlBhZ2VSZXNvdXJjZVN0YXR1cyIsIkVycm9yIiwiU3VjY2VzcyIsInByZWZlckRlZmF1bHQiLCJtIiwiZGVmYXVsdCIsInN0cmlwU3Vycm91bmRpbmdTbGFzaGVzIiwicyIsInNsaWNlIiwiZW5kc1dpdGgiLCJjcmVhdGVQYWdlRGF0YVVybCIsInBhdGgiLCJmaXhlZFBhdGgiLCJfX1BBVEhfUFJFRklYX18iLCJkb0ZldGNoIiwibWV0aG9kIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsImRvZXNDb25uZWN0aW9uU3VwcG9ydFByZWZldGNoIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsImVmZmVjdGl2ZVR5cGUiLCJpbmNsdWRlcyIsInNhdmVEYXRhIiwidG9QYWdlUmVzb3VyY2VzIiwicGFnZURhdGEiLCJjb21wb25lbnQiLCJwYWdlIiwiY29tcG9uZW50Q2h1bmtOYW1lIiwid2VicGFja0NvbXBpbGF0aW9uSGFzaCIsIm1hdGNoUGF0aCIsInN0YXRpY1F1ZXJ5SGFzaGVzIiwianNvbiIsInJlc3VsdCIsIkJhc2VMb2FkZXIiLCJsb2FkQ29tcG9uZW50IiwibWF0Y2hQYXRocyIsImluRmxpZ2h0TmV0d29ya1JlcXVlc3RzIiwiTWFwIiwicGFnZURiIiwiaW5GbGlnaHREYiIsInN0YXRpY1F1ZXJ5RGIiLCJwYWdlRGF0YURiIiwicHJlZmV0Y2hUcmlnZ2VyZWQiLCJTZXQiLCJwcmVmZXRjaENvbXBsZXRlZCIsInNldE1hdGNoUGF0aHMiLCJtZW1vaXplZEdldCIsImluRmxpZ2h0UHJvbWlzZSIsImdldCIsInNldCIsInJlc3BvbnNlIiwiZGVsZXRlIiwic2V0QXBpUnVubmVyIiwiYXBpUnVubmVyIiwicHJlZmV0Y2hEaXNhYmxlZCIsInNvbWUiLCJhIiwiZmV0Y2hQYWdlRGF0YUpzb24iLCJsb2FkT2JqIiwicGFnZVBhdGgiLCJyZXRyaWVzIiwicmVzcG9uc2VUZXh0IiwianNvblBheWxvYWQiLCJKU09OIiwicGFyc2UiLCJ1bmRlZmluZWQiLCJhc3NpZ24iLCJwYXlsb2FkIiwibm90Rm91bmQiLCJsb2FkUGFnZURhdGFKc29uIiwicmF3UGF0aCIsImZpbmRQYXRoIiwiaGFzIiwicHJvY2VzcyIsImZpbmRNYXRjaFBhdGgiLCJsb2FkUGFnZSIsImVycm9yIiwiYWxsIiwibG9hZEFwcERhdGEiLCJhbGxEYXRhIiwiZmluYWxSZXN1bHQiLCJjb21wb25lbnRDaHVua1Byb21pc2UiLCJjcmVhdGVkQXQiLCJEYXRlIiwicGFnZVJlc291cmNlcyIsInN0YXRpY1F1ZXJ5QmF0Y2hQcm9taXNlIiwibWFwIiwic3RhdGljUXVlcnlIYXNoIiwic3RhdGljUXVlcnlSZXN1bHRzIiwic3RhdGljUXVlcnlSZXN1bHRzTWFwIiwiZW1pdHRlciIsImxvYWRQYWdlU3luYyIsIndpdGhFcnJvckRldGFpbHMiLCJzaG91bGRQcmVmZXRjaCIsInBhdGhuYW1lIiwiYWRkIiwicmVhbFBhdGgiLCJkb1ByZWZldGNoIiwicGFnZURhdGFVcmwiLCJwcmVmZXRjaEhlbHBlciIsImNyb3NzT3JpZ2luIiwiYXMiLCJob3ZlcmluZyIsImdldFJlc291cmNlVVJMc0ZvclBhdGhuYW1lIiwiY3JlYXRlQ29tcG9uZW50VXJscyIsImlzUGFnZU5vdEZvdW5kIiwiYXBwRGF0YSIsIndpbmRvdyIsIl9fX2NodW5rTWFwcGluZyIsImNodW5rIiwiUHJvZExvYWRlciIsImFzeW5jUmVxdWlyZXMiLCJjaHVua05hbWUiLCJjb21wb25lbnRzIiwiY29tcG9uZW50VXJscyIsImRhdGEiLCJpbnN0YW5jZSIsInNldExvYWRlciIsIl9sb2FkZXIiLCJwdWJsaWNMb2FkZXIiLCJlbnF1ZXVlIiwiZ2V0U3RhdGljUXVlcnlSZXN1bHRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxHQUFNQSxRQUFPLENBQUcsUUFBVkEsUUFBVSxDQUFVQyxPQUFWLENBQW1CLENBQ2pDLEdBQUksTUFBT0MsU0FBUCxjQUFKLENBQXFDLENBQ25DLE1BQU8sTUFBUCxDQUNELENBQ0QsR0FBTUMsU0FBUSxDQUFHRCxRQUFRLENBQUNFLGFBQVQsUUFBakIsQ0FDQSxHQUFJLENBQ0YsR0FBSUQsUUFBUSxDQUFDRSxPQUFULEVBQW9CLE1BQU9GLFNBQVEsQ0FBQ0UsT0FBVCxDQUFpQkMsUUFBeEIsYUFBeEIsQ0FBeUUsQ0FDdkUsTUFBT0gsU0FBUSxDQUFDRSxPQUFULENBQWlCQyxRQUFqQixDQUEwQkwsT0FBMUIsQ0FBUCxDQUNELENBQ0YsQ0FBQyxNQUFPTSxHQUFQLENBQVksQ0FDWixNQUFPLE1BQVAsQ0FDRCxDQUNELE1BQU8sTUFBUCxDQUNELENBYkQsQ0FlQSxHQUFNQyxxQkFBb0IsQ0FBRyxRQUF2QkEscUJBQXVCLENBQVVDLEdBQVYsQ0FBZUMsT0FBZixDQUF3QixDQUNuRCxNQUFPLElB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LENBQ3RDLEdBQUlMLFFBQUosQ0FBYyxDQUNaLE1BQU9BLFNBQVEsQ0FBQzVFLGFBQWhCLENBQ0QsQ0FGRCxJQUVPLENBQ0wsTUFBTyxFQUFQLENBQ0QsQ0FDRiIsImZpbGUiOiI4NzQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3VwcG9ydCA9IGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IGB1bmRlZmluZWRgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgZmFrZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBsaW5rYClcbiAgdHJ5IHtcbiAgICBpZiAoZmFrZUxpbmsucmVsTGlzdCAmJiB0eXBlb2YgZmFrZUxpbmsucmVsTGlzdC5zdXBwb3J0cyA9PT0gYGZ1bmN0aW9uYCkge1xuICAgICAgcmV0dXJuIGZha2VMaW5rLnJlbExpc3Quc3VwcG9ydHMoZmVhdHVyZSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBsaW5rUHJlZmV0Y2hTdHJhdGVneSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBgdW5kZWZpbmVkYCkge1xuICAgICAgcmVqZWN0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBsaW5rYClcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShgcmVsYCwgYHByZWZldGNoYClcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShgaHJlZmAsIHVybClcblxuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKGtleSwgb3B0aW9uc1trZXldKVxuICAgIH0pXG5cbiAgICBsaW5rLm9ubG9hZCA9IHJlc29sdmVcbiAgICBsaW5rLm9uZXJyb3IgPSByZWplY3RcblxuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYGhlYWRgKVswXSB8fFxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYHNjcmlwdGApWzBdLnBhcmVudE5vZGVcbiAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGxpbmspXG4gIH0pXG59XG5cbmNvbnN0IHhoclByZWZldGNoU3RyYXRlZ3kgPSBmdW5jdGlvbiAodXJsKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcbiAgICByZXEub3BlbihgR0VUYCwgdXJsLCB0cnVlKVxuXG4gICAgcmVxLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlcS5zZW5kKG51bGwpXG4gIH0pXG59XG5cbmNvbnN0IHN1cHBvcnRlZFByZWZldGNoU3RyYXRlZ3kgPSBzdXBwb3J0KGBwcmVmZXRjaGApXG4gID8gbGlua1ByZWZldGNoU3RyYXRlZ3lcbiAgOiB4aHJQcmVmZXRjaFN0cmF0ZWd5XG5cbmNvbnN0IHByZUZldGNoZWQgPSB7fVxuXG5jb25zdCBwcmVmZXRjaCA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGlmIChwcmVGZXRjaGVkW3VybF0pIHtcbiAgICAgIHJlc29sdmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc3VwcG9ydGVkUHJlZmV0Y2hTdHJhdGVneSh1cmwsIG9wdGlvbnMpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICBwcmVGZXRjaGVkW3VybF0gPSB0cnVlXG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHt9KSAvLyA0MDRzIGFyZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgYW55d2F5XG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHByZWZldGNoXG4iLCJpbXBvcnQgcHJlZmV0Y2hIZWxwZXIgZnJvbSBcIi4vcHJlZmV0Y2hcIlxuaW1wb3J0IGVtaXR0ZXIgZnJvbSBcIi4vZW1pdHRlclwiXG5pbXBvcnQgeyBzZXRNYXRjaFBhdGhzLCBmaW5kUGF0aCwgZmluZE1hdGNoUGF0aCB9IGZyb20gXCIuL2ZpbmQtcGF0aFwiXG5cbi8qKlxuICogQXZhaWxhYmxlIHJlc291cmNlIGxvYWRpbmcgc3RhdHVzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IFBhZ2VSZXNvdXJjZVN0YXR1cyA9IHtcbiAgLyoqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBjcml0aWNhbCByZXNvdXJjZXMgZmFpbGVkIHRvIGxvYWRcbiAgICovXG4gIEVycm9yOiBgZXJyb3JgLFxuICAvKipcbiAgICogUmVzb3VyY2VzIGxvYWRlZCBzdWNjZXNzZnVsbHlcbiAgICovXG4gIFN1Y2Nlc3M6IGBzdWNjZXNzYCxcbn1cblxuY29uc3QgcHJlZmVyRGVmYXVsdCA9IG0gPT4gKG0gJiYgbS5kZWZhdWx0KSB8fCBtXG5cbmNvbnN0IHN0cmlwU3Vycm91bmRpbmdTbGFzaGVzID0gcyA9PiB7XG4gIHMgPSBzWzBdID09PSBgL2AgPyBzLnNsaWNlKDEpIDogc1xuICBzID0gcy5lbmRzV2l0aChgL2ApID8gcy5zbGljZSgwLCAtMSkgOiBzXG4gIHJldHVybiBzXG59XG5cbmNvbnN0IGNyZWF0ZVBhZ2VEYXRhVXJsID0gcGF0aCA9PiB7XG4gIGNvbnN0IGZpeGVkUGF0aCA9IHBhdGggPT09IGAvYCA/IGBpbmRleGAgOiBzdHJpcFN1cnJvdW5kaW5nU2xhc2hlcyhwYXRoKVxuICByZXR1cm4gYCR7X19QQVRIX1BSRUZJWF9ffS9wYWdlLWRhdGEvJHtmaXhlZFBhdGh9L3BhZ2UtZGF0YS5qc29uYFxufVxuXG5mdW5jdGlvbiBkb0ZldGNoKHVybCwgbWV0aG9kID0gYEdFVGApIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuICAgIHJlcS5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKVxuICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT0gNCkge1xuICAgICAgICByZXNvbHZlKHJlcSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmVxLnNlbmQobnVsbClcbiAgfSlcbn1cblxuY29uc3QgZG9lc0Nvbm5lY3Rpb25TdXBwb3J0UHJlZmV0Y2ggPSAoKSA9PiB7XG4gIGlmIChcbiAgICBgY29ubmVjdGlvbmAgaW4gbmF2aWdhdG9yICYmXG4gICAgdHlwZW9mIG5hdmlnYXRvci5jb25uZWN0aW9uICE9PSBgdW5kZWZpbmVkYFxuICApIHtcbiAgICBpZiAoKG5hdmlnYXRvci5jb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUgfHwgYGApLmluY2x1ZGVzKGAyZ2ApKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKG5hdmlnYXRvci5jb25uZWN0aW9uLnNhdmVEYXRhKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgdG9QYWdlUmVzb3VyY2VzID0gKHBhZ2VEYXRhLCBjb21wb25lbnQgPSBudWxsKSA9PiB7XG4gIGNvbnN0IHBhZ2UgPSB7XG4gICAgY29tcG9uZW50Q2h1bmtOYW1lOiBwYWdlRGF0YS5jb21wb25lbnRDaHVua05hbWUsXG4gICAgcGF0aDogcGFnZURhdGEucGF0aCxcbiAgICB3ZWJwYWNrQ29tcGlsYXRpb25IYXNoOiBwYWdlRGF0YS53ZWJwYWNrQ29tcGlsYXRpb25IYXNoLFxuICAgIG1hdGNoUGF0aDogcGFnZURhdGEubWF0Y2hQYXRoLFxuICAgIHN0YXRpY1F1ZXJ5SGFzaGVzOiBwYWdlRGF0YS5zdGF0aWNRdWVyeUhhc2hlcyxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29tcG9uZW50LFxuICAgIGpzb246IHBhZ2VEYXRhLnJlc3VsdCxcbiAgICBwYWdlLFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlTG9hZGVyIHtcbiAgY29uc3RydWN0b3IobG9hZENvbXBvbmVudCwgbWF0Y2hQYXRocykge1xuICAgIC8vIE1hcCBvZiBwYWdlUGF0aCAtPiBQYWdlLiBXaGVyZSBQYWdlIGlzIGFuIG9iamVjdCB3aXRoOiB7XG4gICAgLy8gICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5TdWNjZXNzIHx8IFBhZ2VSZXNvdXJjZVN0YXR1cy5FcnJvcixcbiAgICAvLyAgIHBheWxvYWQ6IFBhZ2VSZXNvdXJjZXMsIC8vIHVuZGVmaW5lZCBpZiBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3JcbiAgICAvLyB9XG4gICAgLy8gUGFnZVJlc291cmNlcyBpcyB7XG4gICAgLy8gICBjb21wb25lbnQsXG4gICAgLy8gICBqc29uOiBwYWdlRGF0YS5yZXN1bHQsXG4gICAgLy8gICBwYWdlOiB7XG4gICAgLy8gICAgIGNvbXBvbmVudENodW5rTmFtZSxcbiAgICAvLyAgICAgcGF0aCxcbiAgICAvLyAgICAgd2VicGFja0NvbXBpbGF0aW9uSGFzaCxcbiAgICAvLyAgICAgc3RhdGljUXVlcnlIYXNoZXNcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzdGF0aWNRdWVyeVJlc3VsdHNcbiAgICAvLyB9XG4gICAgdGhpcy5wYWdlRGIgPSBuZXcgTWFwKClcbiAgICB0aGlzLmluRmxpZ2h0RGIgPSBuZXcgTWFwKClcbiAgICB0aGlzLnN0YXRpY1F1ZXJ5RGIgPSB7fVxuICAgIHRoaXMucGFnZURhdGFEYiA9IG5ldyBNYXAoKVxuICAgIHRoaXMucHJlZmV0Y2hUcmlnZ2VyZWQgPSBuZXcgU2V0KClcbiAgICB0aGlzLnByZWZldGNoQ29tcGxldGVkID0gbmV3IFNldCgpXG4gICAgdGhpcy5sb2FkQ29tcG9uZW50ID0gbG9hZENvbXBvbmVudFxuICAgIHNldE1hdGNoUGF0aHMobWF0Y2hQYXRocylcbiAgfVxuXG4gIGluRmxpZ2h0TmV0d29ya1JlcXVlc3RzID0gbmV3IE1hcCgpXG5cbiAgbWVtb2l6ZWRHZXQodXJsKSB7XG4gICAgbGV0IGluRmxpZ2h0UHJvbWlzZSA9IHRoaXMuaW5GbGlnaHROZXR3b3JrUmVxdWVzdHMuZ2V0KHVybClcblxuICAgIGlmICghaW5GbGlnaHRQcm9taXNlKSB7XG4gICAgICBpbkZsaWdodFByb21pc2UgPSBkb0ZldGNoKHVybCwgYEdFVGApXG4gICAgICB0aGlzLmluRmxpZ2h0TmV0d29ya1JlcXVlc3RzLnNldCh1cmwsIGluRmxpZ2h0UHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyBQcmVmZXIgZHVwbGljYXRpb24gd2l0aCB0aGVuICsgY2F0Y2ggb3ZlciAuZmluYWxseSB0byBwcmV2ZW50IHByb2JsZW1zIGluIGllMTEgKyBmaXJlZm94XG4gICAgcmV0dXJuIGluRmxpZ2h0UHJvbWlzZVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLmluRmxpZ2h0TmV0d29ya1JlcXVlc3RzLmRlbGV0ZSh1cmwpXG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICB0aGlzLmluRmxpZ2h0TmV0d29ya1JlcXVlc3RzLmRlbGV0ZSh1cmwpXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSlcbiAgfVxuXG4gIHNldEFwaVJ1bm5lcihhcGlSdW5uZXIpIHtcbiAgICB0aGlzLmFwaVJ1bm5lciA9IGFwaVJ1bm5lclxuICAgIHRoaXMucHJlZmV0Y2hEaXNhYmxlZCA9IGFwaVJ1bm5lcihgZGlzYWJsZUNvcmVQcmVmZXRjaGluZ2ApLnNvbWUoYSA9PiBhKVxuICB9XG5cbiAgZmV0Y2hQYWdlRGF0YUpzb24obG9hZE9iaikge1xuICAgIGNvbnN0IHsgcGFnZVBhdGgsIHJldHJpZXMgPSAwIH0gPSBsb2FkT2JqXG4gICAgY29uc3QgdXJsID0gY3JlYXRlUGFnZURhdGFVcmwocGFnZVBhdGgpXG4gICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRHZXQodXJsKS50aGVuKHJlcSA9PiB7XG4gICAgICBjb25zdCB7IHN0YXR1cywgcmVzcG9uc2VUZXh0IH0gPSByZXFcblxuICAgICAgLy8gSGFuZGxlIDIwMFxuICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblBheWxvYWQgPSBKU09OLnBhcnNlKHJlc3BvbnNlVGV4dClcbiAgICAgICAgICBpZiAoanNvblBheWxvYWQucGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBhIHZhbGlkIHBhZ2VEYXRhIHJlc3BvbnNlYClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihsb2FkT2JqLCB7XG4gICAgICAgICAgICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5TdWNjZXNzLFxuICAgICAgICAgICAgcGF5bG9hZDoganNvblBheWxvYWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBvZiBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSA0MDRcbiAgICAgIGlmIChzdGF0dXMgPT09IDQwNCB8fCBzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgZm9yIGEgNDA0IHBhZ2UgYW5kIGl0IGRvZXNuJ3QgZXhpc3QsIHdlJ3JlIGRvbmVcbiAgICAgICAgaWYgKHBhZ2VQYXRoID09PSBgLzQwNC5odG1sYCkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGxvYWRPYmosIHtcbiAgICAgICAgICAgIHN0YXR1czogUGFnZVJlc291cmNlU3RhdHVzLkVycm9yLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZWVkIHNvbWUgY29kZSBoZXJlIHRvIGNhY2hlIHRoZSA0MDQgcmVxdWVzdC4gSW4gY2FzZVxuICAgICAgICAvLyBtdWx0aXBsZSBsb2FkUGFnZURhdGFKc29ucyByZXN1bHQgaW4gNDA0c1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFBhZ2VEYXRhSnNvbihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGxvYWRPYmosIHsgcGFnZVBhdGg6IGAvNDA0Lmh0bWxgLCBub3RGb3VuZDogdHJ1ZSB9KVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIGhhbmRsZSA1MDAgcmVzcG9uc2UgKFVucmVjb3ZlcmFibGUpXG4gICAgICBpZiAoc3RhdHVzID09PSA1MDApIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obG9hZE9iaiwge1xuICAgICAgICAgIHN0YXR1czogUGFnZVJlc291cmNlU3RhdHVzLkVycm9yLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZXZlcnl0aGluZyBlbHNlLCBpbmNsdWRpbmcgc3RhdHVzID09PSAwLCBhbmQgNTAzcy4gU2hvdWxkIHJldHJ5XG4gICAgICBpZiAocmV0cmllcyA8IDMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hQYWdlRGF0YUpzb24oXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihsb2FkT2JqLCB7IHJldHJpZXM6IHJldHJpZXMgKyAxIH0pXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gUmV0cmllZCAzIHRpbWVzIGFscmVhZHksIHJlc3VsdCBpcyBhbiBlcnJvci5cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGxvYWRPYmosIHtcbiAgICAgICAgc3RhdHVzOiBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IsXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBsb2FkUGFnZURhdGFKc29uKHJhd1BhdGgpIHtcbiAgICBjb25zdCBwYWdlUGF0aCA9IGZpbmRQYXRoKHJhd1BhdGgpXG4gICAgaWYgKHRoaXMucGFnZURhdGFEYi5oYXMocGFnZVBhdGgpKSB7XG4gICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMucGFnZURhdGFEYi5nZXQocGFnZVBhdGgpXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgIT09IGBkZXZlbG9wYCB8fCAhcGFnZURhdGEuc3RhbGUpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYWdlRGF0YSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mZXRjaFBhZ2VEYXRhSnNvbih7IHBhZ2VQYXRoIH0pLnRoZW4ocGFnZURhdGEgPT4ge1xuICAgICAgdGhpcy5wYWdlRGF0YURiLnNldChwYWdlUGF0aCwgcGFnZURhdGEpXG5cbiAgICAgIHJldHVybiBwYWdlRGF0YVxuICAgIH0pXG4gIH1cblxuICBmaW5kTWF0Y2hQYXRoKHJhd1BhdGgpIHtcbiAgICByZXR1cm4gZmluZE1hdGNoUGF0aChyYXdQYXRoKVxuICB9XG5cbiAgLy8gVE9ETyBjaGVjayBhbGwgdXNlcyBvZiB0aGlzIGFuZCB3aGV0aGVyIHRoZXkgdXNlIHVuZGVmaW5lZCBmb3IgcGFnZSByZXNvdXJjZXMgbm90IGV4aXN0XG4gIGxvYWRQYWdlKHJhd1BhdGgpIHtcbiAgICBjb25zdCBwYWdlUGF0aCA9IGZpbmRQYXRoKHJhd1BhdGgpXG4gICAgaWYgKHRoaXMucGFnZURiLmhhcyhwYWdlUGF0aCkpIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VEYi5nZXQocGFnZVBhdGgpXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgIT09IGBkZXZlbG9wYCB8fCAhcGFnZS5wYXlsb2FkLnN0YWxlKSB7XG4gICAgICAgIGlmIChwYWdlLmVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiBwYWdlLmVycm9yLFxuICAgICAgICAgICAgc3RhdHVzOiBwYWdlLnN0YXR1cyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBhZ2UucGF5bG9hZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbkZsaWdodERiLmhhcyhwYWdlUGF0aCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmluRmxpZ2h0RGIuZ2V0KHBhZ2VQYXRoKVxuICAgIH1cblxuICAgIGNvbnN0IGluRmxpZ2h0UHJvbWlzZSA9IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMubG9hZEFwcERhdGEoKSxcbiAgICAgIHRoaXMubG9hZFBhZ2VEYXRhSnNvbihwYWdlUGF0aCksXG4gICAgXSkudGhlbihhbGxEYXRhID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFsbERhdGFbMV1cbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5FcnJvcixcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgcGFnZURhdGEgPSByZXN1bHQucGF5bG9hZFxuICAgICAgY29uc3QgeyBjb21wb25lbnRDaHVua05hbWUsIHN0YXRpY1F1ZXJ5SGFzaGVzID0gW10gfSA9IHBhZ2VEYXRhXG5cbiAgICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0ge31cblxuICAgICAgY29uc3QgY29tcG9uZW50Q2h1bmtQcm9taXNlID0gdGhpcy5sb2FkQ29tcG9uZW50KGNvbXBvbmVudENodW5rTmFtZSkudGhlbihcbiAgICAgICAgY29tcG9uZW50ID0+IHtcbiAgICAgICAgICBmaW5hbFJlc3VsdC5jcmVhdGVkQXQgPSBuZXcgRGF0ZSgpXG4gICAgICAgICAgbGV0IHBhZ2VSZXNvdXJjZXNcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudCB8fCBjb21wb25lbnQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgZmluYWxSZXN1bHQuc3RhdHVzID0gUGFnZVJlc291cmNlU3RhdHVzLkVycm9yXG4gICAgICAgICAgICBmaW5hbFJlc3VsdC5lcnJvciA9IGNvbXBvbmVudFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbFJlc3VsdC5zdGF0dXMgPSBQYWdlUmVzb3VyY2VTdGF0dXMuU3VjY2Vzc1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5ub3RGb3VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBmaW5hbFJlc3VsdC5ub3RGb3VuZCA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2VEYXRhID0gT2JqZWN0LmFzc2lnbihwYWdlRGF0YSwge1xuICAgICAgICAgICAgICB3ZWJwYWNrQ29tcGlsYXRpb25IYXNoOiBhbGxEYXRhWzBdXG4gICAgICAgICAgICAgICAgPyBhbGxEYXRhWzBdLndlYnBhY2tDb21waWxhdGlvbkhhc2hcbiAgICAgICAgICAgICAgICA6IGBgLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHBhZ2VSZXNvdXJjZXMgPSB0b1BhZ2VSZXNvdXJjZXMocGFnZURhdGEsIGNvbXBvbmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdW5kZWZpbmVkIGlmIGZpbmFsIHJlc3VsdCBpcyBhbiBlcnJvclxuICAgICAgICAgIHJldHVybiBwYWdlUmVzb3VyY2VzXG4gICAgICAgIH1cbiAgICAgIClcblxuICAgICAgY29uc3Qgc3RhdGljUXVlcnlCYXRjaFByb21pc2UgPSBQcm9taXNlLmFsbChcbiAgICAgICAgc3RhdGljUXVlcnlIYXNoZXMubWFwKHN0YXRpY1F1ZXJ5SGFzaCA9PiB7XG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIGNhY2hlIGluIGNhc2UgdGhpcyBzdGF0aWMgcXVlcnkgcmVzdWx0IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkXG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGljUXVlcnlEYltzdGF0aWNRdWVyeUhhc2hdKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uUGF5bG9hZCA9IHRoaXMuc3RhdGljUXVlcnlEYltzdGF0aWNRdWVyeUhhc2hdXG4gICAgICAgICAgICByZXR1cm4geyBzdGF0aWNRdWVyeUhhc2gsIGpzb25QYXlsb2FkIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5tZW1vaXplZEdldChcbiAgICAgICAgICAgIGAke19fUEFUSF9QUkVGSVhfX30vcGFnZS1kYXRhL3NxL2QvJHtzdGF0aWNRdWVyeUhhc2h9Lmpzb25gXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4ocmVxID0+IHtcbiAgICAgICAgICAgICAgY29uc3QganNvblBheWxvYWQgPSBKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpXG4gICAgICAgICAgICAgIHJldHVybiB7IHN0YXRpY1F1ZXJ5SGFzaCwganNvblBheWxvYWQgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgV2UgY291bGRuJ3QgbG9hZCBcIiR7X19QQVRIX1BSRUZJWF9ffS9wYWdlLWRhdGEvc3EvZC8ke3N0YXRpY1F1ZXJ5SGFzaH0uanNvblwiYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgKS50aGVuKHN0YXRpY1F1ZXJ5UmVzdWx0cyA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRpY1F1ZXJ5UmVzdWx0c01hcCA9IHt9XG5cbiAgICAgICAgc3RhdGljUXVlcnlSZXN1bHRzLmZvckVhY2goKHsgc3RhdGljUXVlcnlIYXNoLCBqc29uUGF5bG9hZCB9KSA9PiB7XG4gICAgICAgICAgc3RhdGljUXVlcnlSZXN1bHRzTWFwW3N0YXRpY1F1ZXJ5SGFzaF0gPSBqc29uUGF5bG9hZFxuICAgICAgICAgIHRoaXMuc3RhdGljUXVlcnlEYltzdGF0aWNRdWVyeUhhc2hdID0ganNvblBheWxvYWRcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gc3RhdGljUXVlcnlSZXN1bHRzTWFwXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBQcm9taXNlLmFsbChbY29tcG9uZW50Q2h1bmtQcm9taXNlLCBzdGF0aWNRdWVyeUJhdGNoUHJvbWlzZV0pXG4gICAgICAgICAgLnRoZW4oKFtwYWdlUmVzb3VyY2VzLCBzdGF0aWNRdWVyeVJlc3VsdHNdKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF5bG9hZFxuICAgICAgICAgICAgaWYgKHBhZ2VSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgcGF5bG9hZCA9IHsgLi4ucGFnZVJlc291cmNlcywgc3RhdGljUXVlcnlSZXN1bHRzIH1cbiAgICAgICAgICAgICAgZmluYWxSZXN1bHQucGF5bG9hZCA9IHBheWxvYWRcbiAgICAgICAgICAgICAgZW1pdHRlci5lbWl0KGBvblBvc3RMb2FkUGFnZVJlc291cmNlc2AsIHtcbiAgICAgICAgICAgICAgICBwYWdlOiBwYXlsb2FkLFxuICAgICAgICAgICAgICAgIHBhZ2VSZXNvdXJjZXM6IHBheWxvYWQsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucGFnZURiLnNldChwYWdlUGF0aCwgZmluYWxSZXN1bHQpXG5cbiAgICAgICAgICAgIGlmIChmaW5hbFJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVycm9yOiBmaW5hbFJlc3VsdC5lcnJvcixcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGZpbmFsUmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gd2hlbiBzdGF0aWMtcXVlcnkgZmFpbCB0byBsb2FkIHdlIHRocm93IGEgYmV0dGVyIGVycm9yXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjogZXJyLFxuICAgICAgICAgICAgICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5FcnJvcixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG5cbiAgICBpbkZsaWdodFByb21pc2VcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbkZsaWdodERiLmRlbGV0ZShwYWdlUGF0aClcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLmluRmxpZ2h0RGIuZGVsZXRlKHBhZ2VQYXRoKVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcblxuICAgIHRoaXMuaW5GbGlnaHREYi5zZXQocGFnZVBhdGgsIGluRmxpZ2h0UHJvbWlzZSlcblxuICAgIHJldHVybiBpbkZsaWdodFByb21pc2VcbiAgfVxuXG4gIC8vIHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBwYWdlIGRvZXMgbm90IGV4aXN0cyBpbiBjYWNoZVxuICBsb2FkUGFnZVN5bmMocmF3UGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcGFnZVBhdGggPSBmaW5kUGF0aChyYXdQYXRoKVxuICAgIGlmICh0aGlzLnBhZ2VEYi5oYXMocGFnZVBhdGgpKSB7XG4gICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMucGFnZURiLmdldChwYWdlUGF0aClcblxuICAgICAgaWYgKHBhZ2VEYXRhLnBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIHBhZ2VEYXRhLnBheWxvYWRcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnM/LndpdGhFcnJvckRldGFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjogcGFnZURhdGEuZXJyb3IsXG4gICAgICAgICAgc3RhdHVzOiBwYWdlRGF0YS5zdGF0dXMsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgc2hvdWxkUHJlZmV0Y2gocGFnZVBhdGgpIHtcbiAgICAvLyBTa2lwIHByZWZldGNoaW5nIGlmIHdlIGtub3cgdXNlciBpcyBvbiBzbG93IG9yIGNvbnN0cmFpbmVkIGNvbm5lY3Rpb25cbiAgICBpZiAoIWRvZXNDb25uZWN0aW9uU3VwcG9ydFByZWZldGNoKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBwYWdlIGV4aXN0cy5cbiAgICBpZiAodGhpcy5wYWdlRGIuaGFzKHBhZ2VQYXRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHByZWZldGNoKHBhZ2VQYXRoKSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFByZWZldGNoKHBhZ2VQYXRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gVGVsbCBwbHVnaW5zIHdpdGggY3VzdG9tIHByZWZldGNoaW5nIGxvZ2ljIHRoYXQgdGhleSBzaG91bGQgc3RhcnRcbiAgICAvLyBwcmVmZXRjaGluZyB0aGlzIHBhdGguXG4gICAgaWYgKCF0aGlzLnByZWZldGNoVHJpZ2dlcmVkLmhhcyhwYWdlUGF0aCkpIHtcbiAgICAgIHRoaXMuYXBpUnVubmVyKGBvblByZWZldGNoUGF0aG5hbWVgLCB7IHBhdGhuYW1lOiBwYWdlUGF0aCB9KVxuICAgICAgdGhpcy5wcmVmZXRjaFRyaWdnZXJlZC5hZGQocGFnZVBhdGgpXG4gICAgfVxuXG4gICAgLy8gSWYgYSBwbHVnaW4gaGFzIGRpc2FibGVkIGNvcmUgcHJlZmV0Y2hpbmcsIHN0b3Agbm93LlxuICAgIGlmICh0aGlzLnByZWZldGNoRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IHJlYWxQYXRoID0gZmluZFBhdGgocGFnZVBhdGgpXG4gICAgLy8gVG9kbyBtYWtlIGRvUHJlZmV0Y2ggbG9naWMgY2FjaGVhYmxlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gICAgdGhpcy5kb1ByZWZldGNoKHJlYWxQYXRoKS50aGVuKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5wcmVmZXRjaENvbXBsZXRlZC5oYXMocGFnZVBhdGgpKSB7XG4gICAgICAgIHRoaXMuYXBpUnVubmVyKGBvblBvc3RQcmVmZXRjaFBhdGhuYW1lYCwgeyBwYXRobmFtZTogcGFnZVBhdGggfSlcbiAgICAgICAgdGhpcy5wcmVmZXRjaENvbXBsZXRlZC5hZGQocGFnZVBhdGgpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBkb1ByZWZldGNoKHBhZ2VQYXRoKSB7XG4gICAgY29uc3QgcGFnZURhdGFVcmwgPSBjcmVhdGVQYWdlRGF0YVVybChwYWdlUGF0aClcbiAgICByZXR1cm4gcHJlZmV0Y2hIZWxwZXIocGFnZURhdGFVcmwsIHtcbiAgICAgIGNyb3NzT3JpZ2luOiBgYW5vbnltb3VzYCxcbiAgICAgIGFzOiBgZmV0Y2hgLFxuICAgIH0pLnRoZW4oKCkgPT5cbiAgICAgIC8vIFRoaXMgd2FzIGp1c3QgcHJlZmV0Y2hlZCwgc28gd2lsbCByZXR1cm4gYSByZXNwb25zZSBmcm9tXG4gICAgICAvLyB0aGUgY2FjaGUgaW5zdGVhZCBvZiBtYWtpbmcgYW5vdGhlciByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXJcbiAgICAgIHRoaXMubG9hZFBhZ2VEYXRhSnNvbihwYWdlUGF0aClcbiAgICApXG4gIH1cblxuICBob3ZlcmluZyhyYXdQYXRoKSB7XG4gICAgdGhpcy5sb2FkUGFnZShyYXdQYXRoKVxuICB9XG5cbiAgZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUocmF3UGF0aCkge1xuICAgIGNvbnN0IHBhZ2VQYXRoID0gZmluZFBhdGgocmF3UGF0aClcbiAgICBjb25zdCBwYWdlID0gdGhpcy5wYWdlRGF0YURiLmdldChwYWdlUGF0aClcbiAgICBpZiAocGFnZSkge1xuICAgICAgY29uc3QgcGFnZVJlc291cmNlcyA9IHRvUGFnZVJlc291cmNlcyhwYWdlLnBheWxvYWQpXG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmNyZWF0ZUNvbXBvbmVudFVybHMocGFnZVJlc291cmNlcy5wYWdlLmNvbXBvbmVudENodW5rTmFtZSksXG4gICAgICAgIGNyZWF0ZVBhZ2VEYXRhVXJsKHBhZ2VQYXRoKSxcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBpc1BhZ2VOb3RGb3VuZChyYXdQYXRoKSB7XG4gICAgY29uc3QgcGFnZVBhdGggPSBmaW5kUGF0aChyYXdQYXRoKVxuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VEYi5nZXQocGFnZVBhdGgpXG4gICAgcmV0dXJuICFwYWdlIHx8IHBhZ2Uubm90Rm91bmRcbiAgfVxuXG4gIGxvYWRBcHBEYXRhKHJldHJpZXMgPSAwKSB7XG4gICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRHZXQoYCR7X19QQVRIX1BSRUZJWF9ffS9wYWdlLWRhdGEvYXBwLWRhdGEuanNvbmApLnRoZW4oXG4gICAgICByZXEgPT4ge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgcmVzcG9uc2VUZXh0IH0gPSByZXFcblxuICAgICAgICBsZXQgYXBwRGF0YVxuXG4gICAgICAgIGlmIChzdGF0dXMgIT09IDIwMCAmJiByZXRyaWVzIDwgMykge1xuICAgICAgICAgIC8vIFJldHJ5IDMgdGltZXMgaW5jYXNlIG9mIG5vbi0yMDAgcmVzcG9uc2VzXG4gICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFwcERhdGEocmV0cmllcyArIDEpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgMjAwXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBqc29uUGF5bG9hZCA9IEpTT04ucGFyc2UocmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgaWYgKGpzb25QYXlsb2FkLndlYnBhY2tDb21waWxhdGlvbkhhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBhIHZhbGlkIGFwcC1kYXRhIHJlc3BvbnNlYClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwRGF0YSA9IGpzb25QYXlsb2FkXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIG9mIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFwcERhdGFcbiAgICAgIH1cbiAgICApXG4gIH1cbn1cblxuY29uc3QgY3JlYXRlQ29tcG9uZW50VXJscyA9IGNvbXBvbmVudENodW5rTmFtZSA9PlxuICAod2luZG93Ll9fX2NodW5rTWFwcGluZ1tjb21wb25lbnRDaHVua05hbWVdIHx8IFtdKS5tYXAoXG4gICAgY2h1bmsgPT4gX19QQVRIX1BSRUZJWF9fICsgY2h1bmtcbiAgKVxuXG5leHBvcnQgY2xhc3MgUHJvZExvYWRlciBleHRlbmRzIEJhc2VMb2FkZXIge1xuICBjb25zdHJ1Y3Rvcihhc3luY1JlcXVpcmVzLCBtYXRjaFBhdGhzKSB7XG4gICAgY29uc3QgbG9hZENvbXBvbmVudCA9IGNodW5rTmFtZSA9PiB7XG4gICAgICBpZiAoIWFzeW5jUmVxdWlyZXMuY29tcG9uZW50c1tjaHVua05hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgV2UgY291bGRuJ3QgZmluZCB0aGUgY29ycmVjdCBjb21wb25lbnQgY2h1bmsgd2l0aCB0aGUgbmFtZSAke2NodW5rTmFtZX1gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXN5bmNSZXF1aXJlcy5jb21wb25lbnRzW2NodW5rTmFtZV0oKVxuICAgICAgICAgIC50aGVuKHByZWZlckRlZmF1bHQpXG4gICAgICAgICAgLy8gbG9hZGVyIHdpbGwgaGFuZGxlIHRoZSBjYXNlIHdoZW4gY29tcG9uZW50IGlzIGVycm9yXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiBlcnIpXG4gICAgICApXG4gICAgfVxuXG4gICAgc3VwZXIobG9hZENvbXBvbmVudCwgbWF0Y2hQYXRocylcbiAgfVxuXG4gIGRvUHJlZmV0Y2gocGFnZVBhdGgpIHtcbiAgICByZXR1cm4gc3VwZXIuZG9QcmVmZXRjaChwYWdlUGF0aCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IFBhZ2VSZXNvdXJjZVN0YXR1cy5TdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfVxuICAgICAgY29uc3QgcGFnZURhdGEgPSByZXN1bHQucGF5bG9hZFxuICAgICAgY29uc3QgY2h1bmtOYW1lID0gcGFnZURhdGEuY29tcG9uZW50Q2h1bmtOYW1lXG4gICAgICBjb25zdCBjb21wb25lbnRVcmxzID0gY3JlYXRlQ29tcG9uZW50VXJscyhjaHVua05hbWUpXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY29tcG9uZW50VXJscy5tYXAocHJlZmV0Y2hIZWxwZXIpKS50aGVuKCgpID0+IHBhZ2VEYXRhKVxuICAgIH0pXG4gIH1cblxuICBsb2FkUGFnZURhdGFKc29uKHJhd1BhdGgpIHtcbiAgICByZXR1cm4gc3VwZXIubG9hZFBhZ2VEYXRhSnNvbihyYXdQYXRoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEubm90Rm91bmQpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgaHRtbCBmaWxlIGV4aXN0IHVzaW5nIEhFQUQgcmVxdWVzdDpcbiAgICAgICAgLy8gaWYgaXQgZG9lcyB3ZSBzaG91bGQgbmF2aWdhdGUgdG8gaXQgaW5zdGVhZCBvZiBzaG93aW5nIDQwNFxuICAgICAgICByZXR1cm4gZG9GZXRjaChyYXdQYXRoLCBgSEVBRGApLnRoZW4ocmVxID0+IHtcbiAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAvLyBwYWdlICguaHRtbCBmaWxlKSBhY3R1YWxseSBleGlzdCAob3Igd2UgYXNrZWQgZm9yIDQwNCApXG4gICAgICAgICAgICAvLyByZXR1cm5pbmcgcGFnZSByZXNvdXJjZXMgc3RhdHVzIGFzIGVycm9yZWQgdG8gdHJpZ2dlclxuICAgICAgICAgICAgLy8gcmVndWxhciBicm93c2VyIG5hdmlnYXRpb24gdG8gZ2l2ZW4gcGFnZVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3RhdHVzOiBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgSEVBRCByZXF1ZXN0IHdhc24ndCAyMDAsIHJldHVybiBub3RGb3VuZCByZXN1bHRcbiAgICAgICAgICAvLyBhbmQgc2hvdyA0MDQgcGFnZVxuICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0pXG4gIH1cbn1cblxubGV0IGluc3RhbmNlXG5cbmV4cG9ydCBjb25zdCBzZXRMb2FkZXIgPSBfbG9hZGVyID0+IHtcbiAgaW5zdGFuY2UgPSBfbG9hZGVyXG59XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNMb2FkZXIgPSB7XG4gIGVucXVldWU6IHJhd1BhdGggPT4gaW5zdGFuY2UucHJlZmV0Y2gocmF3UGF0aCksXG5cbiAgLy8gUmVhbCBtZXRob2RzXG4gIGdldFJlc291cmNlVVJMc0ZvclBhdGhuYW1lOiByYXdQYXRoID0+XG4gICAgaW5zdGFuY2UuZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUocmF3UGF0aCksXG4gIGxvYWRQYWdlOiByYXdQYXRoID0+IGluc3RhbmNlLmxvYWRQYWdlKHJhd1BhdGgpLFxuICAvLyBUT0RPIGFkZCBkZXByZWNhdGlvbiB0byB2NCBzbyBwZW9wbGUgdXNlIHdpdGhFcnJvckRldGFpbHMgYW5kIHRoZW4gd2UgY2FuIHJlbW92ZSBpbiB2NSBhbmQgY2hhbmdlIGRlZmF1bHQgYmVoYXZpb3VyXG4gIGxvYWRQYWdlU3luYzogKHJhd1BhdGgsIG9wdGlvbnMgPSB7fSkgPT5cbiAgICBpbnN0YW5jZS5sb2FkUGFnZVN5bmMocmF3UGF0aCwgb3B0aW9ucyksXG4gIHByZWZldGNoOiByYXdQYXRoID0+IGluc3RhbmNlLnByZWZldGNoKHJhd1BhdGgpLFxuICBpc1BhZ2VOb3RGb3VuZDogcmF3UGF0aCA9PiBpbnN0YW5jZS5pc1BhZ2VOb3RGb3VuZChyYXdQYXRoKSxcbiAgaG92ZXJpbmc6IHJhd1BhdGggPT4gaW5zdGFuY2UuaG92ZXJpbmcocmF3UGF0aCksXG4gIGxvYWRBcHBEYXRhOiAoKSA9PiBpbnN0YW5jZS5sb2FkQXBwRGF0YSgpLFxufVxuXG5leHBvcnQgZGVmYXVsdCBwdWJsaWNMb2FkZXJcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpY1F1ZXJ5UmVzdWx0cygpIHtcbiAgaWYgKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLnN0YXRpY1F1ZXJ5RGJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge31cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8741\n')},804:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1788);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7294);\n/* harmony import */ var _api_runner_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7343);\n/* harmony import */ var _find_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2257);\n// Renders page\nvar PageRenderer=/*#__PURE__*/function(_React$Component){(0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__/* .default */ .Z)(PageRenderer,_React$Component);function PageRenderer(){return _React$Component.apply(this,arguments)||this;}var _proto=PageRenderer.prototype;_proto.render=function render(){var props=Object.assign({},this.props,{params:Object.assign({},(0,_find_path__WEBPACK_IMPORTED_MODULE_2__/* .grabMatchParams */ .GA)(this.props.location.pathname),this.props.pageResources.json.pageContext.__params)});var pageElement=/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(this.props.pageResources.component,Object.assign({},props,{key:this.props.path||this.props.pageResources.page.path}));var wrappedPage=(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_1__/* .apiRunner */ .h)("wrapPageElement",{element:pageElement,props:props},pageElement,function(_ref){var result=_ref.result;return{element:result,props:props};}).pop();return wrappedPage;};return PageRenderer;}(react__WEBPACK_IMPORTED_MODULE_0__.Component);/* harmony default export */ __webpack_exports__["Z"] = (PageRenderer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wYWdlLXJlbmRlcmVyLmpzPzIwZTUiXSwibmFtZXMiOlsiUGFnZVJlbmRlcmVyIiwicmVuZGVyIiwicHJvcHMiLCJwYXJhbXMiLCJncmFiTWF0Y2hQYXJhbXMiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwicGFnZVJlc291cmNlcyIsImpzb24iLCJwYWdlQ29udGV4dCIsIl9fcGFyYW1zIiwicGFnZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY29tcG9uZW50Iiwia2V5IiwicGF0aCIsInBhZ2UiLCJ3cmFwcGVkUGFnZSIsImFwaVJ1bm5lciIsImVsZW1lbnQiLCJyZXN1bHQiLCJwb3AiLCJSZWFjdCJdLCJtYXBwaW5ncyI6Ijs7OztBQUtBO0dBQ01BLGEseVJBQ0pDLE0sQ0FBQSxpQkFBUyxDQUNQLEdBQU1DLE1BQUssa0JBQ04sS0FBS0EsS0FEQyxFQUVUQyxNQUFNLGtCQUNEQyxxRUFBZSxDQUFDLEtBQUtGLEtBQUwsQ0FBV0csUUFBWCxDQUFvQkMsUUFBckIsQ0FEZCxDQUVELEtBQUtKLEtBQUwsQ0FBV0ssYUFBWCxDQUF5QkMsSUFBekIsQ0FBOEJDLFdBQTlCLENBQTBDQyxRQUZ6QyxDQUZHLEVBQVgsQ0FRQSxHQUFNQyxZQUFXLGNBQUdDLG9EQUFhLENBQUMsS0FBS1YsS0FBTCxDQUFXSyxhQUFYLENBQXlCTSxTQUExQixrQkFDNUJYLEtBRDRCLEVBRS9CWSxHQUFHLENBQUUsS0FBS1osS0FBTCxDQUFXYSxJQUFYLEVBQW1CLEtBQUtiLEtBQUwsQ0FBV0ssYUFBWCxDQUF5QlMsSUFBekIsQ0FBOEJELElBRnZCLEdBQWpDLENBS0EsR0FBTUUsWUFBVyxDQUFHQyx1RUFBUyxtQkFFM0IsQ0FBRUMsT0FBTyxDQUFFUixXQUFYLENBQXdCVCxLQUFLLENBQUxBLEtBQXhCLENBRjJCLENBRzNCUyxXQUgyQixDQUkzQixjQUFnQixJQUFiUyxPQUFhLE1BQWJBLE1BQWEsQ0FDZCxNQUFPLENBQUVELE9BQU8sQ0FBRUMsTUFBWCxDQUFtQmxCLEtBQUssQ0FBTEEsS0FBbkIsQ0FBUCxDQUNELENBTjBCLENBQVQsQ0FPbEJtQixHQVBrQixFQUFwQixDQVNBLE1BQU9KLFlBQVAsQ0FDRCxDLHVCQXpCd0JLLDRDLEVBbUMzQix5REFBZXRCLFlBQWYiLCJmaWxlIjoiODA0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgeyBhcGlSdW5uZXIgfSBmcm9tIFwiLi9hcGktcnVubmVyLWJyb3dzZXJcIlxuaW1wb3J0IHsgZ3JhYk1hdGNoUGFyYW1zIH0gZnJvbSBcIi4vZmluZC1wYXRoXCJcblxuLy8gUmVuZGVycyBwYWdlXG5jbGFzcyBQYWdlUmVuZGVyZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIC4uLmdyYWJNYXRjaFBhcmFtcyh0aGlzLnByb3BzLmxvY2F0aW9uLnBhdGhuYW1lKSxcbiAgICAgICAgLi4udGhpcy5wcm9wcy5wYWdlUmVzb3VyY2VzLmpzb24ucGFnZUNvbnRleHQuX19wYXJhbXMsXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VFbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLnBhZ2VSZXNvdXJjZXMuY29tcG9uZW50LCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGtleTogdGhpcy5wcm9wcy5wYXRoIHx8IHRoaXMucHJvcHMucGFnZVJlc291cmNlcy5wYWdlLnBhdGgsXG4gICAgfSlcblxuICAgIGNvbnN0IHdyYXBwZWRQYWdlID0gYXBpUnVubmVyKFxuICAgICAgYHdyYXBQYWdlRWxlbWVudGAsXG4gICAgICB7IGVsZW1lbnQ6IHBhZ2VFbGVtZW50LCBwcm9wcyB9LFxuICAgICAgcGFnZUVsZW1lbnQsXG4gICAgICAoeyByZXN1bHQgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBlbGVtZW50OiByZXN1bHQsIHByb3BzIH1cbiAgICAgIH1cbiAgICApLnBvcCgpXG5cbiAgICByZXR1cm4gd3JhcHBlZFBhZ2VcbiAgfVxufVxuXG5QYWdlUmVuZGVyZXIucHJvcFR5cGVzID0ge1xuICBsb2NhdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBwYWdlUmVzb3VyY2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gIHBhZ2VDb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2VSZW5kZXJlclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///804\n')},2871:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\nvar inheritsLoose = __webpack_require__(1788);\n// EXTERNAL MODULE: ./.cache/api-runner-browser.js\nvar api_runner_browser = __webpack_require__(7343);\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(7294);\n// EXTERNAL MODULE: ./node_modules/react-dom/index.js\nvar react_dom = __webpack_require__(3935);\n// EXTERNAL MODULE: ./node_modules/@gatsbyjs/reach-router/es/index.js + 2 modules\nvar es = __webpack_require__(9499);\n// EXTERNAL MODULE: ./node_modules/gatsby-react-router-scroll/index.js\nvar gatsby_react_router_scroll = __webpack_require__(9679);\n// EXTERNAL MODULE: ./.cache/gatsby-browser-entry.js\nvar gatsby_browser_entry = __webpack_require__(5444);\n// EXTERNAL MODULE: ./.cache/loader.js + 1 modules\nvar loader = __webpack_require__(8741);\n// EXTERNAL MODULE: ./.cache/redirect-utils.js + 1 modules\nvar redirect_utils = __webpack_require__(5166);\n// EXTERNAL MODULE: ./.cache/emitter.js + 1 modules\nvar emitter = __webpack_require__(8110);\n;// CONCATENATED MODULE: ./.cache/route-announcer-props.js\n// This is extracted to separate module because it\'s shared\n// between browser and SSR code\nvar RouteAnnouncerProps={id:"gatsby-announcer",style:{position:"absolute",top:0,width:1,height:1,padding:0,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},"aria-live":"assertive","aria-atomic":"true"};\n// EXTERNAL MODULE: ./node_modules/@gatsbyjs/reach-router/lib/history.js\nvar lib_history = __webpack_require__(2393);\n// EXTERNAL MODULE: ./node_modules/gatsby-link/index.js\nvar gatsby_link = __webpack_require__(8037);\n;// CONCATENATED MODULE: ./.cache/navigation.js\nfunction maybeRedirect(pathname){var redirect=(0,redirect_utils/* maybeGetBrowserRedirect */.J)(pathname);if(redirect!=null){window.___replace(redirect.toPath);return true;}else{return false;}}var onPreRouteUpdate=function onPreRouteUpdate(location,prevLocation){if(!maybeRedirect(location.pathname)){(0,api_runner_browser/* apiRunner */.h)("onPreRouteUpdate",{location:location,prevLocation:prevLocation});}};var onRouteUpdate=function onRouteUpdate(location,prevLocation){if(!maybeRedirect(location.pathname)){(0,api_runner_browser/* apiRunner */.h)("onRouteUpdate",{location:location,prevLocation:prevLocation});if(false){}}};var navigation_navigate=function navigate(to,options){if(options===void 0){options={};}// Support forward/backward navigation with numbers\n// navigate(-2) (jumps back 2 history steps)\n// navigate(2) (jumps forward 2 history steps)\nif(typeof to==="number"){lib_history/* globalHistory.navigate */.V5.navigate(to);return;}var _parsePath=(0,gatsby_link/* parsePath */.cP)(to),pathname=_parsePath.pathname;var redirect=(0,redirect_utils/* maybeGetBrowserRedirect */.J)(pathname);// If we\'re redirecting, just replace the passed in pathname\n// to the one we want to redirect to.\nif(redirect){to=redirect.toPath;pathname=(0,gatsby_link/* parsePath */.cP)(to).pathname;}// If we had a service worker update, no matter the path, reload window and\n// reset the pathname whitelist\nif(window.___swUpdated){window.location=pathname;return;}// Start a timer to wait for a second before transitioning and showing a\n// loader in case resources aren\'t around yet.\nvar timeoutId=setTimeout(function(){emitter/* default.emit */.Z.emit("onDelayedLoadPageResources",{pathname:pathname});(0,api_runner_browser/* apiRunner */.h)("onRouteUpdateDelayed",{location:window.location});},1000);loader/* default.loadPage */.ZP.loadPage(pathname).then(function(pageResources){// If no page resources, then refresh the page\n// Do this, rather than simply `window.location.reload()`, so that\n// pressing the back/forward buttons work - otherwise when pressing\n// back, the browser will just change the URL and expect JS to handle\n// the change, which won\'t always work since it might not be a Gatsby\n// page.\nif(!pageResources||pageResources.status===loader/* PageResourceStatus.Error */.uQ.Error){window.history.replaceState({},"",location.href);window.location=pathname;clearTimeout(timeoutId);return;}// If the loaded page has a different compilation hash to the\n// window, then a rebuild has occurred on the server. Reload.\nif( true&&pageResources){if(pageResources.page.webpackCompilationHash!==window.___webpackCompilationHash){// Purge plugin-offline cache\nif("serviceWorker"in navigator&&navigator.serviceWorker.controller!==null&&navigator.serviceWorker.controller.state==="activated"){navigator.serviceWorker.controller.postMessage({gatsbyApi:"clearPathResources"});}window.location=pathname;}}(0,es.navigate)(to,options);clearTimeout(timeoutId);});};function shouldUpdateScroll(prevRouterProps,_ref){var _this=this;var location=_ref.location;var pathname=location.pathname,hash=location.hash;var results=(0,api_runner_browser/* apiRunner */.h)("shouldUpdateScroll",{prevRouterProps:prevRouterProps,// `pathname` for backwards compatibility\npathname:pathname,routerProps:{location:location},getSavedScrollPosition:function getSavedScrollPosition(args){return[0,// FIXME this is actually a big code smell, we should fix this\n// eslint-disable-next-line @babel/no-invalid-this\n_this._stateStorage.read(args,args.key)];}});if(results.length>0){// Use the latest registered shouldUpdateScroll result, this allows users to override plugin\'s configuration\n// @see https://github.com/gatsbyjs/gatsby/issues/12038\nreturn results[results.length-1];}if(prevRouterProps){var oldPathname=prevRouterProps.location.pathname;if(oldPathname===pathname){// Scroll to element if it exists, if it doesn\'t, or no hash is provided,\n// scroll to top.\nreturn hash?decodeURI(hash.slice(1)):[0,0];}}return true;}function init(){// The "scroll-behavior" package expects the "action" to be on the location\n// object so let\'s copy it over.\nlib_history/* globalHistory.listen */.V5.listen(function(args){args.location.action=args.action;});window.___push=function(to){return navigation_navigate(to,{replace:false});};window.___replace=function(to){return navigation_navigate(to,{replace:true});};window.___navigate=function(to,options){return navigation_navigate(to,options);};// Check for initial page-load redirect\nmaybeRedirect(window.location.pathname);}var RouteAnnouncer=/*#__PURE__*/function(_React$Component){(0,inheritsLoose/* default */.Z)(RouteAnnouncer,_React$Component);function RouteAnnouncer(props){var _this2;_this2=_React$Component.call(this,props)||this;_this2.announcementRef=/*#__PURE__*/react.createRef();return _this2;}var _proto=RouteAnnouncer.prototype;_proto.componentDidUpdate=function componentDidUpdate(prevProps,nextProps){var _this3=this;requestAnimationFrame(function(){var pageName="new page at "+_this3.props.location.pathname;if(document.title){pageName=document.title;}var pageHeadings=document.querySelectorAll("#gatsby-focus-wrapper h1");if(pageHeadings&&pageHeadings.length){pageName=pageHeadings[0].textContent;}var newAnnouncement="Navigated to "+pageName;if(_this3.announcementRef.current){var oldAnnouncement=_this3.announcementRef.current.innerText;if(oldAnnouncement!==newAnnouncement){_this3.announcementRef.current.innerText=newAnnouncement;}}});};_proto.render=function render(){return/*#__PURE__*/react.createElement("div",Object.assign({},RouteAnnouncerProps,{ref:this.announcementRef}));};return RouteAnnouncer;}(react.Component);var compareLocationProps=function compareLocationProps(prevLocation,nextLocation){var _prevLocation$state,_nextLocation$state;if(prevLocation.href!==nextLocation.href){return true;}if((prevLocation===null||prevLocation===void 0?void 0:(_prevLocation$state=prevLocation.state)===null||_prevLocation$state===void 0?void 0:_prevLocation$state.key)!==(nextLocation===null||nextLocation===void 0?void 0:(_nextLocation$state=nextLocation.state)===null||_nextLocation$state===void 0?void 0:_nextLocation$state.key)){return true;}return false;};// Fire on(Pre)RouteUpdate APIs\nvar RouteUpdates=/*#__PURE__*/function(_React$Component2){(0,inheritsLoose/* default */.Z)(RouteUpdates,_React$Component2);function RouteUpdates(props){var _this4;_this4=_React$Component2.call(this,props)||this;onPreRouteUpdate(props.location,null);return _this4;}var _proto2=RouteUpdates.prototype;_proto2.componentDidMount=function componentDidMount(){onRouteUpdate(this.props.location,null);};_proto2.shouldComponentUpdate=function shouldComponentUpdate(prevProps){if(compareLocationProps(prevProps.location,this.props.location)){onPreRouteUpdate(this.props.location,prevProps.location);return true;}return false;};_proto2.componentDidUpdate=function componentDidUpdate(prevProps){if(compareLocationProps(prevProps.location,this.props.location)){onRouteUpdate(this.props.location,prevProps.location);}};_proto2.render=function render(){return/*#__PURE__*/react.createElement(react.Fragment,null,this.props.children,/*#__PURE__*/react.createElement(RouteAnnouncer,{location:location}));};return RouteUpdates;}(react.Component);\n// EXTERNAL MODULE: ./.cache/page-renderer.js\nvar page_renderer = __webpack_require__(804);\n// EXTERNAL MODULE: ./.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js\nvar async_requires = __webpack_require__(4999);\n;// CONCATENATED MODULE: ./node_modules/shallow-compare/es/index.js\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\n/* harmony default export */ var shallow_compare_es = (function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});\n;// CONCATENATED MODULE: ./.cache/ensure-resources.js\nvar EnsureResources=/*#__PURE__*/function(_React$Component){(0,inheritsLoose/* default */.Z)(EnsureResources,_React$Component);function EnsureResources(props){var _this;_this=_React$Component.call(this)||this;var location=props.location,pageResources=props.pageResources;_this.state={location:Object.assign({},location),pageResources:pageResources||loader/* default.loadPageSync */.ZP.loadPageSync(location.pathname,{withErrorDetails:true})};return _this;}EnsureResources.getDerivedStateFromProps=function getDerivedStateFromProps(_ref,prevState){var location=_ref.location;if(prevState.location.href!==location.href){var pageResources=loader/* default.loadPageSync */.ZP.loadPageSync(location.pathname,{withErrorDetails:true});return{pageResources:pageResources,location:Object.assign({},location)};}return{location:Object.assign({},location)};};var _proto=EnsureResources.prototype;_proto.loadResources=function loadResources(rawPath){var _this2=this;loader/* default.loadPage */.ZP.loadPage(rawPath).then(function(pageResources){if(pageResources&&pageResources.status!==loader/* PageResourceStatus.Error */.uQ.Error){_this2.setState({location:Object.assign({},window.location),pageResources:pageResources});}else{window.history.replaceState({},"",location.href);window.location=rawPath;}});};_proto.shouldComponentUpdate=function shouldComponentUpdate(nextProps,nextState){// Always return false if we\'re missing resources.\nif(!nextState.pageResources){this.loadResources(nextProps.location.pathname);return false;}if(false){}// Check if the component or json have changed.\nif(this.state.pageResources!==nextState.pageResources){return true;}if(this.state.pageResources.component!==nextState.pageResources.component){return true;}if(this.state.pageResources.json!==nextState.pageResources.json){return true;}// Check if location has changed on a page using internal routing\n// via matchPath configuration.\nif(this.state.location.key!==nextState.location.key&&nextState.pageResources.page&&(nextState.pageResources.page.matchPath||nextState.pageResources.page.path)){return true;}return shallow_compare_es(this,nextProps,nextState);};_proto.render=function render(){if(false){ var message, _this$state$pageResou; }return this.props.children(this.state);};return EnsureResources;}(react.Component);/* harmony default export */ var ensure_resources = (EnsureResources);\n// EXTERNAL MODULE: ./.cache/strip-prefix.js\nvar strip_prefix = __webpack_require__(1578);\n;// CONCATENATED MODULE: ./.cache/_this_is_virtual_fs_path_/$virtual/match-paths.json\nvar match_paths_namespaceObject = JSON.parse(\'[{"path":"/en/404.html","matchPath":"/en/404.html"},{"path":"/en/cejst/","matchPath":"/en/cejst/"},{"path":"/en/contact/","matchPath":"/en/contact/"},{"path":"/en/methodology/","matchPath":"/en/methodology/"},{"path":"/es/404.html","matchPath":"/es/404.html"},{"path":"/es/cejst/","matchPath":"/es/cejst/"},{"path":"/es/contact/","matchPath":"/es/contact/"},{"path":"/es/methodology/","matchPath":"/es/methodology/"},{"path":"/en/","matchPath":"/en/"},{"path":"/es/","matchPath":"/es/"},{"path":"/en/404/","matchPath":"/en/*"},{"path":"/es/404/","matchPath":"/es/*"}]\');\n;// CONCATENATED MODULE: ./.cache/production-app.js\n// Generated during bootstrap\nvar production_app_loader=new loader/* ProdLoader */.kL(async_requires,match_paths_namespaceObject);(0,loader/* setLoader */.N1)(production_app_loader);production_app_loader.setApiRunner(api_runner_browser/* apiRunner */.h);window.asyncRequires=async_requires;window.___emitter=emitter/* default */.Z;window.___loader=loader/* publicLoader */.jN;init();(0,api_runner_browser/* apiRunnerAsync */.I)("onClientEntry").then(function(){// Let plugins register a service worker. The plugin just needs\n// to return true.\nif((0,api_runner_browser/* apiRunner */.h)("registerServiceWorker").filter(Boolean).length>0){__webpack_require__(154);}// In gatsby v2 if Router is used in page using matchPaths\n// paths need to contain full path.\n// For example:\n// - page have `/app/*` matchPath\n// - inside template user needs to use `/app/xyz` as path\n// Resetting `basepath`/`baseuri` keeps current behaviour\n// to not introduce breaking change.\n// Remove this in v3\nvar RouteHandler=function RouteHandler(props){return/*#__PURE__*/react.createElement(es.BaseContext.Provider,{value:{baseuri:"/",basepath:"/"}},/*#__PURE__*/react.createElement(page_renderer/* default */.Z,props));};var DataContext=/*#__PURE__*/react.createContext({});var GatsbyRoot=/*#__PURE__*/function(_React$Component){(0,inheritsLoose/* default */.Z)(GatsbyRoot,_React$Component);function GatsbyRoot(){return _React$Component.apply(this,arguments)||this;}var _proto=GatsbyRoot.prototype;_proto.render=function render(){var children=this.props.children;return/*#__PURE__*/react.createElement(es.Location,null,function(_ref){var location=_ref.location;return/*#__PURE__*/react.createElement(ensure_resources,{location:location},function(_ref2){var pageResources=_ref2.pageResources,location=_ref2.location;var staticQueryResults=(0,loader/* getStaticQueryResults */.hs)();return/*#__PURE__*/react.createElement(gatsby_browser_entry.StaticQueryContext.Provider,{value:staticQueryResults},/*#__PURE__*/react.createElement(DataContext.Provider,{value:{pageResources:pageResources,location:location}},children));});});};return GatsbyRoot;}(react.Component);var LocationHandler=/*#__PURE__*/function(_React$Component2){(0,inheritsLoose/* default */.Z)(LocationHandler,_React$Component2);function LocationHandler(){return _React$Component2.apply(this,arguments)||this;}var _proto2=LocationHandler.prototype;_proto2.render=function render(){var _this=this;return/*#__PURE__*/react.createElement(DataContext.Consumer,null,function(_ref3){var pageResources=_ref3.pageResources,location=_ref3.location;return/*#__PURE__*/react.createElement(RouteUpdates,{location:location},/*#__PURE__*/react.createElement(gatsby_react_router_scroll/* ScrollContext */.$C,{location:location,shouldUpdateScroll:shouldUpdateScroll},/*#__PURE__*/react.createElement(es.Router,{basepath:"/justice40-tool/842-69a4eec",location:location,id:"gatsby-focus-wrapper"},/*#__PURE__*/react.createElement(RouteHandler,Object.assign({path:pageResources.page.path==="/404.html"?(0,strip_prefix/* default */.Z)(location.pathname,"/justice40-tool/842-69a4eec"):encodeURI(pageResources.page.matchPath||pageResources.page.path)},_this.props,{location:location,pageResources:pageResources},pageResources.json)))));});};return LocationHandler;}(react.Component);var _window=window,pagePath=_window.pagePath,browserLoc=_window.location;// Explicitly call navigate if the canonical path (window.pagePath)\n// is different to the browser path (window.location.pathname). But\n// only if NONE of the following conditions hold:\n//\n// - The url matches a client side route (page.matchPath)\n// - it\'s a 404 page\n// - it\'s the offline plugin shell (/offline-plugin-app-shell-fallback/)\nif(pagePath&&"/justice40-tool/842-69a4eec"+pagePath!==browserLoc.pathname&&!(production_app_loader.findMatchPath((0,strip_prefix/* default */.Z)(browserLoc.pathname,"/justice40-tool/842-69a4eec"))||pagePath==="/404.html"||pagePath.match(/^\\/404\\/?$/)||pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/))){(0,es.navigate)("/justice40-tool/842-69a4eec"+pagePath+browserLoc.search+browserLoc.hash,{replace:true});}loader/* publicLoader.loadPage */.jN.loadPage(browserLoc.pathname).then(function(page){if(!page||page.status===loader/* PageResourceStatus.Error */.uQ.Error){var message="page resources for "+browserLoc.pathname+" not found. Not rendering React";// if the chunk throws an error we want to capture the real error\n// This should help with https://github.com/gatsbyjs/gatsby/issues/19618\nif(page&&page.error){console.error(message);throw page.error;}throw new Error(message);}window.___webpackCompilationHash=page.page.webpackCompilationHash;var SiteRoot=(0,api_runner_browser/* apiRunner */.h)("wrapRootElement",{element:/*#__PURE__*/react.createElement(LocationHandler,null)},/*#__PURE__*/react.createElement(LocationHandler,null),function(_ref4){var result=_ref4.result;return{element:result};}).pop();var App=function App(){var onClientEntryRanRef=react.useRef(false);react.useEffect(function(){if(!onClientEntryRanRef.current){onClientEntryRanRef.current=true;performance.mark("onInitialClientRender");(0,api_runner_browser/* apiRunner */.h)("onInitialClientRender");}},[]);return/*#__PURE__*/react.createElement(GatsbyRoot,null,SiteRoot);};var renderer=(0,api_runner_browser/* apiRunner */.h)("replaceHydrateFunction",undefined,react_dom.createRoot?react_dom.createRoot:react_dom.hydrate)[0];function runRender(){var rootElement=typeof window!=="undefined"?document.getElementById("___gatsby"):null;if(renderer===react_dom.createRoot){renderer(rootElement,{hydrate:true}).render(/*#__PURE__*/react.createElement(App,null));}else{renderer(/*#__PURE__*/react.createElement(App,null),rootElement);}}// https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450\n// TODO remove IE 10 support\nvar doc=document;if(doc.readyState==="complete"||doc.readyState!=="loading"&&!doc.documentElement.doScroll){setTimeout(function(){runRender();},0);}else{var handler=function handler(){doc.removeEventListener("DOMContentLoaded",handler,false);window.removeEventListener("load",handler,false);runRender();};doc.addEventListener("DOMContentLoaded",handler,false);window.addEventListener("load",handler,false);}});});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yb3V0ZS1hbm5vdW5jZXItcHJvcHMuanM/ZWIwZiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9uYXZpZ2F0aW9uLmpzP2M5ZWUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvc2hhbGxvdy1jb21wYXJlL2VzL2luZGV4LmpzPzExY2EiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi8uY2FjaGUvZW5zdXJlLXJlc291cmNlcy5qcz9mZjRlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vLmNhY2hlL3Byb2R1Y3Rpb24tYXBwLmpzPzUzMTUiXSwibmFtZXMiOlsiUm91dGVBbm5vdW5jZXJQcm9wcyIsImlkIiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsIndpZHRoIiwiaGVpZ2h0IiwicGFkZGluZyIsIm92ZXJmbG93IiwiY2xpcCIsIndoaXRlU3BhY2UiLCJib3JkZXIiLCJtYXliZVJlZGlyZWN0IiwicGF0aG5hbWUiLCJyZWRpcmVjdCIsIm1heWJlR2V0QnJvd3NlclJlZGlyZWN0Iiwid2luZG93IiwiX19fcmVwbGFjZSIsInRvUGF0aCIsIm9uUHJlUm91dGVVcGRhdGUiLCJsb2NhdGlvbiIsInByZXZMb2NhdGlvbiIsImFwaVJ1bm5lciIsIm9uUm91dGVVcGRhdGUiLCJwcm9jZXNzIiwibmF2aWdhdGUiLCJ0byIsIm9wdGlvbnMiLCJnbG9iYWxIaXN0b3J5IiwicGFyc2VQYXRoIiwiX19fc3dVcGRhdGVkIiwidGltZW91dElkIiwic2V0VGltZW91dCIsImVtaXR0ZXIiLCJsb2FkZXIiLCJ0aGVuIiwicGFnZVJlc291cmNlcyIsInN0YXR1cyIsIlBhZ2VSZXNvdXJjZVN0YXR1cyIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJocmVmIiwiY2xlYXJUaW1lb3V0IiwicGFnZSIsIndlYnBhY2tDb21waWxhdGlvbkhhc2giLCJfX193ZWJwYWNrQ29tcGlsYXRpb25IYXNoIiwibmF2aWdhdG9yIiwic2VydmljZVdvcmtlciIsImNvbnRyb2xsZXIiLCJzdGF0ZSIsInBvc3RNZXNzYWdlIiwiZ2F0c2J5QXBpIiwicmVhY2hOYXZpZ2F0ZSIsInNob3VsZFVwZGF0ZVNjcm9sbCIsInByZXZSb3V0ZXJQcm9wcyIsImhhc2giLCJyZXN1bHRzIiwicm91dGVyUHJvcHMiLCJnZXRTYXZlZFNjcm9sbFBvc2l0aW9uIiwiYXJncyIsIl9zdGF0ZVN0b3JhZ2UiLCJyZWFkIiwia2V5IiwibGVuZ3RoIiwib2xkUGF0aG5hbWUiLCJkZWNvZGVVUkkiLCJzbGljZSIsImluaXQiLCJhY3Rpb24iLCJfX19wdXNoIiwicmVwbGFjZSIsIl9fX25hdmlnYXRlIiwiUm91dGVBbm5vdW5jZXIiLCJwcm9wcyIsImFubm91bmNlbWVudFJlZiIsIlJlYWN0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwibmV4dFByb3BzIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGFnZU5hbWUiLCJkb2N1bWVudCIsInRpdGxlIiwicGFnZUhlYWRpbmdzIiwicXVlcnlTZWxlY3RvckFsbCIsInRleHRDb250ZW50IiwibmV3QW5ub3VuY2VtZW50IiwiY3VycmVudCIsIm9sZEFubm91bmNlbWVudCIsImlubmVyVGV4dCIsInJlbmRlciIsImNvbXBhcmVMb2NhdGlvblByb3BzIiwibmV4dExvY2F0aW9uIiwiUm91dGVVcGRhdGVzIiwiY29tcG9uZW50RGlkTW91bnQiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJjaGlsZHJlbiIsIkVuc3VyZVJlc291cmNlcyIsIndpdGhFcnJvckRldGFpbHMiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJwcmV2U3RhdGUiLCJsb2FkUmVzb3VyY2VzIiwicmF3UGF0aCIsInNldFN0YXRlIiwibmV4dFN0YXRlIiwiY29tcG9uZW50IiwianNvbiIsIm1hdGNoUGF0aCIsInBhdGgiLCJzaGFsbG93Q29tcGFyZSIsIlByb2RMb2FkZXIiLCJhc3luY1JlcXVpcmVzIiwibWF0Y2hQYXRocyIsInNldExvYWRlciIsInNldEFwaVJ1bm5lciIsIl9fX2VtaXR0ZXIiLCJfX19sb2FkZXIiLCJwdWJsaWNMb2FkZXIiLCJuYXZpZ2F0aW9uSW5pdCIsImFwaVJ1bm5lckFzeW5jIiwiZmlsdGVyIiwiQm9vbGVhbiIsInJlcXVpcmUiLCJSb3V0ZUhhbmRsZXIiLCJiYXNldXJpIiwiYmFzZXBhdGgiLCJEYXRhQ29udGV4dCIsIkdhdHNieVJvb3QiLCJzdGF0aWNRdWVyeVJlc3VsdHMiLCJnZXRTdGF0aWNRdWVyeVJlc3VsdHMiLCJMb2NhdGlvbkhhbmRsZXIiLCJfX0JBU0VfUEFUSF9fIiwic3RyaXBQcmVmaXgiLCJlbmNvZGVVUkkiLCJwYWdlUGF0aCIsImJyb3dzZXJMb2MiLCJmaW5kTWF0Y2hQYXRoIiwibWF0Y2giLCJzZWFyY2giLCJtZXNzYWdlIiwiZXJyb3IiLCJjb25zb2xlIiwiRXJyb3IiLCJTaXRlUm9vdCIsImVsZW1lbnQiLCJyZXN1bHQiLCJwb3AiLCJBcHAiLCJvbkNsaWVudEVudHJ5UmFuUmVmIiwicGVyZm9ybWFuY2UiLCJtYXJrIiwicmVuZGVyZXIiLCJ1bmRlZmluZWQiLCJSZWFjdERPTSIsInJ1blJlbmRlciIsInJvb3RFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoeWRyYXRlIiwiZG9jIiwicmVhZHlTdGF0ZSIsImRvY3VtZW50RWxlbWVudCIsImRvU2Nyb2xsIiwiaGFuZGxlciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNPLEdBQU1BLG9CQUFtQixDQUFHLENBQ2pDQyxFQUFFLG1CQUQrQixDQUVqQ0MsS0FBSyxDQUFFLENBQ0xDLFFBQVEsV0FESCxDQUVMQyxHQUFHLENBQUUsQ0FGQSxDQUdMQyxLQUFLLENBQUUsQ0FIRixDQUlMQyxNQUFNLENBQUUsQ0FKSCxDQUtMQyxPQUFPLENBQUUsQ0FMSixDQU1M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QUFuQyxDQUE0QyxLQUE1QyxFQUVBUixTQUFTLEdBQ1YsQ0FMRCxDQU9BSSxHQUFHLENBQUNNLGdCQUFKLG9CQUF5Q0YsT0FBekMsQ0FBa0QsS0FBbEQsRUFDQWxKLE1BQU0sQ0FBQ29KLGdCQUFQLFFBQWdDRixPQUFoQyxDQUF5QyxLQUF6QyxFQUNELENBQ0YsQ0FsRkQsRUFtRkQsQ0FyTUQiLCJmaWxlIjoiMjg3MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgaXMgZXh0cmFjdGVkIHRvIHNlcGFyYXRlIG1vZHVsZSBiZWNhdXNlIGl0J3Mgc2hhcmVkXG4vLyBiZXR3ZWVuIGJyb3dzZXIgYW5kIFNTUiBjb2RlXG5leHBvcnQgY29uc3QgUm91dGVBbm5vdW5jZXJQcm9wcyA9IHtcbiAgaWQ6IGBnYXRzYnktYW5ub3VuY2VyYCxcbiAgc3R5bGU6IHtcbiAgICBwb3NpdGlvbjogYGFic29sdXRlYCxcbiAgICB0b3A6IDAsXG4gICAgd2lkdGg6IDEsXG4gICAgaGVpZ2h0OiAxLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgb3ZlcmZsb3c6IGBoaWRkZW5gLFxuICAgIGNsaXA6IGByZWN0KDAsIDAsIDAsIDApYCxcbiAgICB3aGl0ZVNwYWNlOiBgbm93cmFwYCxcbiAgICBib3JkZXI6IDAsXG4gIH0sXG4gIFwiYXJpYS1saXZlXCI6IGBhc3NlcnRpdmVgLFxuICBcImFyaWEtYXRvbWljXCI6IGB0cnVlYCxcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgbG9hZGVyLCB7IFBhZ2VSZXNvdXJjZVN0YXR1cyB9IGZyb20gXCIuL2xvYWRlclwiXG5pbXBvcnQgeyBtYXliZUdldEJyb3dzZXJSZWRpcmVjdCB9IGZyb20gXCIuL3JlZGlyZWN0LXV0aWxzLmpzXCJcbmltcG9ydCB7IGFwaVJ1bm5lciB9IGZyb20gXCIuL2FwaS1ydW5uZXItYnJvd3NlclwiXG5pbXBvcnQgZW1pdHRlciBmcm9tIFwiLi9lbWl0dGVyXCJcbmltcG9ydCB7IFJvdXRlQW5ub3VuY2VyUHJvcHMgfSBmcm9tIFwiLi9yb3V0ZS1hbm5vdW5jZXItcHJvcHNcIlxuaW1wb3J0IHsgbmF2aWdhdGUgYXMgcmVhY2hOYXZpZ2F0ZSB9IGZyb20gXCJAZ2F0c2J5anMvcmVhY2gtcm91dGVyXCJcbmltcG9ydCB7IGdsb2JhbEhpc3RvcnkgfSBmcm9tIFwiQGdhdHNieWpzL3JlYWNoLXJvdXRlci9saWIvaGlzdG9yeVwiXG5pbXBvcnQgeyBwYXJzZVBhdGggfSBmcm9tIFwiZ2F0c2J5LWxpbmtcIlxuXG5mdW5jdGlvbiBtYXliZVJlZGlyZWN0KHBhdGhuYW1lKSB7XG4gIGNvbnN0IHJlZGlyZWN0ID0gbWF5YmVHZXRCcm93c2VyUmVkaXJlY3QocGF0aG5hbWUpXG5cbiAgaWYgKHJlZGlyZWN0ICE9IG51bGwpIHtcbiAgICB3aW5kb3cuX19fcmVwbGFjZShyZWRpcmVjdC50b1BhdGgpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5jb25zdCBvblByZVJvdXRlVXBkYXRlID0gKGxvY2F0aW9uLCBwcmV2TG9jYXRpb24pID0+IHtcbiAgaWYgKCFtYXliZVJlZGlyZWN0KGxvY2F0aW9uLnBhdGhuYW1lKSkge1xuICAgIGFwaVJ1bm5lcihgb25QcmVSb3V0ZVVwZGF0ZWAsIHsgbG9jYXRpb24sIHByZXZMb2NhdGlvbiB9KVxuICB9XG59XG5cbmNvbnN0IG9uUm91dGVVcGRhdGUgPSAobG9jYXRpb24sIHByZXZMb2NhdGlvbikgPT4ge1xuICBpZiAoIW1heWJlUmVkaXJlY3QobG9jYXRpb24ucGF0aG5hbWUpKSB7XG4gICAgYXBpUnVubmVyKGBvblJvdXRlVXBkYXRlYCwgeyBsb2NhdGlvbiwgcHJldkxvY2F0aW9uIH0pXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuR0FUU0JZX0VYUEVSSU1FTlRBTF9RVUVSWV9PTl9ERU1BTkQgJiZcbiAgICAgIHByb2Nlc3MuZW52LkdBVFNCWV9RVUVSWV9PTl9ERU1BTkRfTE9BRElOR19JTkRJQ0FUT1IgPT09IGB0cnVlYFxuICAgICkge1xuICAgICAgZW1pdHRlci5lbWl0KGBvblJvdXRlVXBkYXRlYCwgeyBsb2NhdGlvbiwgcHJldkxvY2F0aW9uIH0pXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IG5hdmlnYXRlID0gKHRvLCBvcHRpb25zID0ge30pID0+IHtcbiAgLy8gU3VwcG9ydCBmb3J3YXJkL2JhY2t3YXJkIG5hdmlnYXRpb24gd2l0aCBudW1iZXJzXG4gIC8vIG5hdmlnYXRlKC0yKSAoanVtcHMgYmFjayAyIGhpc3Rvcnkgc3RlcHMpXG4gIC8vIG5hdmlnYXRlKDIpICAoanVtcHMgZm9yd2FyZCAyIGhpc3Rvcnkgc3RlcHMpXG4gIGlmICh0eXBlb2YgdG8gPT09IGBudW1iZXJgKSB7XG4gICAgZ2xvYmFsSGlzdG9yeS5uYXZpZ2F0ZSh0bylcbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCB7IHBhdGhuYW1lIH0gPSBwYXJzZVBhdGgodG8pXG4gIGNvbnN0IHJlZGlyZWN0ID0gbWF5YmVHZXRCcm93c2VyUmVkaXJlY3QocGF0aG5hbWUpXG5cbiAgLy8gSWYgd2UncmUgcmVkaXJlY3RpbmcsIGp1c3QgcmVwbGFjZSB0aGUgcGFzc2VkIGluIHBhdGhuYW1lXG4gIC8vIHRvIHRoZSBvbmUgd2Ugd2FudCB0byByZWRpcmVjdCB0by5cbiAgaWYgKHJlZGlyZWN0KSB7XG4gICAgdG8gPSByZWRpcmVjdC50b1BhdGhcbiAgICBwYXRobmFtZSA9IHBhcnNlUGF0aCh0bykucGF0aG5hbWVcbiAgfVxuXG4gIC8vIElmIHdlIGhhZCBhIHNlcnZpY2Ugd29ya2VyIHVwZGF0ZSwgbm8gbWF0dGVyIHRoZSBwYXRoLCByZWxvYWQgd2luZG93IGFuZFxuICAvLyByZXNldCB0aGUgcGF0aG5hbWUgd2hpdGVsaXN0XG4gIGlmICh3aW5kb3cuX19fc3dVcGRhdGVkKSB7XG4gICAgd2luZG93LmxvY2F0aW9uID0gcGF0aG5hbWVcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIFN0YXJ0IGEgdGltZXIgdG8gd2FpdCBmb3IgYSBzZWNvbmQgYmVmb3JlIHRyYW5zaXRpb25pbmcgYW5kIHNob3dpbmcgYVxuICAvLyBsb2FkZXIgaW4gY2FzZSByZXNvdXJjZXMgYXJlbid0IGFyb3VuZCB5ZXQuXG4gIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGVtaXR0ZXIuZW1pdChgb25EZWxheWVkTG9hZFBhZ2VSZXNvdXJjZXNgLCB7IHBhdGhuYW1lIH0pXG4gICAgYXBpUnVubmVyKGBvblJvdXRlVXBkYXRlRGVsYXllZGAsIHtcbiAgICAgIGxvY2F0aW9uOiB3aW5kb3cubG9jYXRpb24sXG4gICAgfSlcbiAgfSwgMTAwMClcblxuICBsb2FkZXIubG9hZFBhZ2UocGF0aG5hbWUpLnRoZW4ocGFnZVJlc291cmNlcyA9PiB7XG4gICAgLy8gSWYgbm8gcGFnZSByZXNvdXJjZXMsIHRoZW4gcmVmcmVzaCB0aGUgcGFnZVxuICAgIC8vIERvIHRoaXMsIHJhdGhlciB0aGFuIHNpbXBseSBgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpYCwgc28gdGhhdFxuICAgIC8vIHByZXNzaW5nIHRoZSBiYWNrL2ZvcndhcmQgYnV0dG9ucyB3b3JrIC0gb3RoZXJ3aXNlIHdoZW4gcHJlc3NpbmdcbiAgICAvLyBiYWNrLCB0aGUgYnJvd3NlciB3aWxsIGp1c3QgY2hhbmdlIHRoZSBVUkwgYW5kIGV4cGVjdCBKUyB0byBoYW5kbGVcbiAgICAvLyB0aGUgY2hhbmdlLCB3aGljaCB3b24ndCBhbHdheXMgd29yayBzaW5jZSBpdCBtaWdodCBub3QgYmUgYSBHYXRzYnlcbiAgICAvLyBwYWdlLlxuICAgIGlmICghcGFnZVJlc291cmNlcyB8fCBwYWdlUmVzb3VyY2VzLnN0YXR1cyA9PT0gUGFnZVJlc291cmNlU3RhdHVzLkVycm9yKSB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGBgLCBsb2NhdGlvbi5ocmVmKVxuICAgICAgd2luZG93LmxvY2F0aW9uID0gcGF0aG5hbWVcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbG9hZGVkIHBhZ2UgaGFzIGEgZGlmZmVyZW50IGNvbXBpbGF0aW9uIGhhc2ggdG8gdGhlXG4gICAgLy8gd2luZG93LCB0aGVuIGEgcmVidWlsZCBoYXMgb2NjdXJyZWQgb24gdGhlIHNlcnZlci4gUmVsb2FkLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gYHByb2R1Y3Rpb25gICYmIHBhZ2VSZXNvdXJjZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcGFnZVJlc291cmNlcy5wYWdlLndlYnBhY2tDb21waWxhdGlvbkhhc2ggIT09XG4gICAgICAgIHdpbmRvdy5fX193ZWJwYWNrQ29tcGlsYXRpb25IYXNoXG4gICAgICApIHtcbiAgICAgICAgLy8gUHVyZ2UgcGx1Z2luLW9mZmxpbmUgY2FjaGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGBzZXJ2aWNlV29ya2VyYCBpbiBuYXZpZ2F0b3IgJiZcbiAgICAgICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyICE9PSBudWxsICYmXG4gICAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlci5zdGF0ZSA9PT0gYGFjdGl2YXRlZGBcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBnYXRzYnlBcGk6IGBjbGVhclBhdGhSZXNvdXJjZXNgLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBwYXRobmFtZVxuICAgICAgfVxuICAgIH1cbiAgICByZWFjaE5hdmlnYXRlKHRvLCBvcHRpb25zKVxuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVNjcm9sbChwcmV2Um91dGVyUHJvcHMsIHsgbG9jYXRpb24gfSkge1xuICBjb25zdCB7IHBhdGhuYW1lLCBoYXNoIH0gPSBsb2NhdGlvblxuICBjb25zdCByZXN1bHRzID0gYXBpUnVubmVyKGBzaG91bGRVcGRhdGVTY3JvbGxgLCB7XG4gICAgcHJldlJvdXRlclByb3BzLFxuICAgIC8vIGBwYXRobmFtZWAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgcGF0aG5hbWUsXG4gICAgcm91dGVyUHJvcHM6IHsgbG9jYXRpb24gfSxcbiAgICBnZXRTYXZlZFNjcm9sbFBvc2l0aW9uOiBhcmdzID0+IFtcbiAgICAgIDAsXG4gICAgICAvLyBGSVhNRSB0aGlzIGlzIGFjdHVhbGx5IGEgYmlnIGNvZGUgc21lbGwsIHdlIHNob3VsZCBmaXggdGhpc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBiYWJlbC9uby1pbnZhbGlkLXRoaXNcbiAgICAgIHRoaXMuX3N0YXRlU3RvcmFnZS5yZWFkKGFyZ3MsIGFyZ3Mua2V5KSxcbiAgICBdLFxuICB9KVxuICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgLy8gVXNlIHRoZSBsYXRlc3QgcmVnaXN0ZXJlZCBzaG91bGRVcGRhdGVTY3JvbGwgcmVzdWx0LCB0aGlzIGFsbG93cyB1c2VycyB0byBvdmVycmlkZSBwbHVnaW4ncyBjb25maWd1cmF0aW9uXG4gICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2F0c2J5anMvZ2F0c2J5L2lzc3Vlcy8xMjAzOFxuICAgIHJldHVybiByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV1cbiAgfVxuXG4gIGlmIChwcmV2Um91dGVyUHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBsb2NhdGlvbjogeyBwYXRobmFtZTogb2xkUGF0aG5hbWUgfSxcbiAgICB9ID0gcHJldlJvdXRlclByb3BzXG4gICAgaWYgKG9sZFBhdGhuYW1lID09PSBwYXRobmFtZSkge1xuICAgICAgLy8gU2Nyb2xsIHRvIGVsZW1lbnQgaWYgaXQgZXhpc3RzLCBpZiBpdCBkb2Vzbid0LCBvciBubyBoYXNoIGlzIHByb3ZpZGVkLFxuICAgICAgLy8gc2Nyb2xsIHRvIHRvcC5cbiAgICAgIHJldHVybiBoYXNoID8gZGVjb2RlVVJJKGhhc2guc2xpY2UoMSkpIDogWzAsIDBdXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGluaXQoKSB7XG4gIC8vIFRoZSBcInNjcm9sbC1iZWhhdmlvclwiIHBhY2thZ2UgZXhwZWN0cyB0aGUgXCJhY3Rpb25cIiB0byBiZSBvbiB0aGUgbG9jYXRpb25cbiAgLy8gb2JqZWN0IHNvIGxldCdzIGNvcHkgaXQgb3Zlci5cbiAgZ2xvYmFsSGlzdG9yeS5saXN0ZW4oYXJncyA9PiB7XG4gICAgYXJncy5sb2NhdGlvbi5hY3Rpb24gPSBhcmdzLmFjdGlvblxuICB9KVxuXG4gIHdpbmRvdy5fX19wdXNoID0gdG8gPT4gbmF2aWdhdGUodG8sIHsgcmVwbGFjZTogZmFsc2UgfSlcbiAgd2luZG93Ll9fX3JlcGxhY2UgPSB0byA9PiBuYXZpZ2F0ZSh0bywgeyByZXBsYWNlOiB0cnVlIH0pXG4gIHdpbmRvdy5fX19uYXZpZ2F0ZSA9ICh0bywgb3B0aW9ucykgPT4gbmF2aWdhdGUodG8sIG9wdGlvbnMpXG5cbiAgLy8gQ2hlY2sgZm9yIGluaXRpYWwgcGFnZS1sb2FkIHJlZGlyZWN0XG4gIG1heWJlUmVkaXJlY3Qod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKVxufVxuXG5jbGFzcyBSb3V0ZUFubm91bmNlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgdGhpcy5hbm5vdW5jZW1lbnRSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGxldCBwYWdlTmFtZSA9IGBuZXcgcGFnZSBhdCAke3RoaXMucHJvcHMubG9jYXRpb24ucGF0aG5hbWV9YFxuICAgICAgaWYgKGRvY3VtZW50LnRpdGxlKSB7XG4gICAgICAgIHBhZ2VOYW1lID0gZG9jdW1lbnQudGl0bGVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhZ2VIZWFkaW5ncyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNnYXRzYnktZm9jdXMtd3JhcHBlciBoMWApXG4gICAgICBpZiAocGFnZUhlYWRpbmdzICYmIHBhZ2VIZWFkaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgcGFnZU5hbWUgPSBwYWdlSGVhZGluZ3NbMF0udGV4dENvbnRlbnRcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld0Fubm91bmNlbWVudCA9IGBOYXZpZ2F0ZWQgdG8gJHtwYWdlTmFtZX1gXG4gICAgICBpZiAodGhpcy5hbm5vdW5jZW1lbnRSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBvbGRBbm5vdW5jZW1lbnQgPSB0aGlzLmFubm91bmNlbWVudFJlZi5jdXJyZW50LmlubmVyVGV4dFxuICAgICAgICBpZiAob2xkQW5ub3VuY2VtZW50ICE9PSBuZXdBbm5vdW5jZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLmFubm91bmNlbWVudFJlZi5jdXJyZW50LmlubmVyVGV4dCA9IG5ld0Fubm91bmNlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gPGRpdiB7Li4uUm91dGVBbm5vdW5jZXJQcm9wc30gcmVmPXt0aGlzLmFubm91bmNlbWVudFJlZn0+PC9kaXY+XG4gIH1cbn1cblxuY29uc3QgY29tcGFyZUxvY2F0aW9uUHJvcHMgPSAocHJldkxvY2F0aW9uLCBuZXh0TG9jYXRpb24pID0+IHtcbiAgaWYgKHByZXZMb2NhdGlvbi5ocmVmICE9PSBuZXh0TG9jYXRpb24uaHJlZikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAocHJldkxvY2F0aW9uPy5zdGF0ZT8ua2V5ICE9PSBuZXh0TG9jYXRpb24/LnN0YXRlPy5rZXkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIEZpcmUgb24oUHJlKVJvdXRlVXBkYXRlIEFQSXNcbmNsYXNzIFJvdXRlVXBkYXRlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgb25QcmVSb3V0ZVVwZGF0ZShwcm9wcy5sb2NhdGlvbiwgbnVsbClcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIG9uUm91dGVVcGRhdGUodGhpcy5wcm9wcy5sb2NhdGlvbiwgbnVsbClcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAoY29tcGFyZUxvY2F0aW9uUHJvcHMocHJldlByb3BzLmxvY2F0aW9uLCB0aGlzLnByb3BzLmxvY2F0aW9uKSkge1xuICAgICAgb25QcmVSb3V0ZVVwZGF0ZSh0aGlzLnByb3BzLmxvY2F0aW9uLCBwcmV2UHJvcHMubG9jYXRpb24pXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAoY29tcGFyZUxvY2F0aW9uUHJvcHMocHJldlByb3BzLmxvY2F0aW9uLCB0aGlzLnByb3BzLmxvY2F0aW9uKSkge1xuICAgICAgb25Sb3V0ZVVwZGF0ZSh0aGlzLnByb3BzLmxvY2F0aW9uLCBwcmV2UHJvcHMubG9jYXRpb24pXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8Um91dGVBbm5vdW5jZXIgbG9jYXRpb249e2xvY2F0aW9ufSAvPlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApXG4gIH1cbn1cblxuUm91dGVVcGRhdGVzLnByb3BUeXBlcyA9IHtcbiAgbG9jYXRpb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbn1cblxuZXhwb3J0IHsgaW5pdCwgc2hvdWxkVXBkYXRlU2Nyb2xsLCBSb3V0ZVVwZGF0ZXMsIG1heWJlR2V0QnJvd3NlclJlZGlyZWN0IH1cbiIsIi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMoYSwgYikge1xuICBmb3IgKHZhciBpIGluIGEpIHtcbiAgICBpZiAoIShpIGluIGIpKSByZXR1cm4gdHJ1ZTtcbiAgfWZvciAodmFyIF9pIGluIGIpIHtcbiAgICBpZiAoYVtfaV0gIT09IGJbX2ldKSByZXR1cm4gdHJ1ZTtcbiAgfXJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIChpbnN0YW5jZSwgbmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgcmV0dXJuIHNoYWxsb3dEaWZmZXJzKGluc3RhbmNlLnByb3BzLCBuZXh0UHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgbG9hZGVyLCB7IFBhZ2VSZXNvdXJjZVN0YXR1cyB9IGZyb20gXCIuL2xvYWRlclwiXG5pbXBvcnQgc2hhbGxvd0NvbXBhcmUgZnJvbSBcInNoYWxsb3ctY29tcGFyZVwiXG5cbmNsYXNzIEVuc3VyZVJlc291cmNlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIoKVxuICAgIGNvbnN0IHsgbG9jYXRpb24sIHBhZ2VSZXNvdXJjZXMgfSA9IHByb3BzXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxvY2F0aW9uOiB7IC4uLmxvY2F0aW9uIH0sXG4gICAgICBwYWdlUmVzb3VyY2VzOlxuICAgICAgICBwYWdlUmVzb3VyY2VzIHx8XG4gICAgICAgIGxvYWRlci5sb2FkUGFnZVN5bmMobG9jYXRpb24ucGF0aG5hbWUsIHsgd2l0aEVycm9yRGV0YWlsczogdHJ1ZSB9KSxcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHsgbG9jYXRpb24gfSwgcHJldlN0YXRlKSB7XG4gICAgaWYgKHByZXZTdGF0ZS5sb2NhdGlvbi5ocmVmICE9PSBsb2NhdGlvbi5ocmVmKSB7XG4gICAgICBjb25zdCBwYWdlUmVzb3VyY2VzID0gbG9hZGVyLmxvYWRQYWdlU3luYyhsb2NhdGlvbi5wYXRobmFtZSwge1xuICAgICAgICB3aXRoRXJyb3JEZXRhaWxzOiB0cnVlLFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZVJlc291cmNlcyxcbiAgICAgICAgbG9jYXRpb246IHsgLi4ubG9jYXRpb24gfSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb246IHsgLi4ubG9jYXRpb24gfSxcbiAgICB9XG4gIH1cblxuICBsb2FkUmVzb3VyY2VzKHJhd1BhdGgpIHtcbiAgICBsb2FkZXIubG9hZFBhZ2UocmF3UGF0aCkudGhlbihwYWdlUmVzb3VyY2VzID0+IHtcbiAgICAgIGlmIChwYWdlUmVzb3VyY2VzICYmIHBhZ2VSZXNvdXJjZXMuc3RhdHVzICE9PSBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbG9jYXRpb246IHsgLi4ud2luZG93LmxvY2F0aW9uIH0sXG4gICAgICAgICAgcGFnZVJlc291cmNlcyxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgYGAsIGxvY2F0aW9uLmhyZWYpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHJhd1BhdGhcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gICAgLy8gQWx3YXlzIHJldHVybiBmYWxzZSBpZiB3ZSdyZSBtaXNzaW5nIHJlc291cmNlcy5cbiAgICBpZiAoIW5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzKSB7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMobmV4dFByb3BzLmxvY2F0aW9uLnBhdGhuYW1lKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgPT09IGBkZXZlbG9wYCAmJlxuICAgICAgbmV4dFN0YXRlLnBhZ2VSZXNvdXJjZXMuc3RhbGVcbiAgICApIHtcbiAgICAgIHRoaXMubG9hZFJlc291cmNlcyhuZXh0UHJvcHMubG9jYXRpb24ucGF0aG5hbWUpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY29tcG9uZW50IG9yIGpzb24gaGF2ZSBjaGFuZ2VkLlxuICAgIGlmICh0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMgIT09IG5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMuY29tcG9uZW50ICE9PSBuZXh0U3RhdGUucGFnZVJlc291cmNlcy5jb21wb25lbnRcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUucGFnZVJlc291cmNlcy5qc29uICE9PSBuZXh0U3RhdGUucGFnZVJlc291cmNlcy5qc29uKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBDaGVjayBpZiBsb2NhdGlvbiBoYXMgY2hhbmdlZCBvbiBhIHBhZ2UgdXNpbmcgaW50ZXJuYWwgcm91dGluZ1xuICAgIC8vIHZpYSBtYXRjaFBhdGggY29uZmlndXJhdGlvbi5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlLmxvY2F0aW9uLmtleSAhPT0gbmV4dFN0YXRlLmxvY2F0aW9uLmtleSAmJlxuICAgICAgbmV4dFN0YXRlLnBhZ2VSZXNvdXJjZXMucGFnZSAmJlxuICAgICAgKG5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzLnBhZ2UubWF0Y2hQYXRoIHx8XG4gICAgICAgIG5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzLnBhZ2UucGF0aClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzaGFsbG93Q29tcGFyZSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gYHByb2R1Y3Rpb25gICYmXG4gICAgICAoIXRoaXMuc3RhdGUucGFnZVJlc291cmNlcyB8fFxuICAgICAgICB0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMuc3RhdHVzID09PSBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IpXG4gICAgKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEVuc3VyZVJlc291cmNlcyB3YXMgbm90IGFibGUgdG8gZmluZCByZXNvdXJjZXMgZm9yIHBhdGg6IFwiJHt0aGlzLnByb3BzLmxvY2F0aW9uLnBhdGhuYW1lfVwiXG5UaGlzIHR5cGljYWxseSBtZWFucyB0aGF0IGFuIGlzc3VlIG9jY3VycmVkIGJ1aWxkaW5nIGNvbXBvbmVudHMgZm9yIHRoYXQgcGF0aC5cblJ1biBcXGBnYXRzYnkgY2xlYW5cXGAgdG8gcmVtb3ZlIGFueSBjYWNoZWQgZWxlbWVudHMuYFxuICAgICAgaWYgKHRoaXMuc3RhdGUucGFnZVJlc291cmNlcz8uZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKVxuICAgICAgICB0aHJvdyB0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMuZXJyb3JcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW4odGhpcy5zdGF0ZSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnN1cmVSZXNvdXJjZXNcbiIsImltcG9ydCB7IGFwaVJ1bm5lciwgYXBpUnVubmVyQXN5bmMgfSBmcm9tIFwiLi9hcGktcnVubmVyLWJyb3dzZXJcIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiXG5pbXBvcnQgeyBSb3V0ZXIsIG5hdmlnYXRlLCBMb2NhdGlvbiwgQmFzZUNvbnRleHQgfSBmcm9tIFwiQGdhdHNieWpzL3JlYWNoLXJvdXRlclwiXG5pbXBvcnQgeyBTY3JvbGxDb250ZXh0IH0gZnJvbSBcImdhdHNieS1yZWFjdC1yb3V0ZXItc2Nyb2xsXCJcbmltcG9ydCB7IFN0YXRpY1F1ZXJ5Q29udGV4dCB9IGZyb20gXCJnYXRzYnlcIlxuaW1wb3J0IHtcbiAgc2hvdWxkVXBkYXRlU2Nyb2xsLFxuICBpbml0IGFzIG5hdmlnYXRpb25Jbml0LFxuICBSb3V0ZVVwZGF0ZXMsXG59IGZyb20gXCIuL25hdmlnYXRpb25cIlxuaW1wb3J0IGVtaXR0ZXIgZnJvbSBcIi4vZW1pdHRlclwiXG5pbXBvcnQgUGFnZVJlbmRlcmVyIGZyb20gXCIuL3BhZ2UtcmVuZGVyZXJcIlxuaW1wb3J0IGFzeW5jUmVxdWlyZXMgZnJvbSBcIiR2aXJ0dWFsL2FzeW5jLXJlcXVpcmVzXCJcbmltcG9ydCB7XG4gIHNldExvYWRlcixcbiAgUHJvZExvYWRlcixcbiAgcHVibGljTG9hZGVyLFxuICBQYWdlUmVzb3VyY2VTdGF0dXMsXG4gIGdldFN0YXRpY1F1ZXJ5UmVzdWx0cyxcbn0gZnJvbSBcIi4vbG9hZGVyXCJcbmltcG9ydCBFbnN1cmVSZXNvdXJjZXMgZnJvbSBcIi4vZW5zdXJlLXJlc291cmNlc1wiXG5pbXBvcnQgc3RyaXBQcmVmaXggZnJvbSBcIi4vc3RyaXAtcHJlZml4XCJcblxuLy8gR2VuZXJhdGVkIGR1cmluZyBib290c3RyYXBcbmltcG9ydCBtYXRjaFBhdGhzIGZyb20gXCIkdmlydHVhbC9tYXRjaC1wYXRocy5qc29uXCJcblxuY29uc3QgbG9hZGVyID0gbmV3IFByb2RMb2FkZXIoYXN5bmNSZXF1aXJlcywgbWF0Y2hQYXRocylcbnNldExvYWRlcihsb2FkZXIpXG5sb2FkZXIuc2V0QXBpUnVubmVyKGFwaVJ1bm5lcilcblxud2luZG93LmFzeW5jUmVxdWlyZXMgPSBhc3luY1JlcXVpcmVzXG53aW5kb3cuX19fZW1pdHRlciA9IGVtaXR0ZXJcbndpbmRvdy5fX19sb2FkZXIgPSBwdWJsaWNMb2FkZXJcblxubmF2aWdhdGlvbkluaXQoKVxuXG5hcGlSdW5uZXJBc3luYyhgb25DbGllbnRFbnRyeWApLnRoZW4oKCkgPT4ge1xuICAvLyBMZXQgcGx1Z2lucyByZWdpc3RlciBhIHNlcnZpY2Ugd29ya2VyLiBUaGUgcGx1Z2luIGp1c3QgbmVlZHNcbiAgLy8gdG8gcmV0dXJuIHRydWUuXG4gIGlmIChhcGlSdW5uZXIoYHJlZ2lzdGVyU2VydmljZVdvcmtlcmApLmZpbHRlcihCb29sZWFuKS5sZW5ndGggPiAwKSB7XG4gICAgcmVxdWlyZShgLi9yZWdpc3Rlci1zZXJ2aWNlLXdvcmtlcmApXG4gIH1cblxuICAvLyBJbiBnYXRzYnkgdjIgaWYgUm91dGVyIGlzIHVzZWQgaW4gcGFnZSB1c2luZyBtYXRjaFBhdGhzXG4gIC8vIHBhdGhzIG5lZWQgdG8gY29udGFpbiBmdWxsIHBhdGguXG4gIC8vIEZvciBleGFtcGxlOlxuICAvLyAgIC0gcGFnZSBoYXZlIGAvYXBwLypgIG1hdGNoUGF0aFxuICAvLyAgIC0gaW5zaWRlIHRlbXBsYXRlIHVzZXIgbmVlZHMgdG8gdXNlIGAvYXBwL3h5emAgYXMgcGF0aFxuICAvLyBSZXNldHRpbmcgYGJhc2VwYXRoYC9gYmFzZXVyaWAga2VlcHMgY3VycmVudCBiZWhhdmlvdXJcbiAgLy8gdG8gbm90IGludHJvZHVjZSBicmVha2luZyBjaGFuZ2UuXG4gIC8vIFJlbW92ZSB0aGlzIGluIHYzXG4gIGNvbnN0IFJvdXRlSGFuZGxlciA9IHByb3BzID0+IChcbiAgICA8QmFzZUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIGJhc2V1cmk6IGAvYCxcbiAgICAgICAgYmFzZXBhdGg6IGAvYCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPFBhZ2VSZW5kZXJlciB7Li4ucHJvcHN9IC8+XG4gICAgPC9CYXNlQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxuXG4gIGNvbnN0IERhdGFDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7fSlcblxuICBjbGFzcyBHYXRzYnlSb290IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TG9jYXRpb24+XG4gICAgICAgICAgeyh7IGxvY2F0aW9uIH0pID0+IChcbiAgICAgICAgICAgIDxFbnN1cmVSZXNvdXJjZXMgbG9jYXRpb249e2xvY2F0aW9ufT5cbiAgICAgICAgICAgICAgeyh7IHBhZ2VSZXNvdXJjZXMsIGxvY2F0aW9uIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0aWNRdWVyeVJlc3VsdHMgPSBnZXRTdGF0aWNRdWVyeVJlc3VsdHMoKVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8U3RhdGljUXVlcnlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdGF0aWNRdWVyeVJlc3VsdHN9PlxuICAgICAgICAgICAgICAgICAgICA8RGF0YUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgcGFnZVJlc291cmNlcywgbG9jYXRpb24gfX0+XG4gICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L0RhdGFDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgPC9TdGF0aWNRdWVyeUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9FbnN1cmVSZXNvdXJjZXM+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9Mb2NhdGlvbj5cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjbGFzcyBMb2NhdGlvbkhhbmRsZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEYXRhQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICB7KHsgcGFnZVJlc291cmNlcywgbG9jYXRpb24gfSkgPT4gKFxuICAgICAgICAgICAgPFJvdXRlVXBkYXRlcyBsb2NhdGlvbj17bG9jYXRpb259PlxuICAgICAgICAgICAgICA8U2Nyb2xsQ29udGV4dFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uPXtsb2NhdGlvbn1cbiAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGVTY3JvbGw9e3Nob3VsZFVwZGF0ZVNjcm9sbH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxSb3V0ZXJcbiAgICAgICAgICAgICAgICAgIGJhc2VwYXRoPXtfX0JBU0VfUEFUSF9ffVxuICAgICAgICAgICAgICAgICAgbG9jYXRpb249e2xvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgaWQ9XCJnYXRzYnktZm9jdXMtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlSGFuZGxlclxuICAgICAgICAgICAgICAgICAgICBwYXRoPXtcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVzb3VyY2VzLnBhZ2UucGF0aCA9PT0gYC80MDQuaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3RyaXBQcmVmaXgobG9jYXRpb24ucGF0aG5hbWUsIF9fQkFTRV9QQVRIX18pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGVuY29kZVVSSShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVzb3VyY2VzLnBhZ2UubWF0Y2hQYXRoIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVzb3VyY2VzLnBhZ2UucGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uPXtsb2NhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlc291cmNlcz17cGFnZVJlc291cmNlc31cbiAgICAgICAgICAgICAgICAgICAgey4uLnBhZ2VSZXNvdXJjZXMuanNvbn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZXI+XG4gICAgICAgICAgICAgIDwvU2Nyb2xsQ29udGV4dD5cbiAgICAgICAgICAgIDwvUm91dGVVcGRhdGVzPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRGF0YUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgeyBwYWdlUGF0aCwgbG9jYXRpb246IGJyb3dzZXJMb2MgfSA9IHdpbmRvd1xuXG4gIC8vIEV4cGxpY2l0bHkgY2FsbCBuYXZpZ2F0ZSBpZiB0aGUgY2Fub25pY2FsIHBhdGggKHdpbmRvdy5wYWdlUGF0aClcbiAgLy8gaXMgZGlmZmVyZW50IHRvIHRoZSBicm93c2VyIHBhdGggKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSkuIEJ1dFxuICAvLyBvbmx5IGlmIE5PTkUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQ6XG4gIC8vXG4gIC8vIC0gVGhlIHVybCBtYXRjaGVzIGEgY2xpZW50IHNpZGUgcm91dGUgKHBhZ2UubWF0Y2hQYXRoKVxuICAvLyAtIGl0J3MgYSA0MDQgcGFnZVxuICAvLyAtIGl0J3MgdGhlIG9mZmxpbmUgcGx1Z2luIHNoZWxsICgvb2ZmbGluZS1wbHVnaW4tYXBwLXNoZWxsLWZhbGxiYWNrLylcbiAgaWYgKFxuICAgIHBhZ2VQYXRoICYmXG4gICAgX19CQVNFX1BBVEhfXyArIHBhZ2VQYXRoICE9PSBicm93c2VyTG9jLnBhdGhuYW1lICYmXG4gICAgIShcbiAgICAgIGxvYWRlci5maW5kTWF0Y2hQYXRoKHN0cmlwUHJlZml4KGJyb3dzZXJMb2MucGF0aG5hbWUsIF9fQkFTRV9QQVRIX18pKSB8fFxuICAgICAgcGFnZVBhdGggPT09IGAvNDA0Lmh0bWxgIHx8XG4gICAgICBwYWdlUGF0aC5tYXRjaCgvXlxcLzQwNFxcLz8kLykgfHxcbiAgICAgIHBhZ2VQYXRoLm1hdGNoKC9eXFwvb2ZmbGluZS1wbHVnaW4tYXBwLXNoZWxsLWZhbGxiYWNrXFwvPyQvKVxuICAgIClcbiAgKSB7XG4gICAgbmF2aWdhdGUoX19CQVNFX1BBVEhfXyArIHBhZ2VQYXRoICsgYnJvd3NlckxvYy5zZWFyY2ggKyBicm93c2VyTG9jLmhhc2gsIHtcbiAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpY0xvYWRlci5sb2FkUGFnZShicm93c2VyTG9jLnBhdGhuYW1lKS50aGVuKHBhZ2UgPT4ge1xuICAgIGlmICghcGFnZSB8fCBwYWdlLnN0YXR1cyA9PT0gUGFnZVJlc291cmNlU3RhdHVzLkVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYHBhZ2UgcmVzb3VyY2VzIGZvciAke2Jyb3dzZXJMb2MucGF0aG5hbWV9IG5vdCBmb3VuZC4gTm90IHJlbmRlcmluZyBSZWFjdGBcblxuICAgICAgLy8gaWYgdGhlIGNodW5rIHRocm93cyBhbiBlcnJvciB3ZSB3YW50IHRvIGNhcHR1cmUgdGhlIHJlYWwgZXJyb3JcbiAgICAgIC8vIFRoaXMgc2hvdWxkIGhlbHAgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZ2F0c2J5anMvZ2F0c2J5L2lzc3Vlcy8xOTYxOFxuICAgICAgaWYgKHBhZ2UgJiYgcGFnZS5lcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpXG4gICAgICAgIHRocm93IHBhZ2UuZXJyb3JcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG4gICAgfVxuXG4gICAgd2luZG93Ll9fX3dlYnBhY2tDb21waWxhdGlvbkhhc2ggPSBwYWdlLnBhZ2Uud2VicGFja0NvbXBpbGF0aW9uSGFzaFxuXG4gICAgY29uc3QgU2l0ZVJvb3QgPSBhcGlSdW5uZXIoXG4gICAgICBgd3JhcFJvb3RFbGVtZW50YCxcbiAgICAgIHsgZWxlbWVudDogPExvY2F0aW9uSGFuZGxlciAvPiB9LFxuICAgICAgPExvY2F0aW9uSGFuZGxlciAvPixcbiAgICAgICh7IHJlc3VsdCB9KSA9PiB7XG4gICAgICAgIHJldHVybiB7IGVsZW1lbnQ6IHJlc3VsdCB9XG4gICAgICB9XG4gICAgKS5wb3AoKVxuXG4gICAgY29uc3QgQXBwID0gZnVuY3Rpb24gQXBwKCkge1xuICAgICAgY29uc3Qgb25DbGllbnRFbnRyeVJhblJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSlcblxuICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFvbkNsaWVudEVudHJ5UmFuUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkNsaWVudEVudHJ5UmFuUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgcGVyZm9ybWFuY2UubWFyayhgb25Jbml0aWFsQ2xpZW50UmVuZGVyYClcblxuICAgICAgICAgIGFwaVJ1bm5lcihgb25Jbml0aWFsQ2xpZW50UmVuZGVyYClcbiAgICAgICAgfVxuICAgICAgfSwgW10pXG5cbiAgICAgIHJldHVybiA8R2F0c2J5Um9vdD57U2l0ZVJvb3R9PC9HYXRzYnlSb290PlxuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVyID0gYXBpUnVubmVyKFxuICAgICAgYHJlcGxhY2VIeWRyYXRlRnVuY3Rpb25gLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUmVhY3RET00uY3JlYXRlUm9vdCA/IFJlYWN0RE9NLmNyZWF0ZVJvb3QgOiBSZWFjdERPTS5oeWRyYXRlXG4gICAgKVswXVxuXG4gICAgZnVuY3Rpb24gcnVuUmVuZGVyKCkge1xuICAgICAgY29uc3Qgcm9vdEVsZW1lbnQgPVxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBgdW5kZWZpbmVkYFxuICAgICAgICAgID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYF9fX2dhdHNieWApXG4gICAgICAgICAgOiBudWxsXG5cbiAgICAgIGlmIChyZW5kZXJlciA9PT0gUmVhY3RET00uY3JlYXRlUm9vdCkge1xuICAgICAgICByZW5kZXJlcihyb290RWxlbWVudCwge1xuICAgICAgICAgIGh5ZHJhdGU6IHRydWUsXG4gICAgICAgIH0pLnJlbmRlcig8QXBwIC8+KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyZXIoPEFwcCAvPiwgcm9vdEVsZW1lbnQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hZHJvYmJ5L3plcHRvL2Jsb2IvYjVlZDhkNjA3ZjY3NzI0Nzg4ZWM5ZmY0OTJiZTI5N2Y2NGQ0N2RmYy9zcmMvemVwdG8uanMjTDQzOS1MNDUwXG4gICAgLy8gVE9ETyByZW1vdmUgSUUgMTAgc3VwcG9ydFxuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50XG4gICAgaWYgKFxuICAgICAgZG9jLnJlYWR5U3RhdGUgPT09IGBjb21wbGV0ZWAgfHxcbiAgICAgIChkb2MucmVhZHlTdGF0ZSAhPT0gYGxvYWRpbmdgICYmICFkb2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKVxuICAgICkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJ1blJlbmRlcigpXG4gICAgICB9LCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihgRE9NQ29udGVudExvYWRlZGAsIGhhbmRsZXIsIGZhbHNlKVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgbG9hZGAsIGhhbmRsZXIsIGZhbHNlKVxuXG4gICAgICAgIHJ1blJlbmRlcigpXG4gICAgICB9XG5cbiAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKGBET01Db250ZW50TG9hZGVkYCwgaGFuZGxlciwgZmFsc2UpXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsIGhhbmRsZXIsIGZhbHNlKVxuICAgIH1cbiAgfSlcbn0pXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2871\n')},6947:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7294);\n/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8741);\n/* harmony import */ var _page_renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(804);\nvar ProdPageRenderer=function ProdPageRenderer(_ref){var location=_ref.location;var pageResources=_loader__WEBPACK_IMPORTED_MODULE_1__/* .default.loadPageSync */ .ZP.loadPageSync(location.pathname);if(!pageResources){return null;}return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_page_renderer__WEBPACK_IMPORTED_MODULE_2__/* .default */ .Z,Object.assign({location:location,pageResources:pageResources},pageResources.json));};/* harmony default export */ __webpack_exports__["default"] = (ProdPageRenderer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wdWJsaWMtcGFnZS1yZW5kZXJlci1wcm9kLmpzP2FmMzkiXSwibmFtZXMiOlsiUHJvZFBhZ2VSZW5kZXJlciIsImxvY2F0aW9uIiwicGFnZVJlc291cmNlcyIsImxvYWRlciIsInBhdGhuYW1lIiwiUmVhY3QiLCJJbnRlcm5hbFBhZ2VSZW5kZXJlciIsImpzb24iXSwibWFwcGluZ3MiOiI7Ozs7QUFNQSxHQUFNQSxpQkFBZ0IsQ0FBRyxRQUFuQkEsaUJBQW1CLE1BQWtCLElBQWZDLFNBQWUsTUFBZkEsUUFBZSxDQUN6QyxHQUFNQyxjQUFhLENBQUdDLGdGQUFBLENBQW9CRixRQUFRLENBQUNHLFFBQTdCLENBQXRCLENBQ0EsR0FBSSxDQUFDRixhQUFMLENBQW9CLENBQ2xCLE1BQU8sS0FBUCxDQUNELENBQ0QsbUJBQU9HLGdEQUFBLENBQW9CQyw0REFBcEIsZ0JBQ0xMLFFBQVEsQ0FBUkEsUUFESyxDQUVMQyxhQUFhLENBQWJBLGFBRkssRUFHRkEsYUFBYSxDQUFDSyxJQUhaLEVBQVAsQ0FLRCxDQVZELENBa0JBLCtEQUFlUCxnQkFBZiIsImZpbGUiOiI2OTQ3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuaW1wb3J0IGxvYWRlciBmcm9tIFwiLi9sb2FkZXJcIlxuaW1wb3J0IEludGVybmFsUGFnZVJlbmRlcmVyIGZyb20gXCIuL3BhZ2UtcmVuZGVyZXJcIlxuXG5jb25zdCBQcm9kUGFnZVJlbmRlcmVyID0gKHsgbG9jYXRpb24gfSkgPT4ge1xuICBjb25zdCBwYWdlUmVzb3VyY2VzID0gbG9hZGVyLmxvYWRQYWdlU3luYyhsb2NhdGlvbi5wYXRobmFtZSlcbiAgaWYgKCFwYWdlUmVzb3VyY2VzKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbFBhZ2VSZW5kZXJlciwge1xuICAgIGxvY2F0aW9uLFxuICAgIHBhZ2VSZXNvdXJjZXMsXG4gICAgLi4ucGFnZVJlc291cmNlcy5qc29uLFxuICB9KVxufVxuXG5Qcm9kUGFnZVJlbmRlcmVyLnByb3BUeXBlcyA9IHtcbiAgbG9jYXRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGF0aG5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvZFBhZ2VSZW5kZXJlclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6947\n')},861:function(module,__unused_webpack_exports,__webpack_require__){eval("var preferDefault=function preferDefault(m){return m&&m.default||m;};if(false){}else if(true){module.exports=preferDefault(__webpack_require__(6947));}else{}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wdWJsaWMtcGFnZS1yZW5kZXJlci5qcz85NzBkIl0sIm5hbWVzIjpbInByZWZlckRlZmF1bHQiLCJtIiwiZGVmYXVsdCIsInByb2Nlc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSJdLCJtYXBwaW5ncyI6IkFBQUEsR0FBTUEsY0FBYSxDQUFHLFFBQWhCQSxjQUFnQixDQUFBQyxDQUFDLFFBQUtBLEVBQUMsRUFBSUEsQ0FBQyxDQUFDQyxPQUFSLEVBQW9CRCxDQUF4QixFQUF2QixDQUVBLEdBQUlFLEtBQUosQ0FBMkMsRUFBM0MsSUFFTyxJQUFJQSxJQUFKLENBQW9ELENBQ3pEQyxNQUFNLENBQUNDLE9BQVAsQ0FBaUJMLGFBQWEsQ0FBQ00sbUJBQU8sQ0FBQyxLQUFULENBQTlCLENBQ0QsQ0FGTSxJQUVBIiwiZmlsZSI6Ijg2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHByZWZlckRlZmF1bHQgPSBtID0+IChtICYmIG0uZGVmYXVsdCkgfHwgbVxuXG5pZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgPT09IGBkZXZlbG9wYCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByZWZlckRlZmF1bHQocmVxdWlyZShgLi9wdWJsaWMtcGFnZS1yZW5kZXJlci1kZXZgKSlcbn0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgPT09IGBidWlsZC1qYXZhc2NyaXB0YCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByZWZlckRlZmF1bHQocmVxdWlyZShgLi9wdWJsaWMtcGFnZS1yZW5kZXJlci1wcm9kYCkpXG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9ICgpID0+IG51bGxcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///861\n")},3639:function(__unused_webpack_module,exports){eval("exports.O=function(Component){return Component;};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yZWFjdC1saWZlY3ljbGVzLWNvbXBhdC5qcz9mNzg1Il0sIm5hbWVzIjpbImV4cG9ydHMiLCJDb21wb25lbnQiXSwibWFwcGluZ3MiOiJBQUFBQSxTQUFBLENBQW1CLFNBQUFDLFNBQVMsUUFBSUEsVUFBSixFQUE1QiIsImZpbGUiOiIzNjM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5wb2x5ZmlsbCA9IENvbXBvbmVudCA9PiBDb21wb25lbnRcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3639\n")},5166:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "J": function() { return /* binding */ maybeGetBrowserRedirect; }\n});\n\n;// CONCATENATED MODULE: ./.cache/redirects.json\nvar redirects_namespaceObject = [];\n;// CONCATENATED MODULE: ./.cache/redirect-utils.js\n// Convert to a map for faster lookup in maybeRedirect()\nvar redirectMap=new Map();var redirectIgnoreCaseMap=new Map();redirects_namespaceObject.forEach(function(redirect){if(redirect.ignoreCase){redirectIgnoreCaseMap.set(redirect.fromPath,redirect);}else{redirectMap.set(redirect.fromPath,redirect);}});function maybeGetBrowserRedirect(pathname){var redirect=redirectMap.get(pathname);if(!redirect){redirect=redirectIgnoreCaseMap.get(pathname.toLowerCase());}return redirect;}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yZWRpcmVjdC11dGlscy5qcz84OWI4Il0sIm5hbWVzIjpbInJlZGlyZWN0TWFwIiwiTWFwIiwicmVkaXJlY3RJZ25vcmVDYXNlTWFwIiwicmVkaXJlY3RzIiwicmVkaXJlY3QiLCJpZ25vcmVDYXNlIiwic2V0IiwiZnJvbVBhdGgiLCJtYXliZUdldEJyb3dzZXJSZWRpcmVjdCIsInBhdGhuYW1lIiwiZ2V0IiwidG9Mb3dlckNhc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBO0FBRUEsR0FBTUEsWUFBVyxDQUFHLEdBQUlDLElBQUosRUFBcEIsQ0FDQSxHQUFNQyxzQkFBcUIsQ0FBRyxHQUFJRCxJQUFKLEVBQTlCLENBRUFFLGlDQUFBLENBQWtCLFNBQUFDLFFBQVEsQ0FBSSxDQUM1QixHQUFJQSxRQUFRLENBQUNDLFVBQWIsQ0FBeUIsQ0FDdkJILHFCQUFxQixDQUFDSSxHQUF0QixDQUEwQkYsUUFBUSxDQUFDRyxRQUFuQyxDQUE2Q0gsUUFBN0MsRUFDRCxDQUZELElBRU8sQ0FDTEosV0FBVyxDQUFDTSxHQUFaLENBQWdCRixRQUFRLENBQUNHLFFBQXpCLENBQW1DSCxRQUFuQyxFQUNELENBQ0YsQ0FORCxFQVFPLFFBQVNJLHdCQUFULENBQWlDQyxRQUFqQyxDQUEyQyxDQUNoRCxHQUFJTCxTQUFRLENBQUdKLFdBQVcsQ0FBQ1UsR0FBWixDQUFnQkQsUUFBaEIsQ0FBZixDQUNBLEdBQUksQ0FBQ0wsUUFBTCxDQUFlLENBQ2JBLFFBQVEsQ0FBR0YscUJBQXFCLENBQUNRLEdBQXRCLENBQTBCRCxRQUFRLENBQUNFLFdBQVQsRUFBMUIsQ0FBWCxDQUNELENBQ0QsTUFBT1AsU0FBUCxDQUNEIiwiZmlsZSI6IjUxNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVkaXJlY3RzIGZyb20gXCIuL3JlZGlyZWN0cy5qc29uXCJcblxuLy8gQ29udmVydCB0byBhIG1hcCBmb3IgZmFzdGVyIGxvb2t1cCBpbiBtYXliZVJlZGlyZWN0KClcblxuY29uc3QgcmVkaXJlY3RNYXAgPSBuZXcgTWFwKClcbmNvbnN0IHJlZGlyZWN0SWdub3JlQ2FzZU1hcCA9IG5ldyBNYXAoKVxuXG5yZWRpcmVjdHMuZm9yRWFjaChyZWRpcmVjdCA9PiB7XG4gIGlmIChyZWRpcmVjdC5pZ25vcmVDYXNlKSB7XG4gICAgcmVkaXJlY3RJZ25vcmVDYXNlTWFwLnNldChyZWRpcmVjdC5mcm9tUGF0aCwgcmVkaXJlY3QpXG4gIH0gZWxzZSB7XG4gICAgcmVkaXJlY3RNYXAuc2V0KHJlZGlyZWN0LmZyb21QYXRoLCByZWRpcmVjdClcbiAgfVxufSlcblxuZXhwb3J0IGZ1bmN0aW9uIG1heWJlR2V0QnJvd3NlclJlZGlyZWN0KHBhdGhuYW1lKSB7XG4gIGxldCByZWRpcmVjdCA9IHJlZGlyZWN0TWFwLmdldChwYXRobmFtZSlcbiAgaWYgKCFyZWRpcmVjdCkge1xuICAgIHJlZGlyZWN0ID0gcmVkaXJlY3RJZ25vcmVDYXNlTWFwLmdldChwYXRobmFtZS50b0xvd2VyQ2FzZSgpKVxuICB9XG4gIHJldHVybiByZWRpcmVjdFxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5166\n')},154:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _api_runner_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7343);\nif(window.location.protocol!=="https:"&&window.location.hostname!=="localhost"){console.error("Service workers can only be used over HTTPS, or on localhost for development");}else if("serviceWorker"in navigator){navigator.serviceWorker.register("/justice40-tool/842-69a4eec"+"/sw.js").then(function(reg){reg.addEventListener("updatefound",function(){(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerUpdateFound",{serviceWorker:reg});// The updatefound event implies that reg.installing is set; see\n// https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\nvar installingWorker=reg.installing;console.log("installingWorker",installingWorker);installingWorker.addEventListener("statechange",function(){switch(installingWorker.state){case"installed":if(navigator.serviceWorker.controller){// At this point, the old content will have been purged and the fresh content will\n// have been added to the cache.\n// We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\nwindow.___swUpdated=true;// We call the onServiceWorkerUpdateReady API so users can show update prompts.\n(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerUpdateReady",{serviceWorker:reg});// If resources failed for the current page, reload.\nif(window.___failedResources){console.log("resources failed, SW updated - reloading");window.location.reload();}}else{// At this point, everything has been precached.\n// It\'s the perfect time to display a "Content is cached for offline use." message.\nconsole.log("Content is now available offline!");// Post to service worker that install is complete.\n// Delay to allow time for the event listener to be added --\n// otherwise fetch is called too soon and resources aren\'t cached.\n(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerInstalled",{serviceWorker:reg});}break;case"redundant":console.error("The installing service worker became redundant.");(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerRedundant",{serviceWorker:reg});break;case"activated":(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerActive",{serviceWorker:reg});break;}});});}).catch(function(e){console.error("Error during service worker registration:",e);});}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yZWdpc3Rlci1zZXJ2aWNlLXdvcmtlci5qcz8zNTI1Il0sIm5hbWVzIjpbIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJob3N0bmFtZSIsImNvbnNvbGUiLCJlcnJvciIsIm5hdmlnYXRvciIsInNlcnZpY2VXb3JrZXIiLCJyZWdpc3RlciIsIl9fQkFTRV9QQVRIX18iLCJ0aGVuIiwicmVnIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFwaVJ1bm5lciIsImluc3RhbGxpbmdXb3JrZXIiLCJpbnN0YWxsaW5nIiwibG9nIiwic3RhdGUiLCJjb250cm9sbGVyIiwiX19fc3dVcGRhdGVkIiwiX19fZmFpbGVkUmVzb3VyY2VzIiwicmVsb2FkIiwiY2F0Y2giLCJlIl0sIm1hcHBpbmdzIjoiOztBQUVBLEdBQ0VBLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsUUFBaEIsYUFDQUYsTUFBTSxDQUFDQyxRQUFQLENBQWdCRSxRQUFoQixjQUZGLENBR0UsQ0FDQUMsT0FBTyxDQUFDQyxLQUFSLGlGQUdELENBUEQsSUFPTyxJQUFJLGlCQUFtQkMsVUFBdkIsQ0FBa0MsQ0FDdkNBLFNBQVMsQ0FBQ0MsYUFBVixDQUNHQyxRQURILENBQ2VDLDZCQURmLFdBRUdDLElBRkgsQ0FFUSxTQUFVQyxHQUFWLENBQWUsQ0FDbkJBLEdBQUcsQ0FBQ0MsZ0JBQUosZUFBb0MsVUFBTSxDQUN4Q0MsdUVBQVMsOEJBQStCLENBQUVOLGFBQWEsQ0FBRUksR0FBakIsQ0FBL0IsQ0FBVCxDQUNBO0FBQ0E7QUFDQSxHQUFNRyxpQkFBZ0IsQ0FBR0gsR0FBRyxDQUFDSSxVQUE3QixDQUNBWCxPQUFPLENBQUNZLEdBQVIsb0JBQWdDRixnQkFBaEMsRUFDQUEsZ0JBQWdCLENBQUNGLGdCQUFqQixlQUFpRCxVQUFNLENBQ3JELE9BQVFFLGdCQUFnQixDQUFDRyxLQUF6QixFQUNFLGdCQUNFLEdBQUlYLFNBQVMsQ0FBQ0MsYUFBVixDQUF3QlcsVUFBNUIsQ0FBd0MsQ0FDdEM7QUFDQTtBQUVBO0FBQ0FsQixNQUFNLENBQUNtQixZQUFQLENBQXNCLElBQXRCLENBQ0E7QUFDQU4sdUVBQVMsOEJBQStCLENBQUVOLGFBQWEsQ0FBRUksR0FBakIsQ0FBL0IsQ0FBVCxDQUVBO0FBQ0EsR0FBSVgsTUFBTSxDQUFDb0Isa0JBQVgsQ0FBK0IsQ0FDN0JoQixPQUFPLENBQUNZLEdBQVIsNkNBQ0FoQixNQUFNLENBQUNDLFFBQVAsQ0FBZ0JvQixNQUFoQixHQUNELENBQ0YsQ0FkRCxJQWNPLENBQ0w7QUFDQTtBQUNBakIsT0FBTyxDQUFDWSxHQUFSLHNDQUVBO0FBQ0E7QUFDQTtBQUNBSCx1RUFBUyw0QkFBNkIsQ0FBRU4sYUFBYSxDQUFFSSxHQUFqQixDQUE3QixDQUFULENBQ0QsQ0FDRCxNQUVGLGdCQUNFUCxPQUFPLENBQUNDLEtBQVIsb0RBQ0FRLHVFQUFTLDRCQUE2QixDQUFFTixhQUFhLENBQUVJLEdBQWpCLENBQTdCLENBQVQsQ0FDQSxNQUVGLGdCQUNFRSx1RUFBUyx5QkFBMEIsQ0FBRU4sYUFBYSxDQUFFSSxHQUFqQixDQUExQixDQUFULENBQ0EsTUFuQ0osQ0FxQ0QsQ0F0Q0QsRUF1Q0QsQ0E3Q0QsRUE4Q0QsQ0FqREgsRUFrREdXLEtBbERILENBa0RTLFNBQVVDLENBQVYsQ0FBYSxDQUNsQm5CLE9BQU8sQ0FBQ0MsS0FBUiw2Q0FBMkRrQixDQUEzRCxFQUNELENBcERILEVBcUREIiwiZmlsZSI6IjE1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwaVJ1bm5lciB9IGZyb20gXCIuL2FwaS1ydW5uZXItYnJvd3NlclwiXG5cbmlmIChcbiAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICE9PSBgaHR0cHM6YCAmJlxuICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgIT09IGBsb2NhbGhvc3RgXG4pIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICBgU2VydmljZSB3b3JrZXJzIGNhbiBvbmx5IGJlIHVzZWQgb3ZlciBIVFRQUywgb3Igb24gbG9jYWxob3N0IGZvciBkZXZlbG9wbWVudGBcbiAgKVxufSBlbHNlIGlmIChgc2VydmljZVdvcmtlcmAgaW4gbmF2aWdhdG9yKSB7XG4gIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyXG4gICAgLnJlZ2lzdGVyKGAke19fQkFTRV9QQVRIX199L3N3LmpzYClcbiAgICAudGhlbihmdW5jdGlvbiAocmVnKSB7XG4gICAgICByZWcuYWRkRXZlbnRMaXN0ZW5lcihgdXBkYXRlZm91bmRgLCAoKSA9PiB7XG4gICAgICAgIGFwaVJ1bm5lcihgb25TZXJ2aWNlV29ya2VyVXBkYXRlRm91bmRgLCB7IHNlcnZpY2VXb3JrZXI6IHJlZyB9KVxuICAgICAgICAvLyBUaGUgdXBkYXRlZm91bmQgZXZlbnQgaW1wbGllcyB0aGF0IHJlZy5pbnN0YWxsaW5nIGlzIHNldDsgc2VlXG4gICAgICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNzZXJ2aWNlLXdvcmtlci1yZWdpc3RyYXRpb24tdXBkYXRlZm91bmQtZXZlbnRcbiAgICAgICAgY29uc3QgaW5zdGFsbGluZ1dvcmtlciA9IHJlZy5pbnN0YWxsaW5nXG4gICAgICAgIGNvbnNvbGUubG9nKGBpbnN0YWxsaW5nV29ya2VyYCwgaW5zdGFsbGluZ1dvcmtlcilcbiAgICAgICAgaW5zdGFsbGluZ1dvcmtlci5hZGRFdmVudExpc3RlbmVyKGBzdGF0ZWNoYW5nZWAsICgpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGluc3RhbGxpbmdXb3JrZXIuc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgYGluc3RhbGxlZGA6XG4gICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIG9sZCBjb250ZW50IHdpbGwgaGF2ZSBiZWVuIHB1cmdlZCBhbmQgdGhlIGZyZXNoIGNvbnRlbnQgd2lsbFxuICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgY2FjaGUuXG5cbiAgICAgICAgICAgICAgICAvLyBXZSBzZXQgYSBmbGFnIHNvIEdhdHNieSBMaW5rIGtub3dzIHRvIHJlZnJlc2ggdGhlIHBhZ2Ugb24gbmV4dCBuYXZpZ2F0aW9uIGF0dGVtcHRcbiAgICAgICAgICAgICAgICB3aW5kb3cuX19fc3dVcGRhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbGwgdGhlIG9uU2VydmljZVdvcmtlclVwZGF0ZVJlYWR5IEFQSSBzbyB1c2VycyBjYW4gc2hvdyB1cGRhdGUgcHJvbXB0cy5cbiAgICAgICAgICAgICAgICBhcGlSdW5uZXIoYG9uU2VydmljZVdvcmtlclVwZGF0ZVJlYWR5YCwgeyBzZXJ2aWNlV29ya2VyOiByZWcgfSlcblxuICAgICAgICAgICAgICAgIC8vIElmIHJlc291cmNlcyBmYWlsZWQgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIHJlbG9hZC5cbiAgICAgICAgICAgICAgICBpZiAod2luZG93Ll9fX2ZhaWxlZFJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYHJlc291cmNlcyBmYWlsZWQsIFNXIHVwZGF0ZWQgLSByZWxvYWRpbmdgKVxuICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gcHJlY2FjaGVkLlxuICAgICAgICAgICAgICAgIC8vIEl0J3MgdGhlIHBlcmZlY3QgdGltZSB0byBkaXNwbGF5IGEgXCJDb250ZW50IGlzIGNhY2hlZCBmb3Igb2ZmbGluZSB1c2UuXCIgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29udGVudCBpcyBub3cgYXZhaWxhYmxlIG9mZmxpbmUhYClcblxuICAgICAgICAgICAgICAgIC8vIFBvc3QgdG8gc2VydmljZSB3b3JrZXIgdGhhdCBpbnN0YWxsIGlzIGNvbXBsZXRlLlxuICAgICAgICAgICAgICAgIC8vIERlbGF5IHRvIGFsbG93IHRpbWUgZm9yIHRoZSBldmVudCBsaXN0ZW5lciB0byBiZSBhZGRlZCAtLVxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBmZXRjaCBpcyBjYWxsZWQgdG9vIHNvb24gYW5kIHJlc291cmNlcyBhcmVuJ3QgY2FjaGVkLlxuICAgICAgICAgICAgICAgIGFwaVJ1bm5lcihgb25TZXJ2aWNlV29ya2VySW5zdGFsbGVkYCwgeyBzZXJ2aWNlV29ya2VyOiByZWcgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlIGByZWR1bmRhbnRgOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBUaGUgaW5zdGFsbGluZyBzZXJ2aWNlIHdvcmtlciBiZWNhbWUgcmVkdW5kYW50LmApXG4gICAgICAgICAgICAgIGFwaVJ1bm5lcihgb25TZXJ2aWNlV29ya2VyUmVkdW5kYW50YCwgeyBzZXJ2aWNlV29ya2VyOiByZWcgfSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSBgYWN0aXZhdGVkYDpcbiAgICAgICAgICAgICAgYXBpUnVubmVyKGBvblNlcnZpY2VXb3JrZXJBY3RpdmVgLCB7IHNlcnZpY2VXb3JrZXI6IHJlZyB9KVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGR1cmluZyBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb246YCwgZSlcbiAgICB9KVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n')},1578:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ stripPrefix; }\n/* harmony export */ });\n/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn\'t found.\n */function stripPrefix(str,prefix){if(prefix===void 0){prefix="";}if(!prefix){return str;}if(str===prefix){return"/";}if(str.startsWith(prefix+"/")){return str.slice(prefix.length);}return str;}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9zdHJpcC1wcmVmaXguanM/NzEyMiJdLCJuYW1lcyI6WyJzdHJpcFByZWZpeCIsInN0ciIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzbGljZSIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsR0FFZSxRQUFTQSxZQUFULENBQXFCQyxHQUFyQixDQUEwQkMsTUFBMUIsQ0FBdUMsSUFBYkEsTUFBYSxXQUFiQSxNQUFhLEtBQ3BELEdBQUksQ0FBQ0EsTUFBTCxDQUFhLENBQ1gsTUFBT0QsSUFBUCxDQUNELENBRUQsR0FBSUEsR0FBRyxHQUFLQyxNQUFaLENBQW9CLENBQ2xCLFVBQ0QsQ0FFRCxHQUFJRCxHQUFHLENBQUNFLFVBQUosQ0FBa0JELE1BQWxCLEtBQUosQ0FBa0MsQ0FDaEMsTUFBT0QsSUFBRyxDQUFDRyxLQUFKLENBQVVGLE1BQU0sQ0FBQ0csTUFBakIsQ0FBUCxDQUNELENBRUQsTUFBT0osSUFBUCxDQUNEIiwiZmlsZSI6IjE1NzguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlbW92ZSBhIHByZWZpeCBmcm9tIGEgc3RyaW5nLiBSZXR1cm4gdGhlIGlucHV0IHN0cmluZyBpZiB0aGUgZ2l2ZW4gcHJlZml4XG4gKiBpc24ndCBmb3VuZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHJpcFByZWZpeChzdHIsIHByZWZpeCA9IGBgKSB7XG4gIGlmICghcHJlZml4KSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgaWYgKHN0ciA9PT0gcHJlZml4KSB7XG4gICAgcmV0dXJuIGAvYFxuICB9XG5cbiAgaWYgKHN0ci5zdGFydHNXaXRoKGAke3ByZWZpeH0vYCkpIHtcbiAgICByZXR1cm4gc3RyLnNsaWNlKHByZWZpeC5sZW5ndGgpXG4gIH1cblxuICByZXR1cm4gc3RyXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1578\n')},9037:function(n,I,g){"use strict";g.r(I)},6101:function(__unused_webpack_module,exports,__webpack_require__){eval("var _toConsumableArray=__webpack_require__(319);var Sentry=__webpack_require__(7066);var Tracing=__webpack_require__(7374);exports.onClientEntry=function(_,pluginParams){if(pluginParams===undefined){return;}pluginParams._metadata=pluginParams._metadata||{};pluginParams._metadata.sdk={name:'sentry.javascript.gatsby',packages:[{name:'npm:@sentry/gatsby',version:Sentry.SDK_VERSION}],version:Sentry.SDK_VERSION};var integrations=_toConsumableArray(pluginParams.integrations||[]);if(Tracing.hasTracingEnabled(pluginParams)&&!integrations.some(function(ele){return ele.name==='BrowserTracing';})){integrations.push(new Tracing.Integrations.BrowserTracing(pluginParams.browserTracingOptions));}Tracing.addExtensionMethods();Sentry.init(Object.assign({autoSessionTracking:true,environment:\"production\"||0,// eslint-disable-next-line no-undef\nrelease:\"69a4eec51c208a7886298ebe47b077cd2f726723\",// eslint-disable-next-line no-undef\ndsn:\"\"},pluginParams,{integrations:integrations}));window.Sentry=Sentry;};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2dhdHNieS9nYXRzYnktYnJvd3Nlci5qcz8xNmFhIl0sIm5hbWVzIjpbIlNlbnRyeSIsInJlcXVpcmUiLCJUcmFjaW5nIiwiZXhwb3J0cyIsIl8iLCJwbHVnaW5QYXJhbXMiLCJ1bmRlZmluZWQiLCJfbWV0YWRhdGEiLCJzZGsiLCJuYW1lIiwicGFja2FnZXMiLCJ2ZXJzaW9uIiwiU0RLX1ZFUlNJT04iLCJpbnRlZ3JhdGlvbnMiLCJoYXNUcmFjaW5nRW5hYmxlZCIsInNvbWUiLCJlbGUiLCJwdXNoIiwiSW50ZWdyYXRpb25zIiwiQnJvd3NlclRyYWNpbmciLCJicm93c2VyVHJhY2luZ09wdGlvbnMiLCJhZGRFeHRlbnNpb25NZXRob2RzIiwiaW5pdCIsImF1dG9TZXNzaW9uVHJhY2tpbmciLCJlbnZpcm9ubWVudCIsInByb2Nlc3MiLCJyZWxlYXNlIiwiX19TRU5UUllfUkVMRUFTRV9fIiwiZHNuIiwiX19TRU5UUllfRFNOX18iLCJ3aW5kb3ciXSwibWFwcGluZ3MiOiJnREFBQSxHQUFNQSxPQUFNLENBQUdDLG1CQUFPLENBQUMsSUFBRCxDQUF0QixDQUNBLEdBQU1DLFFBQU8sQ0FBR0QsbUJBQU8sQ0FBQyxJQUFELENBQXZCLENBRUFFLHFCQUFBLENBQXdCLFNBQVNDLENBQVQsQ0FBWUMsWUFBWixDQUEwQixDQUNoRCxHQUFJQSxZQUFZLEdBQUtDLFNBQXJCLENBQWdDLENBQzlCLE9BQ0QsQ0FFREQsWUFBWSxDQUFDRSxTQUFiLENBQXlCRixZQUFZLENBQUNFLFNBQWIsRUFBMEIsRUFBbkQsQ0FDQUYsWUFBWSxDQUFDRSxTQUFiLENBQXVCQyxHQUF2QixDQUE2QixDQUMzQkMsSUFBSSxDQUFFLDBCQURxQixDQUUzQkMsUUFBUSxDQUFFLENBQ1IsQ0FDRUQsSUFBSSxDQUFFLG9CQURSLENBRUVFLE9BQU8sQ0FBRVgsTUFBTSxDQUFDWSxXQUZsQixDQURRLENBRmlCLENBUTNCRCxPQUFPLENBQUVYLE1BQU0sQ0FBQ1ksV0FSVyxDQUE3QixDQVdBLEdBQU1DLGFBQVksb0JBQVFSLFlBQVksQ0FBQ1EsWUFBYixFQUE2QixFQUFyQyxDQUFsQixDQUVBLEdBQUlYLE9BQU8sQ0FBQ1ksaUJBQVIsQ0FBMEJULFlBQTFCLEdBQTJDLENBQUNRLFlBQVksQ0FBQ0UsSUFBYixDQUFrQixTQUFBQyxHQUFHLFFBQUlBLElBQUcsQ0FBQ1AsSUFBSixHQUFhLGdCQUFqQixFQUFyQixDQUFoRCxDQUF5RyxDQUN2R0ksWUFBWSxDQUFDSSxJQUFiLENBQWtCLEdBQUlmLFFBQU8sQ0FBQ2dCLFlBQVIsQ0FBcUJDLGNBQXpCLENBQXdDZCxZQUFZLENBQUNlLHFCQUFyRCxDQUFsQixFQUNELENBRURsQixPQUFPLENBQUNtQixtQkFBUixHQUVBckIsTUFBTSxDQUFDc0IsSUFBUCxnQkFDRUMsbUJBQW1CLENBQUUsSUFEdkIsQ0FFRUMsV0FBVyxDQUFFQyxZQUFBLEVBQXdCLENBRnZDLENBR0U7QUFDQUMsT0FBTyxDQUFFQywwQ0FKWCxDQUtFO0FBQ0FDLEdBQUcsQ0FBRUMsRUFOUCxFQU9LeEIsWUFQTCxFQVFFUSxZQUFZLENBQVpBLFlBUkYsSUFXQWlCLE1BQU0sQ0FBQzlCLE1BQVAsQ0FBZ0JBLE1BQWhCLENBQ0QsQ0FyQ0QiLCJmaWxlIjoiNjEwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFNlbnRyeSA9IHJlcXVpcmUoJ0BzZW50cnkvcmVhY3QnKTtcbmNvbnN0IFRyYWNpbmcgPSByZXF1aXJlKCdAc2VudHJ5L3RyYWNpbmcnKTtcblxuZXhwb3J0cy5vbkNsaWVudEVudHJ5ID0gZnVuY3Rpb24oXywgcGx1Z2luUGFyYW1zKSB7XG4gIGlmIChwbHVnaW5QYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBsdWdpblBhcmFtcy5fbWV0YWRhdGEgPSBwbHVnaW5QYXJhbXMuX21ldGFkYXRhIHx8IHt9O1xuICBwbHVnaW5QYXJhbXMuX21ldGFkYXRhLnNkayA9IHtcbiAgICBuYW1lOiAnc2VudHJ5LmphdmFzY3JpcHQuZ2F0c2J5JyxcbiAgICBwYWNrYWdlczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnbnBtOkBzZW50cnkvZ2F0c2J5JyxcbiAgICAgICAgdmVyc2lvbjogU2VudHJ5LlNES19WRVJTSU9OLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHZlcnNpb246IFNlbnRyeS5TREtfVkVSU0lPTixcbiAgfTtcblxuICBjb25zdCBpbnRlZ3JhdGlvbnMgPSBbLi4uKHBsdWdpblBhcmFtcy5pbnRlZ3JhdGlvbnMgfHwgW10pXTtcblxuICBpZiAoVHJhY2luZy5oYXNUcmFjaW5nRW5hYmxlZChwbHVnaW5QYXJhbXMpICYmICFpbnRlZ3JhdGlvbnMuc29tZShlbGUgPT4gZWxlLm5hbWUgPT09ICdCcm93c2VyVHJhY2luZycpKSB7XG4gICAgaW50ZWdyYXRpb25zLnB1c2gobmV3IFRyYWNpbmcuSW50ZWdyYXRpb25zLkJyb3dzZXJUcmFjaW5nKHBsdWdpblBhcmFtcy5icm93c2VyVHJhY2luZ09wdGlvbnMpKTtcbiAgfVxuXG4gIFRyYWNpbmcuYWRkRXh0ZW5zaW9uTWV0aG9kcygpO1xuXG4gIFNlbnRyeS5pbml0KHtcbiAgICBhdXRvU2Vzc2lvblRyYWNraW5nOiB0cnVlLFxuICAgIGVudmlyb25tZW50OiBwcm9jZXNzLmVudi5OT0RFX0VOViB8fCAnZGV2ZWxvcG1lbnQnLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJlbGVhc2U6IF9fU0VOVFJZX1JFTEVBU0VfXyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBkc246IF9fU0VOVFJZX0RTTl9fLFxuICAgIC4uLnBsdWdpblBhcmFtcyxcbiAgICBpbnRlZ3JhdGlvbnMsXG4gIH0pO1xuXG4gIHdpbmRvdy5TZW50cnkgPSBTZW50cnk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6101\n")},5526:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("var _interopRequireDefault=__webpack_require__(5318);exports.__esModule=true;exports.wrapPageElement=void 0;var _wrapPage=_interopRequireDefault(__webpack_require__(6604));var wrapPageElement=_wrapPage.default;exports.wrapPageElement=wrapPageElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvZ2F0c2J5LWJyb3dzZXIuanM/ZjRiYSJdLCJuYW1lcyI6WyJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImV4cG9ydHMiLCJfd3JhcFBhZ2UiLCJ3cmFwUGFnZUVsZW1lbnQiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFFQSxHQUFJQSx1QkFBc0IsQ0FBR0MsbUJBQU8sQ0FBQyxJQUFELENBQXBDLENBRUFDLGtCQUFBLENBQXFCLElBQXJCLENBQ0FBLHVCQUFBLENBQTBCLElBQUssRUFBL0IsQ0FFQSxHQUFJQyxVQUFTLENBQUdILHNCQUFzQixDQUFDQyxtQkFBTyxDQUFDLElBQUQsQ0FBUixDQUF0QyxDQUVBLEdBQUlHLGdCQUFlLENBQUdELFNBQVMsQ0FBQ0UsT0FBaEMsQ0FDQUgsdUJBQUEsQ0FBMEJFLGVBQTFCIiwiZmlsZSI6IjU1MjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLndyYXBQYWdlRWxlbWVudCA9IHZvaWQgMDtcblxudmFyIF93cmFwUGFnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vd3JhcC1wYWdlXCIpKTtcblxudmFyIHdyYXBQYWdlRWxlbWVudCA9IF93cmFwUGFnZS5kZWZhdWx0O1xuZXhwb3J0cy53cmFwUGFnZUVsZW1lbnQgPSB3cmFwUGFnZUVsZW1lbnQ7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5526\n")},8368:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("var _interopRequireDefault=__webpack_require__(5318);exports.__esModule=true;exports.IntlContextConsumer=exports.IntlContextProvider=void 0;var _react=_interopRequireDefault(__webpack_require__(7294));var IntlContext=_react.default.createContext();var IntlContextProvider=IntlContext.Provider;exports.IntlContextProvider=IntlContextProvider;var IntlContextConsumer=IntlContext.Consumer;exports.IntlContextConsumer=IntlContextConsumer;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvaW50bC1jb250ZXh0LmpzPzlmY2QiXSwibmFtZXMiOlsiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJleHBvcnRzIiwiX3JlYWN0IiwiSW50bENvbnRleHQiLCJkZWZhdWx0IiwiY3JlYXRlQ29udGV4dCIsIkludGxDb250ZXh0UHJvdmlkZXIiLCJQcm92aWRlciIsIkludGxDb250ZXh0Q29uc3VtZXIiLCJDb25zdW1lciJdLCJtYXBwaW5ncyI6IkFBRUEsR0FBSUEsdUJBQXNCLENBQUdDLG1CQUFPLENBQUMsSUFBRCxDQUFwQyxDQUVBQyxrQkFBQSxDQUFxQixJQUFyQixDQUNBQSwyQkFBQSxDQUE4QkEsMkJBQUEsQ0FBOEIsSUFBSyxFQUFqRSxDQUVBLEdBQUlDLE9BQU0sQ0FBR0gsc0JBQXNCLENBQUNDLG1CQUFPLENBQUMsSUFBRCxDQUFSLENBQW5DLENBRUEsR0FBSUcsWUFBVyxDQUFHRCxNQUFNLENBQUNFLE9BQVAsQ0FBZUMsYUFBZixFQUFsQixDQUVBLEdBQUlDLG9CQUFtQixDQUFHSCxXQUFXLENBQUNJLFFBQXRDLENBQ0FOLDJCQUFBLENBQThCSyxtQkFBOUIsQ0FDQSxHQUFJRSxvQkFBbUIsQ0FBR0wsV0FBVyxDQUFDTSxRQUF0QyxDQUNBUiwyQkFBQSxDQUE4Qk8sbUJBQTlCIiwiZmlsZSI6IjgzNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLkludGxDb250ZXh0Q29uc3VtZXIgPSBleHBvcnRzLkludGxDb250ZXh0UHJvdmlkZXIgPSB2b2lkIDA7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBJbnRsQ29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQoKTtcblxudmFyIEludGxDb250ZXh0UHJvdmlkZXIgPSBJbnRsQ29udGV4dC5Qcm92aWRlcjtcbmV4cG9ydHMuSW50bENvbnRleHRQcm92aWRlciA9IEludGxDb250ZXh0UHJvdmlkZXI7XG52YXIgSW50bENvbnRleHRDb25zdW1lciA9IEludGxDb250ZXh0LkNvbnN1bWVyO1xuZXhwb3J0cy5JbnRsQ29udGV4dENvbnN1bWVyID0gSW50bENvbnRleHRDb25zdW1lcjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8368\n")},7060:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"FormattedDate\": function() { return /* binding */ FormattedDate; },\n \"FormattedDateParts\": function() { return /* binding */ FormattedDateParts; },\n \"FormattedDisplayName\": function() { return /* binding */ FormattedDisplayName; },\n \"FormattedHTMLMessage\": function() { return /* reexport */ html_message; },\n \"FormattedList\": function() { return /* binding */ FormattedList; },\n \"FormattedMessage\": function() { return /* reexport */ message; },\n \"FormattedNumber\": function() { return /* binding */ FormattedNumber; },\n \"FormattedNumberParts\": function() { return /* reexport */ FormattedNumberParts; },\n \"FormattedPlural\": function() { return /* reexport */ plural; },\n \"FormattedRelativeTime\": function() { return /* reexport */ relative; },\n \"FormattedTime\": function() { return /* binding */ FormattedTime; },\n \"FormattedTimeParts\": function() { return /* binding */ FormattedTimeParts; },\n \"IntlContext\": function() { return /* reexport */ Context; },\n \"IntlProvider\": function() { return /* reexport */ provider_IntlProvider; },\n \"RawIntlProvider\": function() { return /* reexport */ Provider; },\n \"createIntl\": function() { return /* reexport */ createIntl; },\n \"createIntlCache\": function() { return /* reexport */ createIntlCache; },\n \"defineMessages\": function() { return /* binding */ defineMessages; },\n \"injectIntl\": function() { return /* reexport */ injectIntl; },\n \"useIntl\": function() { return /* reexport */ useIntl; }\n});\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(7294);\nvar react_namespaceObject = /*#__PURE__*/__webpack_require__.t(react, 2);\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/types.js\nvar TYPE;\n\n(function (TYPE) {\n /**\n * Raw text\n */\n TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n /**\n * Variable w/o any format, e.g `var` in `this is a {var}`\n */\n\n TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n /**\n * Variable w/ number format\n */\n\n TYPE[TYPE[\"number\"] = 2] = \"number\";\n /**\n * Variable w/ date format\n */\n\n TYPE[TYPE[\"date\"] = 3] = \"date\";\n /**\n * Variable w/ time format\n */\n\n TYPE[TYPE[\"time\"] = 4] = \"time\";\n /**\n * Variable w/ select format\n */\n\n TYPE[TYPE[\"select\"] = 5] = \"select\";\n /**\n * Variable w/ plural format\n */\n\n TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n /**\n * Only possible within plural argument.\n * This is the `#` symbol that will be substituted with the count.\n */\n\n TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n})(TYPE || (TYPE = {}));\n/**\n * Type Guards\n */\n\n\nfunction isLiteralElement(el) {\n return el.type === TYPE.literal;\n}\nfunction isArgumentElement(el) {\n return el.type === TYPE.argument;\n}\nfunction isNumberElement(el) {\n return el.type === TYPE.number;\n}\nfunction isDateElement(el) {\n return el.type === TYPE.date;\n}\nfunction isTimeElement(el) {\n return el.type === TYPE.time;\n}\nfunction isSelectElement(el) {\n return el.type === TYPE.select;\n}\nfunction isPluralElement(el) {\n return el.type === TYPE.plural;\n}\nfunction isPoundElement(el) {\n return el.type === TYPE.pound;\n}\nfunction isNumberSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === 0\n /* number */\n );\n}\nfunction isDateTimeSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === 1\n /* dateTime */\n );\n}\nfunction createLiteralElement(value) {\n return {\n type: TYPE.literal,\n value: value\n };\n}\nfunction createNumberElement(value, style) {\n return {\n type: TYPE.number,\n value: value,\n style: style\n };\n}\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/parser.js\n// tslint:disable:only-arrow-functions\n// tslint:disable:object-literal-shorthand\n// tslint:disable:trailing-comma\n// tslint:disable:object-literal-sort-keys\n// tslint:disable:one-variable-per-declaration\n// tslint:disable:max-line-length\n// tslint:disable:no-consecutive-blank-lines\n// tslint:disable:align\nvar __extends = undefined && undefined.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __assign = undefined && undefined.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n}; // Generated by PEG.js v. 0.10.0 (ts-pegjs plugin v. 0.2.6 )\n//\n// https://pegjs.org/ https://github.com/metadevpro/ts-pegjs\n\n\n\n\nvar SyntaxError =\n/** @class */\nfunction (_super) {\n __extends(SyntaxError, _super);\n\n function SyntaxError(message, expected, found, location) {\n var _this = _super.call(this) || this;\n\n _this.message = message;\n _this.expected = expected;\n _this.found = found;\n _this.location = location;\n _this.name = \"SyntaxError\";\n\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(_this, SyntaxError);\n }\n\n return _this;\n }\n\n SyntaxError.buildMessage = function (expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function (ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function (ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n\n function describeExpectation(expectation) {\n switch (expectation.type) {\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n\n case \"class\":\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n\n case \"any\":\n return \"any character\";\n\n case \"end\":\n return \"end of input\";\n\n case \"other\":\n return expectation.description;\n }\n }\n\n function describeExpected(expected1) {\n var descriptions = expected1.map(describeExpectation);\n var i;\n var j;\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n\n return SyntaxError;\n}(Error);\n\n\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n var peg$FAILED = {};\n var peg$startRuleFunctions = {\n start: peg$parsestart\n };\n var peg$startRuleFunction = peg$parsestart;\n\n var peg$c0 = function peg$c0(parts) {\n return parts.join('');\n };\n\n var peg$c1 = function peg$c1(messageText) {\n return __assign({\n type: TYPE.literal,\n value: messageText\n }, insertLocation());\n };\n\n var peg$c2 = \"#\";\n var peg$c3 = peg$literalExpectation(\"#\", false);\n\n var peg$c4 = function peg$c4() {\n return __assign({\n type: TYPE.pound\n }, insertLocation());\n };\n\n var peg$c5 = peg$otherExpectation(\"argumentElement\");\n var peg$c6 = \"{\";\n var peg$c7 = peg$literalExpectation(\"{\", false);\n var peg$c8 = \"}\";\n var peg$c9 = peg$literalExpectation(\"}\", false);\n\n var peg$c10 = function peg$c10(value) {\n return __assign({\n type: TYPE.argument,\n value: value\n }, insertLocation());\n };\n\n var peg$c11 = peg$otherExpectation(\"numberSkeletonId\");\n var peg$c12 = /^['\\/{}]/;\n var peg$c13 = peg$classExpectation([\"'\", \"/\", \"{\", \"}\"], false, false);\n var peg$c14 = peg$anyExpectation();\n var peg$c15 = peg$otherExpectation(\"numberSkeletonTokenOption\");\n var peg$c16 = \"/\";\n var peg$c17 = peg$literalExpectation(\"/\", false);\n\n var peg$c18 = function peg$c18(option) {\n return option;\n };\n\n var peg$c19 = peg$otherExpectation(\"numberSkeletonToken\");\n\n var peg$c20 = function peg$c20(stem, options) {\n return {\n stem: stem,\n options: options\n };\n };\n\n var peg$c21 = function peg$c21(tokens) {\n return __assign({\n type: 0\n /* number */\n ,\n tokens: tokens\n }, insertLocation());\n };\n\n var peg$c22 = \"::\";\n var peg$c23 = peg$literalExpectation(\"::\", false);\n\n var peg$c24 = function peg$c24(skeleton) {\n return skeleton;\n };\n\n var peg$c25 = function peg$c25() {\n messageCtx.push('numberArgStyle');\n return true;\n };\n\n var peg$c26 = function peg$c26(style) {\n messageCtx.pop();\n return style.replace(/\\s*$/, '');\n };\n\n var peg$c27 = \",\";\n var peg$c28 = peg$literalExpectation(\",\", false);\n var peg$c29 = \"number\";\n var peg$c30 = peg$literalExpectation(\"number\", false);\n\n var peg$c31 = function peg$c31(value, type, style) {\n return __assign({\n type: type === 'number' ? TYPE.number : type === 'date' ? TYPE.date : TYPE.time,\n style: style && style[2],\n value: value\n }, insertLocation());\n };\n\n var peg$c32 = \"'\";\n var peg$c33 = peg$literalExpectation(\"'\", false);\n var peg$c34 = /^[^']/;\n var peg$c35 = peg$classExpectation([\"'\"], true, false);\n var peg$c36 = /^[^a-zA-Z'{}]/;\n var peg$c37 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"'\", \"{\", \"}\"], true, false);\n var peg$c38 = /^[a-zA-Z]/;\n var peg$c39 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n\n var peg$c40 = function peg$c40(pattern) {\n return __assign({\n type: 1\n /* dateTime */\n ,\n pattern: pattern\n }, insertLocation());\n };\n\n var peg$c41 = function peg$c41() {\n messageCtx.push('dateOrTimeArgStyle');\n return true;\n };\n\n var peg$c42 = \"date\";\n var peg$c43 = peg$literalExpectation(\"date\", false);\n var peg$c44 = \"time\";\n var peg$c45 = peg$literalExpectation(\"time\", false);\n var peg$c46 = \"plural\";\n var peg$c47 = peg$literalExpectation(\"plural\", false);\n var peg$c48 = \"selectordinal\";\n var peg$c49 = peg$literalExpectation(\"selectordinal\", false);\n var peg$c50 = \"offset:\";\n var peg$c51 = peg$literalExpectation(\"offset:\", false);\n\n var peg$c52 = function peg$c52(value, pluralType, offset, options) {\n return __assign({\n type: TYPE.plural,\n pluralType: pluralType === 'plural' ? 'cardinal' : 'ordinal',\n value: value,\n offset: offset ? offset[2] : 0,\n options: options.reduce(function (all, _a) {\n var id = _a.id,\n value = _a.value,\n optionLocation = _a.location;\n\n if (id in all) {\n error(\"Duplicate option \\\"\" + id + \"\\\" in plural element: \\\"\" + text() + \"\\\"\", location());\n }\n\n all[id] = {\n value: value,\n location: optionLocation\n };\n return all;\n }, {})\n }, insertLocation());\n };\n\n var peg$c53 = \"select\";\n var peg$c54 = peg$literalExpectation(\"select\", false);\n\n var peg$c55 = function peg$c55(value, options) {\n return __assign({\n type: TYPE.select,\n value: value,\n options: options.reduce(function (all, _a) {\n var id = _a.id,\n value = _a.value,\n optionLocation = _a.location;\n\n if (id in all) {\n error(\"Duplicate option \\\"\" + id + \"\\\" in select element: \\\"\" + text() + \"\\\"\", location());\n }\n\n all[id] = {\n value: value,\n location: optionLocation\n };\n return all;\n }, {})\n }, insertLocation());\n };\n\n var peg$c56 = \"=\";\n var peg$c57 = peg$literalExpectation(\"=\", false);\n\n var peg$c58 = function peg$c58(id) {\n messageCtx.push('select');\n return true;\n };\n\n var peg$c59 = function peg$c59(id, value) {\n messageCtx.pop();\n return __assign({\n id: id,\n value: value\n }, insertLocation());\n };\n\n var peg$c60 = function peg$c60(id) {\n messageCtx.push('plural');\n return true;\n };\n\n var peg$c61 = function peg$c61(id, value) {\n messageCtx.pop();\n return __assign({\n id: id,\n value: value\n }, insertLocation());\n };\n\n var peg$c62 = peg$otherExpectation(\"whitespace\");\n var peg$c63 = /^[\\t-\\r \\x85\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n var peg$c64 = peg$classExpectation([[\"\\t\", \"\\r\"], \" \", \"\\x85\", \"\\xA0\", \"\\u1680\", [\"\\u2000\", \"\\u200A\"], \"\\u2028\", \"\\u2029\", \"\\u202F\", \"\\u205F\", \"\\u3000\"], false, false);\n var peg$c65 = peg$otherExpectation(\"syntax pattern\");\n var peg$c66 = /^[!-\\/:-@[-\\^`{-~\\xA1-\\xA7\\xA9\\xAB\\xAC\\xAE\\xB0\\xB1\\xB6\\xBB\\xBF\\xD7\\xF7\\u2010-\\u2027\\u2030-\\u203E\\u2041-\\u2053\\u2055-\\u205E\\u2190-\\u245F\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3001-\\u3003\\u3008-\\u3020\\u3030\\uFD3E\\uFD3F\\uFE45\\uFE46]/;\n var peg$c67 = peg$classExpectation([[\"!\", \"/\"], [\":\", \"@\"], [\"[\", \"^\"], \"`\", [\"{\", \"~\"], [\"\\xA1\", \"\\xA7\"], \"\\xA9\", \"\\xAB\", \"\\xAC\", \"\\xAE\", \"\\xB0\", \"\\xB1\", \"\\xB6\", \"\\xBB\", \"\\xBF\", \"\\xD7\", \"\\xF7\", [\"\\u2010\", \"\\u2027\"], [\"\\u2030\", \"\\u203E\"], [\"\\u2041\", \"\\u2053\"], [\"\\u2055\", \"\\u205E\"], [\"\\u2190\", \"\\u245F\"], [\"\\u2500\", \"\\u2775\"], [\"\\u2794\", \"\\u2BFF\"], [\"\\u2E00\", \"\\u2E7F\"], [\"\\u3001\", \"\\u3003\"], [\"\\u3008\", \"\\u3020\"], \"\\u3030\", \"\\uFD3E\", \"\\uFD3F\", \"\\uFE45\", \"\\uFE46\"], false, false);\n var peg$c68 = peg$otherExpectation(\"optional whitespace\");\n var peg$c69 = peg$otherExpectation(\"number\");\n var peg$c70 = \"-\";\n var peg$c71 = peg$literalExpectation(\"-\", false);\n\n var peg$c72 = function peg$c72(negative, num) {\n return num ? negative ? -num : num : 0;\n };\n\n var peg$c73 = peg$otherExpectation(\"apostrophe\");\n var peg$c74 = peg$otherExpectation(\"double apostrophes\");\n var peg$c75 = \"''\";\n var peg$c76 = peg$literalExpectation(\"''\", false);\n\n var peg$c77 = function peg$c77() {\n return \"'\";\n };\n\n var peg$c78 = function peg$c78(escapedChar, quotedChars) {\n return escapedChar + quotedChars.replace(\"''\", \"'\");\n };\n\n var peg$c79 = function peg$c79(x) {\n return x !== '{' && !(isInPluralOption() && x === '#') && !(isNestedMessageText() && x === '}');\n };\n\n var peg$c80 = \"\\n\";\n var peg$c81 = peg$literalExpectation(\"\\n\", false);\n\n var peg$c82 = function peg$c82(x) {\n return x === '{' || x === '}' || isInPluralOption() && x === '#';\n };\n\n var peg$c83 = peg$otherExpectation(\"argNameOrNumber\");\n var peg$c84 = peg$otherExpectation(\"argNumber\");\n var peg$c85 = \"0\";\n var peg$c86 = peg$literalExpectation(\"0\", false);\n\n var peg$c87 = function peg$c87() {\n return 0;\n };\n\n var peg$c88 = /^[1-9]/;\n var peg$c89 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n var peg$c90 = /^[0-9]/;\n var peg$c91 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n\n var peg$c92 = function peg$c92(digits) {\n return parseInt(digits.join(''), 10);\n };\n\n var peg$c93 = peg$otherExpectation(\"argName\");\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{\n line: 1,\n column: 1\n }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location1);\n }\n\n function error(message, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n\n function peg$literalExpectation(text1, ignoreCase) {\n return {\n type: \"literal\",\n text: text1,\n ignoreCase: ignoreCase\n };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: \"class\",\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase\n };\n }\n\n function peg$anyExpectation() {\n return {\n type: \"any\"\n };\n }\n\n function peg$endExpectation() {\n return {\n type: \"end\"\n };\n }\n\n function peg$otherExpectation(description) {\n return {\n type: \"other\",\n description: description\n };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected1);\n }\n\n function peg$buildSimpleError(message, location1) {\n return new SyntaxError(message, [], \"\", location1);\n }\n\n function peg$buildStructuredError(expected1, found, location1) {\n return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1);\n }\n\n function peg$parsestart() {\n var s0;\n s0 = peg$parsemessage();\n return s0;\n }\n\n function peg$parsemessage() {\n var s0, s1;\n s0 = [];\n s1 = peg$parsemessageElement();\n\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsemessageElement();\n }\n\n return s0;\n }\n\n function peg$parsemessageElement() {\n var s0;\n s0 = peg$parseliteralElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parseargumentElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsesimpleFormatElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsepluralElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parseselectElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsepoundElement();\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsemessageText() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsedoubleApostrophes();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parsequotedString();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parseunquotedString();\n }\n }\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsedoubleApostrophes();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parsequotedString();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parseunquotedString();\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parseliteralElement() {\n var s0, s1;\n s0 = peg$currPos;\n s1 = peg$parsemessageText();\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c1(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parsepoundElement() {\n var s0, s1;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c3);\n }\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c4();\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parseargumentElement() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c5);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeletonId() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n if (peg$c12.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n if (peg$c12.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c11);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeletonTokenOption() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c17);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeletonId();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c18(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c15);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeletonToken() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeletonId();\n\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsenumberSkeletonTokenOption();\n\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenumberSkeletonTokenOption();\n }\n\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c20(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c19);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeleton() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsenumberSkeletonToken();\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsenumberSkeletonToken();\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c21(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parsenumberArgStyle() {\n var s0, s1, s2;\n s0 = peg$currPos;\n\n if (input.substr(peg$currPos, 2) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeleton();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$c25();\n\n if (s1) {\n s1 = undefined;\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemessageText();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c29) {\n s7 = peg$c29;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c30);\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n s9 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 44) {\n s10 = peg$c27;\n peg$currPos++;\n } else {\n s10 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s10 !== peg$FAILED) {\n s11 = peg$parse_();\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parsenumberArgStyle();\n\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n\n if (s9 === peg$FAILED) {\n s9 = null;\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c8;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31(s3, s7, s9);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedateTimeSkeletonLiteral() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c32;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsedoubleApostrophes();\n\n if (s3 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsedoubleApostrophes();\n\n if (s3 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c32;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n if (s0 === peg$FAILED) {\n s0 = [];\n s1 = peg$parsedoubleApostrophes();\n\n if (s1 === peg$FAILED) {\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c37);\n }\n }\n }\n\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsedoubleApostrophes();\n\n if (s1 === peg$FAILED) {\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c37);\n }\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsedateTimeSkeletonPattern() {\n var s0, s1;\n s0 = [];\n\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c39);\n }\n }\n\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c39);\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedateTimeSkeleton() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsedateTimeSkeletonLiteral();\n\n if (s3 === peg$FAILED) {\n s3 = peg$parsedateTimeSkeletonPattern();\n }\n\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsedateTimeSkeletonLiteral();\n\n if (s3 === peg$FAILED) {\n s3 = peg$parsedateTimeSkeletonPattern();\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c40(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parsedateOrTimeArgStyle() {\n var s0, s1, s2;\n s0 = peg$currPos;\n\n if (input.substr(peg$currPos, 2) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedateTimeSkeleton();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$c41();\n\n if (s1) {\n s1 = undefined;\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemessageText();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsedateOrTimeFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c42) {\n s7 = peg$c42;\n peg$currPos += 4;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c43);\n }\n }\n\n if (s7 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c44) {\n s7 = peg$c44;\n peg$currPos += 4;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c45);\n }\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n s9 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 44) {\n s10 = peg$c27;\n peg$currPos++;\n } else {\n s10 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s10 !== peg$FAILED) {\n s11 = peg$parse_();\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parsedateOrTimeArgStyle();\n\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n\n if (s9 === peg$FAILED) {\n s9 = null;\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c8;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31(s3, s7, s9);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesimpleFormatElement() {\n var s0;\n s0 = peg$parsenumberFormatElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsedateOrTimeFormatElement();\n }\n\n return s0;\n }\n\n function peg$parsepluralElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c46) {\n s7 = peg$c46;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c47);\n }\n }\n\n if (s7 === peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c48) {\n s7 = peg$c48;\n peg$currPos += 13;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c49);\n }\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s9 = peg$c27;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n s11 = peg$currPos;\n\n if (input.substr(peg$currPos, 7) === peg$c50) {\n s12 = peg$c50;\n peg$currPos += 7;\n } else {\n s12 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c51);\n }\n }\n\n if (s12 !== peg$FAILED) {\n s13 = peg$parse_();\n\n if (s13 !== peg$FAILED) {\n s14 = peg$parsenumber();\n\n if (s14 !== peg$FAILED) {\n s12 = [s12, s13, s14];\n s11 = s12;\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n\n if (s11 === peg$FAILED) {\n s11 = null;\n }\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n\n if (s12 !== peg$FAILED) {\n s13 = [];\n s14 = peg$parsepluralOption();\n\n if (s14 !== peg$FAILED) {\n while (s14 !== peg$FAILED) {\n s13.push(s14);\n s14 = peg$parsepluralOption();\n }\n } else {\n s13 = peg$FAILED;\n }\n\n if (s13 !== peg$FAILED) {\n s14 = peg$parse_();\n\n if (s14 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s15 = peg$c8;\n peg$currPos++;\n } else {\n s15 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s15 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c52(s3, s7, s11, s13);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseselectElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c53) {\n s7 = peg$c53;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c54);\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s9 = peg$c27;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n s11 = [];\n s12 = peg$parseselectOption();\n\n if (s12 !== peg$FAILED) {\n while (s12 !== peg$FAILED) {\n s11.push(s12);\n s12 = peg$parseselectOption();\n }\n } else {\n s11 = peg$FAILED;\n }\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n\n if (s12 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s13 = peg$c8;\n peg$currPos++;\n } else {\n s13 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s13 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c55(s3, s11);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepluralRuleSelectValue() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c56;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c57);\n }\n }\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n if (s0 === peg$FAILED) {\n s0 = peg$parseargName();\n }\n\n return s0;\n }\n\n function peg$parseselectOption() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parse_();\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parseargName();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$c58(s2);\n\n if (s5) {\n s5 = undefined;\n } else {\n s5 = peg$FAILED;\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessage();\n\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c8;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c59(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepluralOption() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parse_();\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepluralRuleSelectValue();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$c60(s2);\n\n if (s5) {\n s5 = undefined;\n } else {\n s5 = peg$FAILED;\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessage();\n\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c8;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c61(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsewhiteSpace() {\n var s0, s1;\n peg$silentFails++;\n\n if (peg$c63.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c64);\n }\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c62);\n }\n }\n\n return s0;\n }\n\n function peg$parsepatternSyntax() {\n var s0, s1;\n peg$silentFails++;\n\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c67);\n }\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c65);\n }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhiteSpace();\n\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhiteSpace();\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c68);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c70;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c71);\n }\n }\n\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parseargNumber();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c72(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c69);\n }\n }\n\n return s0;\n }\n\n function peg$parseapostrophe() {\n var s0, s1;\n peg$silentFails++;\n\n if (input.charCodeAt(peg$currPos) === 39) {\n s0 = peg$c32;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c73);\n }\n }\n\n return s0;\n }\n\n function peg$parsedoubleApostrophes() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s1 = peg$c75;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c77();\n }\n\n s0 = s1;\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c74);\n }\n }\n\n return s0;\n }\n\n function peg$parsequotedString() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c32;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parseescapedChar();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s5 = peg$c75;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n\n if (s5 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s5 = peg$c75;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n\n if (s5 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s4 = peg$c32;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c78(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseunquotedString() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s3 = peg$c79(s2);\n\n if (s3) {\n s3 = undefined;\n } else {\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s1 = peg$c80;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c81);\n }\n }\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseescapedChar() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s3 = peg$c82(s2);\n\n if (s3) {\n s3 = undefined;\n } else {\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseargNameOrNumber() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseargNumber();\n\n if (s1 === peg$FAILED) {\n s1 = peg$parseargName();\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c83);\n }\n }\n\n return s0;\n }\n\n function peg$parseargNumber() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c85;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c86);\n }\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c87();\n }\n\n s0 = s1;\n\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (peg$c88.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c89);\n }\n }\n\n if (s2 !== peg$FAILED) {\n s3 = [];\n\n if (peg$c90.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c91);\n }\n }\n\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n\n if (peg$c90.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c91);\n }\n }\n }\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c92(s1);\n }\n\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c84);\n }\n }\n\n return s0;\n }\n\n function peg$parseargName() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n s4 = peg$parsepatternSyntax();\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n s4 = peg$parsepatternSyntax();\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c93);\n }\n }\n\n return s0;\n }\n\n var messageCtx = ['root'];\n\n function isNestedMessageText() {\n return messageCtx.length > 1;\n }\n\n function isInPluralOption() {\n return messageCtx[messageCtx.length - 1] === 'plural';\n }\n\n function insertLocation() {\n return options && options.captureLocation ? {\n location: location()\n } : {};\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\n\nvar pegParse = peg$parse;\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/normalize.js\nvar __spreadArrays = undefined && undefined.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\n\n\nvar PLURAL_HASHTAG_REGEX = /(^|[^\\\\])#/g;\n/**\n * Whether to convert `#` in plural rule options\n * to `{var, number}`\n * @param el AST Element\n * @param pluralStack current plural stack\n */\n\nfunction normalizeHashtagInPlural(els) {\n els.forEach(function (el) {\n // If we're encountering a plural el\n if (!isPluralElement(el) && !isSelectElement(el)) {\n return;\n } // Go down the options and search for # in any literal element\n\n\n Object.keys(el.options).forEach(function (id) {\n var _a;\n\n var opt = el.options[id]; // If we got a match, we have to split this\n // and inject a NumberElement in the middle\n\n var matchingLiteralElIndex = -1;\n var literalEl = undefined;\n\n for (var i = 0; i < opt.value.length; i++) {\n var el_1 = opt.value[i];\n\n if (isLiteralElement(el_1) && PLURAL_HASHTAG_REGEX.test(el_1.value)) {\n matchingLiteralElIndex = i;\n literalEl = el_1;\n break;\n }\n }\n\n if (literalEl) {\n var newValue = literalEl.value.replace(PLURAL_HASHTAG_REGEX, \"$1{\" + el.value + \", number}\");\n var newEls = pegParse(newValue);\n\n (_a = opt.value).splice.apply(_a, __spreadArrays([matchingLiteralElIndex, 1], newEls));\n }\n\n normalizeHashtagInPlural(opt.value);\n });\n });\n}\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/index.js\n\n\n\n\n\nfunction parse(input, opts) {\n var els = pegParse(input, opts);\n\n if (!opts || opts.normalizeHashtagInPlural !== false) {\n normalizeHashtagInPlural(els);\n }\n\n return els;\n}\n;// CONCATENATED MODULE: ./node_modules/intl-format-cache/lib/index.js\n/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nvar lib_spreadArrays = undefined && undefined.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}; // -- Utilities ----------------------------------------------------------------\n\n\nfunction getCacheId(inputs) {\n return JSON.stringify(inputs.map(function (input) {\n return input && typeof input === 'object' ? orderedProps(input) : input;\n }));\n}\n\nfunction orderedProps(obj) {\n return Object.keys(obj).sort().map(function (k) {\n var _a;\n\n return _a = {}, _a[k] = obj[k], _a;\n });\n}\n\nvar memoizeFormatConstructor = function memoizeFormatConstructor(FormatConstructor, cache) {\n if (cache === void 0) {\n cache = {};\n }\n\n return function () {\n var _a;\n\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var cacheId = getCacheId(args);\n var format = cacheId && cache[cacheId];\n\n if (!format) {\n format = new ((_a = FormatConstructor).bind.apply(_a, lib_spreadArrays([void 0], args)))();\n\n if (cacheId) {\n cache[cacheId] = format;\n }\n }\n\n return format;\n };\n};\n\n/* harmony default export */ var lib = (memoizeFormatConstructor);\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/skeleton.js\nvar skeleton_assign = undefined && undefined.__assign || function () {\n skeleton_assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return skeleton_assign.apply(this, arguments);\n};\n/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\n\n\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\n\nfunction parseDateTimeSkeleton(skeleton) {\n var result = {};\n skeleton.replace(DATE_TIME_REGEX, function (match) {\n var len = match.length;\n\n switch (match[0]) {\n // Era\n case 'G':\n result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n break;\n // Year\n\n case 'y':\n result.year = len === 2 ? '2-digit' : 'numeric';\n break;\n\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n // Quarter\n\n case 'q':\n case 'Q':\n throw new RangeError('`q/Q` (quarter) patterns are not supported');\n // Month\n\n case 'M':\n case 'L':\n result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n break;\n // Week\n\n case 'w':\n case 'W':\n throw new RangeError('`w/W` (week) patterns are not supported');\n\n case 'd':\n result.day = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'D':\n case 'F':\n case 'g':\n throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n // Weekday\n\n case 'E':\n result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';\n break;\n\n case 'e':\n if (len < 4) {\n throw new RangeError('`e..eee` (weekday) patterns are not supported');\n }\n\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n\n case 'c':\n if (len < 4) {\n throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n }\n\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n // Period\n\n case 'a':\n // AM, PM\n result.hour12 = true;\n break;\n\n case 'b': // am, pm, noon, midnight\n\n case 'B':\n // flexible day periods\n throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n // Hour\n\n case 'h':\n result.hourCycle = 'h12';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'H':\n result.hourCycle = 'h23';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'K':\n result.hourCycle = 'h11';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'k':\n result.hourCycle = 'h24';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'j':\n case 'J':\n case 'C':\n throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n // Minute\n\n case 'm':\n result.minute = ['numeric', '2-digit'][len - 1];\n break;\n // Second\n\n case 's':\n result.second = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'S':\n case 'A':\n throw new RangeError('`S/A` (second) pattenrs are not supported, use `s` instead');\n // Zone\n\n case 'z':\n // 1..3, 4: specific non-location format\n result.timeZoneName = len < 4 ? 'short' : 'long';\n break;\n\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n\n case 'O': // 1, 4: miliseconds in day short, long\n\n case 'v': // 1, 4: generic non-location format\n\n case 'V': // 1, 2, 3, 4: time zone ID or city\n\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n\n case 'x':\n // 1, 2, 3, 4: The ISO8601 varios formats\n throw new RangeError('`Z/O/v/V/X/x` (timeZone) pattenrs are not supported, use `z` instead');\n }\n\n return '';\n });\n return result;\n}\n\nfunction icuUnitToEcma(unit) {\n return unit.replace(/^(.*?)-/, '');\n}\n\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\+|#+)?)?$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?$/g;\n\nfunction parseSignificantPrecision(str) {\n var result = {};\n str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n // @@@ case\n if (typeof g2 !== 'string') {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length;\n } // @@@+ case\n else if (g2 === '+') {\n result.minimumSignificantDigits = g1.length;\n } // .### case\n else if (g1[0] === '#') {\n result.maximumSignificantDigits = g1.length;\n } // .@@## or .@@@ case\n else {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n\n return '';\n });\n return result;\n}\n\nfunction parseSign(str) {\n switch (str) {\n case 'sign-auto':\n return {\n signDisplay: 'auto'\n };\n\n case 'sign-accounting':\n return {\n currencySign: 'accounting'\n };\n\n case 'sign-always':\n return {\n signDisplay: 'always'\n };\n\n case 'sign-accounting-always':\n return {\n signDisplay: 'always',\n currencySign: 'accounting'\n };\n\n case 'sign-except-zero':\n return {\n signDisplay: 'exceptZero'\n };\n\n case 'sign-accounting-except-zero':\n return {\n signDisplay: 'exceptZero',\n currencySign: 'accounting'\n };\n\n case 'sign-never':\n return {\n signDisplay: 'never'\n };\n }\n}\n\nfunction parseNotationOptions(opt) {\n var result = {};\n var signOpts = parseSign(opt);\n\n if (signOpts) {\n return signOpts;\n }\n\n return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\n\n\nfunction convertNumberSkeletonToNumberFormatOptions(tokens) {\n var result = {};\n\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n\n switch (token.stem) {\n case 'percent':\n result.style = 'percent';\n continue;\n\n case 'currency':\n result.style = 'currency';\n result.currency = token.options[0];\n continue;\n\n case 'group-off':\n result.useGrouping = false;\n continue;\n\n case 'precision-integer':\n result.maximumFractionDigits = 0;\n continue;\n\n case 'measure-unit':\n result.style = 'unit';\n result.unit = icuUnitToEcma(token.options[0]);\n continue;\n\n case 'compact-short':\n result.notation = 'compact';\n result.compactDisplay = 'short';\n continue;\n\n case 'compact-long':\n result.notation = 'compact';\n result.compactDisplay = 'long';\n continue;\n\n case 'scientific':\n result = skeleton_assign(skeleton_assign(skeleton_assign({}, result), {\n notation: 'scientific'\n }), token.options.reduce(function (all, opt) {\n return skeleton_assign(skeleton_assign({}, all), parseNotationOptions(opt));\n }, {}));\n continue;\n\n case 'engineering':\n result = skeleton_assign(skeleton_assign(skeleton_assign({}, result), {\n notation: 'engineering'\n }), token.options.reduce(function (all, opt) {\n return skeleton_assign(skeleton_assign({}, all), parseNotationOptions(opt));\n }, {}));\n continue;\n\n case 'notation-simple':\n result.notation = 'standard';\n continue;\n // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n\n case 'unit-width-narrow':\n result.currencyDisplay = 'narrowSymbol';\n result.unitDisplay = 'narrow';\n continue;\n\n case 'unit-width-short':\n result.currencyDisplay = 'code';\n result.unitDisplay = 'short';\n continue;\n\n case 'unit-width-full-name':\n result.currencyDisplay = 'name';\n result.unitDisplay = 'long';\n continue;\n\n case 'unit-width-iso-code':\n result.currencyDisplay = 'symbol';\n continue;\n } // Precision\n // https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#fraction-precision\n\n\n if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n if (token.options.length > 1) {\n throw new RangeError('Fraction-precision stems only accept a single optional option');\n }\n\n token.stem.replace(FRACTION_PRECISION_REGEX, function (match, g1, g2) {\n // precision-integer case\n if (match === '.') {\n result.maximumFractionDigits = 0;\n } // .000+ case\n else if (g2 === '+') {\n result.minimumFractionDigits = g2.length;\n } // .### case\n else if (g1[0] === '#') {\n result.maximumFractionDigits = g1.length;\n } // .00## or .000 case\n else {\n result.minimumFractionDigits = g1.length;\n result.maximumFractionDigits = g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n\n return '';\n });\n\n if (token.options.length) {\n result = skeleton_assign(skeleton_assign({}, result), parseSignificantPrecision(token.options[0]));\n }\n\n continue;\n }\n\n if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n result = skeleton_assign(skeleton_assign({}, result), parseSignificantPrecision(token.stem));\n continue;\n }\n\n var signOpts = parseSign(token.stem);\n\n if (signOpts) {\n result = skeleton_assign(skeleton_assign({}, result), signOpts);\n }\n }\n\n return result;\n}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/intl-messageformat/lib/formatters.js\nvar formatters_extends=undefined&&undefined.__extends||function(){var _extendStatics=function extendStatics(d,b){_extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b;}||function(d,b){for(var p in b){if(b.hasOwnProperty(p))d[p]=b[p];}};return _extendStatics(d,b);};return function(d,b){_extendStatics(d,b);function __(){this.constructor=d;}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __());};}();var formatters_spreadArrays=undefined&&undefined.__spreadArrays||function(){for(var s=0,i=0,il=arguments.length;i<il;i++){s+=arguments[i].length;}for(var r=Array(s),k=0,i=0;i<il;i++){for(var a=arguments[i],j=0,jl=a.length;j<jl;j++,k++){r[k]=a[j];}}return r;};var FormatError=/** @class */function(_super){formatters_extends(FormatError,_super);function FormatError(msg,variableId){var _this=_super.call(this,msg)||this;_this.variableId=variableId;return _this;}return FormatError;}(Error);function mergeLiteral(parts){if(parts.length<2){return parts;}return parts.reduce(function(all,part){var lastPart=all[all.length-1];if(!lastPart||lastPart.type!==0/* literal */||part.type!==0/* literal */){all.push(part);}else{lastPart.value+=part.value;}return all;},[]);}// TODO(skeleton): add skeleton support\nfunction formatToParts(els,locales,formatters,formats,values,currentPluralValue,// For debugging\noriginalMessage){// Hot path for straight simple msg translations\nif(els.length===1&&isLiteralElement(els[0])){return[{type:0/* literal */,value:els[0].value}];}var result=[];for(var _i=0,els_1=els;_i<els_1.length;_i++){var el=els_1[_i];// Exit early for string parts.\nif(isLiteralElement(el)){result.push({type:0/* literal */,value:el.value});continue;}// TODO: should this part be literal type?\n// Replace `#` in plural rules with the actual numeric value.\nif(isPoundElement(el)){if(typeof currentPluralValue==='number'){result.push({type:0/* literal */,value:formatters.getNumberFormat(locales).format(currentPluralValue)});}continue;}var varName=el.value;// Enforce that all required values are provided by the caller.\nif(!(values&&varName in values)){throw new FormatError(\"The intl string context variable \\\"\"+varName+\"\\\" was not provided to the string \\\"\"+originalMessage+\"\\\"\");}var value=values[varName];if(isArgumentElement(el)){if(!value||typeof value==='string'||typeof value==='number'){value=typeof value==='string'||typeof value==='number'?String(value):'';}result.push({type:1/* argument */,value:value});continue;}// Recursively format plural and select parts' option — which can be a\n// nested pattern structure. The choosing of the option to use is\n// abstracted-by and delegated-to the part helper object.\nif(isDateElement(el)){var style=typeof el.style==='string'?formats.date[el.style]:undefined;result.push({type:0/* literal */,value:formatters.getDateTimeFormat(locales,style).format(value)});continue;}if(isTimeElement(el)){var style=typeof el.style==='string'?formats.time[el.style]:isDateTimeSkeleton(el.style)?parseDateTimeSkeleton(el.style.pattern):undefined;result.push({type:0/* literal */,value:formatters.getDateTimeFormat(locales,style).format(value)});continue;}if(isNumberElement(el)){var style=typeof el.style==='string'?formats.number[el.style]:isNumberSkeleton(el.style)?convertNumberSkeletonToNumberFormatOptions(el.style.tokens):undefined;result.push({type:0/* literal */,value:formatters.getNumberFormat(locales,style).format(value)});continue;}if(isSelectElement(el)){var opt=el.options[value]||el.options.other;if(!opt){throw new RangeError(\"Invalid values for \\\"\"+el.value+\"\\\": \\\"\"+value+\"\\\". Options are \\\"\"+Object.keys(el.options).join('\", \"')+\"\\\"\");}result.push.apply(result,formatToParts(opt.value,locales,formatters,formats,values));continue;}if(isPluralElement(el)){var opt=el.options[\"=\"+value];if(!opt){if(!Intl.PluralRules){throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\");}var rule=formatters.getPluralRules(locales,{type:el.pluralType}).select(value-(el.offset||0));opt=el.options[rule]||el.options.other;}if(!opt){throw new RangeError(\"Invalid values for \\\"\"+el.value+\"\\\": \\\"\"+value+\"\\\". Options are \\\"\"+Object.keys(el.options).join('\", \"')+\"\\\"\");}result.push.apply(result,formatToParts(opt.value,locales,formatters,formats,values,value-(el.offset||0)));continue;}}return mergeLiteral(result);}function formatToString(els,locales,formatters,formats,values,// For debugging\noriginalMessage){var parts=formatToParts(els,locales,formatters,formats,values,undefined,originalMessage);// Hot path for straight simple msg translations\nif(parts.length===1){return parts[0].value;}return parts.reduce(function(all,part){return all+=part.value;},'');}// Singleton\nvar domParser;var TOKEN_DELIMITER='@@';var TOKEN_REGEX=/@@(\\d+_\\d+)@@/g;var counter=0;function generateId(){return Date.now()+\"_\"+ ++counter;}function restoreRichPlaceholderMessage(text,objectParts){return text.split(TOKEN_REGEX).filter(Boolean).map(function(c){return objectParts[c]!=null?objectParts[c]:c;}).reduce(function(all,c){if(!all.length){all.push(c);}else if(typeof c==='string'&&typeof all[all.length-1]==='string'){all[all.length-1]+=c;}else{all.push(c);}return all;},[]);}/**\n * Not exhaustive, just for sanity check\n */var SIMPLE_XML_REGEX=/(<([0-9a-zA-Z-_]*?)>(.*?)<\\/([0-9a-zA-Z-_]*?)>)|(<[0-9a-zA-Z-_]*?\\/>)/;var TEMPLATE_ID=Date.now()+'@@';var VOID_ELEMENTS=['area','base','br','col','embed','hr','img','input','link','meta','param','source','track','wbr'];function formatHTMLElement(el,objectParts,values){var tagName=el.tagName;var outerHTML=el.outerHTML,textContent=el.textContent,childNodes=el.childNodes;// Regular text\nif(!tagName){return restoreRichPlaceholderMessage(textContent||'',objectParts);}tagName=tagName.toLowerCase();var isVoidElement=~VOID_ELEMENTS.indexOf(tagName);var formatFnOrValue=values[tagName];if(formatFnOrValue&&isVoidElement){throw new FormatError(tagName+\" is a self-closing tag and can not be used, please use another tag name.\");}if(!childNodes.length){return[outerHTML];}var chunks=Array.prototype.slice.call(childNodes).reduce(function(all,child){return all.concat(formatHTMLElement(child,objectParts,values));},[]);// Legacy HTML\nif(!formatFnOrValue){return formatters_spreadArrays([\"<\"+tagName+\">\"],chunks,[\"</\"+tagName+\">\"]);}// HTML Tag replacement\nif(typeof formatFnOrValue==='function'){return[formatFnOrValue.apply(void 0,chunks)];}return[formatFnOrValue];}function formatHTMLMessage(els,locales,formatters,formats,values,// For debugging\noriginalMessage){var parts=formatToParts(els,locales,formatters,formats,values,undefined,originalMessage);var objectParts={};var formattedMessage=parts.reduce(function(all,part){if(part.type===0/* literal */){return all+=part.value;}var id=generateId();objectParts[id]=part.value;return all+=\"\"+TOKEN_DELIMITER+id+TOKEN_DELIMITER;},'');// Not designed to filter out aggressively\nif(!SIMPLE_XML_REGEX.test(formattedMessage)){return restoreRichPlaceholderMessage(formattedMessage,objectParts);}if(!values){throw new FormatError('Message has placeholders but no values was given');}if(typeof DOMParser==='undefined'){throw new FormatError('Cannot format XML message without DOMParser');}if(!domParser){domParser=new DOMParser();}var content=domParser.parseFromString(\"<formatted-message id=\\\"\"+TEMPLATE_ID+\"\\\">\"+formattedMessage+\"</formatted-message>\",'text/html').getElementById(TEMPLATE_ID);if(!content){throw new FormatError(\"Malformed HTML message \"+formattedMessage);}var tagsToFormat=Object.keys(values).filter(function(varName){return!!content.getElementsByTagName(varName).length;});// No tags to format\nif(!tagsToFormat.length){return restoreRichPlaceholderMessage(formattedMessage,objectParts);}var caseSensitiveTags=tagsToFormat.filter(function(tagName){return tagName!==tagName.toLowerCase();});if(caseSensitiveTags.length){throw new FormatError(\"HTML tag must be lowercased but the following tags are not: \"+caseSensitiveTags.join(', '));}// We're doing this since top node is `<formatted-message/>` which does not have a formatter\nreturn Array.prototype.slice.call(content.childNodes).reduce(function(all,child){return all.concat(formatHTMLElement(child,objectParts,values));},[]);}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/intl-messageformat/lib/core.js\n/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/var core_assign=undefined&&undefined.__assign||function(){core_assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<n;i++){s=arguments[i];for(var p in s){if(Object.prototype.hasOwnProperty.call(s,p))t[p]=s[p];}}return t;};return core_assign.apply(this,arguments);};// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1,c2){if(!c2){return c1;}return core_assign(core_assign(core_assign({},c1||{}),c2||{}),Object.keys(c1).reduce(function(all,k){all[k]=core_assign(core_assign({},c1[k]),c2[k]||{});return all;},{}));}function mergeConfigs(defaultConfig,configs){if(!configs){return defaultConfig;}return Object.keys(defaultConfig).reduce(function(all,k){all[k]=mergeConfig(defaultConfig[k],configs[k]);return all;},core_assign({},defaultConfig));}function createDefaultFormatters(cache){if(cache===void 0){cache={number:{},dateTime:{},pluralRules:{}};}return{getNumberFormat:lib(Intl.NumberFormat,cache.number),getDateTimeFormat:lib(Intl.DateTimeFormat,cache.dateTime),getPluralRules:lib(Intl.PluralRules,cache.pluralRules)};}var IntlMessageFormat=/** @class */function(){function IntlMessageFormat(message,locales,overrideFormats,opts){var _this=this;if(locales===void 0){locales=IntlMessageFormat.defaultLocale;}this.formatterCache={number:{},dateTime:{},pluralRules:{}};this.format=function(values){return formatToString(_this.ast,_this.locales,_this.formatters,_this.formats,values,_this.message);};this.formatToParts=function(values){return formatToParts(_this.ast,_this.locales,_this.formatters,_this.formats,values,undefined,_this.message);};this.formatHTMLMessage=function(values){return formatHTMLMessage(_this.ast,_this.locales,_this.formatters,_this.formats,values,_this.message);};this.resolvedOptions=function(){return{locale:Intl.NumberFormat.supportedLocalesOf(_this.locales)[0]};};this.getAst=function(){return _this.ast;};if(typeof message==='string'){this.message=message;if(!IntlMessageFormat.__parse){throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');}// Parse string messages into an AST.\nthis.ast=IntlMessageFormat.__parse(message,{normalizeHashtagInPlural:false});}else{this.ast=message;}if(!Array.isArray(this.ast)){throw new TypeError('A message must be provided as a String or AST.');}// Creates a new object with the specified `formats` merged with the default\n// formats.\nthis.formats=mergeConfigs(IntlMessageFormat.formats,overrideFormats);// Defined first because it's used to build the format pattern.\nthis.locales=locales;this.formatters=opts&&opts.formatters||createDefaultFormatters(this.formatterCache);}IntlMessageFormat.defaultLocale=new Intl.NumberFormat().resolvedOptions().locale;IntlMessageFormat.__parse=parse;// Default format options used as the prototype of the `formats` provided to the\n// constructor. These are used when constructing the internal Intl.NumberFormat\n// and Intl.DateTimeFormat instances.\nIntlMessageFormat.formats={number:{currency:{style:'currency'},percent:{style:'percent'}},date:{short:{month:'numeric',day:'numeric',year:'2-digit'},medium:{month:'short',day:'numeric',year:'numeric'},long:{month:'long',day:'numeric',year:'numeric'},full:{weekday:'long',month:'long',day:'numeric',year:'numeric'}},time:{short:{hour:'numeric',minute:'numeric'},medium:{hour:'numeric',minute:'numeric',second:'numeric'},long:{hour:'numeric',minute:'numeric',second:'numeric',timeZoneName:'short'},full:{hour:'numeric',minute:'numeric',second:'numeric',timeZoneName:'short'}}};return IntlMessageFormat;}();/* harmony default export */ var core = (IntlMessageFormat);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/intl-messageformat/lib/index.js\n/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*//* harmony default export */ var intl_messageformat_lib = (core);\n// EXTERNAL MODULE: ./node_modules/@formatjs/intl-utils/lib/invariant.js\nvar invariant = __webpack_require__(5981);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/utils.js\n/*\nHTML escaping is the same as React's\n(on purpose.) Therefore, it has the following Copyright and Licensing:\n\nCopyright 2013-2014, Facebook, Inc.\nAll rights reserved.\n\nThis source code is licensed under the BSD-style license found in the LICENSE\nfile in the root directory of React's source tree.\n*/var ESCAPED_CHARS={38:'&',62:'>',60:'<',34:'"',39:'''};var UNSAFE_CHARS_REGEX=/[&><\"']/g;function utils_escape(str){return(''+str).replace(UNSAFE_CHARS_REGEX,function(match){return ESCAPED_CHARS[match.charCodeAt(0)];});}function filterProps(props,whitelist,defaults){if(defaults===void 0){defaults={};}return whitelist.reduce(function(filtered,name){if(name in props){filtered[name]=props[name];}else if(name in defaults){filtered[name]=defaults[name];}return filtered;},{});}function invariantIntlContext(intl){(0,invariant/* invariant */.k)(intl,'[React Intl] Could not find required `intl` object. '+'<IntlProvider> needs to exist in the component ancestry.');}function createError(message,exception){var eMsg=exception?\"\\n\"+exception.stack:'';return\"[React Intl] \"+message+eMsg;}function defaultErrorHandler(error){if(false){}}var DEFAULT_INTL_CONFIG={formats:{},messages:{},timeZone:undefined,textComponent:react.Fragment,defaultLocale:'en',defaultFormats:{},onError:defaultErrorHandler};function createIntlCache(){return{dateTime:{},number:{},message:{},relativeTime:{},pluralRules:{},list:{},displayNames:{}};}/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */function createFormatters(cache){if(cache===void 0){cache=createIntlCache();}var RelativeTimeFormat=Intl.RelativeTimeFormat;var ListFormat=Intl.ListFormat;var DisplayNames=Intl.DisplayNames;return{getDateTimeFormat:lib(Intl.DateTimeFormat,cache.dateTime),getNumberFormat:lib(Intl.NumberFormat,cache.number),getMessageFormat:lib(intl_messageformat_lib,cache.message),getRelativeTimeFormat:lib(RelativeTimeFormat,cache.relativeTime),getPluralRules:lib(Intl.PluralRules,cache.pluralRules),getListFormat:lib(ListFormat,cache.list),getDisplayNames:lib(DisplayNames,cache.displayNames)};}function getNamedFormat(formats,type,name,onError){var formatType=formats&&formats[type];var format;if(formatType){format=formatType[name];}if(format){return format;}onError(createError(\"No \"+type+\" format named: \"+name));}\n// EXTERNAL MODULE: ./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\nvar hoist_non_react_statics_cjs = __webpack_require__(5706);\nvar hoist_non_react_statics_cjs_default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics_cjs);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/injectIntl.js\n// Since rollup cannot deal with namespace being a function,\n// this is to interop with TypeScript since `invariant`\n// does not export a default\n// https://github.com/rollup/rollup/issues/1267\nvar hoistNonReactStatics=(hoist_non_react_statics_cjs_default())||hoist_non_react_statics_cjs;function getDisplayName(Component){return Component.displayName||Component.name||'Component';}// TODO: We should provide initial value here\nvar IntlContext=/*#__PURE__*/react.createContext(null);var IntlConsumer=IntlContext.Consumer,IntlProvider=IntlContext.Provider;var Provider=IntlProvider;var Context=IntlContext;function injectIntl(WrappedComponent,options){var _ref=options||{},_ref$intlPropName=_ref.intlPropName,intlPropName=_ref$intlPropName===void 0?'intl':_ref$intlPropName,_ref$forwardRef=_ref.forwardRef,forwardRef=_ref$forwardRef===void 0?false:_ref$forwardRef,_ref$enforceContext=_ref.enforceContext,enforceContext=_ref$enforceContext===void 0?true:_ref$enforceContext;var WithIntl=function WithIntl(props){return/*#__PURE__*/react.createElement(IntlConsumer,null,function(intl){var _Object$assign;if(enforceContext){invariantIntlContext(intl);}return/*#__PURE__*/react.createElement(WrappedComponent,Object.assign({},props,(_Object$assign={},_Object$assign[intlPropName]=intl,_Object$assign),{ref:forwardRef?props.forwardedRef:null}));});};WithIntl.displayName=\"injectIntl(\"+getDisplayName(WrappedComponent)+\")\";WithIntl.WrappedComponent=WrappedComponent;if(forwardRef){return hoistNonReactStatics(/*#__PURE__*/react.forwardRef(function(props,ref){return/*#__PURE__*/react.createElement(WithIntl,Object.assign({},props,{forwardedRef:ref}));}),WrappedComponent);}return hoistNonReactStatics(WithIntl,WrappedComponent);}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/createFormattedComponent.js\nvar __rest=undefined&&undefined.__rest||function(s,e){var t={};for(var p in s){if(Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0)t[p]=s[p];}if(s!=null&&typeof Object.getOwnPropertySymbols===\"function\")for(var i=0,p=Object.getOwnPropertySymbols(s);i<p.length;i++){if(e.indexOf(p[i])<0&&Object.prototype.propertyIsEnumerable.call(s,p[i]))t[p[i]]=s[p[i]];}return t;};var DisplayName;(function(DisplayName){DisplayName[\"formatDate\"]=\"FormattedDate\";DisplayName[\"formatTime\"]=\"FormattedTime\";DisplayName[\"formatNumber\"]=\"FormattedNumber\";DisplayName[\"formatList\"]=\"FormattedList\";// Note that this DisplayName is the locale display name, not to be confused with\n// the name of the enum, which is for React component display name in dev tools.\nDisplayName[\"formatDisplayName\"]=\"FormattedDisplayName\";})(DisplayName||(DisplayName={}));var DisplayNameParts;(function(DisplayNameParts){DisplayNameParts[\"formatDate\"]=\"FormattedDateParts\";DisplayNameParts[\"formatTime\"]=\"FormattedTimeParts\";DisplayNameParts[\"formatNumber\"]=\"FormattedNumberParts\";DisplayNameParts[\"formatList\"]=\"FormattedListParts\";})(DisplayNameParts||(DisplayNameParts={}));var FormattedNumberParts=function FormattedNumberParts(props){return/*#__PURE__*/react.createElement(Context.Consumer,null,function(intl){invariantIntlContext(intl);var value=props.value,children=props.children,formatProps=__rest(props,[\"value\",\"children\"]);return children(intl.formatNumberToParts(value,formatProps));});};FormattedNumberParts.displayName='FormattedNumberParts';function createFormattedDateTimePartsComponent(name){var ComponentParts=function ComponentParts(props){return/*#__PURE__*/react.createElement(Context.Consumer,null,function(intl){invariantIntlContext(intl);var value=props.value,children=props.children,formatProps=__rest(props,[\"value\",\"children\"]);var date=typeof value==='string'?new Date(value||0):value;var formattedParts=name==='formatDate'?intl.formatDateToParts(date,formatProps):intl.formatTimeToParts(date,formatProps);return children(formattedParts);});};ComponentParts.displayName=DisplayNameParts[name];return ComponentParts;}function createFormattedComponent(name){var Component=function Component(props){return/*#__PURE__*/react.createElement(Context.Consumer,null,function(intl){invariantIntlContext(intl);var value=props.value,children=props.children,formatProps=__rest(props,[\"value\",\"children\"]);// TODO: fix TS type definition for localeMatcher upstream\nvar formattedValue=intl[name](value,formatProps);if(typeof children==='function'){return children(formattedValue);}var Text=intl.textComponent||react.Fragment;return/*#__PURE__*/react.createElement(Text,null,formattedValue);});};Component.displayName=DisplayName[name];return Component;}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/useIntl.js\nfunction useIntl(){var intl=(0,react.useContext)(Context);invariantIntlContext(intl);return intl;}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\nvar inheritsLoose = __webpack_require__(1788);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/number.js\nvar NUMBER_FORMAT_OPTIONS=['localeMatcher','style','currency','currencyDisplay','unit','unitDisplay','useGrouping','minimumIntegerDigits','minimumFractionDigits','maximumFractionDigits','minimumSignificantDigits','maximumSignificantDigits',// Unified NumberFormat (Stage 3 as of 10/22/19)\n'compactDisplay','currencyDisplay','currencySign','notation','signDisplay','unit','unitDisplay'];function getFormatter(_ref,getNumberFormat,options){var locale=_ref.locale,formats=_ref.formats,onError=_ref.onError;if(options===void 0){options={};}var _options=options,format=_options.format;var defaults=format&&getNamedFormat(formats,'number',format,onError)||{};var filteredOptions=filterProps(options,NUMBER_FORMAT_OPTIONS,defaults);return getNumberFormat(locale,filteredOptions);}function formatNumber(config,getNumberFormat,value,options){if(options===void 0){options={};}try{return getFormatter(config,getNumberFormat,options).format(value);}catch(e){config.onError(createError('Error formatting number.',e));}return String(value);}function formatNumberToParts(config,getNumberFormat,value,options){if(options===void 0){options={};}try{return getFormatter(config,getNumberFormat,options).formatToParts(value);}catch(e){config.onError(createError('Error formatting number.',e));}return[];}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/relativeTime.js\nvar RELATIVE_TIME_FORMAT_OPTIONS=['numeric','style'];function relativeTime_getFormatter(_ref,getRelativeTimeFormat,options){var locale=_ref.locale,formats=_ref.formats,onError=_ref.onError;if(options===void 0){options={};}var _options=options,format=_options.format;var defaults=!!format&&getNamedFormat(formats,'relative',format,onError)||{};var filteredOptions=filterProps(options,RELATIVE_TIME_FORMAT_OPTIONS,defaults);return getRelativeTimeFormat(locale,filteredOptions);}function formatRelativeTime(config,getRelativeTimeFormat,value,unit,options){if(options===void 0){options={};}if(!unit){unit='second';}var RelativeTimeFormat=Intl.RelativeTimeFormat;if(!RelativeTimeFormat){config.onError(createError(\"Intl.RelativeTimeFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-relativetimeformat\\\"\\n\"));}try{return relativeTime_getFormatter(config,getRelativeTimeFormat,options).format(value,unit);}catch(e){config.onError(createError('Error formatting relative time.',e));}return String(value);}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/dateTime.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var DATE_TIME_FORMAT_OPTIONS=['localeMatcher','formatMatcher','timeZone','hour12','weekday','era','year','month','day','hour','minute','second','timeZoneName'];function dateTime_getFormatter(_ref,type,getDateTimeFormat,options){var locale=_ref.locale,formats=_ref.formats,onError=_ref.onError,timeZone=_ref.timeZone;if(options===void 0){options={};}var _options=options,format=_options.format;var defaults=Object.assign(Object.assign({},timeZone&&{timeZone:timeZone}),format&&getNamedFormat(formats,type,format,onError));var filteredOptions=filterProps(options,DATE_TIME_FORMAT_OPTIONS,defaults);if(type==='time'&&!filteredOptions.hour&&!filteredOptions.minute&&!filteredOptions.second){// Add default formatting options if hour, minute, or second isn't defined.\nfilteredOptions=Object.assign(Object.assign({},filteredOptions),{hour:'numeric',minute:'numeric'});}return getDateTimeFormat(locale,filteredOptions);}function formatDate(config,getDateTimeFormat,value,options){if(options===void 0){options={};}var date=typeof value==='string'?new Date(value||0):value;try{return dateTime_getFormatter(config,'date',getDateTimeFormat,options).format(date);}catch(e){config.onError(createError('Error formatting date.',e));}return String(date);}function formatTime(config,getDateTimeFormat,value,options){if(options===void 0){options={};}var date=typeof value==='string'?new Date(value||0):value;try{return dateTime_getFormatter(config,'time',getDateTimeFormat,options).format(date);}catch(e){config.onError(createError('Error formatting time.',e));}return String(date);}function formatDateToParts(config,getDateTimeFormat,value,options){if(options===void 0){options={};}var date=typeof value==='string'?new Date(value||0):value;try{return dateTime_getFormatter(config,'date',getDateTimeFormat,options).formatToParts(date);}catch(e){config.onError(createError('Error formatting date.',e));}return[];}function formatTimeToParts(config,getDateTimeFormat,value,options){if(options===void 0){options={};}var date=typeof value==='string'?new Date(value||0):value;try{return dateTime_getFormatter(config,'time',getDateTimeFormat,options).formatToParts(date);}catch(e){config.onError(createError('Error formatting time.',e));}return[];}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/plural.js\nvar PLURAL_FORMAT_OPTIONS=['localeMatcher','type'];function formatPlural(_ref,getPluralRules,value,options){var locale=_ref.locale,onError=_ref.onError;if(options===void 0){options={};}if(!Intl.PluralRules){onError(createError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\"));}var filteredOptions=filterProps(options,PLURAL_FORMAT_OPTIONS);try{return getPluralRules(locale,filteredOptions).select(value);}catch(e){onError(createError('Error formatting plural.',e));}return'other';}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 3 modules\nvar toConsumableArray = __webpack_require__(7329);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/message.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */function setTimeZoneInOptions(opts,timeZone){return Object.keys(opts).reduce(function(all,k){all[k]=Object.assign({timeZone:timeZone},opts[k]);return all;},{});}function deepMergeOptions(opts1,opts2){var keys=Object.keys(Object.assign(Object.assign({},opts1),opts2));return keys.reduce(function(all,k){all[k]=Object.assign(Object.assign({},opts1[k]||{}),opts2[k]||{});return all;},{});}function deepMergeFormatsAndSetTimeZone(f1,timeZone){if(!timeZone){return f1;}var mfFormats=intl_messageformat_lib.formats;return Object.assign(Object.assign(Object.assign({},mfFormats),f1),{date:deepMergeOptions(setTimeZoneInOptions(mfFormats.date,timeZone),setTimeZoneInOptions(f1.date||{},timeZone)),time:deepMergeOptions(setTimeZoneInOptions(mfFormats.time,timeZone),setTimeZoneInOptions(f1.time||{},timeZone))});}var prepareIntlMessageFormatHtmlOutput=function prepareIntlMessageFormatHtmlOutput(chunks){return react.createElement.apply(react_namespaceObject,[react.Fragment,null].concat((0,toConsumableArray/* default */.Z)(chunks)));};function formatMessage(_ref,state,messageDescriptor,values){var locale=_ref.locale,formats=_ref.formats,messages=_ref.messages,defaultLocale=_ref.defaultLocale,defaultFormats=_ref.defaultFormats,onError=_ref.onError,timeZone=_ref.timeZone;if(messageDescriptor===void 0){messageDescriptor={id:''};}if(values===void 0){values={};}var _messageDescriptor=messageDescriptor,id=_messageDescriptor.id,defaultMessage=_messageDescriptor.defaultMessage;// `id` is a required field of a Message Descriptor.\n(0,invariant/* invariant */.k)(!!id,'[React Intl] An `id` must be provided to format a message.');var message=messages&&messages[String(id)];formats=deepMergeFormatsAndSetTimeZone(formats,timeZone);defaultFormats=deepMergeFormatsAndSetTimeZone(defaultFormats,timeZone);var formattedMessageParts=[];if(message){try{var formatter=state.getMessageFormat(message,locale,formats,{formatters:state});formattedMessageParts=formatter.formatHTMLMessage(values);}catch(e){onError(createError(\"Error formatting message: \\\"\"+id+\"\\\" for locale: \\\"\"+locale+\"\\\"\"+(defaultMessage?', using default message as fallback.':''),e));}}else{// This prevents warnings from littering the console in development\n// when no `messages` are passed into the <IntlProvider> for the\n// default locale, and a default message is in the source.\nif(!defaultMessage||locale&&locale.toLowerCase()!==defaultLocale.toLowerCase()){onError(createError(\"Missing message: \\\"\"+id+\"\\\" for locale: \\\"\"+locale+\"\\\"\"+(defaultMessage?', using default message as fallback.':'')));}}if(!formattedMessageParts.length&&defaultMessage){try{var _formatter=state.getMessageFormat(defaultMessage,defaultLocale,defaultFormats);formattedMessageParts=_formatter.formatHTMLMessage(values);}catch(e){onError(createError(\"Error formatting the default message for: \\\"\"+id+\"\\\"\",e));}}if(!formattedMessageParts.length){onError(createError(\"Cannot format message: \\\"\"+id+\"\\\", \"+(\"using message \"+(message||defaultMessage?'source':'id')+\" as fallback.\")));if(typeof message==='string'){return message||defaultMessage||String(id);}return defaultMessage||String(id);}if(formattedMessageParts.length===1&&typeof formattedMessageParts[0]==='string'){return formattedMessageParts[0]||defaultMessage||String(id);}return prepareIntlMessageFormatHtmlOutput(formattedMessageParts);}function message_formatHTMLMessage(config,state,messageDescriptor,rawValues){if(messageDescriptor===void 0){messageDescriptor={id:''};}if(rawValues===void 0){rawValues={};}// Process all the values before they are used when formatting the ICU\n// Message string. Since the formatted message might be injected via\n// `innerHTML`, all String-based values need to be HTML-escaped.\nvar escapedValues=Object.keys(rawValues).reduce(function(escaped,name){var value=rawValues[name];escaped[name]=typeof value==='string'?utils_escape(value):value;return escaped;},{});return formatMessage(config,state,messageDescriptor,escapedValues);}\n// EXTERNAL MODULE: ./node_modules/shallow-equal/objects/index.js\nvar objects = __webpack_require__(9108);\nvar objects_default = /*#__PURE__*/__webpack_require__.n(objects);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/list.js\nvar LIST_FORMAT_OPTIONS=['localeMatcher','type','style'];var now=Date.now();function generateToken(i){return now+\"_\"+i+\"_\"+now;}function formatList(_ref,getListFormat,values,options){var locale=_ref.locale,onError=_ref.onError;if(options===void 0){options={};}var ListFormat=Intl.ListFormat;if(!ListFormat){onError(createError(\"Intl.ListFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-listformat\\\"\\n\"));}var filteredOptions=filterProps(options,LIST_FORMAT_OPTIONS);try{var richValues={};var serializedValues=values.map(function(v,i){if(typeof v==='object'){var id=generateToken(i);richValues[id]=v;return id;}return String(v);});if(!Object.keys(richValues).length){return getListFormat(locale,filteredOptions).format(serializedValues);}var parts=getListFormat(locale,filteredOptions).formatToParts(serializedValues);return parts.reduce(function(all,el){var val=el.value;if(richValues[val]){all.push(richValues[val]);}else if(typeof all[all.length-1]==='string'){all[all.length-1]+=val;}else{all.push(val);}return all;},[]);}catch(e){onError(createError('Error formatting list.',e));}return values;}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/displayName.js\nvar DISPLAY_NAMES_OPTONS=['localeMatcher','style','type','fallback'];function formatDisplayName(_ref,getDisplayNames,value,options){var locale=_ref.locale,onError=_ref.onError;if(options===void 0){options={};}var DisplayNames=Intl.DisplayNames;if(!DisplayNames){onError(createError(\"Intl.DisplayNames is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-displaynames\\\"\\n\"));}var filteredOptions=filterProps(options,DISPLAY_NAMES_OPTONS);try{return getDisplayNames(locale,filteredOptions).of(value);}catch(e){onError(createError('Error formatting display name.',e));}}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/provider.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var shallowEquals=(objects_default())||objects;function processIntlConfig(config){return{locale:config.locale,timeZone:config.timeZone,formats:config.formats,textComponent:config.textComponent,messages:config.messages,defaultLocale:config.defaultLocale,defaultFormats:config.defaultFormats,onError:config.onError};}/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */function createIntl(config,cache){var formatters=createFormatters(cache);var resolvedConfig=Object.assign(Object.assign({},DEFAULT_INTL_CONFIG),config);var locale=resolvedConfig.locale,defaultLocale=resolvedConfig.defaultLocale,onError=resolvedConfig.onError;if(!locale){if(onError){onError(createError(\"\\\"locale\\\" was not configured, using \\\"\"+defaultLocale+\"\\\" as fallback. See https://github.com/formatjs/react-intl/blob/master/docs/API.md#intlshape for more details\"));}// Since there's no registered locale data for `locale`, this will\n// fallback to the `defaultLocale` to make sure things can render.\n// The `messages` are overridden to the `defaultProps` empty object\n// to maintain referential equality across re-renders. It's assumed\n// each <FormattedMessage> contains a `defaultMessage` prop.\nresolvedConfig.locale=resolvedConfig.defaultLocale||'en';}else if(!Intl.NumberFormat.supportedLocalesOf(locale).length&&onError){onError(createError(\"Missing locale data for locale: \\\"\"+locale+\"\\\" in Intl.NumberFormat. Using default locale: \\\"\"+defaultLocale+\"\\\" as fallback. See https://github.com/formatjs/react-intl/blob/master/docs/Getting-Started.md#runtime-requirements for more details\"));}else if(!Intl.DateTimeFormat.supportedLocalesOf(locale).length&&onError){onError(createError(\"Missing locale data for locale: \\\"\"+locale+\"\\\" in Intl.DateTimeFormat. Using default locale: \\\"\"+defaultLocale+\"\\\" as fallback. See https://github.com/formatjs/react-intl/blob/master/docs/Getting-Started.md#runtime-requirements for more details\"));}return Object.assign(Object.assign({},resolvedConfig),{formatters:formatters,formatNumber:formatNumber.bind(null,resolvedConfig,formatters.getNumberFormat),formatNumberToParts:formatNumberToParts.bind(null,resolvedConfig,formatters.getNumberFormat),formatRelativeTime:formatRelativeTime.bind(null,resolvedConfig,formatters.getRelativeTimeFormat),formatDate:formatDate.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatDateToParts:formatDateToParts.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatTime:formatTime.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatTimeToParts:formatTimeToParts.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatPlural:formatPlural.bind(null,resolvedConfig,formatters.getPluralRules),formatMessage:formatMessage.bind(null,resolvedConfig,formatters),formatHTMLMessage:message_formatHTMLMessage.bind(null,resolvedConfig,formatters),formatList:formatList.bind(null,resolvedConfig,formatters.getListFormat),formatDisplayName:formatDisplayName.bind(null,resolvedConfig,formatters.getDisplayNames)});}var provider_IntlProvider=/*#__PURE__*/function(_React$PureComponent){(0,inheritsLoose/* default */.Z)(IntlProvider,_React$PureComponent);function IntlProvider(){var _this;_this=_React$PureComponent.apply(this,arguments)||this;_this.cache=createIntlCache();_this.state={cache:_this.cache,intl:createIntl(processIntlConfig(_this.props),_this.cache),prevConfig:processIntlConfig(_this.props)};return _this;}IntlProvider.getDerivedStateFromProps=function getDerivedStateFromProps(props,_ref){var prevConfig=_ref.prevConfig,cache=_ref.cache;var config=processIntlConfig(props);if(!shallowEquals(prevConfig,config)){return{intl:createIntl(config,cache),prevConfig:config};}return null;};var _proto=IntlProvider.prototype;_proto.render=function render(){invariantIntlContext(this.state.intl);return/*#__PURE__*/react.createElement(Provider,{value:this.state.intl},this.props.children);};return IntlProvider;}(react.PureComponent);provider_IntlProvider.displayName='IntlProvider';provider_IntlProvider.defaultProps=DEFAULT_INTL_CONFIG;\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/relative.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var MINUTE=60;var HOUR=60*60;var DAY=60*60*24;function selectUnit(seconds){var absValue=Math.abs(seconds);if(absValue<MINUTE){return'second';}if(absValue<HOUR){return'minute';}if(absValue<DAY){return'hour';}return'day';}function getDurationInSeconds(unit){switch(unit){case'second':return 1;case'minute':return MINUTE;case'hour':return HOUR;default:return DAY;}}function valueToSeconds(value,unit){if(!value){return 0;}switch(unit){case'second':return value;case'minute':return value*MINUTE;default:return value*HOUR;}}var INCREMENTABLE_UNITS=['second','minute','hour'];function canIncrement(unit){if(unit===void 0){unit='second';}return INCREMENTABLE_UNITS.includes(unit);}var FormattedRelativeTime=/*#__PURE__*/function(_React$PureComponent){(0,inheritsLoose/* default */.Z)(FormattedRelativeTime,_React$PureComponent);function FormattedRelativeTime(props){var _this;_this=_React$PureComponent.call(this,props)||this;// Public for testing\n_this._updateTimer=null;_this.state={prevUnit:_this.props.unit,prevValue:_this.props.value,currentValueInSeconds:canIncrement(_this.props.unit)?valueToSeconds(_this.props.value,_this.props.unit):0};(0,invariant/* invariant */.k)(!props.updateIntervalInSeconds||!!(props.updateIntervalInSeconds&&canIncrement(props.unit)),'Cannot schedule update with unit longer than hour');return _this;}var _proto=FormattedRelativeTime.prototype;_proto.scheduleNextUpdate=function scheduleNextUpdate(_ref,_ref2){var _this2=this;var updateIntervalInSeconds=_ref.updateIntervalInSeconds,unit=_ref.unit;var currentValueInSeconds=_ref2.currentValueInSeconds;clearTimeout(this._updateTimer);this._updateTimer=null;// If there's no interval and we cannot increment this unit, do nothing\nif(!updateIntervalInSeconds||!canIncrement(unit)){return;}// Figure out the next interesting time\nvar nextValueInSeconds=currentValueInSeconds-updateIntervalInSeconds;var nextUnit=selectUnit(nextValueInSeconds);// We've reached the max auto incrementable unit, don't schedule another update\nif(nextUnit==='day'){return;}var unitDuration=getDurationInSeconds(nextUnit);var remainder=nextValueInSeconds%unitDuration;var prevInterestingValueInSeconds=nextValueInSeconds-remainder;var nextInterestingValueInSeconds=prevInterestingValueInSeconds>=currentValueInSeconds?prevInterestingValueInSeconds-unitDuration:prevInterestingValueInSeconds;var delayInSeconds=Math.abs(nextInterestingValueInSeconds-currentValueInSeconds);this._updateTimer=setTimeout(function(){return _this2.setState({currentValueInSeconds:nextInterestingValueInSeconds});},delayInSeconds*1e3);};_proto.componentDidMount=function componentDidMount(){this.scheduleNextUpdate(this.props,this.state);};_proto.componentDidUpdate=function componentDidUpdate(){this.scheduleNextUpdate(this.props,this.state);};_proto.componentWillUnmount=function componentWillUnmount(){clearTimeout(this._updateTimer);this._updateTimer=null;};FormattedRelativeTime.getDerivedStateFromProps=function getDerivedStateFromProps(props,state){if(props.unit!==state.prevUnit||props.value!==state.prevValue){return{prevValue:props.value,prevUnit:props.unit,currentValueInSeconds:canIncrement(props.unit)?valueToSeconds(props.value,props.unit):0};}return null;};_proto.render=function render(){var _this3=this;return/*#__PURE__*/react.createElement(Context.Consumer,null,function(intl){invariantIntlContext(intl);var formatRelativeTime=intl.formatRelativeTime,Text=intl.textComponent;var _this3$props=_this3.props,children=_this3$props.children,value=_this3$props.value,unit=_this3$props.unit,updateIntervalInSeconds=_this3$props.updateIntervalInSeconds;var currentValueInSeconds=_this3.state.currentValueInSeconds;var currentValue=value||0;var currentUnit=unit;if(canIncrement(unit)&&typeof currentValueInSeconds==='number'&&updateIntervalInSeconds){currentUnit=selectUnit(currentValueInSeconds);var unitDuration=getDurationInSeconds(currentUnit);currentValue=Math.round(currentValueInSeconds/unitDuration);}var formattedRelativeTime=formatRelativeTime(currentValue,currentUnit,Object.assign({},_this3.props));if(typeof children==='function'){return children(formattedRelativeTime);}if(Text){return/*#__PURE__*/react.createElement(Text,null,formattedRelativeTime);}return formattedRelativeTime;});};return FormattedRelativeTime;}(react.PureComponent);FormattedRelativeTime.displayName='FormattedRelativeTime';FormattedRelativeTime.defaultProps={value:0,unit:'second'};/* harmony default export */ var relative = (FormattedRelativeTime);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/plural.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var FormattedPlural=function FormattedPlural(props){var value=props.value,other=props.other,children=props.children,_props$intl=props.intl,formatPlural=_props$intl.formatPlural,Text=_props$intl.textComponent;var pluralCategory=formatPlural(value,props);var formattedPlural=props[pluralCategory]||other;if(typeof children==='function'){return children(formattedPlural);}if(Text){return/*#__PURE__*/react.createElement(Text,null,formattedPlural);}// Work around @types/react where React.FC cannot return string\nreturn formattedPlural;};FormattedPlural.defaultProps={type:'cardinal'};FormattedPlural.displayName='FormattedPlural';/* harmony default export */ var plural = (injectIntl(FormattedPlural));\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/message.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var message_rest=undefined&&undefined.__rest||function(s,e){var t={};for(var p in s){if(Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0)t[p]=s[p];}if(s!=null&&typeof Object.getOwnPropertySymbols===\"function\")for(var i=0,p=Object.getOwnPropertySymbols(s);i<p.length;i++){if(e.indexOf(p[i])<0&&Object.prototype.propertyIsEnumerable.call(s,p[i]))t[p[i]]=s[p[i]];}return t;};var message_shallowEquals=(objects_default())||objects;var defaultFormatMessage=function defaultFormatMessage(descriptor,values){if(false){}return formatMessage(Object.assign(Object.assign({},DEFAULT_INTL_CONFIG),{locale:'en'}),createFormatters(),descriptor,values);};var FormattedMessage=/*#__PURE__*/function(_React$Component){(0,inheritsLoose/* default */.Z)(FormattedMessage,_React$Component);function FormattedMessage(){return _React$Component.apply(this,arguments)||this;}var _proto=FormattedMessage.prototype;_proto.shouldComponentUpdate=function shouldComponentUpdate(nextProps){var _a=this.props,values=_a.values,otherProps=message_rest(_a,[\"values\"]);var nextValues=nextProps.values,nextOtherProps=message_rest(nextProps,[\"values\"]);return!message_shallowEquals(nextValues,values)||!message_shallowEquals(otherProps,nextOtherProps);};_proto.render=function render(){var _this=this;return/*#__PURE__*/react.createElement(Context.Consumer,null,function(intl){if(!_this.props.defaultMessage){invariantIntlContext(intl);}var _ref=intl||{},_ref$formatMessage=_ref.formatMessage,formatMessage=_ref$formatMessage===void 0?defaultFormatMessage:_ref$formatMessage,_ref$textComponent=_ref.textComponent,Text=_ref$textComponent===void 0?react.Fragment:_ref$textComponent;var _this$props=_this.props,id=_this$props.id,description=_this$props.description,defaultMessage=_this$props.defaultMessage,values=_this$props.values,children=_this$props.children,_this$props$tagName=_this$props.tagName,Component=_this$props$tagName===void 0?Text:_this$props$tagName;var descriptor={id:id,description:description,defaultMessage:defaultMessage};var nodes=formatMessage(descriptor,values);if(!Array.isArray(nodes)){nodes=[nodes];}if(typeof children==='function'){return children.apply(void 0,(0,toConsumableArray/* default */.Z)(nodes));}if(Component){// Needs to use `createElement()` instead of JSX, otherwise React will\n// warn about a missing `key` prop with rich-text message formatting.\nreturn react.createElement.apply(react_namespaceObject,[Component,null].concat((0,toConsumableArray/* default */.Z)(nodes)));}return nodes;});};return FormattedMessage;}(react.Component);FormattedMessage.displayName='FormattedMessage';FormattedMessage.defaultProps={values:{}};/* harmony default export */ var message = (FormattedMessage);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/html-message.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var FormattedHTMLMessage=/*#__PURE__*/function(_FormattedMessage){(0,inheritsLoose/* default */.Z)(FormattedHTMLMessage,_FormattedMessage);function FormattedHTMLMessage(){return _FormattedMessage.apply(this,arguments)||this;}var _proto=FormattedHTMLMessage.prototype;_proto.render=function render(){var _this=this;return/*#__PURE__*/react.createElement(Context.Consumer,null,function(intl){if(!_this.props.defaultMessage){invariantIntlContext(intl);}var formatHTMLMessage=intl.formatHTMLMessage,textComponent=intl.textComponent;var _this$props=_this.props,id=_this$props.id,description=_this$props.description,defaultMessage=_this$props.defaultMessage,rawValues=_this$props.values,children=_this$props.children;var Component=_this.props.tagName;// This is bc of TS3.3 doesn't recognize `defaultProps`\nif(!Component){Component=textComponent||'span';}var descriptor={id:id,description:description,defaultMessage:defaultMessage};var formattedHTMLMessage=formatHTMLMessage(descriptor,rawValues);if(typeof children==='function'){return children(formattedHTMLMessage);}// Since the message presumably has HTML in it, we need to set\n// `innerHTML` in order for it to be rendered and not escaped by React.\n// To be safe, all string prop values were escaped when formatting the\n// message. It is assumed that the message is not UGC, and came from the\n// developer making it more like a template.\n//\n// Note: There's a perf impact of using this component since there's no\n// way for React to do its virtual DOM diffing.\nvar html={__html:formattedHTMLMessage};return/*#__PURE__*/react.createElement(Component,{dangerouslySetInnerHTML:html});});};return FormattedHTMLMessage;}(message);FormattedHTMLMessage.displayName='FormattedHTMLMessage';FormattedHTMLMessage.defaultProps=Object.assign(Object.assign({},message.defaultProps),{tagName:'span'});/* harmony default export */ var html_message = (FormattedHTMLMessage);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/index.js\nfunction defineMessages(msgs){return msgs;}// IMPORTANT: Explicit here to prevent api-extractor from outputing `import('./types').CustomFormatConfig`\nvar FormattedDate=createFormattedComponent('formatDate');var FormattedTime=createFormattedComponent('formatTime');var FormattedNumber=createFormattedComponent('formatNumber');var FormattedList=createFormattedComponent('formatList');var FormattedDisplayName=createFormattedComponent('formatDisplayName');var FormattedDateParts=createFormattedDateTimePartsComponent('formatDate');var FormattedTimeParts=createFormattedDateTimePartsComponent('formatTime');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9pbnRsLW1lc3NhZ2Vmb3JtYXQtcGFyc2VyL2xpYi90eXBlcy5qcz80ZGIxIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC1wYXJzZXIvbGliL3BhcnNlci5qcz9hMGFmIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC1wYXJzZXIvbGliL25vcm1hbGl6ZS5qcz9jZjlhIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC1wYXJzZXIvbGliL2luZGV4LmpzPzMxMzMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvaW50bC1mb3JtYXQtY2FjaGUvbGliL2luZGV4LmpzP2E2NzciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvaW50bC1tZXNzYWdlZm9ybWF0LXBhcnNlci9saWIvc2tlbGV0b24uanM/NGM4NCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvbm9kZV9tb2R1bGVzL2ludGwtbWVzc2FnZWZvcm1hdC9saWIvZm9ybWF0dGVycy5qcz8xMTA0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4taW50bC9ub2RlX21vZHVsZXMvaW50bC1tZXNzYWdlZm9ybWF0L2xpYi9jb3JlLmpzPzUxYWQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2F0c2J5LXBsdWdpbi1pbnRsL25vZGVfbW9kdWxlcy9pbnRsLW1lc3NhZ2Vmb3JtYXQvbGliL2luZGV4LmpzPzQ5ZGQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2F0c2J5LXBsdWdpbi1pbnRsL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi91dGlscy5qcz9lMzdkIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4taW50bC9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvY29tcG9uZW50cy9pbmplY3RJbnRsLmpzPzcyZDkiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2F0c2J5LXBsdWdpbi1pbnRsL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9jb21wb25lbnRzL2NyZWF0ZUZvcm1hdHRlZENvbXBvbmVudC5qcz82ZWVmIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4taW50bC9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvY29tcG9uZW50cy91c2VJbnRsLmpzP2M1ODYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2F0c2J5LXBsdWdpbi1pbnRsL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9mb3JtYXR0ZXJzL251bWJlci5qcz9mMDAzIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4taW50bC9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvZm9ybWF0dGVycy9yZWxhdGl2ZVRpbWUuanM/MjJlMSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2Zvcm1hdHRlcnMvZGF0ZVRpbWUuanM/MTBmYyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2Zvcm1hdHRlcnMvcGx1cmFsLmpzP2I0ZjQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2F0c2J5LXBsdWdpbi1pbnRsL25vZGVfbW9kdWxlcy9yZWFjdC1pbnRsL2xpYi9mb3JtYXR0ZXJzL21lc3NhZ2UuanM/MTlhNCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2Zvcm1hdHRlcnMvbGlzdC5qcz9jYTE1Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4taW50bC9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvZm9ybWF0dGVycy9kaXNwbGF5TmFtZS5qcz9mMzJmIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4taW50bC9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvY29tcG9uZW50cy9wcm92aWRlci5qcz80YTU0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4taW50bC9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvY29tcG9uZW50cy9yZWxhdGl2ZS5qcz85NmNiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4taW50bC9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvY29tcG9uZW50cy9wbHVyYWwuanM/ZmNlNiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2NvbXBvbmVudHMvbWVzc2FnZS5qcz80YWFjIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dhdHNieS1wbHVnaW4taW50bC9ub2RlX21vZHVsZXMvcmVhY3QtaW50bC9saWIvY29tcG9uZW50cy9odG1sLW1lc3NhZ2UuanM/YzM5MCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvbm9kZV9tb2R1bGVzL3JlYWN0LWludGwvbGliL2luZGV4LmpzP2Q5YjEiXSwibmFtZXMiOlsiX19leHRlbmRzIiwiZXh0ZW5kU3RhdGljcyIsImQiLCJiIiwiT2JqZWN0Iiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJBcnJheSIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsIl9fIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJjcmVhdGUiLCJfX3NwcmVhZEFycmF5cyIsInMiLCJpIiwiaWwiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJyIiwiayIsImEiLCJqIiwiamwiLCJGb3JtYXRFcnJvciIsIl9zdXBlciIsIm1zZyIsInZhcmlhYmxlSWQiLCJfdGhpcyIsImNhbGwiLCJFcnJvciIsIm1lcmdlTGl0ZXJhbCIsInBhcnRzIiwicmVkdWNlIiwiYWxsIiwicGFydCIsImxhc3RQYXJ0IiwidHlwZSIsInB1c2giLCJ2YWx1ZSIsImZvcm1hdFRvUGFydHMiLCJlbHMiLCJsb2NhbGVzIiwiZm9ybWF0dGVycyIsImZvcm1hdHMiLCJ2YWx1ZXMiLCJjdXJyZW50UGx1cmFsVmFsdWUiLCJvcmlnaW5hbE1lc3NhZ2UiLCJpc0xpdGVyYWxFbGVtZW50IiwicmVzdWx0IiwiX2kiLCJlbHNfMSIsImVsIiwiaXNQb3VuZEVsZW1lbnQiLCJnZXROdW1iZXJGb3JtYXQiLCJmb3JtYXQiLCJ2YXJOYW1lIiwiaXNBcmd1bWVudEVsZW1lbnQiLCJTdHJpbmciLCJpc0RhdGVFbGVtZW50Iiwic3R5bGUiLCJkYXRlIiwidW5kZWZpbmVkIiwiZ2V0RGF0ZVRpbWVGb3JtYXQiLCJpc1RpbWVFbGVtZW50IiwidGltZSIsImlzRGF0ZVRpbWVTa2VsZXRvbiIsInBhcnNlRGF0ZVRpbWVTa2VsZXRvbiIsInBhdHRlcm4iLCJpc051bWJlckVsZW1lbnQiLCJudW1iZXIiLCJpc051bWJlclNrZWxldG9uIiwiY29udmVydE51bWJlclNrZWxldG9uVG9OdW1iZXJGb3JtYXRPcHRpb25zIiwidG9rZW5zIiwiaXNTZWxlY3RFbGVtZW50Iiwib3B0Iiwib3B0aW9ucyIsIm90aGVyIiwiUmFuZ2VFcnJvciIsImtleXMiLCJqb2luIiwiYXBwbHkiLCJpc1BsdXJhbEVsZW1lbnQiLCJJbnRsIiwiUGx1cmFsUnVsZXMiLCJydWxlIiwiZ2V0UGx1cmFsUnVsZXMiLCJwbHVyYWxUeXBlIiwic2VsZWN0Iiwib2Zmc2V0IiwiZm9ybWF0VG9TdHJpbmciLCJkb21QYXJzZXIiLCJUT0tFTl9ERUxJTUlURVIiLCJUT0tFTl9SRUdFWCIsImNvdW50ZXIiLCJnZW5lcmF0ZUlkIiwiRGF0ZSIsIm5vdyIsInJlc3RvcmVSaWNoUGxhY2Vob2xkZXJNZXNzYWdlIiwidGV4dCIsIm9iamVjdFBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwibWFwIiwiYyIsIlNJTVBMRV9YTUxfUkVHRVgiLCJURU1QTEFURV9JRCIsIlZPSURfRUxFTUVOVFMiLCJmb3JtYXRIVE1MRWxlbWVudCIsInRhZ05hbWUiLCJvdXRlckhUTUwiLCJ0ZXh0Q29udGVudCIsImNoaWxkTm9kZXMiLCJ0b0xvd2VyQ2FzZSIsImlzVm9pZEVsZW1lbnQiLCJpbmRleE9mIiwiZm9ybWF0Rm5PclZhbHVlIiwiY2h1bmtzIiwic2xpY2UiLCJjaGlsZCIsImNvbmNhdCIsImZvcm1hdEhUTUxNZXNzYWdlIiwiZm9ybWF0dGVkTWVzc2FnZSIsImlkIiwidGVzdCIsIkRPTVBhcnNlciIsImNvbnRlbnQiLCJwYXJzZUZyb21TdHJpbmciLCJnZXRFbGVtZW50QnlJZCIsInRhZ3NUb0Zvcm1hdCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiY2FzZVNlbnNpdGl2ZVRhZ3MiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInQiLCJuIiwibWVyZ2VDb25maWciLCJjMSIsImMyIiwibWVyZ2VDb25maWdzIiwiZGVmYXVsdENvbmZpZyIsImNvbmZpZ3MiLCJjcmVhdGVEZWZhdWx0Rm9ybWF0dGVycyIsImNhY2hlIiwiZGF0ZVRpbWUiLCJwbHVyYWxSdWxlcyIsIm1lbW9pemVJbnRsQ29uc3RydWN0b3IiLCJOdW1iZXJGb3JtYXQiLCJEYXRlVGltZUZvcm1hdCIsIkludGxNZXNzYWdlRm9ybWF0IiwibWVzc2FnZSIsIm92ZXJyaWRlRm9ybWF0cyIsIm9wdHMiLCJkZWZhdWx0TG9jYWxlIiwiZm9ybWF0dGVyQ2FjaGUiLCJhc3QiLCJyZXNvbHZlZE9wdGlvbnMiLCJsb2NhbGUiLCJzdXBwb3J0ZWRMb2NhbGVzT2YiLCJnZXRBc3QiLCJfX3BhcnNlIiwiVHlwZUVycm9yIiwibm9ybWFsaXplSGFzaHRhZ0luUGx1cmFsIiwiaXNBcnJheSIsInBhcnNlIiwiY3VycmVuY3kiLCJwZXJjZW50Iiwic2hvcnQiLCJtb250aCIsImRheSIsInllYXIiLCJtZWRpdW0iLCJsb25nIiwiZnVsbCIsIndlZWtkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwidGltZVpvbmVOYW1lIiwiRVNDQVBFRF9DSEFSUyIsIlVOU0FGRV9DSEFSU19SRUdFWCIsImVzY2FwZSIsInN0ciIsInJlcGxhY2UiLCJtYXRjaCIsImNoYXJDb2RlQXQiLCJmaWx0ZXJQcm9wcyIsInByb3BzIiwid2hpdGVsaXN0IiwiZGVmYXVsdHMiLCJmaWx0ZXJlZCIsIm5hbWUiLCJpbnZhcmlhbnRJbnRsQ29udGV4dCIsImludGwiLCJpbnZhcmlhbnQiLCJjcmVhdGVFcnJvciIsImV4Y2VwdGlvbiIsImVNc2ciLCJzdGFjayIsImRlZmF1bHRFcnJvckhhbmRsZXIiLCJlcnJvciIsInByb2Nlc3MiLCJERUZBVUxUX0lOVExfQ09ORklHIiwibWVzc2FnZXMiLCJ0aW1lWm9uZSIsInRleHRDb21wb25lbnQiLCJSZWFjdCIsImRlZmF1bHRGb3JtYXRzIiwib25FcnJvciIsImNyZWF0ZUludGxDYWNoZSIsInJlbGF0aXZlVGltZSIsImxpc3QiLCJkaXNwbGF5TmFtZXMiLCJjcmVhdGVGb3JtYXR0ZXJzIiwiUmVsYXRpdmVUaW1lRm9ybWF0IiwiTGlzdEZvcm1hdCIsIkRpc3BsYXlOYW1lcyIsImdldE1lc3NhZ2VGb3JtYXQiLCJnZXRSZWxhdGl2ZVRpbWVGb3JtYXQiLCJnZXRMaXN0Rm9ybWF0IiwiZ2V0RGlzcGxheU5hbWVzIiwiZ2V0TmFtZWRGb3JtYXQiLCJmb3JtYXRUeXBlIiwiaG9pc3ROb25SZWFjdFN0YXRpY3MiLCJob2lzdE5vblJlYWN0U3RhdGljc18iLCJnZXREaXNwbGF5TmFtZSIsIkNvbXBvbmVudCIsImRpc3BsYXlOYW1lIiwiSW50bENvbnRleHQiLCJJbnRsQ29uc3VtZXIiLCJDb25zdW1lciIsIkludGxQcm92aWRlciIsIlByb3ZpZGVyIiwiQ29udGV4dCIsImluamVjdEludGwiLCJXcmFwcGVkQ29tcG9uZW50IiwiaW50bFByb3BOYW1lIiwiZm9yd2FyZFJlZiIsImVuZm9yY2VDb250ZXh0IiwiV2l0aEludGwiLCJyZWYiLCJmb3J3YXJkZWRSZWYiLCJfX3Jlc3QiLCJlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJEaXNwbGF5TmFtZSIsIkRpc3BsYXlOYW1lUGFydHMiLCJGb3JtYXR0ZWROdW1iZXJQYXJ0cyIsImNoaWxkcmVuIiwiZm9ybWF0UHJvcHMiLCJmb3JtYXROdW1iZXJUb1BhcnRzIiwiY3JlYXRlRm9ybWF0dGVkRGF0ZVRpbWVQYXJ0c0NvbXBvbmVudCIsIkNvbXBvbmVudFBhcnRzIiwiZm9ybWF0dGVkUGFydHMiLCJmb3JtYXREYXRlVG9QYXJ0cyIsImZvcm1hdFRpbWVUb1BhcnRzIiwiY3JlYXRlRm9ybWF0dGVkQ29tcG9uZW50IiwiZm9ybWF0dGVkVmFsdWUiLCJUZXh0IiwidXNlSW50bCIsInVzZUNvbnRleHQiLCJOVU1CRVJfRk9STUFUX09QVElPTlMiLCJnZXRGb3JtYXR0ZXIiLCJmaWx0ZXJlZE9wdGlvbnMiLCJmb3JtYXROdW1iZXIiLCJjb25maWciLCJSRUxBVElWRV9USU1FX0ZPUk1BVF9PUFRJT05TIiwiZm9ybWF0UmVsYXRpdmVUaW1lIiwidW5pdCIsIkRBVEVfVElNRV9GT1JNQVRfT1BUSU9OUyIsImZvcm1hdERhdGUiLCJmb3JtYXRUaW1lIiwiUExVUkFMX0ZPUk1BVF9PUFRJT05TIiwiZm9ybWF0UGx1cmFsIiwic2V0VGltZVpvbmVJbk9wdGlvbnMiLCJkZWVwTWVyZ2VPcHRpb25zIiwib3B0czEiLCJvcHRzMiIsImRlZXBNZXJnZUZvcm1hdHNBbmRTZXRUaW1lWm9uZSIsImYxIiwibWZGb3JtYXRzIiwicHJlcGFyZUludGxNZXNzYWdlRm9ybWF0SHRtbE91dHB1dCIsImZvcm1hdE1lc3NhZ2UiLCJzdGF0ZSIsIm1lc3NhZ2VEZXNjcmlwdG9yIiwiZGVmYXVsdE1lc3NhZ2UiLCJmb3JtYXR0ZWRNZXNzYWdlUGFydHMiLCJmb3JtYXR0ZXIiLCJyYXdWYWx1ZXMiLCJlc2NhcGVkVmFsdWVzIiwiZXNjYXBlZCIsIkxJU1RfRk9STUFUX09QVElPTlMiLCJnZW5lcmF0ZVRva2VuIiwiZm9ybWF0TGlzdCIsInJpY2hWYWx1ZXMiLCJzZXJpYWxpemVkVmFsdWVzIiwidiIsInZhbCIsIkRJU1BMQVlfTkFNRVNfT1BUT05TIiwiZm9ybWF0RGlzcGxheU5hbWUiLCJvZiIsInNoYWxsb3dFcXVhbHMiLCJzaGFsbG93RXF1YWxzXyIsInByb2Nlc3NJbnRsQ29uZmlnIiwiY3JlYXRlSW50bCIsInJlc29sdmVkQ29uZmlnIiwicHJldkNvbmZpZyIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsInJlbmRlciIsImRlZmF1bHRQcm9wcyIsIk1JTlVURSIsIkhPVVIiLCJEQVkiLCJzZWxlY3RVbml0Iiwic2Vjb25kcyIsImFic1ZhbHVlIiwiTWF0aCIsImFicyIsImdldER1cmF0aW9uSW5TZWNvbmRzIiwidmFsdWVUb1NlY29uZHMiLCJJTkNSRU1FTlRBQkxFX1VOSVRTIiwiY2FuSW5jcmVtZW50IiwiaW5jbHVkZXMiLCJGb3JtYXR0ZWRSZWxhdGl2ZVRpbWUiLCJfdXBkYXRlVGltZXIiLCJwcmV2VW5pdCIsInByZXZWYWx1ZSIsImN1cnJlbnRWYWx1ZUluU2Vjb25kcyIsInVwZGF0ZUludGVydmFsSW5TZWNvbmRzIiwic2NoZWR1bGVOZXh0VXBkYXRlIiwiY2xlYXJUaW1lb3V0IiwibmV4dFZhbHVlSW5TZWNvbmRzIiwibmV4dFVuaXQiLCJ1bml0RHVyYXRpb24iLCJyZW1haW5kZXIiLCJwcmV2SW50ZXJlc3RpbmdWYWx1ZUluU2Vjb25kcyIsIm5leHRJbnRlcmVzdGluZ1ZhbHVlSW5TZWNvbmRzIiwiZGVsYXlJblNlY29uZHMiLCJzZXRUaW1lb3V0Iiwic2V0U3RhdGUiLCJjb21wb25lbnREaWRNb3VudCIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY3VycmVudFZhbHVlIiwiY3VycmVudFVuaXQiLCJyb3VuZCIsImZvcm1hdHRlZFJlbGF0aXZlVGltZSIsIkZvcm1hdHRlZFBsdXJhbCIsInBsdXJhbENhdGVnb3J5IiwiZm9ybWF0dGVkUGx1cmFsIiwid2l0aEludGwiLCJkZWZhdWx0Rm9ybWF0TWVzc2FnZSIsImRlc2NyaXB0b3IiLCJGb3JtYXR0ZWRNZXNzYWdlIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwibmV4dFByb3BzIiwiX2EiLCJvdGhlclByb3BzIiwibmV4dFZhbHVlcyIsIm5leHRPdGhlclByb3BzIiwiZGVzY3JpcHRpb24iLCJub2RlcyIsIkZvcm1hdHRlZEhUTUxNZXNzYWdlIiwiZm9ybWF0dGVkSFRNTE1lc3NhZ2UiLCJodG1sIiwiX19odG1sIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJkZWZpbmVNZXNzYWdlcyIsIm1zZ3MiLCJGb3JtYXR0ZWREYXRlIiwiRm9ybWF0dGVkVGltZSIsIkZvcm1hdHRlZE51bWJlciIsIkZvcm1hdHRlZExpc3QiLCJGb3JtYXR0ZWREaXNwbGF5TmFtZSIsIkZvcm1hdHRlZERhdGVQYXJ0cyIsIkZvcm1hdHRlZFRpbWVQYXJ0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Q0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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QUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVPLHlCOztBQzE2RlAscUJBQXFCLFNBQUksSUFBSSxTQUFJO0FBQ2pDLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7O0FBRUEsc0NBQXNDLFFBQVE7QUFDOUMsb0RBQW9ELFFBQVE7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRTZFO0FBQ3pDO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsWUFBWTtBQUNwQjtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0EsU0FBUyxlQUFlLFNBQVMsZUFBZTtBQUNoRDtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7O0FBRUEsK0JBQStCO0FBQy9COztBQUVBO0FBQ0E7O0FBRUEscUJBQXFCLHNCQUFzQjtBQUMzQzs7QUFFQSxZQUFZLGdCQUFnQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLHlCQUF5QjtBQUNsRyxxQkFBcUIsUUFBUTs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQzs7QUM3RG9DO0FBQ21CO0FBQy9CO0FBQ0M7QUFDRTtBQUNwQjtBQUNQLFlBQVksUUFBUTs7QUFFcEI7QUFDQSxJQUFJLHdCQUF3QjtBQUM1Qjs7QUFFQTtBQUNBLEM7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZ0JBQWMsR0FBRyxTQUFJLElBQUksU0FBSTtBQUNqQywrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBOztBQUVBLHNDQUFzQyxRQUFRO0FBQzlDLG9EQUFvRCxRQUFRO0FBQzVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCO0FBQ2xCLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLG9CQUFvQix1QkFBdUI7QUFDM0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsNERBQTRELGdCQUFjOztBQUUxRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQWUsd0JBQXdCLEU7O0FDL0R2QyxJQUFJLGVBQVEsR0FBRyxTQUFJLElBQUksU0FBSTtBQUMzQixFQUFFLGVBQVE7QUFDViw0Q0FBNEMsT0FBTztBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFNBQVMsZUFBUTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLGdDQUFnQyxJQUFJLEdBQUcsSUFBSSxNQUFNLElBQUksY0FBYyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksUUFBUSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxXQUFXLElBQUk7QUFDcks7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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LCtCQTdCOEJYLE8sRUErQm5DUyxvQkFBb0IsQ0FBQ3hJLFdBQXJCLENBQW1DLHNCQUFuQyxDQUNBd0ksb0JBQW9CLENBQUNyRCxZQUFyQixDQUFvQ3BULE1BQU0sQ0FBQ21JLE1BQVAsQ0FBY25JLE1BQU0sQ0FBQ21JLE1BQVAsQ0FBYyxFQUFkLENBQWtCNk4sb0JBQWxCLENBQWQsQ0FBZ0UsQ0FBRXJQLE9BQU8sQ0FBRSxNQUFYLENBQWhFLENBQXBDLENBQ0EsaURBQWU4UCxvQkFBZixFOztBQzFDTyxRQUFTSyxlQUFULENBQXdCQyxJQUF4QixDQUE4QixDQUNqQyxNQUFPQSxLQUFQLENBQ0gsQ0FLRDtBQUNPLEdBQU1DLGNBQWEsQ0FBR2pILHdCQUF3QixDQUFDLFlBQUQsQ0FBOUMsQ0FDQSxHQUFNa0gsY0FBYSxDQUFHbEgsd0JBQXdCLENBQUMsWUFBRCxDQUE5QyxDQUNBLEdBQU1tSCxnQkFBZSxDQUFHbkgsd0JBQXdCLENBQUMsY0FBRCxDQUFoRCxDQUNBLEdBQU1vSCxjQUFhLENBQUdwSCx3QkFBd0IsQ0FBQyxZQUFELENBQTlDLENBQ0EsR0FBTXFILHFCQUFvQixDQUFHckgsd0JBQXdCLENBQUMsbUJBQUQsQ0FBckQsQ0FDQSxHQUFNc0gsbUJBQWtCLENBQUczSCxxQ0FBcUMsQ0FBQyxZQUFELENBQWhFLENBQ0EsR0FBTTRILG1CQUFrQixDQUFHNUgscUNBQXFDLENBQUMsWUFBRCxDQUFoRSIsImZpbGUiOiI3MDYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBUWVBFO1xuXG4oZnVuY3Rpb24gKFRZUEUpIHtcbiAgLyoqXG4gICAqIFJhdyB0ZXh0XG4gICAqL1xuICBUWVBFW1RZUEVbXCJsaXRlcmFsXCJdID0gMF0gPSBcImxpdGVyYWxcIjtcbiAgLyoqXG4gICAqIFZhcmlhYmxlIHcvbyBhbnkgZm9ybWF0LCBlLmcgYHZhcmAgaW4gYHRoaXMgaXMgYSB7dmFyfWBcbiAgICovXG5cbiAgVFlQRVtUWVBFW1wiYXJndW1lbnRcIl0gPSAxXSA9IFwiYXJndW1lbnRcIjtcbiAgLyoqXG4gICAqIFZhcmlhYmxlIHcvIG51bWJlciBmb3JtYXRcbiAgICovXG5cbiAgVFlQRVtUWVBFW1wibnVtYmVyXCJdID0gMl0gPSBcIm51bWJlclwiO1xuICAvKipcbiAgICogVmFyaWFibGUgdy8gZGF0ZSBmb3JtYXRcbiAgICovXG5cbiAgVFlQRVtUWVBFW1wiZGF0ZVwiXSA9IDNdID0gXCJkYXRlXCI7XG4gIC8qKlxuICAgKiBWYXJpYWJsZSB3LyB0aW1lIGZvcm1hdFxuICAgKi9cblxuICBUWVBFW1RZUEVbXCJ0aW1lXCJdID0gNF0gPSBcInRpbWVcIjtcbiAgLyoqXG4gICAqIFZhcmlhYmxlIHcvIHNlbGVjdCBmb3JtYXRcbiAgICovXG5cbiAgVFlQRVtUWVBFW1wic2VsZWN0XCJdID0gNV0gPSBcInNlbGVjdFwiO1xuICAvKipcbiAgICogVmFyaWFibGUgdy8gcGx1cmFsIGZvcm1hdFxuICAgKi9cblxuICBUWVBFW1RZUEVbXCJwbHVyYWxcIl0gPSA2XSA9IFwicGx1cmFsXCI7XG4gIC8qKlxuICAgKiBPbmx5IHBvc3NpYmxlIHdpdGhpbiBwbHVyYWwgYXJndW1lbnQuXG4gICAqIFRoaXMgaXMgdGhlIGAjYCBzeW1ib2wgdGhhdCB3aWxsIGJlIHN1YnN0aXR1dGVkIHdpdGggdGhlIGNvdW50LlxuICAgKi9cblxuICBUWVBFW1RZUEVbXCJwb3VuZFwiXSA9IDddID0gXCJwb3VuZFwiO1xufSkoVFlQRSB8fCAoVFlQRSA9IHt9KSk7XG4vKipcbiAqIFR5cGUgR3VhcmRzXG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXRlcmFsRWxlbWVudChlbCkge1xuICByZXR1cm4gZWwudHlwZSA9PT0gVFlQRS5saXRlcmFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJndW1lbnRFbGVtZW50KGVsKSB7XG4gIHJldHVybiBlbC50eXBlID09PSBUWVBFLmFyZ3VtZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyRWxlbWVudChlbCkge1xuICByZXR1cm4gZWwudHlwZSA9PT0gVFlQRS5udW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlRWxlbWVudChlbCkge1xuICByZXR1cm4gZWwudHlwZSA9PT0gVFlQRS5kYXRlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVGltZUVsZW1lbnQoZWwpIHtcbiAgcmV0dXJuIGVsLnR5cGUgPT09IFRZUEUudGltZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1NlbGVjdEVsZW1lbnQoZWwpIHtcbiAgcmV0dXJuIGVsLnR5cGUgPT09IFRZUEUuc2VsZWN0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUGx1cmFsRWxlbWVudChlbCkge1xuICByZXR1cm4gZWwudHlwZSA9PT0gVFlQRS5wbHVyYWw7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQb3VuZEVsZW1lbnQoZWwpIHtcbiAgcmV0dXJuIGVsLnR5cGUgPT09IFRZUEUucG91bmQ7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJTa2VsZXRvbihlbCkge1xuICByZXR1cm4gISEoZWwgJiYgdHlwZW9mIGVsID09PSAnb2JqZWN0JyAmJiBlbC50eXBlID09PSAwXG4gIC8qIG51bWJlciAqL1xuICApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZVRpbWVTa2VsZXRvbihlbCkge1xuICByZXR1cm4gISEoZWwgJiYgdHlwZW9mIGVsID09PSAnb2JqZWN0JyAmJiBlbC50eXBlID09PSAxXG4gIC8qIGRhdGVUaW1lICovXG4gICk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGl0ZXJhbEVsZW1lbnQodmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBUWVBFLmxpdGVyYWwsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTnVtYmVyRWxlbWVudCh2YWx1ZSwgc3R5bGUpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBUWVBFLm51bWJlcixcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH07XG59IiwiLy8gdHNsaW50OmRpc2FibGU6b25seS1hcnJvdy1mdW5jdGlvbnNcbi8vIHRzbGludDpkaXNhYmxlOm9iamVjdC1saXRlcmFsLXNob3J0aGFuZFxuLy8gdHNsaW50OmRpc2FibGU6dHJhaWxpbmctY29tbWFcbi8vIHRzbGludDpkaXNhYmxlOm9iamVjdC1saXRlcmFsLXNvcnQta2V5c1xuLy8gdHNsaW50OmRpc2FibGU6b25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblxuLy8gdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zZWN1dGl2ZS1ibGFuay1saW5lc1xuLy8gdHNsaW50OmRpc2FibGU6YWxpZ25cbnZhciBfX2V4dGVuZHMgPSB0aGlzICYmIHRoaXMuX19leHRlbmRzIHx8IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG52YXIgX19hc3NpZ24gPSB0aGlzICYmIHRoaXMuX19hc3NpZ24gfHwgZnVuY3Rpb24gKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHQpIHtcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIHMgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIHAgaW4gcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdDtcbiAgfTtcblxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07IC8vIEdlbmVyYXRlZCBieSBQRUcuanMgdi4gMC4xMC4wICh0cy1wZWdqcyBwbHVnaW4gdi4gMC4yLjYgKVxuLy9cbi8vIGh0dHBzOi8vcGVnanMub3JnLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tZXRhZGV2cHJvL3RzLXBlZ2pzXG5cblxuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4vdHlwZXMnO1xuXG52YXIgU3ludGF4RXJyb3IgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoU3ludGF4RXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gU3ludGF4RXJyb3IobWVzc2FnZSwgZXhwZWN0ZWQsIGZvdW5kLCBsb2NhdGlvbikge1xuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICBfdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkO1xuICAgIF90aGlzLmZvdW5kID0gZm91bmQ7XG4gICAgX3RoaXMubG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICBfdGhpcy5uYW1lID0gXCJTeW50YXhFcnJvclwiO1xuXG4gICAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShfdGhpcywgU3ludGF4RXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFN5bnRheEVycm9yLmJ1aWxkTWVzc2FnZSA9IGZ1bmN0aW9uIChleHBlY3RlZCwgZm91bmQpIHtcbiAgICBmdW5jdGlvbiBoZXgoY2gpIHtcbiAgICAgIHJldHVybiBjaC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpdGVyYWxFc2NhcGUocykge1xuICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csIFwiXFxcXFxcXCJcIikucmVwbGFjZSgvXFwwL2csIFwiXFxcXDBcIikucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIikucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIikucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIikucmVwbGFjZSgvW1xceDAwLVxceDBGXS9nLCBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHgwXCIgKyBoZXgoY2gpO1xuICAgICAgfSkucmVwbGFjZSgvW1xceDEwLVxceDFGXFx4N0YtXFx4OUZdL2csIGZ1bmN0aW9uIChjaCkge1xuICAgICAgICByZXR1cm4gXCJcXFxceFwiICsgaGV4KGNoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHMpIHtcbiAgICAgIHJldHVybiBzLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKS5yZXBsYWNlKC9cXF0vZywgXCJcXFxcXVwiKS5yZXBsYWNlKC9cXF4vZywgXCJcXFxcXlwiKS5yZXBsYWNlKC8tL2csIFwiXFxcXC1cIikucmVwbGFjZSgvXFwwL2csIFwiXFxcXDBcIikucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIikucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIikucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIikucmVwbGFjZSgvW1xceDAwLVxceDBGXS9nLCBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHgwXCIgKyBoZXgoY2gpO1xuICAgICAgfSkucmVwbGFjZSgvW1xceDEwLVxceDFGXFx4N0YtXFx4OUZdL2csIGZ1bmN0aW9uIChjaCkge1xuICAgICAgICByZXR1cm4gXCJcXFxceFwiICsgaGV4KGNoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0YXRpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgIHN3aXRjaCAoZXhwZWN0YXRpb24udHlwZSkge1xuICAgICAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgICAgIHJldHVybiBcIlxcXCJcIiArIGxpdGVyYWxFc2NhcGUoZXhwZWN0YXRpb24udGV4dCkgKyBcIlxcXCJcIjtcblxuICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICB2YXIgZXNjYXBlZFBhcnRzID0gZXhwZWN0YXRpb24ucGFydHMubWFwKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJ0KSA/IGNsYXNzRXNjYXBlKHBhcnRbMF0pICsgXCItXCIgKyBjbGFzc0VzY2FwZShwYXJ0WzFdKSA6IGNsYXNzRXNjYXBlKHBhcnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBcIltcIiArIChleHBlY3RhdGlvbi5pbnZlcnRlZCA/IFwiXlwiIDogXCJcIikgKyBlc2NhcGVkUGFydHMgKyBcIl1cIjtcblxuICAgICAgICBjYXNlIFwiYW55XCI6XG4gICAgICAgICAgcmV0dXJuIFwiYW55IGNoYXJhY3RlclwiO1xuXG4gICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICByZXR1cm4gXCJlbmQgb2YgaW5wdXRcIjtcblxuICAgICAgICBjYXNlIFwib3RoZXJcIjpcbiAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24uZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZDEpIHtcbiAgICAgIHZhciBkZXNjcmlwdGlvbnMgPSBleHBlY3RlZDEubWFwKGRlc2NyaWJlRXhwZWN0YXRpb24pO1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgajtcbiAgICAgIGRlc2NyaXB0aW9ucy5zb3J0KCk7XG5cbiAgICAgIGlmIChkZXNjcmlwdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGkgPSAxLCBqID0gMTsgaSA8IGRlc2NyaXB0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChkZXNjcmlwdGlvbnNbaSAtIDFdICE9PSBkZXNjcmlwdGlvbnNbaV0pIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uc1tqXSA9IGRlc2NyaXB0aW9uc1tpXTtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkZXNjcmlwdGlvbnMubGVuZ3RoID0gajtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkZXNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zWzBdO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zWzBdICsgXCIgb3IgXCIgKyBkZXNjcmlwdGlvbnNbMV07XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zLnNsaWNlKDAsIC0xKS5qb2luKFwiLCBcIikgKyBcIiwgb3IgXCIgKyBkZXNjcmlwdGlvbnNbZGVzY3JpcHRpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRm91bmQoZm91bmQxKSB7XG4gICAgICByZXR1cm4gZm91bmQxID8gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGZvdW5kMSkgKyBcIlxcXCJcIiA6IFwiZW5kIG9mIGlucHV0XCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiRXhwZWN0ZWQgXCIgKyBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkKSArIFwiIGJ1dCBcIiArIGRlc2NyaWJlRm91bmQoZm91bmQpICsgXCIgZm91bmQuXCI7XG4gIH07XG5cbiAgcmV0dXJuIFN5bnRheEVycm9yO1xufShFcnJvcik7XG5cbmV4cG9ydCB7IFN5bnRheEVycm9yIH07XG5cbmZ1bmN0aW9uIHBlZyRwYXJzZShpbnB1dCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucyA6IHt9O1xuICB2YXIgcGVnJEZBSUxFRCA9IHt9O1xuICB2YXIgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9ucyA9IHtcbiAgICBzdGFydDogcGVnJHBhcnNlc3RhcnRcbiAgfTtcbiAgdmFyIHBlZyRzdGFydFJ1bGVGdW5jdGlvbiA9IHBlZyRwYXJzZXN0YXJ0O1xuXG4gIHZhciBwZWckYzAgPSBmdW5jdGlvbiBwZWckYzAocGFydHMpIHtcbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH07XG5cbiAgdmFyIHBlZyRjMSA9IGZ1bmN0aW9uIHBlZyRjMShtZXNzYWdlVGV4dCkge1xuICAgIHJldHVybiBfX2Fzc2lnbih7XG4gICAgICB0eXBlOiBUWVBFLmxpdGVyYWwsXG4gICAgICB2YWx1ZTogbWVzc2FnZVRleHRcbiAgICB9LCBpbnNlcnRMb2NhdGlvbigpKTtcbiAgfTtcblxuICB2YXIgcGVnJGMyID0gXCIjXCI7XG4gIHZhciBwZWckYzMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiI1wiLCBmYWxzZSk7XG5cbiAgdmFyIHBlZyRjNCA9IGZ1bmN0aW9uIHBlZyRjNCgpIHtcbiAgICByZXR1cm4gX19hc3NpZ24oe1xuICAgICAgdHlwZTogVFlQRS5wb3VuZFxuICAgIH0sIGluc2VydExvY2F0aW9uKCkpO1xuICB9O1xuXG4gIHZhciBwZWckYzUgPSBwZWckb3RoZXJFeHBlY3RhdGlvbihcImFyZ3VtZW50RWxlbWVudFwiKTtcbiAgdmFyIHBlZyRjNiA9IFwie1wiO1xuICB2YXIgcGVnJGM3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIntcIiwgZmFsc2UpO1xuICB2YXIgcGVnJGM4ID0gXCJ9XCI7XG4gIHZhciBwZWckYzkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwifVwiLCBmYWxzZSk7XG5cbiAgdmFyIHBlZyRjMTAgPSBmdW5jdGlvbiBwZWckYzEwKHZhbHVlKSB7XG4gICAgcmV0dXJuIF9fYXNzaWduKHtcbiAgICAgIHR5cGU6IFRZUEUuYXJndW1lbnQsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9LCBpbnNlcnRMb2NhdGlvbigpKTtcbiAgfTtcblxuICB2YXIgcGVnJGMxMSA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwibnVtYmVyU2tlbGV0b25JZFwiKTtcbiAgdmFyIHBlZyRjMTIgPSAvXlsnXFwve31dLztcbiAgdmFyIHBlZyRjMTMgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCInXCIsIFwiL1wiLCBcIntcIiwgXCJ9XCJdLCBmYWxzZSwgZmFsc2UpO1xuICB2YXIgcGVnJGMxNCA9IHBlZyRhbnlFeHBlY3RhdGlvbigpO1xuICB2YXIgcGVnJGMxNSA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwibnVtYmVyU2tlbGV0b25Ub2tlbk9wdGlvblwiKTtcbiAgdmFyIHBlZyRjMTYgPSBcIi9cIjtcbiAgdmFyIHBlZyRjMTcgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiL1wiLCBmYWxzZSk7XG5cbiAgdmFyIHBlZyRjMTggPSBmdW5jdGlvbiBwZWckYzE4KG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb247XG4gIH07XG5cbiAgdmFyIHBlZyRjMTkgPSBwZWckb3RoZXJFeHBlY3RhdGlvbihcIm51bWJlclNrZWxldG9uVG9rZW5cIik7XG5cbiAgdmFyIHBlZyRjMjAgPSBmdW5jdGlvbiBwZWckYzIwKHN0ZW0sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RlbTogc3RlbSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICB9O1xuICB9O1xuXG4gIHZhciBwZWckYzIxID0gZnVuY3Rpb24gcGVnJGMyMSh0b2tlbnMpIHtcbiAgICByZXR1cm4gX19hc3NpZ24oe1xuICAgICAgdHlwZTogMFxuICAgICAgLyogbnVtYmVyICovXG4gICAgICAsXG4gICAgICB0b2tlbnM6IHRva2Vuc1xuICAgIH0sIGluc2VydExvY2F0aW9uKCkpO1xuICB9O1xuXG4gIHZhciBwZWckYzIyID0gXCI6OlwiO1xuICB2YXIgcGVnJGMyMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI6OlwiLCBmYWxzZSk7XG5cbiAgdmFyIHBlZyRjMjQgPSBmdW5jdGlvbiBwZWckYzI0KHNrZWxldG9uKSB7XG4gICAgcmV0dXJuIHNrZWxldG9uO1xuICB9O1xuXG4gIHZhciBwZWckYzI1ID0gZnVuY3Rpb24gcGVnJGMyNSgpIHtcbiAgICBtZXNzYWdlQ3R4LnB1c2goJ251bWJlckFyZ1N0eWxlJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgdmFyIHBlZyRjMjYgPSBmdW5jdGlvbiBwZWckYzI2KHN0eWxlKSB7XG4gICAgbWVzc2FnZUN0eC5wb3AoKTtcbiAgICByZXR1cm4gc3R5bGUucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG4gIH07XG5cbiAgdmFyIHBlZyRjMjcgPSBcIixcIjtcbiAgdmFyIHBlZyRjMjggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLFwiLCBmYWxzZSk7XG4gIHZhciBwZWckYzI5ID0gXCJudW1iZXJcIjtcbiAgdmFyIHBlZyRjMzAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibnVtYmVyXCIsIGZhbHNlKTtcblxuICB2YXIgcGVnJGMzMSA9IGZ1bmN0aW9uIHBlZyRjMzEodmFsdWUsIHR5cGUsIHN0eWxlKSB7XG4gICAgcmV0dXJuIF9fYXNzaWduKHtcbiAgICAgIHR5cGU6IHR5cGUgPT09ICdudW1iZXInID8gVFlQRS5udW1iZXIgOiB0eXBlID09PSAnZGF0ZScgPyBUWVBFLmRhdGUgOiBUWVBFLnRpbWUsXG4gICAgICBzdHlsZTogc3R5bGUgJiYgc3R5bGVbMl0sXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9LCBpbnNlcnRMb2NhdGlvbigpKTtcbiAgfTtcblxuICB2YXIgcGVnJGMzMiA9IFwiJ1wiO1xuICB2YXIgcGVnJGMzMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCInXCIsIGZhbHNlKTtcbiAgdmFyIHBlZyRjMzQgPSAvXlteJ10vO1xuICB2YXIgcGVnJGMzNSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIidcIl0sIHRydWUsIGZhbHNlKTtcbiAgdmFyIHBlZyRjMzYgPSAvXlteYS16QS1aJ3t9XS87XG4gIHZhciBwZWckYzM3ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcImFcIiwgXCJ6XCJdLCBbXCJBXCIsIFwiWlwiXSwgXCInXCIsIFwie1wiLCBcIn1cIl0sIHRydWUsIGZhbHNlKTtcbiAgdmFyIHBlZyRjMzggPSAvXlthLXpBLVpdLztcbiAgdmFyIHBlZyRjMzkgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiYVwiLCBcInpcIl0sIFtcIkFcIiwgXCJaXCJdXSwgZmFsc2UsIGZhbHNlKTtcblxuICB2YXIgcGVnJGM0MCA9IGZ1bmN0aW9uIHBlZyRjNDAocGF0dGVybikge1xuICAgIHJldHVybiBfX2Fzc2lnbih7XG4gICAgICB0eXBlOiAxXG4gICAgICAvKiBkYXRlVGltZSAqL1xuICAgICAgLFxuICAgICAgcGF0dGVybjogcGF0dGVyblxuICAgIH0sIGluc2VydExvY2F0aW9uKCkpO1xuICB9O1xuXG4gIHZhciBwZWckYzQxID0gZnVuY3Rpb24gcGVnJGM0MSgpIHtcbiAgICBtZXNzYWdlQ3R4LnB1c2goJ2RhdGVPclRpbWVBcmdTdHlsZScpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIHZhciBwZWckYzQyID0gXCJkYXRlXCI7XG4gIHZhciBwZWckYzQzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImRhdGVcIiwgZmFsc2UpO1xuICB2YXIgcGVnJGM0NCA9IFwidGltZVwiO1xuICB2YXIgcGVnJGM0NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ0aW1lXCIsIGZhbHNlKTtcbiAgdmFyIHBlZyRjNDYgPSBcInBsdXJhbFwiO1xuICB2YXIgcGVnJGM0NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJwbHVyYWxcIiwgZmFsc2UpO1xuICB2YXIgcGVnJGM0OCA9IFwic2VsZWN0b3JkaW5hbFwiO1xuICB2YXIgcGVnJGM0OSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJzZWxlY3RvcmRpbmFsXCIsIGZhbHNlKTtcbiAgdmFyIHBlZyRjNTAgPSBcIm9mZnNldDpcIjtcbiAgdmFyIHBlZyRjNTEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwib2Zmc2V0OlwiLCBmYWxzZSk7XG5cbiAgdmFyIHBlZyRjNTIgPSBmdW5jdGlvbiBwZWckYzUyKHZhbHVlLCBwbHVyYWxUeXBlLCBvZmZzZXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX19hc3NpZ24oe1xuICAgICAgdHlwZTogVFlQRS5wbHVyYWwsXG4gICAgICBwbHVyYWxUeXBlOiBwbHVyYWxUeXBlID09PSAncGx1cmFsJyA/ICdjYXJkaW5hbCcgOiAnb3JkaW5hbCcsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBvZmZzZXQ6IG9mZnNldCA/IG9mZnNldFsyXSA6IDAsXG4gICAgICBvcHRpb25zOiBvcHRpb25zLnJlZHVjZShmdW5jdGlvbiAoYWxsLCBfYSkge1xuICAgICAgICB2YXIgaWQgPSBfYS5pZCxcbiAgICAgICAgICAgIHZhbHVlID0gX2EudmFsdWUsXG4gICAgICAgICAgICBvcHRpb25Mb2NhdGlvbiA9IF9hLmxvY2F0aW9uO1xuXG4gICAgICAgIGlmIChpZCBpbiBhbGwpIHtcbiAgICAgICAgICBlcnJvcihcIkR1cGxpY2F0ZSBvcHRpb24gXFxcIlwiICsgaWQgKyBcIlxcXCIgaW4gcGx1cmFsIGVsZW1lbnQ6IFxcXCJcIiArIHRleHQoKSArIFwiXFxcIlwiLCBsb2NhdGlvbigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFsbFtpZF0gPSB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIGxvY2F0aW9uOiBvcHRpb25Mb2NhdGlvblxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYWxsO1xuICAgICAgfSwge30pXG4gICAgfSwgaW5zZXJ0TG9jYXRpb24oKSk7XG4gIH07XG5cbiAgdmFyIHBlZyRjNTMgPSBcInNlbGVjdFwiO1xuICB2YXIgcGVnJGM1NCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJzZWxlY3RcIiwgZmFsc2UpO1xuXG4gIHZhciBwZWckYzU1ID0gZnVuY3Rpb24gcGVnJGM1NSh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBfX2Fzc2lnbih7XG4gICAgICB0eXBlOiBUWVBFLnNlbGVjdCxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChhbGwsIF9hKSB7XG4gICAgICAgIHZhciBpZCA9IF9hLmlkLFxuICAgICAgICAgICAgdmFsdWUgPSBfYS52YWx1ZSxcbiAgICAgICAgICAgIG9wdGlvbkxvY2F0aW9uID0gX2EubG9jYXRpb247XG5cbiAgICAgICAgaWYgKGlkIGluIGFsbCkge1xuICAgICAgICAgIGVycm9yKFwiRHVwbGljYXRlIG9wdGlvbiBcXFwiXCIgKyBpZCArIFwiXFxcIiBpbiBzZWxlY3QgZWxlbWVudDogXFxcIlwiICsgdGV4dCgpICsgXCJcXFwiXCIsIGxvY2F0aW9uKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYWxsW2lkXSA9IHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgbG9jYXRpb246IG9wdGlvbkxvY2F0aW9uXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhbGw7XG4gICAgICB9LCB7fSlcbiAgICB9LCBpbnNlcnRMb2NhdGlvbigpKTtcbiAgfTtcblxuICB2YXIgcGVnJGM1NiA9IFwiPVwiO1xuICB2YXIgcGVnJGM1NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI9XCIsIGZhbHNlKTtcblxuICB2YXIgcGVnJGM1OCA9IGZ1bmN0aW9uIHBlZyRjNTgoaWQpIHtcbiAgICBtZXNzYWdlQ3R4LnB1c2goJ3NlbGVjdCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIHZhciBwZWckYzU5ID0gZnVuY3Rpb24gcGVnJGM1OShpZCwgdmFsdWUpIHtcbiAgICBtZXNzYWdlQ3R4LnBvcCgpO1xuICAgIHJldHVybiBfX2Fzc2lnbih7XG4gICAgICBpZDogaWQsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9LCBpbnNlcnRMb2NhdGlvbigpKTtcbiAgfTtcblxuICB2YXIgcGVnJGM2MCA9IGZ1bmN0aW9uIHBlZyRjNjAoaWQpIHtcbiAgICBtZXNzYWdlQ3R4LnB1c2goJ3BsdXJhbCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIHZhciBwZWckYzYxID0gZnVuY3Rpb24gcGVnJGM2MShpZCwgdmFsdWUpIHtcbiAgICBtZXNzYWdlQ3R4LnBvcCgpO1xuICAgIHJldHVybiBfX2Fzc2lnbih7XG4gICAgICBpZDogaWQsXG4gICAgICB2YWx1ZTogdmFsdWVcbiAgICB9LCBpbnNlcnRMb2NhdGlvbigpKTtcbiAgfTtcblxuICB2YXIgcGVnJGM2MiA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwid2hpdGVzcGFjZVwiKTtcbiAgdmFyIHBlZyRjNjMgPSAvXltcXHQtXFxyIFxceDg1XFx4QTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBBXFx1MjAyOFxcdTIwMjlcXHUyMDJGXFx1MjA1RlxcdTMwMDBdLztcbiAgdmFyIHBlZyRjNjQgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiXFx0XCIsIFwiXFxyXCJdLCBcIiBcIiwgXCJcXHg4NVwiLCBcIlxceEEwXCIsIFwiXFx1MTY4MFwiLCBbXCJcXHUyMDAwXCIsIFwiXFx1MjAwQVwiXSwgXCJcXHUyMDI4XCIsIFwiXFx1MjAyOVwiLCBcIlxcdTIwMkZcIiwgXCJcXHUyMDVGXCIsIFwiXFx1MzAwMFwiXSwgZmFsc2UsIGZhbHNlKTtcbiAgdmFyIHBlZyRjNjUgPSBwZWckb3RoZXJFeHBlY3RhdGlvbihcInN5bnRheCBwYXR0ZXJuXCIpO1xuICB2YXIgcGVnJGM2NiA9IC9eWyEtXFwvOi1AWy1cXF5gey1+XFx4QTEtXFx4QTdcXHhBOVxceEFCXFx4QUNcXHhBRVxceEIwXFx4QjFcXHhCNlxceEJCXFx4QkZcXHhEN1xceEY3XFx1MjAxMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDNFXFx1MjA0MS1cXHUyMDUzXFx1MjA1NS1cXHUyMDVFXFx1MjE5MC1cXHUyNDVGXFx1MjUwMC1cXHUyNzc1XFx1Mjc5NC1cXHUyQkZGXFx1MkUwMC1cXHUyRTdGXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDIwXFx1MzAzMFxcdUZEM0VcXHVGRDNGXFx1RkU0NVxcdUZFNDZdLztcbiAgdmFyIHBlZyRjNjcgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiIVwiLCBcIi9cIl0sIFtcIjpcIiwgXCJAXCJdLCBbXCJbXCIsIFwiXlwiXSwgXCJgXCIsIFtcIntcIiwgXCJ+XCJdLCBbXCJcXHhBMVwiLCBcIlxceEE3XCJdLCBcIlxceEE5XCIsIFwiXFx4QUJcIiwgXCJcXHhBQ1wiLCBcIlxceEFFXCIsIFwiXFx4QjBcIiwgXCJcXHhCMVwiLCBcIlxceEI2XCIsIFwiXFx4QkJcIiwgXCJcXHhCRlwiLCBcIlxceEQ3XCIsIFwiXFx4RjdcIiwgW1wiXFx1MjAxMFwiLCBcIlxcdTIwMjdcIl0sIFtcIlxcdTIwMzBcIiwgXCJcXHUyMDNFXCJdLCBbXCJcXHUyMDQxXCIsIFwiXFx1MjA1M1wiXSwgW1wiXFx1MjA1NVwiLCBcIlxcdTIwNUVcIl0sIFtcIlxcdTIxOTBcIiwgXCJcXHUyNDVGXCJdLCBbXCJcXHUyNTAwXCIsIFwiXFx1Mjc3NVwiXSwgW1wiXFx1Mjc5NFwiLCBcIlxcdTJCRkZcIl0sIFtcIlxcdTJFMDBcIiwgXCJcXHUyRTdGXCJdLCBbXCJcXHUzMDAxXCIsIFwiXFx1MzAwM1wiXSwgW1wiXFx1MzAwOFwiLCBcIlxcdTMwMjBcIl0sIFwiXFx1MzAzMFwiLCBcIlxcdUZEM0VcIiwgXCJcXHVGRDNGXCIsIFwiXFx1RkU0NVwiLCBcIlxcdUZFNDZcIl0sIGZhbHNlLCBmYWxzZSk7XG4gIHZhciBwZWckYzY4ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJvcHRpb25hbCB3aGl0ZXNwYWNlXCIpO1xuICB2YXIgcGVnJGM2OSA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwibnVtYmVyXCIpO1xuICB2YXIgcGVnJGM3MCA9IFwiLVwiO1xuICB2YXIgcGVnJGM3MSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCItXCIsIGZhbHNlKTtcblxuICB2YXIgcGVnJGM3MiA9IGZ1bmN0aW9uIHBlZyRjNzIobmVnYXRpdmUsIG51bSkge1xuICAgIHJldHVybiBudW0gPyBuZWdhdGl2ZSA/IC1udW0gOiBudW0gOiAwO1xuICB9O1xuXG4gIHZhciBwZWckYzczID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJhcG9zdHJvcGhlXCIpO1xuICB2YXIgcGVnJGM3NCA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwiZG91YmxlIGFwb3N0cm9waGVzXCIpO1xuICB2YXIgcGVnJGM3NSA9IFwiJydcIjtcbiAgdmFyIHBlZyRjNzYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJydcIiwgZmFsc2UpO1xuXG4gIHZhciBwZWckYzc3ID0gZnVuY3Rpb24gcGVnJGM3NygpIHtcbiAgICByZXR1cm4gXCInXCI7XG4gIH07XG5cbiAgdmFyIHBlZyRjNzggPSBmdW5jdGlvbiBwZWckYzc4KGVzY2FwZWRDaGFyLCBxdW90ZWRDaGFycykge1xuICAgIHJldHVybiBlc2NhcGVkQ2hhciArIHF1b3RlZENoYXJzLnJlcGxhY2UoXCInJ1wiLCBcIidcIik7XG4gIH07XG5cbiAgdmFyIHBlZyRjNzkgPSBmdW5jdGlvbiBwZWckYzc5KHgpIHtcbiAgICByZXR1cm4geCAhPT0gJ3snICYmICEoaXNJblBsdXJhbE9wdGlvbigpICYmIHggPT09ICcjJykgJiYgIShpc05lc3RlZE1lc3NhZ2VUZXh0KCkgJiYgeCA9PT0gJ30nKTtcbiAgfTtcblxuICB2YXIgcGVnJGM4MCA9IFwiXFxuXCI7XG4gIHZhciBwZWckYzgxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcblwiLCBmYWxzZSk7XG5cbiAgdmFyIHBlZyRjODIgPSBmdW5jdGlvbiBwZWckYzgyKHgpIHtcbiAgICByZXR1cm4geCA9PT0gJ3snIHx8IHggPT09ICd9JyB8fCBpc0luUGx1cmFsT3B0aW9uKCkgJiYgeCA9PT0gJyMnO1xuICB9O1xuXG4gIHZhciBwZWckYzgzID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJhcmdOYW1lT3JOdW1iZXJcIik7XG4gIHZhciBwZWckYzg0ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJhcmdOdW1iZXJcIik7XG4gIHZhciBwZWckYzg1ID0gXCIwXCI7XG4gIHZhciBwZWckYzg2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjBcIiwgZmFsc2UpO1xuXG4gIHZhciBwZWckYzg3ID0gZnVuY3Rpb24gcGVnJGM4NygpIHtcbiAgICByZXR1cm4gMDtcbiAgfTtcblxuICB2YXIgcGVnJGM4OCA9IC9eWzEtOV0vO1xuICB2YXIgcGVnJGM4OSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCIxXCIsIFwiOVwiXV0sIGZhbHNlLCBmYWxzZSk7XG4gIHZhciBwZWckYzkwID0gL15bMC05XS87XG4gIHZhciBwZWckYzkxID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcIjBcIiwgXCI5XCJdXSwgZmFsc2UsIGZhbHNlKTtcblxuICB2YXIgcGVnJGM5MiA9IGZ1bmN0aW9uIHBlZyRjOTIoZGlnaXRzKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGRpZ2l0cy5qb2luKCcnKSwgMTApO1xuICB9O1xuXG4gIHZhciBwZWckYzkzID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJhcmdOYW1lXCIpO1xuICB2YXIgcGVnJGN1cnJQb3MgPSAwO1xuICB2YXIgcGVnJHNhdmVkUG9zID0gMDtcbiAgdmFyIHBlZyRwb3NEZXRhaWxzQ2FjaGUgPSBbe1xuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAxXG4gIH1dO1xuICB2YXIgcGVnJG1heEZhaWxQb3MgPSAwO1xuICB2YXIgcGVnJG1heEZhaWxFeHBlY3RlZCA9IFtdO1xuICB2YXIgcGVnJHNpbGVudEZhaWxzID0gMDtcbiAgdmFyIHBlZyRyZXN1bHQ7XG5cbiAgaWYgKG9wdGlvbnMuc3RhcnRSdWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIShvcHRpb25zLnN0YXJ0UnVsZSBpbiBwZWckc3RhcnRSdWxlRnVuY3Rpb25zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3Qgc3RhcnQgcGFyc2luZyBmcm9tIHJ1bGUgXFxcIlwiICsgb3B0aW9ucy5zdGFydFJ1bGUgKyBcIlxcXCIuXCIpO1xuICAgIH1cblxuICAgIHBlZyRzdGFydFJ1bGVGdW5jdGlvbiA9IHBlZyRzdGFydFJ1bGVGdW5jdGlvbnNbb3B0aW9ucy5zdGFydFJ1bGVdO1xuICB9XG5cbiAgZnVuY3Rpb24gdGV4dCgpIHtcbiAgICByZXR1cm4gaW5wdXQuc3Vic3RyaW5nKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9jYXRpb24oKSB7XG4gICAgcmV0dXJuIHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RlZChkZXNjcmlwdGlvbiwgbG9jYXRpb24xKSB7XG4gICAgbG9jYXRpb24xID0gbG9jYXRpb24xICE9PSB1bmRlZmluZWQgPyBsb2NhdGlvbjEgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICAgIHRocm93IHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihbcGVnJG90aGVyRXhwZWN0YXRpb24oZGVzY3JpcHRpb24pXSwgaW5wdXQuc3Vic3RyaW5nKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpLCBsb2NhdGlvbjEpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXJyb3IobWVzc2FnZSwgbG9jYXRpb24xKSB7XG4gICAgbG9jYXRpb24xID0gbG9jYXRpb24xICE9PSB1bmRlZmluZWQgPyBsb2NhdGlvbjEgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICAgIHRocm93IHBlZyRidWlsZFNpbXBsZUVycm9yKG1lc3NhZ2UsIGxvY2F0aW9uMSk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKHRleHQxLCBpZ25vcmVDYXNlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwibGl0ZXJhbFwiLFxuICAgICAgdGV4dDogdGV4dDEsXG4gICAgICBpZ25vcmVDYXNlOiBpZ25vcmVDYXNlXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjbGFzc0V4cGVjdGF0aW9uKHBhcnRzLCBpbnZlcnRlZCwgaWdub3JlQ2FzZSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNsYXNzXCIsXG4gICAgICBwYXJ0czogcGFydHMsXG4gICAgICBpbnZlcnRlZDogaW52ZXJ0ZWQsXG4gICAgICBpZ25vcmVDYXNlOiBpZ25vcmVDYXNlXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRhbnlFeHBlY3RhdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJhbnlcIlxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckZW5kRXhwZWN0YXRpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZW5kXCJcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJG90aGVyRXhwZWN0YXRpb24oZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJvdGhlclwiLFxuICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjb21wdXRlUG9zRGV0YWlscyhwb3MpIHtcbiAgICB2YXIgZGV0YWlscyA9IHBlZyRwb3NEZXRhaWxzQ2FjaGVbcG9zXTtcbiAgICB2YXIgcDtcblxuICAgIGlmIChkZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZGV0YWlscztcbiAgICB9IGVsc2Uge1xuICAgICAgcCA9IHBvcyAtIDE7XG5cbiAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkge1xuICAgICAgICBwLS07XG4gICAgICB9XG5cbiAgICAgIGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3BdO1xuICAgICAgZGV0YWlscyA9IHtcbiAgICAgICAgbGluZTogZGV0YWlscy5saW5lLFxuICAgICAgICBjb2x1bW46IGRldGFpbHMuY29sdW1uXG4gICAgICB9O1xuXG4gICAgICB3aGlsZSAocCA8IHBvcykge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwKSA9PT0gMTApIHtcbiAgICAgICAgICBkZXRhaWxzLmxpbmUrKztcbiAgICAgICAgICBkZXRhaWxzLmNvbHVtbiA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGV0YWlscy5jb2x1bW4rKztcbiAgICAgICAgfVxuXG4gICAgICAgIHArKztcbiAgICAgIH1cblxuICAgICAgcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdID0gZGV0YWlscztcbiAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjb21wdXRlTG9jYXRpb24oc3RhcnRQb3MsIGVuZFBvcykge1xuICAgIHZhciBzdGFydFBvc0RldGFpbHMgPSBwZWckY29tcHV0ZVBvc0RldGFpbHMoc3RhcnRQb3MpO1xuICAgIHZhciBlbmRQb3NEZXRhaWxzID0gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKGVuZFBvcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIG9mZnNldDogc3RhcnRQb3MsXG4gICAgICAgIGxpbmU6IHN0YXJ0UG9zRGV0YWlscy5saW5lLFxuICAgICAgICBjb2x1bW46IHN0YXJ0UG9zRGV0YWlscy5jb2x1bW5cbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgb2Zmc2V0OiBlbmRQb3MsXG4gICAgICAgIGxpbmU6IGVuZFBvc0RldGFpbHMubGluZSxcbiAgICAgICAgY29sdW1uOiBlbmRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckZmFpbChleHBlY3RlZDEpIHtcbiAgICBpZiAocGVnJGN1cnJQb3MgPCBwZWckbWF4RmFpbFBvcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwZWckY3VyclBvcyA+IHBlZyRtYXhGYWlsUG9zKSB7XG4gICAgICBwZWckbWF4RmFpbFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCA9IFtdO1xuICAgIH1cblxuICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQucHVzaChleHBlY3RlZDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGJ1aWxkU2ltcGxlRXJyb3IobWVzc2FnZSwgbG9jYXRpb24xKSB7XG4gICAgcmV0dXJuIG5ldyBTeW50YXhFcnJvcihtZXNzYWdlLCBbXSwgXCJcIiwgbG9jYXRpb24xKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihleHBlY3RlZDEsIGZvdW5kLCBsb2NhdGlvbjEpIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheEVycm9yKFN5bnRheEVycm9yLmJ1aWxkTWVzc2FnZShleHBlY3RlZDEsIGZvdW5kKSwgZXhwZWN0ZWQxLCBmb3VuZCwgbG9jYXRpb24xKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZXN0YXJ0KCkge1xuICAgIHZhciBzMDtcbiAgICBzMCA9IHBlZyRwYXJzZW1lc3NhZ2UoKTtcbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VtZXNzYWdlKCkge1xuICAgIHZhciBzMCwgczE7XG4gICAgczAgPSBbXTtcbiAgICBzMSA9IHBlZyRwYXJzZW1lc3NhZ2VFbGVtZW50KCk7XG5cbiAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwLnB1c2goczEpO1xuICAgICAgczEgPSBwZWckcGFyc2VtZXNzYWdlRWxlbWVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZW1lc3NhZ2VFbGVtZW50KCkge1xuICAgIHZhciBzMDtcbiAgICBzMCA9IHBlZyRwYXJzZWxpdGVyYWxFbGVtZW50KCk7XG5cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJHBhcnNlYXJndW1lbnRFbGVtZW50KCk7XG5cbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRwYXJzZXNpbXBsZUZvcm1hdEVsZW1lbnQoKTtcblxuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRwYXJzZXBsdXJhbEVsZW1lbnQoKTtcblxuICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczAgPSBwZWckcGFyc2VzZWxlY3RFbGVtZW50KCk7XG5cbiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMCA9IHBlZyRwYXJzZXBvdW5kRWxlbWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZW1lc3NhZ2VUZXh0KCkge1xuICAgIHZhciBzMCwgczEsIHMyO1xuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBzMiA9IHBlZyRwYXJzZWRvdWJsZUFwb3N0cm9waGVzKCk7XG5cbiAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlcXVvdGVkU3RyaW5nKCk7XG5cbiAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IHBlZyRwYXJzZXVucXVvdGVkU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczEucHVzaChzMik7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlZG91YmxlQXBvc3Ryb3BoZXMoKTtcblxuICAgICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IHBlZyRwYXJzZXF1b3RlZFN0cmluZygpO1xuXG4gICAgICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRwYXJzZXVucXVvdGVkU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzAoczEpO1xuICAgIH1cblxuICAgIHMwID0gczE7XG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlbGl0ZXJhbEVsZW1lbnQoKSB7XG4gICAgdmFyIHMwLCBzMTtcbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlbWVzc2FnZVRleHQoKTtcblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMShzMSk7XG4gICAgfVxuXG4gICAgczAgPSBzMTtcbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2Vwb3VuZEVsZW1lbnQoKSB7XG4gICAgdmFyIHMwLCBzMTtcbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuXG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNSkge1xuICAgICAgczEgPSBwZWckYzI7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgcGVnJGZhaWwocGVnJGMzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzQoKTtcbiAgICB9XG5cbiAgICBzMCA9IHMxO1xuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZWFyZ3VtZW50RWxlbWVudCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNTtcbiAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuXG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgIHMxID0gcGVnJGM2O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjNyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV8oKTtcblxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlYXJnTmFtZU9yTnVtYmVyKCk7XG5cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG5cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM4O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczEgPSBwZWckYzEwKHMzKTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcblxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjNSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlbnVtYmVyU2tlbGV0b25JZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczQgPSBwZWckcGFyc2V3aGl0ZVNwYWNlKCk7XG5cbiAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChwZWckYzEyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICBwZWckZmFpbChwZWckYzEzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuXG4gICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5sZW5ndGggPiBwZWckY3VyclBvcykge1xuICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IFtzMywgczRdO1xuICAgICAgICBzMiA9IHMzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMjtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICAgICAgczQgPSBwZWckcGFyc2V3aGl0ZVNwYWNlKCk7XG5cbiAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKHBlZyRjMTIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuXG4gICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA+IHBlZyRjdXJyUG9zKSB7XG4gICAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMxNCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IFtzMywgczRdO1xuICAgICAgICAgICAgczIgPSBzMztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMjtcbiAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMjtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBpbnB1dC5zdWJzdHJpbmcoczAsIHBlZyRjdXJyUG9zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcblxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjMTEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZW51bWJlclNrZWxldG9uVG9rZW5PcHRpb24oKSB7XG4gICAgdmFyIHMwLCBzMSwgczI7XG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBwZWckY3VyclBvcztcblxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDcpIHtcbiAgICAgIHMxID0gcGVnJGMxNjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzE3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlbnVtYmVyU2tlbGV0b25JZCgpO1xuXG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxOChzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG5cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzE1KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VudW1iZXJTa2VsZXRvblRva2VuKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQ7XG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV8oKTtcblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VudW1iZXJTa2VsZXRvbklkKCk7XG5cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IFtdO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZW51bWJlclNrZWxldG9uVG9rZW5PcHRpb24oKTtcblxuICAgICAgICB3aGlsZSAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZW51bWJlclNrZWxldG9uVG9rZW5PcHRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMyMChzMiwgczMpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcblxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjMTkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZW51bWJlclNrZWxldG9uKCkge1xuICAgIHZhciBzMCwgczEsIHMyO1xuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBzMiA9IHBlZyRwYXJzZW51bWJlclNrZWxldG9uVG9rZW4oKTtcblxuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRwYXJzZW51bWJlclNrZWxldG9uVG9rZW4oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMjEoczEpO1xuICAgIH1cblxuICAgIHMwID0gczE7XG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlbnVtYmVyQXJnU3R5bGUoKSB7XG4gICAgdmFyIHMwLCBzMSwgczI7XG4gICAgczAgPSBwZWckY3VyclBvcztcblxuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzIyKSB7XG4gICAgICBzMSA9IHBlZyRjMjI7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgcGVnJGZhaWwocGVnJGMyMyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZW51bWJlclNrZWxldG9uKCk7XG5cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzI0KHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBwZWckY3VyclBvcztcbiAgICAgIHMxID0gcGVnJGMyNSgpO1xuXG4gICAgICBpZiAoczEpIHtcbiAgICAgICAgczEgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IHBlZyRwYXJzZW1lc3NhZ2VUZXh0KCk7XG5cbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzI2KHMyKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlbnVtYmVyRm9ybWF0RWxlbWVudCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzOCwgczksIHMxMCwgczExLCBzMTI7XG4gICAgczAgPSBwZWckY3VyclBvcztcblxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICBzMSA9IHBlZyRjNjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VfKCk7XG5cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZWFyZ05hbWVPck51bWJlcigpO1xuXG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ0KSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGMyNztcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyOCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzI5KSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRjMjk7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA2O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzMCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZV8oKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJGN1cnJQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NCkge1xuICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRjMjc7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyOCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHMxMCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRwYXJzZV8oKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxMiA9IHBlZyRwYXJzZW51bWJlckFyZ1N0eWxlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczEwID0gW3MxMCwgczExLCBzMTJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzOSA9IHMxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzOTtcbiAgICAgICAgICAgICAgICAgICAgICBzOSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoczkgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzOSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoczkgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckcGFyc2VfKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTEgPSBwZWckYzg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTEgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMzMShzMywgczcsIHM5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VkYXRlVGltZVNrZWxldG9uTGl0ZXJhbCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG4gICAgczAgPSBwZWckY3VyclBvcztcblxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzkpIHtcbiAgICAgIHMxID0gcGVnJGMzMjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzMzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRwYXJzZWRvdWJsZUFwb3N0cm9waGVzKCk7XG5cbiAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAocGVnJGMzNC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzNSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZWRvdWJsZUFwb3N0cm9waGVzKCk7XG5cbiAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChwZWckYzM0LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzM1KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuXG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzOSkge1xuICAgICAgICAgIHMzID0gcGVnJGMzMjtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMzMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMxID0gW3MxLCBzMiwgczNdO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gW107XG4gICAgICBzMSA9IHBlZyRwYXJzZWRvdWJsZUFwb3N0cm9waGVzKCk7XG5cbiAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAocGVnJGMzNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzNyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMC5wdXNoKHMxKTtcbiAgICAgICAgICBzMSA9IHBlZyRwYXJzZWRvdWJsZUFwb3N0cm9waGVzKCk7XG5cbiAgICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChwZWckYzM2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzM3KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZWRhdGVUaW1lU2tlbGV0b25QYXR0ZXJuKCkge1xuICAgIHZhciBzMCwgczE7XG4gICAgczAgPSBbXTtcblxuICAgIGlmIChwZWckYzM4LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzM5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHdoaWxlIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMC5wdXNoKHMxKTtcblxuICAgICAgICBpZiAocGVnJGMzOC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzOSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VkYXRlVGltZVNrZWxldG9uKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJGN1cnJQb3M7XG4gICAgczIgPSBbXTtcbiAgICBzMyA9IHBlZyRwYXJzZWRhdGVUaW1lU2tlbGV0b25MaXRlcmFsKCk7XG5cbiAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMzID0gcGVnJHBhcnNlZGF0ZVRpbWVTa2VsZXRvblBhdHRlcm4oKTtcbiAgICB9XG5cbiAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckcGFyc2VkYXRlVGltZVNrZWxldG9uTGl0ZXJhbCgpO1xuXG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlZGF0ZVRpbWVTa2VsZXRvblBhdHRlcm4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IGlucHV0LnN1YnN0cmluZyhzMSwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHMyO1xuICAgIH1cblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNDAoczEpO1xuICAgIH1cblxuICAgIHMwID0gczE7XG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlZGF0ZU9yVGltZUFyZ1N0eWxlKCkge1xuICAgIHZhciBzMCwgczEsIHMyO1xuICAgIHMwID0gcGVnJGN1cnJQb3M7XG5cbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMyMikge1xuICAgICAgczEgPSBwZWckYzIyO1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjMjMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VkYXRlVGltZVNrZWxldG9uKCk7XG5cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzI0KHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBwZWckY3VyclBvcztcbiAgICAgIHMxID0gcGVnJGM0MSgpO1xuXG4gICAgICBpZiAoczEpIHtcbiAgICAgICAgczEgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IHBlZyRwYXJzZW1lc3NhZ2VUZXh0KCk7XG5cbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzI2KHMyKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlZGF0ZU9yVGltZUZvcm1hdEVsZW1lbnQoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgczgsIHM5LCBzMTAsIHMxMSwgczEyO1xuICAgIHMwID0gcGVnJGN1cnJQb3M7XG5cbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyMykge1xuICAgICAgczEgPSBwZWckYzY7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgcGVnJGZhaWwocGVnJGM3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VhcmdOYW1lT3JOdW1iZXIoKTtcblxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcblxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NCkge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjMjc7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcblxuICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KSA9PT0gcGVnJGM0Mikge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckYzQyO1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNDMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCkgPT09IHBlZyRjNDQpIHtcbiAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckYzQ0O1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA0O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzQ1KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VfKCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzOSA9IHBlZyRjdXJyUG9zO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckYzI3O1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzMTAgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzMTEgPSBwZWckcGFyc2VfKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMTIgPSBwZWckcGFyc2VkYXRlT3JUaW1lQXJnU3R5bGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTAgPSBbczEwLCBzMTEsIHMxMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHM5ID0gczEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM5O1xuICAgICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM5O1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzOSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzOSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZV8oKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTAgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRjODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzMxKHMzLCBzNywgczkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZXNpbXBsZUZvcm1hdEVsZW1lbnQoKSB7XG4gICAgdmFyIHMwO1xuICAgIHMwID0gcGVnJHBhcnNlbnVtYmVyRm9ybWF0RWxlbWVudCgpO1xuXG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRwYXJzZWRhdGVPclRpbWVGb3JtYXRFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlcGx1cmFsRWxlbWVudCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzOCwgczksIHMxMCwgczExLCBzMTIsIHMxMywgczE0LCBzMTU7XG4gICAgczAgPSBwZWckY3VyclBvcztcblxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICBzMSA9IHBlZyRjNjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VfKCk7XG5cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZWFyZ05hbWVPck51bWJlcigpO1xuXG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ0KSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGMyNztcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMyOCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpID09PSBwZWckYzQ2KSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRjNDY7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA2O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM0Nyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHM3ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMykgPT09IHBlZyRjNDgpIHtcbiAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckYzQ4O1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSAxMztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM0OSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJGMyNztcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzOSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZV8oKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTAgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRjdXJyUG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KSA9PT0gcGVnJGM1MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTIgPSBwZWckYzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczEyID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM1MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTMgPSBwZWckcGFyc2VfKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxNCA9IHBlZyRwYXJzZW51bWJlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEyID0gW3MxMiwgczEzLCBzMTRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczExID0gczEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczEyID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMTMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMTQgPSBwZWckcGFyc2VwbHVyYWxPcHRpb24oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzMTQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEzLnB1c2goczE0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczE0ID0gcGVnJHBhcnNlcGx1cmFsT3B0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczE0ID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczE0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczE1ID0gcGVnJGM4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczE1ID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGM1MihzMywgczcsIHMxMSwgczEzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlc2VsZWN0RWxlbWVudCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzOCwgczksIHMxMCwgczExLCBzMTIsIHMxMztcbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuXG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgIHMxID0gcGVnJGM2O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjNyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV8oKTtcblxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlYXJnTmFtZU9yTnVtYmVyKCk7XG5cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG5cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckYzI3O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzI4KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG5cbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNikgPT09IHBlZyRjNTMpIHtcbiAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJGM1MztcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDY7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzU0KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJGMyNztcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMjgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzOSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZV8oKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTAgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgczEyID0gcGVnJHBhcnNlc2VsZWN0T3B0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHMxMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxMS5wdXNoKHMxMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczEyID0gcGVnJHBhcnNlc2VsZWN0T3B0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczEyID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEzID0gcGVnJGM4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEzID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzU1KHMzLCBzMTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VwbHVyYWxSdWxlU2VsZWN0VmFsdWUoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzO1xuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcblxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjEpIHtcbiAgICAgIHMyID0gcGVnJGM1NjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMyID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzU3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMzID0gcGVnJHBhcnNlbnVtYmVyKCk7XG5cbiAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IFtzMiwgczNdO1xuICAgICAgICBzMSA9IHMyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMTtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMxO1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBpbnB1dC5zdWJzdHJpbmcoczAsIHBlZyRjdXJyUG9zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJHBhcnNlYXJnTmFtZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZXNlbGVjdE9wdGlvbigpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfKCk7XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlYXJnTmFtZSgpO1xuXG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VfKCk7XG5cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJGM2O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHM1ID0gcGVnJGM1OChzMik7XG5cbiAgICAgICAgICAgIGlmIChzNSkge1xuICAgICAgICAgICAgICBzNSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlbWVzc2FnZSgpO1xuXG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRjODtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNTkoczIsIHM2KTtcbiAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlcGx1cmFsT3B0aW9uKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV8oKTtcblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VwbHVyYWxSdWxlU2VsZWN0VmFsdWUoKTtcblxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlXygpO1xuXG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjNjtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBzNSA9IHBlZyRjNjAoczIpO1xuXG4gICAgICAgICAgICBpZiAoczUpIHtcbiAgICAgICAgICAgICAgczUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZW1lc3NhZ2UoKTtcblxuICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckYzg7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGM5KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzYxKHMyLCBzNik7XG4gICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZXdoaXRlU3BhY2UoKSB7XG4gICAgdmFyIHMwLCBzMTtcbiAgICBwZWckc2lsZW50RmFpbHMrKztcblxuICAgIGlmIChwZWckYzYzLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMwID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzY0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcblxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjNjIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZXBhdHRlcm5TeW50YXgoKSB7XG4gICAgdmFyIHMwLCBzMTtcbiAgICBwZWckc2lsZW50RmFpbHMrKztcblxuICAgIGlmIChwZWckYzY2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMwID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzY3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcblxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjNjUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZV8oKSB7XG4gICAgdmFyIHMwLCBzMSwgczI7XG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IFtdO1xuICAgIHMyID0gcGVnJHBhcnNld2hpdGVTcGFjZSgpO1xuXG4gICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMS5wdXNoKHMyKTtcbiAgICAgIHMyID0gcGVnJHBhcnNld2hpdGVTcGFjZSgpO1xuICAgIH1cblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBpbnB1dC5zdWJzdHJpbmcoczAsIHBlZyRjdXJyUG9zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcblxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjNjgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZW51bWJlcigpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcbiAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuXG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NSkge1xuICAgICAgczEgPSBwZWckYzcwO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjNzEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VhcmdOdW1iZXIoKTtcblxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNzIoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcblxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjNjkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZWFwb3N0cm9waGUoKSB7XG4gICAgdmFyIHMwLCBzMTtcbiAgICBwZWckc2lsZW50RmFpbHMrKztcblxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzkpIHtcbiAgICAgIHMwID0gcGVnJGMzMjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzMzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcblxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjNzMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZWRvdWJsZUFwb3N0cm9waGVzKCkge1xuICAgIHZhciBzMCwgczE7XG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBwZWckY3VyclBvcztcblxuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzc1KSB7XG4gICAgICBzMSA9IHBlZyRjNzU7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgcGVnJGZhaWwocGVnJGM3Nik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM3NygpO1xuICAgIH1cblxuICAgIHMwID0gczE7XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG5cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzc0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VxdW90ZWRTdHJpbmcoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczU7XG4gICAgczAgPSBwZWckY3VyclBvcztcblxuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzkpIHtcbiAgICAgIHMxID0gcGVnJGMzMjtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzMzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlZXNjYXBlZENoYXIoKTtcblxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gW107XG5cbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjNzUpIHtcbiAgICAgICAgICBzNSA9IHBlZyRjNzU7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICBwZWckZmFpbChwZWckYzc2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAocGVnJGMzNC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgICAgICAgcGVnJGZhaWwocGVnJGMzNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQucHVzaChzNSk7XG5cbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGM3NSkge1xuICAgICAgICAgICAgczUgPSBwZWckYzc1O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjNzYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKHBlZyRjMzQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMzUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBpbnB1dC5zdWJzdHJpbmcoczMsIHBlZyRjdXJyUG9zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzOSkge1xuICAgICAgICAgICAgczQgPSBwZWckYzMyO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMzMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNzgoczIsIHMzKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNldW5xdW90ZWRTdHJpbmcoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzO1xuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcblxuICAgIGlmIChpbnB1dC5sZW5ndGggPiBwZWckY3VyclBvcykge1xuICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczIgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjMTQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMyA9IHBlZyRjNzkoczIpO1xuXG4gICAgICBpZiAoczMpIHtcbiAgICAgICAgczMgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IFtzMiwgczNdO1xuICAgICAgICBzMSA9IHMyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMTtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMxO1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMCkge1xuICAgICAgICBzMSA9IHBlZyRjODA7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgIHBlZyRmYWlsKHBlZyRjODEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IGlucHV0LnN1YnN0cmluZyhzMCwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZWVzY2FwZWRDaGFyKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJGN1cnJQb3M7XG5cbiAgICBpZiAoaW5wdXQubGVuZ3RoID4gcGVnJGN1cnJQb3MpIHtcbiAgICAgIHMyID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMyID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzE0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczMgPSBwZWckYzgyKHMyKTtcblxuICAgICAgaWYgKHMzKSB7XG4gICAgICAgIHMzID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuXG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBbczIsIHMzXTtcbiAgICAgICAgczEgPSBzMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczE7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMTtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gaW5wdXQuc3Vic3RyaW5nKHMwLCBwZWckY3VyclBvcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gczE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlYXJnTmFtZU9yTnVtYmVyKCkge1xuICAgIHZhciBzMCwgczE7XG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZWFyZ051bWJlcigpO1xuXG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRwYXJzZWFyZ05hbWUoKTtcbiAgICB9XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gaW5wdXQuc3Vic3RyaW5nKHMwLCBwZWckY3VyclBvcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gczE7XG4gICAgfVxuXG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG5cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzgzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VhcmdOdW1iZXIoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNDtcbiAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuXG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0OCkge1xuICAgICAgczEgPSBwZWckYzg1O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuXG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgIHBlZyRmYWlsKHBlZyRjODYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjODcoKTtcbiAgICB9XG5cbiAgICBzMCA9IHMxO1xuXG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckY3VyclBvcztcblxuICAgICAgaWYgKHBlZyRjODgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICBzMiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgIHBlZyRmYWlsKHBlZyRjODkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IFtdO1xuXG4gICAgICAgIGlmIChwZWckYzkwLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICBwZWckZmFpbChwZWckYzkxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMy5wdXNoKHM0KTtcblxuICAgICAgICAgIGlmIChwZWckYzkwLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcblxuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgICAgICBwZWckZmFpbChwZWckYzkxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IFtzMiwgczNdO1xuICAgICAgICAgIHMxID0gczI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMTtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczE7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cblxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjOTIoczEpO1xuICAgICAgfVxuXG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuXG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHtcbiAgICAgICAgcGVnJGZhaWwocGVnJGM4NCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlYXJnTmFtZSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczQgPSBwZWckcGFyc2V3aGl0ZVNwYWNlKCk7XG5cbiAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHM0ID0gcGVnJHBhcnNlcGF0dGVyblN5bnRheCgpO1xuICAgIH1cblxuICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuXG4gICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5sZW5ndGggPiBwZWckY3VyclBvcykge1xuICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG5cbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IFtzMywgczRdO1xuICAgICAgICBzMiA9IHMzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMjtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICAgICAgczQgPSBwZWckcGFyc2V3aGl0ZVNwYWNlKCk7XG5cbiAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VwYXR0ZXJuU3ludGF4KCk7XG4gICAgICAgIH1cblxuICAgICAgICBwZWckc2lsZW50RmFpbHMtLTtcblxuICAgICAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPiBwZWckY3VyclBvcykge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuXG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7XG4gICAgICAgICAgICAgIHBlZyRmYWlsKHBlZyRjMTQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBbczMsIHM0XTtcbiAgICAgICAgICAgIHMyID0gczM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczI7XG4gICAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczI7XG4gICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gaW5wdXQuc3Vic3RyaW5nKHMwLCBwZWckY3VyclBvcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gczE7XG4gICAgfVxuXG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG5cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcblxuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkge1xuICAgICAgICBwZWckZmFpbChwZWckYzkzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICB2YXIgbWVzc2FnZUN0eCA9IFsncm9vdCddO1xuXG4gIGZ1bmN0aW9uIGlzTmVzdGVkTWVzc2FnZVRleHQoKSB7XG4gICAgcmV0dXJuIG1lc3NhZ2VDdHgubGVuZ3RoID4gMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSW5QbHVyYWxPcHRpb24oKSB7XG4gICAgcmV0dXJuIG1lc3NhZ2VDdHhbbWVzc2FnZUN0eC5sZW5ndGggLSAxXSA9PT0gJ3BsdXJhbCc7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnRMb2NhdGlvbigpIHtcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmNhcHR1cmVMb2NhdGlvbiA/IHtcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbigpXG4gICAgfSA6IHt9O1xuICB9XG5cbiAgcGVnJHJlc3VsdCA9IHBlZyRzdGFydFJ1bGVGdW5jdGlvbigpO1xuXG4gIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGVnJHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGVnJHJlc3VsdCAhPT0gcGVnJEZBSUxFRCAmJiBwZWckY3VyclBvcyA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcGVnJGZhaWwocGVnJGVuZEV4cGVjdGF0aW9uKCkpO1xuICAgIH1cblxuICAgIHRocm93IHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihwZWckbWF4RmFpbEV4cGVjdGVkLCBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aCA/IGlucHV0LmNoYXJBdChwZWckbWF4RmFpbFBvcykgOiBudWxsLCBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aCA/IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJG1heEZhaWxQb3MsIHBlZyRtYXhGYWlsUG9zICsgMSkgOiBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcykpO1xuICB9XG59XG5cbmV4cG9ydCB2YXIgcGVnUGFyc2UgPSBwZWckcGFyc2U7IiwidmFyIF9fc3ByZWFkQXJyYXlzID0gdGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXlzIHx8IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG4gICAgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICB9XG5cbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKSB7XG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspIHtcbiAgICAgIHJba10gPSBhW2pdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByO1xufTtcblxuaW1wb3J0IHsgaXNQbHVyYWxFbGVtZW50LCBpc0xpdGVyYWxFbGVtZW50LCBpc1NlbGVjdEVsZW1lbnQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHBlZ1BhcnNlIH0gZnJvbSAnLi9wYXJzZXInO1xudmFyIFBMVVJBTF9IQVNIVEFHX1JFR0VYID0gLyhefFteXFxcXF0pIy9nO1xuLyoqXG4gKiBXaGV0aGVyIHRvIGNvbnZlcnQgYCNgIGluIHBsdXJhbCBydWxlIG9wdGlvbnNcbiAqIHRvIGB7dmFyLCBudW1iZXJ9YFxuICogQHBhcmFtIGVsIEFTVCBFbGVtZW50XG4gKiBAcGFyYW0gcGx1cmFsU3RhY2sgY3VycmVudCBwbHVyYWwgc3RhY2tcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSGFzaHRhZ0luUGx1cmFsKGVscykge1xuICBlbHMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICAvLyBJZiB3ZSdyZSBlbmNvdW50ZXJpbmcgYSBwbHVyYWwgZWxcbiAgICBpZiAoIWlzUGx1cmFsRWxlbWVudChlbCkgJiYgIWlzU2VsZWN0RWxlbWVudChlbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEdvIGRvd24gdGhlIG9wdGlvbnMgYW5kIHNlYXJjaCBmb3IgIyBpbiBhbnkgbGl0ZXJhbCBlbGVtZW50XG5cblxuICAgIE9iamVjdC5rZXlzKGVsLm9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgICB2YXIgX2E7XG5cbiAgICAgIHZhciBvcHQgPSBlbC5vcHRpb25zW2lkXTsgLy8gSWYgd2UgZ290IGEgbWF0Y2gsIHdlIGhhdmUgdG8gc3BsaXQgdGhpc1xuICAgICAgLy8gYW5kIGluamVjdCBhIE51bWJlckVsZW1lbnQgaW4gdGhlIG1pZGRsZVxuXG4gICAgICB2YXIgbWF0Y2hpbmdMaXRlcmFsRWxJbmRleCA9IC0xO1xuICAgICAgdmFyIGxpdGVyYWxFbCA9IHVuZGVmaW5lZDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHQudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsXzEgPSBvcHQudmFsdWVbaV07XG5cbiAgICAgICAgaWYgKGlzTGl0ZXJhbEVsZW1lbnQoZWxfMSkgJiYgUExVUkFMX0hBU0hUQUdfUkVHRVgudGVzdChlbF8xLnZhbHVlKSkge1xuICAgICAgICAgIG1hdGNoaW5nTGl0ZXJhbEVsSW5kZXggPSBpO1xuICAgICAgICAgIGxpdGVyYWxFbCA9IGVsXzE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxpdGVyYWxFbCkge1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBsaXRlcmFsRWwudmFsdWUucmVwbGFjZShQTFVSQUxfSEFTSFRBR19SRUdFWCwgXCIkMXtcIiArIGVsLnZhbHVlICsgXCIsIG51bWJlcn1cIik7XG4gICAgICAgIHZhciBuZXdFbHMgPSBwZWdQYXJzZShuZXdWYWx1ZSk7XG5cbiAgICAgICAgKF9hID0gb3B0LnZhbHVlKS5zcGxpY2UuYXBwbHkoX2EsIF9fc3ByZWFkQXJyYXlzKFttYXRjaGluZ0xpdGVyYWxFbEluZGV4LCAxXSwgbmV3RWxzKSk7XG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZUhhc2h0YWdJblBsdXJhbChvcHQudmFsdWUpO1xuICAgIH0pO1xuICB9KTtcbn0iLCJpbXBvcnQgeyBwZWdQYXJzZSB9IGZyb20gJy4vcGFyc2VyJztcbmltcG9ydCB7IG5vcm1hbGl6ZUhhc2h0YWdJblBsdXJhbCB9IGZyb20gJy4vbm9ybWFsaXplJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXJzZXInO1xuZXhwb3J0ICogZnJvbSAnLi9za2VsZXRvbic7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdHMpIHtcbiAgdmFyIGVscyA9IHBlZ1BhcnNlKGlucHV0LCBvcHRzKTtcblxuICBpZiAoIW9wdHMgfHwgb3B0cy5ub3JtYWxpemVIYXNodGFnSW5QbHVyYWwgIT09IGZhbHNlKSB7XG4gICAgbm9ybWFsaXplSGFzaHRhZ0luUGx1cmFsKGVscyk7XG4gIH1cblxuICByZXR1cm4gZWxzO1xufSIsIi8qXG5Db3B5cmlnaHQgKGMpIDIwMTQsIFlhaG9vISBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5Db3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuXG5TZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuKi9cbnZhciBfX3NwcmVhZEFycmF5cyA9IHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cyB8fCBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuICAgIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgfVxuXG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKykge1xuICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKSB7XG4gICAgICByW2tdID0gYVtqXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcjtcbn07IC8vIC0tIFV0aWxpdGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuZnVuY3Rpb24gZ2V0Q2FjaGVJZChpbnB1dHMpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0cy5tYXAoZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyBvcmRlcmVkUHJvcHMoaW5wdXQpIDogaW5wdXQ7XG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gb3JkZXJlZFByb3BzKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5zb3J0KCkubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgdmFyIF9hO1xuXG4gICAgcmV0dXJuIF9hID0ge30sIF9hW2tdID0gb2JqW2tdLCBfYTtcbiAgfSk7XG59XG5cbnZhciBtZW1vaXplRm9ybWF0Q29uc3RydWN0b3IgPSBmdW5jdGlvbiBtZW1vaXplRm9ybWF0Q29uc3RydWN0b3IoRm9ybWF0Q29uc3RydWN0b3IsIGNhY2hlKSB7XG4gIGlmIChjYWNoZSA9PT0gdm9pZCAwKSB7XG4gICAgY2FjaGUgPSB7fTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9hO1xuXG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuXG4gICAgdmFyIGNhY2hlSWQgPSBnZXRDYWNoZUlkKGFyZ3MpO1xuICAgIHZhciBmb3JtYXQgPSBjYWNoZUlkICYmIGNhY2hlW2NhY2hlSWRdO1xuXG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIGZvcm1hdCA9IG5ldyAoKF9hID0gRm9ybWF0Q29uc3RydWN0b3IpLmJpbmQuYXBwbHkoX2EsIF9fc3ByZWFkQXJyYXlzKFt2b2lkIDBdLCBhcmdzKSkpKCk7XG5cbiAgICAgIGlmIChjYWNoZUlkKSB7XG4gICAgICAgIGNhY2hlW2NhY2hlSWRdID0gZm9ybWF0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXQ7XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplRm9ybWF0Q29uc3RydWN0b3I7IiwidmFyIF9fYXNzaWduID0gdGhpcyAmJiB0aGlzLl9fYXNzaWduIHx8IGZ1bmN0aW9uICgpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBzID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBwIGluIHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHQ7XG4gIH07XG5cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuLyoqXG4gKiBodHRwczovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGVcbiAqIENyZWRpdDogaHR0cHM6Ly9naXRodWIuY29tL2NhcmlkeS9pbnRsLWRhdGV0aW1lZm9ybWF0LXBhdHRlcm4vYmxvYi9tYXN0ZXIvaW5kZXguanNcbiAqIHdpdGggc29tZSB0d2Vha3NcbiAqL1xuXG5cbnZhciBEQVRFX1RJTUVfUkVHRVggPSAvKD86W0VlY117MSw2fXxHezEsNX18W1FxXXsxLDV9fCg/Olt5WXVyXSt8VXsxLDV9KXxbTUxdezEsNX18ZHsxLDJ9fER7MSwzfXxGezF9fFthYkJdezEsNX18W2hrSEtdezEsMn18d3sxLDJ9fFd7MX18bXsxLDJ9fHN7MSwyfXxbelpPdlZ4WF17MSw0fSkoPz0oW14nXSonW14nXSonKSpbXiddKiQpL2c7XG4vKipcbiAqIFBhcnNlIERhdGUgdGltZSBza2VsZXRvbiBpbnRvIEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zXG4gKiBSZWY6IGh0dHBzOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogQHB1YmxpY1xuICogQHBhcmFtIHNrZWxldG9uIHNrZWxldG9uIHN0cmluZ1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGVUaW1lU2tlbGV0b24oc2tlbGV0b24pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBza2VsZXRvbi5yZXBsYWNlKERBVEVfVElNRV9SRUdFWCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgdmFyIGxlbiA9IG1hdGNoLmxlbmd0aDtcblxuICAgIHN3aXRjaCAobWF0Y2hbMF0pIHtcbiAgICAgIC8vIEVyYVxuICAgICAgY2FzZSAnRyc6XG4gICAgICAgIHJlc3VsdC5lcmEgPSBsZW4gPT09IDQgPyAnbG9uZycgOiBsZW4gPT09IDUgPyAnbmFycm93JyA6ICdzaG9ydCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gWWVhclxuXG4gICAgICBjYXNlICd5JzpcbiAgICAgICAgcmVzdWx0LnllYXIgPSBsZW4gPT09IDIgPyAnMi1kaWdpdCcgOiAnbnVtZXJpYyc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdZJzpcbiAgICAgIGNhc2UgJ3UnOlxuICAgICAgY2FzZSAnVSc6XG4gICAgICBjYXNlICdyJzpcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2BZL3UvVS9yYCAoeWVhcikgcGF0dGVybnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHVzZSBgeWAgaW5zdGVhZCcpO1xuICAgICAgLy8gUXVhcnRlclxuXG4gICAgICBjYXNlICdxJzpcbiAgICAgIGNhc2UgJ1EnOlxuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYHEvUWAgKHF1YXJ0ZXIpIHBhdHRlcm5zIGFyZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAvLyBNb250aFxuXG4gICAgICBjYXNlICdNJzpcbiAgICAgIGNhc2UgJ0wnOlxuICAgICAgICByZXN1bHQubW9udGggPSBbJ251bWVyaWMnLCAnMi1kaWdpdCcsICdzaG9ydCcsICdsb25nJywgJ25hcnJvdyddW2xlbiAtIDFdO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIFdlZWtcblxuICAgICAgY2FzZSAndyc6XG4gICAgICBjYXNlICdXJzpcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2B3L1dgICh3ZWVrKSBwYXR0ZXJucyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuXG4gICAgICBjYXNlICdkJzpcbiAgICAgICAgcmVzdWx0LmRheSA9IFsnbnVtZXJpYycsICcyLWRpZ2l0J11bbGVuIC0gMV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdEJzpcbiAgICAgIGNhc2UgJ0YnOlxuICAgICAgY2FzZSAnZyc6XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdgRC9GL2dgIChkYXkpIHBhdHRlcm5zIGFyZSBub3Qgc3VwcG9ydGVkLCB1c2UgYGRgIGluc3RlYWQnKTtcbiAgICAgIC8vIFdlZWtkYXlcblxuICAgICAgY2FzZSAnRSc6XG4gICAgICAgIHJlc3VsdC53ZWVrZGF5ID0gbGVuID09PSA0ID8gJ3Nob3J0JyA6IGxlbiA9PT0gNSA/ICduYXJyb3cnIDogJ3Nob3J0JztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2UnOlxuICAgICAgICBpZiAobGVuIDwgNCkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdgZS4uZWVlYCAod2Vla2RheSkgcGF0dGVybnMgYXJlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC53ZWVrZGF5ID0gWydzaG9ydCcsICdsb25nJywgJ25hcnJvdycsICdzaG9ydCddW2xlbiAtIDRdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIGlmIChsZW4gPCA0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2BjLi5jY2NgICh3ZWVrZGF5KSBwYXR0ZXJucyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LndlZWtkYXkgPSBbJ3Nob3J0JywgJ2xvbmcnLCAnbmFycm93JywgJ3Nob3J0J11bbGVuIC0gNF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gUGVyaW9kXG5cbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAvLyBBTSwgUE1cbiAgICAgICAgcmVzdWx0LmhvdXIxMiA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdiJzogLy8gYW0sIHBtLCBub29uLCBtaWRuaWdodFxuXG4gICAgICBjYXNlICdCJzpcbiAgICAgICAgLy8gZmxleGlibGUgZGF5IHBlcmlvZHNcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2BiL0JgIChwZXJpb2QpIHBhdHRlcm5zIGFyZSBub3Qgc3VwcG9ydGVkLCB1c2UgYGFgIGluc3RlYWQnKTtcbiAgICAgIC8vIEhvdXJcblxuICAgICAgY2FzZSAnaCc6XG4gICAgICAgIHJlc3VsdC5ob3VyQ3ljbGUgPSAnaDEyJztcbiAgICAgICAgcmVzdWx0LmhvdXIgPSBbJ251bWVyaWMnLCAnMi1kaWdpdCddW2xlbiAtIDFdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSCc6XG4gICAgICAgIHJlc3VsdC5ob3VyQ3ljbGUgPSAnaDIzJztcbiAgICAgICAgcmVzdWx0LmhvdXIgPSBbJ251bWVyaWMnLCAnMi1kaWdpdCddW2xlbiAtIDFdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSyc6XG4gICAgICAgIHJlc3VsdC5ob3VyQ3ljbGUgPSAnaDExJztcbiAgICAgICAgcmVzdWx0LmhvdXIgPSBbJ251bWVyaWMnLCAnMi1kaWdpdCddW2xlbiAtIDFdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnayc6XG4gICAgICAgIHJlc3VsdC5ob3VyQ3ljbGUgPSAnaDI0JztcbiAgICAgICAgcmVzdWx0LmhvdXIgPSBbJ251bWVyaWMnLCAnMi1kaWdpdCddW2xlbiAtIDFdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnaic6XG4gICAgICBjYXNlICdKJzpcbiAgICAgIGNhc2UgJ0MnOlxuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYGovSi9DYCAoaG91cikgcGF0dGVybnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHVzZSBgaC9IL0sva2AgaW5zdGVhZCcpO1xuICAgICAgLy8gTWludXRlXG5cbiAgICAgIGNhc2UgJ20nOlxuICAgICAgICByZXN1bHQubWludXRlID0gWydudW1lcmljJywgJzItZGlnaXQnXVtsZW4gLSAxXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBTZWNvbmRcblxuICAgICAgY2FzZSAncyc6XG4gICAgICAgIHJlc3VsdC5zZWNvbmQgPSBbJ251bWVyaWMnLCAnMi1kaWdpdCddW2xlbiAtIDFdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUyc6XG4gICAgICBjYXNlICdBJzpcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2BTL0FgIChzZWNvbmQpIHBhdHRlbnJzIGFyZSBub3Qgc3VwcG9ydGVkLCB1c2UgYHNgIGluc3RlYWQnKTtcbiAgICAgIC8vIFpvbmVcblxuICAgICAgY2FzZSAneic6XG4gICAgICAgIC8vIDEuLjMsIDQ6IHNwZWNpZmljIG5vbi1sb2NhdGlvbiBmb3JtYXRcbiAgICAgICAgcmVzdWx0LnRpbWVab25lTmFtZSA9IGxlbiA8IDQgPyAnc2hvcnQnIDogJ2xvbmcnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnWic6IC8vIDEuLjMsIDQsIDU6IFRoZSBJU084NjAxIHZhcmlvcyBmb3JtYXRzXG5cbiAgICAgIGNhc2UgJ08nOiAvLyAxLCA0OiBtaWxpc2Vjb25kcyBpbiBkYXkgc2hvcnQsIGxvbmdcblxuICAgICAgY2FzZSAndic6IC8vIDEsIDQ6IGdlbmVyaWMgbm9uLWxvY2F0aW9uIGZvcm1hdFxuXG4gICAgICBjYXNlICdWJzogLy8gMSwgMiwgMywgNDogdGltZSB6b25lIElEIG9yIGNpdHlcblxuICAgICAgY2FzZSAnWCc6IC8vIDEsIDIsIDMsIDQ6IFRoZSBJU084NjAxIHZhcmlvcyBmb3JtYXRzXG5cbiAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAvLyAxLCAyLCAzLCA0OiBUaGUgSVNPODYwMSB2YXJpb3MgZm9ybWF0c1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYFovTy92L1YvWC94YCAodGltZVpvbmUpIHBhdHRlbnJzIGFyZSBub3Qgc3VwcG9ydGVkLCB1c2UgYHpgIGluc3RlYWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpY3VVbml0VG9FY21hKHVuaXQpIHtcbiAgcmV0dXJuIHVuaXQucmVwbGFjZSgvXiguKj8pLS8sICcnKTtcbn1cblxudmFyIEZSQUNUSU9OX1BSRUNJU0lPTl9SRUdFWCA9IC9eXFwuKD86KDArKShcXCt8IyspPyk/JC9nO1xudmFyIFNJR05JRklDQU5UX1BSRUNJU0lPTl9SRUdFWCA9IC9eKEArKT8oXFwrfCMrKT8kL2c7XG5cbmZ1bmN0aW9uIHBhcnNlU2lnbmlmaWNhbnRQcmVjaXNpb24oc3RyKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgc3RyLnJlcGxhY2UoU0lHTklGSUNBTlRfUFJFQ0lTSU9OX1JFR0VYLCBmdW5jdGlvbiAoXywgZzEsIGcyKSB7XG4gICAgLy8gQEBAIGNhc2VcbiAgICBpZiAodHlwZW9mIGcyICE9PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0Lm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IGcxLmxlbmd0aDtcbiAgICAgIHJlc3VsdC5tYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBnMS5sZW5ndGg7XG4gICAgfSAvLyBAQEArIGNhc2VcbiAgICBlbHNlIGlmIChnMiA9PT0gJysnKSB7XG4gICAgICAgIHJlc3VsdC5taW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBnMS5sZW5ndGg7XG4gICAgICB9IC8vIC4jIyMgY2FzZVxuICAgICAgZWxzZSBpZiAoZzFbMF0gPT09ICcjJykge1xuICAgICAgICAgIHJlc3VsdC5tYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBnMS5sZW5ndGg7XG4gICAgICAgIH0gLy8gLkBAIyMgb3IgLkBAQCBjYXNlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0Lm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IGcxLmxlbmd0aDtcbiAgICAgICAgICAgIHJlc3VsdC5tYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBnMS5sZW5ndGggKyAodHlwZW9mIGcyID09PSAnc3RyaW5nJyA/IGcyLmxlbmd0aCA6IDApO1xuICAgICAgICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2lnbihzdHIpIHtcbiAgc3dpdGNoIChzdHIpIHtcbiAgICBjYXNlICdzaWduLWF1dG8nOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2lnbkRpc3BsYXk6ICdhdXRvJ1xuICAgICAgfTtcblxuICAgIGNhc2UgJ3NpZ24tYWNjb3VudGluZyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW5jeVNpZ246ICdhY2NvdW50aW5nJ1xuICAgICAgfTtcblxuICAgIGNhc2UgJ3NpZ24tYWx3YXlzJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNpZ25EaXNwbGF5OiAnYWx3YXlzJ1xuICAgICAgfTtcblxuICAgIGNhc2UgJ3NpZ24tYWNjb3VudGluZy1hbHdheXMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2lnbkRpc3BsYXk6ICdhbHdheXMnLFxuICAgICAgICBjdXJyZW5jeVNpZ246ICdhY2NvdW50aW5nJ1xuICAgICAgfTtcblxuICAgIGNhc2UgJ3NpZ24tZXhjZXB0LXplcm8nOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2lnbkRpc3BsYXk6ICdleGNlcHRaZXJvJ1xuICAgICAgfTtcblxuICAgIGNhc2UgJ3NpZ24tYWNjb3VudGluZy1leGNlcHQtemVybyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzaWduRGlzcGxheTogJ2V4Y2VwdFplcm8nLFxuICAgICAgICBjdXJyZW5jeVNpZ246ICdhY2NvdW50aW5nJ1xuICAgICAgfTtcblxuICAgIGNhc2UgJ3NpZ24tbmV2ZXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2lnbkRpc3BsYXk6ICduZXZlcidcbiAgICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VOb3RhdGlvbk9wdGlvbnMob3B0KSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdmFyIHNpZ25PcHRzID0gcGFyc2VTaWduKG9wdCk7XG5cbiAgaWYgKHNpZ25PcHRzKSB7XG4gICAgcmV0dXJuIHNpZ25PcHRzO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3VuaWNvZGUtb3JnL2ljdS9ibG9iL21hc3Rlci9kb2NzL3VzZXJndWlkZS9mb3JtYXRfcGFyc2UvbnVtYmVycy9za2VsZXRvbnMubWQjc2tlbGV0b24tc3RlbXMtYW5kLW9wdGlvbnNcbiAqL1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TnVtYmVyU2tlbGV0b25Ub051bWJlckZvcm1hdE9wdGlvbnModG9rZW5zKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBmb3IgKHZhciBfaSA9IDAsIHRva2Vuc18xID0gdG9rZW5zOyBfaSA8IHRva2Vuc18xLmxlbmd0aDsgX2krKykge1xuICAgIHZhciB0b2tlbiA9IHRva2Vuc18xW19pXTtcblxuICAgIHN3aXRjaCAodG9rZW4uc3RlbSkge1xuICAgICAgY2FzZSAncGVyY2VudCc6XG4gICAgICAgIHJlc3VsdC5zdHlsZSA9ICdwZXJjZW50JztcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgICAgcmVzdWx0LnN0eWxlID0gJ2N1cnJlbmN5JztcbiAgICAgICAgcmVzdWx0LmN1cnJlbmN5ID0gdG9rZW4ub3B0aW9uc1swXTtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ2dyb3VwLW9mZic6XG4gICAgICAgIHJlc3VsdC51c2VHcm91cGluZyA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAncHJlY2lzaW9uLWludGVnZXInOlxuICAgICAgICByZXN1bHQubWF4aW11bUZyYWN0aW9uRGlnaXRzID0gMDtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ21lYXN1cmUtdW5pdCc6XG4gICAgICAgIHJlc3VsdC5zdHlsZSA9ICd1bml0JztcbiAgICAgICAgcmVzdWx0LnVuaXQgPSBpY3VVbml0VG9FY21hKHRva2VuLm9wdGlvbnNbMF0pO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAnY29tcGFjdC1zaG9ydCc6XG4gICAgICAgIHJlc3VsdC5ub3RhdGlvbiA9ICdjb21wYWN0JztcbiAgICAgICAgcmVzdWx0LmNvbXBhY3REaXNwbGF5ID0gJ3Nob3J0JztcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ2NvbXBhY3QtbG9uZyc6XG4gICAgICAgIHJlc3VsdC5ub3RhdGlvbiA9ICdjb21wYWN0JztcbiAgICAgICAgcmVzdWx0LmNvbXBhY3REaXNwbGF5ID0gJ2xvbmcnO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAnc2NpZW50aWZpYyc6XG4gICAgICAgIHJlc3VsdCA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN1bHQpLCB7XG4gICAgICAgICAgbm90YXRpb246ICdzY2llbnRpZmljJ1xuICAgICAgICB9KSwgdG9rZW4ub3B0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKGFsbCwgb3B0KSB7XG4gICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBhbGwpLCBwYXJzZU5vdGF0aW9uT3B0aW9ucyhvcHQpKTtcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ2VuZ2luZWVyaW5nJzpcbiAgICAgICAgcmVzdWx0ID0gX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3VsdCksIHtcbiAgICAgICAgICBub3RhdGlvbjogJ2VuZ2luZWVyaW5nJ1xuICAgICAgICB9KSwgdG9rZW4ub3B0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKGFsbCwgb3B0KSB7XG4gICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBhbGwpLCBwYXJzZU5vdGF0aW9uT3B0aW9ucyhvcHQpKTtcbiAgICAgICAgfSwge30pKTtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ25vdGF0aW9uLXNpbXBsZSc6XG4gICAgICAgIHJlc3VsdC5ub3RhdGlvbiA9ICdzdGFuZGFyZCc7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3VuaWNvZGUtb3JnL2ljdS9ibG9iL21hc3Rlci9pY3U0Yy9zb3VyY2UvaTE4bi91bmljb2RlL3VudW1iZXJmb3JtYXR0ZXIuaFxuXG4gICAgICBjYXNlICd1bml0LXdpZHRoLW5hcnJvdyc6XG4gICAgICAgIHJlc3VsdC5jdXJyZW5jeURpc3BsYXkgPSAnbmFycm93U3ltYm9sJztcbiAgICAgICAgcmVzdWx0LnVuaXREaXNwbGF5ID0gJ25hcnJvdyc7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlICd1bml0LXdpZHRoLXNob3J0JzpcbiAgICAgICAgcmVzdWx0LmN1cnJlbmN5RGlzcGxheSA9ICdjb2RlJztcbiAgICAgICAgcmVzdWx0LnVuaXREaXNwbGF5ID0gJ3Nob3J0JztcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ3VuaXQtd2lkdGgtZnVsbC1uYW1lJzpcbiAgICAgICAgcmVzdWx0LmN1cnJlbmN5RGlzcGxheSA9ICduYW1lJztcbiAgICAgICAgcmVzdWx0LnVuaXREaXNwbGF5ID0gJ2xvbmcnO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAndW5pdC13aWR0aC1pc28tY29kZSc6XG4gICAgICAgIHJlc3VsdC5jdXJyZW5jeURpc3BsYXkgPSAnc3ltYm9sJztcbiAgICAgICAgY29udGludWU7XG4gICAgfSAvLyBQcmVjaXNpb25cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdW5pY29kZS1vcmcvaWN1L2Jsb2IvbWFzdGVyL2RvY3MvdXNlcmd1aWRlL2Zvcm1hdF9wYXJzZS9udW1iZXJzL3NrZWxldG9ucy5tZCNmcmFjdGlvbi1wcmVjaXNpb25cblxuXG4gICAgaWYgKEZSQUNUSU9OX1BSRUNJU0lPTl9SRUdFWC50ZXN0KHRva2VuLnN0ZW0pKSB7XG4gICAgICBpZiAodG9rZW4ub3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdGcmFjdGlvbi1wcmVjaXNpb24gc3RlbXMgb25seSBhY2NlcHQgYSBzaW5nbGUgb3B0aW9uYWwgb3B0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnN0ZW0ucmVwbGFjZShGUkFDVElPTl9QUkVDSVNJT05fUkVHRVgsIGZ1bmN0aW9uIChtYXRjaCwgZzEsIGcyKSB7XG4gICAgICAgIC8vIHByZWNpc2lvbi1pbnRlZ2VyIGNhc2VcbiAgICAgICAgaWYgKG1hdGNoID09PSAnLicpIHtcbiAgICAgICAgICByZXN1bHQubWF4aW11bUZyYWN0aW9uRGlnaXRzID0gMDtcbiAgICAgICAgfSAvLyAuMDAwKyBjYXNlXG4gICAgICAgIGVsc2UgaWYgKGcyID09PSAnKycpIHtcbiAgICAgICAgICAgIHJlc3VsdC5taW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBnMi5sZW5ndGg7XG4gICAgICAgICAgfSAvLyAuIyMjIGNhc2VcbiAgICAgICAgICBlbHNlIGlmIChnMVswXSA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBnMS5sZW5ndGg7XG4gICAgICAgICAgICB9IC8vIC4wMCMjIG9yIC4wMDAgY2FzZVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0Lm1pbmltdW1GcmFjdGlvbkRpZ2l0cyA9IGcxLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXN1bHQubWF4aW11bUZyYWN0aW9uRGlnaXRzID0gZzEubGVuZ3RoICsgKHR5cGVvZiBnMiA9PT0gJ3N0cmluZycgPyBnMi5sZW5ndGggOiAwKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodG9rZW4ub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3VsdCksIHBhcnNlU2lnbmlmaWNhbnRQcmVjaXNpb24odG9rZW4ub3B0aW9uc1swXSkpO1xuICAgICAgfVxuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoU0lHTklGSUNBTlRfUFJFQ0lTSU9OX1JFR0VYLnRlc3QodG9rZW4uc3RlbSkpIHtcbiAgICAgIHJlc3VsdCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN1bHQpLCBwYXJzZVNpZ25pZmljYW50UHJlY2lzaW9uKHRva2VuLnN0ZW0pKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBzaWduT3B0cyA9IHBhcnNlU2lnbih0b2tlbi5zdGVtKTtcblxuICAgIGlmIChzaWduT3B0cykge1xuICAgICAgcmVzdWx0ID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3VsdCksIHNpZ25PcHRzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufSIsInZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG5pbXBvcnQgeyBjb252ZXJ0TnVtYmVyU2tlbGV0b25Ub051bWJlckZvcm1hdE9wdGlvbnMsIGlzQXJndW1lbnRFbGVtZW50LCBpc0RhdGVFbGVtZW50LCBpc0RhdGVUaW1lU2tlbGV0b24sIGlzTGl0ZXJhbEVsZW1lbnQsIGlzTnVtYmVyRWxlbWVudCwgaXNOdW1iZXJTa2VsZXRvbiwgaXNQbHVyYWxFbGVtZW50LCBpc1BvdW5kRWxlbWVudCwgaXNTZWxlY3RFbGVtZW50LCBpc1RpbWVFbGVtZW50LCBwYXJzZURhdGVUaW1lU2tlbGV0b24sIH0gZnJvbSAnaW50bC1tZXNzYWdlZm9ybWF0LXBhcnNlcic7XG52YXIgRm9ybWF0RXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEZvcm1hdEVycm9yLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZvcm1hdEVycm9yKG1zZywgdmFyaWFibGVJZCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtc2cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhcmlhYmxlSWQgPSB2YXJpYWJsZUlkO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBGb3JtYXRFcnJvcjtcbn0oRXJyb3IpKTtcbmZ1bmN0aW9uIG1lcmdlTGl0ZXJhbChwYXJ0cykge1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiBwYXJ0cztcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLnJlZHVjZShmdW5jdGlvbiAoYWxsLCBwYXJ0KSB7XG4gICAgICAgIHZhciBsYXN0UGFydCA9IGFsbFthbGwubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICghbGFzdFBhcnQgfHxcbiAgICAgICAgICAgIGxhc3RQYXJ0LnR5cGUgIT09IDAgLyogbGl0ZXJhbCAqLyB8fFxuICAgICAgICAgICAgcGFydC50eXBlICE9PSAwIC8qIGxpdGVyYWwgKi8pIHtcbiAgICAgICAgICAgIGFsbC5wdXNoKHBhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGFzdFBhcnQudmFsdWUgKz0gcGFydC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxsO1xuICAgIH0sIFtdKTtcbn1cbi8vIFRPRE8oc2tlbGV0b24pOiBhZGQgc2tlbGV0b24gc3VwcG9ydFxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRvUGFydHMoZWxzLCBsb2NhbGVzLCBmb3JtYXR0ZXJzLCBmb3JtYXRzLCB2YWx1ZXMsIGN1cnJlbnRQbHVyYWxWYWx1ZSwgXG4vLyBGb3IgZGVidWdnaW5nXG5vcmlnaW5hbE1lc3NhZ2UpIHtcbiAgICAvLyBIb3QgcGF0aCBmb3Igc3RyYWlnaHQgc2ltcGxlIG1zZyB0cmFuc2xhdGlvbnNcbiAgICBpZiAoZWxzLmxlbmd0aCA9PT0gMSAmJiBpc0xpdGVyYWxFbGVtZW50KGVsc1swXSkpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAwIC8qIGxpdGVyYWwgKi8sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGVsc1swXS52YWx1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDAsIGVsc18xID0gZWxzOyBfaSA8IGVsc18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgZWwgPSBlbHNfMVtfaV07XG4gICAgICAgIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZyBwYXJ0cy5cbiAgICAgICAgaWYgKGlzTGl0ZXJhbEVsZW1lbnQoZWwpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogMCAvKiBsaXRlcmFsICovLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBlbC52YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogc2hvdWxkIHRoaXMgcGFydCBiZSBsaXRlcmFsIHR5cGU/XG4gICAgICAgIC8vIFJlcGxhY2UgYCNgIGluIHBsdXJhbCBydWxlcyB3aXRoIHRoZSBhY3R1YWwgbnVtZXJpYyB2YWx1ZS5cbiAgICAgICAgaWYgKGlzUG91bmRFbGVtZW50KGVsKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50UGx1cmFsVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAwIC8qIGxpdGVyYWwgKi8sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmb3JtYXR0ZXJzLmdldE51bWJlckZvcm1hdChsb2NhbGVzKS5mb3JtYXQoY3VycmVudFBsdXJhbFZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YXJOYW1lID0gZWwudmFsdWU7XG4gICAgICAgIC8vIEVuZm9yY2UgdGhhdCBhbGwgcmVxdWlyZWQgdmFsdWVzIGFyZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLlxuICAgICAgICBpZiAoISh2YWx1ZXMgJiYgdmFyTmFtZSBpbiB2YWx1ZXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoXCJUaGUgaW50bCBzdHJpbmcgY29udGV4dCB2YXJpYWJsZSBcXFwiXCIgKyB2YXJOYW1lICsgXCJcXFwiIHdhcyBub3QgcHJvdmlkZWQgdG8gdGhlIHN0cmluZyBcXFwiXCIgKyBvcmlnaW5hbE1lc3NhZ2UgKyBcIlxcXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW3Zhck5hbWVdO1xuICAgICAgICBpZiAoaXNBcmd1bWVudEVsZW1lbnQoZWwpKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogMSAvKiBhcmd1bWVudCAqLyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZvcm1hdCBwbHVyYWwgYW5kIHNlbGVjdCBwYXJ0cycgb3B0aW9uIOKAlCB3aGljaCBjYW4gYmUgYVxuICAgICAgICAvLyBuZXN0ZWQgcGF0dGVybiBzdHJ1Y3R1cmUuIFRoZSBjaG9vc2luZyBvZiB0aGUgb3B0aW9uIHRvIHVzZSBpc1xuICAgICAgICAvLyBhYnN0cmFjdGVkLWJ5IGFuZCBkZWxlZ2F0ZWQtdG8gdGhlIHBhcnQgaGVscGVyIG9iamVjdC5cbiAgICAgICAgaWYgKGlzRGF0ZUVsZW1lbnQoZWwpKSB7XG4gICAgICAgICAgICB2YXIgc3R5bGUgPSB0eXBlb2YgZWwuc3R5bGUgPT09ICdzdHJpbmcnID8gZm9ybWF0cy5kYXRlW2VsLnN0eWxlXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAwIC8qIGxpdGVyYWwgKi8sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZvcm1hdHRlcnNcbiAgICAgICAgICAgICAgICAgICAgLmdldERhdGVUaW1lRm9ybWF0KGxvY2FsZXMsIHN0eWxlKVxuICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHZhbHVlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGltZUVsZW1lbnQoZWwpKSB7XG4gICAgICAgICAgICB2YXIgc3R5bGUgPSB0eXBlb2YgZWwuc3R5bGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyBmb3JtYXRzLnRpbWVbZWwuc3R5bGVdXG4gICAgICAgICAgICAgICAgOiBpc0RhdGVUaW1lU2tlbGV0b24oZWwuc3R5bGUpXG4gICAgICAgICAgICAgICAgICAgID8gcGFyc2VEYXRlVGltZVNrZWxldG9uKGVsLnN0eWxlLnBhdHRlcm4pXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IDAgLyogbGl0ZXJhbCAqLyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZm9ybWF0dGVyc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0RGF0ZVRpbWVGb3JtYXQobG9jYWxlcywgc3R5bGUpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JtYXQodmFsdWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXJFbGVtZW50KGVsKSkge1xuICAgICAgICAgICAgdmFyIHN0eWxlID0gdHlwZW9mIGVsLnN0eWxlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gZm9ybWF0cy5udW1iZXJbZWwuc3R5bGVdXG4gICAgICAgICAgICAgICAgOiBpc051bWJlclNrZWxldG9uKGVsLnN0eWxlKVxuICAgICAgICAgICAgICAgICAgICA/IGNvbnZlcnROdW1iZXJTa2VsZXRvblRvTnVtYmVyRm9ybWF0T3B0aW9ucyhlbC5zdHlsZS50b2tlbnMpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IDAgLyogbGl0ZXJhbCAqLyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZm9ybWF0dGVyc1xuICAgICAgICAgICAgICAgICAgICAuZ2V0TnVtYmVyRm9ybWF0KGxvY2FsZXMsIHN0eWxlKVxuICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHZhbHVlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU2VsZWN0RWxlbWVudChlbCkpIHtcbiAgICAgICAgICAgIHZhciBvcHQgPSBlbC5vcHRpb25zW3ZhbHVlXSB8fCBlbC5vcHRpb25zLm90aGVyO1xuICAgICAgICAgICAgaWYgKCFvcHQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdmFsdWVzIGZvciBcXFwiXCIgKyBlbC52YWx1ZSArIFwiXFxcIjogXFxcIlwiICsgdmFsdWUgKyBcIlxcXCIuIE9wdGlvbnMgYXJlIFxcXCJcIiArIE9iamVjdC5rZXlzKGVsLm9wdGlvbnMpLmpvaW4oJ1wiLCBcIicpICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2guYXBwbHkocmVzdWx0LCBmb3JtYXRUb1BhcnRzKG9wdC52YWx1ZSwgbG9jYWxlcywgZm9ybWF0dGVycywgZm9ybWF0cywgdmFsdWVzKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQbHVyYWxFbGVtZW50KGVsKSkge1xuICAgICAgICAgICAgdmFyIG9wdCA9IGVsLm9wdGlvbnNbXCI9XCIgKyB2YWx1ZV07XG4gICAgICAgICAgICBpZiAoIW9wdCkge1xuICAgICAgICAgICAgICAgIGlmICghSW50bC5QbHVyYWxSdWxlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoXCJJbnRsLlBsdXJhbFJ1bGVzIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC5cXG5UcnkgcG9seWZpbGxpbmcgaXQgdXNpbmcgXFxcIkBmb3JtYXRqcy9pbnRsLXBsdXJhbHJ1bGVzXFxcIlxcblwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBmb3JtYXR0ZXJzXG4gICAgICAgICAgICAgICAgICAgIC5nZXRQbHVyYWxSdWxlcyhsb2NhbGVzLCB7IHR5cGU6IGVsLnBsdXJhbFR5cGUgfSlcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdCh2YWx1ZSAtIChlbC5vZmZzZXQgfHwgMCkpO1xuICAgICAgICAgICAgICAgIG9wdCA9IGVsLm9wdGlvbnNbcnVsZV0gfHwgZWwub3B0aW9ucy5vdGhlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb3B0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHZhbHVlcyBmb3IgXFxcIlwiICsgZWwudmFsdWUgKyBcIlxcXCI6IFxcXCJcIiArIHZhbHVlICsgXCJcXFwiLiBPcHRpb25zIGFyZSBcXFwiXCIgKyBPYmplY3Qua2V5cyhlbC5vcHRpb25zKS5qb2luKCdcIiwgXCInKSArIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoLmFwcGx5KHJlc3VsdCwgZm9ybWF0VG9QYXJ0cyhvcHQudmFsdWUsIGxvY2FsZXMsIGZvcm1hdHRlcnMsIGZvcm1hdHMsIHZhbHVlcywgdmFsdWUgLSAoZWwub2Zmc2V0IHx8IDApKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VMaXRlcmFsKHJlc3VsdCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VG9TdHJpbmcoZWxzLCBsb2NhbGVzLCBmb3JtYXR0ZXJzLCBmb3JtYXRzLCB2YWx1ZXMsIFxuLy8gRm9yIGRlYnVnZ2luZ1xub3JpZ2luYWxNZXNzYWdlKSB7XG4gICAgdmFyIHBhcnRzID0gZm9ybWF0VG9QYXJ0cyhlbHMsIGxvY2FsZXMsIGZvcm1hdHRlcnMsIGZvcm1hdHMsIHZhbHVlcywgdW5kZWZpbmVkLCBvcmlnaW5hbE1lc3NhZ2UpO1xuICAgIC8vIEhvdCBwYXRoIGZvciBzdHJhaWdodCBzaW1wbGUgbXNnIHRyYW5zbGF0aW9uc1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHBhcnRzWzBdLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMucmVkdWNlKGZ1bmN0aW9uIChhbGwsIHBhcnQpIHsgcmV0dXJuIChhbGwgKz0gcGFydC52YWx1ZSk7IH0sICcnKTtcbn1cbi8vIFNpbmdsZXRvblxudmFyIGRvbVBhcnNlcjtcbnZhciBUT0tFTl9ERUxJTUlURVIgPSAnQEAnO1xudmFyIFRPS0VOX1JFR0VYID0gL0BAKFxcZCtfXFxkKylAQC9nO1xudmFyIGNvdW50ZXIgPSAwO1xuZnVuY3Rpb24gZ2VuZXJhdGVJZCgpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSArIFwiX1wiICsgKytjb3VudGVyO1xufVxuZnVuY3Rpb24gcmVzdG9yZVJpY2hQbGFjZWhvbGRlck1lc3NhZ2UodGV4dCwgb2JqZWN0UGFydHMpIHtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgICAuc3BsaXQoVE9LRU5fUkVHRVgpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gKG9iamVjdFBhcnRzW2NdICE9IG51bGwgPyBvYmplY3RQYXJ0c1tjXSA6IGMpOyB9KVxuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGMpIHtcbiAgICAgICAgaWYgKCFhbGwubGVuZ3RoKSB7XG4gICAgICAgICAgICBhbGwucHVzaChjKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYyA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIHR5cGVvZiBhbGxbYWxsLmxlbmd0aCAtIDFdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYWxsW2FsbC5sZW5ndGggLSAxXSArPSBjO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWxsLnB1c2goYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsbDtcbiAgICB9LCBbXSk7XG59XG4vKipcbiAqIE5vdCBleGhhdXN0aXZlLCBqdXN0IGZvciBzYW5pdHkgY2hlY2tcbiAqL1xudmFyIFNJTVBMRV9YTUxfUkVHRVggPSAvKDwoWzAtOWEtekEtWi1fXSo/KT4oLio/KTxcXC8oWzAtOWEtekEtWi1fXSo/KT4pfCg8WzAtOWEtekEtWi1fXSo/XFwvPikvO1xudmFyIFRFTVBMQVRFX0lEID0gRGF0ZS5ub3coKSArICdAQCc7XG52YXIgVk9JRF9FTEVNRU5UUyA9IFtcbiAgICAnYXJlYScsXG4gICAgJ2Jhc2UnLFxuICAgICdicicsXG4gICAgJ2NvbCcsXG4gICAgJ2VtYmVkJyxcbiAgICAnaHInLFxuICAgICdpbWcnLFxuICAgICdpbnB1dCcsXG4gICAgJ2xpbmsnLFxuICAgICdtZXRhJyxcbiAgICAncGFyYW0nLFxuICAgICdzb3VyY2UnLFxuICAgICd0cmFjaycsXG4gICAgJ3dicicsXG5dO1xuZnVuY3Rpb24gZm9ybWF0SFRNTEVsZW1lbnQoZWwsIG9iamVjdFBhcnRzLCB2YWx1ZXMpIHtcbiAgICB2YXIgdGFnTmFtZSA9IGVsLnRhZ05hbWU7XG4gICAgdmFyIG91dGVySFRNTCA9IGVsLm91dGVySFRNTCwgdGV4dENvbnRlbnQgPSBlbC50ZXh0Q29udGVudCwgY2hpbGROb2RlcyA9IGVsLmNoaWxkTm9kZXM7XG4gICAgLy8gUmVndWxhciB0ZXh0XG4gICAgaWYgKCF0YWdOYW1lKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlUmljaFBsYWNlaG9sZGVyTWVzc2FnZSh0ZXh0Q29udGVudCB8fCAnJywgb2JqZWN0UGFydHMpO1xuICAgIH1cbiAgICB0YWdOYW1lID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBpc1ZvaWRFbGVtZW50ID0gflZPSURfRUxFTUVOVFMuaW5kZXhPZih0YWdOYW1lKTtcbiAgICB2YXIgZm9ybWF0Rm5PclZhbHVlID0gdmFsdWVzW3RhZ05hbWVdO1xuICAgIGlmIChmb3JtYXRGbk9yVmFsdWUgJiYgaXNWb2lkRWxlbWVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IodGFnTmFtZSArIFwiIGlzIGEgc2VsZi1jbG9zaW5nIHRhZyBhbmQgY2FuIG5vdCBiZSB1c2VkLCBwbGVhc2UgdXNlIGFub3RoZXIgdGFnIG5hbWUuXCIpO1xuICAgIH1cbiAgICBpZiAoIWNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbb3V0ZXJIVE1MXTtcbiAgICB9XG4gICAgdmFyIGNodW5rcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGNoaWxkTm9kZXMpLnJlZHVjZShmdW5jdGlvbiAoYWxsLCBjaGlsZCkge1xuICAgICAgICByZXR1cm4gYWxsLmNvbmNhdChmb3JtYXRIVE1MRWxlbWVudChjaGlsZCwgb2JqZWN0UGFydHMsIHZhbHVlcykpO1xuICAgIH0sIFtdKTtcbiAgICAvLyBMZWdhY3kgSFRNTFxuICAgIGlmICghZm9ybWF0Rm5PclZhbHVlKSB7XG4gICAgICAgIHJldHVybiBfX3NwcmVhZEFycmF5cyhbXCI8XCIgKyB0YWdOYW1lICsgXCI+XCJdLCBjaHVua3MsIFtcIjwvXCIgKyB0YWdOYW1lICsgXCI+XCJdKTtcbiAgICB9XG4gICAgLy8gSFRNTCBUYWcgcmVwbGFjZW1lbnRcbiAgICBpZiAodHlwZW9mIGZvcm1hdEZuT3JWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gW2Zvcm1hdEZuT3JWYWx1ZS5hcHBseSh2b2lkIDAsIGNodW5rcyldO1xuICAgIH1cbiAgICByZXR1cm4gW2Zvcm1hdEZuT3JWYWx1ZV07XG59XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SFRNTE1lc3NhZ2UoZWxzLCBsb2NhbGVzLCBmb3JtYXR0ZXJzLCBmb3JtYXRzLCB2YWx1ZXMsIFxuLy8gRm9yIGRlYnVnZ2luZ1xub3JpZ2luYWxNZXNzYWdlKSB7XG4gICAgdmFyIHBhcnRzID0gZm9ybWF0VG9QYXJ0cyhlbHMsIGxvY2FsZXMsIGZvcm1hdHRlcnMsIGZvcm1hdHMsIHZhbHVlcywgdW5kZWZpbmVkLCBvcmlnaW5hbE1lc3NhZ2UpO1xuICAgIHZhciBvYmplY3RQYXJ0cyA9IHt9O1xuICAgIHZhciBmb3JtYXR0ZWRNZXNzYWdlID0gcGFydHMucmVkdWNlKGZ1bmN0aW9uIChhbGwsIHBhcnQpIHtcbiAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gMCAvKiBsaXRlcmFsICovKSB7XG4gICAgICAgICAgICByZXR1cm4gKGFsbCArPSBwYXJ0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaWQgPSBnZW5lcmF0ZUlkKCk7XG4gICAgICAgIG9iamVjdFBhcnRzW2lkXSA9IHBhcnQudmFsdWU7XG4gICAgICAgIHJldHVybiAoYWxsICs9IFwiXCIgKyBUT0tFTl9ERUxJTUlURVIgKyBpZCArIFRPS0VOX0RFTElNSVRFUik7XG4gICAgfSwgJycpO1xuICAgIC8vIE5vdCBkZXNpZ25lZCB0byBmaWx0ZXIgb3V0IGFnZ3Jlc3NpdmVseVxuICAgIGlmICghU0lNUExFX1hNTF9SRUdFWC50ZXN0KGZvcm1hdHRlZE1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlUmljaFBsYWNlaG9sZGVyTWVzc2FnZShmb3JtYXR0ZWRNZXNzYWdlLCBvYmplY3RQYXJ0cyk7XG4gICAgfVxuICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcignTWVzc2FnZSBoYXMgcGxhY2Vob2xkZXJzIGJ1dCBubyB2YWx1ZXMgd2FzIGdpdmVuJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgRE9NUGFyc2VyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ0Nhbm5vdCBmb3JtYXQgWE1MIG1lc3NhZ2Ugd2l0aG91dCBET01QYXJzZXInKTtcbiAgICB9XG4gICAgaWYgKCFkb21QYXJzZXIpIHtcbiAgICAgICAgZG9tUGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgIH1cbiAgICB2YXIgY29udGVudCA9IGRvbVBhcnNlclxuICAgICAgICAucGFyc2VGcm9tU3RyaW5nKFwiPGZvcm1hdHRlZC1tZXNzYWdlIGlkPVxcXCJcIiArIFRFTVBMQVRFX0lEICsgXCJcXFwiPlwiICsgZm9ybWF0dGVkTWVzc2FnZSArIFwiPC9mb3JtYXR0ZWQtbWVzc2FnZT5cIiwgJ3RleHQvaHRtbCcpXG4gICAgICAgIC5nZXRFbGVtZW50QnlJZChURU1QTEFURV9JRCk7XG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBGb3JtYXRFcnJvcihcIk1hbGZvcm1lZCBIVE1MIG1lc3NhZ2UgXCIgKyBmb3JtYXR0ZWRNZXNzYWdlKTtcbiAgICB9XG4gICAgdmFyIHRhZ3NUb0Zvcm1hdCA9IE9iamVjdC5rZXlzKHZhbHVlcykuZmlsdGVyKGZ1bmN0aW9uICh2YXJOYW1lKSB7IHJldHVybiAhIWNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodmFyTmFtZSkubGVuZ3RoOyB9KTtcbiAgICAvLyBObyB0YWdzIHRvIGZvcm1hdFxuICAgIGlmICghdGFnc1RvRm9ybWF0Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZVJpY2hQbGFjZWhvbGRlck1lc3NhZ2UoZm9ybWF0dGVkTWVzc2FnZSwgb2JqZWN0UGFydHMpO1xuICAgIH1cbiAgICB2YXIgY2FzZVNlbnNpdGl2ZVRhZ3MgPSB0YWdzVG9Gb3JtYXQuZmlsdGVyKGZ1bmN0aW9uICh0YWdOYW1lKSB7IHJldHVybiB0YWdOYW1lICE9PSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7IH0pO1xuICAgIGlmIChjYXNlU2Vuc2l0aXZlVGFncy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEVycm9yKFwiSFRNTCB0YWcgbXVzdCBiZSBsb3dlcmNhc2VkIGJ1dCB0aGUgZm9sbG93aW5nIHRhZ3MgYXJlIG5vdDogXCIgKyBjYXNlU2Vuc2l0aXZlVGFncy5qb2luKCcsICcpKTtcbiAgICB9XG4gICAgLy8gV2UncmUgZG9pbmcgdGhpcyBzaW5jZSB0b3Agbm9kZSBpcyBgPGZvcm1hdHRlZC1tZXNzYWdlLz5gIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBmb3JtYXR0ZXJcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgIC5jYWxsKGNvbnRlbnQuY2hpbGROb2RlcylcbiAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAoYWxsLCBjaGlsZCkgeyByZXR1cm4gYWxsLmNvbmNhdChmb3JtYXRIVE1MRWxlbWVudChjaGlsZCwgb2JqZWN0UGFydHMsIHZhbHVlcykpOyB9LCBbXSk7XG59XG4iLCIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LCBZYWhvbyEgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLlxuU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiovXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tICdpbnRsLW1lc3NhZ2Vmb3JtYXQtcGFyc2VyJztcbmltcG9ydCBtZW1vaXplSW50bENvbnN0cnVjdG9yIGZyb20gJ2ludGwtZm9ybWF0LWNhY2hlJztcbmltcG9ydCB7IGZvcm1hdFRvU3RyaW5nLCBmb3JtYXRUb1BhcnRzLCBmb3JtYXRIVE1MTWVzc2FnZSwgfSBmcm9tICcuL2Zvcm1hdHRlcnMnO1xuLy8gLS0gTWVzc2FnZUZvcm1hdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gbWVyZ2VDb25maWcoYzEsIGMyKSB7XG4gICAgaWYgKCFjMikge1xuICAgICAgICByZXR1cm4gYzE7XG4gICAgfVxuICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbihfX2Fzc2lnbih7fSwgKGMxIHx8IHt9KSksIChjMiB8fCB7fSkpLCBPYmplY3Qua2V5cyhjMSkucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGspIHtcbiAgICAgICAgYWxsW2tdID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGMxW2tdKSwgKGMyW2tdIHx8IHt9KSk7XG4gICAgICAgIHJldHVybiBhbGw7XG4gICAgfSwge30pKTtcbn1cbmZ1bmN0aW9uIG1lcmdlQ29uZmlncyhkZWZhdWx0Q29uZmlnLCBjb25maWdzKSB7XG4gICAgaWYgKCFjb25maWdzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0Q29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZGVmYXVsdENvbmZpZykucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGspIHtcbiAgICAgICAgYWxsW2tdID0gbWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZ1trXSwgY29uZmlnc1trXSk7XG4gICAgICAgIHJldHVybiBhbGw7XG4gICAgfSwgX19hc3NpZ24oe30sIGRlZmF1bHRDb25maWcpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0Rm9ybWF0dGVycyhjYWNoZSkge1xuICAgIGlmIChjYWNoZSA9PT0gdm9pZCAwKSB7IGNhY2hlID0ge1xuICAgICAgICBudW1iZXI6IHt9LFxuICAgICAgICBkYXRlVGltZToge30sXG4gICAgICAgIHBsdXJhbFJ1bGVzOiB7fSxcbiAgICB9OyB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0TnVtYmVyRm9ybWF0OiBtZW1vaXplSW50bENvbnN0cnVjdG9yKEludGwuTnVtYmVyRm9ybWF0LCBjYWNoZS5udW1iZXIpLFxuICAgICAgICBnZXREYXRlVGltZUZvcm1hdDogbWVtb2l6ZUludGxDb25zdHJ1Y3RvcihJbnRsLkRhdGVUaW1lRm9ybWF0LCBjYWNoZS5kYXRlVGltZSksXG4gICAgICAgIGdldFBsdXJhbFJ1bGVzOiBtZW1vaXplSW50bENvbnN0cnVjdG9yKEludGwuUGx1cmFsUnVsZXMsIGNhY2hlLnBsdXJhbFJ1bGVzKSxcbiAgICB9O1xufVxudmFyIEludGxNZXNzYWdlRm9ybWF0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEludGxNZXNzYWdlRm9ybWF0KG1lc3NhZ2UsIGxvY2FsZXMsIG92ZXJyaWRlRm9ybWF0cywgb3B0cykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAobG9jYWxlcyA9PT0gdm9pZCAwKSB7IGxvY2FsZXMgPSBJbnRsTWVzc2FnZUZvcm1hdC5kZWZhdWx0TG9jYWxlOyB9XG4gICAgICAgIHRoaXMuZm9ybWF0dGVyQ2FjaGUgPSB7XG4gICAgICAgICAgICBudW1iZXI6IHt9LFxuICAgICAgICAgICAgZGF0ZVRpbWU6IHt9LFxuICAgICAgICAgICAgcGx1cmFsUnVsZXM6IHt9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZvcm1hdCA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUb1N0cmluZyhfdGhpcy5hc3QsIF90aGlzLmxvY2FsZXMsIF90aGlzLmZvcm1hdHRlcnMsIF90aGlzLmZvcm1hdHMsIHZhbHVlcywgX3RoaXMubWVzc2FnZSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZm9ybWF0VG9QYXJ0cyA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUb1BhcnRzKF90aGlzLmFzdCwgX3RoaXMubG9jYWxlcywgX3RoaXMuZm9ybWF0dGVycywgX3RoaXMuZm9ybWF0cywgdmFsdWVzLCB1bmRlZmluZWQsIF90aGlzLm1lc3NhZ2UpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZvcm1hdEhUTUxNZXNzYWdlID0gZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdEhUTUxNZXNzYWdlKF90aGlzLmFzdCwgX3RoaXMubG9jYWxlcywgX3RoaXMuZm9ybWF0dGVycywgX3RoaXMuZm9ybWF0cywgdmFsdWVzLCBfdGhpcy5tZXNzYWdlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZXNvbHZlZE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgICAgICAgICAgbG9jYWxlOiBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoX3RoaXMubG9jYWxlcylbMF0sXG4gICAgICAgIH0pOyB9O1xuICAgICAgICB0aGlzLmdldEFzdCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmFzdDsgfTtcbiAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgICAgIGlmICghSW50bE1lc3NhZ2VGb3JtYXQuX19wYXJzZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludGxNZXNzYWdlRm9ybWF0Ll9fcGFyc2UgbXVzdCBiZSBzZXQgdG8gcHJvY2VzcyBgbWVzc2FnZWAgb2YgdHlwZSBgc3RyaW5nYCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUGFyc2Ugc3RyaW5nIG1lc3NhZ2VzIGludG8gYW4gQVNULlxuICAgICAgICAgICAgdGhpcy5hc3QgPSBJbnRsTWVzc2FnZUZvcm1hdC5fX3BhcnNlKG1lc3NhZ2UsIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVIYXNodGFnSW5QbHVyYWw6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFzdCA9IG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuYXN0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBtZXNzYWdlIG11c3QgYmUgcHJvdmlkZWQgYXMgYSBTdHJpbmcgb3IgQVNULicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENyZWF0ZXMgYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBgZm9ybWF0c2AgbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHRcbiAgICAgICAgLy8gZm9ybWF0cy5cbiAgICAgICAgdGhpcy5mb3JtYXRzID0gbWVyZ2VDb25maWdzKEludGxNZXNzYWdlRm9ybWF0LmZvcm1hdHMsIG92ZXJyaWRlRm9ybWF0cyk7XG4gICAgICAgIC8vIERlZmluZWQgZmlyc3QgYmVjYXVzZSBpdCdzIHVzZWQgdG8gYnVpbGQgdGhlIGZvcm1hdCBwYXR0ZXJuLlxuICAgICAgICB0aGlzLmxvY2FsZXMgPSBsb2NhbGVzO1xuICAgICAgICB0aGlzLmZvcm1hdHRlcnMgPVxuICAgICAgICAgICAgKG9wdHMgJiYgb3B0cy5mb3JtYXR0ZXJzKSB8fCBjcmVhdGVEZWZhdWx0Rm9ybWF0dGVycyh0aGlzLmZvcm1hdHRlckNhY2hlKTtcbiAgICB9XG4gICAgSW50bE1lc3NhZ2VGb3JtYXQuZGVmYXVsdExvY2FsZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTtcbiAgICBJbnRsTWVzc2FnZUZvcm1hdC5fX3BhcnNlID0gcGFyc2U7XG4gICAgLy8gRGVmYXVsdCBmb3JtYXQgb3B0aW9ucyB1c2VkIGFzIHRoZSBwcm90b3R5cGUgb2YgdGhlIGBmb3JtYXRzYCBwcm92aWRlZCB0byB0aGVcbiAgICAvLyBjb25zdHJ1Y3Rvci4gVGhlc2UgYXJlIHVzZWQgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGludGVybmFsIEludGwuTnVtYmVyRm9ybWF0XG4gICAgLy8gYW5kIEludGwuRGF0ZVRpbWVGb3JtYXQgaW5zdGFuY2VzLlxuICAgIEludGxNZXNzYWdlRm9ybWF0LmZvcm1hdHMgPSB7XG4gICAgICAgIG51bWJlcjoge1xuICAgICAgICAgICAgY3VycmVuY3k6IHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwZXJjZW50OiB7XG4gICAgICAgICAgICAgICAgc3R5bGU6ICdwZXJjZW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgIHNob3J0OiB7XG4gICAgICAgICAgICAgICAgbW9udGg6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICB5ZWFyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWVkaXVtOiB7XG4gICAgICAgICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvbmc6IHtcbiAgICAgICAgICAgICAgICBtb250aDogJ2xvbmcnLFxuICAgICAgICAgICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdWxsOiB7XG4gICAgICAgICAgICAgICAgd2Vla2RheTogJ2xvbmcnLFxuICAgICAgICAgICAgICAgIG1vbnRoOiAnbG9uZycsXG4gICAgICAgICAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdGltZToge1xuICAgICAgICAgICAgc2hvcnQ6IHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWVkaXVtOiB7XG4gICAgICAgICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIHNlY29uZDogJ251bWVyaWMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvbmc6IHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgc2Vjb25kOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgdGltZVpvbmVOYW1lOiAnc2hvcnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bGw6IHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgc2Vjb25kOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgdGltZVpvbmVOYW1lOiAnc2hvcnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBJbnRsTWVzc2FnZUZvcm1hdDtcbn0oKSk7XG5leHBvcnQgeyBJbnRsTWVzc2FnZUZvcm1hdCB9O1xuZXhwb3J0IGRlZmF1bHQgSW50bE1lc3NhZ2VGb3JtYXQ7XG4iLCIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LCBZYWhvbyEgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLlxuU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiovXG5pbXBvcnQgSW50bE1lc3NhZ2VGb3JtYXQgZnJvbSAnLi9jb3JlJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybWF0dGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmUnO1xuZXhwb3J0IGRlZmF1bHQgSW50bE1lc3NhZ2VGb3JtYXQ7XG4iLCIvKlxuSFRNTCBlc2NhcGluZyBpcyB0aGUgc2FtZSBhcyBSZWFjdCdzXG4ob24gcHVycG9zZS4pIFRoZXJlZm9yZSwgaXQgaGFzIHRoZSBmb2xsb3dpbmcgQ29weXJpZ2h0IGFuZCBMaWNlbnNpbmc6XG5cbkNvcHlyaWdodCAyMDEzLTIwMTQsIEZhY2Vib29rLCBJbmMuXG5BbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5UaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUgTElDRU5TRVxuZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgUmVhY3QncyBzb3VyY2UgdHJlZS5cbiovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSW50bE1lc3NhZ2VGb3JtYXQgZnJvbSAnaW50bC1tZXNzYWdlZm9ybWF0JztcbmltcG9ydCBtZW1vaXplSW50bENvbnN0cnVjdG9yIGZyb20gJ2ludGwtZm9ybWF0LWNhY2hlJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ0Bmb3JtYXRqcy9pbnRsLXV0aWxzJztcbmNvbnN0IEVTQ0FQRURfQ0hBUlMgPSB7XG4gICAgMzg6ICcmYW1wOycsXG4gICAgNjI6ICcmZ3Q7JyxcbiAgICA2MDogJyZsdDsnLFxuICAgIDM0OiAnJnF1b3Q7JyxcbiAgICAzOTogJyYjeDI3OycsXG59O1xuY29uc3QgVU5TQUZFX0NIQVJTX1JFR0VYID0gL1smPjxcIiddL2c7XG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlKHN0cikge1xuICAgIHJldHVybiAoJycgKyBzdHIpLnJlcGxhY2UoVU5TQUZFX0NIQVJTX1JFR0VYLCBtYXRjaCA9PiBFU0NBUEVEX0NIQVJTW21hdGNoLmNoYXJDb2RlQXQoMCldKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJQcm9wcyhwcm9wcywgd2hpdGVsaXN0LCBkZWZhdWx0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHdoaXRlbGlzdC5yZWR1Y2UoKGZpbHRlcmVkLCBuYW1lKSA9PiB7XG4gICAgICAgIGlmIChuYW1lIGluIHByb3BzKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFtuYW1lXSA9IHByb3BzW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5hbWUgaW4gZGVmYXVsdHMpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkW25hbWVdID0gZGVmYXVsdHNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgIH0sIHt9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnZhcmlhbnRJbnRsQ29udGV4dChpbnRsKSB7XG4gICAgaW52YXJpYW50KGludGwsICdbUmVhY3QgSW50bF0gQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgYGludGxgIG9iamVjdC4gJyArXG4gICAgICAgICc8SW50bFByb3ZpZGVyPiBuZWVkcyB0byBleGlzdCBpbiB0aGUgY29tcG9uZW50IGFuY2VzdHJ5LicpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG1lc3NhZ2UsIGV4Y2VwdGlvbikge1xuICAgIGNvbnN0IGVNc2cgPSBleGNlcHRpb24gPyBgXFxuJHtleGNlcHRpb24uc3RhY2t9YCA6ICcnO1xuICAgIHJldHVybiBgW1JlYWN0IEludGxdICR7bWVzc2FnZX0ke2VNc2d9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycm9yKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5UTF9DT05GSUcgPSB7XG4gICAgZm9ybWF0czoge30sXG4gICAgbWVzc2FnZXM6IHt9LFxuICAgIHRpbWVab25lOiB1bmRlZmluZWQsXG4gICAgdGV4dENvbXBvbmVudDogUmVhY3QuRnJhZ21lbnQsXG4gICAgZGVmYXVsdExvY2FsZTogJ2VuJyxcbiAgICBkZWZhdWx0Rm9ybWF0czoge30sXG4gICAgb25FcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbn07XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW50bENhY2hlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGRhdGVUaW1lOiB7fSxcbiAgICAgICAgbnVtYmVyOiB7fSxcbiAgICAgICAgbWVzc2FnZToge30sXG4gICAgICAgIHJlbGF0aXZlVGltZToge30sXG4gICAgICAgIHBsdXJhbFJ1bGVzOiB7fSxcbiAgICAgICAgbGlzdDoge30sXG4gICAgICAgIGRpc3BsYXlOYW1lczoge30sXG4gICAgfTtcbn1cbi8qKlxuICogQ3JlYXRlIGludGwgZm9ybWF0dGVycyBhbmQgcG9wdWxhdGUgY2FjaGVcbiAqIEBwYXJhbSBjYWNoZSBleHBsaWNpdCBjYWNoZSB0byBwcmV2ZW50IGxlYWtpbmcgbWVtb3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtYXR0ZXJzKGNhY2hlID0gY3JlYXRlSW50bENhY2hlKCkpIHtcbiAgICBjb25zdCBSZWxhdGl2ZVRpbWVGb3JtYXQgPSBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdDtcbiAgICBjb25zdCBMaXN0Rm9ybWF0ID0gSW50bC5MaXN0Rm9ybWF0O1xuICAgIGNvbnN0IERpc3BsYXlOYW1lcyA9IEludGwuRGlzcGxheU5hbWVzO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldERhdGVUaW1lRm9ybWF0OiBtZW1vaXplSW50bENvbnN0cnVjdG9yKEludGwuRGF0ZVRpbWVGb3JtYXQsIGNhY2hlLmRhdGVUaW1lKSxcbiAgICAgICAgZ2V0TnVtYmVyRm9ybWF0OiBtZW1vaXplSW50bENvbnN0cnVjdG9yKEludGwuTnVtYmVyRm9ybWF0LCBjYWNoZS5udW1iZXIpLFxuICAgICAgICBnZXRNZXNzYWdlRm9ybWF0OiBtZW1vaXplSW50bENvbnN0cnVjdG9yKEludGxNZXNzYWdlRm9ybWF0LCBjYWNoZS5tZXNzYWdlKSxcbiAgICAgICAgZ2V0UmVsYXRpdmVUaW1lRm9ybWF0OiBtZW1vaXplSW50bENvbnN0cnVjdG9yKFJlbGF0aXZlVGltZUZvcm1hdCwgY2FjaGUucmVsYXRpdmVUaW1lKSxcbiAgICAgICAgZ2V0UGx1cmFsUnVsZXM6IG1lbW9pemVJbnRsQ29uc3RydWN0b3IoSW50bC5QbHVyYWxSdWxlcywgY2FjaGUucGx1cmFsUnVsZXMpLFxuICAgICAgICBnZXRMaXN0Rm9ybWF0OiBtZW1vaXplSW50bENvbnN0cnVjdG9yKExpc3RGb3JtYXQsIGNhY2hlLmxpc3QpLFxuICAgICAgICBnZXREaXNwbGF5TmFtZXM6IG1lbW9pemVJbnRsQ29uc3RydWN0b3IoRGlzcGxheU5hbWVzLCBjYWNoZS5kaXNwbGF5TmFtZXMpLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRGb3JtYXQoZm9ybWF0cywgdHlwZSwgbmFtZSwgb25FcnJvcikge1xuICAgIGNvbnN0IGZvcm1hdFR5cGUgPSBmb3JtYXRzICYmIGZvcm1hdHNbdHlwZV07XG4gICAgbGV0IGZvcm1hdDtcbiAgICBpZiAoZm9ybWF0VHlwZSkge1xuICAgICAgICBmb3JtYXQgPSBmb3JtYXRUeXBlW25hbWVdO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuICAgIG9uRXJyb3IoY3JlYXRlRXJyb3IoYE5vICR7dHlwZX0gZm9ybWF0IG5hbWVkOiAke25hbWV9YCkpO1xufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgaG9pc3ROb25SZWFjdFN0YXRpY3NfIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcbi8vIFNpbmNlIHJvbGx1cCBjYW5ub3QgZGVhbCB3aXRoIG5hbWVzcGFjZSBiZWluZyBhIGZ1bmN0aW9uLFxuLy8gdGhpcyBpcyB0byBpbnRlcm9wIHdpdGggVHlwZVNjcmlwdCBzaW5jZSBgaW52YXJpYW50YFxuLy8gZG9lcyBub3QgZXhwb3J0IGEgZGVmYXVsdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JvbGx1cC9yb2xsdXAvaXNzdWVzLzEyNjdcbmNvbnN0IGhvaXN0Tm9uUmVhY3RTdGF0aWNzID0gaG9pc3ROb25SZWFjdFN0YXRpY3NfLmRlZmF1bHQgfHwgaG9pc3ROb25SZWFjdFN0YXRpY3NfO1xuaW1wb3J0IHsgaW52YXJpYW50SW50bENvbnRleHQgfSBmcm9tICcuLi91dGlscyc7XG5mdW5jdGlvbiBnZXREaXNwbGF5TmFtZShDb21wb25lbnQpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xufVxuLy8gVE9ETzogV2Ugc2hvdWxkIHByb3ZpZGUgaW5pdGlhbCB2YWx1ZSBoZXJlXG5jb25zdCBJbnRsQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5jb25zdCB7IENvbnN1bWVyOiBJbnRsQ29uc3VtZXIsIFByb3ZpZGVyOiBJbnRsUHJvdmlkZXIgfSA9IEludGxDb250ZXh0O1xuZXhwb3J0IGNvbnN0IFByb3ZpZGVyID0gSW50bFByb3ZpZGVyO1xuZXhwb3J0IGNvbnN0IENvbnRleHQgPSBJbnRsQ29udGV4dDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluamVjdEludGwoV3JhcHBlZENvbXBvbmVudCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHsgaW50bFByb3BOYW1lID0gJ2ludGwnLCBmb3J3YXJkUmVmID0gZmFsc2UsIGVuZm9yY2VDb250ZXh0ID0gdHJ1ZSB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBXaXRoSW50bCA9IHByb3BzID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KEludGxDb25zdW1lciwgbnVsbCwgKGludGwpID0+IHtcbiAgICAgICAgaWYgKGVuZm9yY2VDb250ZXh0KSB7XG4gICAgICAgICAgICBpbnZhcmlhbnRJbnRsQ29udGV4dChpbnRsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIFtpbnRsUHJvcE5hbWVdOiBpbnRsLFxuICAgICAgICB9LCB7IHJlZjogZm9yd2FyZFJlZiA/IHByb3BzLmZvcndhcmRlZFJlZiA6IG51bGwgfSkpKTtcbiAgICB9KSk7XG4gICAgV2l0aEludGwuZGlzcGxheU5hbWUgPSBgaW5qZWN0SW50bCgke2dldERpc3BsYXlOYW1lKFdyYXBwZWRDb21wb25lbnQpfSlgO1xuICAgIFdpdGhJbnRsLldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xuICAgIGlmIChmb3J3YXJkUmVmKSB7XG4gICAgICAgIHJldHVybiBob2lzdE5vblJlYWN0U3RhdGljcyhSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChXaXRoSW50bCwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMsIHsgZm9yd2FyZGVkUmVmOiByZWYgfSkpKSksIFdyYXBwZWRDb21wb25lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gaG9pc3ROb25SZWFjdFN0YXRpY3MoV2l0aEludGwsIFdyYXBwZWRDb21wb25lbnQpO1xufVxuIiwidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaW52YXJpYW50SW50bENvbnRleHQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSAnLi9pbmplY3RJbnRsJztcbnZhciBEaXNwbGF5TmFtZTtcbihmdW5jdGlvbiAoRGlzcGxheU5hbWUpIHtcbiAgICBEaXNwbGF5TmFtZVtcImZvcm1hdERhdGVcIl0gPSBcIkZvcm1hdHRlZERhdGVcIjtcbiAgICBEaXNwbGF5TmFtZVtcImZvcm1hdFRpbWVcIl0gPSBcIkZvcm1hdHRlZFRpbWVcIjtcbiAgICBEaXNwbGF5TmFtZVtcImZvcm1hdE51bWJlclwiXSA9IFwiRm9ybWF0dGVkTnVtYmVyXCI7XG4gICAgRGlzcGxheU5hbWVbXCJmb3JtYXRMaXN0XCJdID0gXCJGb3JtYXR0ZWRMaXN0XCI7XG4gICAgLy8gTm90ZSB0aGF0IHRoaXMgRGlzcGxheU5hbWUgaXMgdGhlIGxvY2FsZSBkaXNwbGF5IG5hbWUsIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoXG4gICAgLy8gdGhlIG5hbWUgb2YgdGhlIGVudW0sIHdoaWNoIGlzIGZvciBSZWFjdCBjb21wb25lbnQgZGlzcGxheSBuYW1lIGluIGRldiB0b29scy5cbiAgICBEaXNwbGF5TmFtZVtcImZvcm1hdERpc3BsYXlOYW1lXCJdID0gXCJGb3JtYXR0ZWREaXNwbGF5TmFtZVwiO1xufSkoRGlzcGxheU5hbWUgfHwgKERpc3BsYXlOYW1lID0ge30pKTtcbnZhciBEaXNwbGF5TmFtZVBhcnRzO1xuKGZ1bmN0aW9uIChEaXNwbGF5TmFtZVBhcnRzKSB7XG4gICAgRGlzcGxheU5hbWVQYXJ0c1tcImZvcm1hdERhdGVcIl0gPSBcIkZvcm1hdHRlZERhdGVQYXJ0c1wiO1xuICAgIERpc3BsYXlOYW1lUGFydHNbXCJmb3JtYXRUaW1lXCJdID0gXCJGb3JtYXR0ZWRUaW1lUGFydHNcIjtcbiAgICBEaXNwbGF5TmFtZVBhcnRzW1wiZm9ybWF0TnVtYmVyXCJdID0gXCJGb3JtYXR0ZWROdW1iZXJQYXJ0c1wiO1xuICAgIERpc3BsYXlOYW1lUGFydHNbXCJmb3JtYXRMaXN0XCJdID0gXCJGb3JtYXR0ZWRMaXN0UGFydHNcIjtcbn0pKERpc3BsYXlOYW1lUGFydHMgfHwgKERpc3BsYXlOYW1lUGFydHMgPSB7fSkpO1xuZXhwb3J0IGNvbnN0IEZvcm1hdHRlZE51bWJlclBhcnRzID0gcHJvcHMgPT4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Db25zdW1lciwgbnVsbCwgKGludGwpID0+IHtcbiAgICBpbnZhcmlhbnRJbnRsQ29udGV4dChpbnRsKTtcbiAgICBjb25zdCB7IHZhbHVlLCBjaGlsZHJlbiB9ID0gcHJvcHMsIGZvcm1hdFByb3BzID0gX19yZXN0KHByb3BzLCBbXCJ2YWx1ZVwiLCBcImNoaWxkcmVuXCJdKTtcbiAgICByZXR1cm4gY2hpbGRyZW4oaW50bC5mb3JtYXROdW1iZXJUb1BhcnRzKHZhbHVlLCBmb3JtYXRQcm9wcykpO1xufSkpO1xuRm9ybWF0dGVkTnVtYmVyUGFydHMuZGlzcGxheU5hbWUgPSAnRm9ybWF0dGVkTnVtYmVyUGFydHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1hdHRlZERhdGVUaW1lUGFydHNDb21wb25lbnQobmFtZSkge1xuICAgIGNvbnN0IENvbXBvbmVudFBhcnRzID0gcHJvcHMgPT4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Db25zdW1lciwgbnVsbCwgKGludGwpID0+IHtcbiAgICAgICAgaW52YXJpYW50SW50bENvbnRleHQoaW50bCk7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGNoaWxkcmVuIH0gPSBwcm9wcywgZm9ybWF0UHJvcHMgPSBfX3Jlc3QocHJvcHMsIFtcInZhbHVlXCIsIFwiY2hpbGRyZW5cIl0pO1xuICAgICAgICBjb25zdCBkYXRlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHZhbHVlIHx8IDApIDogdmFsdWU7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFBhcnRzID0gbmFtZSA9PT0gJ2Zvcm1hdERhdGUnXG4gICAgICAgICAgICA/IGludGwuZm9ybWF0RGF0ZVRvUGFydHMoZGF0ZSwgZm9ybWF0UHJvcHMpXG4gICAgICAgICAgICA6IGludGwuZm9ybWF0VGltZVRvUGFydHMoZGF0ZSwgZm9ybWF0UHJvcHMpO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4oZm9ybWF0dGVkUGFydHMpO1xuICAgIH0pKTtcbiAgICBDb21wb25lbnRQYXJ0cy5kaXNwbGF5TmFtZSA9IERpc3BsYXlOYW1lUGFydHNbbmFtZV07XG4gICAgcmV0dXJuIENvbXBvbmVudFBhcnRzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1hdHRlZENvbXBvbmVudChuYW1lKSB7XG4gICAgY29uc3QgQ29tcG9uZW50ID0gcHJvcHMgPT4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Db25zdW1lciwgbnVsbCwgKGludGwpID0+IHtcbiAgICAgICAgaW52YXJpYW50SW50bENvbnRleHQoaW50bCk7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGNoaWxkcmVuIH0gPSBwcm9wcywgZm9ybWF0UHJvcHMgPSBfX3Jlc3QocHJvcHMsIFtcInZhbHVlXCIsIFwiY2hpbGRyZW5cIl0pO1xuICAgICAgICAvLyBUT0RPOiBmaXggVFMgdHlwZSBkZWZpbml0aW9uIGZvciBsb2NhbGVNYXRjaGVyIHVwc3RyZWFtXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gaW50bFtuYW1lXSh2YWx1ZSwgZm9ybWF0UHJvcHMpO1xuICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oZm9ybWF0dGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFRleHQgPSBpbnRsLnRleHRDb21wb25lbnQgfHwgUmVhY3QuRnJhZ21lbnQ7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIG51bGwsIGZvcm1hdHRlZFZhbHVlKTtcbiAgICB9KSk7XG4gICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gRGlzcGxheU5hbWVbbmFtZV07XG4gICAgcmV0dXJuIENvbXBvbmVudDtcbn1cbiIsImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSAnLi9pbmplY3RJbnRsJztcbmltcG9ydCB7IGludmFyaWFudEludGxDb250ZXh0IH0gZnJvbSAnLi4vdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlSW50bCgpIHtcbiAgICBjb25zdCBpbnRsID0gdXNlQ29udGV4dChDb250ZXh0KTtcbiAgICBpbnZhcmlhbnRJbnRsQ29udGV4dChpbnRsKTtcbiAgICByZXR1cm4gaW50bDtcbn1cbiIsImltcG9ydCB7IGdldE5hbWVkRm9ybWF0LCBmaWx0ZXJQcm9wcywgY3JlYXRlRXJyb3IgfSBmcm9tICcuLi91dGlscyc7XG5jb25zdCBOVU1CRVJfRk9STUFUX09QVElPTlMgPSBbXG4gICAgJ2xvY2FsZU1hdGNoZXInLFxuICAgICdzdHlsZScsXG4gICAgJ2N1cnJlbmN5JyxcbiAgICAnY3VycmVuY3lEaXNwbGF5JyxcbiAgICAndW5pdCcsXG4gICAgJ3VuaXREaXNwbGF5JyxcbiAgICAndXNlR3JvdXBpbmcnLFxuICAgICdtaW5pbXVtSW50ZWdlckRpZ2l0cycsXG4gICAgJ21pbmltdW1GcmFjdGlvbkRpZ2l0cycsXG4gICAgJ21heGltdW1GcmFjdGlvbkRpZ2l0cycsXG4gICAgJ21pbmltdW1TaWduaWZpY2FudERpZ2l0cycsXG4gICAgJ21heGltdW1TaWduaWZpY2FudERpZ2l0cycsXG4gICAgLy8gVW5pZmllZCBOdW1iZXJGb3JtYXQgKFN0YWdlIDMgYXMgb2YgMTAvMjIvMTkpXG4gICAgJ2NvbXBhY3REaXNwbGF5JyxcbiAgICAnY3VycmVuY3lEaXNwbGF5JyxcbiAgICAnY3VycmVuY3lTaWduJyxcbiAgICAnbm90YXRpb24nLFxuICAgICdzaWduRGlzcGxheScsXG4gICAgJ3VuaXQnLFxuICAgICd1bml0RGlzcGxheScsXG5dO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdHRlcih7IGxvY2FsZSwgZm9ybWF0cywgb25FcnJvciwgfSwgZ2V0TnVtYmVyRm9ybWF0LCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IGZvcm1hdCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBkZWZhdWx0cyA9ICgoZm9ybWF0ICYmXG4gICAgICAgIGdldE5hbWVkRm9ybWF0KGZvcm1hdHMsICdudW1iZXInLCBmb3JtYXQsIG9uRXJyb3IpKSB8fFxuICAgICAgICB7fSk7XG4gICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZmlsdGVyUHJvcHMob3B0aW9ucywgTlVNQkVSX0ZPUk1BVF9PUFRJT05TLCBkZWZhdWx0cyk7XG4gICAgcmV0dXJuIGdldE51bWJlckZvcm1hdChsb2NhbGUsIGZpbHRlcmVkT3B0aW9ucyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TnVtYmVyKGNvbmZpZywgZ2V0TnVtYmVyRm9ybWF0LCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlcihjb25maWcsIGdldE51bWJlckZvcm1hdCwgb3B0aW9ucykuZm9ybWF0KHZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uZmlnLm9uRXJyb3IoY3JlYXRlRXJyb3IoJ0Vycm9yIGZvcm1hdHRpbmcgbnVtYmVyLicsIGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TnVtYmVyVG9QYXJ0cyhjb25maWcsIGdldE51bWJlckZvcm1hdCwgdmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBnZXRGb3JtYXR0ZXIoY29uZmlnLCBnZXROdW1iZXJGb3JtYXQsIG9wdGlvbnMpLmZvcm1hdFRvUGFydHModmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25maWcub25FcnJvcihjcmVhdGVFcnJvcignRXJyb3IgZm9ybWF0dGluZyBudW1iZXIuJywgZSkpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG59XG4iLCJpbXBvcnQgeyBnZXROYW1lZEZvcm1hdCwgZmlsdGVyUHJvcHMsIGNyZWF0ZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMnO1xuY29uc3QgUkVMQVRJVkVfVElNRV9GT1JNQVRfT1BUSU9OUyA9IFtcbiAgICAnbnVtZXJpYycsXG4gICAgJ3N0eWxlJyxcbl07XG5mdW5jdGlvbiBnZXRGb3JtYXR0ZXIoeyBsb2NhbGUsIGZvcm1hdHMsIG9uRXJyb3IsIH0sIGdldFJlbGF0aXZlVGltZUZvcm1hdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBmb3JtYXQgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZGVmYXVsdHMgPSAoISFmb3JtYXQgJiYgZ2V0TmFtZWRGb3JtYXQoZm9ybWF0cywgJ3JlbGF0aXZlJywgZm9ybWF0LCBvbkVycm9yKSkgfHwge307XG4gICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZmlsdGVyUHJvcHMob3B0aW9ucywgUkVMQVRJVkVfVElNRV9GT1JNQVRfT1BUSU9OUywgZGVmYXVsdHMpO1xuICAgIHJldHVybiBnZXRSZWxhdGl2ZVRpbWVGb3JtYXQobG9jYWxlLCBmaWx0ZXJlZE9wdGlvbnMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlVGltZShjb25maWcsIGdldFJlbGF0aXZlVGltZUZvcm1hdCwgdmFsdWUsIHVuaXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghdW5pdCkge1xuICAgICAgICB1bml0ID0gJ3NlY29uZCc7XG4gICAgfVxuICAgIGNvbnN0IFJlbGF0aXZlVGltZUZvcm1hdCA9IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0O1xuICAgIGlmICghUmVsYXRpdmVUaW1lRm9ybWF0KSB7XG4gICAgICAgIGNvbmZpZy5vbkVycm9yKGNyZWF0ZUVycm9yKGBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQuXG5UcnkgcG9seWZpbGxpbmcgaXQgdXNpbmcgXCJAZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXRcIlxuYCkpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9ybWF0dGVyKGNvbmZpZywgZ2V0UmVsYXRpdmVUaW1lRm9ybWF0LCBvcHRpb25zKS5mb3JtYXQodmFsdWUsIHVuaXQpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25maWcub25FcnJvcihjcmVhdGVFcnJvcignRXJyb3IgZm9ybWF0dGluZyByZWxhdGl2ZSB0aW1lLicsIGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS5cbiAqIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7IGNyZWF0ZUVycm9yLCBmaWx0ZXJQcm9wcywgZ2V0TmFtZWRGb3JtYXQgfSBmcm9tICcuLi91dGlscyc7XG5jb25zdCBEQVRFX1RJTUVfRk9STUFUX09QVElPTlMgPSBbXG4gICAgJ2xvY2FsZU1hdGNoZXInLFxuICAgICdmb3JtYXRNYXRjaGVyJyxcbiAgICAndGltZVpvbmUnLFxuICAgICdob3VyMTInLFxuICAgICd3ZWVrZGF5JyxcbiAgICAnZXJhJyxcbiAgICAneWVhcicsXG4gICAgJ21vbnRoJyxcbiAgICAnZGF5JyxcbiAgICAnaG91cicsXG4gICAgJ21pbnV0ZScsXG4gICAgJ3NlY29uZCcsXG4gICAgJ3RpbWVab25lTmFtZScsXG5dO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdHRlcih7IGxvY2FsZSwgZm9ybWF0cywgb25FcnJvciwgdGltZVpvbmUsIH0sIHR5cGUsIGdldERhdGVUaW1lRm9ybWF0LCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IGZvcm1hdCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBkZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgKHRpbWVab25lICYmIHsgdGltZVpvbmUgfSkpLCAoZm9ybWF0ICYmIGdldE5hbWVkRm9ybWF0KGZvcm1hdHMsIHR5cGUsIGZvcm1hdCwgb25FcnJvcikpKTtcbiAgICBsZXQgZmlsdGVyZWRPcHRpb25zID0gZmlsdGVyUHJvcHMob3B0aW9ucywgREFURV9USU1FX0ZPUk1BVF9PUFRJT05TLCBkZWZhdWx0cyk7XG4gICAgaWYgKHR5cGUgPT09ICd0aW1lJyAmJlxuICAgICAgICAhZmlsdGVyZWRPcHRpb25zLmhvdXIgJiZcbiAgICAgICAgIWZpbHRlcmVkT3B0aW9ucy5taW51dGUgJiZcbiAgICAgICAgIWZpbHRlcmVkT3B0aW9ucy5zZWNvbmQpIHtcbiAgICAgICAgLy8gQWRkIGRlZmF1bHQgZm9ybWF0dGluZyBvcHRpb25zIGlmIGhvdXIsIG1pbnV0ZSwgb3Igc2Vjb25kIGlzbid0IGRlZmluZWQuXG4gICAgICAgIGZpbHRlcmVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmlsdGVyZWRPcHRpb25zKSwgeyBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0RGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBmaWx0ZXJlZE9wdGlvbnMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERhdGUoY29uZmlnLCBnZXREYXRlVGltZUZvcm1hdCwgdmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGRhdGUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUodmFsdWUgfHwgMCkgOiB2YWx1ZTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9ybWF0dGVyKGNvbmZpZywgJ2RhdGUnLCBnZXREYXRlVGltZUZvcm1hdCwgb3B0aW9ucykuZm9ybWF0KGRhdGUpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25maWcub25FcnJvcihjcmVhdGVFcnJvcignRXJyb3IgZm9ybWF0dGluZyBkYXRlLicsIGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhkYXRlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUaW1lKGNvbmZpZywgZ2V0RGF0ZVRpbWVGb3JtYXQsIHZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBkYXRlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHZhbHVlIHx8IDApIDogdmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlcihjb25maWcsICd0aW1lJywgZ2V0RGF0ZVRpbWVGb3JtYXQsIG9wdGlvbnMpLmZvcm1hdChkYXRlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uZmlnLm9uRXJyb3IoY3JlYXRlRXJyb3IoJ0Vycm9yIGZvcm1hdHRpbmcgdGltZS4nLCBlKSk7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcoZGF0ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGF0ZVRvUGFydHMoY29uZmlnLCBnZXREYXRlVGltZUZvcm1hdCwgdmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGRhdGUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUodmFsdWUgfHwgMCkgOiB2YWx1ZTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9ybWF0dGVyKGNvbmZpZywgJ2RhdGUnLCBnZXREYXRlVGltZUZvcm1hdCwgb3B0aW9ucykuZm9ybWF0VG9QYXJ0cyhkYXRlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uZmlnLm9uRXJyb3IoY3JlYXRlRXJyb3IoJ0Vycm9yIGZvcm1hdHRpbmcgZGF0ZS4nLCBlKSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUaW1lVG9QYXJ0cyhjb25maWcsIGdldERhdGVUaW1lRm9ybWF0LCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZGF0ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZSh2YWx1ZSB8fCAwKSA6IHZhbHVlO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBnZXRGb3JtYXR0ZXIoY29uZmlnLCAndGltZScsIGdldERhdGVUaW1lRm9ybWF0LCBvcHRpb25zKS5mb3JtYXRUb1BhcnRzKGRhdGUpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25maWcub25FcnJvcihjcmVhdGVFcnJvcignRXJyb3IgZm9ybWF0dGluZyB0aW1lLicsIGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuIiwiaW1wb3J0IHsgZmlsdGVyUHJvcHMsIGNyZWF0ZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMnO1xuY29uc3QgUExVUkFMX0ZPUk1BVF9PUFRJT05TID0gW1xuICAgICdsb2NhbGVNYXRjaGVyJyxcbiAgICAndHlwZScsXG5dO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBsdXJhbCh7IGxvY2FsZSwgb25FcnJvciB9LCBnZXRQbHVyYWxSdWxlcywgdmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghSW50bC5QbHVyYWxSdWxlcykge1xuICAgICAgICBvbkVycm9yKGNyZWF0ZUVycm9yKGBJbnRsLlBsdXJhbFJ1bGVzIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC5cblRyeSBwb2x5ZmlsbGluZyBpdCB1c2luZyBcIkBmb3JtYXRqcy9pbnRsLXBsdXJhbHJ1bGVzXCJcbmApKTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZmlsdGVyUHJvcHMob3B0aW9ucywgUExVUkFMX0ZPUk1BVF9PUFRJT05TKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0UGx1cmFsUnVsZXMobG9jYWxlLCBmaWx0ZXJlZE9wdGlvbnMpLnNlbGVjdCh2YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIG9uRXJyb3IoY3JlYXRlRXJyb3IoJ0Vycm9yIGZvcm1hdHRpbmcgcGx1cmFsLicsIGUpKTtcbiAgICB9XG4gICAgcmV0dXJuICdvdGhlcic7XG59XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS5cbiAqIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ0Bmb3JtYXRqcy9pbnRsLXV0aWxzJztcbmltcG9ydCB7IGNyZWF0ZUVycm9yLCBlc2NhcGUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgSW50bE1lc3NhZ2VGb3JtYXQgZnJvbSAnaW50bC1tZXNzYWdlZm9ybWF0JztcbmZ1bmN0aW9uIHNldFRpbWVab25lSW5PcHRpb25zKG9wdHMsIHRpbWVab25lKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9wdHMpLnJlZHVjZSgoYWxsLCBrKSA9PiB7XG4gICAgICAgIGFsbFtrXSA9IE9iamVjdC5hc3NpZ24oeyB0aW1lWm9uZSB9LCBvcHRzW2tdKTtcbiAgICAgICAgcmV0dXJuIGFsbDtcbiAgICB9LCB7fSk7XG59XG5mdW5jdGlvbiBkZWVwTWVyZ2VPcHRpb25zKG9wdHMxLCBvcHRzMikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9wdHMxKSwgb3B0czIpKTtcbiAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFsbCwgaykgPT4ge1xuICAgICAgICBhbGxba10gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIChvcHRzMVtrXSB8fCB7fSkpLCAob3B0czJba10gfHwge30pKTtcbiAgICAgICAgcmV0dXJuIGFsbDtcbiAgICB9LCB7fSk7XG59XG5mdW5jdGlvbiBkZWVwTWVyZ2VGb3JtYXRzQW5kU2V0VGltZVpvbmUoZjEsIHRpbWVab25lKSB7XG4gICAgaWYgKCF0aW1lWm9uZSkge1xuICAgICAgICByZXR1cm4gZjE7XG4gICAgfVxuICAgIGNvbnN0IG1mRm9ybWF0cyA9IEludGxNZXNzYWdlRm9ybWF0LmZvcm1hdHM7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBtZkZvcm1hdHMpLCBmMSksIHsgZGF0ZTogZGVlcE1lcmdlT3B0aW9ucyhzZXRUaW1lWm9uZUluT3B0aW9ucyhtZkZvcm1hdHMuZGF0ZSwgdGltZVpvbmUpLCBzZXRUaW1lWm9uZUluT3B0aW9ucyhmMS5kYXRlIHx8IHt9LCB0aW1lWm9uZSkpLCB0aW1lOiBkZWVwTWVyZ2VPcHRpb25zKHNldFRpbWVab25lSW5PcHRpb25zKG1mRm9ybWF0cy50aW1lLCB0aW1lWm9uZSksIHNldFRpbWVab25lSW5PcHRpb25zKGYxLnRpbWUgfHwge30sIHRpbWVab25lKSkgfSk7XG59XG5leHBvcnQgY29uc3QgcHJlcGFyZUludGxNZXNzYWdlRm9ybWF0SHRtbE91dHB1dCA9IChjaHVua3MpID0+IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC4uLmNodW5rcyk7XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZSh7IGxvY2FsZSwgZm9ybWF0cywgbWVzc2FnZXMsIGRlZmF1bHRMb2NhbGUsIGRlZmF1bHRGb3JtYXRzLCBvbkVycm9yLCB0aW1lWm9uZSwgfSwgc3RhdGUsIG1lc3NhZ2VEZXNjcmlwdG9yID0geyBpZDogJycgfSwgdmFsdWVzID0ge30pIHtcbiAgICBjb25zdCB7IGlkLCBkZWZhdWx0TWVzc2FnZSB9ID0gbWVzc2FnZURlc2NyaXB0b3I7XG4gICAgLy8gYGlkYCBpcyBhIHJlcXVpcmVkIGZpZWxkIG9mIGEgTWVzc2FnZSBEZXNjcmlwdG9yLlxuICAgIGludmFyaWFudCghIWlkLCAnW1JlYWN0IEludGxdIEFuIGBpZGAgbXVzdCBiZSBwcm92aWRlZCB0byBmb3JtYXQgYSBtZXNzYWdlLicpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlcyAmJiBtZXNzYWdlc1tTdHJpbmcoaWQpXTtcbiAgICBmb3JtYXRzID0gZGVlcE1lcmdlRm9ybWF0c0FuZFNldFRpbWVab25lKGZvcm1hdHMsIHRpbWVab25lKTtcbiAgICBkZWZhdWx0Rm9ybWF0cyA9IGRlZXBNZXJnZUZvcm1hdHNBbmRTZXRUaW1lWm9uZShkZWZhdWx0Rm9ybWF0cywgdGltZVpvbmUpO1xuICAgIGxldCBmb3JtYXR0ZWRNZXNzYWdlUGFydHMgPSBbXTtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc3RhdGUuZ2V0TWVzc2FnZUZvcm1hdChtZXNzYWdlLCBsb2NhbGUsIGZvcm1hdHMsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXJzOiBzdGF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybWF0dGVkTWVzc2FnZVBhcnRzID0gZm9ybWF0dGVyLmZvcm1hdEhUTUxNZXNzYWdlKHZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIG9uRXJyb3IoY3JlYXRlRXJyb3IoYEVycm9yIGZvcm1hdHRpbmcgbWVzc2FnZTogXCIke2lkfVwiIGZvciBsb2NhbGU6IFwiJHtsb2NhbGV9XCJgICtcbiAgICAgICAgICAgICAgICAoZGVmYXVsdE1lc3NhZ2UgPyAnLCB1c2luZyBkZWZhdWx0IG1lc3NhZ2UgYXMgZmFsbGJhY2suJyA6ICcnKSwgZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHdhcm5pbmdzIGZyb20gbGl0dGVyaW5nIHRoZSBjb25zb2xlIGluIGRldmVsb3BtZW50XG4gICAgICAgIC8vIHdoZW4gbm8gYG1lc3NhZ2VzYCBhcmUgcGFzc2VkIGludG8gdGhlIDxJbnRsUHJvdmlkZXI+IGZvciB0aGVcbiAgICAgICAgLy8gZGVmYXVsdCBsb2NhbGUsIGFuZCBhIGRlZmF1bHQgbWVzc2FnZSBpcyBpbiB0aGUgc291cmNlLlxuICAgICAgICBpZiAoIWRlZmF1bHRNZXNzYWdlIHx8XG4gICAgICAgICAgICAobG9jYWxlICYmIGxvY2FsZS50b0xvd2VyQ2FzZSgpICE9PSBkZWZhdWx0TG9jYWxlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBvbkVycm9yKGNyZWF0ZUVycm9yKGBNaXNzaW5nIG1lc3NhZ2U6IFwiJHtpZH1cIiBmb3IgbG9jYWxlOiBcIiR7bG9jYWxlfVwiYCArXG4gICAgICAgICAgICAgICAgKGRlZmF1bHRNZXNzYWdlID8gJywgdXNpbmcgZGVmYXVsdCBtZXNzYWdlIGFzIGZhbGxiYWNrLicgOiAnJykpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZvcm1hdHRlZE1lc3NhZ2VQYXJ0cy5sZW5ndGggJiYgZGVmYXVsdE1lc3NhZ2UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHN0YXRlLmdldE1lc3NhZ2VGb3JtYXQoZGVmYXVsdE1lc3NhZ2UsIGRlZmF1bHRMb2NhbGUsIGRlZmF1bHRGb3JtYXRzKTtcbiAgICAgICAgICAgIGZvcm1hdHRlZE1lc3NhZ2VQYXJ0cyA9IGZvcm1hdHRlci5mb3JtYXRIVE1MTWVzc2FnZSh2YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBvbkVycm9yKGNyZWF0ZUVycm9yKGBFcnJvciBmb3JtYXR0aW5nIHRoZSBkZWZhdWx0IG1lc3NhZ2UgZm9yOiBcIiR7aWR9XCJgLCBlKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmb3JtYXR0ZWRNZXNzYWdlUGFydHMubGVuZ3RoKSB7XG4gICAgICAgIG9uRXJyb3IoY3JlYXRlRXJyb3IoYENhbm5vdCBmb3JtYXQgbWVzc2FnZTogXCIke2lkfVwiLCBgICtcbiAgICAgICAgICAgIGB1c2luZyBtZXNzYWdlICR7bWVzc2FnZSB8fCBkZWZhdWx0TWVzc2FnZSA/ICdzb3VyY2UnIDogJ2lkJ30gYXMgZmFsbGJhY2suYCkpO1xuICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZSB8fCBkZWZhdWx0TWVzc2FnZSB8fCBTdHJpbmcoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0TWVzc2FnZSB8fCBTdHJpbmcoaWQpO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0dGVkTWVzc2FnZVBhcnRzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICB0eXBlb2YgZm9ybWF0dGVkTWVzc2FnZVBhcnRzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZVBhcnRzWzBdIHx8IGRlZmF1bHRNZXNzYWdlIHx8IFN0cmluZyhpZCk7XG4gICAgfVxuICAgIHJldHVybiBwcmVwYXJlSW50bE1lc3NhZ2VGb3JtYXRIdG1sT3V0cHV0KGZvcm1hdHRlZE1lc3NhZ2VQYXJ0cyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SFRNTE1lc3NhZ2UoY29uZmlnLCBzdGF0ZSwgbWVzc2FnZURlc2NyaXB0b3IgPSB7IGlkOiAnJyB9LCByYXdWYWx1ZXMgPSB7fSkge1xuICAgIC8vIFByb2Nlc3MgYWxsIHRoZSB2YWx1ZXMgYmVmb3JlIHRoZXkgYXJlIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBJQ1VcbiAgICAvLyBNZXNzYWdlIHN0cmluZy4gU2luY2UgdGhlIGZvcm1hdHRlZCBtZXNzYWdlIG1pZ2h0IGJlIGluamVjdGVkIHZpYVxuICAgIC8vIGBpbm5lckhUTUxgLCBhbGwgU3RyaW5nLWJhc2VkIHZhbHVlcyBuZWVkIHRvIGJlIEhUTUwtZXNjYXBlZC5cbiAgICBjb25zdCBlc2NhcGVkVmFsdWVzID0gT2JqZWN0LmtleXMocmF3VmFsdWVzKS5yZWR1Y2UoKGVzY2FwZWQsIG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByYXdWYWx1ZXNbbmFtZV07XG4gICAgICAgIGVzY2FwZWRbbmFtZV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gZXNjYXBlKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICByZXR1cm4gZXNjYXBlZDtcbiAgICB9LCB7fSk7XG4gICAgcmV0dXJuIGZvcm1hdE1lc3NhZ2UoY29uZmlnLCBzdGF0ZSwgbWVzc2FnZURlc2NyaXB0b3IsIGVzY2FwZWRWYWx1ZXMpO1xufVxuIiwiaW1wb3J0IHsgZmlsdGVyUHJvcHMsIGNyZWF0ZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMnO1xuY29uc3QgTElTVF9GT1JNQVRfT1BUSU9OUyA9IFtcbiAgICAnbG9jYWxlTWF0Y2hlcicsXG4gICAgJ3R5cGUnLFxuICAgICdzdHlsZScsXG5dO1xuY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbmZ1bmN0aW9uIGdlbmVyYXRlVG9rZW4oaSkge1xuICAgIHJldHVybiBgJHtub3d9XyR7aX1fJHtub3d9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRMaXN0KHsgbG9jYWxlLCBvbkVycm9yIH0sIGdldExpc3RGb3JtYXQsIHZhbHVlcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgTGlzdEZvcm1hdCA9IEludGwuTGlzdEZvcm1hdDtcbiAgICBpZiAoIUxpc3RGb3JtYXQpIHtcbiAgICAgICAgb25FcnJvcihjcmVhdGVFcnJvcihgSW50bC5MaXN0Rm9ybWF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC5cblRyeSBwb2x5ZmlsbGluZyBpdCB1c2luZyBcIkBmb3JtYXRqcy9pbnRsLWxpc3Rmb3JtYXRcIlxuYCkpO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSBmaWx0ZXJQcm9wcyhvcHRpb25zLCBMSVNUX0ZPUk1BVF9PUFRJT05TKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByaWNoVmFsdWVzID0ge307XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2LCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBnZW5lcmF0ZVRva2VuKGkpO1xuICAgICAgICAgICAgICAgIHJpY2hWYWx1ZXNbaWRdID0gdjtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHYpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhyaWNoVmFsdWVzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRMaXN0Rm9ybWF0KGxvY2FsZSwgZmlsdGVyZWRPcHRpb25zKS5mb3JtYXQoc2VyaWFsaXplZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFydHMgPSBnZXRMaXN0Rm9ybWF0KGxvY2FsZSwgZmlsdGVyZWRPcHRpb25zKS5mb3JtYXRUb1BhcnRzKHNlcmlhbGl6ZWRWYWx1ZXMpO1xuICAgICAgICByZXR1cm4gcGFydHMucmVkdWNlKChhbGwsIGVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBlbC52YWx1ZTtcbiAgICAgICAgICAgIGlmIChyaWNoVmFsdWVzW3ZhbF0pIHtcbiAgICAgICAgICAgICAgICBhbGwucHVzaChyaWNoVmFsdWVzW3ZhbF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFsbFthbGwubGVuZ3RoIC0gMV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYWxsW2FsbC5sZW5ndGggLSAxXSArPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGwucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFsbDtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBvbkVycm9yKGNyZWF0ZUVycm9yKCdFcnJvciBmb3JtYXR0aW5nIGxpc3QuJywgZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xufVxuIiwiaW1wb3J0IHsgZmlsdGVyUHJvcHMsIGNyZWF0ZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMnO1xuY29uc3QgRElTUExBWV9OQU1FU19PUFRPTlMgPSBbXG4gICAgJ2xvY2FsZU1hdGNoZXInLFxuICAgICdzdHlsZScsXG4gICAgJ3R5cGUnLFxuICAgICdmYWxsYmFjaycsXG5dO1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERpc3BsYXlOYW1lKHsgbG9jYWxlLCBvbkVycm9yIH0sIGdldERpc3BsYXlOYW1lcywgdmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IERpc3BsYXlOYW1lcyA9IEludGwuRGlzcGxheU5hbWVzO1xuICAgIGlmICghRGlzcGxheU5hbWVzKSB7XG4gICAgICAgIG9uRXJyb3IoY3JlYXRlRXJyb3IoYEludGwuRGlzcGxheU5hbWVzIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC5cblRyeSBwb2x5ZmlsbGluZyBpdCB1c2luZyBcIkBmb3JtYXRqcy9pbnRsLWRpc3BsYXluYW1lc1wiXG5gKSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IGZpbHRlclByb3BzKG9wdGlvbnMsIERJU1BMQVlfTkFNRVNfT1BUT05TKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzcGxheU5hbWVzKGxvY2FsZSwgZmlsdGVyZWRPcHRpb25zKS5vZih2YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIG9uRXJyb3IoY3JlYXRlRXJyb3IoJ0Vycm9yIGZvcm1hdHRpbmcgZGlzcGxheSBuYW1lLicsIGUpKTtcbiAgICB9XG59XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS5cbiAqIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnLi9pbmplY3RJbnRsJztcbmltcG9ydCB7IGNyZWF0ZUVycm9yLCBERUZBVUxUX0lOVExfQ09ORklHLCBjcmVhdGVGb3JtYXR0ZXJzLCBpbnZhcmlhbnRJbnRsQ29udGV4dCwgY3JlYXRlSW50bENhY2hlLCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0TnVtYmVyVG9QYXJ0cyB9IGZyb20gJy4uL2Zvcm1hdHRlcnMvbnVtYmVyJztcbmltcG9ydCB7IGZvcm1hdFJlbGF0aXZlVGltZSB9IGZyb20gJy4uL2Zvcm1hdHRlcnMvcmVsYXRpdmVUaW1lJztcbmltcG9ydCB7IGZvcm1hdERhdGUsIGZvcm1hdFRpbWUsIGZvcm1hdERhdGVUb1BhcnRzLCBmb3JtYXRUaW1lVG9QYXJ0cywgfSBmcm9tICcuLi9mb3JtYXR0ZXJzL2RhdGVUaW1lJztcbmltcG9ydCB7IGZvcm1hdFBsdXJhbCB9IGZyb20gJy4uL2Zvcm1hdHRlcnMvcGx1cmFsJztcbmltcG9ydCB7IGZvcm1hdE1lc3NhZ2UsIGZvcm1hdEhUTUxNZXNzYWdlIH0gZnJvbSAnLi4vZm9ybWF0dGVycy9tZXNzYWdlJztcbmltcG9ydCAqIGFzIHNoYWxsb3dFcXVhbHNfIGZyb20gJ3NoYWxsb3ctZXF1YWwvb2JqZWN0cyc7XG5pbXBvcnQgeyBmb3JtYXRMaXN0IH0gZnJvbSAnLi4vZm9ybWF0dGVycy9saXN0JztcbmltcG9ydCB7IGZvcm1hdERpc3BsYXlOYW1lIH0gZnJvbSAnLi4vZm9ybWF0dGVycy9kaXNwbGF5TmFtZSc7XG5jb25zdCBzaGFsbG93RXF1YWxzID0gc2hhbGxvd0VxdWFsc18uZGVmYXVsdCB8fCBzaGFsbG93RXF1YWxzXztcbmZ1bmN0aW9uIHByb2Nlc3NJbnRsQ29uZmlnKGNvbmZpZykge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogY29uZmlnLmxvY2FsZSxcbiAgICAgICAgdGltZVpvbmU6IGNvbmZpZy50aW1lWm9uZSxcbiAgICAgICAgZm9ybWF0czogY29uZmlnLmZvcm1hdHMsXG4gICAgICAgIHRleHRDb21wb25lbnQ6IGNvbmZpZy50ZXh0Q29tcG9uZW50LFxuICAgICAgICBtZXNzYWdlczogY29uZmlnLm1lc3NhZ2VzLFxuICAgICAgICBkZWZhdWx0TG9jYWxlOiBjb25maWcuZGVmYXVsdExvY2FsZSxcbiAgICAgICAgZGVmYXVsdEZvcm1hdHM6IGNvbmZpZy5kZWZhdWx0Rm9ybWF0cyxcbiAgICAgICAgb25FcnJvcjogY29uZmlnLm9uRXJyb3IsXG4gICAgfTtcbn1cbi8qKlxuICogQ3JlYXRlIGludGwgb2JqZWN0XG4gKiBAcGFyYW0gY29uZmlnIGludGwgY29uZmlnXG4gKiBAcGFyYW0gY2FjaGUgY2FjaGUgZm9yIGZvcm1hdHRlciBpbnN0YW5jZXMgdG8gcHJldmVudCBtZW1vcnkgbGVha1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW50bChjb25maWcsIGNhY2hlKSB7XG4gICAgY29uc3QgZm9ybWF0dGVycyA9IGNyZWF0ZUZvcm1hdHRlcnMoY2FjaGUpO1xuICAgIGNvbnN0IHJlc29sdmVkQ29uZmlnID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0lOVExfQ09ORklHKSwgY29uZmlnKTtcbiAgICBjb25zdCB7IGxvY2FsZSwgZGVmYXVsdExvY2FsZSwgb25FcnJvciB9ID0gcmVzb2x2ZWRDb25maWc7XG4gICAgaWYgKCFsb2NhbGUpIHtcbiAgICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgICAgIG9uRXJyb3IoY3JlYXRlRXJyb3IoYFwibG9jYWxlXCIgd2FzIG5vdCBjb25maWd1cmVkLCB1c2luZyBcIiR7ZGVmYXVsdExvY2FsZX1cIiBhcyBmYWxsYmFjay4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtYXRqcy9yZWFjdC1pbnRsL2Jsb2IvbWFzdGVyL2RvY3MvQVBJLm1kI2ludGxzaGFwZSBmb3IgbW9yZSBkZXRhaWxzYCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNpbmNlIHRoZXJlJ3Mgbm8gcmVnaXN0ZXJlZCBsb2NhbGUgZGF0YSBmb3IgYGxvY2FsZWAsIHRoaXMgd2lsbFxuICAgICAgICAvLyBmYWxsYmFjayB0byB0aGUgYGRlZmF1bHRMb2NhbGVgIHRvIG1ha2Ugc3VyZSB0aGluZ3MgY2FuIHJlbmRlci5cbiAgICAgICAgLy8gVGhlIGBtZXNzYWdlc2AgYXJlIG92ZXJyaWRkZW4gdG8gdGhlIGBkZWZhdWx0UHJvcHNgIGVtcHR5IG9iamVjdFxuICAgICAgICAvLyB0byBtYWludGFpbiByZWZlcmVudGlhbCBlcXVhbGl0eSBhY3Jvc3MgcmUtcmVuZGVycy4gSXQncyBhc3N1bWVkXG4gICAgICAgIC8vIGVhY2ggPEZvcm1hdHRlZE1lc3NhZ2U+IGNvbnRhaW5zIGEgYGRlZmF1bHRNZXNzYWdlYCBwcm9wLlxuICAgICAgICByZXNvbHZlZENvbmZpZy5sb2NhbGUgPSByZXNvbHZlZENvbmZpZy5kZWZhdWx0TG9jYWxlIHx8ICdlbic7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlKS5sZW5ndGggJiYgb25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGNyZWF0ZUVycm9yKGBNaXNzaW5nIGxvY2FsZSBkYXRhIGZvciBsb2NhbGU6IFwiJHtsb2NhbGV9XCIgaW4gSW50bC5OdW1iZXJGb3JtYXQuIFVzaW5nIGRlZmF1bHQgbG9jYWxlOiBcIiR7ZGVmYXVsdExvY2FsZX1cIiBhcyBmYWxsYmFjay4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtYXRqcy9yZWFjdC1pbnRsL2Jsb2IvbWFzdGVyL2RvY3MvR2V0dGluZy1TdGFydGVkLm1kI3J1bnRpbWUtcmVxdWlyZW1lbnRzIGZvciBtb3JlIGRldGFpbHNgKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGUpLmxlbmd0aCAmJlxuICAgICAgICBvbkVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IoY3JlYXRlRXJyb3IoYE1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIGxvY2FsZTogXCIke2xvY2FsZX1cIiBpbiBJbnRsLkRhdGVUaW1lRm9ybWF0LiBVc2luZyBkZWZhdWx0IGxvY2FsZTogXCIke2RlZmF1bHRMb2NhbGV9XCIgYXMgZmFsbGJhY2suIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZm9ybWF0anMvcmVhY3QtaW50bC9ibG9iL21hc3Rlci9kb2NzL0dldHRpbmctU3RhcnRlZC5tZCNydW50aW1lLXJlcXVpcmVtZW50cyBmb3IgbW9yZSBkZXRhaWxzYCkpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXNvbHZlZENvbmZpZyksIHsgZm9ybWF0dGVycywgZm9ybWF0TnVtYmVyOiBmb3JtYXROdW1iZXIuYmluZChudWxsLCByZXNvbHZlZENvbmZpZywgZm9ybWF0dGVycy5nZXROdW1iZXJGb3JtYXQpLCBmb3JtYXROdW1iZXJUb1BhcnRzOiBmb3JtYXROdW1iZXJUb1BhcnRzLmJpbmQobnVsbCwgcmVzb2x2ZWRDb25maWcsIGZvcm1hdHRlcnMuZ2V0TnVtYmVyRm9ybWF0KSwgZm9ybWF0UmVsYXRpdmVUaW1lOiBmb3JtYXRSZWxhdGl2ZVRpbWUuYmluZChudWxsLCByZXNvbHZlZENvbmZpZywgZm9ybWF0dGVycy5nZXRSZWxhdGl2ZVRpbWVGb3JtYXQpLCBmb3JtYXREYXRlOiBmb3JtYXREYXRlLmJpbmQobnVsbCwgcmVzb2x2ZWRDb25maWcsIGZvcm1hdHRlcnMuZ2V0RGF0ZVRpbWVGb3JtYXQpLCBmb3JtYXREYXRlVG9QYXJ0czogZm9ybWF0RGF0ZVRvUGFydHMuYmluZChudWxsLCByZXNvbHZlZENvbmZpZywgZm9ybWF0dGVycy5nZXREYXRlVGltZUZvcm1hdCksIGZvcm1hdFRpbWU6IGZvcm1hdFRpbWUuYmluZChudWxsLCByZXNvbHZlZENvbmZpZywgZm9ybWF0dGVycy5nZXREYXRlVGltZUZvcm1hdCksIGZvcm1hdFRpbWVUb1BhcnRzOiBmb3JtYXRUaW1lVG9QYXJ0cy5iaW5kKG51bGwsIHJlc29sdmVkQ29uZmlnLCBmb3JtYXR0ZXJzLmdldERhdGVUaW1lRm9ybWF0KSwgZm9ybWF0UGx1cmFsOiBmb3JtYXRQbHVyYWwuYmluZChudWxsLCByZXNvbHZlZENvbmZpZywgZm9ybWF0dGVycy5nZXRQbHVyYWxSdWxlcyksIGZvcm1hdE1lc3NhZ2U6IGZvcm1hdE1lc3NhZ2UuYmluZChudWxsLCByZXNvbHZlZENvbmZpZywgZm9ybWF0dGVycyksIGZvcm1hdEhUTUxNZXNzYWdlOiBmb3JtYXRIVE1MTWVzc2FnZS5iaW5kKG51bGwsIHJlc29sdmVkQ29uZmlnLCBmb3JtYXR0ZXJzKSwgZm9ybWF0TGlzdDogZm9ybWF0TGlzdC5iaW5kKG51bGwsIHJlc29sdmVkQ29uZmlnLCBmb3JtYXR0ZXJzLmdldExpc3RGb3JtYXQpLCBmb3JtYXREaXNwbGF5TmFtZTogZm9ybWF0RGlzcGxheU5hbWUuYmluZChudWxsLCByZXNvbHZlZENvbmZpZywgZm9ybWF0dGVycy5nZXREaXNwbGF5TmFtZXMpIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50bFByb3ZpZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBjcmVhdGVJbnRsQ2FjaGUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICAgICAgaW50bDogY3JlYXRlSW50bChwcm9jZXNzSW50bENvbmZpZyh0aGlzLnByb3BzKSwgdGhpcy5jYWNoZSksXG4gICAgICAgICAgICBwcmV2Q29uZmlnOiBwcm9jZXNzSW50bENvbmZpZyh0aGlzLnByb3BzKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgeyBwcmV2Q29uZmlnLCBjYWNoZSB9KSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHByb2Nlc3NJbnRsQ29uZmlnKHByb3BzKTtcbiAgICAgICAgaWYgKCFzaGFsbG93RXF1YWxzKHByZXZDb25maWcsIGNvbmZpZykpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW50bDogY3JlYXRlSW50bChjb25maWcsIGNhY2hlKSxcbiAgICAgICAgICAgICAgICBwcmV2Q29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGludmFyaWFudEludGxDb250ZXh0KHRoaXMuc3RhdGUuaW50bCk7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFByb3ZpZGVyLCB7IHZhbHVlOiB0aGlzLnN0YXRlLmludGwgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgfVxufVxuSW50bFByb3ZpZGVyLmRpc3BsYXlOYW1lID0gJ0ludGxQcm92aWRlcic7XG5JbnRsUHJvdmlkZXIuZGVmYXVsdFByb3BzID0gREVGQVVMVF9JTlRMX0NPTkZJRztcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28gSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLlxuICogU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4vaW5qZWN0SW50bCc7XG5pbXBvcnQgeyBpbnZhcmlhbnRJbnRsQ29udGV4dCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ0Bmb3JtYXRqcy9pbnRsLXV0aWxzJztcbmNvbnN0IE1JTlVURSA9IDYwO1xuY29uc3QgSE9VUiA9IDYwICogNjA7XG5jb25zdCBEQVkgPSA2MCAqIDYwICogMjQ7XG5mdW5jdGlvbiBzZWxlY3RVbml0KHNlY29uZHMpIHtcbiAgICBjb25zdCBhYnNWYWx1ZSA9IE1hdGguYWJzKHNlY29uZHMpO1xuICAgIGlmIChhYnNWYWx1ZSA8IE1JTlVURSkge1xuICAgICAgICByZXR1cm4gJ3NlY29uZCc7XG4gICAgfVxuICAgIGlmIChhYnNWYWx1ZSA8IEhPVVIpIHtcbiAgICAgICAgcmV0dXJuICdtaW51dGUnO1xuICAgIH1cbiAgICBpZiAoYWJzVmFsdWUgPCBEQVkpIHtcbiAgICAgICAgcmV0dXJuICdob3VyJztcbiAgICB9XG4gICAgcmV0dXJuICdkYXknO1xufVxuZnVuY3Rpb24gZ2V0RHVyYXRpb25JblNlY29uZHModW5pdCkge1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICByZXR1cm4gTUlOVVRFO1xuICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgIHJldHVybiBIT1VSO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIERBWTtcbiAgICB9XG59XG5mdW5jdGlvbiB2YWx1ZVRvU2Vjb25kcyh2YWx1ZSwgdW5pdCkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogTUlOVVRFO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogSE9VUjtcbiAgICB9XG59XG5jb25zdCBJTkNSRU1FTlRBQkxFX1VOSVRTID0gWydzZWNvbmQnLCAnbWludXRlJywgJ2hvdXInXTtcbmZ1bmN0aW9uIGNhbkluY3JlbWVudCh1bml0ID0gJ3NlY29uZCcpIHtcbiAgICByZXR1cm4gSU5DUkVNRU5UQUJMRV9VTklUUy5pbmNsdWRlcyh1bml0KTtcbn1cbmV4cG9ydCBjbGFzcyBGb3JtYXR0ZWRSZWxhdGl2ZVRpbWUgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIC8vIFB1YmxpYyBmb3IgdGVzdGluZ1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lciA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBwcmV2VW5pdDogdGhpcy5wcm9wcy51bml0LFxuICAgICAgICAgICAgcHJldlZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgICAgICAgY3VycmVudFZhbHVlSW5TZWNvbmRzOiBjYW5JbmNyZW1lbnQodGhpcy5wcm9wcy51bml0KVxuICAgICAgICAgICAgICAgID8gdmFsdWVUb1NlY29uZHModGhpcy5wcm9wcy52YWx1ZSwgdGhpcy5wcm9wcy51bml0KVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgfTtcbiAgICAgICAgaW52YXJpYW50KCFwcm9wcy51cGRhdGVJbnRlcnZhbEluU2Vjb25kcyB8fFxuICAgICAgICAgICAgISEocHJvcHMudXBkYXRlSW50ZXJ2YWxJblNlY29uZHMgJiYgY2FuSW5jcmVtZW50KHByb3BzLnVuaXQpKSwgJ0Nhbm5vdCBzY2hlZHVsZSB1cGRhdGUgd2l0aCB1bml0IGxvbmdlciB0aGFuIGhvdXInKTtcbiAgICB9XG4gICAgc2NoZWR1bGVOZXh0VXBkYXRlKHsgdXBkYXRlSW50ZXJ2YWxJblNlY29uZHMsIHVuaXQgfSwgeyBjdXJyZW50VmFsdWVJblNlY29uZHMgfSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZXIpO1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lciA9IG51bGw7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gaW50ZXJ2YWwgYW5kIHdlIGNhbm5vdCBpbmNyZW1lbnQgdGhpcyB1bml0LCBkbyBub3RoaW5nXG4gICAgICAgIGlmICghdXBkYXRlSW50ZXJ2YWxJblNlY29uZHMgfHwgIWNhbkluY3JlbWVudCh1bml0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIG5leHQgaW50ZXJlc3RpbmcgdGltZVxuICAgICAgICBjb25zdCBuZXh0VmFsdWVJblNlY29uZHMgPSBjdXJyZW50VmFsdWVJblNlY29uZHMgLSB1cGRhdGVJbnRlcnZhbEluU2Vjb25kcztcbiAgICAgICAgY29uc3QgbmV4dFVuaXQgPSBzZWxlY3RVbml0KG5leHRWYWx1ZUluU2Vjb25kcyk7XG4gICAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIG1heCBhdXRvIGluY3JlbWVudGFibGUgdW5pdCwgZG9uJ3Qgc2NoZWR1bGUgYW5vdGhlciB1cGRhdGVcbiAgICAgICAgaWYgKG5leHRVbml0ID09PSAnZGF5Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVuaXREdXJhdGlvbiA9IGdldER1cmF0aW9uSW5TZWNvbmRzKG5leHRVbml0KTtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gbmV4dFZhbHVlSW5TZWNvbmRzICUgdW5pdER1cmF0aW9uO1xuICAgICAgICBjb25zdCBwcmV2SW50ZXJlc3RpbmdWYWx1ZUluU2Vjb25kcyA9IG5leHRWYWx1ZUluU2Vjb25kcyAtIHJlbWFpbmRlcjtcbiAgICAgICAgY29uc3QgbmV4dEludGVyZXN0aW5nVmFsdWVJblNlY29uZHMgPSBwcmV2SW50ZXJlc3RpbmdWYWx1ZUluU2Vjb25kcyA+PSBjdXJyZW50VmFsdWVJblNlY29uZHNcbiAgICAgICAgICAgID8gcHJldkludGVyZXN0aW5nVmFsdWVJblNlY29uZHMgLSB1bml0RHVyYXRpb25cbiAgICAgICAgICAgIDogcHJldkludGVyZXN0aW5nVmFsdWVJblNlY29uZHM7XG4gICAgICAgIGNvbnN0IGRlbGF5SW5TZWNvbmRzID0gTWF0aC5hYnMobmV4dEludGVyZXN0aW5nVmFsdWVJblNlY29uZHMgLSBjdXJyZW50VmFsdWVJblNlY29uZHMpO1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBjdXJyZW50VmFsdWVJblNlY29uZHM6IG5leHRJbnRlcmVzdGluZ1ZhbHVlSW5TZWNvbmRzLFxuICAgICAgICB9KSwgZGVsYXlJblNlY29uZHMgKiAxZTMpO1xuICAgIH1cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZU5leHRVcGRhdGUodGhpcy5wcm9wcywgdGhpcy5zdGF0ZSk7XG4gICAgfVxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZU5leHRVcGRhdGUodGhpcy5wcm9wcywgdGhpcy5zdGF0ZSk7XG4gICAgfVxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZXIpO1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICAgIGlmIChwcm9wcy51bml0ICE9PSBzdGF0ZS5wcmV2VW5pdCB8fCBwcm9wcy52YWx1ZSAhPT0gc3RhdGUucHJldlZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByZXZWYWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgICAgICAgICAgcHJldlVuaXQ6IHByb3BzLnVuaXQsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlSW5TZWNvbmRzOiBjYW5JbmNyZW1lbnQocHJvcHMudW5pdClcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVRvU2Vjb25kcyhwcm9wcy52YWx1ZSwgcHJvcHMudW5pdClcbiAgICAgICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Db25zdW1lciwgbnVsbCwgKGludGwpID0+IHtcbiAgICAgICAgICAgIGludmFyaWFudEludGxDb250ZXh0KGludGwpO1xuICAgICAgICAgICAgY29uc3QgeyBmb3JtYXRSZWxhdGl2ZVRpbWUsIHRleHRDb21wb25lbnQ6IFRleHQgfSA9IGludGw7XG4gICAgICAgICAgICBjb25zdCB7IGNoaWxkcmVuLCB2YWx1ZSwgdW5pdCwgdXBkYXRlSW50ZXJ2YWxJblNlY29uZHMgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZUluU2Vjb25kcyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSB2YWx1ZSB8fCAwO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRVbml0ID0gdW5pdDtcbiAgICAgICAgICAgIGlmIChjYW5JbmNyZW1lbnQodW5pdCkgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY3VycmVudFZhbHVlSW5TZWNvbmRzID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHVwZGF0ZUludGVydmFsSW5TZWNvbmRzKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFVuaXQgPSBzZWxlY3RVbml0KGN1cnJlbnRWYWx1ZUluU2Vjb25kcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5pdER1cmF0aW9uID0gZ2V0RHVyYXRpb25JblNlY29uZHMoY3VycmVudFVuaXQpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IE1hdGgucm91bmQoY3VycmVudFZhbHVlSW5TZWNvbmRzIC8gdW5pdER1cmF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFJlbGF0aXZlVGltZSA9IGZvcm1hdFJlbGF0aXZlVGltZShjdXJyZW50VmFsdWUsIGN1cnJlbnRVbml0LCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKGZvcm1hdHRlZFJlbGF0aXZlVGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoVGV4dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIG51bGwsIGZvcm1hdHRlZFJlbGF0aXZlVGltZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVsYXRpdmVUaW1lO1xuICAgICAgICB9KSk7XG4gICAgfVxufVxuRm9ybWF0dGVkUmVsYXRpdmVUaW1lLmRpc3BsYXlOYW1lID0gJ0Zvcm1hdHRlZFJlbGF0aXZlVGltZSc7XG5Gb3JtYXR0ZWRSZWxhdGl2ZVRpbWUuZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbHVlOiAwLFxuICAgIHVuaXQ6ICdzZWNvbmQnLFxufTtcbmV4cG9ydCBkZWZhdWx0IEZvcm1hdHRlZFJlbGF0aXZlVGltZTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28gSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLlxuICogU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHdpdGhJbnRsIGZyb20gJy4vaW5qZWN0SW50bCc7XG5jb25zdCBGb3JtYXR0ZWRQbHVyYWwgPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgb3RoZXIsIGNoaWxkcmVuLCBpbnRsOiB7IGZvcm1hdFBsdXJhbCwgdGV4dENvbXBvbmVudDogVGV4dCB9LCB9ID0gcHJvcHM7XG4gICAgY29uc3QgcGx1cmFsQ2F0ZWdvcnkgPSBmb3JtYXRQbHVyYWwodmFsdWUsIHByb3BzKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRQbHVyYWwgPSBwcm9wc1twbHVyYWxDYXRlZ29yeV0gfHwgb3RoZXI7XG4gICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4oZm9ybWF0dGVkUGx1cmFsKTtcbiAgICB9XG4gICAgaWYgKFRleHQpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgbnVsbCwgZm9ybWF0dGVkUGx1cmFsKTtcbiAgICB9XG4gICAgLy8gV29yayBhcm91bmQgQHR5cGVzL3JlYWN0IHdoZXJlIFJlYWN0LkZDIGNhbm5vdCByZXR1cm4gc3RyaW5nXG4gICAgcmV0dXJuIGZvcm1hdHRlZFBsdXJhbDtcbn07XG5Gb3JtYXR0ZWRQbHVyYWwuZGVmYXVsdFByb3BzID0ge1xuICAgIHR5cGU6ICdjYXJkaW5hbCcsXG59O1xuRm9ybWF0dGVkUGx1cmFsLmRpc3BsYXlOYW1lID0gJ0Zvcm1hdHRlZFBsdXJhbCc7XG5leHBvcnQgZGVmYXVsdCB3aXRoSW50bChGb3JtYXR0ZWRQbHVyYWwpO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuXG4gKiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSAnLi9pbmplY3RJbnRsJztcbmltcG9ydCB7IGZvcm1hdE1lc3NhZ2UgfSBmcm9tICcuLi9mb3JtYXR0ZXJzL21lc3NhZ2UnO1xuaW1wb3J0IHsgaW52YXJpYW50SW50bENvbnRleHQsIERFRkFVTFRfSU5UTF9DT05GSUcsIGNyZWF0ZUZvcm1hdHRlcnMsIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0ICogYXMgc2hhbGxvd0VxdWFsc18gZnJvbSAnc2hhbGxvdy1lcXVhbC9vYmplY3RzJztcbmNvbnN0IHNoYWxsb3dFcXVhbHMgPSBzaGFsbG93RXF1YWxzXy5kZWZhdWx0IHx8IHNoYWxsb3dFcXVhbHNfO1xuY29uc3QgZGVmYXVsdEZvcm1hdE1lc3NhZ2UgPSAoZGVzY3JpcHRvciwgdmFsdWVzKSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1JlYWN0IEludGxdIENvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGBpbnRsYCBvYmplY3QuIDxJbnRsUHJvdmlkZXI+IG5lZWRzIHRvIGV4aXN0IGluIHRoZSBjb21wb25lbnQgYW5jZXN0cnkuIFVzaW5nIGRlZmF1bHQgbWVzc2FnZSBhcyBmYWxsYmFjay4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0lOVExfQ09ORklHKSwgeyBsb2NhbGU6ICdlbicgfSksIGNyZWF0ZUZvcm1hdHRlcnMoKSwgZGVzY3JpcHRvciwgdmFsdWVzKTtcbn07XG5jbGFzcyBGb3JtYXR0ZWRNZXNzYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgICAgIGNvbnN0IF9hID0gdGhpcy5wcm9wcywgeyB2YWx1ZXMgfSA9IF9hLCBvdGhlclByb3BzID0gX19yZXN0KF9hLCBbXCJ2YWx1ZXNcIl0pO1xuICAgICAgICBjb25zdCB7IHZhbHVlczogbmV4dFZhbHVlcyB9ID0gbmV4dFByb3BzLCBuZXh0T3RoZXJQcm9wcyA9IF9fcmVzdChuZXh0UHJvcHMsIFtcInZhbHVlc1wiXSk7XG4gICAgICAgIHJldHVybiAoIXNoYWxsb3dFcXVhbHMobmV4dFZhbHVlcywgdmFsdWVzKSB8fFxuICAgICAgICAgICAgIXNoYWxsb3dFcXVhbHMob3RoZXJQcm9wcywgbmV4dE90aGVyUHJvcHMpKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGV4dC5Db25zdW1lciwgbnVsbCwgKGludGwpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5kZWZhdWx0TWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGludmFyaWFudEludGxDb250ZXh0KGludGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBmb3JtYXRNZXNzYWdlID0gZGVmYXVsdEZvcm1hdE1lc3NhZ2UsIHRleHRDb21wb25lbnQ6IFRleHQgPSBSZWFjdC5GcmFnbWVudCwgfSA9IGludGwgfHwge307XG4gICAgICAgICAgICBjb25zdCB7IGlkLCBkZXNjcmlwdGlvbiwgZGVmYXVsdE1lc3NhZ2UsIHZhbHVlcywgY2hpbGRyZW4sIHRhZ05hbWU6IENvbXBvbmVudCA9IFRleHQsIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHsgaWQsIGRlc2NyaXB0aW9uLCBkZWZhdWx0TWVzc2FnZSB9O1xuICAgICAgICAgICAgbGV0IG5vZGVzID0gZm9ybWF0TWVzc2FnZShkZXNjcmlwdG9yLCB2YWx1ZXMpO1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vZGVzKSkge1xuICAgICAgICAgICAgICAgIG5vZGVzID0gW25vZGVzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oLi4ubm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIC8vIE5lZWRzIHRvIHVzZSBgY3JlYXRlRWxlbWVudCgpYCBpbnN0ZWFkIG9mIEpTWCwgb3RoZXJ3aXNlIFJlYWN0IHdpbGxcbiAgICAgICAgICAgICAgICAvLyB3YXJuIGFib3V0IGEgbWlzc2luZyBga2V5YCBwcm9wIHdpdGggcmljaC10ZXh0IG1lc3NhZ2UgZm9ybWF0dGluZy5cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIG51bGwsIC4uLm5vZGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbkZvcm1hdHRlZE1lc3NhZ2UuZGlzcGxheU5hbWUgPSAnRm9ybWF0dGVkTWVzc2FnZSc7XG5Gb3JtYXR0ZWRNZXNzYWdlLmRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZXM6IHt9LFxufTtcbmV4cG9ydCBkZWZhdWx0IEZvcm1hdHRlZE1lc3NhZ2U7XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS5cbiAqIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGb3JtYXR0ZWRNZXNzYWdlIGZyb20gJy4vbWVzc2FnZSc7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSAnLi9pbmplY3RJbnRsJztcbmltcG9ydCB7IGludmFyaWFudEludGxDb250ZXh0IH0gZnJvbSAnLi4vdXRpbHMnO1xuY2xhc3MgRm9ybWF0dGVkSFRNTE1lc3NhZ2UgZXh0ZW5kcyBGb3JtYXR0ZWRNZXNzYWdlIHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LkNvbnN1bWVyLCBudWxsLCAoaW50bCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnByb3BzLmRlZmF1bHRNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgaW52YXJpYW50SW50bENvbnRleHQoaW50bCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGZvcm1hdEhUTUxNZXNzYWdlLCB0ZXh0Q29tcG9uZW50IH0gPSBpbnRsO1xuICAgICAgICAgICAgY29uc3QgeyBpZCwgZGVzY3JpcHRpb24sIGRlZmF1bHRNZXNzYWdlLCB2YWx1ZXM6IHJhd1ZhbHVlcywgY2hpbGRyZW4sIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICAgICAgbGV0IHsgdGFnTmFtZTogQ29tcG9uZW50IH0gPSB0aGlzLnByb3BzO1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBiYyBvZiBUUzMuMyBkb2Vzbid0IHJlY29nbml6ZSBgZGVmYXVsdFByb3BzYFxuICAgICAgICAgICAgaWYgKCFDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBDb21wb25lbnQgPSB0ZXh0Q29tcG9uZW50IHx8ICdzcGFuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB7IGlkLCBkZXNjcmlwdGlvbiwgZGVmYXVsdE1lc3NhZ2UgfTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZEhUTUxNZXNzYWdlID0gZm9ybWF0SFRNTE1lc3NhZ2UoZGVzY3JpcHRvciwgcmF3VmFsdWVzKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oZm9ybWF0dGVkSFRNTE1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2luY2UgdGhlIG1lc3NhZ2UgcHJlc3VtYWJseSBoYXMgSFRNTCBpbiBpdCwgd2UgbmVlZCB0byBzZXRcbiAgICAgICAgICAgIC8vIGBpbm5lckhUTUxgIGluIG9yZGVyIGZvciBpdCB0byBiZSByZW5kZXJlZCBhbmQgbm90IGVzY2FwZWQgYnkgUmVhY3QuXG4gICAgICAgICAgICAvLyBUbyBiZSBzYWZlLCBhbGwgc3RyaW5nIHByb3AgdmFsdWVzIHdlcmUgZXNjYXBlZCB3aGVuIGZvcm1hdHRpbmcgdGhlXG4gICAgICAgICAgICAvLyBtZXNzYWdlLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIG1lc3NhZ2UgaXMgbm90IFVHQywgYW5kIGNhbWUgZnJvbSB0aGVcbiAgICAgICAgICAgIC8vIGRldmVsb3BlciBtYWtpbmcgaXQgbW9yZSBsaWtlIGEgdGVtcGxhdGUuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gTm90ZTogVGhlcmUncyBhIHBlcmYgaW1wYWN0IG9mIHVzaW5nIHRoaXMgY29tcG9uZW50IHNpbmNlIHRoZXJlJ3Mgbm9cbiAgICAgICAgICAgIC8vIHdheSBmb3IgUmVhY3QgdG8gZG8gaXRzIHZpcnR1YWwgRE9NIGRpZmZpbmcuXG4gICAgICAgICAgICBjb25zdCBodG1sID0geyBfX2h0bWw6IGZvcm1hdHRlZEhUTUxNZXNzYWdlIH07XG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IGh0bWwgfSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5Gb3JtYXR0ZWRIVE1MTWVzc2FnZS5kaXNwbGF5TmFtZSA9ICdGb3JtYXR0ZWRIVE1MTWVzc2FnZSc7XG5Gb3JtYXR0ZWRIVE1MTWVzc2FnZS5kZWZhdWx0UHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIEZvcm1hdHRlZE1lc3NhZ2UuZGVmYXVsdFByb3BzKSwgeyB0YWdOYW1lOiAnc3BhbicgfSk7XG5leHBvcnQgZGVmYXVsdCBGb3JtYXR0ZWRIVE1MTWVzc2FnZTtcbiIsImV4cG9ydCBmdW5jdGlvbiBkZWZpbmVNZXNzYWdlcyhtc2dzKSB7XG4gICAgcmV0dXJuIG1zZ3M7XG59XG5pbXBvcnQgeyBjcmVhdGVGb3JtYXR0ZWRDb21wb25lbnQsIGNyZWF0ZUZvcm1hdHRlZERhdGVUaW1lUGFydHNDb21wb25lbnQsIH0gZnJvbSAnLi9jb21wb25lbnRzL2NyZWF0ZUZvcm1hdHRlZENvbXBvbmVudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGluamVjdEludGwsIFByb3ZpZGVyIGFzIFJhd0ludGxQcm92aWRlciwgQ29udGV4dCBhcyBJbnRsQ29udGV4dCwgfSBmcm9tICcuL2NvbXBvbmVudHMvaW5qZWN0SW50bCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUludGwgfSBmcm9tICcuL2NvbXBvbmVudHMvdXNlSW50bCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEludGxQcm92aWRlciwgY3JlYXRlSW50bCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm92aWRlcic7XG4vLyBJTVBPUlRBTlQ6IEV4cGxpY2l0IGhlcmUgdG8gcHJldmVudCBhcGktZXh0cmFjdG9yIGZyb20gb3V0cHV0aW5nIGBpbXBvcnQoJy4vdHlwZXMnKS5DdXN0b21Gb3JtYXRDb25maWdgXG5leHBvcnQgY29uc3QgRm9ybWF0dGVkRGF0ZSA9IGNyZWF0ZUZvcm1hdHRlZENvbXBvbmVudCgnZm9ybWF0RGF0ZScpO1xuZXhwb3J0IGNvbnN0IEZvcm1hdHRlZFRpbWUgPSBjcmVhdGVGb3JtYXR0ZWRDb21wb25lbnQoJ2Zvcm1hdFRpbWUnKTtcbmV4cG9ydCBjb25zdCBGb3JtYXR0ZWROdW1iZXIgPSBjcmVhdGVGb3JtYXR0ZWRDb21wb25lbnQoJ2Zvcm1hdE51bWJlcicpO1xuZXhwb3J0IGNvbnN0IEZvcm1hdHRlZExpc3QgPSBjcmVhdGVGb3JtYXR0ZWRDb21wb25lbnQoJ2Zvcm1hdExpc3QnKTtcbmV4cG9ydCBjb25zdCBGb3JtYXR0ZWREaXNwbGF5TmFtZSA9IGNyZWF0ZUZvcm1hdHRlZENvbXBvbmVudCgnZm9ybWF0RGlzcGxheU5hbWUnKTtcbmV4cG9ydCBjb25zdCBGb3JtYXR0ZWREYXRlUGFydHMgPSBjcmVhdGVGb3JtYXR0ZWREYXRlVGltZVBhcnRzQ29tcG9uZW50KCdmb3JtYXREYXRlJyk7XG5leHBvcnQgY29uc3QgRm9ybWF0dGVkVGltZVBhcnRzID0gY3JlYXRlRm9ybWF0dGVkRGF0ZVRpbWVQYXJ0c0NvbXBvbmVudCgnZm9ybWF0VGltZScpO1xuZXhwb3J0IHsgRm9ybWF0dGVkTnVtYmVyUGFydHMgfSBmcm9tICcuL2NvbXBvbmVudHMvY3JlYXRlRm9ybWF0dGVkQ29tcG9uZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRm9ybWF0dGVkUmVsYXRpdmVUaW1lIH0gZnJvbSAnLi9jb21wb25lbnRzL3JlbGF0aXZlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRm9ybWF0dGVkUGx1cmFsIH0gZnJvbSAnLi9jb21wb25lbnRzL3BsdXJhbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZvcm1hdHRlZE1lc3NhZ2UgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVzc2FnZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZvcm1hdHRlZEhUTUxNZXNzYWdlIH0gZnJvbSAnLi9jb21wb25lbnRzL2h0bWwtbWVzc2FnZSc7XG5leHBvcnQgeyBjcmVhdGVJbnRsQ2FjaGUgfSBmcm9tICcuL3V0aWxzJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7060\n")},6604:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('var _interopRequireDefault=__webpack_require__(5318);exports.__esModule=true;exports.default=void 0;var _react=_interopRequireDefault(__webpack_require__(7294));var _browserLang=_interopRequireDefault(__webpack_require__(9771));var _gatsby=__webpack_require__(5444);var _reactIntl=__webpack_require__(7060);var _intlContext=__webpack_require__(8368);var preferDefault=function preferDefault(m){return m&&m.default||m;};var polyfillIntl=function polyfillIntl(language){var locale=language.split("-")[0];try{if(!Intl.PluralRules){__webpack_require__(3228);__webpack_require__(7625)("./"+locale);}if(!Intl.RelativeTimeFormat){__webpack_require__(5316);__webpack_require__(1666)("./"+locale);}}catch(e){throw new Error("Cannot find react-intl/locale-data/"+language);}};var withIntlProvider=function withIntlProvider(intl){return function(children){polyfillIntl(intl.language);return _react.default.createElement(_reactIntl.IntlProvider,{locale:intl.language,defaultLocale:intl.defaultLanguage,messages:intl.messages},_react.default.createElement(_intlContext.IntlContextProvider,{value:intl},children));};};var _default=function _default(_ref,pluginOptions){var element=_ref.element,props=_ref.props;if(!props){return;}var pageContext=props.pageContext,location=props.location;var defaultLanguage=pluginOptions.defaultLanguage;var intl=pageContext.intl;var language=intl.language,languages=intl.languages,redirect=intl.redirect,routed=intl.routed,originalPath=intl.originalPath;if(typeof window!=="undefined"){window.___gatsbyIntl=intl;}/* eslint-disable no-undef */var isRedirect=redirect&&!routed;if(isRedirect){var search=location.search;// Skip build, Browsers only\nif(typeof window!=="undefined"){var detected=window.localStorage.getItem("gatsby-intl-language")||(0,_browserLang.default)({languages:languages,fallback:language});if(!languages.includes(detected)){detected=language;}var queryParams=search||"";var newUrl=(0,_gatsby.withPrefix)("/"+detected+originalPath+queryParams);window.localStorage.setItem("gatsby-intl-language",detected);window.location.replace(newUrl);}}var renderElement=isRedirect?null&&0:element;return withIntlProvider(intl)(renderElement);};exports.default=_default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvd3JhcC1wYWdlLmpzPzhhMGQiXSwibmFtZXMiOlsiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJleHBvcnRzIiwiX3JlYWN0IiwiX2Jyb3dzZXJMYW5nIiwiX2dhdHNieSIsIl9yZWFjdEludGwiLCJfaW50bENvbnRleHQiLCJwcmVmZXJEZWZhdWx0IiwibSIsImRlZmF1bHQiLCJwb2x5ZmlsbEludGwiLCJsYW5ndWFnZSIsImxvY2FsZSIsInNwbGl0IiwiSW50bCIsIlBsdXJhbFJ1bGVzIiwiUmVsYXRpdmVUaW1lRm9ybWF0IiwiZSIsIkVycm9yIiwid2l0aEludGxQcm92aWRlciIsImludGwiLCJjaGlsZHJlbiIsImNyZWF0ZUVsZW1lbnQiLCJJbnRsUHJvdmlkZXIiLCJkZWZhdWx0TG9jYWxlIiwiZGVmYXVsdExhbmd1YWdlIiwibWVzc2FnZXMiLCJJbnRsQ29udGV4dFByb3ZpZGVyIiwidmFsdWUiLCJfZGVmYXVsdCIsIl9yZWYiLCJwbHVnaW5PcHRpb25zIiwiZWxlbWVudCIsInByb3BzIiwicGFnZUNvbnRleHQiLCJsb2NhdGlvbiIsImxhbmd1YWdlcyIsInJlZGlyZWN0Iiwicm91dGVkIiwib3JpZ2luYWxQYXRoIiwid2luZG93IiwiX19fZ2F0c2J5SW50bCIsImlzUmVkaXJlY3QiLCJzZWFyY2giLCJkZXRlY3RlZCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJmYWxsYmFjayIsImluY2x1ZGVzIiwicXVlcnlQYXJhbXMiLCJuZXdVcmwiLCJ3aXRoUHJlZml4Iiwic2V0SXRlbSIsInJlcGxhY2UiLCJyZW5kZXJFbGVtZW50IiwiR0FUU0JZX0lOVExfUkVESVJFQ1RfQ09NUE9ORU5UX1BBVEgiXSwibWFwcGluZ3MiOiJBQUVBLEdBQUlBLHVCQUFzQixDQUFHQyxtQkFBTyxDQUFDLElBQUQsQ0FBcEMsQ0FFQUMsa0JBQUEs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bGUiOiI2NjA0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JlYWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX2Jyb3dzZXJMYW5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiYnJvd3Nlci1sYW5nXCIpKTtcblxudmFyIF9nYXRzYnkgPSByZXF1aXJlKFwiZ2F0c2J5XCIpO1xuXG52YXIgX3JlYWN0SW50bCA9IHJlcXVpcmUoXCJyZWFjdC1pbnRsXCIpO1xuXG52YXIgX2ludGxDb250ZXh0ID0gcmVxdWlyZShcIi4vaW50bC1jb250ZXh0XCIpO1xuXG52YXIgcHJlZmVyRGVmYXVsdCA9IGZ1bmN0aW9uIHByZWZlckRlZmF1bHQobSkge1xuICByZXR1cm4gbSAmJiBtLmRlZmF1bHQgfHwgbTtcbn07XG5cbnZhciBwb2x5ZmlsbEludGwgPSBmdW5jdGlvbiBwb2x5ZmlsbEludGwobGFuZ3VhZ2UpIHtcbiAgdmFyIGxvY2FsZSA9IGxhbmd1YWdlLnNwbGl0KFwiLVwiKVswXTtcblxuICB0cnkge1xuICAgIGlmICghSW50bC5QbHVyYWxSdWxlcykge1xuICAgICAgcmVxdWlyZShcIkBmb3JtYXRqcy9pbnRsLXBsdXJhbHJ1bGVzL3BvbHlmaWxsXCIpO1xuXG4gICAgICByZXF1aXJlKFwiQGZvcm1hdGpzL2ludGwtcGx1cmFscnVsZXMvZGlzdC9sb2NhbGUtZGF0YS9cIiArIGxvY2FsZSk7XG4gICAgfVxuXG4gICAgaWYgKCFJbnRsLlJlbGF0aXZlVGltZUZvcm1hdCkge1xuICAgICAgcmVxdWlyZShcIkBmb3JtYXRqcy9pbnRsLXJlbGF0aXZldGltZWZvcm1hdC9wb2x5ZmlsbFwiKTtcblxuICAgICAgcmVxdWlyZShcIkBmb3JtYXRqcy9pbnRsLXJlbGF0aXZldGltZWZvcm1hdC9kaXN0L2xvY2FsZS1kYXRhL1wiICsgbG9jYWxlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCByZWFjdC1pbnRsL2xvY2FsZS1kYXRhL1wiICsgbGFuZ3VhZ2UpO1xuICB9XG59O1xuXG52YXIgd2l0aEludGxQcm92aWRlciA9IGZ1bmN0aW9uIHdpdGhJbnRsUHJvdmlkZXIoaW50bCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgcG9seWZpbGxJbnRsKGludGwubGFuZ3VhZ2UpO1xuICAgIHJldHVybiBfcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9yZWFjdEludGwuSW50bFByb3ZpZGVyLCB7XG4gICAgICBsb2NhbGU6IGludGwubGFuZ3VhZ2UsXG4gICAgICBkZWZhdWx0TG9jYWxlOiBpbnRsLmRlZmF1bHRMYW5ndWFnZSxcbiAgICAgIG1lc3NhZ2VzOiBpbnRsLm1lc3NhZ2VzXG4gICAgfSwgX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfaW50bENvbnRleHQuSW50bENvbnRleHRQcm92aWRlciwge1xuICAgICAgdmFsdWU6IGludGxcbiAgICB9LCBjaGlsZHJlbikpO1xuICB9O1xufTtcblxudmFyIF9kZWZhdWx0ID0gZnVuY3Rpb24gX2RlZmF1bHQoX3JlZiwgcGx1Z2luT3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHByb3BzID0gX3JlZi5wcm9wcztcblxuICBpZiAoIXByb3BzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZ2VDb250ZXh0ID0gcHJvcHMucGFnZUNvbnRleHQsXG4gICAgICBsb2NhdGlvbiA9IHByb3BzLmxvY2F0aW9uO1xuICB2YXIgZGVmYXVsdExhbmd1YWdlID0gcGx1Z2luT3B0aW9ucy5kZWZhdWx0TGFuZ3VhZ2U7XG4gIHZhciBpbnRsID0gcGFnZUNvbnRleHQuaW50bDtcbiAgdmFyIGxhbmd1YWdlID0gaW50bC5sYW5ndWFnZSxcbiAgICAgIGxhbmd1YWdlcyA9IGludGwubGFuZ3VhZ2VzLFxuICAgICAgcmVkaXJlY3QgPSBpbnRsLnJlZGlyZWN0LFxuICAgICAgcm91dGVkID0gaW50bC5yb3V0ZWQsXG4gICAgICBvcmlnaW5hbFBhdGggPSBpbnRsLm9yaWdpbmFsUGF0aDtcblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHdpbmRvdy5fX19nYXRzYnlJbnRsID0gaW50bDtcbiAgfVxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuXG5cbiAgdmFyIGlzUmVkaXJlY3QgPSByZWRpcmVjdCAmJiAhcm91dGVkO1xuXG4gIGlmIChpc1JlZGlyZWN0KSB7XG4gICAgdmFyIHNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaDsgLy8gU2tpcCBidWlsZCwgQnJvd3NlcnMgb25seVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHZhciBkZXRlY3RlZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImdhdHNieS1pbnRsLWxhbmd1YWdlXCIpIHx8ICgwLCBfYnJvd3NlckxhbmcuZGVmYXVsdCkoe1xuICAgICAgICBsYW5ndWFnZXM6IGxhbmd1YWdlcyxcbiAgICAgICAgZmFsbGJhY2s6IGxhbmd1YWdlXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFsYW5ndWFnZXMuaW5jbHVkZXMoZGV0ZWN0ZWQpKSB7XG4gICAgICAgIGRldGVjdGVkID0gbGFuZ3VhZ2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBxdWVyeVBhcmFtcyA9IHNlYXJjaCB8fCBcIlwiO1xuICAgICAgdmFyIG5ld1VybCA9ICgwLCBfZ2F0c2J5LndpdGhQcmVmaXgpKFwiL1wiICsgZGV0ZWN0ZWQgKyBvcmlnaW5hbFBhdGggKyBxdWVyeVBhcmFtcyk7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJnYXRzYnktaW50bC1sYW5ndWFnZVwiLCBkZXRlY3RlZCk7XG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShuZXdVcmwpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByZW5kZXJFbGVtZW50ID0gaXNSZWRpcmVjdCA/IEdBVFNCWV9JTlRMX1JFRElSRUNUX0NPTVBPTkVOVF9QQVRIICYmIF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocHJlZmVyRGVmYXVsdChyZXF1aXJlKEdBVFNCWV9JTlRMX1JFRElSRUNUX0NPTVBPTkVOVF9QQVRIKSkpIDogZWxlbWVudDtcbiAgcmV0dXJuIHdpdGhJbnRsUHJvdmlkZXIoaW50bCkocmVuZGVyRWxlbWVudCk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6604\n')},9499:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "BaseContext": function() { return /* binding */ BaseContext; },\n "Link": function() { return /* binding */ Link; },\n "Location": function() { return /* binding */ Location; },\n "LocationProvider": function() { return /* binding */ LocationProvider; },\n "Match": function() { return /* binding */ Match; },\n "Redirect": function() { return /* binding */ Redirect; },\n "Router": function() { return /* binding */ Router; },\n "ServerLocation": function() { return /* binding */ ServerLocation; },\n "createHistory": function() { return /* reexport */ createHistory; },\n "createMemorySource": function() { return /* reexport */ createMemorySource; },\n "globalHistory": function() { return /* reexport */ globalHistory; },\n "isRedirect": function() { return /* binding */ isRedirect; },\n "matchPath": function() { return /* reexport */ match; },\n "navigate": function() { return /* reexport */ history_navigate; },\n "redirectTo": function() { return /* binding */ redirectTo; },\n "useLocation": function() { return /* binding */ useLocation; },\n "useMatch": function() { return /* binding */ useMatch; },\n "useNavigate": function() { return /* binding */ useNavigate; },\n "useParams": function() { return /* binding */ useParams; }\n});\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(7294);\n// EXTERNAL MODULE: ./node_modules/invariant/browser.js\nvar browser = __webpack_require__(1143);\nvar browser_default = /*#__PURE__*/__webpack_require__.n(browser);\n// EXTERNAL MODULE: ./.cache/react-lifecycles-compat.js\nvar react_lifecycles_compat = __webpack_require__(3639);\n;// CONCATENATED MODULE: ./node_modules/@gatsbyjs/reach-router/es/lib/utils.js\n ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don\'t have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split("?"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === "";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || "*";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join("/");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? false ? 0 : browser_default()(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don\'t match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: "/" + uriSegments.slice(0, index).join("/")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be "in a directory"\n// you can be "at a file", too. For example\n//\n// browserSpecResolve(\'foo\', \'/bar/\') => /bar/foo\n// browserSpecResolve(\'foo\', \'/bar\') => /foo\n//\n// But on the command line of a file system, it\'s not as complicated, you can\'t\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// <Link to="deeper"/>\n// // instead of\n// <Link to=`{${props.uri}/deeper}`/>\n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, "/")) {\n return to;\n }\n\n var _to$split = to.split("?"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split("?"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === "") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], ".")) {\n var pathname = baseSegments.concat(toSegments).join("/");\n return addQuery((basePathname === "/" ? "" : "/") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === "..") segments.pop();else if (segment !== ".") segments.push(segment);\n }\n\n return addQuery("/" + segments.join("/"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split("?"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? "" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = "/" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join("/");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? "" : _params$location$sear;\n var searchSplit = search.split("?")[1] || "";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join("/");\n var toString = segmentize(to).filter(filter).sort().join("/");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === "";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === "*";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, "").split("/");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? "?" + query.join("&") : "");\n};\n\nvar reservedNames = ["uri", "path"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\n\n;// CONCATENATED MODULE: ./node_modules/@gatsbyjs/reach-router/es/lib/history.js\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || "initial"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: "POP"\n });\n };\n\n source.addEventListener("popstate", popstateListener);\n return function () {\n source.removeEventListener("popstate", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === "number") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + ""\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? "replace" : "assign"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: "PUSH"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "/";\n var searchIndex = initialPath.indexOf("?");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : ""\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split("?"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? "" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? "?" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split("?"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? "" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar history_navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\n\n;// CONCATENATED MODULE: ./node_modules/@gatsbyjs/reach-router/es/index.js\nvar es_extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n\n return call && (typeof call === "object" || typeof call === "function") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n/* eslint-disable jsx-a11y/anchor-has-content */\n\n\n\n\n\n\n ////////////////////////////////////////////////////////////////////////////////\n\nvar createNamedContext = function createNamedContext(name, defaultValue) {\n var Ctx = (0,react.createContext)(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Location Context/Provider\n\n\nvar LocationContext = createNamedContext("Location"); // sets up a listener if there isn\'t one already so apps don\'t need to be\n// wrapped in some top level provider\n\nvar Location = function Location(_ref) {\n var children = _ref.children;\n return react.createElement(LocationContext.Consumer, null, function (context) {\n return context ? children(context) : react.createElement(LocationProvider, null, children);\n });\n};\n\nvar LocationProvider = function (_React$Component) {\n _inherits(LocationProvider, _React$Component);\n\n function LocationProvider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, LocationProvider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n context: _this.getContext(),\n refs: {\n unlisten: null\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n LocationProvider.prototype.getContext = function getContext() {\n var _props$history = this.props.history,\n navigate = _props$history.navigate,\n location = _props$history.location;\n return {\n navigate: navigate,\n location: location\n };\n };\n\n LocationProvider.prototype.componentDidCatch = function componentDidCatch(error, info) {\n if (isRedirect(error)) {\n var _navigate = this.props.history.navigate;\n\n _navigate(error.uri, {\n replace: true\n });\n } else {\n throw error;\n }\n };\n\n LocationProvider.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevState.context.location !== this.state.context.location) {\n this.props.history._onTransitionComplete();\n }\n };\n\n LocationProvider.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n var refs = this.state.refs,\n history = this.props.history;\n\n history._onTransitionComplete();\n\n refs.unlisten = history.listen(function () {\n Promise.resolve().then(function () {\n // TODO: replace rAF with react deferred update API when it\'s ready https://github.com/facebook/react/issues/13306\n requestAnimationFrame(function () {\n if (!_this2.unmounted) {\n _this2.setState(function () {\n return {\n context: _this2.getContext()\n };\n });\n }\n });\n });\n });\n };\n\n LocationProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n var refs = this.state.refs;\n this.unmounted = true;\n refs.unlisten();\n };\n\n LocationProvider.prototype.render = function render() {\n var context = this.state.context,\n children = this.props.children;\n return react.createElement(LocationContext.Provider, {\n value: context\n }, typeof children === "function" ? children(context) : children || null);\n };\n\n return LocationProvider;\n}(react.Component); ////////////////////////////////////////////////////////////////////////////////\n\n\nLocationProvider.defaultProps = {\n history: globalHistory\n};\n false ? 0 : void 0;\n\nvar ServerLocation = function ServerLocation(_ref2) {\n var url = _ref2.url,\n children = _ref2.children;\n var searchIndex = url.indexOf("?");\n var searchExists = searchIndex > -1;\n var pathname = void 0;\n var search = "";\n var hash = "";\n\n if (searchExists) {\n pathname = url.substring(0, searchIndex);\n search = url.substring(searchIndex);\n } else {\n pathname = url;\n }\n\n return react.createElement(LocationContext.Provider, {\n value: {\n location: {\n pathname: pathname,\n search: search,\n hash: hash\n },\n navigate: function navigate() {\n throw new Error("You can\'t call navigate on the server.");\n }\n }\n }, children);\n}; ////////////////////////////////////////////////////////////////////////////////\n// Sets baseuri and basepath for nested routers and links\n\n\nvar BaseContext = createNamedContext("Base", {\n baseuri: "/",\n basepath: "/",\n navigate: globalHistory.navigate\n}); ////////////////////////////////////////////////////////////////////////////////\n// The main event, welcome to the show everybody.\n\nvar Router = function Router(props) {\n return react.createElement(BaseContext.Consumer, null, function (baseContext) {\n return react.createElement(Location, null, function (locationContext) {\n return react.createElement(RouterImpl, es_extends({}, baseContext, locationContext, props));\n });\n });\n};\n\nvar RouterImpl = function (_React$PureComponent) {\n _inherits(RouterImpl, _React$PureComponent);\n\n function RouterImpl() {\n _classCallCheck(this, RouterImpl);\n\n return _possibleConstructorReturn(this, _React$PureComponent.apply(this, arguments));\n }\n\n RouterImpl.prototype.render = function render() {\n var _props = this.props,\n location = _props.location,\n _navigate2 = _props.navigate,\n basepath = _props.basepath,\n primary = _props.primary,\n children = _props.children,\n baseuri = _props.baseuri,\n _props$component = _props.component,\n component = _props$component === undefined ? "div" : _props$component,\n domProps = _objectWithoutProperties(_props, ["location", "navigate", "basepath", "primary", "children", "baseuri", "component"]);\n\n var routes = react.Children.toArray(children).reduce(function (array, child) {\n var routes = createRoute(basepath)(child);\n return array.concat(routes);\n }, []);\n var pathname = location.pathname;\n var match = pick(routes, pathname);\n\n if (match) {\n var params = match.params,\n uri = match.uri,\n route = match.route,\n element = match.route.value; // remove the /* from the end for child routes relative paths\n\n basepath = route.default ? basepath : route.path.replace(/\\*$/, "");\n\n var props = es_extends({}, params, {\n uri: uri,\n location: location,\n navigate: function navigate(to, options) {\n return _navigate2(resolve(to, uri), options);\n }\n });\n\n var clone = react.cloneElement(element, props, element.props.children ? react.createElement(Router, {\n location: location,\n primary: primary\n }, element.props.children) : undefined); // using \'div\' for < 16.3 support\n\n var FocusWrapper = primary ? FocusHandler : component; // don\'t pass any props to \'div\'\n\n var wrapperProps = primary ? es_extends({\n uri: uri,\n location: location,\n component: component\n }, domProps) : domProps;\n return react.createElement(BaseContext.Provider, {\n value: {\n baseuri: uri,\n basepath: basepath,\n navigate: props.navigate\n }\n }, react.createElement(FocusWrapper, wrapperProps, clone));\n } else {\n // Not sure if we want this, would require index routes at every level\n // warning(\n // false,\n // `<Router basepath="${basepath}">\\n\\nNothing matched:\\n\\t${\n // location.pathname\n // }\\n\\nPaths checked: \\n\\t${routes\n // .map(route => route.path)\n // .join(\n // "\\n\\t"\n // )}\\n\\nTo get rid of this warning, add a default NotFound component as child of Router:\n // \\n\\tlet NotFound = () => <div>Not Found!</div>\n // \\n\\t<Router>\\n\\t <NotFound default/>\\n\\t {/* ... */}\\n\\t</Router>`\n // );\n return null;\n }\n };\n\n return RouterImpl;\n}(react.PureComponent);\n\nRouterImpl.defaultProps = {\n primary: true\n};\nvar FocusContext = createNamedContext("Focus");\n\nvar FocusHandler = function FocusHandler(_ref3) {\n var uri = _ref3.uri,\n location = _ref3.location,\n component = _ref3.component,\n domProps = _objectWithoutProperties(_ref3, ["uri", "location", "component"]);\n\n return react.createElement(FocusContext.Consumer, null, function (requestFocus) {\n return react.createElement(FocusHandlerImpl, es_extends({}, domProps, {\n component: component,\n requestFocus: requestFocus,\n uri: uri,\n location: location\n }));\n });\n}; // don\'t focus on initial render\n\n\nvar initialRender = true;\nvar focusHandlerCount = 0;\n\nvar FocusHandlerImpl = function (_React$Component2) {\n _inherits(FocusHandlerImpl, _React$Component2);\n\n function FocusHandlerImpl() {\n var _temp2, _this4, _ret2;\n\n _classCallCheck(this, FocusHandlerImpl);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this4 = _possibleConstructorReturn(this, _React$Component2.call.apply(_React$Component2, [this].concat(args))), _this4), _this4.state = {}, _this4.requestFocus = function (node) {\n if (!_this4.state.shouldFocus && node) {\n node.focus();\n }\n }, _temp2), _possibleConstructorReturn(_this4, _ret2);\n }\n\n FocusHandlerImpl.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var initial = prevState.uri == null;\n\n if (initial) {\n return es_extends({\n shouldFocus: true\n }, nextProps);\n } else {\n var myURIChanged = nextProps.uri !== prevState.uri;\n var navigatedUpToMe = prevState.location.pathname !== nextProps.location.pathname && nextProps.location.pathname === nextProps.uri;\n return es_extends({\n shouldFocus: myURIChanged || navigatedUpToMe\n }, nextProps);\n }\n };\n\n FocusHandlerImpl.prototype.componentDidMount = function componentDidMount() {\n focusHandlerCount++;\n this.focus();\n };\n\n FocusHandlerImpl.prototype.componentWillUnmount = function componentWillUnmount() {\n focusHandlerCount--;\n\n if (focusHandlerCount === 0) {\n initialRender = true;\n }\n };\n\n FocusHandlerImpl.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevProps.location !== this.props.location && this.state.shouldFocus) {\n this.focus();\n }\n };\n\n FocusHandlerImpl.prototype.focus = function focus() {\n if (false) {}\n\n var requestFocus = this.props.requestFocus;\n\n if (requestFocus) {\n requestFocus(this.node);\n } else {\n if (initialRender) {\n initialRender = false;\n } else if (this.node) {\n // React polyfills [autofocus] and it fires earlier than cDM,\n // so we were stealing focus away, this line prevents that.\n if (!this.node.contains(document.activeElement)) {\n this.node.focus();\n }\n }\n }\n };\n\n FocusHandlerImpl.prototype.render = function render() {\n var _this5 = this;\n\n var _props2 = this.props,\n children = _props2.children,\n style = _props2.style,\n requestFocus = _props2.requestFocus,\n _props2$component = _props2.component,\n Comp = _props2$component === undefined ? "div" : _props2$component,\n uri = _props2.uri,\n location = _props2.location,\n domProps = _objectWithoutProperties(_props2, ["children", "style", "requestFocus", "component", "uri", "location"]);\n\n return react.createElement(Comp, es_extends({\n style: es_extends({\n outline: "none"\n }, style),\n tabIndex: "-1",\n ref: function ref(n) {\n return _this5.node = n;\n }\n }, domProps), react.createElement(FocusContext.Provider, {\n value: this.requestFocus\n }, this.props.children));\n };\n\n return FocusHandlerImpl;\n}(react.Component);\n\n(0,react_lifecycles_compat/* polyfill */.O)(FocusHandlerImpl);\n\nvar k = function k() {}; ////////////////////////////////////////////////////////////////////////////////\n\n\nvar forwardRef = react.forwardRef;\n\nif (typeof forwardRef === "undefined") {\n forwardRef = function forwardRef(C) {\n return C;\n };\n}\n\nvar Link = forwardRef(function (_ref4, ref) {\n var innerRef = _ref4.innerRef,\n props = _objectWithoutProperties(_ref4, ["innerRef"]);\n\n return react.createElement(BaseContext.Consumer, null, function (_ref5) {\n var basepath = _ref5.basepath,\n baseuri = _ref5.baseuri;\n return react.createElement(Location, null, function (_ref6) {\n var location = _ref6.location,\n navigate = _ref6.navigate;\n\n var to = props.to,\n state = props.state,\n replace = props.replace,\n _props$getProps = props.getProps,\n getProps = _props$getProps === undefined ? k : _props$getProps,\n anchorProps = _objectWithoutProperties(props, ["to", "state", "replace", "getProps"]);\n\n var href = resolve(to, baseuri);\n var encodedHref = encodeURI(href);\n var isCurrent = location.pathname === encodedHref;\n var isPartiallyCurrent = startsWith(location.pathname, encodedHref);\n return react.createElement("a", es_extends({\n ref: ref || innerRef,\n "aria-current": isCurrent ? "page" : undefined\n }, anchorProps, getProps({\n isCurrent: isCurrent,\n isPartiallyCurrent: isPartiallyCurrent,\n href: href,\n location: location\n }), {\n href: href,\n onClick: function onClick(event) {\n if (anchorProps.onClick) anchorProps.onClick(event);\n\n if (shouldNavigate(event)) {\n event.preventDefault();\n var shouldReplace = replace;\n\n if (typeof replace !== "boolean" && isCurrent) {\n var _location$state = es_extends({}, location.state),\n key = _location$state.key,\n restState = _objectWithoutProperties(_location$state, ["key"]);\n\n shouldReplace = shallowCompare(es_extends({}, state), restState);\n }\n\n navigate(href, {\n state: state,\n replace: shouldReplace\n });\n }\n }\n }));\n });\n });\n});\nLink.displayName = "Link";\n false ? 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nfunction RedirectRequest(uri) {\n this.uri = uri;\n}\n\nvar isRedirect = function isRedirect(o) {\n return o instanceof RedirectRequest;\n};\n\nvar redirectTo = function redirectTo(to) {\n throw new RedirectRequest(to);\n};\n\nvar RedirectImpl = function (_React$Component3) {\n _inherits(RedirectImpl, _React$Component3);\n\n function RedirectImpl() {\n _classCallCheck(this, RedirectImpl);\n\n return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n } // Support React < 16 with this hook\n\n\n RedirectImpl.prototype.componentDidMount = function componentDidMount() {\n var _props3 = this.props,\n navigate = _props3.navigate,\n to = _props3.to,\n from = _props3.from,\n _props3$replace = _props3.replace,\n replace = _props3$replace === undefined ? true : _props3$replace,\n state = _props3.state,\n noThrow = _props3.noThrow,\n baseuri = _props3.baseuri,\n props = _objectWithoutProperties(_props3, ["navigate", "to", "from", "replace", "state", "noThrow", "baseuri"]);\n\n Promise.resolve().then(function () {\n var resolvedTo = resolve(to, baseuri);\n navigate(insertParams(resolvedTo, props), {\n replace: replace,\n state: state\n });\n });\n };\n\n RedirectImpl.prototype.render = function render() {\n var _props4 = this.props,\n navigate = _props4.navigate,\n to = _props4.to,\n from = _props4.from,\n replace = _props4.replace,\n state = _props4.state,\n noThrow = _props4.noThrow,\n baseuri = _props4.baseuri,\n props = _objectWithoutProperties(_props4, ["navigate", "to", "from", "replace", "state", "noThrow", "baseuri"]);\n\n var resolvedTo = resolve(to, baseuri);\n if (!noThrow) redirectTo(insertParams(resolvedTo, props));\n return null;\n };\n\n return RedirectImpl;\n}(react.Component);\n\nvar Redirect = function Redirect(props) {\n return react.createElement(BaseContext.Consumer, null, function (_ref7) {\n var baseuri = _ref7.baseuri;\n return react.createElement(Location, null, function (locationContext) {\n return react.createElement(RedirectImpl, es_extends({}, locationContext, {\n baseuri: baseuri\n }, props));\n });\n });\n};\n\n false ? 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar Match = function Match(_ref8) {\n var path = _ref8.path,\n children = _ref8.children;\n return react.createElement(BaseContext.Consumer, null, function (_ref9) {\n var baseuri = _ref9.baseuri;\n return react.createElement(Location, null, function (_ref10) {\n var navigate = _ref10.navigate,\n location = _ref10.location;\n var resolvedPath = resolve(path, baseuri);\n var result = match(resolvedPath, location.pathname);\n return children({\n navigate: navigate,\n location: location,\n match: result ? es_extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null\n });\n });\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n// Hooks\n\n\nvar useLocation = function useLocation() {\n var context = (0,react.useContext)(LocationContext);\n\n if (!context) {\n throw new Error("useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n return context.location;\n};\n\nvar useNavigate = function useNavigate() {\n var context = (0,react.useContext)(BaseContext);\n\n if (!context) {\n throw new Error("useNavigate hook was used but a BaseContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n return context.navigate;\n};\n\nvar useParams = function useParams() {\n var context = (0,react.useContext)(BaseContext);\n\n if (!context) {\n throw new Error("useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n var location = useLocation();\n var results = match(context.basepath, location.pathname);\n return results ? results.params : null;\n};\n\nvar useMatch = function useMatch(path) {\n if (!path) {\n throw new Error("useMatch(path: string) requires an argument of a string to match against");\n }\n\n var context = (0,react.useContext)(BaseContext);\n\n if (!context) {\n throw new Error("useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n var location = useLocation();\n var resolvedPath = resolve(path, context.baseuri);\n var result = match(resolvedPath, location.pathname);\n return result ? es_extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar stripSlashes = function stripSlashes(str) {\n return str.replace(/(^\\/+|\\/+$)/g, "");\n};\n\nvar createRoute = function createRoute(basepath) {\n return function (element) {\n if (!element) {\n return null;\n }\n\n if (element.type === react.Fragment && element.props.children) {\n return react.Children.map(element.props.children, createRoute(basepath));\n }\n\n !(element.props.path || element.props.default || element.type === Redirect) ? false ? 0 : browser_default()(false) : void 0;\n !!(element.type === Redirect && (!element.props.from || !element.props.to)) ? false ? 0 : browser_default()(false) : void 0;\n !!(element.type === Redirect && !validateRedirect(element.props.from, element.props.to)) ? false ? 0 : browser_default()(false) : void 0;\n\n if (element.props.default) {\n return {\n value: element,\n default: true\n };\n }\n\n var elementPath = element.type === Redirect ? element.props.from : element.props.path;\n var path = elementPath === "/" ? basepath : stripSlashes(basepath) + "/" + stripSlashes(elementPath);\n return {\n value: element,\n default: element.props.default,\n path: element.props.children ? stripSlashes(path) + "/*" : path\n };\n };\n};\n\nvar shouldNavigate = function shouldNavigate(event) {\n return !event.defaultPrevented && event.button === 0 && !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}; ////////////////////////////////////////////////////////////////////////\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2VzL2xpYi91dGlscy5qcz8zNDNiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BnYXRzYnlqcy9yZWFjaC1yb3V0ZXIvZXMvbGliL2hpc3RvcnkuanM/YmEyNCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2VzL2luZGV4LmpzPzc0MWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFrQztBQUNsQzs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxhQUFhO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE1BQXFDLEdBQUcsQ0FBd0osR0FBRyxpQkFBUztBQUMxTztBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVB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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsY0FBYztBQUN2QyxhQUFhLGtCQUFrQjtBQUMvQjs7QUFFQSxrRkFBa0YsTUFBcUMsR0FBRyxDQUFnSyxHQUFHLGlCQUFTO0FBQ3RTLGtGQUFrRixNQUFxQyxHQUFHLENBQW1LLEdBQUcsaUJBQVM7QUFDelMscUNBQXFDLGdCQUFnQiwwQ0FBMEMsTUFBcUMsR0FBRyxDQUEwTCxHQUFHLGlCQUFTOztBQUU3VTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFIiwiZmlsZSI6Ijk0OTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW52YXJpYW50IGZyb20gXCJpbnZhcmlhbnRcIjsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0YXJ0c1dpdGgoc3RyaW5nLCBzZWFyY2gpIC0gQ2hlY2sgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHNlYXJjaGBcblxudmFyIHN0YXJ0c1dpdGggPSBmdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZywgc2VhcmNoKSB7XG4gIHJldHVybiBzdHJpbmcuc3Vic3RyKDAsIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gcGljayhyb3V0ZXMsIHVyaSlcbi8vXG4vLyBSYW5rcyBhbmQgcGlja3MgdGhlIGJlc3Qgcm91dGUgdG8gbWF0Y2guIEVhY2ggc2VnbWVudCBnZXRzIHRoZSBoaWdoZXN0XG4vLyBhbW91bnQgb2YgcG9pbnRzLCB0aGVuIHRoZSB0eXBlIG9mIHNlZ21lbnQgZ2V0cyBhbiBhZGRpdGlvbmFsIGFtb3VudCBvZlxuLy8gcG9pbnRzIHdoZXJlXG4vL1xuLy8gICAgIHN0YXRpYyA+IGR5bmFtaWMgPiBzcGxhdCA+IHJvb3Rcbi8vXG4vLyBUaGlzIHdheSB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBvcmRlciBvZiBvdXIgcm91dGVzLCBsZXQgdGhlXG4vLyBjb21wdXRlcnMgZG8gaXQuXG4vL1xuLy8gQSByb3V0ZSBsb29rcyBsaWtlIHRoaXNcbi8vXG4vLyAgICAgeyBwYXRoLCBkZWZhdWx0LCB2YWx1ZSB9XG4vL1xuLy8gQW5kIGEgcmV0dXJuZWQgbWF0Y2ggbG9va3MgbGlrZTpcbi8vXG4vLyAgICAgeyByb3V0ZSwgcGFyYW1zLCB1cmkgfVxuLy9cbi8vIEkga25vdywgSSBzaG91bGQgdXNlIFR5cGVTY3JpcHQgbm90IGNvbW1lbnRzIGZvciB0aGVzZSB0eXBlcy5cblxuXG52YXIgcGljayA9IGZ1bmN0aW9uIHBpY2socm91dGVzLCB1cmkpIHtcbiAgdmFyIG1hdGNoID0gdm9pZCAwO1xuICB2YXIgZGVmYXVsdF8gPSB2b2lkIDA7XG5cbiAgdmFyIF91cmkkc3BsaXQgPSB1cmkuc3BsaXQoXCI/XCIpLFxuICAgICAgdXJpUGF0aG5hbWUgPSBfdXJpJHNwbGl0WzBdO1xuXG4gIHZhciB1cmlTZWdtZW50cyA9IHNlZ21lbnRpemUodXJpUGF0aG5hbWUpO1xuICB2YXIgaXNSb290VXJpID0gdXJpU2VnbWVudHNbMF0gPT09IFwiXCI7XG4gIHZhciByYW5rZWQgPSByYW5rUm91dGVzKHJvdXRlcyk7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSByYW5rZWQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIG1pc3NlZCA9IGZhbHNlO1xuICAgIHZhciByb3V0ZSA9IHJhbmtlZFtpXS5yb3V0ZTtcblxuICAgIGlmIChyb3V0ZS5kZWZhdWx0KSB7XG4gICAgICBkZWZhdWx0XyA9IHtcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICB1cmk6IHVyaVxuICAgICAgfTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciByb3V0ZVNlZ21lbnRzID0gc2VnbWVudGl6ZShyb3V0ZS5wYXRoKTtcbiAgICB2YXIgcGFyYW1zID0ge307XG4gICAgdmFyIG1heCA9IE1hdGgubWF4KHVyaVNlZ21lbnRzLmxlbmd0aCwgcm91dGVTZWdtZW50cy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG5cbiAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgIHZhciByb3V0ZVNlZ21lbnQgPSByb3V0ZVNlZ21lbnRzW2luZGV4XTtcbiAgICAgIHZhciB1cmlTZWdtZW50ID0gdXJpU2VnbWVudHNbaW5kZXhdO1xuXG4gICAgICBpZiAoaXNTcGxhdChyb3V0ZVNlZ21lbnQpKSB7XG4gICAgICAgIC8vIEhpdCBhIHNwbGF0LCBqdXN0IGdyYWIgdGhlIHJlc3QsIGFuZCByZXR1cm4gYSBtYXRjaFxuICAgICAgICAvLyB1cmk6ICAgL2ZpbGVzL2RvY3VtZW50cy93b3JrXG4gICAgICAgIC8vIHJvdXRlOiAvZmlsZXMvKlxuICAgICAgICB2YXIgcGFyYW0gPSByb3V0ZVNlZ21lbnQuc2xpY2UoMSkgfHwgXCIqXCI7XG4gICAgICAgIHBhcmFtc1twYXJhbV0gPSB1cmlTZWdtZW50cy5zbGljZShpbmRleCkubWFwKGRlY29kZVVSSUNvbXBvbmVudCkuam9pbihcIi9cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAodXJpU2VnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFVSSSBpcyBzaG9ydGVyIHRoYW4gdGhlIHJvdXRlLCBubyBtYXRjaFxuICAgICAgICAvLyB1cmk6ICAgL3VzZXJzXG4gICAgICAgIC8vIHJvdXRlOiAvdXNlcnMvOnVzZXJJZFxuICAgICAgICBtaXNzZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIGR5bmFtaWNNYXRjaCA9IHBhcmFtUmUuZXhlYyhyb3V0ZVNlZ21lbnQpO1xuXG4gICAgICBpZiAoZHluYW1pY01hdGNoICYmICFpc1Jvb3RVcmkpIHtcbiAgICAgICAgdmFyIG1hdGNoSXNOb3RSZXNlcnZlZCA9IHJlc2VydmVkTmFtZXMuaW5kZXhPZihkeW5hbWljTWF0Y2hbMV0pID09PSAtMTtcbiAgICAgICAgIW1hdGNoSXNOb3RSZXNlcnZlZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCI8Um91dGVyPiBkeW5hbWljIHNlZ21lbnQgXFxcIlwiICsgZHluYW1pY01hdGNoWzFdICsgXCJcXFwiIGlzIGEgcmVzZXJ2ZWQgbmFtZS4gUGxlYXNlIHVzZSBhIGRpZmZlcmVudCBuYW1lIGluIHBhdGggXFxcIlwiICsgcm91dGUucGF0aCArIFwiXFxcIi5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICAgICB2YXIgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQodXJpU2VnbWVudCk7XG4gICAgICAgIHBhcmFtc1tkeW5hbWljTWF0Y2hbMV1dID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHJvdXRlU2VnbWVudCAhPT0gdXJpU2VnbWVudCkge1xuICAgICAgICAvLyBDdXJyZW50IHNlZ21lbnRzIGRvbid0IG1hdGNoLCBub3QgZHluYW1pYywgbm90IHNwbGF0LCBzbyBubyBtYXRjaFxuICAgICAgICAvLyB1cmk6ICAgL3VzZXJzLzEyMy9zZXR0aW5nc1xuICAgICAgICAvLyByb3V0ZTogL3VzZXJzLzppZC9wcm9maWxlXG4gICAgICAgIG1pc3NlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbWlzc2VkKSB7XG4gICAgICBtYXRjaCA9IHtcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgdXJpOiBcIi9cIiArIHVyaVNlZ21lbnRzLnNsaWNlKDAsIGluZGV4KS5qb2luKFwiL1wiKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaCB8fCBkZWZhdWx0XyB8fCBudWxsO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1hdGNoKHBhdGgsIHVyaSkgLSBNYXRjaGVzIGp1c3Qgb25lIHBhdGggdG8gYSB1cmksIGFsc28gbG9sXG5cblxudmFyIG1hdGNoID0gZnVuY3Rpb24gbWF0Y2gocGF0aCwgdXJpKSB7XG4gIHJldHVybiBwaWNrKFt7XG4gICAgcGF0aDogcGF0aFxuICB9XSwgdXJpKTtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyByZXNvbHZlKHRvLCBiYXNlcGF0aClcbi8vXG4vLyBSZXNvbHZlcyBVUklzIGFzIHRob3VnaCBldmVyeSBwYXRoIGlzIGEgZGlyZWN0b3J5LCBubyBmaWxlcy4gIFJlbGF0aXZlIFVSSXNcbi8vIGluIHRoZSBicm93c2VyIGNhbiBmZWVsIGF3a3dhcmQgYmVjYXVzZSBub3Qgb25seSBjYW4geW91IGJlIFwiaW4gYSBkaXJlY3RvcnlcIlxuLy8geW91IGNhbiBiZSBcImF0IGEgZmlsZVwiLCB0b28uIEZvciBleGFtcGxlXG4vL1xuLy8gICAgIGJyb3dzZXJTcGVjUmVzb2x2ZSgnZm9vJywgJy9iYXIvJykgPT4gL2Jhci9mb29cbi8vICAgICBicm93c2VyU3BlY1Jlc29sdmUoJ2ZvbycsICcvYmFyJykgPT4gL2Zvb1xuLy9cbi8vIEJ1dCBvbiB0aGUgY29tbWFuZCBsaW5lIG9mIGEgZmlsZSBzeXN0ZW0sIGl0J3Mgbm90IGFzIGNvbXBsaWNhdGVkLCB5b3UgY2FuJ3Rcbi8vIGBjZGAgZnJvbSBhIGZpbGUsIG9ubHkgZGlyZWN0b3JpZXMuICBUaGlzIHdheSwgbGlua3MgaGF2ZSB0byBrbm93IGxlc3MgYWJvdXRcbi8vIHRoZWlyIGN1cnJlbnQgcGF0aC4gVG8gZ28gZGVlcGVyIHlvdSBjYW4gZG8gdGhpczpcbi8vXG4vLyAgICAgPExpbmsgdG89XCJkZWVwZXJcIi8+XG4vLyAgICAgLy8gaW5zdGVhZCBvZlxuLy8gICAgIDxMaW5rIHRvPWB7JHtwcm9wcy51cml9L2RlZXBlcn1gLz5cbi8vXG4vLyBKdXN0IGxpa2UgYGNkYCwgaWYgeW91IHdhbnQgdG8gZ28gZGVlcGVyIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgeW91IGRvIHRoaXM6XG4vL1xuLy8gICAgIGNkIGRlZXBlclxuLy8gICAgICMgbm90XG4vLyAgICAgY2QgJChwd2QpL2RlZXBlclxuLy9cbi8vIEJ5IHRyZWF0aW5nIGV2ZXJ5IHBhdGggYXMgYSBkaXJlY3RvcnksIGxpbmtpbmcgdG8gcmVsYXRpdmUgcGF0aHMgc2hvdWxkXG4vLyByZXF1aXJlIGxlc3MgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBhbmQgKGZpbmdlcnMgY3Jvc3NlZCkgYmUgbW9yZSBpbnR1aXRpdmUuXG5cblxudmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHRvLCBiYXNlKSB7XG4gIC8vIC9mb28vYmFyLCAvYmF6L3F1eCA9PiAvZm9vL2JhclxuICBpZiAoc3RhcnRzV2l0aCh0bywgXCIvXCIpKSB7XG4gICAgcmV0dXJuIHRvO1xuICB9XG5cbiAgdmFyIF90byRzcGxpdCA9IHRvLnNwbGl0KFwiP1wiKSxcbiAgICAgIHRvUGF0aG5hbWUgPSBfdG8kc3BsaXRbMF0sXG4gICAgICB0b1F1ZXJ5ID0gX3RvJHNwbGl0WzFdO1xuXG4gIHZhciBfYmFzZSRzcGxpdCA9IGJhc2Uuc3BsaXQoXCI/XCIpLFxuICAgICAgYmFzZVBhdGhuYW1lID0gX2Jhc2Ukc3BsaXRbMF07XG5cbiAgdmFyIHRvU2VnbWVudHMgPSBzZWdtZW50aXplKHRvUGF0aG5hbWUpO1xuICB2YXIgYmFzZVNlZ21lbnRzID0gc2VnbWVudGl6ZShiYXNlUGF0aG5hbWUpOyAvLyA/YT1iLCAvdXNlcnM/Yj1jID0+IC91c2Vycz9hPWJcblxuICBpZiAodG9TZWdtZW50c1swXSA9PT0gXCJcIikge1xuICAgIHJldHVybiBhZGRRdWVyeShiYXNlUGF0aG5hbWUsIHRvUXVlcnkpO1xuICB9IC8vIHByb2ZpbGUsIC91c2Vycy83ODkgPT4gL3VzZXJzLzc4OS9wcm9maWxlXG5cblxuICBpZiAoIXN0YXJ0c1dpdGgodG9TZWdtZW50c1swXSwgXCIuXCIpKSB7XG4gICAgdmFyIHBhdGhuYW1lID0gYmFzZVNlZ21lbnRzLmNvbmNhdCh0b1NlZ21lbnRzKS5qb2luKFwiL1wiKTtcbiAgICByZXR1cm4gYWRkUXVlcnkoKGJhc2VQYXRobmFtZSA9PT0gXCIvXCIgPyBcIlwiIDogXCIvXCIpICsgcGF0aG5hbWUsIHRvUXVlcnkpO1xuICB9IC8vIC4vICAgICAgICAgL3VzZXJzLzEyMyAgPT4gIC91c2Vycy8xMjNcbiAgLy8gLi4vICAgICAgICAvdXNlcnMvMTIzICA9PiAgL3VzZXJzXG4gIC8vIC4uLy4uICAgICAgL3VzZXJzLzEyMyAgPT4gIC9cbiAgLy8gLi4vLi4vb25lICAvYS9iL2MvZCAgICA9PiAgL2EvYi9vbmVcbiAgLy8gLi4vLi9vbmUgICAvYS9iL2MvZCAgICA9PiAgL2EvYi9jL29uZVxuXG5cbiAgdmFyIGFsbFNlZ21lbnRzID0gYmFzZVNlZ21lbnRzLmNvbmNhdCh0b1NlZ21lbnRzKTtcbiAgdmFyIHNlZ21lbnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhbGxTZWdtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgc2VnbWVudCA9IGFsbFNlZ21lbnRzW2ldO1xuICAgIGlmIChzZWdtZW50ID09PSBcIi4uXCIpIHNlZ21lbnRzLnBvcCgpO2Vsc2UgaWYgKHNlZ21lbnQgIT09IFwiLlwiKSBzZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkZFF1ZXJ5KFwiL1wiICsgc2VnbWVudHMuam9pbihcIi9cIiksIHRvUXVlcnkpO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGluc2VydFBhcmFtcyhwYXRoLCBwYXJhbXMpXG5cblxudmFyIGluc2VydFBhcmFtcyA9IGZ1bmN0aW9uIGluc2VydFBhcmFtcyhwYXRoLCBwYXJhbXMpIHtcbiAgdmFyIF9wYXRoJHNwbGl0ID0gcGF0aC5zcGxpdChcIj9cIiksXG4gICAgICBwYXRoQmFzZSA9IF9wYXRoJHNwbGl0WzBdLFxuICAgICAgX3BhdGgkc3BsaXQkID0gX3BhdGgkc3BsaXRbMV0sXG4gICAgICBxdWVyeSA9IF9wYXRoJHNwbGl0JCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IF9wYXRoJHNwbGl0JDtcblxuICB2YXIgc2VnbWVudHMgPSBzZWdtZW50aXplKHBhdGhCYXNlKTtcbiAgdmFyIGNvbnN0cnVjdGVkUGF0aCA9IFwiL1wiICsgc2VnbWVudHMubWFwKGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gICAgdmFyIG1hdGNoID0gcGFyYW1SZS5leGVjKHNlZ21lbnQpO1xuICAgIHJldHVybiBtYXRjaCA/IHBhcmFtc1ttYXRjaFsxXV0gOiBzZWdtZW50O1xuICB9KS5qb2luKFwiL1wiKTtcbiAgdmFyIF9wYXJhbXMkbG9jYXRpb24gPSBwYXJhbXMubG9jYXRpb247XG4gIF9wYXJhbXMkbG9jYXRpb24gPSBfcGFyYW1zJGxvY2F0aW9uID09PSB1bmRlZmluZWQgPyB7fSA6IF9wYXJhbXMkbG9jYXRpb247XG4gIHZhciBfcGFyYW1zJGxvY2F0aW9uJHNlYXIgPSBfcGFyYW1zJGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgIHNlYXJjaCA9IF9wYXJhbXMkbG9jYXRpb24kc2VhciA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IF9wYXJhbXMkbG9jYXRpb24kc2VhcjtcbiAgdmFyIHNlYXJjaFNwbGl0ID0gc2VhcmNoLnNwbGl0KFwiP1wiKVsxXSB8fCBcIlwiO1xuICBjb25zdHJ1Y3RlZFBhdGggPSBhZGRRdWVyeShjb25zdHJ1Y3RlZFBhdGgsIHF1ZXJ5LCBzZWFyY2hTcGxpdCk7XG4gIHJldHVybiBjb25zdHJ1Y3RlZFBhdGg7XG59O1xuXG52YXIgdmFsaWRhdGVSZWRpcmVjdCA9IGZ1bmN0aW9uIHZhbGlkYXRlUmVkaXJlY3QoZnJvbSwgdG8pIHtcbiAgdmFyIGZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihzZWdtZW50KSB7XG4gICAgcmV0dXJuIGlzRHluYW1pYyhzZWdtZW50KTtcbiAgfTtcblxuICB2YXIgZnJvbVN0cmluZyA9IHNlZ21lbnRpemUoZnJvbSkuZmlsdGVyKGZpbHRlcikuc29ydCgpLmpvaW4oXCIvXCIpO1xuICB2YXIgdG9TdHJpbmcgPSBzZWdtZW50aXplKHRvKS5maWx0ZXIoZmlsdGVyKS5zb3J0KCkuam9pbihcIi9cIik7XG4gIHJldHVybiBmcm9tU3RyaW5nID09PSB0b1N0cmluZztcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBKdW5rXG5cblxudmFyIHBhcmFtUmUgPSAvXjooLispLztcbnZhciBTRUdNRU5UX1BPSU5UUyA9IDQ7XG52YXIgU1RBVElDX1BPSU5UUyA9IDM7XG52YXIgRFlOQU1JQ19QT0lOVFMgPSAyO1xudmFyIFNQTEFUX1BFTkFMVFkgPSAxO1xudmFyIFJPT1RfUE9JTlRTID0gMTtcblxudmFyIGlzUm9vdFNlZ21lbnQgPSBmdW5jdGlvbiBpc1Jvb3RTZWdtZW50KHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgPT09IFwiXCI7XG59O1xuXG52YXIgaXNEeW5hbWljID0gZnVuY3Rpb24gaXNEeW5hbWljKHNlZ21lbnQpIHtcbiAgcmV0dXJuIHBhcmFtUmUudGVzdChzZWdtZW50KTtcbn07XG5cbnZhciBpc1NwbGF0ID0gZnVuY3Rpb24gaXNTcGxhdChzZWdtZW50KSB7XG4gIHJldHVybiBzZWdtZW50ICYmIHNlZ21lbnRbMF0gPT09IFwiKlwiO1xufTtcblxudmFyIHJhbmtSb3V0ZSA9IGZ1bmN0aW9uIHJhbmtSb3V0ZShyb3V0ZSwgaW5kZXgpIHtcbiAgdmFyIHNjb3JlID0gcm91dGUuZGVmYXVsdCA/IDAgOiBzZWdtZW50aXplKHJvdXRlLnBhdGgpLnJlZHVjZShmdW5jdGlvbiAoc2NvcmUsIHNlZ21lbnQpIHtcbiAgICBzY29yZSArPSBTRUdNRU5UX1BPSU5UUztcbiAgICBpZiAoaXNSb290U2VnbWVudChzZWdtZW50KSkgc2NvcmUgKz0gUk9PVF9QT0lOVFM7ZWxzZSBpZiAoaXNEeW5hbWljKHNlZ21lbnQpKSBzY29yZSArPSBEWU5BTUlDX1BPSU5UUztlbHNlIGlmIChpc1NwbGF0KHNlZ21lbnQpKSBzY29yZSAtPSBTRUdNRU5UX1BPSU5UUyArIFNQTEFUX1BFTkFMVFk7ZWxzZSBzY29yZSArPSBTVEFUSUNfUE9JTlRTO1xuICAgIHJldHVybiBzY29yZTtcbiAgfSwgMCk7XG4gIHJldHVybiB7XG4gICAgcm91dGU6IHJvdXRlLFxuICAgIHNjb3JlOiBzY29yZSxcbiAgICBpbmRleDogaW5kZXhcbiAgfTtcbn07XG5cbnZhciByYW5rUm91dGVzID0gZnVuY3Rpb24gcmFua1JvdXRlcyhyb3V0ZXMpIHtcbiAgcmV0dXJuIHJvdXRlcy5tYXAocmFua1JvdXRlKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEuc2NvcmUgPCBiLnNjb3JlID8gMSA6IGEuc2NvcmUgPiBiLnNjb3JlID8gLTEgOiBhLmluZGV4IC0gYi5pbmRleDtcbiAgfSk7XG59O1xuXG52YXIgc2VnbWVudGl6ZSA9IGZ1bmN0aW9uIHNlZ21lbnRpemUodXJpKSB7XG4gIHJldHVybiB1cmkgLy8gc3RyaXAgc3RhcnRpbmcvZW5kaW5nIHNsYXNoZXNcbiAgLnJlcGxhY2UoLyheXFwvK3xcXC8rJCkvZywgXCJcIikuc3BsaXQoXCIvXCIpO1xufTtcblxudmFyIGFkZFF1ZXJ5ID0gZnVuY3Rpb24gYWRkUXVlcnkocGF0aG5hbWUpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHF1ZXJ5ID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHF1ZXJ5W19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHF1ZXJ5ID0gcXVlcnkuZmlsdGVyKGZ1bmN0aW9uIChxKSB7XG4gICAgcmV0dXJuIHEgJiYgcS5sZW5ndGggPiAwO1xuICB9KTtcbiAgcmV0dXJuIHBhdGhuYW1lICsgKHF1ZXJ5ICYmIHF1ZXJ5Lmxlbmd0aCA+IDAgPyBcIj9cIiArIHF1ZXJ5LmpvaW4oXCImXCIpIDogXCJcIik7XG59O1xuXG52YXIgcmVzZXJ2ZWROYW1lcyA9IFtcInVyaVwiLCBcInBhdGhcIl07XG4vKipcbiAqIFNoYWxsb3cgY29tcGFyZXMgdHdvIG9iamVjdHMuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBUaGUgZmlyc3Qgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMiBUaGUgc2Vjb25kIG9iamVjdCB0byBjb21wYXJlLlxuICovXG5cbnZhciBzaGFsbG93Q29tcGFyZSA9IGZ1bmN0aW9uIHNoYWxsb3dDb21wYXJlKG9iajEsIG9iajIpIHtcbiAgdmFyIG9iajFLZXlzID0gT2JqZWN0LmtleXMob2JqMSk7XG4gIHJldHVybiBvYmoxS2V5cy5sZW5ndGggPT09IE9iamVjdC5rZXlzKG9iajIpLmxlbmd0aCAmJiBvYmoxS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG9iajIuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBvYmoxW2tleV0gPT09IG9iajJba2V5XTtcbiAgfSk7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbmV4cG9ydCB7IHN0YXJ0c1dpdGgsIHBpY2ssIG1hdGNoLCByZXNvbHZlLCBpbnNlcnRQYXJhbXMsIHZhbGlkYXRlUmVkaXJlY3QsIHNoYWxsb3dDb21wYXJlIH07IiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbnZhciBnZXRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldExvY2F0aW9uKHNvdXJjZSkge1xuICB2YXIgX3NvdXJjZSRsb2NhdGlvbiA9IHNvdXJjZS5sb2NhdGlvbixcbiAgICAgIHNlYXJjaCA9IF9zb3VyY2UkbG9jYXRpb24uc2VhcmNoLFxuICAgICAgaGFzaCA9IF9zb3VyY2UkbG9jYXRpb24uaGFzaCxcbiAgICAgIGhyZWYgPSBfc291cmNlJGxvY2F0aW9uLmhyZWYsXG4gICAgICBvcmlnaW4gPSBfc291cmNlJGxvY2F0aW9uLm9yaWdpbixcbiAgICAgIHByb3RvY29sID0gX3NvdXJjZSRsb2NhdGlvbi5wcm90b2NvbCxcbiAgICAgIGhvc3QgPSBfc291cmNlJGxvY2F0aW9uLmhvc3QsXG4gICAgICBob3N0bmFtZSA9IF9zb3VyY2UkbG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICBwb3J0ID0gX3NvdXJjZSRsb2NhdGlvbi5wb3J0O1xuICB2YXIgcGF0aG5hbWUgPSBzb3VyY2UubG9jYXRpb24ucGF0aG5hbWU7XG5cbiAgaWYgKCFwYXRobmFtZSAmJiBocmVmICYmIGNhblVzZURPTSkge1xuICAgIHZhciB1cmwgPSBuZXcgVVJMKGhyZWYpO1xuICAgIHBhdGhuYW1lID0gdXJsLnBhdGhuYW1lO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZTogZW5jb2RlVVJJKGRlY29kZVVSSShwYXRobmFtZSkpLFxuICAgIHNlYXJjaDogc2VhcmNoLFxuICAgIGhhc2g6IGhhc2gsXG4gICAgaHJlZjogaHJlZixcbiAgICBvcmlnaW46IG9yaWdpbixcbiAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgaG9zdDogaG9zdCxcbiAgICBob3N0bmFtZTogaG9zdG5hbWUsXG4gICAgcG9ydDogcG9ydCxcbiAgICBzdGF0ZTogc291cmNlLmhpc3Rvcnkuc3RhdGUsXG4gICAga2V5OiBzb3VyY2UuaGlzdG9yeS5zdGF0ZSAmJiBzb3VyY2UuaGlzdG9yeS5zdGF0ZS5rZXkgfHwgXCJpbml0aWFsXCJcbiAgfTtcbn07XG5cbnZhciBjcmVhdGVIaXN0b3J5ID0gZnVuY3Rpb24gY3JlYXRlSGlzdG9yeShzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzb3VyY2UpO1xuICB2YXIgdHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuXG4gIHZhciByZXNvbHZlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uKCkge307XG5cbiAgcmV0dXJuIHtcbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgfSxcblxuICAgIGdldCB0cmFuc2l0aW9uaW5nKCkge1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb25pbmc7XG4gICAgfSxcblxuICAgIF9vblRyYW5zaXRpb25Db21wbGV0ZTogZnVuY3Rpb24gX29uVHJhbnNpdGlvbkNvbXBsZXRlKCkge1xuICAgICAgdHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgcmVzb2x2ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIGxpc3RlbjogZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICAgIHZhciBwb3BzdGF0ZUxpc3RlbmVyID0gZnVuY3Rpb24gcG9wc3RhdGVMaXN0ZW5lcigpIHtcbiAgICAgICAgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzb3VyY2UpO1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICAgIGFjdGlvbjogXCJQT1BcIlxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgcG9wc3RhdGVMaXN0ZW5lcik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHBvcHN0YXRlTGlzdGVuZXIpO1xuICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgIHJldHVybiBmbiAhPT0gbGlzdGVuZXI7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LFxuICAgIG5hdmlnYXRlOiBmdW5jdGlvbiBuYXZpZ2F0ZSh0bykge1xuICAgICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgICAgICBfcmVmJHJlcGxhY2UgPSBfcmVmLnJlcGxhY2UsXG4gICAgICAgICAgcmVwbGFjZSA9IF9yZWYkcmVwbGFjZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmJHJlcGxhY2U7XG5cbiAgICAgIGlmICh0eXBlb2YgdG8gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgc291cmNlLmhpc3RvcnkuZ28odG8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUgPSBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBrZXk6IERhdGUubm93KCkgKyBcIlwiXG4gICAgICAgIH0pOyAvLyB0cnkuLi5jYXRjaCBpT1MgU2FmYXJpIGxpbWl0cyB0byAxMDAgcHVzaFN0YXRlIGNhbGxzXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHJhbnNpdGlvbmluZyB8fCByZXBsYWNlKSB7XG4gICAgICAgICAgICBzb3VyY2UuaGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGUsIG51bGwsIHRvKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc291cmNlLmhpc3RvcnkucHVzaFN0YXRlKHN0YXRlLCBudWxsLCB0byk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgc291cmNlLmxvY2F0aW9uW3JlcGxhY2UgPyBcInJlcGxhY2VcIiA6IFwiYXNzaWduXCJdKHRvKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsb2NhdGlvbiA9IGdldExvY2F0aW9uKHNvdXJjZSk7XG4gICAgICB0cmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICAgIHZhciB0cmFuc2l0aW9uID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVRyYW5zaXRpb24gPSByZXM7XG4gICAgICB9KTtcbiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICByZXR1cm4gbGlzdGVuZXIoe1xuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgICBhY3Rpb246IFwiUFVTSFwiXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJhbnNpdGlvbjtcbiAgICB9XG4gIH07XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gU3RvcmVzIGhpc3RvcnkgZW50cmllcyBpbiBtZW1vcnkgZm9yIHRlc3Rpbmcgb3Igb3RoZXIgcGxhdGZvcm1zIGxpa2UgTmF0aXZlXG5cblxudmFyIGNyZWF0ZU1lbW9yeVNvdXJjZSA9IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeVNvdXJjZSgpIHtcbiAgdmFyIGluaXRpYWxQYXRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBcIi9cIjtcbiAgdmFyIHNlYXJjaEluZGV4ID0gaW5pdGlhbFBhdGguaW5kZXhPZihcIj9cIik7XG4gIHZhciBpbml0aWFsTG9jYXRpb24gPSB7XG4gICAgcGF0aG5hbWU6IHNlYXJjaEluZGV4ID4gLTEgPyBpbml0aWFsUGF0aC5zdWJzdHIoMCwgc2VhcmNoSW5kZXgpIDogaW5pdGlhbFBhdGgsXG4gICAgc2VhcmNoOiBzZWFyY2hJbmRleCA+IC0xID8gaW5pdGlhbFBhdGguc3Vic3RyKHNlYXJjaEluZGV4KSA6IFwiXCJcbiAgfTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHN0YWNrID0gW2luaXRpYWxMb2NhdGlvbl07XG4gIHZhciBzdGF0ZXMgPSBbbnVsbF07XG4gIHJldHVybiB7XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0YWNrW2luZGV4XTtcbiAgICB9LFxuXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmbikge30sXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmbikge30sXG4gICAgaGlzdG9yeToge1xuICAgICAgZ2V0IGVudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiBzdGFjaztcbiAgICAgIH0sXG5cbiAgICAgIGdldCBpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfSxcblxuICAgICAgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gc3RhdGVzW2luZGV4XTtcbiAgICAgIH0sXG5cbiAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gcHVzaFN0YXRlKHN0YXRlLCBfLCB1cmkpIHtcbiAgICAgICAgdmFyIF91cmkkc3BsaXQgPSB1cmkuc3BsaXQoXCI/XCIpLFxuICAgICAgICAgICAgcGF0aG5hbWUgPSBfdXJpJHNwbGl0WzBdLFxuICAgICAgICAgICAgX3VyaSRzcGxpdCQgPSBfdXJpJHNwbGl0WzFdLFxuICAgICAgICAgICAgc2VhcmNoID0gX3VyaSRzcGxpdCQgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBfdXJpJHNwbGl0JDtcblxuICAgICAgICBpbmRleCsrO1xuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBzZWFyY2gubGVuZ3RoID8gXCI/XCIgKyBzZWFyY2ggOiBzZWFyY2hcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXRlcy5wdXNoKHN0YXRlKTtcbiAgICAgIH0sXG4gICAgICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIHJlcGxhY2VTdGF0ZShzdGF0ZSwgXywgdXJpKSB7XG4gICAgICAgIHZhciBfdXJpJHNwbGl0MiA9IHVyaS5zcGxpdChcIj9cIiksXG4gICAgICAgICAgICBwYXRobmFtZSA9IF91cmkkc3BsaXQyWzBdLFxuICAgICAgICAgICAgX3VyaSRzcGxpdDIkID0gX3VyaSRzcGxpdDJbMV0sXG4gICAgICAgICAgICBzZWFyY2ggPSBfdXJpJHNwbGl0MiQgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBfdXJpJHNwbGl0MiQ7XG5cbiAgICAgICAgc3RhY2tbaW5kZXhdID0ge1xuICAgICAgICAgIHBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICAgICAgICBzZWFyY2g6IHNlYXJjaFxuICAgICAgICB9O1xuICAgICAgICBzdGF0ZXNbaW5kZXhdID0gc3RhdGU7XG4gICAgICB9LFxuICAgICAgZ286IGZ1bmN0aW9uIGdvKHRvKSB7XG4gICAgICAgIHZhciBuZXdJbmRleCA9IGluZGV4ICsgdG87XG5cbiAgICAgICAgaWYgKG5ld0luZGV4IDwgMCB8fCBuZXdJbmRleCA+IHN0YXRlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggPSBuZXdJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gZ2xvYmFsIGhpc3RvcnkgLSB1c2VzIHdpbmRvdy5oaXN0b3J5IGFzIHRoZSBzb3VyY2UgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYVxuLy8gbWVtb3J5IGhpc3RvcnlcblxuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG52YXIgZ2V0U291cmNlID0gZnVuY3Rpb24gZ2V0U291cmNlKCkge1xuICByZXR1cm4gY2FuVXNlRE9NID8gd2luZG93IDogY3JlYXRlTWVtb3J5U291cmNlKCk7XG59O1xuXG52YXIgZ2xvYmFsSGlzdG9yeSA9IGNyZWF0ZUhpc3RvcnkoZ2V0U291cmNlKCkpO1xudmFyIG5hdmlnYXRlID0gZ2xvYmFsSGlzdG9yeS5uYXZpZ2F0ZTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IHsgZ2xvYmFsSGlzdG9yeSwgbmF2aWdhdGUsIGNyZWF0ZUhpc3RvcnksIGNyZWF0ZU1lbW9yeVNvdXJjZSB9OyIsInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7XG4gIHZhciB0YXJnZXQgPSB7fTtcblxuICBmb3IgKHZhciBpIGluIG9iaikge1xuICAgIGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7XG4gICAgdGFyZ2V0W2ldID0gb2JqW2ldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoIXNlbGYpIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvYW5jaG9yLWhhcy1jb250ZW50ICovXG5cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIGNyZWF0ZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSBcImludmFyaWFudFwiO1xuaW1wb3J0IHsgcG9seWZpbGwgfSBmcm9tIFwicmVhY3QtbGlmZWN5Y2xlcy1jb21wYXRcIjtcbmltcG9ydCB7IHN0YXJ0c1dpdGgsIHBpY2ssIHJlc29sdmUsIG1hdGNoLCBpbnNlcnRQYXJhbXMsIHZhbGlkYXRlUmVkaXJlY3QsIHNoYWxsb3dDb21wYXJlIH0gZnJvbSBcIi4vbGliL3V0aWxzXCI7XG5pbXBvcnQgeyBnbG9iYWxIaXN0b3J5LCBuYXZpZ2F0ZSwgY3JlYXRlSGlzdG9yeSwgY3JlYXRlTWVtb3J5U291cmNlIH0gZnJvbSBcIi4vbGliL2hpc3RvcnlcIjsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxudmFyIGNyZWF0ZU5hbWVkQ29udGV4dCA9IGZ1bmN0aW9uIGNyZWF0ZU5hbWVkQ29udGV4dChuYW1lLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIEN0eCA9IGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlKTtcbiAgQ3R4LmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgcmV0dXJuIEN0eDtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMb2NhdGlvbiBDb250ZXh0L1Byb3ZpZGVyXG5cblxudmFyIExvY2F0aW9uQ29udGV4dCA9IGNyZWF0ZU5hbWVkQ29udGV4dChcIkxvY2F0aW9uXCIpOyAvLyBzZXRzIHVwIGEgbGlzdGVuZXIgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkgc28gYXBwcyBkb24ndCBuZWVkIHRvIGJlXG4vLyB3cmFwcGVkIGluIHNvbWUgdG9wIGxldmVsIHByb3ZpZGVyXG5cbnZhciBMb2NhdGlvbiA9IGZ1bmN0aW9uIExvY2F0aW9uKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9jYXRpb25Db250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0ID8gY2hpbGRyZW4oY29udGV4dCkgOiBSZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uUHJvdmlkZXIsIG51bGwsIGNoaWxkcmVuKTtcbiAgfSk7XG59O1xuXG52YXIgTG9jYXRpb25Qcm92aWRlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhMb2NhdGlvblByb3ZpZGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBMb2NhdGlvblByb3ZpZGVyKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTG9jYXRpb25Qcm92aWRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0OiBfdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICByZWZzOiB7XG4gICAgICAgIHVubGlzdGVuOiBudWxsXG4gICAgICB9XG4gICAgfSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBMb2NhdGlvblByb3ZpZGVyLnByb3RvdHlwZS5nZXRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgICB2YXIgX3Byb3BzJGhpc3RvcnkgPSB0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICAgIG5hdmlnYXRlID0gX3Byb3BzJGhpc3RvcnkubmF2aWdhdGUsXG4gICAgICAgIGxvY2F0aW9uID0gX3Byb3BzJGhpc3RvcnkubG9jYXRpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdmlnYXRlOiBuYXZpZ2F0ZSxcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICAgIH07XG4gIH07XG5cbiAgTG9jYXRpb25Qcm92aWRlci5wcm90b3R5cGUuY29tcG9uZW50RGlkQ2F0Y2ggPSBmdW5jdGlvbiBjb21wb25lbnREaWRDYXRjaChlcnJvciwgaW5mbykge1xuICAgIGlmIChpc1JlZGlyZWN0KGVycm9yKSkge1xuICAgICAgdmFyIF9uYXZpZ2F0ZSA9IHRoaXMucHJvcHMuaGlzdG9yeS5uYXZpZ2F0ZTtcblxuICAgICAgX25hdmlnYXRlKGVycm9yLnVyaSwge1xuICAgICAgICByZXBsYWNlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIGlmIChwcmV2U3RhdGUuY29udGV4dC5sb2NhdGlvbiAhPT0gdGhpcy5zdGF0ZS5jb250ZXh0LmxvY2F0aW9uKSB7XG4gICAgICB0aGlzLnByb3BzLmhpc3RvcnkuX29uVHJhbnNpdGlvbkNvbXBsZXRlKCk7XG4gICAgfVxuICB9O1xuXG4gIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgcmVmcyA9IHRoaXMuc3RhdGUucmVmcyxcbiAgICAgICAgaGlzdG9yeSA9IHRoaXMucHJvcHMuaGlzdG9yeTtcblxuICAgIGhpc3RvcnkuX29uVHJhbnNpdGlvbkNvbXBsZXRlKCk7XG5cbiAgICByZWZzLnVubGlzdGVuID0gaGlzdG9yeS5saXN0ZW4oZnVuY3Rpb24gKCkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRPRE86IHJlcGxhY2UgckFGIHdpdGggcmVhY3QgZGVmZXJyZWQgdXBkYXRlIEFQSSB3aGVuIGl0J3MgcmVhZHkgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzMwNlxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghX3RoaXMyLnVubW91bnRlZCkge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBfdGhpczIuZ2V0Q29udGV4dCgpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgTG9jYXRpb25Qcm92aWRlci5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB2YXIgcmVmcyA9IHRoaXMuc3RhdGUucmVmcztcbiAgICB0aGlzLnVubW91bnRlZCA9IHRydWU7XG4gICAgcmVmcy51bmxpc3RlbigpO1xuICB9O1xuXG4gIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuc3RhdGUuY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRcbiAgICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIiA/IGNoaWxkcmVuKGNvbnRleHQpIDogY2hpbGRyZW4gfHwgbnVsbCk7XG4gIH07XG5cbiAgcmV0dXJuIExvY2F0aW9uUHJvdmlkZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuTG9jYXRpb25Qcm92aWRlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGhpc3Rvcnk6IGdsb2JhbEhpc3Rvcnlcbn07XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB2b2lkIDAgOiB2b2lkIDA7XG5cbnZhciBTZXJ2ZXJMb2NhdGlvbiA9IGZ1bmN0aW9uIFNlcnZlckxvY2F0aW9uKF9yZWYyKSB7XG4gIHZhciB1cmwgPSBfcmVmMi51cmwsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICB2YXIgc2VhcmNoSW5kZXggPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gIHZhciBzZWFyY2hFeGlzdHMgPSBzZWFyY2hJbmRleCA+IC0xO1xuICB2YXIgcGF0aG5hbWUgPSB2b2lkIDA7XG4gIHZhciBzZWFyY2ggPSBcIlwiO1xuICB2YXIgaGFzaCA9IFwiXCI7XG5cbiAgaWYgKHNlYXJjaEV4aXN0cykge1xuICAgIHBhdGhuYW1lID0gdXJsLnN1YnN0cmluZygwLCBzZWFyY2hJbmRleCk7XG4gICAgc2VhcmNoID0gdXJsLnN1YnN0cmluZyhzZWFyY2hJbmRleCk7XG4gIH0gZWxzZSB7XG4gICAgcGF0aG5hbWUgPSB1cmw7XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICAgICAgaGFzaDogaGFzaFxuICAgICAgfSxcbiAgICAgIG5hdmlnYXRlOiBmdW5jdGlvbiBuYXZpZ2F0ZSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbid0IGNhbGwgbmF2aWdhdGUgb24gdGhlIHNlcnZlci5cIik7XG4gICAgICB9XG4gICAgfVxuICB9LCBjaGlsZHJlbik7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gU2V0cyBiYXNldXJpIGFuZCBiYXNlcGF0aCBmb3IgbmVzdGVkIHJvdXRlcnMgYW5kIGxpbmtzXG5cblxudmFyIEJhc2VDb250ZXh0ID0gY3JlYXRlTmFtZWRDb250ZXh0KFwiQmFzZVwiLCB7XG4gIGJhc2V1cmk6IFwiL1wiLFxuICBiYXNlcGF0aDogXCIvXCIsXG4gIG5hdmlnYXRlOiBnbG9iYWxIaXN0b3J5Lm5hdmlnYXRlXG59KTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFRoZSBtYWluIGV2ZW50LCB3ZWxjb21lIHRvIHRoZSBzaG93IGV2ZXJ5Ym9keS5cblxudmFyIFJvdXRlciA9IGZ1bmN0aW9uIFJvdXRlcihwcm9wcykge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQ29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGJhc2VDb250ZXh0KSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9jYXRpb24sIG51bGwsIGZ1bmN0aW9uIChsb2NhdGlvbkNvbnRleHQpIHtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlckltcGwsIF9leHRlbmRzKHt9LCBiYXNlQ29udGV4dCwgbG9jYXRpb25Db250ZXh0LCBwcm9wcykpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbnZhciBSb3V0ZXJJbXBsID0gZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSb3V0ZXJJbXBsLCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUm91dGVySW1wbCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUm91dGVySW1wbCk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JFB1cmVDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBSb3V0ZXJJbXBsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGxvY2F0aW9uID0gX3Byb3BzLmxvY2F0aW9uLFxuICAgICAgICBfbmF2aWdhdGUyID0gX3Byb3BzLm5hdmlnYXRlLFxuICAgICAgICBiYXNlcGF0aCA9IF9wcm9wcy5iYXNlcGF0aCxcbiAgICAgICAgcHJpbWFyeSA9IF9wcm9wcy5wcmltYXJ5LFxuICAgICAgICBjaGlsZHJlbiA9IF9wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgYmFzZXVyaSA9IF9wcm9wcy5iYXNldXJpLFxuICAgICAgICBfcHJvcHMkY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzJGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkID8gXCJkaXZcIiA6IF9wcm9wcyRjb21wb25lbnQsXG4gICAgICAgIGRvbVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgW1wibG9jYXRpb25cIiwgXCJuYXZpZ2F0ZVwiLCBcImJhc2VwYXRoXCIsIFwicHJpbWFyeVwiLCBcImNoaWxkcmVuXCIsIFwiYmFzZXVyaVwiLCBcImNvbXBvbmVudFwiXSk7XG5cbiAgICB2YXIgcm91dGVzID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikucmVkdWNlKGZ1bmN0aW9uIChhcnJheSwgY2hpbGQpIHtcbiAgICAgIHZhciByb3V0ZXMgPSBjcmVhdGVSb3V0ZShiYXNlcGF0aCkoY2hpbGQpO1xuICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdChyb3V0ZXMpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICB2YXIgbWF0Y2ggPSBwaWNrKHJvdXRlcywgcGF0aG5hbWUpO1xuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgcGFyYW1zID0gbWF0Y2gucGFyYW1zLFxuICAgICAgICAgIHVyaSA9IG1hdGNoLnVyaSxcbiAgICAgICAgICByb3V0ZSA9IG1hdGNoLnJvdXRlLFxuICAgICAgICAgIGVsZW1lbnQgPSBtYXRjaC5yb3V0ZS52YWx1ZTsgLy8gcmVtb3ZlIHRoZSAvKiBmcm9tIHRoZSBlbmQgZm9yIGNoaWxkIHJvdXRlcyByZWxhdGl2ZSBwYXRoc1xuXG4gICAgICBiYXNlcGF0aCA9IHJvdXRlLmRlZmF1bHQgPyBiYXNlcGF0aCA6IHJvdXRlLnBhdGgucmVwbGFjZSgvXFwqJC8sIFwiXCIpO1xuXG4gICAgICB2YXIgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgcGFyYW1zLCB7XG4gICAgICAgIHVyaTogdXJpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIG5hdmlnYXRlOiBmdW5jdGlvbiBuYXZpZ2F0ZSh0bywgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBfbmF2aWdhdGUyKHJlc29sdmUodG8sIHVyaSksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGNsb25lID0gUmVhY3QuY2xvbmVFbGVtZW50KGVsZW1lbnQsIHByb3BzLCBlbGVtZW50LnByb3BzLmNoaWxkcmVuID8gUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICBwcmltYXJ5OiBwcmltYXJ5XG4gICAgICB9LCBlbGVtZW50LnByb3BzLmNoaWxkcmVuKSA6IHVuZGVmaW5lZCk7IC8vIHVzaW5nICdkaXYnIGZvciA8IDE2LjMgc3VwcG9ydFxuXG4gICAgICB2YXIgRm9jdXNXcmFwcGVyID0gcHJpbWFyeSA/IEZvY3VzSGFuZGxlciA6IGNvbXBvbmVudDsgLy8gZG9uJ3QgcGFzcyBhbnkgcHJvcHMgdG8gJ2RpdidcblxuICAgICAgdmFyIHdyYXBwZXJQcm9wcyA9IHByaW1hcnkgPyBfZXh0ZW5kcyh7XG4gICAgICAgIHVyaTogdXJpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50XG4gICAgICB9LCBkb21Qcm9wcykgOiBkb21Qcm9wcztcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgYmFzZXVyaTogdXJpLFxuICAgICAgICAgIGJhc2VwYXRoOiBiYXNlcGF0aCxcbiAgICAgICAgICBuYXZpZ2F0ZTogcHJvcHMubmF2aWdhdGVcbiAgICAgICAgfVxuICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChGb2N1c1dyYXBwZXIsIHdyYXBwZXJQcm9wcywgY2xvbmUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm90IHN1cmUgaWYgd2Ugd2FudCB0aGlzLCB3b3VsZCByZXF1aXJlIGluZGV4IHJvdXRlcyBhdCBldmVyeSBsZXZlbFxuICAgICAgLy8gd2FybmluZyhcbiAgICAgIC8vICAgZmFsc2UsXG4gICAgICAvLyAgIGA8Um91dGVyIGJhc2VwYXRoPVwiJHtiYXNlcGF0aH1cIj5cXG5cXG5Ob3RoaW5nIG1hdGNoZWQ6XFxuXFx0JHtcbiAgICAgIC8vICAgICBsb2NhdGlvbi5wYXRobmFtZVxuICAgICAgLy8gICB9XFxuXFxuUGF0aHMgY2hlY2tlZDogXFxuXFx0JHtyb3V0ZXNcbiAgICAgIC8vICAgICAubWFwKHJvdXRlID0+IHJvdXRlLnBhdGgpXG4gICAgICAvLyAgICAgLmpvaW4oXG4gICAgICAvLyAgICAgICBcIlxcblxcdFwiXG4gICAgICAvLyAgICAgKX1cXG5cXG5UbyBnZXQgcmlkIG9mIHRoaXMgd2FybmluZywgYWRkIGEgZGVmYXVsdCBOb3RGb3VuZCBjb21wb25lbnQgYXMgY2hpbGQgb2YgUm91dGVyOlxuICAgICAgLy8gICBcXG5cXHRsZXQgTm90Rm91bmQgPSAoKSA9PiA8ZGl2Pk5vdCBGb3VuZCE8L2Rpdj5cbiAgICAgIC8vICAgXFxuXFx0PFJvdXRlcj5cXG5cXHQgIDxOb3RGb3VuZCBkZWZhdWx0Lz5cXG5cXHQgIHsvKiAuLi4gKi99XFxuXFx0PC9Sb3V0ZXI+YFxuICAgICAgLy8gKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUm91dGVySW1wbDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cblJvdXRlckltcGwuZGVmYXVsdFByb3BzID0ge1xuICBwcmltYXJ5OiB0cnVlXG59O1xudmFyIEZvY3VzQ29udGV4dCA9IGNyZWF0ZU5hbWVkQ29udGV4dChcIkZvY3VzXCIpO1xuXG52YXIgRm9jdXNIYW5kbGVyID0gZnVuY3Rpb24gRm9jdXNIYW5kbGVyKF9yZWYzKSB7XG4gIHZhciB1cmkgPSBfcmVmMy51cmksXG4gICAgICBsb2NhdGlvbiA9IF9yZWYzLmxvY2F0aW9uLFxuICAgICAgY29tcG9uZW50ID0gX3JlZjMuY29tcG9uZW50LFxuICAgICAgZG9tUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIFtcInVyaVwiLCBcImxvY2F0aW9uXCIsIFwiY29tcG9uZW50XCJdKTtcblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGb2N1c0NvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChyZXF1ZXN0Rm9jdXMpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGb2N1c0hhbmRsZXJJbXBsLCBfZXh0ZW5kcyh7fSwgZG9tUHJvcHMsIHtcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgcmVxdWVzdEZvY3VzOiByZXF1ZXN0Rm9jdXMsXG4gICAgICB1cmk6IHVyaSxcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICAgIH0pKTtcbiAgfSk7XG59OyAvLyBkb24ndCBmb2N1cyBvbiBpbml0aWFsIHJlbmRlclxuXG5cbnZhciBpbml0aWFsUmVuZGVyID0gdHJ1ZTtcbnZhciBmb2N1c0hhbmRsZXJDb3VudCA9IDA7XG5cbnZhciBGb2N1c0hhbmRsZXJJbXBsID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQyKSB7XG4gIF9pbmhlcml0cyhGb2N1c0hhbmRsZXJJbXBsLCBfUmVhY3QkQ29tcG9uZW50Mik7XG5cbiAgZnVuY3Rpb24gRm9jdXNIYW5kbGVySW1wbCgpIHtcbiAgICB2YXIgX3RlbXAyLCBfdGhpczQsIF9yZXQyO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZvY3VzSGFuZGxlckltcGwpO1xuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldDIgPSAoX3RlbXAyID0gKF90aGlzNCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQyLmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudDIsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXM0KSwgX3RoaXM0LnN0YXRlID0ge30sIF90aGlzNC5yZXF1ZXN0Rm9jdXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgaWYgKCFfdGhpczQuc3RhdGUuc2hvdWxkRm9jdXMgJiYgbm9kZSkge1xuICAgICAgICBub2RlLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgX3RlbXAyKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXM0LCBfcmV0Mik7XG4gIH1cblxuICBGb2N1c0hhbmRsZXJJbXBsLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIHZhciBpbml0aWFsID0gcHJldlN0YXRlLnVyaSA9PSBudWxsO1xuXG4gICAgaWYgKGluaXRpYWwpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgIHNob3VsZEZvY3VzOiB0cnVlXG4gICAgICB9LCBuZXh0UHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbXlVUklDaGFuZ2VkID0gbmV4dFByb3BzLnVyaSAhPT0gcHJldlN0YXRlLnVyaTtcbiAgICAgIHZhciBuYXZpZ2F0ZWRVcFRvTWUgPSBwcmV2U3RhdGUubG9jYXRpb24ucGF0aG5hbWUgIT09IG5leHRQcm9wcy5sb2NhdGlvbi5wYXRobmFtZSAmJiBuZXh0UHJvcHMubG9jYXRpb24ucGF0aG5hbWUgPT09IG5leHRQcm9wcy51cmk7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICBzaG91bGRGb2N1czogbXlVUklDaGFuZ2VkIHx8IG5hdmlnYXRlZFVwVG9NZVxuICAgICAgfSwgbmV4dFByb3BzKTtcbiAgICB9XG4gIH07XG5cbiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBmb2N1c0hhbmRsZXJDb3VudCsrO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfTtcblxuICBGb2N1c0hhbmRsZXJJbXBsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGZvY3VzSGFuZGxlckNvdW50LS07XG5cbiAgICBpZiAoZm9jdXNIYW5kbGVyQ291bnQgPT09IDApIHtcbiAgICAgIGluaXRpYWxSZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBGb2N1c0hhbmRsZXJJbXBsLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICBpZiAocHJldlByb3BzLmxvY2F0aW9uICE9PSB0aGlzLnByb3BzLmxvY2F0aW9uICYmIHRoaXMuc3RhdGUuc2hvdWxkRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICAvLyBnZXR0aW5nIGNhbm5vdCByZWFkIHByb3BlcnR5IGZvY3VzIG9mIG51bGwgaW4gdGhlIHRlc3RzXG4gICAgICAvLyBhbmQgdGhhdCBiaXQgb2YgZ2xvYmFsIGBpbml0aWFsUmVuZGVyYCBzdGF0ZSBjYXVzZXMgcHJvYmxlbXNcbiAgICAgIC8vIHNob3VsZCBwcm9iYWJseSBmaWd1cmUgaXQgb3V0IVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByZXF1ZXN0Rm9jdXMgPSB0aGlzLnByb3BzLnJlcXVlc3RGb2N1cztcblxuICAgIGlmIChyZXF1ZXN0Rm9jdXMpIHtcbiAgICAgIHJlcXVlc3RGb2N1cyh0aGlzLm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW5pdGlhbFJlbmRlcikge1xuICAgICAgICBpbml0aWFsUmVuZGVyID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubm9kZSkge1xuICAgICAgICAvLyBSZWFjdCBwb2x5ZmlsbHMgW2F1dG9mb2N1c10gYW5kIGl0IGZpcmVzIGVhcmxpZXIgdGhhbiBjRE0sXG4gICAgICAgIC8vIHNvIHdlIHdlcmUgc3RlYWxpbmcgZm9jdXMgYXdheSwgdGhpcyBsaW5lIHByZXZlbnRzIHRoYXQuXG4gICAgICAgIGlmICghdGhpcy5ub2RlLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgdGhpcy5ub2RlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF9wcm9wczIuY2hpbGRyZW4sXG4gICAgICAgIHN0eWxlID0gX3Byb3BzMi5zdHlsZSxcbiAgICAgICAgcmVxdWVzdEZvY3VzID0gX3Byb3BzMi5yZXF1ZXN0Rm9jdXMsXG4gICAgICAgIF9wcm9wczIkY29tcG9uZW50ID0gX3Byb3BzMi5jb21wb25lbnQsXG4gICAgICAgIENvbXAgPSBfcHJvcHMyJGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkID8gXCJkaXZcIiA6IF9wcm9wczIkY29tcG9uZW50LFxuICAgICAgICB1cmkgPSBfcHJvcHMyLnVyaSxcbiAgICAgICAgbG9jYXRpb24gPSBfcHJvcHMyLmxvY2F0aW9uLFxuICAgICAgICBkb21Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMyLCBbXCJjaGlsZHJlblwiLCBcInN0eWxlXCIsIFwicmVxdWVzdEZvY3VzXCIsIFwiY29tcG9uZW50XCIsIFwidXJpXCIsIFwibG9jYXRpb25cIl0pO1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcCwgX2V4dGVuZHMoe1xuICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgb3V0bGluZTogXCJub25lXCJcbiAgICAgIH0sIHN0eWxlKSxcbiAgICAgIHRhYkluZGV4OiBcIi0xXCIsXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihuKSB7XG4gICAgICAgIHJldHVybiBfdGhpczUubm9kZSA9IG47XG4gICAgICB9XG4gICAgfSwgZG9tUHJvcHMpLCBSZWFjdC5jcmVhdGVFbGVtZW50KEZvY3VzQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHRoaXMucmVxdWVzdEZvY3VzXG4gICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBGb2N1c0hhbmRsZXJJbXBsO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5wb2x5ZmlsbChGb2N1c0hhbmRsZXJJbXBsKTtcblxudmFyIGsgPSBmdW5jdGlvbiBrKCkge307IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxudmFyIGZvcndhcmRSZWYgPSBSZWFjdC5mb3J3YXJkUmVmO1xuXG5pZiAodHlwZW9mIGZvcndhcmRSZWYgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgZm9yd2FyZFJlZiA9IGZ1bmN0aW9uIGZvcndhcmRSZWYoQykge1xuICAgIHJldHVybiBDO1xuICB9O1xufVxuXG52YXIgTGluayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWY0LCByZWYpIHtcbiAgdmFyIGlubmVyUmVmID0gX3JlZjQuaW5uZXJSZWYsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNCwgW1wiaW5uZXJSZWZcIl0pO1xuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VDb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICB2YXIgYmFzZXBhdGggPSBfcmVmNS5iYXNlcGF0aCxcbiAgICAgICAgYmFzZXVyaSA9IF9yZWY1LmJhc2V1cmk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9jYXRpb24sIG51bGwsIGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgdmFyIGxvY2F0aW9uID0gX3JlZjYubG9jYXRpb24sXG4gICAgICAgICAgbmF2aWdhdGUgPSBfcmVmNi5uYXZpZ2F0ZTtcblxuICAgICAgdmFyIHRvID0gcHJvcHMudG8sXG4gICAgICAgICAgc3RhdGUgPSBwcm9wcy5zdGF0ZSxcbiAgICAgICAgICByZXBsYWNlID0gcHJvcHMucmVwbGFjZSxcbiAgICAgICAgICBfcHJvcHMkZ2V0UHJvcHMgPSBwcm9wcy5nZXRQcm9wcyxcbiAgICAgICAgICBnZXRQcm9wcyA9IF9wcm9wcyRnZXRQcm9wcyA9PT0gdW5kZWZpbmVkID8gayA6IF9wcm9wcyRnZXRQcm9wcyxcbiAgICAgICAgICBhbmNob3JQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgW1widG9cIiwgXCJzdGF0ZVwiLCBcInJlcGxhY2VcIiwgXCJnZXRQcm9wc1wiXSk7XG5cbiAgICAgIHZhciBocmVmID0gcmVzb2x2ZSh0bywgYmFzZXVyaSk7XG4gICAgICB2YXIgZW5jb2RlZEhyZWYgPSBlbmNvZGVVUkkoaHJlZik7XG4gICAgICB2YXIgaXNDdXJyZW50ID0gbG9jYXRpb24ucGF0aG5hbWUgPT09IGVuY29kZWRIcmVmO1xuICAgICAgdmFyIGlzUGFydGlhbGx5Q3VycmVudCA9IHN0YXJ0c1dpdGgobG9jYXRpb24ucGF0aG5hbWUsIGVuY29kZWRIcmVmKTtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogcmVmIHx8IGlubmVyUmVmLFxuICAgICAgICBcImFyaWEtY3VycmVudFwiOiBpc0N1cnJlbnQgPyBcInBhZ2VcIiA6IHVuZGVmaW5lZFxuICAgICAgfSwgYW5jaG9yUHJvcHMsIGdldFByb3BzKHtcbiAgICAgICAgaXNDdXJyZW50OiBpc0N1cnJlbnQsXG4gICAgICAgIGlzUGFydGlhbGx5Q3VycmVudDogaXNQYXJ0aWFsbHlDdXJyZW50LFxuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25cbiAgICAgIH0pLCB7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgICBpZiAoYW5jaG9yUHJvcHMub25DbGljaykgYW5jaG9yUHJvcHMub25DbGljayhldmVudCk7XG5cbiAgICAgICAgICBpZiAoc2hvdWxkTmF2aWdhdGUoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIHNob3VsZFJlcGxhY2UgPSByZXBsYWNlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2UgIT09IFwiYm9vbGVhblwiICYmIGlzQ3VycmVudCkge1xuICAgICAgICAgICAgICB2YXIgX2xvY2F0aW9uJHN0YXRlID0gX2V4dGVuZHMoe30sIGxvY2F0aW9uLnN0YXRlKSxcbiAgICAgICAgICAgICAgICAgIGtleSA9IF9sb2NhdGlvbiRzdGF0ZS5rZXksXG4gICAgICAgICAgICAgICAgICByZXN0U3RhdGUgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2xvY2F0aW9uJHN0YXRlLCBbXCJrZXlcIl0pO1xuXG4gICAgICAgICAgICAgIHNob3VsZFJlcGxhY2UgPSBzaGFsbG93Q29tcGFyZShfZXh0ZW5kcyh7fSwgc3RhdGUpLCByZXN0U3RhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuYXZpZ2F0ZShocmVmLCB7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgcmVwbGFjZTogc2hvdWxkUmVwbGFjZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5MaW5rLmRpc3BsYXlOYW1lID0gXCJMaW5rXCI7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB2b2lkIDAgOiB2b2lkIDA7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIFJlZGlyZWN0UmVxdWVzdCh1cmkpIHtcbiAgdGhpcy51cmkgPSB1cmk7XG59XG5cbnZhciBpc1JlZGlyZWN0ID0gZnVuY3Rpb24gaXNSZWRpcmVjdChvKSB7XG4gIHJldHVybiBvIGluc3RhbmNlb2YgUmVkaXJlY3RSZXF1ZXN0O1xufTtcblxudmFyIHJlZGlyZWN0VG8gPSBmdW5jdGlvbiByZWRpcmVjdFRvKHRvKSB7XG4gIHRocm93IG5ldyBSZWRpcmVjdFJlcXVlc3QodG8pO1xufTtcblxudmFyIFJlZGlyZWN0SW1wbCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50Mykge1xuICBfaW5oZXJpdHMoUmVkaXJlY3RJbXBsLCBfUmVhY3QkQ29tcG9uZW50Myk7XG5cbiAgZnVuY3Rpb24gUmVkaXJlY3RJbXBsKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWRpcmVjdEltcGwpO1xuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9IC8vIFN1cHBvcnQgUmVhY3QgPCAxNiB3aXRoIHRoaXMgaG9va1xuXG5cbiAgUmVkaXJlY3RJbXBsLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgbmF2aWdhdGUgPSBfcHJvcHMzLm5hdmlnYXRlLFxuICAgICAgICB0byA9IF9wcm9wczMudG8sXG4gICAgICAgIGZyb20gPSBfcHJvcHMzLmZyb20sXG4gICAgICAgIF9wcm9wczMkcmVwbGFjZSA9IF9wcm9wczMucmVwbGFjZSxcbiAgICAgICAgcmVwbGFjZSA9IF9wcm9wczMkcmVwbGFjZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9wcm9wczMkcmVwbGFjZSxcbiAgICAgICAgc3RhdGUgPSBfcHJvcHMzLnN0YXRlLFxuICAgICAgICBub1Rocm93ID0gX3Byb3BzMy5ub1Rocm93LFxuICAgICAgICBiYXNldXJpID0gX3Byb3BzMy5iYXNldXJpLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMzLCBbXCJuYXZpZ2F0ZVwiLCBcInRvXCIsIFwiZnJvbVwiLCBcInJlcGxhY2VcIiwgXCJzdGF0ZVwiLCBcIm5vVGhyb3dcIiwgXCJiYXNldXJpXCJdKTtcblxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc29sdmVkVG8gPSByZXNvbHZlKHRvLCBiYXNldXJpKTtcbiAgICAgIG5hdmlnYXRlKGluc2VydFBhcmFtcyhyZXNvbHZlZFRvLCBwcm9wcyksIHtcbiAgICAgICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICAgICAgc3RhdGU6IHN0YXRlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBSZWRpcmVjdEltcGwucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIG5hdmlnYXRlID0gX3Byb3BzNC5uYXZpZ2F0ZSxcbiAgICAgICAgdG8gPSBfcHJvcHM0LnRvLFxuICAgICAgICBmcm9tID0gX3Byb3BzNC5mcm9tLFxuICAgICAgICByZXBsYWNlID0gX3Byb3BzNC5yZXBsYWNlLFxuICAgICAgICBzdGF0ZSA9IF9wcm9wczQuc3RhdGUsXG4gICAgICAgIG5vVGhyb3cgPSBfcHJvcHM0Lm5vVGhyb3csXG4gICAgICAgIGJhc2V1cmkgPSBfcHJvcHM0LmJhc2V1cmksXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFtcIm5hdmlnYXRlXCIsIFwidG9cIiwgXCJmcm9tXCIsIFwicmVwbGFjZVwiLCBcInN0YXRlXCIsIFwibm9UaHJvd1wiLCBcImJhc2V1cmlcIl0pO1xuXG4gICAgdmFyIHJlc29sdmVkVG8gPSByZXNvbHZlKHRvLCBiYXNldXJpKTtcbiAgICBpZiAoIW5vVGhyb3cpIHJlZGlyZWN0VG8oaW5zZXJ0UGFyYW1zKHJlc29sdmVkVG8sIHByb3BzKSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIFJlZGlyZWN0SW1wbDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxudmFyIFJlZGlyZWN0ID0gZnVuY3Rpb24gUmVkaXJlY3QocHJvcHMpIHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUNvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChfcmVmNykge1xuICAgIHZhciBiYXNldXJpID0gX3JlZjcuYmFzZXVyaTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2NhdGlvbiwgbnVsbCwgZnVuY3Rpb24gKGxvY2F0aW9uQ29udGV4dCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVkaXJlY3RJbXBsLCBfZXh0ZW5kcyh7fSwgbG9jYXRpb25Db250ZXh0LCB7XG4gICAgICAgIGJhc2V1cmk6IGJhc2V1cmlcbiAgICAgIH0sIHByb3BzKSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gdm9pZCAwIDogdm9pZCAwOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG52YXIgTWF0Y2ggPSBmdW5jdGlvbiBNYXRjaChfcmVmOCkge1xuICB2YXIgcGF0aCA9IF9yZWY4LnBhdGgsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY4LmNoaWxkcmVuO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQ29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKF9yZWY5KSB7XG4gICAgdmFyIGJhc2V1cmkgPSBfcmVmOS5iYXNldXJpO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uLCBudWxsLCBmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgICB2YXIgbmF2aWdhdGUgPSBfcmVmMTAubmF2aWdhdGUsXG4gICAgICAgICAgbG9jYXRpb24gPSBfcmVmMTAubG9jYXRpb247XG4gICAgICB2YXIgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShwYXRoLCBiYXNldXJpKTtcbiAgICAgIHZhciByZXN1bHQgPSBtYXRjaChyZXNvbHZlZFBhdGgsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgIHJldHVybiBjaGlsZHJlbih7XG4gICAgICAgIG5hdmlnYXRlOiBuYXZpZ2F0ZSxcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICBtYXRjaDogcmVzdWx0ID8gX2V4dGVuZHMoe30sIHJlc3VsdC5wYXJhbXMsIHtcbiAgICAgICAgICB1cmk6IHJlc3VsdC51cmksXG4gICAgICAgICAgcGF0aDogcGF0aFxuICAgICAgICB9KSA6IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBIb29rc1xuXG5cbnZhciB1c2VMb2NhdGlvbiA9IGZ1bmN0aW9uIHVzZUxvY2F0aW9uKCkge1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoTG9jYXRpb25Db250ZXh0KTtcblxuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VMb2NhdGlvbiBob29rIHdhcyB1c2VkIGJ1dCBhIExvY2F0aW9uQ29udGV4dC5Qcm92aWRlciB3YXMgbm90IGZvdW5kIGluIHRoZSBwYXJlbnQgdHJlZS4gTWFrZSBzdXJlIHRoaXMgaXMgdXNlZCBpbiBhIGNvbXBvbmVudCB0aGF0IGlzIGEgY2hpbGQgb2YgUm91dGVyXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRleHQubG9jYXRpb247XG59O1xuXG52YXIgdXNlTmF2aWdhdGUgPSBmdW5jdGlvbiB1c2VOYXZpZ2F0ZSgpIHtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KEJhc2VDb250ZXh0KTtcblxuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VOYXZpZ2F0ZSBob29rIHdhcyB1c2VkIGJ1dCBhIEJhc2VDb250ZXh0LlByb3ZpZGVyIHdhcyBub3QgZm91bmQgaW4gdGhlIHBhcmVudCB0cmVlLiBNYWtlIHN1cmUgdGhpcyBpcyB1c2VkIGluIGEgY29tcG9uZW50IHRoYXQgaXMgYSBjaGlsZCBvZiBSb3V0ZXJcIik7XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5uYXZpZ2F0ZTtcbn07XG5cbnZhciB1c2VQYXJhbXMgPSBmdW5jdGlvbiB1c2VQYXJhbXMoKSB7XG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChCYXNlQ29udGV4dCk7XG5cbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlUGFyYW1zIGhvb2sgd2FzIHVzZWQgYnV0IGEgTG9jYXRpb25Db250ZXh0LlByb3ZpZGVyIHdhcyBub3QgZm91bmQgaW4gdGhlIHBhcmVudCB0cmVlLiBNYWtlIHN1cmUgdGhpcyBpcyB1c2VkIGluIGEgY29tcG9uZW50IHRoYXQgaXMgYSBjaGlsZCBvZiBSb3V0ZXJcIik7XG4gIH1cblxuICB2YXIgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICB2YXIgcmVzdWx0cyA9IG1hdGNoKGNvbnRleHQuYmFzZXBhdGgsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgcmV0dXJuIHJlc3VsdHMgPyByZXN1bHRzLnBhcmFtcyA6IG51bGw7XG59O1xuXG52YXIgdXNlTWF0Y2ggPSBmdW5jdGlvbiB1c2VNYXRjaChwYXRoKSB7XG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInVzZU1hdGNoKHBhdGg6IHN0cmluZykgcmVxdWlyZXMgYW4gYXJndW1lbnQgb2YgYSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdFwiKTtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChCYXNlQ29udGV4dCk7XG5cbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlTWF0Y2ggaG9vayB3YXMgdXNlZCBidXQgYSBMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcGFyZW50IHRyZWUuIE1ha2Ugc3VyZSB0aGlzIGlzIHVzZWQgaW4gYSBjb21wb25lbnQgdGhhdCBpcyBhIGNoaWxkIG9mIFJvdXRlclwiKTtcbiAgfVxuXG4gIHZhciBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIHZhciByZXNvbHZlZFBhdGggPSByZXNvbHZlKHBhdGgsIGNvbnRleHQuYmFzZXVyaSk7XG4gIHZhciByZXN1bHQgPSBtYXRjaChyZXNvbHZlZFBhdGgsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgcmV0dXJuIHJlc3VsdCA/IF9leHRlbmRzKHt9LCByZXN1bHQucGFyYW1zLCB7XG4gICAgdXJpOiByZXN1bHQudXJpLFxuICAgIHBhdGg6IHBhdGhcbiAgfSkgOiBudWxsO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEp1bmtcblxuXG52YXIgc3RyaXBTbGFzaGVzID0gZnVuY3Rpb24gc3RyaXBTbGFzaGVzKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyheXFwvK3xcXC8rJCkvZywgXCJcIik7XG59O1xuXG52YXIgY3JlYXRlUm91dGUgPSBmdW5jdGlvbiBjcmVhdGVSb3V0ZShiYXNlcGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJlYWN0LkZyYWdtZW50ICYmIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBSZWFjdC5DaGlsZHJlbi5tYXAoZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgY3JlYXRlUm91dGUoYmFzZXBhdGgpKTtcbiAgICB9XG5cbiAgICAhKGVsZW1lbnQucHJvcHMucGF0aCB8fCBlbGVtZW50LnByb3BzLmRlZmF1bHQgfHwgZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiPFJvdXRlcj46IENoaWxkcmVuIG9mIDxSb3V0ZXI+IG11c3QgaGF2ZSBhIGBwYXRoYCBvciBgZGVmYXVsdGAgcHJvcCwgb3IgYmUgYSBgPFJlZGlyZWN0PmAuIE5vbmUgZm91bmQgb24gZWxlbWVudCB0eXBlIGBcIiArIGVsZW1lbnQudHlwZSArIFwiYFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgISEoZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCAmJiAoIWVsZW1lbnQucHJvcHMuZnJvbSB8fCAhZWxlbWVudC5wcm9wcy50bykpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIjxSZWRpcmVjdCBmcm9tPVxcXCJcIiArIGVsZW1lbnQucHJvcHMuZnJvbSArIFwiXFxcIiB0bz1cXFwiXCIgKyBlbGVtZW50LnByb3BzLnRvICsgXCJcXFwiLz4gcmVxdWlyZXMgYm90aCBcXFwiZnJvbVxcXCIgYW5kIFxcXCJ0b1xcXCIgcHJvcHMgd2hlbiBpbnNpZGUgYSA8Um91dGVyPi5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICEhKGVsZW1lbnQudHlwZSA9PT0gUmVkaXJlY3QgJiYgIXZhbGlkYXRlUmVkaXJlY3QoZWxlbWVudC5wcm9wcy5mcm9tLCBlbGVtZW50LnByb3BzLnRvKSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiPFJlZGlyZWN0IGZyb209XFxcIlwiICsgZWxlbWVudC5wcm9wcy5mcm9tICsgXCIgdG89XFxcIlwiICsgZWxlbWVudC5wcm9wcy50byArIFwiXFxcIi8+IGhhcyBtaXNtYXRjaGVkIGR5bmFtaWMgc2VnbWVudHMsIGVuc3VyZSBib3RoIHBhdGhzIGhhdmUgdGhlIGV4YWN0IHNhbWUgZHluYW1pYyBzZWdtZW50cy5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gICAgaWYgKGVsZW1lbnQucHJvcHMuZGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRQYXRoID0gZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCA/IGVsZW1lbnQucHJvcHMuZnJvbSA6IGVsZW1lbnQucHJvcHMucGF0aDtcbiAgICB2YXIgcGF0aCA9IGVsZW1lbnRQYXRoID09PSBcIi9cIiA/IGJhc2VwYXRoIDogc3RyaXBTbGFzaGVzKGJhc2VwYXRoKSArIFwiL1wiICsgc3RyaXBTbGFzaGVzKGVsZW1lbnRQYXRoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IGVsZW1lbnQsXG4gICAgICBkZWZhdWx0OiBlbGVtZW50LnByb3BzLmRlZmF1bHQsXG4gICAgICBwYXRoOiBlbGVtZW50LnByb3BzLmNoaWxkcmVuID8gc3RyaXBTbGFzaGVzKHBhdGgpICsgXCIvKlwiIDogcGF0aFxuICAgIH07XG4gIH07XG59O1xuXG52YXIgc2hvdWxkTmF2aWdhdGUgPSBmdW5jdGlvbiBzaG91bGROYXZpZ2F0ZShldmVudCkge1xuICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgZXZlbnQuYnV0dG9uID09PSAwICYmICEoZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSk7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG5leHBvcnQgeyAgTGluaywgTG9jYXRpb24sIExvY2F0aW9uUHJvdmlkZXIsIE1hdGNoLCBSZWRpcmVjdCwgUm91dGVyLCBTZXJ2ZXJMb2NhdGlvbiwgY3JlYXRlSGlzdG9yeSwgY3JlYXRlTWVtb3J5U291cmNlLCBpc1JlZGlyZWN0LCBuYXZpZ2F0ZSwgcmVkaXJlY3RUbywgZ2xvYmFsSGlzdG9yeSwgbWF0Y2ggYXMgbWF0Y2hQYXRoLCB1c2VMb2NhdGlvbiwgdXNlTmF2aWdhdGUsIHVzZVBhcmFtcywgdXNlTWF0Y2ggLCBCYXNlQ29udGV4dCB9OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9499\n')},1143:function(module){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (false) {}\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9pbnZhcmlhbnQvYnJvd3Nlci5qcz80MGI2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sS0FBcUMsRUFBRSxFQUkxQzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyx5QkFBeUIsRUFBRTtBQUNyRTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIxMTQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciBpbnZhcmlhbnQgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXG4gICAgICApO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1143\n")}},function(n){"use strict";n.O(0,[532,774,349],(function(){return I=2871,n(n.s=I);var I}));n.O()}]); |