1496 lines
6.1 MiB
1496 lines
6.1 MiB
/*
|
||
* ATTENTION: An "eval-source-map" devtool has been used.
|
||
* This devtool is neither made for production nor for readable output files.
|
||
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
||
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
||
* or disable the default devtool with "devtool: false".
|
||
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
||
*/
|
||
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["main"],{
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _class_private_field_loose_base)\n/* harmony export */ });\nfunction _class_private_field_loose_base(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n\n return receiver;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDZ0QiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcQHN3Y1xcaGVscGVyc1xcZXNtXFxfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UocmVjZWl2ZXIsIHByaXZhdGVLZXkpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNlaXZlciwgcHJpdmF0ZUtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY2VpdmVyO1xufVxuZXhwb3J0IHsgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZSBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _class_private_field_loose_key)\n/* harmony export */ });\nvar id = 0;\n\nfunction _class_private_field_loose_key(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQytDIiwic291cmNlcyI6WyJEOlxcZG9uZ3l1bi1wcm9qZWN0c1xcdHdvXFxub2RlX21vZHVsZXNcXEBzd2NcXGhlbHBlcnNcXGVzbVxcX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG5cbmZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleShuYW1lKSB7XG4gICAgcmV0dXJuIFwiX19wcml2YXRlX1wiICsgaWQrKyArIFwiX1wiICsgbmFtZTtcbn1cbmV4cG9ydCB7IF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleSBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_interop_require_default.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _interop_require_default)\n/* harmony export */ });\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDeUMiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcQHN3Y1xcaGVscGVyc1xcZXNtXFxfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9O1xufVxuZXhwb3J0IHsgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_interop_require_wildcard.js ***!
|
||
\********************************************************************/
|
||
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _interop_require_wildcard)\n/* harmony export */ });\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHVGQUF1Rjs7QUFFdkY7O0FBRUE7O0FBRUEsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDMEMiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcQHN3Y1xcaGVscGVyc1xcZXNtXFxfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkge1xuICAgIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcblxuICAgIHZhciBjYWNoZUJhYmVsSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgdmFyIGNhY2hlTm9kZUludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbihub2RlSW50ZXJvcCkge1xuICAgICAgICByZXR1cm4gbm9kZUludGVyb3AgPyBjYWNoZU5vZGVJbnRlcm9wIDogY2FjaGVCYWJlbEludGVyb3A7XG4gICAgfSkobm9kZUludGVyb3ApO1xufVxuZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZChvYmosIG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKCFub2RlSW50ZXJvcCAmJiBvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHJldHVybiBvYmo7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHsgZGVmYXVsdDogb2JqIH07XG5cbiAgICB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApO1xuXG4gICAgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSByZXR1cm4gY2FjaGUuZ2V0KG9iaik7XG5cbiAgICB2YXIgbmV3T2JqID0geyBfX3Byb3RvX186IG51bGwgfTtcbiAgICB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChrZXkgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTtcbiAgICAgICAgICAgIGVsc2UgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5ld09iai5kZWZhdWx0ID0gb2JqO1xuXG4gICAgaWYgKGNhY2hlKSBjYWNoZS5zZXQob2JqLCBuZXdPYmopO1xuXG4gICAgcmV0dXJuIG5ld09iajtcbn1cbmV4cG9ydCB7IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgYXMgXyB9O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/build/deployment-id.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/build/deployment-id.js ***!
|
||
\*******************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getDeploymentIdQueryOrEmptyString\", ({\n enumerable: true,\n get: function() {\n return getDeploymentIdQueryOrEmptyString;\n }\n}));\nfunction getDeploymentIdQueryOrEmptyString() {\n if (false) {}\n return '';\n}\n\n//# sourceMappingURL=deployment-id.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvZGVwbG95bWVudC1pZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLHFFQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0EsUUFBUSxLQUE4QixFQUFFLEVBRW5DO0FBQ0w7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxidWlsZFxcZGVwbG95bWVudC1pZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZ1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSUQpIHtcbiAgICAgICAgcmV0dXJuIGA/ZHBsPSR7cHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEfWA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVwbG95bWVudC1pZC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/build/deployment-id.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/build/polyfills/polyfill-module.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/build/polyfills/polyfill-module.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("\"trimStart\"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),\"trimEnd\"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),\"description\"in Symbol.prototype||Object.defineProperty(Symbol.prototype,\"description\",{configurable:!0,get:function(){var t=/\\((.*)\\)/.exec(this.toString());return t?t[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(t,r){return r=this.concat.apply([],this),t>1&&r.some(Array.isArray)?r.flat(t-1):r},Array.prototype.flatMap=function(t,r){return this.map(t,r).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(t){if(\"function\"!=typeof t)return this.then(t,t);var r=this.constructor||Promise;return this.then(function(n){return r.resolve(t()).then(function(){return n})},function(n){return r.resolve(t()).then(function(){throw n})})}),Object.fromEntries||(Object.fromEntries=function(t){return Array.from(t).reduce(function(t,r){return t[r[0]]=r[1],t},{})}),Array.prototype.at||(Array.prototype.at=function(t){var r=Math.trunc(t)||0;if(r<0&&(r+=this.length),!(r<0||r>=this.length))return this[r]}),Object.hasOwn||(Object.hasOwn=function(t,r){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");return Object.prototype.hasOwnProperty.call(Object(t),r)}),\"canParse\"in URL||(URL.canParse=function(t,r){try{return!!new URL(t,r)}catch(t){return!1}});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3BvbHlmaWxsLW1vZHVsZS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtUUFBbVEsK0JBQStCLHVDQUF1QyxzQkFBc0IsNERBQTRELDZFQUE2RSx1Q0FBdUMsNEJBQTRCLG9FQUFvRSw4Q0FBOEMsZ0NBQWdDLDZCQUE2QixzQ0FBc0MsU0FBUyxFQUFFLGFBQWEsc0NBQXNDLFFBQVEsRUFBRSxFQUFFLHNEQUFzRCwwQ0FBMEMsc0JBQXNCLEdBQUcsRUFBRSxzREFBc0QsdUJBQXVCLCtEQUErRCw4Q0FBOEMsNkVBQTZFLHlEQUF5RCxnREFBZ0QsSUFBSSxxQkFBcUIsU0FBUyxVQUFVIiwic291cmNlcyI6WyJEOlxcZG9uZ3l1bi1wcm9qZWN0c1xcdHdvXFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXGJ1aWxkXFxwb2x5ZmlsbHNcXHBvbHlmaWxsLW1vZHVsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInRyaW1TdGFydFwiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbVN0YXJ0PVN0cmluZy5wcm90b3R5cGUudHJpbUxlZnQpLFwidHJpbUVuZFwiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbUVuZD1TdHJpbmcucHJvdG90eXBlLnRyaW1SaWdodCksXCJkZXNjcmlwdGlvblwiaW4gU3ltYm9sLnByb3RvdHlwZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsXCJkZXNjcmlwdGlvblwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9L1xcKCguKilcXCkvLmV4ZWModGhpcy50b1N0cmluZygpKTtyZXR1cm4gdD90WzFdOnZvaWQgMH19KSxBcnJheS5wcm90b3R5cGUuZmxhdHx8KEFycmF5LnByb3RvdHlwZS5mbGF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIHI9dGhpcy5jb25jYXQuYXBwbHkoW10sdGhpcyksdD4xJiZyLnNvbWUoQXJyYXkuaXNBcnJheSk/ci5mbGF0KHQtMSk6cn0sQXJyYXkucHJvdG90eXBlLmZsYXRNYXA9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5tYXAodCxyKS5mbGF0KCl9KSxQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5fHwoUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXJldHVybiB0aGlzLnRoZW4odCx0KTt2YXIgcj10aGlzLmNvbnN0cnVjdG9yfHxQcm9taXNlO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbihuKXtyZXR1cm4gci5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IG59KX0pfSksT2JqZWN0LmZyb21FbnRyaWVzfHwoT2JqZWN0LmZyb21FbnRyaWVzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5mcm9tKHQpLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiB0W3JbMF1dPXJbMV0sdH0se30pfSksQXJyYXkucHJvdG90eXBlLmF0fHwoQXJyYXkucHJvdG90eXBlLmF0PWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgudHJ1bmModCl8fDA7aWYocjwwJiYocis9dGhpcy5sZW5ndGgpLCEocjwwfHxyPj10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXNbcl19KSxPYmplY3QuaGFzT3dufHwoT2JqZWN0Lmhhc093bj1mdW5jdGlvbih0LHIpe2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE9iamVjdCh0KSxyKX0pLFwiY2FuUGFyc2VcImluIFVSTHx8KFVSTC5jYW5QYXJzZT1mdW5jdGlvbih0LHIpe3RyeXtyZXR1cm4hIW5ldyBVUkwodCxyKX1jYXRjaCh0KXtyZXR1cm4hMX19KTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/build/polyfills/polyfill-module.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/add-base-path.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/add-base-path.js ***!
|
||
\********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addBasePath\", ({\n enumerable: true,\n get: function() {\n return addBasePath;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ../shared/lib/router/utils/add-path-prefix */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(pages-dir-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath = false || '';\nfunction addBasePath(path, required) {\n return (0, _normalizetrailingslash.normalizePathTrailingSlash)( false ? 0 : (0, _addpathprefix.addPathPrefix)(path, basePath));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OzsrQ0FLZ0JBOzs7ZUFBQUE7OzsyQ0FMYztvREFDYTtBQUUzQyxNQUFNQyxXQUFZQyxNQUFrQyxJQUFlO0FBRTVELFNBQVNGLFlBQVlLLElBQVksRUFBRUMsUUFBa0I7SUFDMUQsT0FBT0MsQ0FBQUEsR0FBQUEsd0JBQUFBLDBCQUFBQSxFQUNMTCxNQUF1REksR0FDbkRELENBQUlBLEdBQ0pJLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNKLE1BQU1KO0FBRTVCIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXGFkZC1iYXNlLXBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkUGF0aFByZWZpeCB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1wYXRoLXByZWZpeCdcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2gnXG5cbmNvbnN0IGJhc2VQYXRoID0gKHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggYXMgc3RyaW5nKSB8fCAnJ1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQmFzZVBhdGgocGF0aDogc3RyaW5nLCByZXF1aXJlZD86IGJvb2xlYW4pOiBzdHJpbmcge1xuICByZXR1cm4gbm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2goXG4gICAgcHJvY2Vzcy5lbnYuX19ORVhUX01BTlVBTF9DTElFTlRfQkFTRV9QQVRIICYmICFyZXF1aXJlZFxuICAgICAgPyBwYXRoXG4gICAgICA6IGFkZFBhdGhQcmVmaXgocGF0aCwgYmFzZVBhdGgpXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJhZGRCYXNlUGF0aCIsImJhc2VQYXRoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9ST1VURVJfQkFTRVBBVEgiLCJwYXRoIiwicmVxdWlyZWQiLCJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCIsIl9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCIsImFkZFBhdGhQcmVmaXgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/add-base-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/add-locale.js":
|
||
/*!*****************************************************!*\
|
||
!*** ./node_modules/next/dist/client/add-locale.js ***!
|
||
\*****************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(pages-dir-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst addLocale = function(path) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (false) {}\n return path;\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1sb2NhbGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs2Q0FHYUE7OztlQUFBQTs7O29EQUY4QjtBQUVwQyxNQUFNQSxZQUF1QixTQUFDQyxJQUFBQTtxQ0FBU0MsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsSUFBQUEsT0FBQUEsSUFBQUEsSUFBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7UUFBQUEsSUFBQUEsQ0FBQUEsT0FBQUEsRUFBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O0lBQzVDLElBQUlDLEtBQStCLEVBQUUsRUFNcEM7SUFDRCxPQUFPRjtBQUNUIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXGFkZC1sb2NhbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBhZGRMb2NhbGUgYXMgRm4gfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtbG9jYWxlJ1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2ggfSBmcm9tICcuL25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaCdcblxuZXhwb3J0IGNvbnN0IGFkZExvY2FsZTogdHlwZW9mIEZuID0gKHBhdGgsIC4uLmFyZ3MpID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2goXG4gICAgICAoXG4gICAgICAgIHJlcXVpcmUoJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1sb2NhbGUnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtbG9jYWxlJylcbiAgICAgICkuYWRkTG9jYWxlKHBhdGgsIC4uLmFyZ3MpXG4gICAgKVxuICB9XG4gIHJldHVybiBwYXRoXG59XG4iXSwibmFtZXMiOlsiYWRkTG9jYWxlIiwicGF0aCIsImFyZ3MiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsIm5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoIiwicmVxdWlyZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/add-locale.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js":
|
||
/*!***********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js ***!
|
||
\***********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n HTTPAccessErrorStatus: function() {\n return HTTPAccessErrorStatus;\n },\n HTTP_ERROR_FALLBACK_ERROR_CODE: function() {\n return HTTP_ERROR_FALLBACK_ERROR_CODE;\n },\n getAccessFallbackErrorTypeByStatus: function() {\n return getAccessFallbackErrorTypeByStatus;\n },\n getAccessFallbackHTTPStatus: function() {\n return getAccessFallbackHTTPStatus;\n },\n isHTTPAccessFallbackError: function() {\n return isHTTPAccessFallbackError;\n }\n});\nconst HTTPAccessErrorStatus = {\n NOT_FOUND: 404,\n FORBIDDEN: 403,\n UNAUTHORIZED: 401\n};\nconst ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus));\nconst HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK';\nfunction isHTTPAccessFallbackError(error) {\n if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') {\n return false;\n }\n const [prefix, httpStatus] = error.digest.split(';');\n return prefix === HTTP_ERROR_FALLBACK_ERROR_CODE && ALLOWED_CODES.has(Number(httpStatus));\n}\nfunction getAccessFallbackHTTPStatus(error) {\n const httpStatus = error.digest.split(';')[1];\n return Number(httpStatus);\n}\nfunction getAccessFallbackErrorTypeByStatus(status) {\n switch(status){\n case 401:\n return 'unauthorized';\n case 403:\n return 'forbidden';\n case 404:\n return 'not-found';\n default:\n return;\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=http-access-fallback.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaHR0cC1hY2Nlc3MtZmFsbGJhY2svaHR0cC1hY2Nlc3MtZmFsbGJhY2suanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQWFBLHFCQUFxQjtlQUFyQkE7O0lBUUFDLDhCQUE4QjtlQUE5QkE7O0lBdUNHQyxrQ0FBa0M7ZUFBbENBOztJQVBBQywyQkFBMkI7ZUFBM0JBOztJQW5CQUMseUJBQXlCO2VBQXpCQTs7O0FBckJULE1BQU1KLHdCQUF3QjtJQUNuQ0ssV0FBVztJQUNYQyxXQUFXO0lBQ1hDLGNBQWM7QUFDaEI7QUFFQSxNQUFNQyxnQkFBZ0IsSUFBSUMsSUFBSUMsT0FBT0MsTUFBTSxDQUFDWDtBQUVyQyxNQUFNQyxpQ0FBaUM7QUFhdkMsU0FBU0csMEJBQ2RRLEtBQWM7SUFFZCxJQUNFLE9BQU9BLFVBQVUsWUFDakJBLFVBQVUsUUFDVixDQUFFLGFBQVlBLEtBQUFBLENBQUksSUFDbEIsT0FBT0EsTUFBTUMsTUFBTSxLQUFLLFVBQ3hCO1FBQ0EsT0FBTztJQUNUO0lBQ0EsTUFBTSxDQUFDQyxRQUFRQyxXQUFXLEdBQUdILE1BQU1DLE1BQU0sQ0FBQ0csS0FBSyxDQUFDO0lBRWhELE9BQ0VGLFdBQVdiLGtDQUNYTyxjQUFjUyxHQUFHLENBQUNDLE9BQU9IO0FBRTdCO0FBRU8sU0FBU1osNEJBQ2RTLEtBQThCO0lBRTlCLE1BQU1HLGFBQWFILE1BQU1DLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQzdDLE9BQU9FLE9BQU9IO0FBQ2hCO0FBRU8sU0FBU2IsbUNBQ2RpQixNQUFjO0lBRWQsT0FBUUE7UUFDTixLQUFLO1lBQ0gsT0FBTztRQUNULEtBQUs7WUFDSCxPQUFPO1FBQ1QsS0FBSztZQUNILE9BQU87UUFDVDtZQUNFO0lBQ0o7QUFDRiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxjb21wb25lbnRzXFxodHRwLWFjY2Vzcy1mYWxsYmFja1xcaHR0cC1hY2Nlc3MtZmFsbGJhY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEhUVFBBY2Nlc3NFcnJvclN0YXR1cyA9IHtcbiAgTk9UX0ZPVU5EOiA0MDQsXG4gIEZPUkJJRERFTjogNDAzLFxuICBVTkFVVEhPUklaRUQ6IDQwMSxcbn1cblxuY29uc3QgQUxMT1dFRF9DT0RFUyA9IG5ldyBTZXQoT2JqZWN0LnZhbHVlcyhIVFRQQWNjZXNzRXJyb3JTdGF0dXMpKVxuXG5leHBvcnQgY29uc3QgSFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFID0gJ05FWFRfSFRUUF9FUlJPUl9GQUxMQkFDSydcblxuZXhwb3J0IHR5cGUgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IgPSBFcnJvciAmIHtcbiAgZGlnZXN0OiBgJHt0eXBlb2YgSFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFfTske3N0cmluZ31gXG59XG5cbi8qKlxuICogQ2hlY2tzIGFuIGVycm9yIHRvIGRldGVybWluZSBpZiBpdCdzIGFuIGVycm9yIGdlbmVyYXRlZCBieVxuICogdGhlIEhUVFAgbmF2aWdhdGlvbiBBUElzIGBub3RGb3VuZCgpYCwgYGZvcmJpZGRlbigpYCBvciBgdW5hdXRob3JpemVkKClgLlxuICpcbiAqIEBwYXJhbSBlcnJvciB0aGUgZXJyb3IgdGhhdCBtYXkgcmVmZXJlbmNlIGEgSFRUUCBhY2Nlc3MgZXJyb3JcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGVycm9yIGlzIGEgSFRUUCBhY2Nlc3MgZXJyb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IoXG4gIGVycm9yOiB1bmtub3duXG4pOiBlcnJvciBpcyBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvciB7XG4gIGlmIChcbiAgICB0eXBlb2YgZXJyb3IgIT09ICdvYmplY3QnIHx8XG4gICAgZXJyb3IgPT09IG51bGwgfHxcbiAgICAhKCdkaWdlc3QnIGluIGVycm9yKSB8fFxuICAgIHR5cGVvZiBlcnJvci5kaWdlc3QgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IFtwcmVmaXgsIGh0dHBTdGF0dXNdID0gZXJyb3IuZGlnZXN0LnNwbGl0KCc7JylcblxuICByZXR1cm4gKFxuICAgIHByZWZpeCA9PT0gSFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFICYmXG4gICAgQUxMT1dFRF9DT0RFUy5oYXMoTnVtYmVyKGh0dHBTdGF0dXMpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2Nlc3NGYWxsYmFja0hUVFBTdGF0dXMoXG4gIGVycm9yOiBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvclxuKTogbnVtYmVyIHtcbiAgY29uc3QgaHR0cFN0YXR1cyA9IGVycm9yLmRpZ2VzdC5zcGxpdCgnOycpWzFdXG4gIHJldHVybiBOdW1iZXIoaHR0cFN0YXR1cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFjY2Vzc0ZhbGxiYWNrRXJyb3JUeXBlQnlTdGF0dXMoXG4gIHN0YXR1czogbnVtYmVyXG4pOiAnbm90LWZvdW5kJyB8ICdmb3JiaWRkZW4nIHwgJ3VuYXV0aG9yaXplZCcgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgNDAxOlxuICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnXG4gICAgY2FzZSA0MDM6XG4gICAgICByZXR1cm4gJ2ZvcmJpZGRlbidcbiAgICBjYXNlIDQwNDpcbiAgICAgIHJldHVybiAnbm90LWZvdW5kJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm5cbiAgfVxufVxuIl0sIm5hbWVzIjpbIkhUVFBBY2Nlc3NFcnJvclN0YXR1cyIsIkhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSIsImdldEFjY2Vzc0ZhbGxiYWNrRXJyb3JUeXBlQnlTdGF0dXMiLCJnZXRBY2Nlc3NGYWxsYmFja0hUVFBTdGF0dXMiLCJpc0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yIiwiTk9UX0ZPVU5EIiwiRk9SQklEREVOIiwiVU5BVVRIT1JJWkVEIiwiQUxMT1dFRF9DT0RFUyIsIlNldCIsIk9iamVjdCIsInZhbHVlcyIsImVycm9yIiwiZGlnZXN0IiwicHJlZml4IiwiaHR0cFN0YXR1cyIsInNwbGl0IiwiaGFzIiwiTnVtYmVyIiwic3RhdHVzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/components/is-next-router-error.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/is-next-router-error.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isNextRouterError\", ({\n enumerable: true,\n get: function() {\n return isNextRouterError;\n }\n}));\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback/http-access-fallback */ \"(pages-dir-browser)/./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(pages-dir-browser)/./node_modules/next/dist/client/components/redirect-error.js\");\nfunction isNextRouterError(error) {\n return (0, _redirecterror.isRedirectError)(error) || (0, _httpaccessfallback.isHTTPAccessFallbackError)(error);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=is-next-router-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaXMtbmV4dC1yb3V0ZXItZXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7OztxREFXZ0JBOzs7ZUFBQUE7OztnREFSVDsyQ0FDNkM7QUFPN0MsU0FBU0Esa0JBQ2RDLEtBQWM7SUFFZCxPQUFPQyxDQUFBQSxHQUFBQSxlQUFBQSxlQUFBQSxFQUFnQkQsVUFBVUUsQ0FBQUEsR0FBQUEsb0JBQUFBLHlCQUFBQSxFQUEwQkY7QUFDN0QiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxcY29tcG9uZW50c1xcaXMtbmV4dC1yb3V0ZXItZXJyb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaXNIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcixcbiAgdHlwZSBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcixcbn0gZnJvbSAnLi9odHRwLWFjY2Vzcy1mYWxsYmFjay9odHRwLWFjY2Vzcy1mYWxsYmFjaydcbmltcG9ydCB7IGlzUmVkaXJlY3RFcnJvciwgdHlwZSBSZWRpcmVjdEVycm9yIH0gZnJvbSAnLi9yZWRpcmVjdC1lcnJvcidcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVycm9yIGlzIGEgbmF2aWdhdGlvbiBzaWduYWwgZXJyb3IuIFRoZXNlIGVycm9ycyBhcmVcbiAqIHRocm93biBieSB1c2VyIGNvZGUgdG8gcGVyZm9ybSBuYXZpZ2F0aW9uIG9wZXJhdGlvbnMgYW5kIGludGVycnVwdCB0aGUgUmVhY3RcbiAqIHJlbmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmV4dFJvdXRlckVycm9yKFxuICBlcnJvcjogdW5rbm93blxuKTogZXJyb3IgaXMgUmVkaXJlY3RFcnJvciB8IEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yIHtcbiAgcmV0dXJuIGlzUmVkaXJlY3RFcnJvcihlcnJvcikgfHwgaXNIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcihlcnJvcilcbn1cbiJdLCJuYW1lcyI6WyJpc05leHRSb3V0ZXJFcnJvciIsImVycm9yIiwiaXNSZWRpcmVjdEVycm9yIiwiaXNIVFRQQWNjZXNzRmFsbGJhY2tFcnJvciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/components/redirect-error.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/redirect-error.js ***!
|
||
\********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n REDIRECT_ERROR_CODE: function() {\n return REDIRECT_ERROR_CODE;\n },\n RedirectType: function() {\n return RedirectType;\n },\n isRedirectError: function() {\n return isRedirectError;\n }\n});\nconst _redirectstatuscode = __webpack_require__(/*! ./redirect-status-code */ \"(pages-dir-browser)/./node_modules/next/dist/client/components/redirect-status-code.js\");\nconst REDIRECT_ERROR_CODE = 'NEXT_REDIRECT';\nvar RedirectType = /*#__PURE__*/ function(RedirectType) {\n RedirectType[\"push\"] = \"push\";\n RedirectType[\"replace\"] = \"replace\";\n return RedirectType;\n}({});\nfunction isRedirectError(error) {\n if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') {\n return false;\n }\n const digest = error.digest.split(';');\n const [errorCode, type] = digest;\n const destination = digest.slice(2, -2).join(';');\n const status = digest.at(-2);\n const statusCode = Number(status);\n return errorCode === REDIRECT_ERROR_CODE && (type === 'replace' || type === 'push') && typeof destination === 'string' && !isNaN(statusCode) && statusCode in _redirectstatuscode.RedirectStatusCode;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QtZXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBRWFBLG1CQUFtQjtlQUFuQkE7O0lBRURDLFlBQVk7ZUFBWkE7O0lBZ0JJQyxlQUFlO2VBQWZBOzs7Z0RBcEJtQjtBQUU1QixNQUFNRixzQkFBc0I7QUFFNUIsSUFBS0MsZUFBQUEsV0FBQUEsR0FBQUEsU0FBQUEsWUFBQUE7OztXQUFBQTs7QUFnQkwsU0FBU0MsZ0JBQWdCQyxLQUFjO0lBQzVDLElBQ0UsT0FBT0EsVUFBVSxZQUNqQkEsVUFBVSxRQUNWLENBQUUsYUFBWUEsS0FBQUEsQ0FBSSxJQUNsQixPQUFPQSxNQUFNQyxNQUFNLEtBQUssVUFDeEI7UUFDQSxPQUFPO0lBQ1Q7SUFFQSxNQUFNQSxTQUFTRCxNQUFNQyxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUNsQyxNQUFNLENBQUNDLFdBQVdDLEtBQUssR0FBR0g7SUFDMUIsTUFBTUksY0FBY0osT0FBT0ssS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHQyxJQUFJLENBQUM7SUFDN0MsTUFBTUMsU0FBU1AsT0FBT1EsRUFBRSxDQUFDLENBQUM7SUFFMUIsTUFBTUMsYUFBYUMsT0FBT0g7SUFFMUIsT0FDRUwsY0FBY04sdUJBQ2JPLENBQUFBLFNBQVMsYUFBYUEsU0FBUyxPQUFLLElBQ3JDLE9BQU9DLGdCQUFnQixZQUN2QixDQUFDTyxNQUFNRixlQUNQQSxjQUFjRyxvQkFBQUEsa0JBQWtCO0FBRXBDIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXGNvbXBvbmVudHNcXHJlZGlyZWN0LWVycm9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZGlyZWN0U3RhdHVzQ29kZSB9IGZyb20gJy4vcmVkaXJlY3Qtc3RhdHVzLWNvZGUnXG5cbmV4cG9ydCBjb25zdCBSRURJUkVDVF9FUlJPUl9DT0RFID0gJ05FWFRfUkVESVJFQ1QnXG5cbmV4cG9ydCBlbnVtIFJlZGlyZWN0VHlwZSB7XG4gIHB1c2ggPSAncHVzaCcsXG4gIHJlcGxhY2UgPSAncmVwbGFjZScsXG59XG5cbmV4cG9ydCB0eXBlIFJlZGlyZWN0RXJyb3IgPSBFcnJvciAmIHtcbiAgZGlnZXN0OiBgJHt0eXBlb2YgUkVESVJFQ1RfRVJST1JfQ09ERX07JHtSZWRpcmVjdFR5cGV9OyR7c3RyaW5nfTske1JlZGlyZWN0U3RhdHVzQ29kZX07YFxufVxuXG4vKipcbiAqIENoZWNrcyBhbiBlcnJvciB0byBkZXRlcm1pbmUgaWYgaXQncyBhbiBlcnJvciBnZW5lcmF0ZWQgYnkgdGhlXG4gKiBgcmVkaXJlY3QodXJsKWAgaGVscGVyLlxuICpcbiAqIEBwYXJhbSBlcnJvciB0aGUgZXJyb3IgdGhhdCBtYXkgcmVmZXJlbmNlIGEgcmVkaXJlY3QgZXJyb3JcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGVycm9yIGlzIGEgcmVkaXJlY3QgZXJyb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVkaXJlY3RFcnJvcihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFJlZGlyZWN0RXJyb3Ige1xuICBpZiAoXG4gICAgdHlwZW9mIGVycm9yICE9PSAnb2JqZWN0JyB8fFxuICAgIGVycm9yID09PSBudWxsIHx8XG4gICAgISgnZGlnZXN0JyBpbiBlcnJvcikgfHxcbiAgICB0eXBlb2YgZXJyb3IuZGlnZXN0ICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGRpZ2VzdCA9IGVycm9yLmRpZ2VzdC5zcGxpdCgnOycpXG4gIGNvbnN0IFtlcnJvckNvZGUsIHR5cGVdID0gZGlnZXN0XG4gIGNvbnN0IGRlc3RpbmF0aW9uID0gZGlnZXN0LnNsaWNlKDIsIC0yKS5qb2luKCc7JylcbiAgY29uc3Qgc3RhdHVzID0gZGlnZXN0LmF0KC0yKVxuXG4gIGNvbnN0IHN0YXR1c0NvZGUgPSBOdW1iZXIoc3RhdHVzKVxuXG4gIHJldHVybiAoXG4gICAgZXJyb3JDb2RlID09PSBSRURJUkVDVF9FUlJPUl9DT0RFICYmXG4gICAgKHR5cGUgPT09ICdyZXBsYWNlJyB8fCB0eXBlID09PSAncHVzaCcpICYmXG4gICAgdHlwZW9mIGRlc3RpbmF0aW9uID09PSAnc3RyaW5nJyAmJlxuICAgICFpc05hTihzdGF0dXNDb2RlKSAmJlxuICAgIHN0YXR1c0NvZGUgaW4gUmVkaXJlY3RTdGF0dXNDb2RlXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJSRURJUkVDVF9FUlJPUl9DT0RFIiwiUmVkaXJlY3RUeXBlIiwiaXNSZWRpcmVjdEVycm9yIiwiZXJyb3IiLCJkaWdlc3QiLCJzcGxpdCIsImVycm9yQ29kZSIsInR5cGUiLCJkZXN0aW5hdGlvbiIsInNsaWNlIiwiam9pbiIsInN0YXR1cyIsImF0Iiwic3RhdHVzQ29kZSIsIk51bWJlciIsImlzTmFOIiwiUmVkaXJlY3RTdGF0dXNDb2RlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/components/redirect-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/components/redirect-status-code.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/redirect-status-code.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RedirectStatusCode\", ({\n enumerable: true,\n get: function() {\n return RedirectStatusCode;\n }\n}));\nvar RedirectStatusCode = /*#__PURE__*/ function(RedirectStatusCode) {\n RedirectStatusCode[RedirectStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n RedirectStatusCode[RedirectStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n RedirectStatusCode[RedirectStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n return RedirectStatusCode;\n}({});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect-status-code.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3Qtc3RhdHVzLWNvZGUuanMiLCJtYXBwaW5ncyI6Ijs7OztzREFBWUE7OztlQUFBQTs7O0FBQUwsSUFBS0EscUJBQUFBLFdBQUFBLEdBQUFBLFNBQUFBLGtCQUFBQTs7OztXQUFBQSIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxjb21wb25lbnRzXFxyZWRpcmVjdC1zdGF0dXMtY29kZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBSZWRpcmVjdFN0YXR1c0NvZGUge1xuICBTZWVPdGhlciA9IDMwMyxcbiAgVGVtcG9yYXJ5UmVkaXJlY3QgPSAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0ID0gMzA4LFxufVxuIl0sIm5hbWVzIjpbIlJlZGlyZWN0U3RhdHVzQ29kZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/components/redirect-status-code.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/detect-domain-locale.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/detect-domain-locale.js ***!
|
||
\***************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"detectDomainLocale\", ({\n enumerable: true,\n get: function() {\n return detectDomainLocale;\n }\n}));\nconst detectDomainLocale = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (false) {}\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=detect-domain-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2RldGVjdC1kb21haW4tbG9jYWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7c0RBRWFBOzs7ZUFBQUE7OztBQUFOLE1BQU1BLHFCQUFnQztxQ0FBSUMsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7UUFBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O0lBQy9DLElBQUlDLEtBQStCLEVBQUUsRUFJcEM7QUFDSCIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxkZXRlY3QtZG9tYWluLWxvY2FsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IGRldGVjdERvbWFpbkxvY2FsZSBhcyBGbiB9IGZyb20gJy4uL3NoYXJlZC9saWIvaTE4bi9kZXRlY3QtZG9tYWluLWxvY2FsZSdcblxuZXhwb3J0IGNvbnN0IGRldGVjdERvbWFpbkxvY2FsZTogdHlwZW9mIEZuID0gKC4uLmFyZ3MpID0+IHtcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgcmVxdWlyZSgnLi4vc2hhcmVkL2xpYi9pMThuL2RldGVjdC1kb21haW4tbG9jYWxlJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vc2hhcmVkL2xpYi9pMThuL2RldGVjdC1kb21haW4tbG9jYWxlJylcbiAgICApLmRldGVjdERvbWFpbkxvY2FsZSguLi5hcmdzKVxuICB9XG59XG4iXSwibmFtZXMiOlsiZGV0ZWN0RG9tYWluTG9jYWxlIiwiYXJncyIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwicmVxdWlyZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/detect-domain-locale.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/dev/fouc.js":
|
||
/*!***************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/fouc.js ***!
|
||
\***************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This wrapper function is used to safely select the best available function\n// to schedule removal of the no-FOUC styles workaround. requestAnimationFrame\n// is the ideal choice, but when used in iframes, there are no guarantees that\n// the callback will actually be called, which could stall the promise returned\n// from displayContent.\n//\n// See: https://www.vector-logic.com/blog/posts/on-request-animation-frame-and-embedded-iframes\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"displayContent\", ({\n enumerable: true,\n get: function() {\n return displayContent;\n }\n}));\nconst safeCallbackQueue = (callback)=>{\n if (window.requestAnimationFrame && window.self === window.top) {\n window.requestAnimationFrame(callback);\n } else {\n window.setTimeout(callback);\n }\n};\nfunction displayContent() {\n return new Promise((resolve)=>{\n safeCallbackQueue(function() {\n for(var x = document.querySelectorAll('[data-next-hide-fouc]'), i = x.length; i--;){\n x[i].parentNode.removeChild(x[i]);\n }\n resolve();\n });\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fouc.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9mb3VjLmpzIiwibWFwcGluZ3MiOiJBQUFBLDZFQUE2RTtBQUM3RSw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSx1QkFBdUI7QUFDdkIsRUFBRTtBQUNGLCtGQUErRjs7Ozs7a0RBWS9FQTs7O2VBQUFBOzs7QUFYaEIsTUFBTUMsb0JBQW9CLENBQUNDO0lBQ3pCLElBQUlDLE9BQU9DLHFCQUFxQixJQUFJRCxPQUFPRSxJQUFJLEtBQUtGLE9BQU9HLEdBQUcsRUFBRTtRQUM5REgsT0FBT0MscUJBQXFCLENBQUNGO0lBQy9CLE9BQU87UUFDTEMsT0FBT0ksVUFBVSxDQUFDTDtJQUNwQjtBQUNGO0FBS08sU0FBU0Y7SUFDZCxPQUFPLElBQUlRLFFBQVEsQ0FBQ0M7UUFDbEJSLGtCQUFrQjtZQUNoQixJQUNFLElBQUlTLElBQUlDLFNBQVNDLGdCQUFnQixDQUFDLDBCQUNoQ0MsSUFBSUgsRUFBRUksTUFBTSxFQUNkRCxLQUVBO2dCQUNBSCxDQUFDLENBQUNHLEVBQUUsQ0FBQ0UsVUFBVSxDQUFFQyxXQUFXLENBQUNOLENBQUMsQ0FBQ0csRUFBRTtZQUNuQztZQUNBSjtRQUNGO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxkZXZcXGZvdWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2FmZWx5IHNlbGVjdCB0aGUgYmVzdCBhdmFpbGFibGUgZnVuY3Rpb25cbi8vIHRvIHNjaGVkdWxlIHJlbW92YWwgb2YgdGhlIG5vLUZPVUMgc3R5bGVzIHdvcmthcm91bmQuIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuLy8gaXMgdGhlIGlkZWFsIGNob2ljZSwgYnV0IHdoZW4gdXNlZCBpbiBpZnJhbWVzLCB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyB0aGF0XG4vLyB0aGUgY2FsbGJhY2sgd2lsbCBhY3R1YWxseSBiZSBjYWxsZWQsIHdoaWNoIGNvdWxkIHN0YWxsIHRoZSBwcm9taXNlIHJldHVybmVkXG4vLyBmcm9tIGRpc3BsYXlDb250ZW50LlxuLy9cbi8vIFNlZTogaHR0cHM6Ly93d3cudmVjdG9yLWxvZ2ljLmNvbS9ibG9nL3Bvc3RzL29uLXJlcXVlc3QtYW5pbWF0aW9uLWZyYW1lLWFuZC1lbWJlZGRlZC1pZnJhbWVzXG5jb25zdCBzYWZlQ2FsbGJhY2tRdWV1ZSA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuICBpZiAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSAmJiB3aW5kb3cuc2VsZiA9PT0gd2luZG93LnRvcCkge1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spXG4gIH0gZWxzZSB7XG4gICAgd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2spXG4gIH1cbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlbW92ZSBOZXh0LmpzJyBuby1GT1VDIHN0eWxlcyB3b3JrYXJvdW5kIGZvciB1c2luZ1xuLy8gYHN0eWxlLWxvYWRlcmAgaW4gZGV2ZWxvcG1lbnQuIEl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBoeWRyYXRpb24sIG9yIGVsc2Vcbi8vIHJlbmRlcmluZyB3b24ndCBoYXZlIHRoZSBjb3JyZWN0IGNvbXB1dGVkIHZhbHVlcyBpbiBlZmZlY3RzLlxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlDb250ZW50KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzYWZlQ2FsbGJhY2tRdWV1ZShmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgeCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW5leHQtaGlkZS1mb3VjXScpLFxuICAgICAgICAgIGkgPSB4Lmxlbmd0aDtcbiAgICAgICAgaS0tO1xuXG4gICAgICApIHtcbiAgICAgICAgeFtpXS5wYXJlbnROb2RlIS5yZW1vdmVDaGlsZCh4W2ldKVxuICAgICAgfVxuICAgICAgcmVzb2x2ZSgpXG4gICAgfSlcbiAgfSlcbn1cbiJdLCJuYW1lcyI6WyJkaXNwbGF5Q29udGVudCIsInNhZmVDYWxsYmFja1F1ZXVlIiwiY2FsbGJhY2siLCJ3aW5kb3ciLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZWxmIiwidG9wIiwic2V0VGltZW91dCIsIlByb21pc2UiLCJyZXNvbHZlIiwieCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImkiLCJsZW5ndGgiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/dev/fouc.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-middleware-client.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-middleware-client.js ***!
|
||
\********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _hotreloaderpages = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./hot-reloader/pages/hot-reloader-pages */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js\"));\nconst _websocket = __webpack_require__(/*! ./hot-reloader/pages/websocket */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\");\nlet reloading = false;\nconst _default = ()=>{\n const devClient = (0, _hotreloaderpages.default)();\n devClient.subscribeToHmrEvent((obj)=>{\n var _window_next;\n if (reloading) return;\n // Retrieve the router if it's available\n const router = (_window_next = window.next) == null ? void 0 : _window_next.router;\n // Determine if we're on an error page or the router is not initialized\n const isOnErrorPage = !router || router.pathname === '/404' || router.pathname === '/_error';\n switch(obj.action){\n case 'reloadPage':\n {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-reload-page',\n clientId: window.__nextDevClientId\n }));\n reloading = true;\n return window.location.reload();\n }\n case 'removedPage':\n {\n const [page] = obj.data;\n // Check if the removed page is the current page\n const isCurrentPage = page === (router == null ? void 0 : router.pathname);\n // We enter here if the removed page is currently being viewed\n // or if we happen to be on an error page.\n if (isCurrentPage || isOnErrorPage) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-removed-page',\n clientId: window.__nextDevClientId,\n page\n }));\n return window.location.reload();\n }\n return;\n }\n case 'addedPage':\n {\n var _router_components;\n const [page] = obj.data;\n // Check if the added page is the current page\n const isCurrentPage = page === (router == null ? void 0 : router.pathname);\n // Check if the page component is not yet loaded\n const isPageNotLoaded = typeof (router == null ? void 0 : (_router_components = router.components) == null ? void 0 : _router_components[page]) === 'undefined';\n // We enter this block if the newly added page is the one currently being viewed\n // but hasn't been loaded yet, or if we're on an error page.\n if (isCurrentPage && isPageNotLoaded || isOnErrorPage) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-added-page',\n clientId: window.__nextDevClientId,\n page\n }));\n return window.location.reload();\n }\n return;\n }\n case 'serverError':\n case 'devPagesManifestUpdate':\n case 'isrManifest':\n case 'building':\n case 'finishBuilding':\n {\n return;\n }\n default:\n {\n throw Object.defineProperty(new Error('Unexpected action ' + obj.action), \"__NEXT_ERROR_CODE\", {\n value: \"E59\",\n enumerable: false,\n configurable: true\n });\n }\n }\n });\n return devClient;\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hot-middleware-client.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtbWlkZGxld2FyZS1jbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FzQkE7OztlQUFBOzs7O3VGQWxCb0I7dUNBQ1E7QUFlNUIsSUFBSUEsWUFBWTtNQUVoQixXQUFlO0lBQ2IsTUFBTUMsWUFBWUMsQ0FBQUEsR0FBQUEsa0JBQUFBLE9BQUFBO0lBRWxCRCxVQUFVRSxtQkFBbUIsQ0FBQyxDQUFDQztZQUlkQztRQUhmLElBQUlMLFdBQVc7UUFFZix3Q0FBd0M7UUFDeEMsTUFBTU0sU0FBQUEsQ0FBU0QsZUFBQUEsT0FBT0UsSUFBQUEsS0FBSSxnQkFBWEYsYUFBYUMsTUFBTTtRQUVsQyx1RUFBdUU7UUFDdkUsTUFBTUUsZ0JBQ0osQ0FBQ0YsVUFBVUEsT0FBT0csUUFBUSxLQUFLLFVBQVVILE9BQU9HLFFBQVEsS0FBSztRQUUvRCxPQUFRTCxJQUFJTSxNQUFNO1lBQ2hCLEtBQUs7Z0JBQWM7b0JBQ2pCQyxDQUFBQSxHQUFBQSxXQUFBQSxXQUFBQSxFQUNFQyxLQUFLQyxTQUFTLENBQUM7d0JBQ2JDLE9BQU87d0JBQ1BDLFVBQVVWLE9BQU9XLGlCQUFpQjtvQkFDcEM7b0JBRUZoQixZQUFZO29CQUNaLE9BQU9LLE9BQU9ZLFFBQVEsQ0FBQ0MsTUFBTTtnQkFDL0I7WUFDQSxLQUFLO2dCQUFlO29CQUNsQixNQUFNLENBQUNDLEtBQUssR0FBR2YsSUFBSWdCLElBQUk7b0JBRXZCLGdEQUFnRDtvQkFDaEQsTUFBTUMsZ0JBQWdCRixVQUFTYixVQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxPQUFRRyxRQUFBQTtvQkFFdkMsOERBQThEO29CQUM5RCwwQ0FBMEM7b0JBQzFDLElBQUlZLGlCQUFpQmIsZUFBZTt3QkFDbENHLENBQUFBLEdBQUFBLFdBQUFBLFdBQUFBLEVBQ0VDLEtBQUtDLFNBQVMsQ0FBQzs0QkFDYkMsT0FBTzs0QkFDUEMsVUFBVVYsT0FBT1csaUJBQWlCOzRCQUNsQ0c7d0JBQ0Y7d0JBRUYsT0FBT2QsT0FBT1ksUUFBUSxDQUFDQyxNQUFNO29CQUMvQjtvQkFDQTtnQkFDRjtZQUNBLEtBQUs7Z0JBQWE7d0JBUVBaO29CQVBULE1BQU0sQ0FBQ2EsS0FBSyxHQUFHZixJQUFJZ0IsSUFBSTtvQkFFdkIsOENBQThDO29CQUM5QyxNQUFNQyxnQkFBZ0JGLFNBQVNiLFdBQUFBLE9BQUFBLEtBQUFBLElBQUFBLE9BQVFHLFFBQUFBO29CQUV2QyxnREFBZ0Q7b0JBQ2hELE1BQU1hLGtCQUNKLFFBQU9oQixVQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxxQkFBQUEsT0FBUWlCLFVBQUFBLEtBQVUsZ0JBQWxCakIsa0JBQW9CLENBQUNhLEtBQUFBLE1BQVU7b0JBRXhDLGdGQUFnRjtvQkFDaEYsNERBQTREO29CQUM1RCxJQUFLRSxpQkFBaUJDLG1CQUFvQmQsZUFBZTt3QkFDdkRHLENBQUFBLEdBQUFBLFdBQUFBLFdBQUFBLEVBQ0VDLEtBQUtDLFNBQVMsQ0FBQzs0QkFDYkMsT0FBTzs0QkFDUEMsVUFBVVYsT0FBT1csaUJBQWlCOzRCQUNsQ0c7d0JBQ0Y7d0JBRUYsT0FBT2QsT0FBT1ksUUFBUSxDQUFDQyxNQUFNO29CQUMvQjtvQkFDQTtnQkFDRjtZQUNBLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO2dCQUFrQjtvQkFDckI7Z0JBQ0Y7WUFDQTtnQkFBUztvQkFDUCxNQUFNLHFCQUE0QyxDQUE1QyxJQUFJTSxNQUFNLHVCQUF1QnBCLElBQUlNLE1BQU0sR0FBM0M7K0JBQUE7b0NBQUE7c0NBQUE7b0JBQTJDO2dCQUNuRDtRQUNGO0lBQ0Y7SUFFQSxPQUFPVDtBQUNUIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXGRldlxcaG90LW1pZGRsZXdhcmUtY2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgTmV4dFJvdXRlcixcbiAgUHJpdmF0ZVJvdXRlSW5mbyxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyJ1xuaW1wb3J0IGNvbm5lY3QgZnJvbSAnLi9ob3QtcmVsb2FkZXIvcGFnZXMvaG90LXJlbG9hZGVyLXBhZ2VzJ1xuaW1wb3J0IHsgc2VuZE1lc3NhZ2UgfSBmcm9tICcuL2hvdC1yZWxvYWRlci9wYWdlcy93ZWJzb2NrZXQnXG5cbi8vIERlZmluZSBhIGxvY2FsIHR5cGUgZm9yIHRoZSB3aW5kb3cubmV4dCBvYmplY3RcbmludGVyZmFjZSBOZXh0V2luZG93IHtcbiAgbmV4dD86IHtcbiAgICByb3V0ZXI/OiBOZXh0Um91dGVyICYge1xuICAgICAgY29tcG9uZW50czogeyBbcGF0aG5hbWU6IHN0cmluZ106IFByaXZhdGVSb3V0ZUluZm8gfVxuICAgIH1cbiAgfVxuICBfX25leHREZXZDbGllbnRJZD86IHN0cmluZ1xuICBsb2NhdGlvbjogTG9jYXRpb25cbn1cblxuZGVjbGFyZSBjb25zdCB3aW5kb3c6IE5leHRXaW5kb3dcblxubGV0IHJlbG9hZGluZyA9IGZhbHNlXG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgZGV2Q2xpZW50ID0gY29ubmVjdCgpXG5cbiAgZGV2Q2xpZW50LnN1YnNjcmliZVRvSG1yRXZlbnQoKG9iajogYW55KSA9PiB7XG4gICAgaWYgKHJlbG9hZGluZykgcmV0dXJuXG5cbiAgICAvLyBSZXRyaWV2ZSB0aGUgcm91dGVyIGlmIGl0J3MgYXZhaWxhYmxlXG4gICAgY29uc3Qgcm91dGVyID0gd2luZG93Lm5leHQ/LnJvdXRlclxuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHdlJ3JlIG9uIGFuIGVycm9yIHBhZ2Ugb3IgdGhlIHJvdXRlciBpcyBub3QgaW5pdGlhbGl6ZWRcbiAgICBjb25zdCBpc09uRXJyb3JQYWdlID1cbiAgICAgICFyb3V0ZXIgfHwgcm91dGVyLnBhdGhuYW1lID09PSAnLzQwNCcgfHwgcm91dGVyLnBhdGhuYW1lID09PSAnL19lcnJvcidcblxuICAgIHN3aXRjaCAob2JqLmFjdGlvbikge1xuICAgICAgY2FzZSAncmVsb2FkUGFnZSc6IHtcbiAgICAgICAgc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZXZlbnQ6ICdjbGllbnQtcmVsb2FkLXBhZ2UnLFxuICAgICAgICAgICAgY2xpZW50SWQ6IHdpbmRvdy5fX25leHREZXZDbGllbnRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJlbG9hZGluZyA9IHRydWVcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgfVxuICAgICAgY2FzZSAncmVtb3ZlZFBhZ2UnOiB7XG4gICAgICAgIGNvbnN0IFtwYWdlXSA9IG9iai5kYXRhXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlbW92ZWQgcGFnZSBpcyB0aGUgY3VycmVudCBwYWdlXG4gICAgICAgIGNvbnN0IGlzQ3VycmVudFBhZ2UgPSBwYWdlID09PSByb3V0ZXI/LnBhdGhuYW1lXG5cbiAgICAgICAgLy8gV2UgZW50ZXIgaGVyZSBpZiB0aGUgcmVtb3ZlZCBwYWdlIGlzIGN1cnJlbnRseSBiZWluZyB2aWV3ZWRcbiAgICAgICAgLy8gb3IgaWYgd2UgaGFwcGVuIHRvIGJlIG9uIGFuIGVycm9yIHBhZ2UuXG4gICAgICAgIGlmIChpc0N1cnJlbnRQYWdlIHx8IGlzT25FcnJvclBhZ2UpIHtcbiAgICAgICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgZXZlbnQ6ICdjbGllbnQtcmVtb3ZlZC1wYWdlJyxcbiAgICAgICAgICAgICAgY2xpZW50SWQ6IHdpbmRvdy5fX25leHREZXZDbGllbnRJZCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhc2UgJ2FkZGVkUGFnZSc6IHtcbiAgICAgICAgY29uc3QgW3BhZ2VdID0gb2JqLmRhdGFcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgYWRkZWQgcGFnZSBpcyB0aGUgY3VycmVudCBwYWdlXG4gICAgICAgIGNvbnN0IGlzQ3VycmVudFBhZ2UgPSBwYWdlID09PSByb3V0ZXI/LnBhdGhuYW1lXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHBhZ2UgY29tcG9uZW50IGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICAgIGNvbnN0IGlzUGFnZU5vdExvYWRlZCA9XG4gICAgICAgICAgdHlwZW9mIHJvdXRlcj8uY29tcG9uZW50cz8uW3BhZ2VdID09PSAndW5kZWZpbmVkJ1xuXG4gICAgICAgIC8vIFdlIGVudGVyIHRoaXMgYmxvY2sgaWYgdGhlIG5ld2x5IGFkZGVkIHBhZ2UgaXMgdGhlIG9uZSBjdXJyZW50bHkgYmVpbmcgdmlld2VkXG4gICAgICAgIC8vIGJ1dCBoYXNuJ3QgYmVlbiBsb2FkZWQgeWV0LCBvciBpZiB3ZSdyZSBvbiBhbiBlcnJvciBwYWdlLlxuICAgICAgICBpZiAoKGlzQ3VycmVudFBhZ2UgJiYgaXNQYWdlTm90TG9hZGVkKSB8fCBpc09uRXJyb3JQYWdlKSB7XG4gICAgICAgICAgc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIGV2ZW50OiAnY2xpZW50LWFkZGVkLXBhZ2UnLFxuICAgICAgICAgICAgICBjbGllbnRJZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY2FzZSAnc2VydmVyRXJyb3InOlxuICAgICAgY2FzZSAnZGV2UGFnZXNNYW5pZmVzdFVwZGF0ZSc6XG4gICAgICBjYXNlICdpc3JNYW5pZmVzdCc6XG4gICAgICBjYXNlICdidWlsZGluZyc6XG4gICAgICBjYXNlICdmaW5pc2hCdWlsZGluZyc6IHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBhY3Rpb24gJyArIG9iai5hY3Rpb24pXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBkZXZDbGllbnRcbn1cbiJdLCJuYW1lcyI6WyJyZWxvYWRpbmciLCJkZXZDbGllbnQiLCJjb25uZWN0Iiwic3Vic2NyaWJlVG9IbXJFdmVudCIsIm9iaiIsIndpbmRvdyIsInJvdXRlciIsIm5leHQiLCJpc09uRXJyb3JQYWdlIiwicGF0aG5hbWUiLCJhY3Rpb24iLCJzZW5kTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudCIsImNsaWVudElkIiwiX19uZXh0RGV2Q2xpZW50SWQiLCJsb2NhdGlvbiIsInJlbG9hZCIsInBhZ2UiLCJkYXRhIiwiaXNDdXJyZW50UGFnZSIsImlzUGFnZU5vdExvYWRlZCIsImNvbXBvbmVudHMiLCJFcnJvciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-middleware-client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSocketUrl\", ({\n enumerable: true,\n get: function() {\n return getSocketUrl;\n }\n}));\nconst _normalizedassetprefix = __webpack_require__(/*! ../../../shared/lib/normalized-asset-prefix */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/normalized-asset-prefix.js\");\nfunction getSocketProtocol(assetPrefix) {\n let protocol = window.location.protocol;\n try {\n // assetPrefix is a url\n protocol = new URL(assetPrefix).protocol;\n } catch (e) {}\n return protocol === 'http:' ? 'ws:' : 'wss:';\n}\nfunction getSocketUrl(assetPrefix) {\n const prefix = (0, _normalizedassetprefix.normalizedAssetPrefix)(assetPrefix);\n const protocol = getSocketProtocol(assetPrefix || '');\n if (URL.canParse(prefix)) {\n // since normalized asset prefix is ensured to be a URL format,\n // we can safely replace the protocol\n return prefix.replace(/^http/, 'ws');\n }\n const { hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? \":\" + port : '') + prefix;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-socket-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvZ2V0LXNvY2tldC11cmwuanMiLCJtYXBwaW5ncyI6Ijs7OztnREFhZ0JBOzs7ZUFBQUE7OzttREFic0I7QUFFdEMsU0FBU0Msa0JBQWtCQyxXQUFtQjtJQUM1QyxJQUFJQyxXQUFXQyxPQUFPQyxRQUFRLENBQUNGLFFBQVE7SUFFdkMsSUFBSTtRQUNGLHVCQUF1QjtRQUN2QkEsV0FBVyxJQUFJRyxJQUFJSixhQUFhQyxRQUFRO0lBQzFDLEVBQUUsVUFBTSxDQUFDO0lBRVQsT0FBT0EsYUFBYSxVQUFVLFFBQVE7QUFDeEM7QUFFTyxTQUFTSCxhQUFhRSxXQUErQjtJQUMxRCxNQUFNSyxTQUFTQyxDQUFBQSxHQUFBQSx1QkFBQUEscUJBQUFBLEVBQXNCTjtJQUNyQyxNQUFNQyxXQUFXRixrQkFBa0JDLGVBQWU7SUFFbEQsSUFBSUksSUFBSUcsUUFBUSxDQUFDRixTQUFTO1FBQ3hCLCtEQUErRDtRQUMvRCxxQ0FBcUM7UUFDckMsT0FBT0EsT0FBT0csT0FBTyxDQUFDLFNBQVM7SUFDakM7SUFFQSxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFLEdBQUdSLE9BQU9DLFFBQVE7SUFDMUMsT0FBVUYsV0FBUyxPQUFJUSxXQUFXQyxDQUFBQSxPQUFRLE1BQUdBLE9BQVMsR0FBQyxHQUFJTDtBQUM3RCIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxkZXZcXGhvdC1yZWxvYWRlclxcZ2V0LXNvY2tldC11cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9ybWFsaXplZEFzc2V0UHJlZml4IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9ub3JtYWxpemVkLWFzc2V0LXByZWZpeCdcblxuZnVuY3Rpb24gZ2V0U29ja2V0UHJvdG9jb2woYXNzZXRQcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbFxuXG4gIHRyeSB7XG4gICAgLy8gYXNzZXRQcmVmaXggaXMgYSB1cmxcbiAgICBwcm90b2NvbCA9IG5ldyBVUkwoYXNzZXRQcmVmaXgpLnByb3RvY29sXG4gIH0gY2F0Y2gge31cblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwOicgPyAnd3M6JyA6ICd3c3M6J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U29ja2V0VXJsKGFzc2V0UHJlZml4OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBjb25zdCBwcmVmaXggPSBub3JtYWxpemVkQXNzZXRQcmVmaXgoYXNzZXRQcmVmaXgpXG4gIGNvbnN0IHByb3RvY29sID0gZ2V0U29ja2V0UHJvdG9jb2woYXNzZXRQcmVmaXggfHwgJycpXG5cbiAgaWYgKFVSTC5jYW5QYXJzZShwcmVmaXgpKSB7XG4gICAgLy8gc2luY2Ugbm9ybWFsaXplZCBhc3NldCBwcmVmaXggaXMgZW5zdXJlZCB0byBiZSBhIFVSTCBmb3JtYXQsXG4gICAgLy8gd2UgY2FuIHNhZmVseSByZXBsYWNlIHRoZSBwcm90b2NvbFxuICAgIHJldHVybiBwcmVmaXgucmVwbGFjZSgvXmh0dHAvLCAnd3MnKVxuICB9XG5cbiAgY29uc3QgeyBob3N0bmFtZSwgcG9ydCB9ID0gd2luZG93LmxvY2F0aW9uXG4gIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9JHtwb3J0ID8gYDoke3BvcnR9YCA6ICcnfSR7cHJlZml4fWBcbn1cbiJdLCJuYW1lcyI6WyJnZXRTb2NrZXRVcmwiLCJnZXRTb2NrZXRQcm90b2NvbCIsImFzc2V0UHJlZml4IiwicHJvdG9jb2wiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIlVSTCIsInByZWZpeCIsIm5vcm1hbGl6ZWRBc3NldFByZWZpeCIsImNhblBhcnNlIiwicmVwbGFjZSIsImhvc3RuYW1lIiwicG9ydCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js":
|
||
/*!************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js ***!
|
||
\************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// TODO: Remove use of `any` type. Fix no-use-before-define violations.\n/* eslint-disable @typescript-eslint/no-use-before-define */ /**\n * MIT License\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */ /// <reference types=\"webpack/module.d.ts\" />\n// This file is a modified version of the Create React App HMR dev client that\n// can be found here:\n// https://github.com/facebook/create-react-app/blob/v3.4.1/packages/react-dev-utils/webpackHotDevClient.js\n/// <reference types=\"webpack/module.d.ts\" />\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return connect;\n },\n handleStaticIndicator: function() {\n return handleStaticIndicator;\n },\n performFullReload: function() {\n return performFullReload;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(pages-dir-browser)/./node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _pagesdevoverlaysetup = __webpack_require__(/*! ../../../../next-devtools/userspace/pages/pages-dev-overlay-setup */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(pages-dir-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _websocket = __webpack_require__(/*! ./websocket */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\");\nconst _formatwebpackmessages = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../shared/lib/format-webpack-messages */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/format-webpack-messages.js\"));\nconst _hotreloadertypes = __webpack_require__(/*! ../../../../server/dev/hot-reloader-types */ \"(pages-dir-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _shared = __webpack_require__(/*! ../shared */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/shared.js\");\nconst _runtimeerrorhandler = __webpack_require__(/*! ../../runtime-error-handler */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/runtime-error-handler.js\");\nconst _reporthmrlatency = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../report-hmr-latency */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/report-hmr-latency.js\"));\nconst _turbopackhotreloadercommon = __webpack_require__(/*! ../turbopack-hot-reloader-common */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js\");\nwindow.__nextDevClientId = Math.round(Math.random() * 100 + Date.now());\nlet customHmrEventHandler;\nlet turbopackMessageListeners = [];\nfunction connect() {\n (0, _pagesdevoverlaysetup.register)();\n (0, _websocket.addMessageListener)((payload)=>{\n if (!('action' in payload)) {\n return;\n }\n try {\n processMessage(payload);\n } catch (err) {\n (0, _shared.reportInvalidHmrMessage)(payload, err);\n }\n });\n return {\n subscribeToHmrEvent (handler) {\n customHmrEventHandler = handler;\n },\n onUnrecoverableError () {\n _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError = true;\n },\n addTurbopackMessageListener (cb) {\n turbopackMessageListeners.push(cb);\n },\n sendTurbopackMessage (msg) {\n (0, _websocket.sendMessage)(msg);\n },\n handleUpdateError (err) {\n performFullReload(err);\n }\n };\n}\n// Remember some state related to hot module replacement.\nvar isFirstCompilation = true;\nvar mostRecentCompilationHash = null;\nvar hasCompileErrors = false;\nfunction clearOutdatedErrors() {\n // Clean up outdated compile errors, if any.\n if (typeof console !== 'undefined' && typeof console.clear === 'function') {\n if (hasCompileErrors) {\n console.clear();\n }\n }\n}\n// Successful compilation.\nfunction handleSuccess() {\n clearOutdatedErrors();\n hasCompileErrors = false;\n if (false) {} else {\n const isHotUpdate = !isFirstCompilation || window.__NEXT_DATA__.page !== '/_error' && isUpdateAvailable();\n // Attempt to apply hot updates or reload.\n if (isHotUpdate) {\n tryApplyUpdatesWebpack();\n }\n }\n isFirstCompilation = false;\n}\n// Compilation with warnings (e.g. ESLint).\nfunction handleWarnings(warnings) {\n clearOutdatedErrors();\n const isHotUpdate = !isFirstCompilation;\n isFirstCompilation = false;\n hasCompileErrors = false;\n function printWarnings() {\n // Print warnings to the console.\n const formatted = (0, _formatwebpackmessages.default)({\n warnings: warnings,\n errors: []\n });\n if (typeof console !== 'undefined' && typeof console.warn === 'function') {\n var _formatted_warnings;\n for(let i = 0; i < ((_formatted_warnings = formatted.warnings) == null ? void 0 : _formatted_warnings.length); i++){\n if (i === 5) {\n console.warn('There were more warnings in other files.\\n' + 'You can find a complete log in the terminal.');\n break;\n }\n console.warn((0, _stripansi.default)(formatted.warnings[i]));\n }\n }\n }\n printWarnings();\n // Attempt to apply hot updates or reload.\n if (isHotUpdate) {\n tryApplyUpdatesWebpack();\n }\n}\n// Compilation with errors (e.g. syntax error or missing modules).\nfunction handleErrors(errors) {\n clearOutdatedErrors();\n isFirstCompilation = false;\n hasCompileErrors = true;\n // \"Massage\" webpack messages.\n var formatted = (0, _formatwebpackmessages.default)({\n errors: errors,\n warnings: []\n });\n // Only show the first error.\n _nextdevtools.dispatcher.onBuildError(formatted.errors[0]);\n // Also log them to the console.\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n for(var i = 0; i < formatted.errors.length; i++){\n console.error((0, _stripansi.default)(formatted.errors[i]));\n }\n }\n // Do not attempt to reload now.\n // We will reload on next success instead.\n if (false) {}\n}\nlet webpackStartMsSinceEpoch = null;\nconst turbopackHmr = false ? 0 : null;\nlet isrManifest = {};\n// There is a newer version of the code available.\nfunction handleAvailableHash(hash) {\n // Update last known compilation hash.\n mostRecentCompilationHash = hash;\n}\nfunction handleStaticIndicator() {\n if (true) {\n var _window_next_router_components__app;\n const routeInfo = window.next.router.components[window.next.router.pathname];\n const pageComponent = routeInfo == null ? void 0 : routeInfo.Component;\n const appComponent = (_window_next_router_components__app = window.next.router.components['/_app']) == null ? void 0 : _window_next_router_components__app.Component;\n const isDynamicPage = Boolean(pageComponent == null ? void 0 : pageComponent.getInitialProps) || Boolean(routeInfo == null ? void 0 : routeInfo.__N_SSP);\n const hasAppGetInitialProps = Boolean(appComponent == null ? void 0 : appComponent.getInitialProps) && (appComponent == null ? void 0 : appComponent.getInitialProps) !== (appComponent == null ? void 0 : appComponent.origGetInitialProps);\n const isPageStatic = window.location.pathname in isrManifest || !isDynamicPage && !hasAppGetInitialProps;\n _nextdevtools.dispatcher.onStaticIndicator(isPageStatic);\n }\n}\n/** Handles messages from the server for the Pages Router. */ function processMessage(obj) {\n if (!('action' in obj)) {\n return;\n }\n switch(obj.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ISR_MANIFEST:\n {\n isrManifest = obj.data;\n handleStaticIndicator();\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n {\n _nextdevtools.dispatcher.buildingIndicatorShow();\n if (false) {} else {\n webpackStartMsSinceEpoch = Date.now();\n console.log('[Fast Refresh] rebuilding');\n }\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n {\n _nextdevtools.dispatcher.buildingIndicatorHide();\n if (obj.hash) handleAvailableHash(obj.hash);\n const { errors, warnings } = obj;\n // Is undefined when it's a 'built' event\n if ('versionInfo' in obj) _nextdevtools.dispatcher.onVersionInfo(obj.versionInfo);\n if ('devIndicator' in obj) _nextdevtools.dispatcher.onDevIndicator(obj.devIndicator);\n const hasErrors = Boolean(errors && errors.length);\n if (hasErrors) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-error',\n errorCount: errors.length,\n clientId: window.__nextDevClientId\n }));\n return handleErrors(errors);\n }\n // NOTE: Turbopack does not currently send warnings\n const hasWarnings = Boolean(warnings && warnings.length);\n if (hasWarnings) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-warning',\n warningCount: warnings.length,\n clientId: window.__nextDevClientId\n }));\n return handleWarnings(warnings);\n }\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-success',\n clientId: window.__nextDevClientId\n }));\n return handleSuccess();\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES:\n {\n turbopackHmr == null ? void 0 : turbopackHmr.onServerComponentChanges();\n if (hasCompileErrors || _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n window.location.reload();\n }\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n {\n const { errorJSON } = obj;\n if (errorJSON) {\n const { message, stack } = JSON.parse(errorJSON);\n const error = Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n error.stack = stack;\n handleErrors([\n error\n ]);\n }\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED:\n {\n for (const listener of turbopackMessageListeners){\n listener({\n type: _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED,\n data: obj.data\n });\n }\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE:\n {\n turbopackHmr.onTurbopackMessage(obj);\n _nextdevtools.dispatcher.onBeforeRefresh();\n for (const listener of turbopackMessageListeners){\n listener({\n type: _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE,\n data: obj.data\n });\n }\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n performFullReload(null);\n }\n _nextdevtools.dispatcher.onRefresh();\n break;\n }\n default:\n {\n if (customHmrEventHandler) {\n customHmrEventHandler(obj);\n break;\n }\n break;\n }\n }\n}\n// Is there a newer version of this code available?\nfunction isUpdateAvailable() {\n /* globals __webpack_hash__ */ // __webpack_hash__ is the hash of the current compilation.\n // It's a global variable injected by Webpack.\n return mostRecentCompilationHash !== __webpack_require__.h();\n}\n// Webpack disallows updates in other states.\nfunction canApplyUpdates() {\n return module.hot.status() === 'idle';\n}\nfunction afterApplyUpdates(fn) {\n if (canApplyUpdates()) {\n fn();\n } else {\n function handler(status) {\n if (status === 'idle') {\n module.hot.removeStatusHandler(handler);\n fn();\n }\n }\n module.hot.addStatusHandler(handler);\n }\n}\n// Attempt to update code on the fly, fall back to a hard reload.\nfunction tryApplyUpdatesWebpack() {\n if (false) {}\n if (!isUpdateAvailable() || !canApplyUpdates()) {\n _nextdevtools.dispatcher.onBuildOk();\n return;\n }\n function handleApplyUpdates(err, updatedModules) {\n if (err || _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError || updatedModules == null) {\n if (err) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD);\n } else if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n }\n performFullReload(err);\n return;\n }\n _nextdevtools.dispatcher.onBuildOk();\n if (isUpdateAvailable()) {\n // While we were updating, there was a new update! Do it again.\n tryApplyUpdatesWebpack();\n return;\n }\n _nextdevtools.dispatcher.onRefresh();\n (0, _reporthmrlatency.default)(_websocket.sendMessage, updatedModules, webpackStartMsSinceEpoch, Date.now());\n if (false) {}\n }\n // https://webpack.js.org/api/hot-module-replacement/#check\n module.hot.check(/* autoApply */ false).then((updatedModules)=>{\n if (updatedModules == null) {\n return null;\n }\n // We should always handle an update, even if updatedModules is empty (but\n // non-null) for any reason. That's what webpack would normally do:\n // https://github.com/webpack/webpack/blob/3aa6b6bc3a64/lib/hmr/HotModuleReplacement.runtime.js#L296-L298\n _nextdevtools.dispatcher.onBeforeRefresh();\n // https://webpack.js.org/api/hot-module-replacement/#apply\n return module.hot.apply();\n }).then((updatedModules)=>{\n handleApplyUpdates(null, updatedModules);\n }, (err)=>{\n handleApplyUpdates(err, null);\n });\n}\nfunction performFullReload(err) {\n const stackTrace = err && (err.stack && err.stack.split('\\n').slice(0, 5).join('\\n') || err.message || err + '');\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'client-full-reload',\n stackTrace,\n hadRuntimeError: !!_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError,\n dependencyChain: err ? err.dependencyChain : undefined\n }));\n window.location.reload();\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hot-reloader-pages.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvcGFnZXMvaG90LXJlbG9hZGVyLXBhZ2VzLmpzIiwibWFwcGluZ3MiOiJBQUFBLHVFQUF1RTtBQUN2RSwwREFBMEQsR0FDMUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQkMsR0FFRCw2Q0FBNkM7QUFFN0MsOEVBQThFO0FBQzlFLHFCQUFxQjtBQUNyQiwyR0FBMkc7QUFFM0csNkNBQTZDOzs7Ozs7Ozs7Ozs7O0lBd0M3QyxPQWdDQztlQWhDdUJBOztJQWtLUkMscUJBQXFCO2VBQXJCQTs7SUFvUEFDLGlCQUFpQjtlQUFqQkE7Ozs7MENBNWJXO2tEQUNGO2dGQUNIO3VDQUMwQjs0RkFDZDs4Q0FDVTtvQ0FTckM7aURBQzZCO3VGQUNQO3dEQUNBO0FBaUI3QkMsT0FBT0MsaUJBQWlCLEdBQUdDLEtBQUtDLEtBQUssQ0FBQ0QsS0FBS0UsTUFBTSxLQUFLLE1BQU1DLEtBQUtDLEdBQUc7QUFFcEUsSUFBSUM7QUFDSixJQUFJQyw0QkFBc0UsRUFBRTtBQUM3RCxTQUFTWDtJQUN0QlksQ0FBQUEsR0FBQUEsc0JBQUFBLFFBQUFBO0lBRUFDLENBQUFBLEdBQUFBLFdBQUFBLGtCQUFBQSxFQUFtQixDQUFDQztRQUNsQixJQUFJLENBQUUsYUFBWUEsT0FBQUEsQ0FBTSxFQUFJO1lBQzFCO1FBQ0Y7UUFFQSxJQUFJO1lBQ0ZDLGVBQWVEO1FBQ2pCLEVBQUUsT0FBT0UsS0FBYztZQUNyQkMsQ0FBQUEsR0FBQUEsUUFBQUEsdUJBQUFBLEVBQXdCSCxTQUFTRTtRQUNuQztJQUNGO0lBRUEsT0FBTztRQUNMRSxxQkFBb0JDLE9BQVk7WUFDOUJULHdCQUF3QlM7UUFDMUI7UUFDQUM7WUFDRUMscUJBQUFBLG1CQUFtQixDQUFDQyxlQUFlLEdBQUc7UUFDeEM7UUFDQUMsNkJBQTRCQyxFQUF3QztZQUNsRWIsMEJBQTBCYyxJQUFJLENBQUNEO1FBQ2pDO1FBQ0FF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STRHLEtBQUssQ0FBQzBCLEtBQUssQ0FBQyxNQUFNQyxLQUFLLENBQUMsR0FBRyxHQUFHQyxJQUFJLENBQUMsU0FDcER4SSxJQUFJMkcsT0FBTyxJQUNYM0csTUFBTSxHQUFDO0lBRVhZLENBQUFBLEdBQUFBLFdBQUFBLFdBQUFBLEVBQ0VtRixLQUFLQyxTQUFTLENBQUM7UUFDYkMsT0FBTztRQUNQb0M7UUFDQS9ILGlCQUFpQixDQUFDLENBQUNELHFCQUFBQSxtQkFBbUIsQ0FBQ0MsZUFBZTtRQUN0RG1JLGlCQUFpQnpJLE1BQU1BLElBQUl5SSxlQUFlLEdBQUdDO0lBQy9DO0lBR0Z2SixPQUFPeUYsUUFBUSxDQUFDNEIsTUFBTTtBQUN4QiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxkZXZcXGhvdC1yZWxvYWRlclxccGFnZXNcXGhvdC1yZWxvYWRlci1wYWdlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPOiBSZW1vdmUgdXNlIG9mIGBhbnlgIHR5cGUuIEZpeCBuby11c2UtYmVmb3JlLWRlZmluZSB2aW9sYXRpb25zLlxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKipcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cIndlYnBhY2svbW9kdWxlLmQudHNcIiAvPlxuXG4vLyBUaGlzIGZpbGUgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBDcmVhdGUgUmVhY3QgQXBwIEhNUiBkZXYgY2xpZW50IHRoYXRcbi8vIGNhbiBiZSBmb3VuZCBoZXJlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2NyZWF0ZS1yZWFjdC1hcHAvYmxvYi92My40LjEvcGFja2FnZXMvcmVhY3QtZGV2LXV0aWxzL3dlYnBhY2tIb3REZXZDbGllbnQuanNcblxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ3ZWJwYWNrL21vZHVsZS5kLnRzXCIgLz5cblxuaW1wb3J0IHsgZGlzcGF0Y2hlciB9IGZyb20gJ25leHQvZGlzdC9jb21waWxlZC9uZXh0LWRldnRvb2xzJ1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9wYWdlcy9wYWdlcy1kZXYtb3ZlcmxheS1zZXR1cCdcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2knXG5pbXBvcnQgeyBhZGRNZXNzYWdlTGlzdGVuZXIsIHNlbmRNZXNzYWdlIH0gZnJvbSAnLi93ZWJzb2NrZXQnXG5pbXBvcnQgZm9ybWF0V2VicGFja01lc3NhZ2VzIGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvZm9ybWF0LXdlYnBhY2stbWVzc2FnZXMnXG5pbXBvcnQgeyBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvZGV2L2hvdC1yZWxvYWRlci10eXBlcydcbmltcG9ydCB0eXBlIHtcbiAgSE1SX0FDVElPTl9UWVBFUyxcbiAgVHVyYm9wYWNrTXNnVG9Ccm93c2VyLFxufSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvZGV2L2hvdC1yZWxvYWRlci10eXBlcydcbmltcG9ydCB7XG4gIFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQUQsXG4gIFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUixcbiAgcmVwb3J0SW52YWxpZEhtck1lc3NhZ2UsXG59IGZyb20gJy4uL3NoYXJlZCdcbmltcG9ydCB7IFJ1bnRpbWVFcnJvckhhbmRsZXIgfSBmcm9tICcuLi8uLi9ydW50aW1lLWVycm9yLWhhbmRsZXInXG5pbXBvcnQgcmVwb3J0SG1yTGF0ZW5jeSBmcm9tICcuLi8uLi9yZXBvcnQtaG1yLWxhdGVuY3knXG5pbXBvcnQgeyBUdXJib3BhY2tIbXIgfSBmcm9tICcuLi90dXJib3BhY2staG90LXJlbG9hZGVyLWNvbW1vbidcblxuLy8gVGhpcyBhbHRlcm5hdGl2ZSBXZWJwYWNrRGV2U2VydmVyIGNvbWJpbmVzIHRoZSBmdW5jdGlvbmFsaXR5IG9mOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay1kZXYtc2VydmVyL2Jsb2Ivd2VicGFjay0xL2NsaWVudC9pbmRleC5qc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9ibG9iL3dlYnBhY2stMS9ob3QvZGV2LXNlcnZlci5qc1xuXG4vLyBJdCBvbmx5IHN1cHBvcnRzIHRoZWlyIHNpbXBsZXN0IGNvbmZpZ3VyYXRpb24gKGhvdCB1cGRhdGVzIG9uIHNhbWUgc2VydmVyKS5cbi8vIEl0IG1ha2VzIHNvbWUgb3BpbmlvbmF0ZWQgY2hvaWNlcyBvbiB0b3AsIGxpa2UgYWRkaW5nIGEgc3ludGF4IGVycm9yIG92ZXJsYXlcbi8vIHRoYXQgbG9va3Mgc2ltaWxhciB0byBvdXIgY29uc29sZSBvdXRwdXQuIFRoZSBlcnJvciBvdmVybGF5IGlzIGluc3BpcmVkIGJ5OlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dsZW5qYW1pbi93ZWJwYWNrLWhvdC1taWRkbGV3YXJlXG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19uZXh0RGV2Q2xpZW50SWQ6IG51bWJlclxuICB9XG59XG5cbndpbmRvdy5fX25leHREZXZDbGllbnRJZCA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMCArIERhdGUubm93KCkpXG5cbmxldCBjdXN0b21IbXJFdmVudEhhbmRsZXI6IGFueVxubGV0IHR1cmJvcGFja01lc3NhZ2VMaXN0ZW5lcnM6ICgobXNnOiBUdXJib3BhY2tNc2dUb0Jyb3dzZXIpID0+IHZvaWQpW10gPSBbXVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29ubmVjdCgpIHtcbiAgcmVnaXN0ZXIoKVxuXG4gIGFkZE1lc3NhZ2VMaXN0ZW5lcigocGF5bG9hZCkgPT4ge1xuICAgIGlmICghKCdhY3Rpb24nIGluIHBheWxvYWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvY2Vzc01lc3NhZ2UocGF5bG9hZClcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIHJlcG9ydEludmFsaWRIbXJNZXNzYWdlKHBheWxvYWQsIGVycilcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBzdWJzY3JpYmVUb0htckV2ZW50KGhhbmRsZXI6IGFueSkge1xuICAgICAgY3VzdG9tSG1yRXZlbnRIYW5kbGVyID0gaGFuZGxlclxuICAgIH0sXG4gICAgb25VbnJlY292ZXJhYmxlRXJyb3IoKSB7XG4gICAgICBSdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvciA9IHRydWVcbiAgICB9LFxuICAgIGFkZFR1cmJvcGFja01lc3NhZ2VMaXN0ZW5lcihjYjogKG1zZzogVHVyYm9wYWNrTXNnVG9Ccm93c2VyKSA9PiB2b2lkKSB7XG4gICAgICB0dXJib3BhY2tNZXNzYWdlTGlzdGVuZXJzLnB1c2goY2IpXG4gICAgfSxcbiAgICBzZW5kVHVyYm9wYWNrTWVzc2FnZShtc2c6IHN0cmluZykge1xuICAgICAgc2VuZE1lc3NhZ2UobXNnKVxuICAgIH0sXG4gICAgaGFuZGxlVXBkYXRlRXJyb3IoZXJyOiB1bmtub3duKSB7XG4gICAgICBwZXJmb3JtRnVsbFJlbG9hZChlcnIpXG4gICAgfSxcbiAgfVxufVxuXG4vLyBSZW1lbWJlciBzb21lIHN0YXRlIHJlbGF0ZWQgdG8gaG90IG1vZHVsZSByZXBsYWNlbWVudC5cbnZhciBpc0ZpcnN0Q29tcGlsYXRpb24gPSB0cnVlXG52YXIgbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbnZhciBoYXNDb21waWxlRXJyb3JzID0gZmFsc2VcblxuZnVuY3Rpb24gY2xlYXJPdXRkYXRlZEVycm9ycygpIHtcbiAgLy8gQ2xlYW4gdXAgb3V0ZGF0ZWQgY29tcGlsZSBlcnJvcnMsIGlmIGFueS5cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5jbGVhciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChoYXNDb21waWxlRXJyb3JzKSB7XG4gICAgICBjb25zb2xlLmNsZWFyKClcbiAgICB9XG4gIH1cbn1cblxuLy8gU3VjY2Vzc2Z1bCBjb21waWxhdGlvbi5cbmZ1bmN0aW9uIGhhbmRsZVN1Y2Nlc3MoKSB7XG4gIGNsZWFyT3V0ZGF0ZWRFcnJvcnMoKVxuICBoYXNDb21waWxlRXJyb3JzID0gZmFsc2VcblxuICBpZiAocHJvY2Vzcy5lbnYuVFVSQk9QQUNLKSB7XG4gICAgY29uc3QgaG1yVXBkYXRlID0gdHVyYm9wYWNrSG1yIS5vbkJ1aWx0KClcbiAgICBpZiAoaG1yVXBkYXRlICE9IG51bGwpIHtcbiAgICAgIHJlcG9ydEhtckxhdGVuY3koXG4gICAgICAgIHNlbmRNZXNzYWdlLFxuICAgICAgICBbLi4uaG1yVXBkYXRlLnVwZGF0ZWRNb2R1bGVzXSxcbiAgICAgICAgaG1yVXBkYXRlLnN0YXJ0TXNTaW5jZUVwb2NoLFxuICAgICAgICBobXJVcGRhdGUuZW5kTXNTaW5jZUVwb2NoLFxuICAgICAgICBobXJVcGRhdGUuaGFzVXBkYXRlc1xuICAgICAgKVxuICAgIH1cbiAgICBkaXNwYXRjaGVyLm9uQnVpbGRPaygpXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaXNIb3RVcGRhdGUgPVxuICAgICAgIWlzRmlyc3RDb21waWxhdGlvbiB8fFxuICAgICAgKHdpbmRvdy5fX05FWFRfREFUQV9fLnBhZ2UgIT09ICcvX2Vycm9yJyAmJiBpc1VwZGF0ZUF2YWlsYWJsZSgpKVxuXG4gICAgLy8gQXR0ZW1wdCB0byBhcHBseSBob3QgdXBkYXRlcyBvciByZWxvYWQuXG4gICAgaWYgKGlzSG90VXBkYXRlKSB7XG4gICAgICB0cnlBcHBseVVwZGF0ZXNXZWJwYWNrKClcbiAgICB9XG4gIH1cblxuICBpc0ZpcnN0Q29tcGlsYXRpb24gPSBmYWxzZVxufVxuXG4vLyBDb21waWxhdGlvbiB3aXRoIHdhcm5pbmdzIChlLmcuIEVTTGludCkuXG5mdW5jdGlvbiBoYW5kbGVXYXJuaW5ncyh3YXJuaW5nczogYW55KSB7XG4gIGNsZWFyT3V0ZGF0ZWRFcnJvcnMoKVxuXG4gIGNvbnN0IGlzSG90VXBkYXRlID0gIWlzRmlyc3RDb21waWxhdGlvblxuICBpc0ZpcnN0Q29tcGlsYXRpb24gPSBmYWxzZVxuICBoYXNDb21waWxlRXJyb3JzID0gZmFsc2VcblxuICBmdW5jdGlvbiBwcmludFdhcm5pbmdzKCkge1xuICAgIC8vIFByaW50IHdhcm5pbmdzIHRvIHRoZSBjb25zb2xlLlxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFdlYnBhY2tNZXNzYWdlcyh7XG4gICAgICB3YXJuaW5nczogd2FybmluZ3MsXG4gICAgICBlcnJvcnM6IFtdLFxuICAgIH0pXG5cbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLndhcm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLndhcm5pbmdzPy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA9PT0gNSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdUaGVyZSB3ZXJlIG1vcmUgd2FybmluZ3MgaW4gb3RoZXIgZmlsZXMuXFxuJyArXG4gICAgICAgICAgICAgICdZb3UgY2FuIGZpbmQgYSBjb21wbGV0ZSBsb2cgaW4gdGhlIHRlcm1pbmFsLidcbiAgICAgICAgICApXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLndhcm4oc3RyaXBBbnNpKGZvcm1hdHRlZC53YXJuaW5nc1tpXSkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpbnRXYXJuaW5ncygpXG5cbiAgLy8gQXR0ZW1wdCB0byBhcHBseSBob3QgdXBkYXRlcyBvciByZWxvYWQuXG4gIGlmIChpc0hvdFVwZGF0ZSkge1xuICAgIHRyeUFwcGx5VXBkYXRlc1dlYnBhY2soKVxuICB9XG59XG5cbi8vIENvbXBpbGF0aW9uIHdpdGggZXJyb3JzIChlLmcuIHN5bnRheCBlcnJvciBvciBtaXNzaW5nIG1vZHVsZXMpLlxuZnVuY3Rpb24gaGFuZGxlRXJyb3JzKGVycm9yczogYW55KSB7XG4gIGNsZWFyT3V0ZGF0ZWRFcnJvcnMoKVxuXG4gIGlzRmlyc3RDb21waWxhdGlvbiA9IGZhbHNlXG4gIGhhc0NvbXBpbGVFcnJvcnMgPSB0cnVlXG5cbiAgLy8gXCJNYXNzYWdlXCIgd2VicGFjayBtZXNzYWdlcy5cbiAgdmFyIGZvcm1hdHRlZCA9IGZvcm1hdFdlYnBhY2tNZXNzYWdlcyh7XG4gICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgd2FybmluZ3M6IFtdLFxuICB9KVxuXG4gIC8vIE9ubHkgc2hvdyB0aGUgZmlyc3QgZXJyb3IuXG5cbiAgZGlzcGF0Y2hlci5vbkJ1aWxkRXJyb3IoZm9ybWF0dGVkLmVycm9yc1swXSlcblxuICAvLyBBbHNvIGxvZyB0aGVtIHRvIHRoZSBjb25zb2xlLlxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtYXR0ZWQuZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHN0cmlwQW5zaShmb3JtYXR0ZWQuZXJyb3JzW2ldKSlcbiAgICB9XG4gIH1cblxuICAvLyBEbyBub3QgYXR0ZW1wdCB0byByZWxvYWQgbm93LlxuICAvLyBXZSB3aWxsIHJlbG9hZCBvbiBuZXh0IHN1Y2Nlc3MgaW5zdGVhZC5cbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0NCKSB7XG4gICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoZm9ybWF0dGVkLmVycm9yc1swXSlcbiAgICAgIHNlbGYuX19ORVhUX0hNUl9DQiA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxubGV0IHdlYnBhY2tTdGFydE1zU2luY2VFcG9jaDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbmNvbnN0IHR1cmJvcGFja0htcjogVHVyYm9wYWNrSG1yIHwgbnVsbCA9IHByb2Nlc3MuZW52LlRVUkJPUEFDS1xuICA/IG5ldyBUdXJib3BhY2tIbXIoKVxuICA6IG51bGxcbmxldCBpc3JNYW5pZmVzdDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fVxuXG4vLyBUaGVyZSBpcyBhIG5ld2VyIHZlcnNpb24gb2YgdGhlIGNvZGUgYXZhaWxhYmxlLlxuZnVuY3Rpb24gaGFuZGxlQXZhaWxhYmxlSGFzaChoYXNoOiBzdHJpbmcpIHtcbiAgLy8gVXBkYXRlIGxhc3Qga25vd24gY29tcGlsYXRpb24gaGFzaC5cbiAgbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCA9IGhhc2hcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVN0YXRpY0luZGljYXRvcigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9ERVZfSU5ESUNBVE9SKSB7XG4gICAgY29uc3Qgcm91dGVJbmZvID0gd2luZG93Lm5leHQucm91dGVyLmNvbXBvbmVudHNbd2luZG93Lm5leHQucm91dGVyLnBhdGhuYW1lXVxuICAgIGNvbnN0IHBhZ2VDb21wb25lbnQgPSByb3V0ZUluZm8/LkNvbXBvbmVudFxuICAgIGNvbnN0IGFwcENvbXBvbmVudCA9IHdpbmRvdy5uZXh0LnJvdXRlci5jb21wb25lbnRzWycvX2FwcCddPy5Db21wb25lbnRcbiAgICBjb25zdCBpc0R5bmFtaWNQYWdlID1cbiAgICAgIEJvb2xlYW4ocGFnZUNvbXBvbmVudD8uZ2V0SW5pdGlhbFByb3BzKSB8fCBCb29sZWFuKHJvdXRlSW5mbz8uX19OX1NTUClcbiAgICBjb25zdCBoYXNBcHBHZXRJbml0aWFsUHJvcHMgPVxuICAgICAgQm9vbGVhbihhcHBDb21wb25lbnQ/LmdldEluaXRpYWxQcm9wcykgJiZcbiAgICAgIGFwcENvbXBvbmVudD8uZ2V0SW5pdGlhbFByb3BzICE9PSBhcHBDb21wb25lbnQ/Lm9yaWdHZXRJbml0aWFsUHJvcHNcblxuICAgIGNvbnN0IGlzUGFnZVN0YXRpYyA9XG4gICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgaW4gaXNyTWFuaWZlc3QgfHxcbiAgICAgICghaXNEeW5hbWljUGFnZSAmJiAhaGFzQXBwR2V0SW5pdGlhbFByb3BzKVxuXG4gICAgZGlzcGF0Y2hlci5vblN0YXRpY0luZGljYXRvcihpc1BhZ2VTdGF0aWMpXG4gIH1cbn1cblxuLyoqIEhhbmRsZXMgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyIGZvciB0aGUgUGFnZXMgUm91dGVyLiAqL1xuZnVuY3Rpb24gcHJvY2Vzc01lc3NhZ2Uob2JqOiBITVJfQUNUSU9OX1RZUEVTKSB7XG4gIGlmICghKCdhY3Rpb24nIGluIG9iaikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHN3aXRjaCAob2JqLmFjdGlvbikge1xuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLklTUl9NQU5JRkVTVDoge1xuICAgICAgaXNyTWFuaWZlc3QgPSBvYmouZGF0YVxuICAgICAgaGFuZGxlU3RhdGljSW5kaWNhdG9yKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxESU5HOiB7XG4gICAgICBkaXNwYXRjaGVyLmJ1aWxkaW5nSW5kaWNhdG9yU2hvdygpXG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5UVVJCT1BBQ0spIHtcbiAgICAgICAgdHVyYm9wYWNrSG1yIS5vbkJ1aWxkaW5nKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdlYnBhY2tTdGFydE1zU2luY2VFcG9jaCA9IERhdGUubm93KClcbiAgICAgICAgY29uc29sZS5sb2coJ1tGYXN0IFJlZnJlc2hdIHJlYnVpbGRpbmcnKVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQlVJTFQ6XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuU1lOQzoge1xuICAgICAgZGlzcGF0Y2hlci5idWlsZGluZ0luZGljYXRvckhpZGUoKVxuXG4gICAgICBpZiAob2JqLmhhc2gpIGhhbmRsZUF2YWlsYWJsZUhhc2gob2JqLmhhc2gpXG5cbiAgICAgIGNvbnN0IHsgZXJyb3JzLCB3YXJuaW5ncyB9ID0gb2JqXG5cbiAgICAgIC8vIElzIHVuZGVmaW5lZCB3aGVuIGl0J3MgYSAnYnVpbHQnIGV2ZW50XG4gICAgICBpZiAoJ3ZlcnNpb25JbmZvJyBpbiBvYmopIGRpc3BhdGNoZXIub25WZXJzaW9uSW5mbyhvYmoudmVyc2lvbkluZm8pXG4gICAgICBpZiAoJ2RldkluZGljYXRvcicgaW4gb2JqKSBkaXNwYXRjaGVyLm9uRGV2SW5kaWNhdG9yKG9iai5kZXZJbmRpY2F0b3IpXG5cbiAgICAgIGNvbnN0IGhhc0Vycm9ycyA9IEJvb2xlYW4oZXJyb3JzICYmIGVycm9ycy5sZW5ndGgpXG4gICAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICAgIHNlbmRNZXNzYWdlKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnY2xpZW50LWVycm9yJyxcbiAgICAgICAgICAgIGVycm9yQ291bnQ6IGVycm9ycy5sZW5ndGgsXG4gICAgICAgICAgICBjbGllbnRJZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9ycyhlcnJvcnMpXG4gICAgICB9XG5cbiAgICAgIC8vIE5PVEU6IFR1cmJvcGFjayBkb2VzIG5vdCBjdXJyZW50bHkgc2VuZCB3YXJuaW5nc1xuICAgICAgY29uc3QgaGFzV2FybmluZ3MgPSBCb29sZWFuKHdhcm5pbmdzICYmIHdhcm5pbmdzLmxlbmd0aClcbiAgICAgIGlmIChoYXNXYXJuaW5ncykge1xuICAgICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ2NsaWVudC13YXJuaW5nJyxcbiAgICAgICAgICAgIHdhcm5pbmdDb3VudDogd2FybmluZ3MubGVuZ3RoLFxuICAgICAgICAgICAgY2xpZW50SWQ6IHdpbmRvdy5fX25leHREZXZDbGllbnRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBoYW5kbGVXYXJuaW5ncyh3YXJuaW5ncylcbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2UoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogJ2NsaWVudC1zdWNjZXNzJyxcbiAgICAgICAgICBjbGllbnRJZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGhhbmRsZVN1Y2Nlc3MoKVxuICAgIH1cbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfQ09NUE9ORU5UX0NIQU5HRVM6IHtcbiAgICAgIHR1cmJvcGFja0htcj8ub25TZXJ2ZXJDb21wb25lbnRDaGFuZ2VzKClcbiAgICAgIGlmIChoYXNDb21waWxlRXJyb3JzIHx8IFJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNFUlZFUl9FUlJPUjoge1xuICAgICAgY29uc3QgeyBlcnJvckpTT04gfSA9IG9ialxuICAgICAgaWYgKGVycm9ySlNPTikge1xuICAgICAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBKU09OLnBhcnNlKGVycm9ySlNPTilcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSlcbiAgICAgICAgZXJyb3Iuc3RhY2sgPSBzdGFja1xuICAgICAgICBoYW5kbGVFcnJvcnMoW2Vycm9yXSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5UVVJCT1BBQ0tfQ09OTkVDVEVEOiB7XG4gICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHR1cmJvcGFja01lc3NhZ2VMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIHR5cGU6IEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5UVVJCT1BBQ0tfQ09OTkVDVEVELFxuICAgICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuVFVSQk9QQUNLX01FU1NBR0U6IHtcbiAgICAgIHR1cmJvcGFja0htciEub25UdXJib3BhY2tNZXNzYWdlKG9iailcbiAgICAgIGRpc3BhdGNoZXIub25CZWZvcmVSZWZyZXNoKClcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdHVyYm9wYWNrTWVzc2FnZUxpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgdHlwZTogSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlRVUkJPUEFDS19NRVNTQUdFLFxuICAgICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKFJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IpXG4gICAgICAgIHBlcmZvcm1GdWxsUmVsb2FkKG51bGwpXG4gICAgICB9XG4gICAgICBkaXNwYXRjaGVyLm9uUmVmcmVzaCgpXG4gICAgICBicmVha1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBpZiAoY3VzdG9tSG1yRXZlbnRIYW5kbGVyKSB7XG4gICAgICAgIGN1c3RvbUhtckV2ZW50SGFuZGxlcihvYmopXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxufVxuXG4vLyBJcyB0aGVyZSBhIG5ld2VyIHZlcnNpb24gb2YgdGhpcyBjb2RlIGF2YWlsYWJsZT9cbmZ1bmN0aW9uIGlzVXBkYXRlQXZhaWxhYmxlKCkge1xuICAvKiBnbG9iYWxzIF9fd2VicGFja19oYXNoX18gKi9cbiAgLy8gX193ZWJwYWNrX2hhc2hfXyBpcyB0aGUgaGFzaCBvZiB0aGUgY3VycmVudCBjb21waWxhdGlvbi5cbiAgLy8gSXQncyBhIGdsb2JhbCB2YXJpYWJsZSBpbmplY3RlZCBieSBXZWJwYWNrLlxuICByZXR1cm4gbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCAhPT0gX193ZWJwYWNrX2hhc2hfX1xufVxuXG4vLyBXZWJwYWNrIGRpc2FsbG93cyB1cGRhdGVzIGluIG90aGVyIHN0YXRlcy5cbmZ1bmN0aW9uIGNhbkFwcGx5VXBkYXRlcygpIHtcbiAgcmV0dXJuIG1vZHVsZS5ob3Quc3RhdHVzKCkgPT09ICdpZGxlJ1xufVxuZnVuY3Rpb24gYWZ0ZXJBcHBseVVwZGF0ZXMoZm46ICgpID0+IHZvaWQpIHtcbiAgaWYgKGNhbkFwcGx5VXBkYXRlcygpKSB7XG4gICAgZm4oKVxuICB9IGVsc2Uge1xuICAgIGZ1bmN0aW9uIGhhbmRsZXIoc3RhdHVzOiBzdHJpbmcpIHtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdpZGxlJykge1xuICAgICAgICBtb2R1bGUuaG90LnJlbW92ZVN0YXR1c0hhbmRsZXIoaGFuZGxlcilcbiAgICAgICAgZm4oKVxuICAgICAgfVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFkZFN0YXR1c0hhbmRsZXIoaGFuZGxlcilcbiAgfVxufVxuXG4vLyBBdHRlbXB0IHRvIHVwZGF0ZSBjb2RlIG9uIHRoZSBmbHksIGZhbGwgYmFjayB0byBhIGhhcmQgcmVsb2FkLlxuZnVuY3Rpb24gdHJ5QXBwbHlVcGRhdGVzV2VicGFjaygpIHtcbiAgaWYgKCFtb2R1bGUuaG90KSB7XG4gICAgLy8gSG90TW9kdWxlUmVwbGFjZW1lbnRQbHVnaW4gaXMgbm90IGluIFdlYnBhY2sgY29uZmlndXJhdGlvbi5cbiAgICBjb25zb2xlLmVycm9yKCdIb3RNb2R1bGVSZXBsYWNlbWVudFBsdWdpbiBpcyBub3QgaW4gV2VicGFjayBjb25maWd1cmF0aW9uLicpXG4gICAgLy8gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFpc1VwZGF0ZUF2YWlsYWJsZSgpIHx8ICFjYW5BcHBseVVwZGF0ZXMoKSkge1xuICAgIGRpc3BhdGNoZXIub25CdWlsZE9rKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUFwcGx5VXBkYXRlcyhcbiAgICBlcnI6IGFueSxcbiAgICB1cGRhdGVkTW9kdWxlczogKHN0cmluZyB8IG51bWJlcilbXSB8IG51bGxcbiAgKSB7XG4gICAgaWYgKGVyciB8fCBSdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvciB8fCB1cGRhdGVkTW9kdWxlcyA9PSBudWxsKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEKVxuICAgICAgfSBlbHNlIGlmIChSdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRF9GUk9NX0VSUk9SKVxuICAgICAgfVxuICAgICAgcGVyZm9ybUZ1bGxSZWxvYWQoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZGlzcGF0Y2hlci5vbkJ1aWxkT2soKVxuXG4gICAgaWYgKGlzVXBkYXRlQXZhaWxhYmxlKCkpIHtcbiAgICAgIC8vIFdoaWxlIHdlIHdlcmUgdXBkYXRpbmcsIHRoZXJlIHdhcyBhIG5ldyB1cGRhdGUhIERvIGl0IGFnYWluLlxuICAgICAgdHJ5QXBwbHlVcGRhdGVzV2VicGFjaygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBkaXNwYXRjaGVyLm9uUmVmcmVzaCgpXG4gICAgcmVwb3J0SG1yTGF0ZW5jeShcbiAgICAgIHNlbmRNZXNzYWdlLFxuICAgICAgdXBkYXRlZE1vZHVsZXMsXG4gICAgICB3ZWJwYWNrU3RhcnRNc1NpbmNlRXBvY2ghLFxuICAgICAgRGF0ZS5ub3coKVxuICAgIClcblxuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfVEVTVF9NT0RFKSB7XG4gICAgICBhZnRlckFwcGx5VXBkYXRlcygoKSA9PiB7XG4gICAgICAgIGlmIChzZWxmLl9fTkVYVF9ITVJfQ0IpIHtcbiAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoKVxuICAgICAgICAgIHNlbGYuX19ORVhUX0hNUl9DQiA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL3dlYnBhY2suanMub3JnL2FwaS9ob3QtbW9kdWxlLXJlcGxhY2VtZW50LyNjaGVja1xuICBtb2R1bGUuaG90XG4gICAgLmNoZWNrKC8qIGF1dG9BcHBseSAqLyBmYWxzZSlcbiAgICAudGhlbigodXBkYXRlZE1vZHVsZXM6IChzdHJpbmcgfCBudW1iZXIpW10gfCBudWxsKSA9PiB7XG4gICAgICBpZiAodXBkYXRlZE1vZHVsZXMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGhhbmRsZSBhbiB1cGRhdGUsIGV2ZW4gaWYgdXBkYXRlZE1vZHVsZXMgaXMgZW1wdHkgKGJ1dFxuICAgICAgLy8gbm9uLW51bGwpIGZvciBhbnkgcmVhc29uLiBUaGF0J3Mgd2hhdCB3ZWJwYWNrIHdvdWxkIG5vcm1hbGx5IGRvOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9ibG9iLzNhYTZiNmJjM2E2NC9saWIvaG1yL0hvdE1vZHVsZVJlcGxhY2VtZW50LnJ1bnRpbWUuanMjTDI5Ni1MMjk4XG4gICAgICBkaXNwYXRjaGVyLm9uQmVmb3JlUmVmcmVzaCgpXG4gICAgICAvLyBodHRwczovL3dlYnBhY2suanMub3JnL2FwaS9ob3QtbW9kdWxlLXJlcGxhY2VtZW50LyNhcHBseVxuICAgICAgcmV0dXJuIG1vZHVsZS5ob3QuYXBwbHkoKVxuICAgIH0pXG4gICAgLnRoZW4oXG4gICAgICAodXBkYXRlZE1vZHVsZXM6IChzdHJpbmcgfCBudW1iZXIpW10gfCBudWxsKSA9PiB7XG4gICAgICAgIGhhbmRsZUFwcGx5VXBkYXRlcyhudWxsLCB1cGRhdGVkTW9kdWxlcylcbiAgICAgIH0sXG4gICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgaGFuZGxlQXBwbHlVcGRhdGVzKGVyciwgbnVsbClcbiAgICAgIH1cbiAgICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJmb3JtRnVsbFJlbG9hZChlcnI6IGFueSkge1xuICBjb25zdCBzdGFja1RyYWNlID1cbiAgICBlcnIgJiZcbiAgICAoKGVyci5zdGFjayAmJiBlcnIuc3RhY2suc3BsaXQoJ1xcbicpLnNsaWNlKDAsIDUpLmpvaW4oJ1xcbicpKSB8fFxuICAgICAgZXJyLm1lc3NhZ2UgfHxcbiAgICAgIGVyciArICcnKVxuXG4gIHNlbmRNZXNzYWdlKFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGV2ZW50OiAnY2xpZW50LWZ1bGwtcmVsb2FkJyxcbiAgICAgIHN0YWNrVHJhY2UsXG4gICAgICBoYWRSdW50aW1lRXJyb3I6ICEhUnVudGltZUVycm9ySGFuZGxlci5oYWRSdW50aW1lRXJyb3IsXG4gICAgICBkZXBlbmRlbmN5Q2hhaW46IGVyciA/IGVyci5kZXBlbmRlbmN5Q2hhaW4gOiB1bmRlZmluZWQsXG4gICAgfSlcbiAgKVxuXG4gIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxufVxuIl0sIm5hbWVzIjpbImNvbm5lY3QiLCJoYW5kbGVTdGF0aWNJbmRpY2F0b3IiLCJwZXJmb3JtRnVsbFJlbG9hZCIsIndpbmRvdyIsIl9fbmV4dERldkNsaWVudElkIiwiTWF0aCIsInJvdW5kIiwicmFuZG9tIiwiRGF0ZSIsIm5vdyIsImN1c3RvbUhtckV2ZW50SGFuZGxlciIsInR1cmJvcGFja01lc3NhZ2VMaXN0ZW5lcnMiLCJyZWdpc3RlciIsImFkZE1lc3NhZ2VMaXN0ZW5lciIsInBheWxvYWQiLCJwcm9jZXNzTWVzc2FnZSIsImVyciIsInJlcG9ydEludmFsaWRIbXJNZXNzYWdlIiwic3Vic2NyaWJlVG9IbXJFdmVudCIsImhhbmRsZXIiLCJvblVucmVjb3ZlcmFibGVFcnJvciIsIlJ1bnRpbWVFcnJvckhhbmRsZXIiLCJoYWRSdW50aW1lRXJyb3IiLCJhZGRUdXJib3BhY2tNZXNzYWdlTGlzdGVuZXIiLCJjYiIsInB1c2giLCJzZW5kVHVyYm9wYWNrTWVzc2FnZSIsIm1zZyIsInNlbmRNZXNzYWdlIiwiaGFuZGxlVXBkYXRlRXJyb3IiLCJpc0ZpcnN0Q29tcGlsYXRpb24iLCJtb3N0UmVjZW50Q29tcGlsYXRpb25IYXNoIiwiaGFzQ29tcGlsZUVycm9ycyIsImNsZWFyT3V0ZGF0ZWRFcnJvcnMiLCJjb25zb2xlIiwiY2xlYXIiLCJoYW5kbGVTdWNjZXNzIiwicHJvY2VzcyIsImVudiIsIlRVUkJPUEFDSyIsImhtclVwZGF0ZSIsInR1cmJvcGFja0htciIsIm9uQnVpbHQiLCJyZXBvcnRIbXJMYXRlbmN5IiwidXBkYXRlZE1vZHVsZXMiLCJzdGFydE1zU2luY2VFcG9jaCIsImVuZE1zU2luY2VFcG9jaCIsImhhc1VwZGF0ZXMiLCJkaXNwYXRjaGVyIiwib25CdWlsZE9rIiwiaXNIb3RVcGRhdGUiLCJfX05FWFRfREFUQV9fIiwicGFnZSIsImlzVXBkYXRlQXZhaWxhYmxlIiwidHJ5QXBwbHlVcGRhdGVzV2VicGFjayIsImhhbmRsZVdhcm5pbmdzIiwid2FybmluZ3MiLCJwcmludFdhcm5pbmdzIiwiZm9ybWF0dGVkIiwiZm9ybWF0V2VicGFja01lc3NhZ2VzIiwiZXJyb3JzIiwid2FybiIsImkiLCJsZW5ndGgiLCJzdHJpcEFuc2kiLCJoYW5kbGVFcnJvcnMiLCJvbkJ1aWxkRXJyb3IiLCJlcnJvciIsIl9fTkVYVF9URVNUX01PREUiLCJzZWxmIiwiX19ORVhUX0hNUl9DQiIsIndlYnBhY2tTdGFydE1zU2luY2VFcG9jaCIsIlR1cmJvcGFja0htciIsImlzck1hbmlmZXN0IiwiaGFuZGxlQXZhaWxhYmxlSGFzaCIsImhhc2giLCJfX05FWFRfREVWX0lORElDQVRPUiIsInJvdXRlSW5mbyIsIm5leHQiLCJyb3V0ZXIiLCJjb21wb25lbnRzIiwicGF0aG5hbWUiLCJwYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiYXBwQ29tcG9uZW50IiwiaXNEeW5hbWljUGFnZSIsIkJvb2xlYW4iLCJnZXRJbml0aWFsUHJvcHMiLCJfX05fU1NQIiwiaGFzQXBwR2V0SW5pdGlhbFByb3BzIiwib3JpZ0dldEluaXRpYWxQcm9wcyIsImlzUGFnZVN0YXRpYyIsImxvY2F0aW9uIiwib25TdGF0aWNJbmRpY2F0b3IiLCJvYmoiLCJhY3Rpb24iLCJITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIiLCJJU1JfTUFOSUZFU1QiLCJkYXRhIiwiQlVJTERJTkciLCJidWlsZGluZ0luZGljYXRvclNob3ciLCJvbkJ1aWxkaW5nIiwibG9nIiwiQlVJTFQiLCJTWU5DIiwiYnVpbGRpbmdJbmRpY2F0b3JIaWRlIiwib25WZXJzaW9uSW5mbyIsInZlcnNpb25JbmZvIiwib25EZXZJbmRpY2F0b3IiLCJkZXZJbmRpY2F0b3IiLCJoYXNFcnJvcnMiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJlcnJvckNvdW50IiwiY2xpZW50SWQiLCJoYXNXYXJuaW5ncyIsIndhcm5pbmdDb3VudCIsIlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUyIsIm9uU2VydmVyQ29tcG9uZW50Q2hhbmdlcyIsInJlbG9hZCIsIlNFUlZFUl9FUlJPUiIsImVycm9ySlNPTiIsIm1lc3NhZ2UiLCJzdGFjayIsInBhcnNlIiwiRXJyb3IiLCJUVVJCT1BBQ0tfQ09OTkVDVEVEIiwibGlzdGVuZXIiLCJ0eXBlIiwiVFVSQk9QQUNLX01FU1NBR0UiLCJvblR1cmJvcGFja01lc3NhZ2UiLCJvbkJlZm9yZVJlZnJlc2giLCJSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IiLCJvblJlZnJlc2giLCJfX3dlYnBhY2tfaGFzaF9fIiwiY2FuQXBwbHlVcGRhdGVzIiwibW9kdWxlIiwiaG90Iiwic3RhdHVzIiwiYWZ0ZXJBcHBseVVwZGF0ZXMiLCJmbiIsInJlbW92ZVN0YXR1c0hhbmRsZXIiLCJhZGRTdGF0dXNIYW5kbGVyIiwiaGFuZGxlQXBwbHlVcGRhdGVzIiwiUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRCIsImNoZWNrIiwidGhlbiIsImFwcGx5Iiwic3RhY2tUcmFjZSIsInNwbGl0Iiwic2xpY2UiLCJqb2luIiwiZGVwZW5kZW5jeUNoYWluIiwidW5kZWZpbmVkIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n addMessageListener: function() {\n return addMessageListener;\n },\n connectHMR: function() {\n return connectHMR;\n },\n sendMessage: function() {\n return sendMessage;\n }\n});\nconst _forwardlogs = __webpack_require__(/*! ../../../../next-devtools/userspace/app/forward-logs */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../../../../server/dev/hot-reloader-types */ \"(pages-dir-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _getsocketurl = __webpack_require__(/*! ../get-socket-url */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js\");\nlet source;\nconst eventCallbacks = [];\nfunction addMessageListener(callback) {\n eventCallbacks.push(callback);\n}\nfunction sendMessage(data) {\n if (!source || source.readyState !== source.OPEN) return;\n return source.send(data);\n}\nlet reconnections = 0;\nlet reloading = false;\nlet serverSessionId = null;\nfunction connectHMR(options) {\n function init() {\n if (source) source.close();\n function handleOnline() {\n if (_forwardlogs.isTerminalLoggingEnabled) {\n _forwardlogs.logQueue.onSocketReady(source);\n }\n reconnections = 0;\n window.console.log('[HMR] connected');\n }\n function handleMessage(event) {\n // While the page is reloading, don't respond to any more messages.\n // On reconnect, the server may send an empty list of changes if it was restarted.\n if (reloading) {\n return;\n }\n // Coerce into HMR_ACTION_TYPES as that is the format.\n const msg = JSON.parse(event.data);\n if ('action' in msg && msg.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED) {\n if (serverSessionId !== null && serverSessionId !== msg.data.sessionId) {\n // Either the server's session id has changed and it's a new server, or\n // it's been too long since we disconnected and we should reload the page.\n // There could be 1) unhandled server errors and/or 2) stale content.\n // Perform a hard reload of the page.\n window.location.reload();\n reloading = true;\n return;\n }\n serverSessionId = msg.data.sessionId;\n }\n for (const eventCallback of eventCallbacks){\n eventCallback(msg);\n }\n }\n let timer;\n function handleDisconnect() {\n source.onerror = null;\n source.onclose = null;\n source.close();\n reconnections++;\n // After 25 reconnects we'll want to reload the page as it indicates the dev server is no longer running.\n if (reconnections > 25) {\n reloading = true;\n window.location.reload();\n return;\n }\n clearTimeout(timer);\n // Try again after 5 seconds\n timer = setTimeout(init, reconnections > 5 ? 5000 : 1000);\n }\n const url = (0, _getsocketurl.getSocketUrl)(options.assetPrefix);\n source = new window.WebSocket(\"\" + url + options.path);\n source.onopen = handleOnline;\n source.onerror = handleDisconnect;\n source.onclose = handleDisconnect;\n source.onmessage = handleMessage;\n }\n init();\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=websocket.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvcGFnZXMvd2Vic29ja2V0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQWdCZ0JBLGtCQUFrQjtlQUFsQkE7O0lBYUFDLFVBQVU7ZUFBVkE7O0lBVEFDLFdBQVc7ZUFBWEE7Ozt5Q0FqQlQ7OENBSUE7MENBQ3NCO0FBRTdCLElBQUlDO0FBSUosTUFBTUMsaUJBQXdDLEVBQUU7QUFFekMsU0FBU0osbUJBQW1CSyxRQUF3QjtJQUN6REQsZUFBZUUsSUFBSSxDQUFDRDtBQUN0QjtBQUVPLFNBQVNILFlBQVlLLElBQVk7SUFDdEMsSUFBSSxDQUFDSixVQUFVQSxPQUFPSyxVQUFVLEtBQUtMLE9BQU9NLElBQUksRUFBRTtJQUNsRCxPQUFPTixPQUFPTyxJQUFJLENBQUNIO0FBQ3JCO0FBRUEsSUFBSUksZ0JBQWdCO0FBQ3BCLElBQUlDLFlBQVk7QUFDaEIsSUFBSUMsa0JBQWlDO0FBRTlCLFNBQVNaLFdBQVdhLE9BQThDO0lBQ3ZFLFNBQVNDO1FBQ1AsSUFBSVosUUFBUUEsT0FBT2EsS0FBSztRQUV4QixTQUFTQztZQUNQLElBQUlDLGFBQUFBLHdCQUF3QixFQUFFO2dCQUM1QkMsYUFBQUEsUUFBUSxDQUFDQyxhQUFhLENBQUNqQjtZQUN6QjtZQUNBUSxnQkFBZ0I7WUFDaEJVLE9BQU9DLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO1FBQ3JCO1FBRUEsU0FBU0MsY0FBY0MsS0FBMkI7WUFDaEQsbUVBQW1FO1lBQ25FLGtGQUFrRjtZQUNsRixJQUFJYixXQUFXO2dCQUNiO1lBQ0Y7WUFFQSxzREFBc0Q7WUFDdEQsTUFBTWMsTUFBd0JDLEtBQUtDLEtBQUssQ0FBQ0gsTUFBTWxCLElBQUk7WUFFbkQsSUFDRSxZQUFZbUIsT0FDWkEsSUFBSUcsTUFBTSxLQUFLQyxrQkFBQUEsMkJBQTJCLENBQUNDLG1CQUFtQixFQUM5RDtnQkFDQSxJQUNFbEIsb0JBQW9CLFFBQ3BCQSxvQkFBb0JhLElBQUluQixJQUFJLENBQUN5QixTQUFTLEVBQ3RDO29CQUNBLHVFQUF1RTtvQkFDdkUsMEVBQTBFO29CQUMxRSxxRUFBcUU7b0JBQ3JFLHFDQUFxQztvQkFDckNYLE9BQU9ZLFFBQVEsQ0FBQ0MsTUFBTTtvQkFFdEJ0QixZQUFZO29CQUNaO2dCQUNGO2dCQUVBQyxrQkFBa0JhLElBQUluQixJQUFJLENBQUN5QixTQUFTO1lBQ3RDO1lBRUEsS0FBSyxNQUFNRyxpQkFBaUIvQixlQUFnQjtnQkFDMUMrQixjQUFjVDtZQUNoQjtRQUNGO1FBRUEsSUFBSVU7UUFDSixTQUFTQztZQUNQbEMsT0FBT21DLE9BQU8sR0FBRztZQUNqQm5DLE9BQU9vQyxPQUFPLEdBQUc7WUFDakJwQyxPQUFPYSxLQUFLO1lBQ1pMO1lBQ0EseUdBQXlHO1lBQ3pHLElBQUlBLGdCQUFnQixJQUFJO2dCQUN0QkMsWUFBWTtnQkFDWlMsT0FBT1ksUUFBUSxDQUFDQyxNQUFNO2dCQUN0QjtZQUNGO1lBRUFNLGFBQWFKO1lBQ2IsNEJBQTRCO1lBQzVCQSxRQUFRSyxXQUFXMUIsTUFBTUosZ0JBQWdCLElBQUksT0FBTztRQUN0RDtRQUVBLE1BQU0rQixNQUFNQyxDQUFBQSxHQUFBQSxjQUFBQSxZQUFBQSxFQUFhN0IsUUFBUThCLFdBQVc7UUFFNUN6QyxTQUFTLElBQUlrQixPQUFPd0IsU0FBUyxDQUFFLEtBQUVILE1BQU01QixRQUFRZ0MsSUFBSTtRQUNuRDNDLE9BQU80QyxNQUFNLEdBQUc5QjtRQUNoQmQsT0FBT21DLE9BQU8sR0FBR0Q7UUFDakJsQyxPQUFPb0MsT0FBTyxHQUFHRjtRQUNqQmxDLE9BQU82QyxTQUFTLEdBQUd4QjtJQUNyQjtJQUVBVDtBQUNGIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXGRldlxcaG90LXJlbG9hZGVyXFxwYWdlc1xcd2Vic29ja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGlzVGVybWluYWxMb2dnaW5nRW5hYmxlZCxcbiAgbG9nUXVldWUsXG59IGZyb20gJy4uLy4uLy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9mb3J3YXJkLWxvZ3MnXG5pbXBvcnQge1xuICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIsXG4gIHR5cGUgSE1SX0FDVElPTl9UWVBFUyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMnXG5pbXBvcnQgeyBnZXRTb2NrZXRVcmwgfSBmcm9tICcuLi9nZXQtc29ja2V0LXVybCdcblxubGV0IHNvdXJjZTogV2ViU29ja2V0XG5cbnR5cGUgQWN0aW9uQ2FsbGJhY2sgPSAoYWN0aW9uOiBITVJfQUNUSU9OX1RZUEVTKSA9PiB2b2lkXG5cbmNvbnN0IGV2ZW50Q2FsbGJhY2tzOiBBcnJheTxBY3Rpb25DYWxsYmFjaz4gPSBbXVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTWVzc2FnZUxpc3RlbmVyKGNhbGxiYWNrOiBBY3Rpb25DYWxsYmFjaykge1xuICBldmVudENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VuZE1lc3NhZ2UoZGF0YTogc3RyaW5nKSB7XG4gIGlmICghc291cmNlIHx8IHNvdXJjZS5yZWFkeVN0YXRlICE9PSBzb3VyY2UuT1BFTikgcmV0dXJuXG4gIHJldHVybiBzb3VyY2Uuc2VuZChkYXRhKVxufVxuXG5sZXQgcmVjb25uZWN0aW9ucyA9IDBcbmxldCByZWxvYWRpbmcgPSBmYWxzZVxubGV0IHNlcnZlclNlc3Npb25JZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RITVIob3B0aW9uczogeyBwYXRoOiBzdHJpbmc7IGFzc2V0UHJlZml4OiBzdHJpbmcgfSkge1xuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIGlmIChzb3VyY2UpIHNvdXJjZS5jbG9zZSgpXG5cbiAgICBmdW5jdGlvbiBoYW5kbGVPbmxpbmUoKSB7XG4gICAgICBpZiAoaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKSB7XG4gICAgICAgIGxvZ1F1ZXVlLm9uU29ja2V0UmVhZHkoc291cmNlKVxuICAgICAgfVxuICAgICAgcmVjb25uZWN0aW9ucyA9IDBcbiAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnW0hNUl0gY29ubmVjdGVkJylcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKGV2ZW50OiBNZXNzYWdlRXZlbnQ8c3RyaW5nPikge1xuICAgICAgLy8gV2hpbGUgdGhlIHBhZ2UgaXMgcmVsb2FkaW5nLCBkb24ndCByZXNwb25kIHRvIGFueSBtb3JlIG1lc3NhZ2VzLlxuICAgICAgLy8gT24gcmVjb25uZWN0LCB0aGUgc2VydmVyIG1heSBzZW5kIGFuIGVtcHR5IGxpc3Qgb2YgY2hhbmdlcyBpZiBpdCB3YXMgcmVzdGFydGVkLlxuICAgICAgaWYgKHJlbG9hZGluZykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQ29lcmNlIGludG8gSE1SX0FDVElPTl9UWVBFUyBhcyB0aGF0IGlzIHRoZSBmb3JtYXQuXG4gICAgICBjb25zdCBtc2c6IEhNUl9BQ1RJT05fVFlQRVMgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpXG5cbiAgICAgIGlmIChcbiAgICAgICAgJ2FjdGlvbicgaW4gbXNnICYmXG4gICAgICAgIG1zZy5hY3Rpb24gPT09IEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5UVVJCT1BBQ0tfQ09OTkVDVEVEXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlcnZlclNlc3Npb25JZCAhPT0gbnVsbCAmJlxuICAgICAgICAgIHNlcnZlclNlc3Npb25JZCAhPT0gbXNnLmRhdGEuc2Vzc2lvbklkXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIEVpdGhlciB0aGUgc2VydmVyJ3Mgc2Vzc2lvbiBpZCBoYXMgY2hhbmdlZCBhbmQgaXQncyBhIG5ldyBzZXJ2ZXIsIG9yXG4gICAgICAgICAgLy8gaXQncyBiZWVuIHRvbyBsb25nIHNpbmNlIHdlIGRpc2Nvbm5lY3RlZCBhbmQgd2Ugc2hvdWxkIHJlbG9hZCB0aGUgcGFnZS5cbiAgICAgICAgICAvLyBUaGVyZSBjb3VsZCBiZSAxKSB1bmhhbmRsZWQgc2VydmVyIGVycm9ycyBhbmQvb3IgMikgc3RhbGUgY29udGVudC5cbiAgICAgICAgICAvLyBQZXJmb3JtIGEgaGFyZCByZWxvYWQgb2YgdGhlIHBhZ2UuXG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG5cbiAgICAgICAgICByZWxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBzZXJ2ZXJTZXNzaW9uSWQgPSBtc2cuZGF0YS5zZXNzaW9uSWRcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBldmVudENhbGxiYWNrIG9mIGV2ZW50Q2FsbGJhY2tzKSB7XG4gICAgICAgIGV2ZW50Q2FsbGJhY2sobXNnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD5cbiAgICBmdW5jdGlvbiBoYW5kbGVEaXNjb25uZWN0KCkge1xuICAgICAgc291cmNlLm9uZXJyb3IgPSBudWxsXG4gICAgICBzb3VyY2Uub25jbG9zZSA9IG51bGxcbiAgICAgIHNvdXJjZS5jbG9zZSgpXG4gICAgICByZWNvbm5lY3Rpb25zKytcbiAgICAgIC8vIEFmdGVyIDI1IHJlY29ubmVjdHMgd2UnbGwgd2FudCB0byByZWxvYWQgdGhlIHBhZ2UgYXMgaXQgaW5kaWNhdGVzIHRoZSBkZXYgc2VydmVyIGlzIG5vIGxvbmdlciBydW5uaW5nLlxuICAgICAgaWYgKHJlY29ubmVjdGlvbnMgPiAyNSkge1xuICAgICAgICByZWxvYWRpbmcgPSB0cnVlXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgLy8gVHJ5IGFnYWluIGFmdGVyIDUgc2Vjb25kc1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGluaXQsIHJlY29ubmVjdGlvbnMgPiA1ID8gNTAwMCA6IDEwMDApXG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gZ2V0U29ja2V0VXJsKG9wdGlvbnMuYXNzZXRQcmVmaXgpXG5cbiAgICBzb3VyY2UgPSBuZXcgd2luZG93LldlYlNvY2tldChgJHt1cmx9JHtvcHRpb25zLnBhdGh9YClcbiAgICBzb3VyY2Uub25vcGVuID0gaGFuZGxlT25saW5lXG4gICAgc291cmNlLm9uZXJyb3IgPSBoYW5kbGVEaXNjb25uZWN0XG4gICAgc291cmNlLm9uY2xvc2UgPSBoYW5kbGVEaXNjb25uZWN0XG4gICAgc291cmNlLm9ubWVzc2FnZSA9IGhhbmRsZU1lc3NhZ2VcbiAgfVxuXG4gIGluaXQoKVxufVxuIl0sIm5hbWVzIjpbImFkZE1lc3NhZ2VMaXN0ZW5lciIsImNvbm5lY3RITVIiLCJzZW5kTWVzc2FnZSIsInNvdXJjZSIsImV2ZW50Q2FsbGJhY2tzIiwiY2FsbGJhY2siLCJwdXNoIiwiZGF0YSIsInJlYWR5U3RhdGUiLCJPUEVOIiwic2VuZCIsInJlY29ubmVjdGlvbnMiLCJyZWxvYWRpbmciLCJzZXJ2ZXJTZXNzaW9uSWQiLCJvcHRpb25zIiwiaW5pdCIsImNsb3NlIiwiaGFuZGxlT25saW5lIiwiaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkIiwibG9nUXVldWUiLCJvblNvY2tldFJlYWR5Iiwid2luZG93IiwiY29uc29sZSIsImxvZyIsImhhbmRsZU1lc3NhZ2UiLCJldmVudCIsIm1zZyIsIkpTT04iLCJwYXJzZSIsImFjdGlvbiIsIkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiIsIlRVUkJPUEFDS19DT05ORUNURUQiLCJzZXNzaW9uSWQiLCJsb2NhdGlvbiIsInJlbG9hZCIsImV2ZW50Q2FsbGJhY2siLCJ0aW1lciIsImhhbmRsZURpc2Nvbm5lY3QiLCJvbmVycm9yIiwib25jbG9zZSIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJ1cmwiLCJnZXRTb2NrZXRVcmwiLCJhc3NldFByZWZpeCIsIldlYlNvY2tldCIsInBhdGgiLCJvbm9wZW4iLCJvbm1lc3NhZ2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/shared.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-reloader/shared.js ***!
|
||
\******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n REACT_REFRESH_FULL_RELOAD: function() {\n return REACT_REFRESH_FULL_RELOAD;\n },\n REACT_REFRESH_FULL_RELOAD_FROM_ERROR: function() {\n return REACT_REFRESH_FULL_RELOAD_FROM_ERROR;\n },\n reportInvalidHmrMessage: function() {\n return reportInvalidHmrMessage;\n }\n});\nconst REACT_REFRESH_FULL_RELOAD = '[Fast Refresh] performing full reload\\n\\n' + \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" + 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n' + 'Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n' + 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n' + 'Fast Refresh requires at least one parent function component in your React tree.';\nconst REACT_REFRESH_FULL_RELOAD_FROM_ERROR = '[Fast Refresh] performing full reload because your application had an unrecoverable error';\nfunction reportInvalidHmrMessage(message, err) {\n console.warn('[HMR] Invalid message: ' + JSON.stringify(message) + '\\n' + (err instanceof Error && (err == null ? void 0 : err.stack) || ''));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=shared.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvc2hhcmVkLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUVhQSx5QkFBeUI7ZUFBekJBOztJQVFBQyxvQ0FBb0M7ZUFBcENBOztJQUdHQyx1QkFBdUI7ZUFBdkJBOzs7QUFYVCxNQUFNRiw0QkFDWCw4Q0FDQSxtSUFDQSxxSUFDQSwrR0FDQSw4SEFDQTtBQUVLLE1BQU1DLHVDQUNYO0FBRUssU0FBU0Msd0JBQ2RDLE9BQWlELEVBQ2pEQyxHQUFZO0lBRVpDLFFBQVFDLElBQUksQ0FDViw0QkFDRUMsS0FBS0MsU0FBUyxDQUFDTCxXQUNmLE9BQ0MsQ0FBQ0MsZUFBZUssVUFBU0wsT0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsSUFBS00sS0FBQUEsS0FBVSxHQUFDO0FBRWhEIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXGRldlxcaG90LXJlbG9hZGVyXFxzaGFyZWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBITVJfQUNUSU9OX1RZUEVTIH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEID1cbiAgJ1tGYXN0IFJlZnJlc2hdIHBlcmZvcm1pbmcgZnVsbCByZWxvYWRcXG5cXG4nICtcbiAgXCJGYXN0IFJlZnJlc2ggd2lsbCBwZXJmb3JtIGEgZnVsbCByZWxvYWQgd2hlbiB5b3UgZWRpdCBhIGZpbGUgdGhhdCdzIGltcG9ydGVkIGJ5IG1vZHVsZXMgb3V0c2lkZSBvZiB0aGUgUmVhY3QgcmVuZGVyaW5nIHRyZWUuXFxuXCIgK1xuICAnWW91IG1pZ2h0IGhhdmUgYSBmaWxlIHdoaWNoIGV4cG9ydHMgYSBSZWFjdCBjb21wb25lbnQgYnV0IGFsc28gZXhwb3J0cyBhIHZhbHVlIHRoYXQgaXMgaW1wb3J0ZWQgYnkgYSBub24tUmVhY3QgY29tcG9uZW50IGZpbGUuXFxuJyArXG4gICdDb25zaWRlciBtaWdyYXRpbmcgdGhlIG5vbi1SZWFjdCBjb21wb25lbnQgZXhwb3J0IHRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgaW1wb3J0aW5nIGl0IGludG8gYm90aCBmaWxlcy5cXG5cXG4nICtcbiAgJ0l0IGlzIGFsc28gcG9zc2libGUgdGhlIHBhcmVudCBjb21wb25lbnQgb2YgdGhlIGNvbXBvbmVudCB5b3UgZWRpdGVkIGlzIGEgY2xhc3MgY29tcG9uZW50LCB3aGljaCBkaXNhYmxlcyBGYXN0IFJlZnJlc2guXFxuJyArXG4gICdGYXN0IFJlZnJlc2ggcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHBhcmVudCBmdW5jdGlvbiBjb21wb25lbnQgaW4geW91ciBSZWFjdCB0cmVlLidcblxuZXhwb3J0IGNvbnN0IFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUiA9XG4gICdbRmFzdCBSZWZyZXNoXSBwZXJmb3JtaW5nIGZ1bGwgcmVsb2FkIGJlY2F1c2UgeW91ciBhcHBsaWNhdGlvbiBoYWQgYW4gdW5yZWNvdmVyYWJsZSBlcnJvcidcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydEludmFsaWRIbXJNZXNzYWdlKFxuICBtZXNzYWdlOiBITVJfQUNUSU9OX1RZUEVTIHwgTWVzc2FnZUV2ZW50PHVua25vd24+LFxuICBlcnI6IHVua25vd25cbikge1xuICBjb25zb2xlLndhcm4oXG4gICAgJ1tITVJdIEludmFsaWQgbWVzc2FnZTogJyArXG4gICAgICBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSArXG4gICAgICAnXFxuJyArXG4gICAgICAoKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVycj8uc3RhY2spIHx8ICcnKVxuICApXG59XG4iXSwibmFtZXMiOlsiUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRCIsIlJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUiIsInJlcG9ydEludmFsaWRIbXJNZXNzYWdlIiwibWVzc2FnZSIsImVyciIsImNvbnNvbGUiLCJ3YXJuIiwiSlNPTiIsInN0cmluZ2lmeSIsIkVycm9yIiwic3RhY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/shared.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js":
|
||
/*!*****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js ***!
|
||
\*****************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"TurbopackHmr\", ({\n enumerable: true,\n get: function() {\n return TurbopackHmr;\n }\n}));\nconst _class_private_field_loose_base = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_base */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\");\nconst _class_private_field_loose_key = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_key */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\");\n// How long to wait before reporting the HMR start, used to suppress irrelevant\n// `BUILDING` events. Does not impact reported latency.\nconst TURBOPACK_HMR_START_DELAY_MS = 100;\nvar _updatedModules = /*#__PURE__*/ _class_private_field_loose_key._(\"_updatedModules\"), _startMsSinceEpoch = /*#__PURE__*/ _class_private_field_loose_key._(\"_startMsSinceEpoch\"), _lastUpdateMsSinceEpoch = /*#__PURE__*/ _class_private_field_loose_key._(\"_lastUpdateMsSinceEpoch\"), _deferredReportHmrStartId = /*#__PURE__*/ _class_private_field_loose_key._(\"_deferredReportHmrStartId\"), // as it reports *any* compilation, including fully no-op/cached compilations\n// and those unrelated to HMR. Fixing this would require significant\n// architectural changes.\n//\n// Work around this by deferring any \"rebuilding\" message by 100ms. If we get\n// a BUILT event within that threshold and nothing has changed, just suppress\n// the message entirely.\n_runDeferredReportHmrStart = /*#__PURE__*/ _class_private_field_loose_key._(\"_runDeferredReportHmrStart\"), _cancelDeferredReportHmrStart = /*#__PURE__*/ _class_private_field_loose_key._(\"_cancelDeferredReportHmrStart\"), /** Helper for other `onEvent` methods. */ _onUpdate = /*#__PURE__*/ _class_private_field_loose_key._(\"_onUpdate\");\nclass TurbopackHmr {\n onBuilding() {\n _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] = undefined;\n _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch] = Date.now();\n // report the HMR start after a short delay\n _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] = setTimeout(()=>_class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart](), self.__NEXT_HMR_TURBOPACK_REPORT_NOISY_NOOP_EVENTS ? 0 : TURBOPACK_HMR_START_DELAY_MS);\n }\n onTurbopackMessage(msg) {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n const updatedModules = extractModulesFromTurbopackMessage(msg.data);\n for (const module1 of updatedModules){\n _class_private_field_loose_base._(this, _updatedModules)[_updatedModules].add(module1);\n }\n }\n onServerComponentChanges() {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n }\n onReloadPage() {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n }\n onPageAddRemove() {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n }\n /**\n * @returns `null` if the caller should ignore the update entirely. Returns an\n * object with `hasUpdates: false` if the caller should report the end of\n * the HMR in the browser console, but the HMR was a no-op.\n */ onBuilt() {\n // Check that we got *any* `TurbopackMessageAction`, even if\n // `updatedModules` is empty (not everything gets recorded there).\n //\n // There's also a case where `onBuilt` gets called before `onBuilding`,\n // which can happen during initial page load. Ignore that too!\n const hasUpdates = _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] != null && _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch] != null;\n if (!hasUpdates && _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] != null) {\n // suppress the update entirely\n _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n return null;\n }\n _class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart]();\n var _class_private_field_loose_base__lastUpdateMsSinceEpoch;\n const result = {\n hasUpdates,\n updatedModules: _class_private_field_loose_base._(this, _updatedModules)[_updatedModules],\n startMsSinceEpoch: _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch],\n endMsSinceEpoch: (_class_private_field_loose_base__lastUpdateMsSinceEpoch = _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch]) != null ? _class_private_field_loose_base__lastUpdateMsSinceEpoch : Date.now()\n };\n _class_private_field_loose_base._(this, _updatedModules)[_updatedModules] = new Set();\n return result;\n }\n constructor(){\n Object.defineProperty(this, _runDeferredReportHmrStart, {\n value: runDeferredReportHmrStart\n });\n Object.defineProperty(this, _cancelDeferredReportHmrStart, {\n value: cancelDeferredReportHmrStart\n });\n Object.defineProperty(this, _onUpdate, {\n value: onUpdate\n });\n Object.defineProperty(this, _updatedModules, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _startMsSinceEpoch, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _lastUpdateMsSinceEpoch, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _deferredReportHmrStartId, {\n writable: true,\n value: void 0\n });\n _class_private_field_loose_base._(this, _updatedModules)[_updatedModules] = new Set();\n }\n}\nfunction runDeferredReportHmrStart() {\n if (_class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] != null) {\n console.log('[Fast Refresh] rebuilding');\n _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n }\n}\nfunction cancelDeferredReportHmrStart() {\n clearTimeout(_class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId]);\n _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] = undefined;\n}\nfunction onUpdate() {\n _class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart]();\n _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] = Date.now();\n}\nfunction extractModulesFromTurbopackMessage(data) {\n const updatedModules = new Set();\n const updates = Array.isArray(data) ? data : [\n data\n ];\n for (const update of updates){\n // TODO this won't capture changes to CSS since they don't result in a \"merged\" update\n if (update.type !== 'partial' || update.instruction.type !== 'ChunkListUpdate' || update.instruction.merged === undefined) {\n continue;\n }\n for (const mergedUpdate of update.instruction.merged){\n for (const name of Object.keys(mergedUpdate.entries)){\n const res = /(.*)\\s+\\[.*/.exec(name);\n if (res === null) {\n console.error('[Turbopack HMR] Expected module to match pattern: ' + name);\n continue;\n }\n updatedModules.add(res[1]);\n }\n }\n }\n return updatedModules;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=turbopack-hot-reloader-common.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvdHVyYm9wYWNrLWhvdC1yZWxvYWRlci1jb21tb24uanMiLCJtYXBwaW5ncyI6Ijs7OztnREFvQmFBOzs7ZUFBQUE7Ozs7O0FBWGIsK0VBQStFO0FBQy9FLHVEQUF1RDtBQUN2RCxNQUFNQywrQkFBK0I7SUFVbkMscUZBQ0EsMkZBQ0EscUdBQ0EseUdBTUEsNEVBQTRFLENBQ0M7QUFDN0Usb0VBQW9FO0FBQ3BFLHlCQUF5QjtBQUN6QixFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSx3QkFBd0I7QUFDeEIsMkdBT0EsaUhBb0JBLHdDQUF3QyxHQUN4QztBQTlDSyxNQUFNRDtJQThCWEUsYUFBYTtRQUNYLHNDQUFJLEVBQUMsb0RBQTBCQztRQUMvQixzQ0FBSSxFQUFDO1FBQ0wsc0NBQUksRUFBQywwQ0FBcUJDLEtBQUtDLEdBQUc7UUFFbEMsMkNBQTJDO1FBQzNDLHNDQUFJLEVBQUMsd0RBQTRCQyxXQUMvQixJQUFNLHNDQUFJLEVBQUMsMkRBQ1gsS0FDS0UsNkNBQTZDLEdBQzlDLElBQ0FQLGlCQUhzRTtJQUs5RTtJQVFBUSxtQkFBbUJDLEdBQTJCLEVBQUU7UUFDOUMsc0NBQUksRUFBQztRQUNMLE1BQU1DLGlCQUFpQkMsbUNBQW1DRixJQUFJRyxJQUFJO1FBQ2xFLEtBQUssTUFBTUMsV0FBVUgsZUFBZ0I7WUFDbkMsc0NBQUksRUFBQyxrQ0FBZ0JJLEdBQUcsQ0FBQ0Q7UUFDM0I7SUFDRjtJQUVBRSwyQkFBMkI7UUFDekIsc0NBQUksRUFBQztJQUNQO0lBRUFDLGVBQWU7UUFDYixzQ0FBSSxFQUFDO0lBQ1A7SUFFQUMsa0JBQWtCO1FBQ2hCLHNDQUFJLEVBQUM7SUFDUDtJQUVBOzs7O0dBSUMsR0FDREMsVUFBNEI7UUFDMUIsNERBQTREO1FBQzVELGtFQUFrRTtRQUNsRSxFQUFFO1FBQ0YsdUVBQXVFO1FBQ3ZFLDhEQUE4RDtRQUM5RCxNQUFNQyxhQUNKLHNDQUFJLEVBQUMscURBQTJCLFFBQVEsc0NBQUksRUFBQywyQ0FBc0I7UUFDckUsSUFBSSxDQUFDQSxjQUFjLHNDQUFJLEVBQUMseURBQTZCLE1BQU07WUFDekQsK0JBQStCO1lBQy9CLHNDQUFJLEVBQUM7WUFDTCxPQUFPO1FBQ1Q7UUFDQSxzQ0FBSSxFQUFDOztRQUVMLE1BQU1DLFNBQVM7WUFDYkQ7WUFDQVQsY0FBYyxFQUFFLHNDQUFJLEVBQUM7WUFDckJXLGlCQUFpQixFQUFFLHNDQUFJLEVBQUM7WUFDeEJDLGlCQUFpQixpR0FBSSxFQUFDLHVIQUEyQm5CLEtBQUtDLEdBQUc7UUFDM0Q7UUFDQSxzQ0FBSSxFQUFDLG9DQUFrQixJQUFJbUI7UUFDM0IsT0FBT0g7SUFDVDtJQTdGQUksYUFBYztRQVlkO21CQUFBOztRQU9BO21CQUFBOztRQXFCQTttQkFBQTs7UUE3Q0E7O21CQUFBOztRQUNBOzttQkFBQTs7UUFDQTs7bUJBQUE7O1FBQ0E7O21CQUFBOztRQUdFLHNDQUFJLEVBQUMsb0NBQWtCLElBQUlEO0lBQzdCO0FBNEZGO0FBbEZFO0lBQ0UsSUFBSSxzQ0FBSSxFQUFDLHlEQUE2QixNQUFNO1FBQzFDRSxRQUFRQyxHQUFHLENBQUM7UUFDWixzQ0FBSSxFQUFDO0lBQ1A7QUFDRjtBQUVBO0lBQ0VDLGFBQWEsc0NBQUksRUFBQztJQUNsQixzQ0FBSSxFQUFDLHdEQUE0QnpCO0FBQ25DO0FBa0JBO0lBQ0Usc0NBQUksRUFBQztJQUNMLHNDQUFJLEVBQUMsb0RBQTBCQyxLQUFLQyxHQUFHO0FBQ3pDO0FBcURGLFNBQVNPLG1DQUNQQyxJQUF5QztJQUV6QyxNQUFNRixpQkFBOEIsSUFBSWE7SUFFeEMsTUFBTUssVUFBVUMsTUFBTUMsT0FBTyxDQUFDbEIsUUFBUUEsT0FBTztRQUFDQTtLQUFLO0lBQ25ELEtBQUssTUFBTW1CLFVBQVVILFFBQVM7UUFDNUIsc0ZBQXNGO1FBQ3RGLElBQ0VHLE9BQU9DLElBQUksS0FBSyxhQUNoQkQsT0FBT0UsV0FBVyxDQUFDRCxJQUFJLEtBQUsscUJBQzVCRCxPQUFPRSxXQUFXLENBQUNDLE1BQU0sS0FBS2hDLFdBQzlCO1lBQ0E7UUFDRjtRQUVBLEtBQUssTUFBTWlDLGdCQUFnQkosT0FBT0UsV0FBVyxDQUFDQyxNQUFNLENBQUU7WUFDcEQsS0FBSyxNQUFNRSxRQUFRQyxPQUFPQyxJQUFJLENBQUNILGFBQWFJLE9BQU8sRUFBRztnQkFDcEQsTUFBTUMsTUFBTSxjQUFjQyxJQUFJLENBQUNMO2dCQUMvQixJQUFJSSxRQUFRLE1BQU07b0JBQ2hCZixRQUFRaUIsS0FBSyxDQUNYLHVEQUF1RE47b0JBRXpEO2dCQUNGO2dCQUVBMUIsZUFBZUksR0FBRyxDQUFDMEIsR0FBRyxDQUFDLEVBQUU7WUFDM0I7UUFDRjtJQUNGO0lBRUEsT0FBTzlCO0FBQ1QiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxcZGV2XFxob3QtcmVsb2FkZXJcXHR1cmJvcGFjay1ob3QtcmVsb2FkZXItY29tbW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVHVyYm9wYWNrTWVzc2FnZUFjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzJ1xuaW1wb3J0IHR5cGUgeyBVcGRhdGUgYXMgVHVyYm9wYWNrVXBkYXRlIH0gZnJvbSAnLi4vLi4vLi4vYnVpbGQvc3djL3R5cGVzJ1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fTkVYVF9ITVJfVFVSQk9QQUNLX1JFUE9SVF9OT0lTWV9OT09QX0VWRU5UUzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICB9XG59XG5cbi8vIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHJlcG9ydGluZyB0aGUgSE1SIHN0YXJ0LCB1c2VkIHRvIHN1cHByZXNzIGlycmVsZXZhbnRcbi8vIGBCVUlMRElOR2AgZXZlbnRzLiBEb2VzIG5vdCBpbXBhY3QgcmVwb3J0ZWQgbGF0ZW5jeS5cbmNvbnN0IFRVUkJPUEFDS19ITVJfU1RBUlRfREVMQVlfTVMgPSAxMDBcblxuaW50ZXJmYWNlIEhtclVwZGF0ZSB7XG4gIGhhc1VwZGF0ZXM6IGJvb2xlYW5cbiAgdXBkYXRlZE1vZHVsZXM6IFNldDxzdHJpbmc+XG4gIHN0YXJ0TXNTaW5jZUVwb2NoOiBudW1iZXJcbiAgZW5kTXNTaW5jZUVwb2NoOiBudW1iZXJcbn1cblxuZXhwb3J0IGNsYXNzIFR1cmJvcGFja0htciB7XG4gICN1cGRhdGVkTW9kdWxlczogU2V0PHN0cmluZz5cbiAgI3N0YXJ0TXNTaW5jZUVwb2NoOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2g6IG51bWJlciB8IHVuZGVmaW5lZFxuICAjZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuI3VwZGF0ZWRNb2R1bGVzID0gbmV3IFNldCgpXG4gIH1cblxuICAvLyBIQUNLOiBUdXJib3BhY2sgdGVuZHMgdG8gZ2VuZXJhdGUgYSBsb3Qgb2YgaXJyZWxldmFudCBcIkJVSUxESU5HXCIgYWN0aW9ucyxcbiAgLy8gYXMgaXQgcmVwb3J0cyAqYW55KiBjb21waWxhdGlvbiwgaW5jbHVkaW5nIGZ1bGx5IG5vLW9wL2NhY2hlZCBjb21waWxhdGlvbnNcbiAgLy8gYW5kIHRob3NlIHVucmVsYXRlZCB0byBITVIuIEZpeGluZyB0aGlzIHdvdWxkIHJlcXVpcmUgc2lnbmlmaWNhbnRcbiAgLy8gYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLlxuICAvL1xuICAvLyBXb3JrIGFyb3VuZCB0aGlzIGJ5IGRlZmVycmluZyBhbnkgXCJyZWJ1aWxkaW5nXCIgbWVzc2FnZSBieSAxMDBtcy4gSWYgd2UgZ2V0XG4gIC8vIGEgQlVJTFQgZXZlbnQgd2l0aGluIHRoYXQgdGhyZXNob2xkIGFuZCBub3RoaW5nIGhhcyBjaGFuZ2VkLCBqdXN0IHN1cHByZXNzXG4gIC8vIHRoZSBtZXNzYWdlIGVudGlyZWx5LlxuICAjcnVuRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpIHtcbiAgICBpZiAodGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkICE9IG51bGwpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbRmFzdCBSZWZyZXNoXSByZWJ1aWxkaW5nJylcbiAgICAgIHRoaXMuI2NhbmNlbERlZmVycmVkUmVwb3J0SG1yU3RhcnQoKVxuICAgIH1cbiAgfVxuXG4gICNjYW5jZWxEZWZlcnJlZFJlcG9ydEhtclN0YXJ0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLiNkZWZlcnJlZFJlcG9ydEhtclN0YXJ0SWQpXG4gICAgdGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkID0gdW5kZWZpbmVkXG4gIH1cblxuICBvbkJ1aWxkaW5nKCkge1xuICAgIHRoaXMuI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2ggPSB1bmRlZmluZWRcbiAgICB0aGlzLiNjYW5jZWxEZWZlcnJlZFJlcG9ydEhtclN0YXJ0KClcbiAgICB0aGlzLiNzdGFydE1zU2luY2VFcG9jaCA9IERhdGUubm93KClcblxuICAgIC8vIHJlcG9ydCB0aGUgSE1SIHN0YXJ0IGFmdGVyIGEgc2hvcnQgZGVsYXlcbiAgICB0aGlzLiNkZWZlcnJlZFJlcG9ydEhtclN0YXJ0SWQgPSBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT4gdGhpcy4jcnVuRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpLFxuICAgICAgLy8gZGVidWdnaW5nIGZlYXR1cmU6IGRvbid0IGRlZmVyL3N1cHByZXNzIG5vaXN5IG5vLW9wIEhNUiB1cGRhdGUgbWVzc2FnZXNcbiAgICAgIHNlbGYuX19ORVhUX0hNUl9UVVJCT1BBQ0tfUkVQT1JUX05PSVNZX05PT1BfRVZFTlRTXG4gICAgICAgID8gMFxuICAgICAgICA6IFRVUkJPUEFDS19ITVJfU1RBUlRfREVMQVlfTVNcbiAgICApXG4gIH1cblxuICAvKiogSGVscGVyIGZvciBvdGhlciBgb25FdmVudGAgbWV0aG9kcy4gKi9cbiAgI29uVXBkYXRlKCkge1xuICAgIHRoaXMuI3J1bkRlZmVycmVkUmVwb3J0SG1yU3RhcnQoKVxuICAgIHRoaXMuI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2ggPSBEYXRlLm5vdygpXG4gIH1cblxuICBvblR1cmJvcGFja01lc3NhZ2UobXNnOiBUdXJib3BhY2tNZXNzYWdlQWN0aW9uKSB7XG4gICAgdGhpcy4jb25VcGRhdGUoKVxuICAgIGNvbnN0IHVwZGF0ZWRNb2R1bGVzID0gZXh0cmFjdE1vZHVsZXNGcm9tVHVyYm9wYWNrTWVzc2FnZShtc2cuZGF0YSlcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiB1cGRhdGVkTW9kdWxlcykge1xuICAgICAgdGhpcy4jdXBkYXRlZE1vZHVsZXMuYWRkKG1vZHVsZSlcbiAgICB9XG4gIH1cblxuICBvblNlcnZlckNvbXBvbmVudENoYW5nZXMoKSB7XG4gICAgdGhpcy4jb25VcGRhdGUoKVxuICB9XG5cbiAgb25SZWxvYWRQYWdlKCkge1xuICAgIHRoaXMuI29uVXBkYXRlKClcbiAgfVxuXG4gIG9uUGFnZUFkZFJlbW92ZSgpIHtcbiAgICB0aGlzLiNvblVwZGF0ZSgpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgYG51bGxgIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGlnbm9yZSB0aGUgdXBkYXRlIGVudGlyZWx5LiBSZXR1cm5zIGFuXG4gICAqICAgb2JqZWN0IHdpdGggYGhhc1VwZGF0ZXM6IGZhbHNlYCBpZiB0aGUgY2FsbGVyIHNob3VsZCByZXBvcnQgdGhlIGVuZCBvZlxuICAgKiAgIHRoZSBITVIgaW4gdGhlIGJyb3dzZXIgY29uc29sZSwgYnV0IHRoZSBITVIgd2FzIGEgbm8tb3AuXG4gICAqL1xuICBvbkJ1aWx0KCk6IEhtclVwZGF0ZSB8IG51bGwge1xuICAgIC8vIENoZWNrIHRoYXQgd2UgZ290ICphbnkqIGBUdXJib3BhY2tNZXNzYWdlQWN0aW9uYCwgZXZlbiBpZlxuICAgIC8vIGB1cGRhdGVkTW9kdWxlc2AgaXMgZW1wdHkgKG5vdCBldmVyeXRoaW5nIGdldHMgcmVjb3JkZWQgdGhlcmUpLlxuICAgIC8vXG4gICAgLy8gVGhlcmUncyBhbHNvIGEgY2FzZSB3aGVyZSBgb25CdWlsdGAgZ2V0cyBjYWxsZWQgYmVmb3JlIGBvbkJ1aWxkaW5nYCxcbiAgICAvLyB3aGljaCBjYW4gaGFwcGVuIGR1cmluZyBpbml0aWFsIHBhZ2UgbG9hZC4gSWdub3JlIHRoYXQgdG9vIVxuICAgIGNvbnN0IGhhc1VwZGF0ZXMgPVxuICAgICAgdGhpcy4jbGFzdFVwZGF0ZU1zU2luY2VFcG9jaCAhPSBudWxsICYmIHRoaXMuI3N0YXJ0TXNTaW5jZUVwb2NoICE9IG51bGxcbiAgICBpZiAoIWhhc1VwZGF0ZXMgJiYgdGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkICE9IG51bGwpIHtcbiAgICAgIC8vIHN1cHByZXNzIHRoZSB1cGRhdGUgZW50aXJlbHlcbiAgICAgIHRoaXMuI2NhbmNlbERlZmVycmVkUmVwb3J0SG1yU3RhcnQoKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgdGhpcy4jcnVuRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpXG5cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBoYXNVcGRhdGVzLFxuICAgICAgdXBkYXRlZE1vZHVsZXM6IHRoaXMuI3VwZGF0ZWRNb2R1bGVzLFxuICAgICAgc3RhcnRNc1NpbmNlRXBvY2g6IHRoaXMuI3N0YXJ0TXNTaW5jZUVwb2NoISxcbiAgICAgIGVuZE1zU2luY2VFcG9jaDogdGhpcy4jbGFzdFVwZGF0ZU1zU2luY2VFcG9jaCA/PyBEYXRlLm5vdygpLFxuICAgIH1cbiAgICB0aGlzLiN1cGRhdGVkTW9kdWxlcyA9IG5ldyBTZXQoKVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0TW9kdWxlc0Zyb21UdXJib3BhY2tNZXNzYWdlKFxuICBkYXRhOiBUdXJib3BhY2tVcGRhdGUgfCBUdXJib3BhY2tVcGRhdGVbXVxuKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCB1cGRhdGVkTW9kdWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KClcblxuICBjb25zdCB1cGRhdGVzID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV1cbiAgZm9yIChjb25zdCB1cGRhdGUgb2YgdXBkYXRlcykge1xuICAgIC8vIFRPRE8gdGhpcyB3b24ndCBjYXB0dXJlIGNoYW5nZXMgdG8gQ1NTIHNpbmNlIHRoZXkgZG9uJ3QgcmVzdWx0IGluIGEgXCJtZXJnZWRcIiB1cGRhdGVcbiAgICBpZiAoXG4gICAgICB1cGRhdGUudHlwZSAhPT0gJ3BhcnRpYWwnIHx8XG4gICAgICB1cGRhdGUuaW5zdHJ1Y3Rpb24udHlwZSAhPT0gJ0NodW5rTGlzdFVwZGF0ZScgfHxcbiAgICAgIHVwZGF0ZS5pbnN0cnVjdGlvbi5tZXJnZWQgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1lcmdlZFVwZGF0ZSBvZiB1cGRhdGUuaW5zdHJ1Y3Rpb24ubWVyZ2VkKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMobWVyZ2VkVXBkYXRlLmVudHJpZXMpKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IC8oLiopXFxzK1xcWy4qLy5leGVjKG5hbWUpXG4gICAgICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ1tUdXJib3BhY2sgSE1SXSBFeHBlY3RlZCBtb2R1bGUgdG8gbWF0Y2ggcGF0dGVybjogJyArIG5hbWVcbiAgICAgICAgICApXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZWRNb2R1bGVzLmFkZChyZXNbMV0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZWRNb2R1bGVzXG59XG4iXSwibmFtZXMiOlsiVHVyYm9wYWNrSG1yIiwiVFVSQk9QQUNLX0hNUl9TVEFSVF9ERUxBWV9NUyIsIm9uQnVpbGRpbmciLCJ1bmRlZmluZWQiLCJEYXRlIiwibm93Iiwic2V0VGltZW91dCIsInNlbGYiLCJfX05FWFRfSE1SX1RVUkJPUEFDS19SRVBPUlRfTk9JU1lfTk9PUF9FVkVOVFMiLCJvblR1cmJvcGFja01lc3NhZ2UiLCJtc2ciLCJ1cGRhdGVkTW9kdWxlcyIsImV4dHJhY3RNb2R1bGVzRnJvbVR1cmJvcGFja01lc3NhZ2UiLCJkYXRhIiwibW9kdWxlIiwiYWRkIiwib25TZXJ2ZXJDb21wb25lbnRDaGFuZ2VzIiwib25SZWxvYWRQYWdlIiwib25QYWdlQWRkUmVtb3ZlIiwib25CdWlsdCIsImhhc1VwZGF0ZXMiLCJyZXN1bHQiLCJzdGFydE1zU2luY2VFcG9jaCIsImVuZE1zU2luY2VFcG9jaCIsIlNldCIsImNvbnN0cnVjdG9yIiwiY29uc29sZSIsImxvZyIsImNsZWFyVGltZW91dCIsInVwZGF0ZXMiLCJBcnJheSIsImlzQXJyYXkiLCJ1cGRhdGUiLCJ0eXBlIiwiaW5zdHJ1Y3Rpb24iLCJtZXJnZWQiLCJtZXJnZWRVcGRhdGUiLCJuYW1lIiwiT2JqZWN0Iiwia2V5cyIsImVudHJpZXMiLCJyZXMiLCJleGVjIiwiZXJyb3IiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/dev/on-demand-entries-client.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/on-demand-entries-client.js ***!
|
||
\***********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _router = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../router */ \"(pages-dir-browser)/./node_modules/next/dist/client/router.js\"));\nconst _websocket = __webpack_require__(/*! ./hot-reloader/pages/websocket */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\");\nconst _default = async (page)=>{\n // Never send pings when using Turbopack as it's not used.\n // Pings were originally used to keep track of active routes in on-demand-entries with webpack.\n if (false) {}\n if (page) {\n // in AMP the router isn't initialized on the client and\n // client-transitions don't occur so ping initial page\n setInterval(()=>{\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'ping',\n page\n }));\n }, 2500);\n } else {\n _router.default.ready(()=>{\n setInterval(()=>{\n // when notFound: true is returned we should use the notFoundPage\n // as the Router.pathname will point to the 404 page but we want\n // to ping the source page that returned notFound: true instead\n const notFoundSrcPage = self.__NEXT_DATA__.notFoundSrcPage;\n const pathname = (_router.default.pathname === '/404' || _router.default.pathname === '/_error') && notFoundSrcPage ? notFoundSrcPage : _router.default.pathname;\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'ping',\n page: pathname\n }));\n }, 2500);\n });\n }\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=on-demand-entries-client.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9vbi1kZW1hbmQtZW50cmllcy1jbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FHQTs7O2VBQUE7Ozs7NkVBSG1CO3VDQUNTO01BRTVCLFdBQWUsT0FBT0E7SUFDcEIsMERBQTBEO0lBQzFELCtGQUErRjtJQUMvRixJQUFJQyxLQUFxQixFQUFFLEVBRTFCO0lBQ0QsSUFBSUQsTUFBTTtRQUNSLHdEQUF3RDtRQUN4RCxzREFBc0Q7UUFDdERJLFlBQVk7WUFDVkMsQ0FBQUEsR0FBQUEsV0FBQUEsV0FBQUEsRUFBWUMsS0FBS0MsU0FBUyxDQUFDO2dCQUFFQyxPQUFPO2dCQUFRUjtZQUFLO1FBQ25ELEdBQUc7SUFDTCxPQUFPO1FBQ0xTLFFBQUFBLE9BQU0sQ0FBQ0MsS0FBSyxDQUFDO1lBQ1hOLFlBQVk7Z0JBQ1YsaUVBQWlFO2dCQUNqRSxnRUFBZ0U7Z0JBQ2hFLCtEQUErRDtnQkFDL0QsTUFBTU8sa0JBQWtCQyxLQUFLQyxhQUFhLENBQUNGLGVBQWU7Z0JBQzFELE1BQU1HLFdBQ0hMLENBQUFBLFFBQUFBLE9BQU0sQ0FBQ0ssUUFBUSxLQUFLLFVBQVVMLFFBQUFBLE9BQU0sQ0FBQ0ssUUFBUSxLQUFLLFVBQVEsSUFDM0RILGtCQUNJQSxrQkFDQUYsUUFBQUEsT0FBTSxDQUFDSyxRQUFRO2dCQUVyQlQsQ0FBQUEsR0FBQUEsV0FBQUEsV0FBQUEsRUFBWUMsS0FBS0MsU0FBUyxDQUFDO29CQUFFQyxPQUFPO29CQUFRUixNQUFNYztnQkFBUztZQUM3RCxHQUFHO1FBQ0w7SUFDRjtBQUNGIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXGRldlxcb24tZGVtYW5kLWVudHJpZXMtY2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSb3V0ZXIgZnJvbSAnLi4vcm91dGVyJ1xuaW1wb3J0IHsgc2VuZE1lc3NhZ2UgfSBmcm9tICcuL2hvdC1yZWxvYWRlci9wYWdlcy93ZWJzb2NrZXQnXG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIChwYWdlPzogc3RyaW5nKSA9PiB7XG4gIC8vIE5ldmVyIHNlbmQgcGluZ3Mgd2hlbiB1c2luZyBUdXJib3BhY2sgYXMgaXQncyBub3QgdXNlZC5cbiAgLy8gUGluZ3Mgd2VyZSBvcmlnaW5hbGx5IHVzZWQgdG8ga2VlcCB0cmFjayBvZiBhY3RpdmUgcm91dGVzIGluIG9uLWRlbWFuZC1lbnRyaWVzIHdpdGggd2VicGFjay5cbiAgaWYgKHByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgIHJldHVyblxuICB9XG4gIGlmIChwYWdlKSB7XG4gICAgLy8gaW4gQU1QIHRoZSByb3V0ZXIgaXNuJ3QgaW5pdGlhbGl6ZWQgb24gdGhlIGNsaWVudCBhbmRcbiAgICAvLyBjbGllbnQtdHJhbnNpdGlvbnMgZG9uJ3Qgb2NjdXIgc28gcGluZyBpbml0aWFsIHBhZ2VcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBzZW5kTWVzc2FnZShKU09OLnN0cmluZ2lmeSh7IGV2ZW50OiAncGluZycsIHBhZ2UgfSkpXG4gICAgfSwgMjUwMClcbiAgfSBlbHNlIHtcbiAgICBSb3V0ZXIucmVhZHkoKCkgPT4ge1xuICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAvLyB3aGVuIG5vdEZvdW5kOiB0cnVlIGlzIHJldHVybmVkIHdlIHNob3VsZCB1c2UgdGhlIG5vdEZvdW5kUGFnZVxuICAgICAgICAvLyBhcyB0aGUgUm91dGVyLnBhdGhuYW1lIHdpbGwgcG9pbnQgdG8gdGhlIDQwNCBwYWdlIGJ1dCB3ZSB3YW50XG4gICAgICAgIC8vIHRvIHBpbmcgdGhlIHNvdXJjZSBwYWdlIHRoYXQgcmV0dXJuZWQgbm90Rm91bmQ6IHRydWUgaW5zdGVhZFxuICAgICAgICBjb25zdCBub3RGb3VuZFNyY1BhZ2UgPSBzZWxmLl9fTkVYVF9EQVRBX18ubm90Rm91bmRTcmNQYWdlXG4gICAgICAgIGNvbnN0IHBhdGhuYW1lID1cbiAgICAgICAgICAoUm91dGVyLnBhdGhuYW1lID09PSAnLzQwNCcgfHwgUm91dGVyLnBhdGhuYW1lID09PSAnL19lcnJvcicpICYmXG4gICAgICAgICAgbm90Rm91bmRTcmNQYWdlXG4gICAgICAgICAgICA/IG5vdEZvdW5kU3JjUGFnZVxuICAgICAgICAgICAgOiBSb3V0ZXIucGF0aG5hbWVcblxuICAgICAgICBzZW5kTWVzc2FnZShKU09OLnN0cmluZ2lmeSh7IGV2ZW50OiAncGluZycsIHBhZ2U6IHBhdGhuYW1lIH0pKVxuICAgICAgfSwgMjUwMClcbiAgICB9KVxuICB9XG59XG4iXSwibmFtZXMiOlsicGFnZSIsInByb2Nlc3MiLCJlbnYiLCJUVVJCT1BBQ0siLCJzZXRJbnRlcnZhbCIsInNlbmRNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiUm91dGVyIiwicmVhZHkiLCJub3RGb3VuZFNyY1BhZ2UiLCJzZWxmIiwiX19ORVhUX0RBVEFfXyIsInBhdGhuYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/dev/on-demand-entries-client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/dev/report-hmr-latency.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/report-hmr-latency.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return reportHmrLatency;\n }\n}));\nfunction reportHmrLatency(sendMessage, updatedModules, startMsSinceEpoch, endMsSinceEpoch, hasUpdate) {\n if (hasUpdate === void 0) hasUpdate = true;\n const latencyMs = endMsSinceEpoch - startMsSinceEpoch;\n console.log(\"[Fast Refresh] done in \" + latencyMs + \"ms\");\n if (!hasUpdate) {\n return;\n }\n sendMessage(JSON.stringify({\n event: 'client-hmr-latency',\n id: window.__nextDevClientId,\n startTime: startMsSinceEpoch,\n endTime: endMsSinceEpoch,\n page: window.location.pathname,\n updatedModules,\n // Whether the page (tab) was hidden at the time the event occurred.\n // This can impact the accuracy of the event's timing.\n isPageHidden: document.visibilityState === 'hidden'\n }));\n if (self.__NEXT_HMR_LATENCY_CB) {\n self.__NEXT_HMR_LATENCY_CB(latencyMs);\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=report-hmr-latency.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9yZXBvcnQtaG1yLWxhdGVuY3kuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FpQkE7OztlQUF3QkE7OztBQUFULFNBQVNBLGlCQUN0QkMsV0FBc0MsRUFDdENDLGNBQThDLEVBQzlDQyxpQkFBeUIsRUFDekJDLGVBQXVCLEVBQ3ZCQyxTQUF5QjtJQUF6QkEsSUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsWUFBcUI7SUFFckIsTUFBTUMsWUFBWUYsa0JBQWtCRDtJQUNwQ0ksUUFBUUMsR0FBRyxDQUFFLDRCQUF5QkYsWUFBVTtJQUNoRCxJQUFJLENBQUNELFdBQVc7UUFDZDtJQUNGO0lBQ0FKLFlBQ0VRLEtBQUtDLFNBQVMsQ0FBQztRQUNiQyxPQUFPO1FBQ1BDLElBQUlDLE9BQU9DLGlCQUFpQjtRQUM1QkMsV0FBV1o7UUFDWGEsU0FBU1o7UUFDVGEsTUFBTUosT0FBT0ssUUFBUSxDQUFDQyxRQUFRO1FBQzlCakI7UUFDQSxvRUFBb0U7UUFDcEUsc0RBQXNEO1FBQ3REa0IsY0FBY0MsU0FBU0MsZUFBZSxLQUFLO0lBQzdDO0lBRUYsSUFBSUMsS0FBS0MscUJBQXFCLEVBQUU7UUFDOUJELEtBQUtDLHFCQUFxQixDQUFDbEI7SUFDN0I7QUFDRiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxkZXZcXHJlcG9ydC1obXItbGF0ZW5jeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fTkVYVF9ITVJfTEFURU5DWV9DQjogKChsYXRlbmN5TXM6IG51bWJlcikgPT4gdm9pZCkgfCB1bmRlZmluZWRcbiAgfVxufVxuXG4vKipcbiAqIExvZ3MgaW5mb3JtYXRpb24gYWJvdXQgYSBjb21wbGV0ZWQgSE1SIHRvIHRoZSBjb25zb2xlLCB0aGUgc2VydmVyICh2aWEgYVxuICogYGNsaWVudC1obXItbGF0ZW5jeWAgZXZlbnQpLCBhbmQgdG8gYHNlbGYuX19ORVhUX0hNUl9MQVRFTkNZX0NCYCAoYSBkZWJ1Z2dpbmdcbiAqIGhvb2spLlxuICpcbiAqIEBwYXJhbSBoYXNVcGRhdGUgU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBhdm9pZCByZXBvcnRpbmcgdGhlIEhNUiBldmVudCB2aWEgYVxuICogICBgY2xpZW50LWhtci1sYXRlbmN5YCBldmVudCBvciB0byBgc2VsZi5fX05FWFRfSE1SX0xBVEVOQ1lfQ0JgLiBVc2VkIGJ5XG4gKiAgIHR1cmJvcGFjayB3aGVuIHdlIG11c3QgcmVwb3J0IGEgbWVzc2FnZSB0byB0aGUgYnJvd3NlciBjb25zb2xlIChiZWNhdXNlIHdlXG4gKiAgIGFscmVhZHkgbG9nZ2VkIGEgXCJyZWJ1aWxkaW5nXCIgbWVzc2FnZSksIGJ1dCBpdCdzIG5vdCBhIHJlYWwgSE1SLCBzbyB3ZVxuICogICBkb24ndCB3YW50IHRvIGltcGFjdCBvdXIgdGVsZW1ldHJ5LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXBvcnRIbXJMYXRlbmN5KFxuICBzZW5kTWVzc2FnZTogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCxcbiAgdXBkYXRlZE1vZHVsZXM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVtYmVyPixcbiAgc3RhcnRNc1NpbmNlRXBvY2g6IG51bWJlcixcbiAgZW5kTXNTaW5jZUVwb2NoOiBudW1iZXIsXG4gIGhhc1VwZGF0ZTogYm9vbGVhbiA9IHRydWVcbikge1xuICBjb25zdCBsYXRlbmN5TXMgPSBlbmRNc1NpbmNlRXBvY2ggLSBzdGFydE1zU2luY2VFcG9jaFxuICBjb25zb2xlLmxvZyhgW0Zhc3QgUmVmcmVzaF0gZG9uZSBpbiAke2xhdGVuY3lNc31tc2ApXG4gIGlmICghaGFzVXBkYXRlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgc2VuZE1lc3NhZ2UoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZXZlbnQ6ICdjbGllbnQtaG1yLWxhdGVuY3knLFxuICAgICAgaWQ6IHdpbmRvdy5fX25leHREZXZDbGllbnRJZCxcbiAgICAgIHN0YXJ0VGltZTogc3RhcnRNc1NpbmNlRXBvY2gsXG4gICAgICBlbmRUaW1lOiBlbmRNc1NpbmNlRXBvY2gsXG4gICAgICBwYWdlOiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICB1cGRhdGVkTW9kdWxlcyxcbiAgICAgIC8vIFdoZXRoZXIgdGhlIHBhZ2UgKHRhYikgd2FzIGhpZGRlbiBhdCB0aGUgdGltZSB0aGUgZXZlbnQgb2NjdXJyZWQuXG4gICAgICAvLyBUaGlzIGNhbiBpbXBhY3QgdGhlIGFjY3VyYWN5IG9mIHRoZSBldmVudCdzIHRpbWluZy5cbiAgICAgIGlzUGFnZUhpZGRlbjogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJyxcbiAgICB9KVxuICApXG4gIGlmIChzZWxmLl9fTkVYVF9ITVJfTEFURU5DWV9DQikge1xuICAgIHNlbGYuX19ORVhUX0hNUl9MQVRFTkNZX0NCKGxhdGVuY3lNcylcbiAgfVxufVxuIl0sIm5hbWVzIjpbInJlcG9ydEhtckxhdGVuY3kiLCJzZW5kTWVzc2FnZSIsInVwZGF0ZWRNb2R1bGVzIiwic3RhcnRNc1NpbmNlRXBvY2giLCJlbmRNc1NpbmNlRXBvY2giLCJoYXNVcGRhdGUiLCJsYXRlbmN5TXMiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiaWQiLCJ3aW5kb3ciLCJfX25leHREZXZDbGllbnRJZCIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJwYWdlIiwibG9jYXRpb24iLCJwYXRobmFtZSIsImlzUGFnZUhpZGRlbiIsImRvY3VtZW50IiwidmlzaWJpbGl0eVN0YXRlIiwic2VsZiIsIl9fTkVYVF9ITVJfTEFURU5DWV9DQiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/dev/report-hmr-latency.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/dev/runtime-error-handler.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/runtime-error-handler.js ***!
|
||
\********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RuntimeErrorHandler\", ({\n enumerable: true,\n get: function() {\n return RuntimeErrorHandler;\n }\n}));\nconst RuntimeErrorHandler = {\n hadRuntimeError: false\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=runtime-error-handler.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ydW50aW1lLWVycm9yLWhhbmRsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozt1REFBYUE7OztlQUFBQTs7O0FBQU4sTUFBTUEsc0JBQXNCO0lBQ2pDQyxpQkFBaUI7QUFDbkIiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxcZGV2XFxydW50aW1lLWVycm9yLWhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFJ1bnRpbWVFcnJvckhhbmRsZXIgPSB7XG4gIGhhZFJ1bnRpbWVFcnJvcjogZmFsc2UsXG59XG4iXSwibmFtZXMiOlsiUnVudGltZUVycm9ySGFuZGxlciIsImhhZFJ1bnRpbWVFcnJvciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/dev/runtime-error-handler.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/has-base-path.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/has-base-path.js ***!
|
||
\********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hasBasePath\", ({\n enumerable: true,\n get: function() {\n return hasBasePath;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ../shared/lib/router/utils/path-has-prefix */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nconst basePath = false || '';\nfunction hasBasePath(path) {\n return (0, _pathhasprefix.pathHasPrefix)(path, basePath);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=has-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2hhcy1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OzsrQ0FJZ0JBOzs7ZUFBQUE7OzsyQ0FKYztBQUU5QixNQUFNQyxXQUFZQyxNQUFrQyxJQUFlO0FBRTVELFNBQVNGLFlBQVlLLElBQVk7SUFDdEMsT0FBT0MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY0QsTUFBTUo7QUFDN0IiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxcaGFzLWJhc2UtcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXRoSGFzUHJlZml4IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGF0aC1oYXMtcHJlZml4J1xuXG5jb25zdCBiYXNlUGF0aCA9IChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIGFzIHN0cmluZykgfHwgJydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Jhc2VQYXRoKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gcGF0aEhhc1ByZWZpeChwYXRoLCBiYXNlUGF0aClcbn1cbiJdLCJuYW1lcyI6WyJoYXNCYXNlUGF0aCIsImJhc2VQYXRoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9ST1VURVJfQkFTRVBBVEgiLCJwYXRoIiwicGF0aEhhc1ByZWZpeCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/has-base-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/head-manager.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/head-manager.js ***!
|
||
\*******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return initHeadManager;\n },\n isEqualNode: function() {\n return isEqualNode;\n }\n});\nconst _setattributesfromprops = __webpack_require__(/*! ./set-attributes-from-props */ \"(pages-dir-browser)/./node_modules/next/dist/client/set-attributes-from-props.js\");\nfunction reactElementToDOM(param) {\n let { type, props } = param;\n const el = document.createElement(type);\n (0, _setattributesfromprops.setAttributesFromProps)(el, props);\n const { children, dangerouslySetInnerHTML } = props;\n if (dangerouslySetInnerHTML) {\n el.innerHTML = dangerouslySetInnerHTML.__html || '';\n } else if (children) {\n el.textContent = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';\n }\n return el;\n}\nfunction isEqualNode(oldTag, newTag) {\n if (oldTag instanceof HTMLElement && newTag instanceof HTMLElement) {\n const nonce = newTag.getAttribute('nonce');\n // Only strip the nonce if `oldTag` has had it stripped. An element's nonce attribute will not\n // be stripped if there is no content security policy response header that includes a nonce.\n if (nonce && !oldTag.getAttribute('nonce')) {\n const cloneTag = newTag.cloneNode(true);\n cloneTag.setAttribute('nonce', '');\n cloneTag.nonce = nonce;\n return nonce === oldTag.nonce && oldTag.isEqualNode(cloneTag);\n }\n }\n return oldTag.isEqualNode(newTag);\n}\nlet updateElements;\nif (true) {\n updateElements = (type, components)=>{\n const headEl = document.querySelector('head');\n if (!headEl) return;\n const oldTags = new Set(headEl.querySelectorAll(\"\" + type + \"[data-next-head]\"));\n if (type === 'meta') {\n const metaCharset = headEl.querySelector('meta[charset]');\n if (metaCharset !== null) {\n oldTags.add(metaCharset);\n }\n }\n const newTags = [];\n for(let i = 0; i < components.length; i++){\n const component = components[i];\n const newTag = reactElementToDOM(component);\n newTag.setAttribute('data-next-head', '');\n let isNew = true;\n for (const oldTag of oldTags){\n if (isEqualNode(oldTag, newTag)) {\n oldTags.delete(oldTag);\n isNew = false;\n break;\n }\n }\n if (isNew) {\n newTags.push(newTag);\n }\n }\n for (const oldTag of oldTags){\n var _oldTag_parentNode;\n (_oldTag_parentNode = oldTag.parentNode) == null ? void 0 : _oldTag_parentNode.removeChild(oldTag);\n }\n for (const newTag of newTags){\n // meta[charset] must be first element so special case\n if (newTag.tagName.toLowerCase() === 'meta' && newTag.getAttribute('charset') !== null) {\n headEl.prepend(newTag);\n }\n headEl.appendChild(newTag);\n }\n };\n} else {}\nfunction initHeadManager() {\n return {\n mountedInstances: new Set(),\n updateHead: (head)=>{\n const tags = {};\n head.forEach((h)=>{\n if (// it won't be inlined. In this case revert to the original behavior\n h.type === 'link' && h.props['data-optimized-fonts']) {\n if (document.querySelector('style[data-href=\"' + h.props['data-href'] + '\"]')) {\n return;\n } else {\n h.props.href = h.props['data-href'];\n h.props['data-href'] = undefined;\n }\n }\n const components = tags[h.type] || [];\n components.push(h);\n tags[h.type] = components;\n });\n const titleComponent = tags.title ? tags.title[0] : null;\n let title = '';\n if (titleComponent) {\n const { children } = titleComponent.props;\n title = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';\n }\n if (title !== document.title) document.title = title;\n [\n 'meta',\n 'base',\n 'link',\n 'style',\n 'script'\n ].forEach((type)=>{\n updateElements(type, tags[type] || []);\n });\n }\n };\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=head-manager.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2hlYWQtbWFuYWdlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUF5SkEsT0FnREM7ZUFoRHVCQTs7SUFySFJDLFdBQVc7ZUFBWEE7OztvREFwQ3VCO0FBSXZDLFNBQVNDLGtCQUFrQixLQUE0QjtJQUE1QixNQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBZSxHQUE1QjtJQUN6QixNQUFNQyxLQUFrQkMsU0FBU0MsYUFBYSxDQUFDSjtJQUMvQ0ssQ0FBQUEsR0FBQUEsd0JBQUFBLHNCQUFzQixFQUFDSCxJQUFJRDtJQUUzQixNQUFNLEVBQUVLLFFBQVEsRUFBRUMsdUJBQXVCLEVBQUUsR0FBR047SUFDOUMsSUFBSU0seUJBQXlCO1FBQzNCTCxHQUFHTSxTQUFTLEdBQUdELHdCQUF3QkUsTUFBTSxJQUFJO0lBQ25ELE9BQU8sSUFBSUgsVUFBVTtRQUNuQkosR0FBR1EsV0FBVyxHQUNaLE9BQU9KLGFBQWEsV0FDaEJBLFdBQ0FLLE1BQU1DLE9BQU8sQ0FBQ04sWUFDWkEsU0FBU08sSUFBSSxDQUFDLE1BQ2Q7SUFDVjtJQUNBLE9BQU9YO0FBQ1Q7QUFnQk8sU0FBU0osWUFBWWdCLE1BQWUsRUFBRUMsTUFBZTtJQUMxRCxJQUFJRCxrQkFBa0JFLGVBQWVELGtCQUFrQkMsYUFBYTtRQUNsRSxNQUFNQyxRQUFRRixPQUFPRyxZQUFZLENBQUM7UUFDbEMsOEZBQThGO1FBQzlGLDRGQUE0RjtRQUM1RixJQUFJRCxTQUFTLENBQUNILE9BQU9JLFlBQVksQ0FBQyxVQUFVO1lBQzFDLE1BQU1DLFdBQVdKLE9BQU9LLFNBQVMsQ0FBQztZQUNsQ0QsU0FBU0UsWUFBWSxDQUFDLFNBQVM7WUFDL0JGLFNBQVNGLEtBQUssR0FBR0E7WUFDakIsT0FBT0EsVUFBVUgsT0FBT0csS0FBSyxJQUFJSCxPQUFPaEIsV0FBVyxDQUFDcUI7UUFDdEQ7SUFDRjtJQUVBLE9BQU9MLE9BQU9oQixXQUFX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O2dCQUFRO2dCQUFRO2dCQUFRO2dCQUFTO2FBQVMsQ0FBQ1osT0FBTyxDQUFDLENBQUM5RDtnQkFDcERzQixlQUFldEIsTUFBTXFFLElBQUksQ0FBQ3JFLEtBQUssSUFBSSxFQUFFO1lBQ3ZDO1FBQ0Y7SUFDRjtBQUNGIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXGhlYWQtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZXRBdHRyaWJ1dGVzRnJvbVByb3BzIH0gZnJvbSAnLi9zZXQtYXR0cmlidXRlcy1mcm9tLXByb3BzJ1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gJ3JlYWN0J1xuXG5mdW5jdGlvbiByZWFjdEVsZW1lbnRUb0RPTSh7IHR5cGUsIHByb3BzIH06IEpTWC5FbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpXG4gIHNldEF0dHJpYnV0ZXNGcm9tUHJvcHMoZWwsIHByb3BzKVxuXG4gIGNvbnN0IHsgY2hpbGRyZW4sIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIH0gPSBwcm9wc1xuICBpZiAoZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpIHtcbiAgICBlbC5pbm5lckhUTUwgPSBkYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgfHwgJydcbiAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xuICAgIGVsLnRleHRDb250ZW50ID1cbiAgICAgIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBjaGlsZHJlblxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pXG4gICAgICAgICAgPyBjaGlsZHJlbi5qb2luKCcnKVxuICAgICAgICAgIDogJydcbiAgfVxuICByZXR1cm4gZWxcbn1cblxuLyoqXG4gKiBXaGVuIGEgYG5vbmNlYCBpcyBwcmVzZW50IG9uIGFuIGVsZW1lbnQsIGJyb3dzZXJzIHN1Y2ggYXMgQ2hyb21lIGFuZCBGaXJlZm94IHN0cmlwIGl0IG91dCBvZiB0aGVcbiAqIGFjdHVhbCBIVE1MIGF0dHJpYnV0ZXMgZm9yIHNlY3VyaXR5IHJlYXNvbnMgKndoZW4gdGhlIGVsZW1lbnQgaXMgYWRkZWQgdG8gdGhlIGRvY3VtZW50Ki4gVGh1cyxcbiAqIGdpdmVuIHR3byBlcXVpdmFsZW50IGVsZW1lbnRzIHRoYXQgaGF2ZSBub25jZXMsIGBFbGVtZW50LGlzRXF1YWxOb2RlKClgIHdpbGwgcmV0dXJuIGZhbHNlIGlmIG9uZVxuICogb2YgdGhvc2UgZWxlbWVudHMgZ2V0cyBhZGRlZCB0byB0aGUgZG9jdW1lbnQuIEFsdGhvdWdoIHRoZSBgZWxlbWVudC5ub25jZWAgcHJvcGVydHkgd2lsbCBiZSB0aGVcbiAqIHNhbWUgZm9yIGJvdGggZWxlbWVudHMsIHRoZSBvbmUgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIGRvY3VtZW50IHdpbGwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBmb3JcbiAqIGl0cyBub25jZSBIVE1MIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqXG4gKiBUaGlzIGN1c3RvbSBgaXNFcXVhbE5vZGUoKWAgZnVuY3Rpb24gdGhlcmVmb3JlIHJlbW92ZXMgdGhlIG5vbmNlIHZhbHVlIGZyb20gdGhlIGBuZXdUYWdgIGJlZm9yZVxuICogY29tcGFyaW5nIGl0IHRvIGBvbGRUYWdgLCByZXN0b3JpbmcgaXQgYWZ0ZXJ3YXJkcy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOlxuICogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTIxMTQ3MSNjMTJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXF1YWxOb2RlKG9sZFRhZzogRWxlbWVudCwgbmV3VGFnOiBFbGVtZW50KSB7XG4gIGlmIChvbGRUYWcgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBuZXdUYWcgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IG5vbmNlID0gbmV3VGFnLmdldEF0dHJpYnV0ZSgnbm9uY2UnKVxuICAgIC8vIE9ubHkgc3RyaXAgdGhlIG5vbmNlIGlmIGBvbGRUYWdgIGhhcyBoYWQgaXQgc3RyaXBwZWQuIEFuIGVsZW1lbnQncyBub25jZSBhdHRyaWJ1dGUgd2lsbCBub3RcbiAgICAvLyBiZSBzdHJpcHBlZCBpZiB0aGVyZSBpcyBubyBjb250ZW50IHNlY3VyaXR5IHBvbGljeSByZXNwb25zZSBoZWFkZXIgdGhhdCBpbmNsdWRlcyBhIG5vbmNlLlxuICAgIGlmIChub25jZSAmJiAhb2xkVGFnLmdldEF0dHJpYnV0ZSgnbm9uY2UnKSkge1xuICAgICAgY29uc3QgY2xvbmVUYWcgPSBuZXdUYWcuY2xvbmVOb2RlKHRydWUpIGFzIHR5cGVvZiBuZXdUYWdcbiAgICAgIGNsb25lVGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCAnJylcbiAgICAgIGNsb25lVGFnLm5vbmNlID0gbm9uY2VcbiAgICAgIHJldHVybiBub25jZSA9PT0gb2xkVGFnLm5vbmNlICYmIG9sZFRhZy5pc0VxdWFsTm9kZShjbG9uZVRhZylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2xkVGFnLmlzRXF1YWxOb2RlKG5ld1RhZylcbn1cblxubGV0IHVwZGF0ZUVsZW1lbnRzOiAodHlwZTogc3RyaW5nLCBjb21wb25lbnRzOiBKU1guRWxlbWVudFtdKSA9PiB2b2lkXG5cbmlmIChwcm9jZXNzLmVudi5fX05FWFRfU1RSSUNUX05FWFRfSEVBRCkge1xuICB1cGRhdGVFbGVtZW50cyA9ICh0eXBlLCBjb21wb25lbnRzKSA9PiB7XG4gICAgY29uc3QgaGVhZEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpXG4gICAgaWYgKCFoZWFkRWwpIHJldHVyblxuXG4gICAgY29uc3Qgb2xkVGFncyA9IG5ldyBTZXQoaGVhZEVsLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7dHlwZX1bZGF0YS1uZXh0LWhlYWRdYCkpXG5cbiAgICBpZiAodHlwZSA9PT0gJ21ldGEnKSB7XG4gICAgICBjb25zdCBtZXRhQ2hhcnNldCA9IGhlYWRFbC5xdWVyeVNlbGVjdG9yKCdtZXRhW2NoYXJzZXRdJylcbiAgICAgIGlmIChtZXRhQ2hhcnNldCAhPT0gbnVsbCkge1xuICAgICAgICBvbGRUYWdzLmFkZChtZXRhQ2hhcnNldClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdUYWdzOiBFbGVtZW50W10gPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50c1tpXVxuICAgICAgY29uc3QgbmV3VGFnID0gcmVhY3RFbGVtZW50VG9ET00oY29tcG9uZW50KVxuICAgICAgbmV3VGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1uZXh0LWhlYWQnLCAnJylcblxuICAgICAgbGV0IGlzTmV3ID0gdHJ1ZVxuICAgICAgZm9yIChjb25zdCBvbGRUYWcgb2Ygb2xkVGFncykge1xuICAgICAgICBpZiAoaXNFcXVhbE5vZGUob2xkVGFnLCBuZXdUYWcpKSB7XG4gICAgICAgICAgb2xkVGFncy5kZWxldGUob2xkVGFnKVxuICAgICAgICAgIGlzTmV3ID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05ldykge1xuICAgICAgICBuZXdUYWdzLnB1c2gobmV3VGFnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb2xkVGFnIG9mIG9sZFRhZ3MpIHtcbiAgICAgIG9sZFRhZy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChvbGRUYWcpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuZXdUYWcgb2YgbmV3VGFncykge1xuICAgICAgLy8gbWV0YVtjaGFyc2V0XSBtdXN0IGJlIGZpcnN0IGVsZW1lbnQgc28gc3BlY2lhbCBjYXNlXG4gICAgICBpZiAoXG4gICAgICAgIG5ld1RhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdtZXRhJyAmJlxuICAgICAgICBuZXdUYWcuZ2V0QXR0cmlidXRlKCdjaGFyc2V0JykgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBoZWFkRWwucHJlcGVuZChuZXdUYWcpXG4gICAgICB9XG4gICAgICBoZWFkRWwuYXBwZW5kQ2hpbGQobmV3VGFnKVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgdXBkYXRlRWxlbWVudHMgPSAodHlwZSwgY29tcG9uZW50cykgPT4ge1xuICAgIGNvbnN0IGhlYWRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF1cbiAgICBjb25zdCBoZWFkQ291bnRFbDogSFRNTE1ldGFFbGVtZW50ID0gaGVhZEVsLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnbWV0YVtuYW1lPW5leHQtaGVhZC1jb3VudF0nXG4gICAgKSBhcyBIVE1MTWV0YUVsZW1lbnRcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCFoZWFkQ291bnRFbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdXYXJuaW5nOiBuZXh0LWhlYWQtY291bnQgaXMgbWlzc2luZy4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbmV4dC1oZWFkLWNvdW50LW1pc3NpbmcnXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZENvdW50ID0gTnVtYmVyKGhlYWRDb3VudEVsLmNvbnRlbnQpXG4gICAgY29uc3Qgb2xkVGFnczogRWxlbWVudFtdID0gW11cblxuICAgIGZvciAoXG4gICAgICBsZXQgaSA9IDAsIGogPSBoZWFkQ291bnRFbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgaSA8IGhlYWRDb3VudDtcbiAgICAgIGkrKywgaiA9IGo/LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgfHwgbnVsbFxuICAgICkge1xuICAgICAgaWYgKGo/LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHR5cGUpIHtcbiAgICAgICAgb2xkVGFncy5wdXNoKGopXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld1RhZ3MgPSAoY29tcG9uZW50cy5tYXAocmVhY3RFbGVtZW50VG9ET00pIGFzIEhUTUxFbGVtZW50W10pLmZpbHRlcihcbiAgICAgIChuZXdUYWcpID0+IHtcbiAgICAgICAgZm9yIChsZXQgayA9IDAsIGxlbiA9IG9sZFRhZ3MubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgICBjb25zdCBvbGRUYWcgPSBvbGRUYWdzW2tdXG4gICAgICAgICAgaWYgKGlzRXF1YWxOb2RlKG9sZFRhZywgbmV3VGFnKSkge1xuICAgICAgICAgICAgb2xkVGFncy5zcGxpY2UoaywgMSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIClcblxuICAgIG9sZFRhZ3MuZm9yRWFjaCgodCkgPT4gdC5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZCh0KSlcbiAgICBuZXdUYWdzLmZvckVhY2goKHQpID0+IGhlYWRFbC5pbnNlcnRCZWZvcmUodCwgaGVhZENvdW50RWwpKVxuICAgIGhlYWRDb3VudEVsLmNvbnRlbnQgPSAoXG4gICAgICBoZWFkQ291bnQgLVxuICAgICAgb2xkVGFncy5sZW5ndGggK1xuICAgICAgbmV3VGFncy5sZW5ndGhcbiAgICApLnRvU3RyaW5nKClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0SGVhZE1hbmFnZXIoKToge1xuICBtb3VudGVkSW5zdGFuY2VzOiBTZXQ8dW5rbm93bj5cbiAgdXBkYXRlSGVhZDogKGhlYWQ6IEpTWC5FbGVtZW50W10pID0+IHZvaWRcbn0ge1xuICByZXR1cm4ge1xuICAgIG1vdW50ZWRJbnN0YW5jZXM6IG5ldyBTZXQoKSxcbiAgICB1cGRhdGVIZWFkOiAoaGVhZDogSlNYLkVsZW1lbnRbXSkgPT4ge1xuICAgICAgY29uc3QgdGFnczogUmVjb3JkPHN0cmluZywgSlNYLkVsZW1lbnRbXT4gPSB7fVxuXG4gICAgICBoZWFkLmZvckVhY2goKGgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIElmIHRoZSBmb250IHRhZyBpcyBsb2FkZWQgb25seSBvbiBjbGllbnQgbmF2aWdhdGlvblxuICAgICAgICAgIC8vIGl0IHdvbid0IGJlIGlubGluZWQuIEluIHRoaXMgY2FzZSByZXZlcnQgdG8gdGhlIG9yaWdpbmFsIGJlaGF2aW9yXG4gICAgICAgICAgaC50eXBlID09PSAnbGluaycgJiZcbiAgICAgICAgICBoLnByb3BzWydkYXRhLW9wdGltaXplZC1mb250cyddXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2RhdGEtaHJlZj1cIiR7aC5wcm9wc1snZGF0YS1ocmVmJ119XCJdYClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoLnByb3BzLmhyZWYgPSBoLnByb3BzWydkYXRhLWhyZWYnXVxuICAgICAgICAgICAgaC5wcm9wc1snZGF0YS1ocmVmJ10gPSB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGFnc1toLnR5cGVdIHx8IFtdXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChoKVxuICAgICAgICB0YWdzW2gudHlwZV0gPSBjb21wb25lbnRzXG4gICAgICB9KVxuXG4gICAgICBjb25zdCB0aXRsZUNvbXBvbmVudCA9IHRhZ3MudGl0bGUgPyB0YWdzLnRpdGxlWzBdIDogbnVsbFxuICAgICAgbGV0IHRpdGxlID0gJydcbiAgICAgIGlmICh0aXRsZUNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSB0aXRsZUNvbXBvbmVudC5wcm9wc1xuICAgICAgICB0aXRsZSA9XG4gICAgICAgICAgdHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBjaGlsZHJlblxuICAgICAgICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkcmVuKVxuICAgICAgICAgICAgICA/IGNoaWxkcmVuLmpvaW4oJycpXG4gICAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmICh0aXRsZSAhPT0gZG9jdW1lbnQudGl0bGUpIGRvY3VtZW50LnRpdGxlID0gdGl0bGVcbiAgICAgIDtbJ21ldGEnLCAnYmFzZScsICdsaW5rJywgJ3N0eWxlJywgJ3NjcmlwdCddLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgdXBkYXRlRWxlbWVudHModHlwZSwgdGFnc1t0eXBlXSB8fCBbXSlcbiAgICAgIH0pXG4gICAgfSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbImluaXRIZWFkTWFuYWdlciIsImlzRXF1YWxOb2RlIiwicmVhY3RFbGVtZW50VG9ET00iLCJ0eXBlIiwicHJvcHMiLCJlbCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZXNGcm9tUHJvcHMiLCJjaGlsZHJlbiIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiaW5uZXJIVE1MIiwiX19odG1sIiwidGV4dENvbnRlbnQiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwib2xkVGFnIiwibmV3VGFnIiwiSFRNTEVsZW1lbnQiLCJub25jZSIsImdldEF0dHJpYnV0ZSIsImNsb25lVGFnIiwiY2xvbmVOb2RlIiwic2V0QXR0cmlidXRlIiwidXBkYXRlRWxlbWVudHMiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1NUUklDVF9ORVhUX0hFQUQiLCJjb21wb25lbnRzIiwiaGVhZEVsIiwicXVlcnlTZWxlY3RvciIsIm9sZFRhZ3MiLCJTZXQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibWV0YUNoYXJzZXQiLCJhZGQiLCJuZXdUYWdzIiwiaSIsImxlbmd0aCIsImNvbXBvbmVudCIsImlzTmV3IiwiZGVsZXRlIiwicHVzaCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsInByZXBlbmQiLCJhcHBlbmRDaGlsZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiaGVhZENvdW50RWwiLCJOT0RFX0VOViIsImNvbnNvbGUiLCJlcnJvciIsImhlYWRDb3VudCIsIk51bWJlciIsImNvbnRlbnQiLCJqIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsIm1hcCIsImZpbHRlciIsImsiLCJsZW4iLCJzcGxpY2UiLCJmb3JFYWNoIiwidCIsImluc2VydEJlZm9yZSIsInRvU3RyaW5nIiwibW91bnRlZEluc3RhbmNlcyIsInVwZGF0ZUhlYWQiLCJoZWFkIiwidGFncyIsImgiLCJocmVmIiwidW5kZWZpbmVkIiwidGl0bGVDb21wb25lbnQiLCJ0aXRsZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/head-manager.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/index.js":
|
||
/*!************************************************!*\
|
||
!*** ./node_modules/next/dist/client/index.js ***!
|
||
\************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* global location */ // imports polyfill from `@next/polyfill-module` after build.\n\nvar _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n emitter: function() {\n return emitter;\n },\n hydrate: function() {\n return hydrate;\n },\n initialize: function() {\n return initialize;\n },\n router: function() {\n return router;\n },\n version: function() {\n return version;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/react/jsx-runtime.js\");\n__webpack_require__(/*! ../build/polyfills/polyfill-module */ \"(pages-dir-browser)/./node_modules/next/dist/build/polyfills/polyfill-module.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst _client = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom/client */ \"(pages-dir-browser)/./node_modules/react-dom/client.js\"));\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/mitt */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/mitt.js\"));\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _disablesmoothscroll = __webpack_require__(/*! ../shared/lib/router/utils/disable-smooth-scroll */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js\");\nconst _isdynamic = __webpack_require__(/*! ../shared/lib/router/utils/is-dynamic */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _runtimeconfigexternal = __webpack_require__(/*! ../shared/lib/runtime-config.external */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/runtime-config.external.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _portal = __webpack_require__(/*! ./portal */ \"(pages-dir-browser)/./node_modules/next/dist/client/portal/index.js\");\nconst _headmanager = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./head-manager */ \"(pages-dir-browser)/./node_modules/next/dist/client/head-manager.js\"));\nconst _pageloader = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./page-loader */ \"(pages-dir-browser)/./node_modules/next/dist/client/page-loader.js\"));\nconst _routeannouncer = __webpack_require__(/*! ./route-announcer */ \"(pages-dir-browser)/./node_modules/next/dist/client/route-announcer.js\");\nconst _router = __webpack_require__(/*! ./router */ \"(pages-dir-browser)/./node_modules/next/dist/client/router.js\");\nconst _iserror = __webpack_require__(/*! ../lib/is-error */ \"(pages-dir-browser)/./node_modules/next/dist/lib/is-error.js\");\nconst _imageconfigcontextsharedruntime = __webpack_require__(/*! ../shared/lib/image-config-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js\");\nconst _removebasepath = __webpack_require__(/*! ./remove-base-path */ \"(pages-dir-browser)/./node_modules/next/dist/client/remove-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"(pages-dir-browser)/./node_modules/next/dist/client/has-base-path.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../shared/lib/app-router-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _adapters = __webpack_require__(/*! ../shared/lib/router/adapters */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/adapters.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../shared/lib/hooks-client-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _onrecoverableerror = __webpack_require__(/*! ./react-client-callbacks/on-recoverable-error */ \"(pages-dir-browser)/./node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\");\nconst _tracer = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./tracing/tracer */ \"(pages-dir-browser)/./node_modules/next/dist/client/tracing/tracer.js\"));\nconst _isnextroutererror = __webpack_require__(/*! ./components/is-next-router-error */ \"(pages-dir-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst version = \"15.4.1\";\nlet router;\nconst emitter = (0, _mitt.default)();\nconst looseToArray = (input)=>[].slice.call(input);\nlet initialData;\nlet defaultLocale = undefined;\nlet asPath;\nlet pageLoader;\nlet appElement;\nlet headManager;\nlet initialMatchesMiddleware = false;\nlet lastAppProps;\nlet lastRenderReject;\nlet devClient;\nlet CachedApp, onPerfEntry;\nlet CachedComponent;\nclass Container extends _react.default.Component {\n componentDidCatch(componentErr, info) {\n this.props.fn(componentErr, info);\n }\n componentDidMount() {\n this.scrollToHash();\n // We need to replace the router state if:\n // - the page was (auto) exported and has a query string or search (hash)\n // - it was auto exported and is a dynamic route (to provide params)\n // - if it is a client-side skeleton (fallback render)\n // - if middleware matches the current page (may have rewrite params)\n // - if rewrites in next.config.js match (may have rewrite params)\n if (router.isSsr && (initialData.isFallback || initialData.nextExport && ((0, _isdynamic.isDynamicRoute)(router.pathname) || location.search || false || initialMatchesMiddleware) || initialData.props && initialData.props.__N_SSG && (location.search || false || initialMatchesMiddleware))) {\n // update query on mount for exported pages\n router.replace(router.pathname + '?' + String((0, _querystring.assign)((0, _querystring.urlQueryToSearchParams)(router.query), new URLSearchParams(location.search))), asPath, {\n // @ts-ignore\n // WARNING: `_h` is an internal option for handing Next.js\n // client-side hydration. Your app should _never_ use this property.\n // It may change at any time without notice.\n _h: 1,\n // Fallback pages must trigger the data fetch, so the transition is\n // not shallow.\n // Other pages (strictly updating query) happens shallowly, as data\n // requirements would already be present.\n shallow: !initialData.isFallback && !initialMatchesMiddleware\n }).catch((err)=>{\n if (!err.cancelled) throw err;\n });\n }\n }\n componentDidUpdate() {\n this.scrollToHash();\n }\n scrollToHash() {\n let { hash } = location;\n hash = hash && hash.substring(1);\n if (!hash) return;\n const el = document.getElementById(hash);\n if (!el) return;\n // If we call scrollIntoView() in here without a setTimeout\n // it won't scroll properly.\n setTimeout(()=>el.scrollIntoView(), 0);\n }\n render() {\n if (false) {} else {\n const { PagesDevOverlayBridge } = __webpack_require__(/*! ../next-devtools/userspace/pages/pages-dev-overlay-setup */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.js\");\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(PagesDevOverlayBridge, {\n children: this.props.children\n });\n }\n }\n}\nasync function initialize(opts) {\n if (opts === void 0) opts = {};\n // This makes sure this specific lines are removed in production\n if (true) {\n _tracer.default.onSpanEnd((__webpack_require__(/*! ./tracing/report-to-socket */ \"(pages-dir-browser)/./node_modules/next/dist/client/tracing/report-to-socket.js\")[\"default\"]));\n devClient = opts.devClient;\n }\n initialData = JSON.parse(document.getElementById('__NEXT_DATA__').textContent);\n window.__NEXT_DATA__ = initialData;\n defaultLocale = initialData.defaultLocale;\n const prefix = initialData.assetPrefix || '';\n self.__next_set_public_path__(\"\" + prefix + \"/_next/\") //eslint-disable-line\n ;\n // Initialize next/config with the environment configuration\n (0, _runtimeconfigexternal.setConfig)({\n serverRuntimeConfig: {},\n publicRuntimeConfig: initialData.runtimeConfig || {}\n });\n asPath = (0, _utils.getURL)();\n // make sure not to attempt stripping basePath for 404s\n if ((0, _hasbasepath.hasBasePath)(asPath)) {\n asPath = (0, _removebasepath.removeBasePath)(asPath);\n }\n if (false) {}\n if (initialData.scriptLoader) {\n const { initScriptLoader } = __webpack_require__(/*! ./script */ \"(pages-dir-browser)/./node_modules/next/dist/client/script.js\");\n initScriptLoader(initialData.scriptLoader);\n }\n pageLoader = new _pageloader.default(initialData.buildId, prefix);\n const register = (param)=>{\n let [r, f] = param;\n return pageLoader.routeLoader.onEntrypoint(r, f);\n };\n if (window.__NEXT_P) {\n // Defer page registration for another tick. This will increase the overall\n // latency in hydrating the page, but reduce the total blocking time.\n window.__NEXT_P.map((p)=>setTimeout(()=>register(p), 0));\n }\n window.__NEXT_P = [];\n window.__NEXT_P.push = register;\n headManager = (0, _headmanager.default)();\n headManager.getIsSsr = ()=>{\n return router.isSsr;\n };\n appElement = document.getElementById('__next');\n return {\n assetPrefix: prefix\n };\n}\nfunction renderApp(App, appProps) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(App, {\n ...appProps\n });\n}\nfunction AppContainer(param) {\n _s();\n let { children } = param;\n // Create a memoized value for next/navigation router context.\n const adaptedForAppRouter = _react.default.useMemo({\n \"AppContainer.useMemo[adaptedForAppRouter]\": ()=>{\n return (0, _adapters.adaptForAppRouterInstance)(router);\n }\n }[\"AppContainer.useMemo[adaptedForAppRouter]\"], []);\n var _self___NEXT_DATA___autoExport;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Container, {\n fn: (error)=>// eslint-disable-next-line @typescript-eslint/no-use-before-define\n renderError({\n App: CachedApp,\n err: error\n }).catch((err)=>console.error('Error rendering page: ', err)),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, {\n value: adaptedForAppRouter,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, {\n value: (0, _adapters.adaptForSearchParams)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_adapters.PathnameContextProviderAdapter, {\n router: router,\n isAutoExport: (_self___NEXT_DATA___autoExport = self.__NEXT_DATA__.autoExport) != null ? _self___NEXT_DATA___autoExport : false,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathParamsContext.Provider, {\n value: (0, _adapters.adaptForPathParams)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_routercontextsharedruntime.RouterContext.Provider, {\n value: (0, _router.makePublicRouterInstance)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_headmanagercontextsharedruntime.HeadManagerContext.Provider, {\n value: headManager,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_imageconfigcontextsharedruntime.ImageConfigContext.Provider, {\n value: {\"deviceSizes\":[640,750,828,1080,1200,1920,2048,3840],\"imageSizes\":[16,32,48,64,96,128,256,384],\"path\":\"/_next/image\",\"loader\":\"default\",\"dangerouslyAllowSVG\":false,\"unoptimized\":false,\"domains\":[],\"remotePatterns\":[]},\n children: children\n })\n })\n })\n })\n })\n })\n })\n });\n}\n_s(AppContainer, \"F6BSfrFQNeqenuPnUMVY/6gI8uE=\");\n_c = AppContainer;\nconst wrapApp = (App)=>(wrappedAppProps)=>{\n const appProps = {\n ...wrappedAppProps,\n Component: CachedComponent,\n err: initialData.err,\n router\n };\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainer, {\n children: renderApp(App, appProps)\n });\n };\n// This method handles all runtime and debug errors.\n// 404 and 500 errors are special kind of errors\n// and they are still handle via the main render method.\nfunction renderError(renderErrorProps) {\n let { App, err } = renderErrorProps;\n // In development runtime errors are caught by our overlay\n // In production we catch runtime errors using componentDidCatch which will trigger renderError\n if (true) {\n // A Next.js rendering runtime error is always unrecoverable\n // FIXME: let's make this recoverable (error in GIP client-transition)\n devClient.onUnrecoverableError();\n // We need to render an empty <App> so that the `<ReactDevOverlay>` can\n // render itself.\n // TODO: Fix disabled eslint rule\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return doRender({\n App: ()=>null,\n props: {},\n Component: ()=>null,\n styleSheets: []\n });\n }\n // Make sure we log the error to the console, otherwise users can't track down issues.\n console.error(err);\n console.error(\"A client-side exception has occurred, see here for more info: https://nextjs.org/docs/messages/client-side-exception-occurred\");\n return pageLoader.loadPage('/_error').then((param)=>{\n let { page: ErrorComponent, styleSheets } = param;\n return (lastAppProps == null ? void 0 : lastAppProps.Component) === ErrorComponent ? __webpack_require__.e(/*! import() */ \"_pages-dir-browser_node_modules_next_dist_pages__error_js\").then(__webpack_require__.t.bind(__webpack_require__, /*! ../pages/_error */ \"(pages-dir-browser)/./node_modules/next/dist/pages/_error.js\", 23)).then((errorModule)=>{\n return __webpack_require__.e(/*! import() */ \"_pages-dir-browser_node_modules_next_dist_pages__app_js\").then(__webpack_require__.t.bind(__webpack_require__, /*! ../pages/_app */ \"(pages-dir-browser)/./node_modules/next/dist/pages/_app.js\", 23)).then((appModule)=>{\n App = appModule.default;\n renderErrorProps.App = App;\n return errorModule;\n });\n }).then((m)=>({\n ErrorComponent: m.default,\n styleSheets: []\n })) : {\n ErrorComponent,\n styleSheets\n };\n }).then((param)=>{\n let { ErrorComponent, styleSheets } = param;\n var _renderErrorProps_props;\n // In production we do a normal render with the `ErrorComponent` as component.\n // If we've gotten here upon initial render, we can use the props from the server.\n // Otherwise, we need to call `getInitialProps` on `App` before mounting.\n const AppTree = wrapApp(App);\n const appCtx = {\n Component: ErrorComponent,\n AppTree,\n router,\n ctx: {\n err,\n pathname: initialData.page,\n query: initialData.query,\n asPath,\n AppTree\n }\n };\n return Promise.resolve(((_renderErrorProps_props = renderErrorProps.props) == null ? void 0 : _renderErrorProps_props.err) ? renderErrorProps.props : (0, _utils.loadGetInitialProps)(App, appCtx)).then((initProps)=>// eslint-disable-next-line @typescript-eslint/no-use-before-define\n doRender({\n ...renderErrorProps,\n err,\n Component: ErrorComponent,\n styleSheets,\n props: initProps\n }));\n });\n}\n// Dummy component that we render as a child of Root so that we can\n// toggle the correct styles before the page is rendered.\nfunction Head(param) {\n _s1();\n let { callback } = param;\n // We use `useLayoutEffect` to guarantee the callback is executed\n // as soon as React flushes the update.\n _react.default.useLayoutEffect({\n \"Head.useLayoutEffect\": ()=>callback()\n }[\"Head.useLayoutEffect\"], [\n callback\n ]);\n return null;\n}\n_s1(Head, \"n7/vCynhJvM+pLkyL2DMQUF0odM=\");\n_c1 = Head;\nconst performanceMarks = {\n navigationStart: 'navigationStart',\n beforeRender: 'beforeRender',\n afterRender: 'afterRender',\n afterHydrate: 'afterHydrate',\n routeChange: 'routeChange'\n};\nconst performanceMeasures = {\n hydration: 'Next.js-hydration',\n beforeHydration: 'Next.js-before-hydration',\n routeChangeToRender: 'Next.js-route-change-to-render',\n render: 'Next.js-render'\n};\nlet reactRoot = null;\n// On initial render a hydrate should always happen\nlet shouldHydrate = true;\nfunction clearMarks() {\n ;\n [\n performanceMarks.beforeRender,\n performanceMarks.afterHydrate,\n performanceMarks.afterRender,\n performanceMarks.routeChange\n ].forEach((mark)=>performance.clearMarks(mark));\n}\nfunction markHydrateComplete() {\n if (!_utils.ST) return;\n performance.mark(performanceMarks.afterHydrate) // mark end of hydration\n ;\n const hasBeforeRenderMark = performance.getEntriesByName(performanceMarks.beforeRender, 'mark').length;\n if (hasBeforeRenderMark) {\n const beforeHydrationMeasure = performance.measure(performanceMeasures.beforeHydration, performanceMarks.navigationStart, performanceMarks.beforeRender);\n const hydrationMeasure = performance.measure(performanceMeasures.hydration, performanceMarks.beforeRender, performanceMarks.afterHydrate);\n if ( true && // Old versions of Safari don't return `PerformanceMeasure`s from `performance.measure()`\n beforeHydrationMeasure && hydrationMeasure) {\n _tracer.default.startSpan('navigation-to-hydration', {\n startTime: performance.timeOrigin + beforeHydrationMeasure.startTime,\n attributes: {\n pathname: location.pathname,\n query: location.search\n }\n }).end(performance.timeOrigin + hydrationMeasure.startTime + hydrationMeasure.duration);\n }\n }\n if (onPerfEntry) {\n performance.getEntriesByName(performanceMeasures.hydration).forEach(onPerfEntry);\n }\n clearMarks();\n}\nfunction markRenderComplete() {\n if (!_utils.ST) return;\n performance.mark(performanceMarks.afterRender) // mark end of render\n ;\n const navStartEntries = performance.getEntriesByName(performanceMarks.routeChange, 'mark');\n if (!navStartEntries.length) return;\n const hasBeforeRenderMark = performance.getEntriesByName(performanceMarks.beforeRender, 'mark').length;\n if (hasBeforeRenderMark) {\n performance.measure(performanceMeasures.routeChangeToRender, navStartEntries[0].name, performanceMarks.beforeRender);\n performance.measure(performanceMeasures.render, performanceMarks.beforeRender, performanceMarks.afterRender);\n if (onPerfEntry) {\n performance.getEntriesByName(performanceMeasures.render).forEach(onPerfEntry);\n performance.getEntriesByName(performanceMeasures.routeChangeToRender).forEach(onPerfEntry);\n }\n }\n clearMarks();\n [\n performanceMeasures.routeChangeToRender,\n performanceMeasures.render\n ].forEach((measure)=>performance.clearMeasures(measure));\n}\nfunction renderReactElement(domEl, fn) {\n // mark start of hydrate/render\n if (_utils.ST) {\n performance.mark(performanceMarks.beforeRender);\n }\n const reactEl = fn(shouldHydrate ? markHydrateComplete : markRenderComplete);\n if (!reactRoot) {\n // Unlike with createRoot, you don't need a separate root.render() call here\n reactRoot = _client.default.hydrateRoot(domEl, reactEl, {\n onRecoverableError: _onrecoverableerror.onRecoverableError\n });\n // TODO: Remove shouldHydrate variable when React 18 is stable as it can depend on `reactRoot` existing\n shouldHydrate = false;\n } else {\n const startTransition = _react.default.startTransition;\n startTransition(()=>{\n reactRoot.render(reactEl);\n });\n }\n}\nfunction Root(param) {\n _s2();\n let { callbacks, children } = param;\n // We use `useLayoutEffect` to guarantee the callbacks are executed\n // as soon as React flushes the update\n _react.default.useLayoutEffect({\n \"Root.useLayoutEffect\": ()=>callbacks.forEach({\n \"Root.useLayoutEffect\": (callback)=>callback()\n }[\"Root.useLayoutEffect\"])\n }[\"Root.useLayoutEffect\"], [\n callbacks\n ]);\n if (false) {}\n return children;\n}\n_s2(Root, \"n7/vCynhJvM+pLkyL2DMQUF0odM=\");\n_c2 = Root;\nfunction doRender(input) {\n let { App, Component, props, err } = input;\n let styleSheets = 'initial' in input ? undefined : input.styleSheets;\n Component = Component || lastAppProps.Component;\n props = props || lastAppProps.props;\n const appProps = {\n ...props,\n Component,\n err,\n router\n };\n // lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.\n lastAppProps = appProps;\n let canceled = false;\n let resolvePromise;\n const renderPromise = new Promise((resolve, reject)=>{\n if (lastRenderReject) {\n lastRenderReject();\n }\n resolvePromise = ()=>{\n lastRenderReject = null;\n resolve();\n };\n lastRenderReject = ()=>{\n canceled = true;\n lastRenderReject = null;\n const error = Object.defineProperty(new Error('Cancel rendering route'), \"__NEXT_ERROR_CODE\", {\n value: \"E503\",\n enumerable: false,\n configurable: true\n });\n error.cancelled = true;\n reject(error);\n };\n });\n // This function has a return type to ensure it doesn't start returning a\n // Promise. It should remain synchronous.\n function onStart() {\n if (!styleSheets || // We use `style-loader` in development, so we don't need to do anything\n // unless we're in production:\n \"development\" !== 'production') {\n return false;\n }\n const currentStyleTags = looseToArray(document.querySelectorAll('style[data-n-href]'));\n const currentHrefs = new Set(currentStyleTags.map((tag)=>tag.getAttribute('data-n-href')));\n const noscript = document.querySelector('noscript[data-n-css]');\n const nonce = noscript == null ? void 0 : noscript.getAttribute('data-n-css');\n styleSheets.forEach((param)=>{\n let { href, text } = param;\n if (!currentHrefs.has(href)) {\n const styleTag = document.createElement('style');\n styleTag.setAttribute('data-n-href', href);\n styleTag.setAttribute('media', 'x');\n if (nonce) {\n styleTag.setAttribute('nonce', nonce);\n }\n document.head.appendChild(styleTag);\n styleTag.appendChild(document.createTextNode(text));\n }\n });\n return true;\n }\n function onHeadCommit() {\n if (false) {}\n if (input.scroll) {\n const { x, y } = input.scroll;\n (0, _disablesmoothscroll.disableSmoothScrollDuringRouteTransition)(()=>{\n window.scrollTo(x, y);\n });\n }\n }\n function onRootCommit() {\n resolvePromise();\n }\n onStart();\n const elem = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {\n callback: onHeadCommit\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(AppContainer, {\n children: [\n renderApp(App, appProps),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_portal.Portal, {\n type: \"next-route-announcer\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_routeannouncer.RouteAnnouncer, {})\n })\n ]\n })\n ]\n });\n // We catch runtime errors using componentDidCatch which will trigger renderError\n renderReactElement(appElement, (callback)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(Root, {\n callbacks: [\n callback,\n onRootCommit\n ],\n children: true ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.default.StrictMode, {\n children: elem\n }) : 0\n }));\n return renderPromise;\n}\nasync function render(renderingProps) {\n // if an error occurs in a server-side page (e.g. in getInitialProps),\n // skip re-rendering the error page client-side as data-fetching operations\n // will already have been done on the server and NEXT_DATA contains the correct\n // data for straight-forward hydration of the error page\n if (renderingProps.err && // renderingProps.Component might be undefined if there is a top/module-level error\n (typeof renderingProps.Component === 'undefined' || !renderingProps.isHydratePass)) {\n await renderError(renderingProps);\n return;\n }\n try {\n await doRender(renderingProps);\n } catch (err) {\n const renderErr = (0, _iserror.getProperError)(err);\n // bubble up cancelation errors\n if (renderErr.cancelled) {\n throw renderErr;\n }\n if (true) {\n // Ensure this error is displayed in the overlay in development\n setTimeout(()=>{\n throw renderErr;\n });\n }\n await renderError({\n ...renderingProps,\n err: renderErr\n });\n }\n}\nasync function hydrate(opts) {\n let initialErr = initialData.err;\n try {\n const appEntrypoint = await pageLoader.routeLoader.whenEntrypoint('/_app');\n if ('error' in appEntrypoint) {\n throw appEntrypoint.error;\n }\n const { component: app, exports: mod } = appEntrypoint;\n CachedApp = app;\n if (mod && mod.reportWebVitals) {\n onPerfEntry = (param)=>{\n let { id, name, startTime, value, duration, entryType, entries, attribution } = param;\n // Combines timestamp with random number for unique ID\n const uniqueID = Date.now() + \"-\" + (Math.floor(Math.random() * (9e12 - 1)) + 1e12);\n let perfStartEntry;\n if (entries && entries.length) {\n perfStartEntry = entries[0].startTime;\n }\n const webVitals = {\n id: id || uniqueID,\n name,\n startTime: startTime || perfStartEntry,\n value: value == null ? duration : value,\n label: entryType === 'mark' || entryType === 'measure' ? 'custom' : 'web-vital'\n };\n if (attribution) {\n webVitals.attribution = attribution;\n }\n mod.reportWebVitals(webVitals);\n };\n }\n const pageEntrypoint = // error, so we need to skip waiting for the entrypoint.\n true && initialData.err ? {\n error: initialData.err\n } : await pageLoader.routeLoader.whenEntrypoint(initialData.page);\n if ('error' in pageEntrypoint) {\n throw pageEntrypoint.error;\n }\n CachedComponent = pageEntrypoint.component;\n if (true) {\n const { isValidElementType } = __webpack_require__(/*! next/dist/compiled/react-is */ \"(pages-dir-browser)/./node_modules/next/dist/compiled/react-is/index.js\");\n if (!isValidElementType(CachedComponent)) {\n throw Object.defineProperty(new Error('The default export is not a React Component in page: \"' + initialData.page + '\"'), \"__NEXT_ERROR_CODE\", {\n value: \"E286\",\n enumerable: false,\n configurable: true\n });\n }\n }\n } catch (error) {\n // This catches errors like throwing in the top level of a module\n initialErr = (0, _iserror.getProperError)(error);\n }\n if (true) {\n const getServerError = (__webpack_require__(/*! ../server/dev/node-stack-frames */ \"(pages-dir-browser)/./node_modules/next/dist/server/dev/node-stack-frames.js\").getServerError);\n // Server-side runtime errors need to be re-thrown on the client-side so\n // that the overlay is rendered.\n if (initialErr) {\n if (initialErr === initialData.err) {\n setTimeout(()=>{\n let error;\n try {\n // Generate a new error object. We `throw` it because some browsers\n // will set the `stack` when thrown, and we want to ensure ours is\n // not overridden when we re-throw it below.\n throw Object.defineProperty(new Error(initialErr.message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n } catch (e) {\n error = e;\n }\n error.name = initialErr.name;\n error.stack = initialErr.stack;\n const errSource = initialErr.source;\n // In development, error the navigation API usage in runtime,\n // since it's not allowed to be used in pages router as it doesn't contain error boundary like app router.\n if ((0, _isnextroutererror.isNextRouterError)(initialErr)) {\n error.message = 'Next.js navigation API is not allowed to be used in Pages Router.';\n }\n throw getServerError(error, errSource);\n });\n } else {\n setTimeout(()=>{\n throw initialErr;\n });\n }\n }\n }\n if (window.__NEXT_PRELOADREADY) {\n await window.__NEXT_PRELOADREADY(initialData.dynamicIds);\n }\n router = (0, _router.createRouter)(initialData.page, initialData.query, asPath, {\n initialProps: initialData.props,\n pageLoader,\n App: CachedApp,\n Component: CachedComponent,\n wrapApp,\n err: initialErr,\n isFallback: Boolean(initialData.isFallback),\n subscription: (info, App, scroll)=>render(Object.assign({}, info, {\n App,\n scroll\n })),\n locale: initialData.locale,\n locales: initialData.locales,\n defaultLocale,\n domainLocales: initialData.domainLocales,\n isPreview: initialData.isPreview\n });\n initialMatchesMiddleware = await router._initialMatchesMiddlewarePromise;\n const renderCtx = {\n App: CachedApp,\n initial: true,\n Component: CachedComponent,\n props: initialData.props,\n err: initialErr,\n isHydratePass: true\n };\n if (opts == null ? void 0 : opts.beforeRender) {\n await opts.beforeRender();\n }\n render(renderCtx);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\nvar _c, _c1, _c2;\n$RefreshReg$(_c, \"AppContainer\");\n$RefreshReg$(_c1, \"Head\");\n$RefreshReg$(_c2, \"Root\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQixHQUNuQiw2REFBNkQ7Ozs7Ozs7Ozs7Ozs7OztJQTBFaERBLE9BQU87ZUFBUEE7O0lBaXdCU0MsT0FBTztlQUFQQTs7SUE5b0JBQyxVQUFVO2VBQVZBOztJQXBIWEMsTUFBTTtlQUFOQTs7SUFERUMsT0FBTztlQUFQQTs7Ozs7b0JBdkVOOzRFQVF5Qjs2RUFDWDs2REFDYzsyRUFDbEI7d0RBRWE7aURBQzJCO3VDQUMxQjt5Q0FJeEI7bURBQ21CO21DQUNzQjtvQ0FFekI7a0ZBQ0s7aUZBQ0w7NENBRVE7b0NBQ3dCO3FDQUN4Qjs2REFDSTs0Q0FFSjt5Q0FDSDsyREFDSztzQ0FNMUI7NkRBSUE7Z0RBQzRCOzZFQUNoQjsrQ0FDZTtBQXdCM0IsTUFBTUEsVUFBVUMsUUFBUUM7QUFDeEIsSUFBSUg7QUFDSixNQUFNSCxVQUErQlEsQ0FBQUEsR0FBQUEsTUFBQUEsT0FBQUE7QUFFNUMsTUFBTUMsZUFBZSxDQUFlQyxRQUFvQixFQUFFLENBQUNDLEtBQUssQ0FBQ0MsSUFBSSxDQUFDRjtBQUV0RSxJQUFJRztBQUNKLElBQUlDLGdCQUFvQ0M7QUFDeEMsSUFBSUM7QUFDSixJQUFJQztBQUNKLElBQUlDO0FBQ0osSUFBSUM7QUFLSixJQUFJQywyQkFBMkI7QUFDL0IsSUFBSUM7QUFFSixJQUFJQztBQUNKLElBQUlDO0FBRUosSUFBSUMsV0FBeUJDO0FBQzdCLElBQUlDO0FBRUosTUFBTUMsa0JBQWtCQyxPQUFBQSxPQUFLLENBQUNDLFNBQVM7SUFJckNDLGtCQUFrQkMsWUFBbUIsRUFBRUMsSUFBUyxFQUFFO1FBQ2hELElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxFQUFFLENBQUNILGNBQWNDO0lBQzlCO0lBRUFHLG9CQUFvQjtRQUNsQixJQUFJLENBQUNDLFlBQVk7UUFFakIsMENBQTBDO1FBQzFDLHlFQUF5RTtRQUN6RSxv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MUJKLFNBQVNsRixZQUFZa0YsT0FBTztRQUM1QmpGO1FBQ0FpUyxlQUFlbFMsWUFBWWtTLGFBQWE7UUFDeENDLFdBQVduUyxZQUFZbVMsU0FBUztJQUNsQztJQUVBNVIsMkJBQTJCLE1BQU1qQixPQUFPOFMsZ0NBQWdDO0lBRXhFLE1BQU1DLFlBQTZCO1FBQ2pDM0wsS0FBSy9GO1FBQ0wyUixTQUFTO1FBQ1R0UixXQUFXSDtRQUNYTyxPQUFPcEIsWUFBWW9CLEtBQUs7UUFDeEJzQixLQUFLb047UUFDTEgsZUFBZTtJQUNqQjtJQUVBLElBQUlsTSxRQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxLQUFNa0csWUFBWSxFQUFFO1FBQ3RCLE1BQU1sRyxLQUFLa0csWUFBWTtJQUN6QjtJQUVBdkcsT0FBT2lQO0FBQ1QiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxcaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBsb2NhdGlvbiAqL1xuLy8gaW1wb3J0cyBwb2x5ZmlsbCBmcm9tIGBAbmV4dC9wb2x5ZmlsbC1tb2R1bGVgIGFmdGVyIGJ1aWxkLlxuaW1wb3J0ICcuLi9idWlsZC9wb2x5ZmlsbHMvcG9seWZpbGwtbW9kdWxlJ1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3JvdXRlcidcbmltcG9ydCB0eXBlIHtcbiAgQXBwQ29tcG9uZW50LFxuICBBcHBQcm9wcyxcbiAgUHJpdmF0ZVJvdXRlSW5mbyxcbn0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyJ1xuXG5pbXBvcnQgUmVhY3QsIHsgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20vY2xpZW50J1xuaW1wb3J0IHsgSGVhZE1hbmFnZXJDb250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCBtaXR0IGZyb20gJy4uL3NoYXJlZC9saWIvbWl0dCdcbmltcG9ydCB0eXBlIHsgTWl0dEVtaXR0ZXIgfSBmcm9tICcuLi9zaGFyZWQvbGliL21pdHQnXG5pbXBvcnQgeyBSb3V0ZXJDb250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IGRpc2FibGVTbW9vdGhTY3JvbGxEdXJpbmdSb3V0ZVRyYW5zaXRpb24gfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9kaXNhYmxlLXNtb290aC1zY3JvbGwnXG5pbXBvcnQgeyBpc0R5bmFtaWNSb3V0ZSB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWR5bmFtaWMnXG5pbXBvcnQge1xuICB1cmxRdWVyeVRvU2VhcmNoUGFyYW1zLFxuICBhc3NpZ24sXG59IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3F1ZXJ5c3RyaW5nJ1xuaW1wb3J0IHsgc2V0Q29uZmlnIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9ydW50aW1lLWNvbmZpZy5leHRlcm5hbCdcbmltcG9ydCB7IGdldFVSTCwgbG9hZEdldEluaXRpYWxQcm9wcywgU1QgfSBmcm9tICcuLi9zaGFyZWQvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBOZXh0V2ViVml0YWxzTWV0cmljLCBORVhUX0RBVEEgfSBmcm9tICcuLi9zaGFyZWQvbGliL3V0aWxzJ1xuaW1wb3J0IHsgUG9ydGFsIH0gZnJvbSAnLi9wb3J0YWwnXG5pbXBvcnQgaW5pdEhlYWRNYW5hZ2VyIGZyb20gJy4vaGVhZC1tYW5hZ2VyJ1xuaW1wb3J0IFBhZ2VMb2FkZXIgZnJvbSAnLi9wYWdlLWxvYWRlcidcbmltcG9ydCB0eXBlIHsgU3R5bGVTaGVldFR1cGxlIH0gZnJvbSAnLi9wYWdlLWxvYWRlcidcbmltcG9ydCB7IFJvdXRlQW5ub3VuY2VyIH0gZnJvbSAnLi9yb3V0ZS1hbm5vdW5jZXInXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXIsIG1ha2VQdWJsaWNSb3V0ZXJJbnN0YW5jZSB9IGZyb20gJy4vcm91dGVyJ1xuaW1wb3J0IHsgZ2V0UHJvcGVyRXJyb3IgfSBmcm9tICcuLi9saWIvaXMtZXJyb3InXG5pbXBvcnQgeyBJbWFnZUNvbmZpZ0NvbnRleHQgfSBmcm9tICcuLi9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZy1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUgeyBJbWFnZUNvbmZpZ0NvbXBsZXRlIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9pbWFnZS1jb25maWcnXG5pbXBvcnQgeyByZW1vdmVCYXNlUGF0aCB9IGZyb20gJy4vcmVtb3ZlLWJhc2UtcGF0aCdcbmltcG9ydCB7IGhhc0Jhc2VQYXRoIH0gZnJvbSAnLi9oYXMtYmFzZS1wYXRoJ1xuaW1wb3J0IHsgQXBwUm91dGVyQ29udGV4dCB9IGZyb20gJy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHtcbiAgYWRhcHRGb3JBcHBSb3V0ZXJJbnN0YW5jZSxcbiAgYWRhcHRGb3JQYXRoUGFyYW1zLFxuICBhZGFwdEZvclNlYXJjaFBhcmFtcyxcbiAgUGF0aG5hbWVDb250ZXh0UHJvdmlkZXJBZGFwdGVyLFxufSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci9hZGFwdGVycydcbmltcG9ydCB7XG4gIFNlYXJjaFBhcmFtc0NvbnRleHQsXG4gIFBhdGhQYXJhbXNDb250ZXh0LFxufSBmcm9tICcuLi9zaGFyZWQvbGliL2hvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgb25SZWNvdmVyYWJsZUVycm9yIH0gZnJvbSAnLi9yZWFjdC1jbGllbnQtY2FsbGJhY2tzL29uLXJlY292ZXJhYmxlLWVycm9yJ1xuaW1wb3J0IHRyYWNlciBmcm9tICcuL3RyYWNpbmcvdHJhY2VyJ1xuaW1wb3J0IHsgaXNOZXh0Um91dGVyRXJyb3IgfSBmcm9tICcuL2NvbXBvbmVudHMvaXMtbmV4dC1yb3V0ZXItZXJyb3InXG5cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwicmVhY3QtZG9tL2V4cGVyaW1lbnRhbFwiIC8+XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgLyogdGVzdCBmbnMgKi9cbiAgICBfX05FWFRfSFlEUkFURUQ/OiBib29sZWFuXG4gICAgX19ORVhUX0hZRFJBVEVEX0FUPzogbnVtYmVyXG4gICAgX19ORVhUX0hZRFJBVEVEX0NCPzogKCkgPT4gdm9pZFxuXG4gICAgLyogcHJvZCAqL1xuICAgIF9fTkVYVF9EQVRBX186IE5FWFRfREFUQVxuICAgIF9fTkVYVF9QOiBhbnlbXVxuICB9XG59XG50eXBlIFJlbmRlclJvdXRlSW5mbyA9IFByaXZhdGVSb3V0ZUluZm8gJiB7XG4gIEFwcDogQXBwQ29tcG9uZW50XG4gIHNjcm9sbD86IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGxcbiAgaXNIeWRyYXRlUGFzcz86IGJvb2xlYW5cbn1cbnR5cGUgUmVuZGVyRXJyb3JQcm9wcyA9IE9taXQ8UmVuZGVyUm91dGVJbmZvLCAnQ29tcG9uZW50JyB8ICdzdHlsZVNoZWV0cyc+XG50eXBlIFJlZ2lzdGVyRm4gPSAoaW5wdXQ6IFtzdHJpbmcsICgpID0+IHZvaWRdKSA9PiB2b2lkXG5cbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gcHJvY2Vzcy5lbnYuX19ORVhUX1ZFUlNJT05cbmV4cG9ydCBsZXQgcm91dGVyOiBSb3V0ZXJcbmV4cG9ydCBjb25zdCBlbWl0dGVyOiBNaXR0RW1pdHRlcjxzdHJpbmc+ID0gbWl0dCgpXG5cbmNvbnN0IGxvb3NlVG9BcnJheSA9IDxUIGV4dGVuZHMge30+KGlucHV0OiBhbnkpOiBUW10gPT4gW10uc2xpY2UuY2FsbChpbnB1dClcblxubGV0IGluaXRpYWxEYXRhOiBORVhUX0RBVEFcbmxldCBkZWZhdWx0TG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbmxldCBhc1BhdGg6IHN0cmluZ1xubGV0IHBhZ2VMb2FkZXI6IFBhZ2VMb2FkZXJcbmxldCBhcHBFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGxcbmxldCBoZWFkTWFuYWdlcjoge1xuICBtb3VudGVkSW5zdGFuY2VzOiBTZXQ8dW5rbm93bj5cbiAgdXBkYXRlSGVhZDogKGhlYWQ6IEpTWC5FbGVtZW50W10pID0+IHZvaWRcbiAgZ2V0SXNTc3I/OiAoKSA9PiBib29sZWFuXG59XG5sZXQgaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlID0gZmFsc2VcbmxldCBsYXN0QXBwUHJvcHM6IEFwcFByb3BzXG5cbmxldCBsYXN0UmVuZGVyUmVqZWN0OiAoKCkgPT4gdm9pZCkgfCBudWxsXG5sZXQgZGV2Q2xpZW50OiBhbnlcblxubGV0IENhY2hlZEFwcDogQXBwQ29tcG9uZW50LCBvblBlcmZFbnRyeTogKG1ldHJpYzogYW55KSA9PiB2b2lkXG5sZXQgQ2FjaGVkQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlXG5cbmNsYXNzIENvbnRhaW5lciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIGZuOiAoZXJyOiBFcnJvciwgaW5mbz86IGFueSkgPT4gdm9pZFxufT4ge1xuICBjb21wb25lbnREaWRDYXRjaChjb21wb25lbnRFcnI6IEVycm9yLCBpbmZvOiBhbnkpIHtcbiAgICB0aGlzLnByb3BzLmZuKGNvbXBvbmVudEVyciwgaW5mbylcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuc2Nyb2xsVG9IYXNoKClcblxuICAgIC8vIFdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgcm91dGVyIHN0YXRlIGlmOlxuICAgIC8vIC0gdGhlIHBhZ2Ugd2FzIChhdXRvKSBleHBvcnRlZCBhbmQgaGFzIGEgcXVlcnkgc3RyaW5nIG9yIHNlYXJjaCAoaGFzaClcbiAgICAvLyAtIGl0IHdhcyBhdXRvIGV4cG9ydGVkIGFuZCBpcyBhIGR5bmFtaWMgcm91dGUgKHRvIHByb3ZpZGUgcGFyYW1zKVxuICAgIC8vIC0gaWYgaXQgaXMgYSBjbGllbnQtc2lkZSBza2VsZXRvbiAoZmFsbGJhY2sgcmVuZGVyKVxuICAgIC8vIC0gaWYgbWlkZGxld2FyZSBtYXRjaGVzIHRoZSBjdXJyZW50IHBhZ2UgKG1heSBoYXZlIHJld3JpdGUgcGFyYW1zKVxuICAgIC8vIC0gaWYgcmV3cml0ZXMgaW4gbmV4dC5jb25maWcuanMgbWF0Y2ggKG1heSBoYXZlIHJld3JpdGUgcGFyYW1zKVxuICAgIGlmIChcbiAgICAgIHJvdXRlci5pc1NzciAmJlxuICAgICAgKGluaXRpYWxEYXRhLmlzRmFsbGJhY2sgfHxcbiAgICAgICAgKGluaXRpYWxEYXRhLm5leHRFeHBvcnQgJiZcbiAgICAgICAgICAoaXNEeW5hbWljUm91dGUocm91dGVyLnBhdGhuYW1lKSB8fFxuICAgICAgICAgICAgbG9jYXRpb24uc2VhcmNoIHx8XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5fX05FWFRfSEFTX1JFV1JJVEVTIHx8XG4gICAgICAgICAgICBpbml0aWFsTWF0Y2hlc01pZGRsZXdhcmUpKSB8fFxuICAgICAgICAoaW5pdGlhbERhdGEucHJvcHMgJiZcbiAgICAgICAgICBpbml0aWFsRGF0YS5wcm9wcy5fX05fU1NHICYmXG4gICAgICAgICAgKGxvY2F0aW9uLnNlYXJjaCB8fFxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUyB8fFxuICAgICAgICAgICAgaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlKSkpXG4gICAgKSB7XG4gICAgICAvLyB1cGRhdGUgcXVlcnkgb24gbW91bnQgZm9yIGV4cG9ydGVkIHBhZ2VzXG4gICAgICByb3V0ZXJcbiAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgcm91dGVyLnBhdGhuYW1lICtcbiAgICAgICAgICAgICc/JyArXG4gICAgICAgICAgICBTdHJpbmcoXG4gICAgICAgICAgICAgIGFzc2lnbihcbiAgICAgICAgICAgICAgICB1cmxRdWVyeVRvU2VhcmNoUGFyYW1zKHJvdXRlci5xdWVyeSksXG4gICAgICAgICAgICAgICAgbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgYXNQYXRoLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIC8vIFdBUk5JTkc6IGBfaGAgaXMgYW4gaW50ZXJuYWwgb3B0aW9uIGZvciBoYW5kaW5nIE5leHQuanNcbiAgICAgICAgICAgIC8vIGNsaWVudC1zaWRlIGh5ZHJhdGlvbi4gWW91ciBhcHAgc2hvdWxkIF9uZXZlcl8gdXNlIHRoaXMgcHJvcGVydHkuXG4gICAgICAgICAgICAvLyBJdCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lIHdpdGhvdXQgbm90aWNlLlxuICAgICAgICAgICAgX2g6IDEsXG4gICAgICAgICAgICAvLyBGYWxsYmFjayBwYWdlcyBtdXN0IHRyaWdnZXIgdGhlIGRhdGEgZmV0Y2gsIHNvIHRoZSB0cmFuc2l0aW9uIGlzXG4gICAgICAgICAgICAvLyBub3Qgc2hhbGxvdy5cbiAgICAgICAgICAgIC8vIE90aGVyIHBhZ2VzIChzdHJpY3RseSB1cGRhdGluZyBxdWVyeSkgaGFwcGVucyBzaGFsbG93bHksIGFzIGRhdGFcbiAgICAgICAgICAgIC8vIHJlcXVpcmVtZW50cyB3b3VsZCBhbHJlYWR5IGJlIHByZXNlbnQuXG4gICAgICAgICAgICBzaGFsbG93OiAhaW5pdGlhbERhdGEuaXNGYWxsYmFjayAmJiAhaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlLFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGlmICghZXJyLmNhbmNlbGxlZCkgdGhyb3cgZXJyXG4gICAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIHRoaXMuc2Nyb2xsVG9IYXNoKClcbiAgfVxuXG4gIHNjcm9sbFRvSGFzaCgpIHtcbiAgICBsZXQgeyBoYXNoIH0gPSBsb2NhdGlvblxuICAgIGhhc2ggPSBoYXNoICYmIGhhc2guc3Vic3RyaW5nKDEpXG4gICAgaWYgKCFoYXNoKSByZXR1cm5cblxuICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoYXNoKVxuICAgIGlmICghZWwpIHJldHVyblxuXG4gICAgLy8gSWYgd2UgY2FsbCBzY3JvbGxJbnRvVmlldygpIGluIGhlcmUgd2l0aG91dCBhIHNldFRpbWVvdXRcbiAgICAvLyBpdCB3b24ndCBzY3JvbGwgcHJvcGVybHkuXG4gICAgc2V0VGltZW91dCgoKSA9PiBlbC5zY3JvbGxJbnRvVmlldygpLCAwKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IFBhZ2VzRGV2T3ZlcmxheUJyaWRnZSB9ID1cbiAgICAgICAgcmVxdWlyZSgnLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvcGFnZXMvcGFnZXMtZGV2LW92ZXJsYXktc2V0dXAnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9wYWdlcy9wYWdlcy1kZXYtb3ZlcmxheS1zZXR1cCcpXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8UGFnZXNEZXZPdmVybGF5QnJpZGdlPnt0aGlzLnByb3BzLmNoaWxkcmVufTwvUGFnZXNEZXZPdmVybGF5QnJpZGdlPlxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZShvcHRzOiB7IGRldkNsaWVudD86IGFueSB9ID0ge30pOiBQcm9taXNlPHtcbiAgYXNzZXRQcmVmaXg6IHN0cmluZ1xufT4ge1xuICAvLyBUaGlzIG1ha2VzIHN1cmUgdGhpcyBzcGVjaWZpYyBsaW5lcyBhcmUgcmVtb3ZlZCBpbiBwcm9kdWN0aW9uXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIHRyYWNlci5vblNwYW5FbmQoXG4gICAgICAoXG4gICAgICAgIHJlcXVpcmUoJy4vdHJhY2luZy9yZXBvcnQtdG8tc29ja2V0JykgYXMgdHlwZW9mIGltcG9ydCgnLi90cmFjaW5nL3JlcG9ydC10by1zb2NrZXQnKVxuICAgICAgKS5kZWZhdWx0XG4gICAgKVxuICAgIGRldkNsaWVudCA9IG9wdHMuZGV2Q2xpZW50XG4gIH1cblxuICBpbml0aWFsRGF0YSA9IEpTT04ucGFyc2UoXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19fTkVYVF9EQVRBX18nKSEudGV4dENvbnRlbnQhXG4gIClcbiAgd2luZG93Ll9fTkVYVF9EQVRBX18gPSBpbml0aWFsRGF0YVxuXG4gIGRlZmF1bHRMb2NhbGUgPSBpbml0aWFsRGF0YS5kZWZhdWx0TG9jYWxlXG4gIGNvbnN0IHByZWZpeDogc3RyaW5nID0gaW5pdGlhbERhdGEuYXNzZXRQcmVmaXggfHwgJydcbiAgLy8gV2l0aCBkeW5hbWljIGFzc2V0UHJlZml4IGl0J3Mgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHNldCBhc3NldFByZWZpeCBhdCB0aGUgYnVpbGQgdGltZVxuICAvLyBTbywgdGhpcyBpcyBob3cgd2UgZG8gaXQgaW4gdGhlIGNsaWVudCBzaWRlIGF0IHJ1bnRpbWVcbiAgOyhzZWxmIGFzIGFueSkuX19uZXh0X3NldF9wdWJsaWNfcGF0aF9fKGAke3ByZWZpeH0vX25leHQvYCkgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgLy8gSW5pdGlhbGl6ZSBuZXh0L2NvbmZpZyB3aXRoIHRoZSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uXG4gIHNldENvbmZpZyh7XG4gICAgc2VydmVyUnVudGltZUNvbmZpZzoge30sXG4gICAgcHVibGljUnVudGltZUNvbmZpZzogaW5pdGlhbERhdGEucnVudGltZUNvbmZpZyB8fCB7fSxcbiAgfSlcblxuICBhc1BhdGggPSBnZXRVUkwoKVxuXG4gIC8vIG1ha2Ugc3VyZSBub3QgdG8gYXR0ZW1wdCBzdHJpcHBpbmcgYmFzZVBhdGggZm9yIDQwNHNcbiAgaWYgKGhhc0Jhc2VQYXRoKGFzUGF0aCkpIHtcbiAgICBhc1BhdGggPSByZW1vdmVCYXNlUGF0aChhc1BhdGgpXG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgIGNvbnN0IHsgbm9ybWFsaXplTG9jYWxlUGF0aCB9ID1cbiAgICAgIHJlcXVpcmUoJy4uL3NoYXJlZC9saWIvaTE4bi9ub3JtYWxpemUtbG9jYWxlLXBhdGgnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9zaGFyZWQvbGliL2kxOG4vbm9ybWFsaXplLWxvY2FsZS1wYXRoJylcblxuICAgIGNvbnN0IHsgZGV0ZWN0RG9tYWluTG9jYWxlIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vc2hhcmVkL2xpYi9pMThuL2RldGVjdC1kb21haW4tbG9jYWxlJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vc2hhcmVkL2xpYi9pMThuL2RldGVjdC1kb21haW4tbG9jYWxlJylcblxuICAgIGNvbnN0IHsgcGFyc2VSZWxhdGl2ZVVybCB9ID1cbiAgICAgIHJlcXVpcmUoJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXJlbGF0aXZlLXVybCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXJlbGF0aXZlLXVybCcpXG5cbiAgICBjb25zdCB7IGZvcm1hdFVybCB9ID1cbiAgICAgIHJlcXVpcmUoJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9mb3JtYXQtdXJsJylcblxuICAgIGlmIChpbml0aWFsRGF0YS5sb2NhbGVzKSB7XG4gICAgICBjb25zdCBwYXJzZWRBcyA9IHBhcnNlUmVsYXRpdmVVcmwoYXNQYXRoKVxuICAgICAgY29uc3QgbG9jYWxlUGF0aFJlc3VsdCA9IG5vcm1hbGl6ZUxvY2FsZVBhdGgoXG4gICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lLFxuICAgICAgICBpbml0aWFsRGF0YS5sb2NhbGVzXG4gICAgICApXG5cbiAgICAgIGlmIChsb2NhbGVQYXRoUmVzdWx0LmRldGVjdGVkTG9jYWxlKSB7XG4gICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lID0gbG9jYWxlUGF0aFJlc3VsdC5wYXRobmFtZVxuICAgICAgICBhc1BhdGggPSBmb3JtYXRVcmwocGFyc2VkQXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZXJpdmUgdGhlIGRlZmF1bHQgbG9jYWxlIGlmIGl0IHdhc24ndCBkZXRlY3RlZCBpbiB0aGUgYXNQYXRoXG4gICAgICAgIC8vIHNpbmNlIHdlIGRvbid0IHByZXJlbmRlciBzdGF0aWMgcGFnZXMgd2l0aCBhbGwgcG9zc2libGUgZGVmYXVsdFxuICAgICAgICAvLyBsb2NhbGVzXG4gICAgICAgIGRlZmF1bHRMb2NhbGUgPSBpbml0aWFsRGF0YS5sb2NhbGVcbiAgICAgIH1cblxuICAgICAgLy8gYXR0ZW1wdCBkZXRlY3RpbmcgZGVmYXVsdCBsb2NhbGUgYmFzZWQgb24gaG9zdG5hbWVcbiAgICAgIGNvbnN0IGRldGVjdGVkRG9tYWluID0gZGV0ZWN0RG9tYWluTG9jYWxlKFxuICAgICAgICBwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9ET01BSU5TIGFzIGFueSxcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lXG4gICAgICApXG5cbiAgICAgIC8vIFRPRE86IGludmVzdGlnYXRlIGlmIGRlZmF1bHRMb2NhbGUgbmVlZHMgdG8gYmUgcG9wdWxhdGVkIGFmdGVyXG4gICAgICAvLyBoeWRyYXRpb24gdG8gcHJldmVudCBtaXNtYXRjaGVkIHJlbmRlcnNcbiAgICAgIGlmIChkZXRlY3RlZERvbWFpbikge1xuICAgICAgICBkZWZhdWx0TG9jYWxlID0gZGV0ZWN0ZWREb21haW4uZGVmYXVsdExvY2FsZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChpbml0aWFsRGF0YS5zY3JpcHRMb2FkZXIpIHtcbiAgICBjb25zdCB7IGluaXRTY3JpcHRMb2FkZXIgfSA9XG4gICAgICByZXF1aXJlKCcuL3NjcmlwdCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4vc2NyaXB0JylcbiAgICBpbml0U2NyaXB0TG9hZGVyKGluaXRpYWxEYXRhLnNjcmlwdExvYWRlcilcbiAgfVxuXG4gIHBhZ2VMb2FkZXIgPSBuZXcgUGFnZUxvYWRlcihpbml0aWFsRGF0YS5idWlsZElkLCBwcmVmaXgpXG5cbiAgY29uc3QgcmVnaXN0ZXI6IFJlZ2lzdGVyRm4gPSAoW3IsIGZdKSA9PlxuICAgIHBhZ2VMb2FkZXIucm91dGVMb2FkZXIub25FbnRyeXBvaW50KHIsIGYpXG4gIGlmICh3aW5kb3cuX19ORVhUX1ApIHtcbiAgICAvLyBEZWZlciBwYWdlIHJlZ2lzdHJhdGlvbiBmb3IgYW5vdGhlciB0aWNrLiBUaGlzIHdpbGwgaW5jcmVhc2UgdGhlIG92ZXJhbGxcbiAgICAvLyBsYXRlbmN5IGluIGh5ZHJhdGluZyB0aGUgcGFnZSwgYnV0IHJlZHVjZSB0aGUgdG90YWwgYmxvY2tpbmcgdGltZS5cbiAgICB3aW5kb3cuX19ORVhUX1AubWFwKChwKSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlZ2lzdGVyKHApLCAwKSlcbiAgfVxuICB3aW5kb3cuX19ORVhUX1AgPSBbXVxuICA7KHdpbmRvdy5fX05FWFRfUCBhcyBhbnkpLnB1c2ggPSByZWdpc3RlclxuXG4gIGhlYWRNYW5hZ2VyID0gaW5pdEhlYWRNYW5hZ2VyKClcbiAgaGVhZE1hbmFnZXIuZ2V0SXNTc3IgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHJvdXRlci5pc1NzclxuICB9XG5cbiAgYXBwRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfX25leHQnKVxuICByZXR1cm4geyBhc3NldFByZWZpeDogcHJlZml4IH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQXBwKEFwcDogQXBwQ29tcG9uZW50LCBhcHBQcm9wczogQXBwUHJvcHMpIHtcbiAgcmV0dXJuIDxBcHAgey4uLmFwcFByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBBcHBDb250YWluZXIoe1xuICBjaGlsZHJlbixcbn06IFJlYWN0LlByb3BzV2l0aENoaWxkcmVuPHt9Pik6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIC8vIENyZWF0ZSBhIG1lbW9pemVkIHZhbHVlIGZvciBuZXh0L25hdmlnYXRpb24gcm91dGVyIGNvbnRleHQuXG4gIGNvbnN0IGFkYXB0ZWRGb3JBcHBSb3V0ZXIgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWRhcHRGb3JBcHBSb3V0ZXJJbnN0YW5jZShyb3V0ZXIpXG4gIH0sIFtdKVxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXJcbiAgICAgIGZuPXsoZXJyb3IpID0+XG4gICAgICAgIC8vIFRPRE86IEZpeCBkaXNhYmxlZCBlc2xpbnQgcnVsZVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIHJlbmRlckVycm9yKHsgQXBwOiBDYWNoZWRBcHAsIGVycjogZXJyb3IgfSkuY2F0Y2goKGVycikgPT5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZW5kZXJpbmcgcGFnZTogJywgZXJyKVxuICAgICAgICApXG4gICAgICB9XG4gICAgPlxuICAgICAgPEFwcFJvdXRlckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2FkYXB0ZWRGb3JBcHBSb3V0ZXJ9PlxuICAgICAgICA8U2VhcmNoUGFyYW1zQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YWRhcHRGb3JTZWFyY2hQYXJhbXMocm91dGVyKX0+XG4gICAgICAgICAgPFBhdGhuYW1lQ29udGV4dFByb3ZpZGVyQWRhcHRlclxuICAgICAgICAgICAgcm91dGVyPXtyb3V0ZXJ9XG4gICAgICAgICAgICBpc0F1dG9FeHBvcnQ9e3NlbGYuX19ORVhUX0RBVEFfXy5hdXRvRXhwb3J0ID8/IGZhbHNlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxQYXRoUGFyYW1zQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17YWRhcHRGb3JQYXRoUGFyYW1zKHJvdXRlcil9PlxuICAgICAgICAgICAgICA8Um91dGVyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17bWFrZVB1YmxpY1JvdXRlckluc3RhbmNlKHJvdXRlcil9PlxuICAgICAgICAgICAgICAgIDxIZWFkTWFuYWdlckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2hlYWRNYW5hZ2VyfT5cbiAgICAgICAgICAgICAgICAgIDxJbWFnZUNvbmZpZ0NvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52XG4gICAgICAgICAgICAgICAgICAgICAgICAuX19ORVhUX0lNQUdFX09QVFMgYXMgYW55IGFzIEltYWdlQ29uZmlnQ29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICA8L0ltYWdlQ29uZmlnQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8L0hlYWRNYW5hZ2VyQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICAgICAgPC9Sb3V0ZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgPC9QYXRoUGFyYW1zQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICA8L1BhdGhuYW1lQ29udGV4dFByb3ZpZGVyQWRhcHRlcj5cbiAgICAgICAgPC9TZWFyY2hQYXJhbXNDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgPC9BcHBSb3V0ZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmNvbnN0IHdyYXBBcHAgPVxuICAoQXBwOiBBcHBDb21wb25lbnQpID0+XG4gICh3cmFwcGVkQXBwUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBKU1guRWxlbWVudCA9PiB7XG4gICAgY29uc3QgYXBwUHJvcHM6IEFwcFByb3BzID0ge1xuICAgICAgLi4ud3JhcHBlZEFwcFByb3BzLFxuICAgICAgQ29tcG9uZW50OiBDYWNoZWRDb21wb25lbnQsXG4gICAgICBlcnI6IGluaXRpYWxEYXRhLmVycixcbiAgICAgIHJvdXRlcixcbiAgICB9XG4gICAgcmV0dXJuIDxBcHBDb250YWluZXI+e3JlbmRlckFwcChBcHAsIGFwcFByb3BzKX08L0FwcENvbnRhaW5lcj5cbiAgfVxuXG4vLyBUaGlzIG1ldGhvZCBoYW5kbGVzIGFsbCBydW50aW1lIGFuZCBkZWJ1ZyBlcnJvcnMuXG4vLyA0MDQgYW5kIDUwMCBlcnJvcnMgYXJlIHNwZWNpYWwga2luZCBvZiBlcnJvcnNcbi8vIGFuZCB0aGV5IGFyZSBzdGlsbCBoYW5kbGUgdmlhIHRoZSBtYWluIHJlbmRlciBtZXRob2QuXG5mdW5jdGlvbiByZW5kZXJFcnJvcihyZW5kZXJFcnJvclByb3BzOiBSZW5kZXJFcnJvclByb3BzKTogUHJvbWlzZTxhbnk+IHtcbiAgbGV0IHsgQXBwLCBlcnIgfSA9IHJlbmRlckVycm9yUHJvcHNcblxuICAvLyBJbiBkZXZlbG9wbWVudCBydW50aW1lIGVycm9ycyBhcmUgY2F1Z2h0IGJ5IG91ciBvdmVybGF5XG4gIC8vIEluIHByb2R1Y3Rpb24gd2UgY2F0Y2ggcnVudGltZSBlcnJvcnMgdXNpbmcgY29tcG9uZW50RGlkQ2F0Y2ggd2hpY2ggd2lsbCB0cmlnZ2VyIHJlbmRlckVycm9yXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gQSBOZXh0LmpzIHJlbmRlcmluZyBydW50aW1lIGVycm9yIGlzIGFsd2F5cyB1bnJlY292ZXJhYmxlXG4gICAgLy8gRklYTUU6IGxldCdzIG1ha2UgdGhpcyByZWNvdmVyYWJsZSAoZXJyb3IgaW4gR0lQIGNsaWVudC10cmFuc2l0aW9uKVxuICAgIGRldkNsaWVudC5vblVucmVjb3ZlcmFibGVFcnJvcigpXG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbmRlciBhbiBlbXB0eSA8QXBwPiBzbyB0aGF0IHRoZSBgPFJlYWN0RGV2T3ZlcmxheT5gIGNhblxuICAgIC8vIHJlbmRlciBpdHNlbGYuXG4gICAgLy8gVE9ETzogRml4IGRpc2FibGVkIGVzbGludCBydWxlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgIHJldHVybiBkb1JlbmRlcih7XG4gICAgICBBcHA6ICgpID0+IG51bGwsXG4gICAgICBwcm9wczoge30sXG4gICAgICBDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICBzdHlsZVNoZWV0czogW10sXG4gICAgfSlcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBsb2cgdGhlIGVycm9yIHRvIHRoZSBjb25zb2xlLCBvdGhlcndpc2UgdXNlcnMgY2FuJ3QgdHJhY2sgZG93biBpc3N1ZXMuXG4gIGNvbnNvbGUuZXJyb3IoZXJyKVxuICBjb25zb2xlLmVycm9yKFxuICAgIGBBIGNsaWVudC1zaWRlIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQsIHNlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2NsaWVudC1zaWRlLWV4Y2VwdGlvbi1vY2N1cnJlZGBcbiAgKVxuXG4gIHJldHVybiBwYWdlTG9hZGVyXG4gICAgLmxvYWRQYWdlKCcvX2Vycm9yJylcbiAgICAudGhlbigoeyBwYWdlOiBFcnJvckNvbXBvbmVudCwgc3R5bGVTaGVldHMgfSkgPT4ge1xuICAgICAgcmV0dXJuIGxhc3RBcHBQcm9wcz8uQ29tcG9uZW50ID09PSBFcnJvckNvbXBvbmVudFxuICAgICAgICA/IGltcG9ydCgnLi4vcGFnZXMvX2Vycm9yJylcbiAgICAgICAgICAgIC50aGVuKChlcnJvck1vZHVsZSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaW1wb3J0KCcuLi9wYWdlcy9fYXBwJykudGhlbigoYXBwTW9kdWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgQXBwID0gYXBwTW9kdWxlLmRlZmF1bHQgYXMgYW55IGFzIEFwcENvbXBvbmVudFxuICAgICAgICAgICAgICAgIHJlbmRlckVycm9yUHJvcHMuQXBwID0gQXBwXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTW9kdWxlXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKG0pID0+ICh7XG4gICAgICAgICAgICAgIEVycm9yQ29tcG9uZW50OiBtLmRlZmF1bHQgYXMgUmVhY3QuQ29tcG9uZW50VHlwZTx7fT4sXG4gICAgICAgICAgICAgIHN0eWxlU2hlZXRzOiBbXSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICA6IHsgRXJyb3JDb21wb25lbnQsIHN0eWxlU2hlZXRzIH1cbiAgICB9KVxuICAgIC50aGVuKCh7IEVycm9yQ29tcG9uZW50LCBzdHlsZVNoZWV0cyB9KSA9PiB7XG4gICAgICAvLyBJbiBwcm9kdWN0aW9uIHdlIGRvIGEgbm9ybWFsIHJlbmRlciB3aXRoIHRoZSBgRXJyb3JDb21wb25lbnRgIGFzIGNvbXBvbmVudC5cbiAgICAgIC8vIElmIHdlJ3ZlIGdvdHRlbiBoZXJlIHVwb24gaW5pdGlhbCByZW5kZXIsIHdlIGNhbiB1c2UgdGhlIHByb3BzIGZyb20gdGhlIHNlcnZlci5cbiAgICAgIC8vIE90aGVyd2lzZSwgd2UgbmVlZCB0byBjYWxsIGBnZXRJbml0aWFsUHJvcHNgIG9uIGBBcHBgIGJlZm9yZSBtb3VudGluZy5cbiAgICAgIGNvbnN0IEFwcFRyZWUgPSB3cmFwQXBwKEFwcClcbiAgICAgIGNvbnN0IGFwcEN0eCA9IHtcbiAgICAgICAgQ29tcG9uZW50OiBFcnJvckNvbXBvbmVudCxcbiAgICAgICAgQXBwVHJlZSxcbiAgICAgICAgcm91dGVyLFxuICAgICAgICBjdHg6IHtcbiAgICAgICAgICBlcnIsXG4gICAgICAgICAgcGF0aG5hbWU6IGluaXRpYWxEYXRhLnBhZ2UsXG4gICAgICAgICAgcXVlcnk6IGluaXRpYWxEYXRhLnF1ZXJ5LFxuICAgICAgICAgIGFzUGF0aCxcbiAgICAgICAgICBBcHBUcmVlLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgcmVuZGVyRXJyb3JQcm9wcy5wcm9wcz8uZXJyXG4gICAgICAgICAgPyByZW5kZXJFcnJvclByb3BzLnByb3BzXG4gICAgICAgICAgOiBsb2FkR2V0SW5pdGlhbFByb3BzKEFwcCwgYXBwQ3R4KVxuICAgICAgKS50aGVuKChpbml0UHJvcHMpID0+XG4gICAgICAgIC8vIFRPRE86IEZpeCBkaXNhYmxlZCBlc2xpbnQgcnVsZVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGRvUmVuZGVyKHtcbiAgICAgICAgICAuLi5yZW5kZXJFcnJvclByb3BzLFxuICAgICAgICAgIGVycixcbiAgICAgICAgICBDb21wb25lbnQ6IEVycm9yQ29tcG9uZW50LFxuICAgICAgICAgIHN0eWxlU2hlZXRzLFxuICAgICAgICAgIHByb3BzOiBpbml0UHJvcHMsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSlcbn1cblxuLy8gRHVtbXkgY29tcG9uZW50IHRoYXQgd2UgcmVuZGVyIGFzIGEgY2hpbGQgb2YgUm9vdCBzbyB0aGF0IHdlIGNhblxuLy8gdG9nZ2xlIHRoZSBjb3JyZWN0IHN0eWxlcyBiZWZvcmUgdGhlIHBhZ2UgaXMgcmVuZGVyZWQuXG5mdW5jdGlvbiBIZWFkKHsgY2FsbGJhY2sgfTogeyBjYWxsYmFjazogKCkgPT4gdm9pZCB9KTogbnVsbCB7XG4gIC8vIFdlIHVzZSBgdXNlTGF5b3V0RWZmZWN0YCB0byBndWFyYW50ZWUgdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkXG4gIC8vIGFzIHNvb24gYXMgUmVhY3QgZmx1c2hlcyB0aGUgdXBkYXRlLlxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4gY2FsbGJhY2soKSwgW2NhbGxiYWNrXSlcbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgcGVyZm9ybWFuY2VNYXJrcyA9IHtcbiAgbmF2aWdhdGlvblN0YXJ0OiAnbmF2aWdhdGlvblN0YXJ0JyxcbiAgYmVmb3JlUmVuZGVyOiAnYmVmb3JlUmVuZGVyJyxcbiAgYWZ0ZXJSZW5kZXI6ICdhZnRlclJlbmRlcicsXG4gIGFmdGVySHlkcmF0ZTogJ2FmdGVySHlkcmF0ZScsXG4gIHJvdXRlQ2hhbmdlOiAncm91dGVDaGFuZ2UnLFxufSBhcyBjb25zdFxuXG5jb25zdCBwZXJmb3JtYW5jZU1lYXN1cmVzID0ge1xuICBoeWRyYXRpb246ICdOZXh0LmpzLWh5ZHJhdGlvbicsXG4gIGJlZm9yZUh5ZHJhdGlvbjogJ05leHQuanMtYmVmb3JlLWh5ZHJhdGlvbicsXG4gIHJvdXRlQ2hhbmdlVG9SZW5kZXI6ICdOZXh0LmpzLXJvdXRlLWNoYW5nZS10by1yZW5kZXInLFxuICByZW5kZXI6ICdOZXh0LmpzLXJlbmRlcicsXG59IGFzIGNvbnN0XG5cbmxldCByZWFjdFJvb3Q6IGFueSA9IG51bGxcbi8vIE9uIGluaXRpYWwgcmVuZGVyIGEgaHlkcmF0ZSBzaG91bGQgYWx3YXlzIGhhcHBlblxubGV0IHNob3VsZEh5ZHJhdGU6IGJvb2xlYW4gPSB0cnVlXG5cbmZ1bmN0aW9uIGNsZWFyTWFya3MoKTogdm9pZCB7XG4gIDtbXG4gICAgcGVyZm9ybWFuY2VNYXJrcy5iZWZvcmVSZW5kZXIsXG4gICAgcGVyZm9ybWFuY2VNYXJrcy5hZnRlckh5ZHJhdGUsXG4gICAgcGVyZm9ybWFuY2VNYXJrcy5hZnRlclJlbmRlcixcbiAgICBwZXJmb3JtYW5jZU1hcmtzLnJvdXRlQ2hhbmdlLFxuICBdLmZvckVhY2goKG1hcmspID0+IHBlcmZvcm1hbmNlLmNsZWFyTWFya3MobWFyaykpXG59XG5cbmZ1bmN0aW9uIG1hcmtIeWRyYXRlQ29tcGxldGUoKTogdm9pZCB7XG4gIGlmICghU1QpIHJldHVyblxuXG4gIHBlcmZvcm1hbmNlLm1hcmsocGVyZm9ybWFuY2VNYXJrcy5hZnRlckh5ZHJhdGUpIC8vIG1hcmsgZW5kIG9mIGh5ZHJhdGlvblxuXG4gIGNvbnN0IGhhc0JlZm9yZVJlbmRlck1hcmsgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKFxuICAgIHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyLFxuICAgICdtYXJrJ1xuICApLmxlbmd0aFxuICBpZiAoaGFzQmVmb3JlUmVuZGVyTWFyaykge1xuICAgIGNvbnN0IGJlZm9yZUh5ZHJhdGlvbk1lYXN1cmUgPSBwZXJmb3JtYW5jZS5tZWFzdXJlKFxuICAgICAgcGVyZm9ybWFuY2VNZWFzdXJlcy5iZWZvcmVIeWRyYXRpb24sXG4gICAgICBwZXJmb3JtYW5jZU1hcmtzLm5hdmlnYXRpb25TdGFydCxcbiAgICAgIHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyXG4gICAgKVxuXG4gICAgY29uc3QgaHlkcmF0aW9uTWVhc3VyZSA9IHBlcmZvcm1hbmNlLm1lYXN1cmUoXG4gICAgICBwZXJmb3JtYW5jZU1lYXN1cmVzLmh5ZHJhdGlvbixcbiAgICAgIHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyLFxuICAgICAgcGVyZm9ybWFuY2VNYXJrcy5hZnRlckh5ZHJhdGVcbiAgICApXG5cbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJlxuICAgICAgLy8gT2xkIHZlcnNpb25zIG9mIFNhZmFyaSBkb24ndCByZXR1cm4gYFBlcmZvcm1hbmNlTWVhc3VyZWBzIGZyb20gYHBlcmZvcm1hbmNlLm1lYXN1cmUoKWBcbiAgICAgIGJlZm9yZUh5ZHJhdGlvbk1lYXN1cmUgJiZcbiAgICAgIGh5ZHJhdGlvbk1lYXN1cmVcbiAgICApIHtcbiAgICAgIHRyYWNlclxuICAgICAgICAuc3RhcnRTcGFuKCduYXZpZ2F0aW9uLXRvLWh5ZHJhdGlvbicsIHtcbiAgICAgICAgICBzdGFydFRpbWU6IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBiZWZvcmVIeWRyYXRpb25NZWFzdXJlLnN0YXJ0VGltZSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgICBxdWVyeTogbG9jYXRpb24uc2VhcmNoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC5lbmQoXG4gICAgICAgICAgcGVyZm9ybWFuY2UudGltZU9yaWdpbiArXG4gICAgICAgICAgICBoeWRyYXRpb25NZWFzdXJlLnN0YXJ0VGltZSArXG4gICAgICAgICAgICBoeWRyYXRpb25NZWFzdXJlLmR1cmF0aW9uXG4gICAgICAgIClcbiAgICB9XG4gIH1cblxuICBpZiAob25QZXJmRW50cnkpIHtcbiAgICBwZXJmb3JtYW5jZVxuICAgICAgLmdldEVudHJpZXNCeU5hbWUocGVyZm9ybWFuY2VNZWFzdXJlcy5oeWRyYXRpb24pXG4gICAgICAuZm9yRWFjaChvblBlcmZFbnRyeSlcbiAgfVxuICBjbGVhck1hcmtzKClcbn1cblxuZnVuY3Rpb24gbWFya1JlbmRlckNvbXBsZXRlKCk6IHZvaWQge1xuICBpZiAoIVNUKSByZXR1cm5cblxuICBwZXJmb3JtYW5jZS5tYXJrKHBlcmZvcm1hbmNlTWFya3MuYWZ0ZXJSZW5kZXIpIC8vIG1hcmsgZW5kIG9mIHJlbmRlclxuICBjb25zdCBuYXZTdGFydEVudHJpZXM6IFBlcmZvcm1hbmNlRW50cnlMaXN0ID0gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShcbiAgICBwZXJmb3JtYW5jZU1hcmtzLnJvdXRlQ2hhbmdlLFxuICAgICdtYXJrJ1xuICApXG5cbiAgaWYgKCFuYXZTdGFydEVudHJpZXMubGVuZ3RoKSByZXR1cm5cblxuICBjb25zdCBoYXNCZWZvcmVSZW5kZXJNYXJrID0gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShcbiAgICBwZXJmb3JtYW5jZU1hcmtzLmJlZm9yZVJlbmRlcixcbiAgICAnbWFyaydcbiAgKS5sZW5ndGhcblxuICBpZiAoaGFzQmVmb3JlUmVuZGVyTWFyaykge1xuICAgIHBlcmZvcm1hbmNlLm1lYXN1cmUoXG4gICAgICBwZXJmb3JtYW5jZU1lYXN1cmVzLnJvdXRlQ2hhbmdlVG9SZW5kZXIsXG4gICAgICBuYXZTdGFydEVudHJpZXNbMF0ubmFtZSxcbiAgICAgIHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyXG4gICAgKVxuICAgIHBlcmZvcm1hbmNlLm1lYXN1cmUoXG4gICAgICBwZXJmb3JtYW5jZU1lYXN1cmVzLnJlbmRlcixcbiAgICAgIHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyLFxuICAgICAgcGVyZm9ybWFuY2VNYXJrcy5hZnRlclJlbmRlclxuICAgIClcbiAgICBpZiAob25QZXJmRW50cnkpIHtcbiAgICAgIHBlcmZvcm1hbmNlXG4gICAgICAgIC5nZXRFbnRyaWVzQnlOYW1lKHBlcmZvcm1hbmNlTWVhc3VyZXMucmVuZGVyKVxuICAgICAgICAuZm9yRWFjaChvblBlcmZFbnRyeSlcbiAgICAgIHBlcmZvcm1hbmNlXG4gICAgICAgIC5nZXRFbnRyaWVzQnlOYW1lKHBlcmZvcm1hbmNlTWVhc3VyZXMucm91dGVDaGFuZ2VUb1JlbmRlcilcbiAgICAgICAgLmZvckVhY2gob25QZXJmRW50cnkpXG4gICAgfVxuICB9XG5cbiAgY2xlYXJNYXJrcygpXG4gIDtbXG4gICAgcGVyZm9ybWFuY2VNZWFzdXJlcy5yb3V0ZUNoYW5nZVRvUmVuZGVyLFxuICAgIHBlcmZvcm1hbmNlTWVhc3VyZXMucmVuZGVyLFxuICBdLmZvckVhY2goKG1lYXN1cmUpID0+IHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMobWVhc3VyZSkpXG59XG5cbmZ1bmN0aW9uIHJlbmRlclJlYWN0RWxlbWVudChcbiAgZG9tRWw6IEhUTUxFbGVtZW50LFxuICBmbjogKGNiOiAoKSA9PiB2b2lkKSA9PiBKU1guRWxlbWVudFxuKTogdm9pZCB7XG4gIC8vIG1hcmsgc3RhcnQgb2YgaHlkcmF0ZS9yZW5kZXJcbiAgaWYgKFNUKSB7XG4gICAgcGVyZm9ybWFuY2UubWFyayhwZXJmb3JtYW5jZU1hcmtzLmJlZm9yZVJlbmRlcilcbiAgfVxuXG4gIGNvbnN0IHJlYWN0RWwgPSBmbihzaG91bGRIeWRyYXRlID8gbWFya0h5ZHJhdGVDb21wbGV0ZSA6IG1hcmtSZW5kZXJDb21wbGV0ZSlcbiAgaWYgKCFyZWFjdFJvb3QpIHtcbiAgICAvLyBVbmxpa2Ugd2l0aCBjcmVhdGVSb290LCB5b3UgZG9uJ3QgbmVlZCBhIHNlcGFyYXRlIHJvb3QucmVuZGVyKCkgY2FsbCBoZXJlXG4gICAgcmVhY3RSb290ID0gUmVhY3RET00uaHlkcmF0ZVJvb3QoZG9tRWwsIHJlYWN0RWwsIHtcbiAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICB9KVxuICAgIC8vIFRPRE86IFJlbW92ZSBzaG91bGRIeWRyYXRlIHZhcmlhYmxlIHdoZW4gUmVhY3QgMTggaXMgc3RhYmxlIGFzIGl0IGNhbiBkZXBlbmQgb24gYHJlYWN0Um9vdGAgZXhpc3RpbmdcbiAgICBzaG91bGRIeWRyYXRlID0gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdGFydFRyYW5zaXRpb24gPSAoUmVhY3QgYXMgYW55KS5zdGFydFRyYW5zaXRpb25cbiAgICBzdGFydFRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgcmVhY3RSb290LnJlbmRlcihyZWFjdEVsKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gUm9vdCh7XG4gIGNhbGxiYWNrcyxcbiAgY2hpbGRyZW4sXG59OiBSZWFjdC5Qcm9wc1dpdGhDaGlsZHJlbjx7XG4gIGNhbGxiYWNrczogQXJyYXk8KCkgPT4gdm9pZD5cbn0+KTogUmVhY3QuUmVhY3RFbGVtZW50IHtcbiAgLy8gV2UgdXNlIGB1c2VMYXlvdXRFZmZlY3RgIHRvIGd1YXJhbnRlZSB0aGUgY2FsbGJhY2tzIGFyZSBleGVjdXRlZFxuICAvLyBhcyBzb29uIGFzIFJlYWN0IGZsdXNoZXMgdGhlIHVwZGF0ZVxuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoXG4gICAgKCkgPT4gY2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiBjYWxsYmFjaygpKSxcbiAgICBbY2FsbGJhY2tzXVxuICApXG5cbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgd2luZG93Ll9fTkVYVF9IWURSQVRFRCA9IHRydWVcbiAgICAgIHdpbmRvdy5fX05FWFRfSFlEUkFURURfQVQgPSBwZXJmb3JtYW5jZS5ub3coKVxuXG4gICAgICBpZiAod2luZG93Ll9fTkVYVF9IWURSQVRFRF9DQikge1xuICAgICAgICB3aW5kb3cuX19ORVhUX0hZRFJBVEVEX0NCKClcbiAgICAgIH1cbiAgICB9LCBbXSlcbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcbn1cblxuZnVuY3Rpb24gZG9SZW5kZXIoaW5wdXQ6IFJlbmRlclJvdXRlSW5mbyk6IFByb21pc2U8YW55PiB7XG4gIGxldCB7IEFwcCwgQ29tcG9uZW50LCBwcm9wcywgZXJyIH06IFJlbmRlclJvdXRlSW5mbyA9IGlucHV0XG4gIGxldCBzdHlsZVNoZWV0czogU3R5bGVTaGVldFR1cGxlW10gfCB1bmRlZmluZWQgPVxuICAgICdpbml0aWFsJyBpbiBpbnB1dCA/IHVuZGVmaW5lZCA6IGlucHV0LnN0eWxlU2hlZXRzXG4gIENvbXBvbmVudCA9IENvbXBvbmVudCB8fCBsYXN0QXBwUHJvcHMuQ29tcG9uZW50XG4gIHByb3BzID0gcHJvcHMgfHwgbGFzdEFwcFByb3BzLnByb3BzXG5cbiAgY29uc3QgYXBwUHJvcHM6IEFwcFByb3BzID0ge1xuICAgIC4uLnByb3BzLFxuICAgIENvbXBvbmVudCxcbiAgICBlcnIsXG4gICAgcm91dGVyLFxuICB9XG4gIC8vIGxhc3RBcHBQcm9wcyBoYXMgdG8gYmUgc2V0IGJlZm9yZSBSZWFjdERvbS5yZW5kZXIgdG8gYWNjb3VudCBmb3IgUmVhY3REb20gdGhyb3dpbmcgYW4gZXJyb3IuXG4gIGxhc3RBcHBQcm9wcyA9IGFwcFByb3BzXG5cbiAgbGV0IGNhbmNlbGVkOiBib29sZWFuID0gZmFsc2VcbiAgbGV0IHJlc29sdmVQcm9taXNlOiAoKSA9PiB2b2lkXG4gIGNvbnN0IHJlbmRlclByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGxhc3RSZW5kZXJSZWplY3QpIHtcbiAgICAgIGxhc3RSZW5kZXJSZWplY3QoKVxuICAgIH1cbiAgICByZXNvbHZlUHJvbWlzZSA9ICgpID0+IHtcbiAgICAgIGxhc3RSZW5kZXJSZWplY3QgPSBudWxsXG4gICAgICByZXNvbHZlKClcbiAgICB9XG4gICAgbGFzdFJlbmRlclJlamVjdCA9ICgpID0+IHtcbiAgICAgIGNhbmNlbGVkID0gdHJ1ZVxuICAgICAgbGFzdFJlbmRlclJlamVjdCA9IG51bGxcblxuICAgICAgY29uc3QgZXJyb3I6IGFueSA9IG5ldyBFcnJvcignQ2FuY2VsIHJlbmRlcmluZyByb3V0ZScpXG4gICAgICBlcnJvci5jYW5jZWxsZWQgPSB0cnVlXG4gICAgICByZWplY3QoZXJyb3IpXG4gICAgfVxuICB9KVxuXG4gIC8vIFRoaXMgZnVuY3Rpb24gaGFzIGEgcmV0dXJuIHR5cGUgdG8gZW5zdXJlIGl0IGRvZXNuJ3Qgc3RhcnQgcmV0dXJuaW5nIGFcbiAgLy8gUHJvbWlzZS4gSXQgc2hvdWxkIHJlbWFpbiBzeW5jaHJvbm91cy5cbiAgZnVuY3Rpb24gb25TdGFydCgpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICAhc3R5bGVTaGVldHMgfHxcbiAgICAgIC8vIFdlIHVzZSBgc3R5bGUtbG9hZGVyYCBpbiBkZXZlbG9wbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZ1xuICAgICAgLy8gdW5sZXNzIHdlJ3JlIGluIHByb2R1Y3Rpb246XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U3R5bGVUYWdzOiBIVE1MU3R5bGVFbGVtZW50W10gPSBsb29zZVRvQXJyYXk8SFRNTFN0eWxlRWxlbWVudD4oXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZVtkYXRhLW4taHJlZl0nKVxuICAgIClcbiAgICBjb25zdCBjdXJyZW50SHJlZnM6IFNldDxzdHJpbmcgfCBudWxsPiA9IG5ldyBTZXQoXG4gICAgICBjdXJyZW50U3R5bGVUYWdzLm1hcCgodGFnKSA9PiB0YWcuZ2V0QXR0cmlidXRlKCdkYXRhLW4taHJlZicpKVxuICAgIClcblxuICAgIGNvbnN0IG5vc2NyaXB0OiBFbGVtZW50IHwgbnVsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnbm9zY3JpcHRbZGF0YS1uLWNzc10nXG4gICAgKVxuICAgIGNvbnN0IG5vbmNlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID1cbiAgICAgIG5vc2NyaXB0Py5nZXRBdHRyaWJ1dGUoJ2RhdGEtbi1jc3MnKVxuXG4gICAgc3R5bGVTaGVldHMuZm9yRWFjaCgoeyBocmVmLCB0ZXh0IH06IHsgaHJlZjogc3RyaW5nOyB0ZXh0OiBhbnkgfSkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50SHJlZnMuaGFzKGhyZWYpKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlVGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxuICAgICAgICBzdHlsZVRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtbi1ocmVmJywgaHJlZilcbiAgICAgICAgc3R5bGVUYWcuc2V0QXR0cmlidXRlKCdtZWRpYScsICd4JylcblxuICAgICAgICBpZiAobm9uY2UpIHtcbiAgICAgICAgICBzdHlsZVRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgbm9uY2UpXG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlVGFnKVxuICAgICAgICBzdHlsZVRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBvbkhlYWRDb21taXQoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgLy8gVHVyYm9wYWNrIGhhcyBpdCdzIG93biBjc3MgaW5qZWN0aW9uIGhhbmRsaW5nLCB0aGlzIGNvZGUgZW5kcyB1cCByZW1vdmluZyB0aGUgQ1NTLlxuICAgICAgIXByb2Nlc3MuZW52LlRVUkJPUEFDSyAmJlxuICAgICAgLy8gV2UgdXNlIGBzdHlsZS1sb2FkZXJgIGluIGRldmVsb3BtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nXG4gICAgICAvLyB1bmxlc3Mgd2UncmUgaW4gcHJvZHVjdGlvbjpcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgJiZcbiAgICAgIC8vIFdlIGNhbiBza2lwIHRoaXMgZHVyaW5nIGh5ZHJhdGlvbi4gUnVubmluZyBpdCB3b250IGNhdXNlIGFueSBoYXJtLCBidXRcbiAgICAgIC8vIHdlIG1heSBhcyB3ZWxsIHNhdmUgdGhlIENQVSBjeWNsZXM6XG4gICAgICBzdHlsZVNoZWV0cyAmJlxuICAgICAgLy8gRW5zdXJlIHRoaXMgcmVuZGVyIHdhcyBub3QgY2FuY2VsZWRcbiAgICAgICFjYW5jZWxlZFxuICAgICkge1xuICAgICAgY29uc3QgZGVzaXJlZEhyZWZzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoc3R5bGVTaGVldHMubWFwKChzKSA9PiBzLmhyZWYpKVxuICAgICAgY29uc3QgY3VycmVudFN0eWxlVGFnczogSFRNTFN0eWxlRWxlbWVudFtdID1cbiAgICAgICAgbG9vc2VUb0FycmF5PEhUTUxTdHlsZUVsZW1lbnQ+KFxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3N0eWxlW2RhdGEtbi1ocmVmXScpXG4gICAgICAgIClcbiAgICAgIGNvbnN0IGN1cnJlbnRIcmVmczogc3RyaW5nW10gPSBjdXJyZW50U3R5bGVUYWdzLm1hcChcbiAgICAgICAgKHRhZykgPT4gdGFnLmdldEF0dHJpYnV0ZSgnZGF0YS1uLWhyZWYnKSFcbiAgICAgIClcblxuICAgICAgLy8gVG9nZ2xlIGA8c3R5bGU+YCB0YWdzIG9uIG9yIG9mZiBkZXBlbmRpbmcgb24gaWYgdGhleSdyZSBuZWVkZWQ6XG4gICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBjdXJyZW50SHJlZnMubGVuZ3RoOyArK2lkeCkge1xuICAgICAgICBpZiAoZGVzaXJlZEhyZWZzLmhhcyhjdXJyZW50SHJlZnNbaWR4XSkpIHtcbiAgICAgICAgICBjdXJyZW50U3R5bGVUYWdzW2lkeF0ucmVtb3ZlQXR0cmlidXRlKCdtZWRpYScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudFN0eWxlVGFnc1tpZHhdLnNldEF0dHJpYnV0ZSgnbWVkaWEnLCAneCcpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVvcmRlciBzdHlsZXMgaW50byBpbnRlbmRlZCBvcmRlcjpcbiAgICAgIGxldCByZWZlcmVuY2VOb2RlOiBFbGVtZW50IHwgbnVsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICdub3NjcmlwdFtkYXRhLW4tY3NzXSdcbiAgICAgIClcbiAgICAgIGlmIChcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgYW4gaW52YXJpYW50OlxuICAgICAgICByZWZlcmVuY2VOb2RlXG4gICAgICApIHtcbiAgICAgICAgc3R5bGVTaGVldHMuZm9yRWFjaCgoeyBocmVmIH06IHsgaHJlZjogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRUYWc6IEVsZW1lbnQgfCBudWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIGBzdHlsZVtkYXRhLW4taHJlZj1cIiR7aHJlZn1cIl1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGFuIGludmFyaWFudDpcbiAgICAgICAgICAgIHRhcmdldFRhZ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmVmZXJlbmNlTm9kZSEucGFyZW50Tm9kZSEuaW5zZXJ0QmVmb3JlKFxuICAgICAgICAgICAgICB0YXJnZXRUYWcsXG4gICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUhLm5leHRTaWJsaW5nXG4gICAgICAgICAgICApXG4gICAgICAgICAgICByZWZlcmVuY2VOb2RlID0gdGFyZ2V0VGFnXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBGaW5hbGx5LCBjbGVhbiB1cCBzZXJ2ZXIgcmVuZGVyZWQgc3R5bGVzaGVldHM6XG4gICAgICBsb29zZVRvQXJyYXk8SFRNTExpbmtFbGVtZW50PihcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tkYXRhLW4tcF0nKVxuICAgICAgKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICBlbC5wYXJlbnROb2RlIS5yZW1vdmVDaGlsZChlbClcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGlucHV0LnNjcm9sbCkge1xuICAgICAgY29uc3QgeyB4LCB5IH0gPSBpbnB1dC5zY3JvbGxcbiAgICAgIGRpc2FibGVTbW9vdGhTY3JvbGxEdXJpbmdSb3V0ZVRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeCwgeSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Sb290Q29tbWl0KCk6IHZvaWQge1xuICAgIHJlc29sdmVQcm9taXNlKClcbiAgfVxuXG4gIG9uU3RhcnQoKVxuXG4gIGNvbnN0IGVsZW06IEpTWC5FbGVtZW50ID0gKFxuICAgIDw+XG4gICAgICA8SGVhZCBjYWxsYmFjaz17b25IZWFkQ29tbWl0fSAvPlxuICAgICAgPEFwcENvbnRhaW5lcj5cbiAgICAgICAge3JlbmRlckFwcChBcHAsIGFwcFByb3BzKX1cbiAgICAgICAgPFBvcnRhbCB0eXBlPVwibmV4dC1yb3V0ZS1hbm5vdW5jZXJcIj5cbiAgICAgICAgICA8Um91dGVBbm5vdW5jZXIgLz5cbiAgICAgICAgPC9Qb3J0YWw+XG4gICAgICA8L0FwcENvbnRhaW5lcj5cbiAgICA8Lz5cbiAgKVxuXG4gIC8vIFdlIGNhdGNoIHJ1bnRpbWUgZXJyb3JzIHVzaW5nIGNvbXBvbmVudERpZENhdGNoIHdoaWNoIHdpbGwgdHJpZ2dlciByZW5kZXJFcnJvclxuICByZW5kZXJSZWFjdEVsZW1lbnQoYXBwRWxlbWVudCEsIChjYWxsYmFjaykgPT4gKFxuICAgIDxSb290IGNhbGxiYWNrcz17W2NhbGxiYWNrLCBvblJvb3RDb21taXRdfT5cbiAgICAgIHtwcm9jZXNzLmVudi5fX05FWFRfU1RSSUNUX01PREUgPyAoXG4gICAgICAgIDxSZWFjdC5TdHJpY3RNb2RlPntlbGVtfTwvUmVhY3QuU3RyaWN0TW9kZT5cbiAgICAgICkgOiAoXG4gICAgICAgIGVsZW1cbiAgICAgICl9XG4gICAgPC9Sb290PlxuICApKVxuXG4gIHJldHVybiByZW5kZXJQcm9taXNlXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbmRlcihyZW5kZXJpbmdQcm9wczogUmVuZGVyUm91dGVJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIGlmIGFuIGVycm9yIG9jY3VycyBpbiBhIHNlcnZlci1zaWRlIHBhZ2UgKGUuZy4gaW4gZ2V0SW5pdGlhbFByb3BzKSxcbiAgLy8gc2tpcCByZS1yZW5kZXJpbmcgdGhlIGVycm9yIHBhZ2UgY2xpZW50LXNpZGUgYXMgZGF0YS1mZXRjaGluZyBvcGVyYXRpb25zXG4gIC8vIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gZG9uZSBvbiB0aGUgc2VydmVyIGFuZCBORVhUX0RBVEEgY29udGFpbnMgdGhlIGNvcnJlY3RcbiAgLy8gZGF0YSBmb3Igc3RyYWlnaHQtZm9yd2FyZCBoeWRyYXRpb24gb2YgdGhlIGVycm9yIHBhZ2VcbiAgaWYgKFxuICAgIHJlbmRlcmluZ1Byb3BzLmVyciAmJlxuICAgIC8vIHJlbmRlcmluZ1Byb3BzLkNvbXBvbmVudCBtaWdodCBiZSB1bmRlZmluZWQgaWYgdGhlcmUgaXMgYSB0b3AvbW9kdWxlLWxldmVsIGVycm9yXG4gICAgKHR5cGVvZiByZW5kZXJpbmdQcm9wcy5Db21wb25lbnQgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAhcmVuZGVyaW5nUHJvcHMuaXNIeWRyYXRlUGFzcylcbiAgKSB7XG4gICAgYXdhaXQgcmVuZGVyRXJyb3IocmVuZGVyaW5nUHJvcHMpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGRvUmVuZGVyKHJlbmRlcmluZ1Byb3BzKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zdCByZW5kZXJFcnIgPSBnZXRQcm9wZXJFcnJvcihlcnIpXG4gICAgLy8gYnViYmxlIHVwIGNhbmNlbGF0aW9uIGVycm9yc1xuICAgIGlmICgocmVuZGVyRXJyIGFzIEVycm9yICYgeyBjYW5jZWxsZWQ/OiBib29sZWFuIH0pLmNhbmNlbGxlZCkge1xuICAgICAgdGhyb3cgcmVuZGVyRXJyXG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAvLyBFbnN1cmUgdGhpcyBlcnJvciBpcyBkaXNwbGF5ZWQgaW4gdGhlIG92ZXJsYXkgaW4gZGV2ZWxvcG1lbnRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aHJvdyByZW5kZXJFcnJcbiAgICAgIH0pXG4gICAgfVxuICAgIGF3YWl0IHJlbmRlckVycm9yKHsgLi4ucmVuZGVyaW5nUHJvcHMsIGVycjogcmVuZGVyRXJyIH0pXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGUob3B0cz86IHsgYmVmb3JlUmVuZGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPiB9KSB7XG4gIGxldCBpbml0aWFsRXJyID0gaW5pdGlhbERhdGEuZXJyXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhcHBFbnRyeXBvaW50ID0gYXdhaXQgcGFnZUxvYWRlci5yb3V0ZUxvYWRlci53aGVuRW50cnlwb2ludCgnL19hcHAnKVxuICAgIGlmICgnZXJyb3InIGluIGFwcEVudHJ5cG9pbnQpIHtcbiAgICAgIHRocm93IGFwcEVudHJ5cG9pbnQuZXJyb3JcbiAgICB9XG5cbiAgICBjb25zdCB7IGNvbXBvbmVudDogYXBwLCBleHBvcnRzOiBtb2QgfSA9IGFwcEVudHJ5cG9pbnRcbiAgICBDYWNoZWRBcHAgPSBhcHAgYXMgQXBwQ29tcG9uZW50XG4gICAgaWYgKG1vZCAmJiBtb2QucmVwb3J0V2ViVml0YWxzKSB7XG4gICAgICBvblBlcmZFbnRyeSA9ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgZW50cnlUeXBlLFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICBhdHRyaWJ1dGlvbixcbiAgICAgIH06IGFueSk6IHZvaWQgPT4ge1xuICAgICAgICAvLyBDb21iaW5lcyB0aW1lc3RhbXAgd2l0aCByYW5kb20gbnVtYmVyIGZvciB1bmlxdWUgSURcbiAgICAgICAgY29uc3QgdW5pcXVlSUQ6IHN0cmluZyA9IGAke0RhdGUubm93KCl9LSR7XG4gICAgICAgICAgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDllMTIgLSAxKSkgKyAxZTEyXG4gICAgICAgIH1gXG4gICAgICAgIGxldCBwZXJmU3RhcnRFbnRyeTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgICAgICAgaWYgKGVudHJpZXMgJiYgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgICAgICBwZXJmU3RhcnRFbnRyeSA9IGVudHJpZXNbMF0uc3RhcnRUaW1lXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3ZWJWaXRhbHM6IE5leHRXZWJWaXRhbHNNZXRyaWMgPSB7XG4gICAgICAgICAgaWQ6IGlkIHx8IHVuaXF1ZUlELFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWUgfHwgcGVyZlN0YXJ0RW50cnksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlID09IG51bGwgPyBkdXJhdGlvbiA6IHZhbHVlLFxuICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgZW50cnlUeXBlID09PSAnbWFyaycgfHwgZW50cnlUeXBlID09PSAnbWVhc3VyZSdcbiAgICAgICAgICAgICAgPyAnY3VzdG9tJ1xuICAgICAgICAgICAgICA6ICd3ZWItdml0YWwnLFxuICAgICAgICB9XG4gICAgICAgIGlmIChhdHRyaWJ1dGlvbikge1xuICAgICAgICAgIHdlYlZpdGFscy5hdHRyaWJ1dGlvbiA9IGF0dHJpYnV0aW9uXG4gICAgICAgIH1cbiAgICAgICAgbW9kLnJlcG9ydFdlYlZpdGFscyh3ZWJWaXRhbHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUVudHJ5cG9pbnQgPVxuICAgICAgLy8gVGhlIGRldiBzZXJ2ZXIgZmFpbHMgdG8gc2VydmUgc2NyaXB0IGFzc2V0cyB3aGVuIHRoZXJlJ3MgYSBoeWRyYXRpb25cbiAgICAgIC8vIGVycm9yLCBzbyB3ZSBuZWVkIHRvIHNraXAgd2FpdGluZyBmb3IgdGhlIGVudHJ5cG9pbnQuXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJiBpbml0aWFsRGF0YS5lcnJcbiAgICAgICAgPyB7IGVycm9yOiBpbml0aWFsRGF0YS5lcnIgfVxuICAgICAgICA6IGF3YWl0IHBhZ2VMb2FkZXIucm91dGVMb2FkZXIud2hlbkVudHJ5cG9pbnQoaW5pdGlhbERhdGEucGFnZSlcbiAgICBpZiAoJ2Vycm9yJyBpbiBwYWdlRW50cnlwb2ludCkge1xuICAgICAgdGhyb3cgcGFnZUVudHJ5cG9pbnQuZXJyb3JcbiAgICB9XG4gICAgQ2FjaGVkQ29tcG9uZW50ID0gcGFnZUVudHJ5cG9pbnQuY29tcG9uZW50XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3QgeyBpc1ZhbGlkRWxlbWVudFR5cGUgfSA9XG4gICAgICAgIHJlcXVpcmUoJ25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1pcycpIGFzIHR5cGVvZiBpbXBvcnQoJ25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1pcycpXG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZShDYWNoZWRDb21wb25lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlIGRlZmF1bHQgZXhwb3J0IGlzIG5vdCBhIFJlYWN0IENvbXBvbmVudCBpbiBwYWdlOiBcIiR7aW5pdGlhbERhdGEucGFnZX1cImBcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBUaGlzIGNhdGNoZXMgZXJyb3JzIGxpa2UgdGhyb3dpbmcgaW4gdGhlIHRvcCBsZXZlbCBvZiBhIG1vZHVsZVxuICAgIGluaXRpYWxFcnIgPSBnZXRQcm9wZXJFcnJvcihlcnJvcilcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIGNvbnN0IGdldFNlcnZlckVycm9yID0gKFxuICAgICAgcmVxdWlyZSgnLi4vc2VydmVyL2Rldi9ub2RlLXN0YWNrLWZyYW1lcycpIGFzIHR5cGVvZiBpbXBvcnQoJy4uL3NlcnZlci9kZXYvbm9kZS1zdGFjay1mcmFtZXMnKVxuICAgICkuZ2V0U2VydmVyRXJyb3JcbiAgICAvLyBTZXJ2ZXItc2lkZSBydW50aW1lIGVycm9ycyBuZWVkIHRvIGJlIHJlLXRocm93biBvbiB0aGUgY2xpZW50LXNpZGUgc29cbiAgICAvLyB0aGF0IHRoZSBvdmVybGF5IGlzIHJlbmRlcmVkLlxuICAgIGlmIChpbml0aWFsRXJyKSB7XG4gICAgICBpZiAoaW5pdGlhbEVyciA9PT0gaW5pdGlhbERhdGEuZXJyKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGxldCBlcnJvclxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBHZW5lcmF0ZSBhIG5ldyBlcnJvciBvYmplY3QuIFdlIGB0aHJvd2AgaXQgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgICAgICAgICAvLyB3aWxsIHNldCB0aGUgYHN0YWNrYCB3aGVuIHRocm93biwgYW5kIHdlIHdhbnQgdG8gZW5zdXJlIG91cnMgaXNcbiAgICAgICAgICAgIC8vIG5vdCBvdmVycmlkZGVuIHdoZW4gd2UgcmUtdGhyb3cgaXQgYmVsb3cuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5pdGlhbEVyciEubWVzc2FnZSlcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvciA9IGUgYXMgRXJyb3JcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvci5uYW1lID0gaW5pdGlhbEVyciEubmFtZVxuICAgICAgICAgIGVycm9yLnN0YWNrID0gaW5pdGlhbEVyciEuc3RhY2tcbiAgICAgICAgICBjb25zdCBlcnJTb3VyY2UgPSBpbml0aWFsRXJyLnNvdXJjZSFcblxuICAgICAgICAgIC8vIEluIGRldmVsb3BtZW50LCBlcnJvciB0aGUgbmF2aWdhdGlvbiBBUEkgdXNhZ2UgaW4gcnVudGltZSxcbiAgICAgICAgICAvLyBzaW5jZSBpdCdzIG5vdCBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gcGFnZXMgcm91dGVyIGFzIGl0IGRvZXNuJ3QgY29udGFpbiBlcnJvciBib3VuZGFyeSBsaWtlIGFwcCByb3V0ZXIuXG4gICAgICAgICAgaWYgKGlzTmV4dFJvdXRlckVycm9yKGluaXRpYWxFcnIpKSB7XG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlID1cbiAgICAgICAgICAgICAgJ05leHQuanMgbmF2aWdhdGlvbiBBUEkgaXMgbm90IGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBQYWdlcyBSb3V0ZXIuJ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRocm93IGdldFNlcnZlckVycm9yKGVycm9yLCBlcnJTb3VyY2UpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBXZSByZXBsYWNlZCB0aGUgc2VydmVyLXNpZGUgZXJyb3Igd2l0aCBhIGNsaWVudC1zaWRlIGVycm9yLCBhbmQgc2hvdWxkXG4gICAgICAvLyBubyBsb25nZXIgcmV3cml0ZSB0aGUgc3RhY2sgdHJhY2UgdG8gYSBOb2RlIGVycm9yLlxuICAgICAgZWxzZSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRocm93IGluaXRpYWxFcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAod2luZG93Ll9fTkVYVF9QUkVMT0FEUkVBRFkpIHtcbiAgICBhd2FpdCB3aW5kb3cuX19ORVhUX1BSRUxPQURSRUFEWShpbml0aWFsRGF0YS5keW5hbWljSWRzKVxuICB9XG5cbiAgcm91dGVyID0gY3JlYXRlUm91dGVyKGluaXRpYWxEYXRhLnBhZ2UsIGluaXRpYWxEYXRhLnF1ZXJ5LCBhc1BhdGgsIHtcbiAgICBpbml0aWFsUHJvcHM6IGluaXRpYWxEYXRhLnByb3BzLFxuICAgIHBhZ2VMb2FkZXIsXG4gICAgQXBwOiBDYWNoZWRBcHAsXG4gICAgQ29tcG9uZW50OiBDYWNoZWRDb21wb25lbnQsXG4gICAgd3JhcEFwcCxcbiAgICBlcnI6IGluaXRpYWxFcnIsXG4gICAgaXNGYWxsYmFjazogQm9vbGVhbihpbml0aWFsRGF0YS5pc0ZhbGxiYWNrKSxcbiAgICBzdWJzY3JpcHRpb246IChpbmZvLCBBcHAsIHNjcm9sbCkgPT5cbiAgICAgIHJlbmRlcihcbiAgICAgICAgT2JqZWN0LmFzc2lnbjxcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBPbWl0PFJlbmRlclJvdXRlSW5mbywgJ0FwcCcgfCAnc2Nyb2xsJz4sXG4gICAgICAgICAgUGljazxSZW5kZXJSb3V0ZUluZm8sICdBcHAnIHwgJ3Njcm9sbCc+XG4gICAgICAgID4oe30sIGluZm8sIHtcbiAgICAgICAgICBBcHAsXG4gICAgICAgICAgc2Nyb2xsLFxuICAgICAgICB9KSBhcyBSZW5kZXJSb3V0ZUluZm9cbiAgICAgICksXG4gICAgbG9jYWxlOiBpbml0aWFsRGF0YS5sb2NhbGUsXG4gICAgbG9jYWxlczogaW5pdGlhbERhdGEubG9jYWxlcyxcbiAgICBkZWZhdWx0TG9jYWxlLFxuICAgIGRvbWFpbkxvY2FsZXM6IGluaXRpYWxEYXRhLmRvbWFpbkxvY2FsZXMsXG4gICAgaXNQcmV2aWV3OiBpbml0aWFsRGF0YS5pc1ByZXZpZXcsXG4gIH0pXG5cbiAgaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlID0gYXdhaXQgcm91dGVyLl9pbml0aWFsTWF0Y2hlc01pZGRsZXdhcmVQcm9taXNlXG5cbiAgY29uc3QgcmVuZGVyQ3R4OiBSZW5kZXJSb3V0ZUluZm8gPSB7XG4gICAgQXBwOiBDYWNoZWRBcHAsXG4gICAgaW5pdGlhbDogdHJ1ZSxcbiAgICBDb21wb25lbnQ6IENhY2hlZENvbXBvbmVudCxcbiAgICBwcm9wczogaW5pdGlhbERhdGEucHJvcHMsXG4gICAgZXJyOiBpbml0aWFsRXJyLFxuICAgIGlzSHlkcmF0ZVBhc3M6IHRydWUsXG4gIH1cblxuICBpZiAob3B0cz8uYmVmb3JlUmVuZGVyKSB7XG4gICAgYXdhaXQgb3B0cy5iZWZvcmVSZW5kZXIoKVxuICB9XG5cbiAgcmVuZGVyKHJlbmRlckN0eClcbn1cbiJdLCJuYW1lcyI6WyJlbWl0dGVyIiwiaHlkcmF0ZSIsImluaXRpYWxpemUiLCJyb3V0ZXIiLCJ2ZXJzaW9uIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9WRVJTSU9OIiwibWl0dCIsImxvb3NlVG9BcnJheSIsImlucHV0Iiwic2xpY2UiLCJjYWxsIiwiaW5pdGlhbERhdGEiLCJkZWZhdWx0TG9jYWxlIiwidW5kZWZpbmVkIiwiYXNQYXRoIiwicGFnZUxvYWRlciIsImFwcEVsZW1lbnQiLCJoZWFkTWFuYWdlciIsImluaXRpYWxNYXRjaGVzTWlkZGxld2FyZSIsImxhc3RBcHBQcm9wcyIsImxhc3RSZW5kZXJSZWplY3QiLCJkZXZDbGllbnQiLCJDYWNoZWRBcHAiLCJvblBlcmZFbnRyeSIsIkNhY2hlZENvbXBvbmVudCIsIkNvbnRhaW5lciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29tcG9uZW50RGlkQ2F0Y2giLCJjb21wb25lbnRFcnIiLCJpbmZvIiwicHJvcHMiLCJmbiIsImNvbXBvbmVudERpZE1vdW50Iiwic2Nyb2xsVG9IYXNoIiwiaXNTc3IiLCJpc0ZhbGxiYWNrIiwibmV4dEV4cG9ydCIsImlzRHluYW1pY1JvdXRlIiwicGF0aG5hbWUiLCJsb2NhdGlvbiIsInNlYXJjaCIsIl9fTkVYVF9IQVNfUkVXUklURVMiLCJfX05fU1NHIiwicmVwbGFjZSIsIlN0cmluZyIsImFzc2lnbiIsInVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMiLCJxdWVyeSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9oIiwic2hhbGxvdyIsImNhdGNoIiwiZXJyIiwiY2FuY2VsbGVkIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiaGFzaCIsInN1YnN0cmluZyIsImVsIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInNldFRpbWVvdXQiLCJzY3JvbGxJbnRvVmlldyIsInJlbmRlciIsIk5PREVfRU5WIiwiY2hpbGRyZW4iLCJQYWdlc0Rldk92ZXJsYXlCcmlkZ2UiLCJyZXF1aXJlIiwib3B0cyIsInRyYWNlciIsIm9uU3BhbkVuZCIsImRlZmF1bHQiLCJKU09OIiwicGFyc2UiLCJ0ZXh0Q29udGVudCIsIndpbmRvdyIsIl9fTkVYVF9EQVRBX18iLCJwcmVmaXgiLCJhc3NldFByZWZpeCIsInNlbGYiLCJfX25leHRfc2V0X3B1YmxpY19wYXRoX18iLCJzZXRDb25maWciLCJzZXJ2ZXJSdW50aW1lQ29uZmlnIiwicHVibGljUnVudGltZUNvbmZpZyIsInJ1bnRpbWVDb25maWciLCJnZXRVUkwiLCJoYXNCYXNlUGF0aCIsInJlbW92ZUJhc2VQYXRoIiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsIm5vcm1hbGl6ZUxvY2FsZVBhdGgiLCJkZXRlY3REb21haW5Mb2NhbGUiLCJwYXJzZVJlbGF0aXZlVXJsIiwiZm9ybWF0VXJsIiwibG9jYWxlcyIsInBhcnNlZEFzIiwibG9jYWxlUGF0aFJlc3VsdCIsImRldGVjdGVkTG9jYWxlIiwibG9jYWxlIiwiZGV0ZWN0ZWREb21haW4iLCJfX05FWFRfSTE4Tl9ET01BSU5TIiwiaG9zdG5hbWUiLCJzY3JpcHRMb2FkZXIiLCJpbml0U2NyaXB0TG9hZGVyIiwiUGFnZUxvYWRlciIsImJ1aWxkSWQiLCJyZWdpc3RlciIsInIiLCJmIiwicm91dGVMb2FkZXIiLCJvbkVudHJ5cG9pbnQiLCJfX05FWFRfUCIsIm1hcCIsInAiLCJwdXNoIiwiaW5pdEhlYWRNYW5hZ2VyIiwiZ2V0SXNTc3IiLCJyZW5kZXJBcHAiLCJBcHAiLCJhcHBQcm9wcyIsIkFwcENvbnRhaW5lciIsImFkYXB0ZWRGb3JBcHBSb3V0ZXIiLCJ1c2VNZW1vIiwiYWRhcHRGb3JBcHBSb3V0ZXJJbnN0YW5jZSIsImVycm9yIiwicmVuZGVyRXJyb3IiLCJjb25zb2xlIiwiQXBwUm91dGVyQ29udGV4dCIsIlByb3ZpZGVyIiwidmFsdWUiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwiYWRhcHRGb3JTZWFyY2hQYXJhbXMiLCJQYXRobmFtZUNvbnRleHRQcm92aWRlckFkYXB0ZXIiLCJpc0F1dG9FeHBvcnQiLCJhdXRvRXhwb3J0IiwiUGF0aFBhcmFtc0NvbnRleHQiLCJhZGFwdEZvclBhdGhQYXJhbXMiLCJSb3V0ZXJDb250ZXh0IiwibWFrZVB1YmxpY1JvdXRlckluc3RhbmNlIiwiSGVhZE1hbmFnZXJDb250ZXh0IiwiSW1hZ2VDb25maWdDb250ZXh0IiwiX19ORVhUX0lNQUdFX09QVFMiLCJ3cmFwQXBwIiwid3JhcHBlZEFwcFByb3BzIiwicmVuZGVyRXJyb3JQcm9wcyIsIm9uVW5yZWNvdmVyYWJsZUVycm9yIiwiZG9SZW5kZXIiLCJzdHlsZVNoZWV0cyIsImxvYWRQYWdlIiwidGhlbiIsInBhZ2UiLCJFcnJvckNvbXBvbmVudCIsImVycm9yTW9kdWxlIiwiYXBwTW9kdWxlIiwibSIsIkFwcFRyZWUiLCJhcHBDdHgiLCJjdHgiLCJQcm9taXNlIiwicmVzb2x2ZSIsImxvYWRHZXRJbml0aWFsUHJvcHMiLCJpbml0UHJvcHMiLCJIZWFkIiwiY2FsbGJhY2siLCJ1c2VMYXlvdXRFZmZlY3QiLCJwZXJmb3JtYW5jZU1hcmtzIiwibmF2aWdhdGlvblN0YXJ0IiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJhZnRlckh5ZHJhdGUiLCJyb3V0ZUNoYW5nZSIsInBlcmZvcm1hbmNlTWVhc3VyZXMiLCJoeWRyYXRpb24iLCJiZWZvcmVIeWRyYXRpb24iLCJyb3V0ZUNoYW5nZVRvUmVuZGVyIiwicmVhY3RSb290Iiwic2hvdWxkSHlkcmF0ZSIsImNsZWFyTWFya3MiLCJmb3JFYWNoIiwibWFyayIsInBlcmZvcm1hbmNlIiwibWFya0h5ZHJhdGVDb21wbGV0ZSIsIlNUIiwiaGFzQmVmb3JlUmVuZGVyTWFyayIsImdldEVudHJpZXNCeU5hbWUiLCJsZW5ndGgiLCJiZWZvcmVIeWRyYXRpb25NZWFzdXJlIiwibWVhc3VyZSIsImh5ZHJhdGlvbk1lYXN1cmUiLCJzdGFydFNwYW4iLCJzdGFydFRpbWUiLCJ0aW1lT3JpZ2luIiwiYXR0cmlidXRlcyIsImVuZCIsImR1cmF0aW9uIiwibWFya1JlbmRlckNvbXBsZXRlIiwibmF2U3RhcnRFbnRyaWVzIiwibmFtZSIsImNsZWFyTWVhc3VyZXMiLCJyZW5kZXJSZWFjdEVsZW1lbnQiLCJkb21FbCIsInJlYWN0RWwiLCJSZWFjdERPTSIsImh5ZHJhdGVSb290Iiwib25SZWNvdmVyYWJsZUVycm9yIiwic3RhcnRUcmFuc2l0aW9uIiwiUm9vdCIsImNhbGxiYWNrcyIsIl9fTkVYVF9URVNUX01PREUiLCJ1c2VFZmZlY3QiLCJfX05FWFRfSFlEUkFURUQiLCJfX05FWFRfSFlEUkFURURfQVQiLCJub3ciLCJfX05FWFRfSFlEUkFURURfQ0IiLCJjYW5jZWxlZCIsInJlc29sdmVQcm9taXNlIiwicmVuZGVyUHJvbWlzZSIsInJlamVjdCIsIkVycm9yIiwib25TdGFydCIsImN1cnJlbnRTdHlsZVRhZ3MiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY3VycmVudEhyZWZzIiwiU2V0IiwidGFnIiwiZ2V0QXR0cmlidXRlIiwibm9zY3JpcHQiLCJxdWVyeVNlbGVjdG9yIiwibm9uY2UiLCJocmVmIiwidGV4dCIsImhhcyIsInN0eWxlVGFnIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImhlYWQiLCJhcHBlbmRDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwib25IZWFkQ29tbWl0IiwiVFVSQk9QQUNLIiwiZGVzaXJlZEhyZWZzIiwicyIsImlkeCIsInJlbW92ZUF0dHJpYnV0ZSIsInJlZmVyZW5jZU5vZGUiLCJ0YXJnZXRUYWciLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJyZW1vdmVDaGlsZCIsInNjcm9sbCIsIngiLCJ5IiwiZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbiIsInNjcm9sbFRvIiwib25Sb290Q29tbWl0IiwiZWxlbSIsIlBvcnRhbCIsInR5cGUiLCJSb3V0ZUFubm91bmNlciIsIl9fTkVYVF9TVFJJQ1RfTU9ERSIsIlN0cmljdE1vZGUiLCJyZW5kZXJpbmdQcm9wcyIsImlzSHlkcmF0ZVBhc3MiLCJyZW5kZXJFcnIiLCJnZXRQcm9wZXJFcnJvciIsImluaXRpYWxFcnIiLCJhcHBFbnRyeXBvaW50Iiwid2hlbkVudHJ5cG9pbnQiLCJjb21wb25lbnQiLCJhcHAiLCJleHBvcnRzIiwibW9kIiwicmVwb3J0V2ViVml0YWxzIiwiaWQiLCJlbnRyeVR5cGUiLCJlbnRyaWVzIiwiYXR0cmlidXRpb24iLCJ1bmlxdWVJRCIsIkRhdGUiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJwZXJmU3RhcnRFbnRyeSIsIndlYlZpdGFscyIsImxhYmVsIiwicGFnZUVudHJ5cG9pbnQiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJnZXRTZXJ2ZXJFcnJvciIsIm1lc3NhZ2UiLCJlIiwic3RhY2siLCJlcnJTb3VyY2UiLCJzb3VyY2UiLCJpc05leHRSb3V0ZXJFcnJvciIsIl9fTkVYVF9QUkVMT0FEUkVBRFkiLCJkeW5hbWljSWRzIiwiY3JlYXRlUm91dGVyIiwiaW5pdGlhbFByb3BzIiwiQm9vbGVhbiIsInN1YnNjcmlwdGlvbiIsIk9iamVjdCIsImRvbWFpbkxvY2FsZXMiLCJpc1ByZXZpZXciLCJfaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlUHJvbWlzZSIsInJlbmRlckN0eCIsImluaXRpYWwiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/next-dev.js":
|
||
/*!***************************************************!*\
|
||
!*** ./node_modules/next/dist/client/next-dev.js ***!
|
||
\***************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// TODO: Remove use of `any` type.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\n__webpack_require__(/*! ./webpack */ \"(pages-dir-browser)/./node_modules/next/dist/client/webpack.js\");\nconst _ = __webpack_require__(/*! ./ */ \"(pages-dir-browser)/./node_modules/next/dist/client/index.js\");\nconst _hotmiddlewareclient = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./dev/hot-middleware-client */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-middleware-client.js\"));\nconst _pagebootstrap = __webpack_require__(/*! ./page-bootstrap */ \"(pages-dir-browser)/./node_modules/next/dist/client/page-bootstrap.js\");\nwindow.next = {\n version: _.version,\n // router is initialized later so it has to be live-binded\n get router () {\n return _.router;\n },\n emitter: _.emitter\n};\nconst devClient = (0, _hotmiddlewareclient.default)();\n(0, _.initialize)({\n devClient\n}).then((param)=>{\n let { assetPrefix } = param;\n return (0, _pagebootstrap.pageBootstrap)(assetPrefix);\n}).catch((err)=>{\n console.error('Error was not caught', err);\n});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=next-dev.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L25leHQtZGV2LmpzIiwibWFwcGluZ3MiOiJBQUFBLGtDQUFrQzs7Ozs7O29CQUMzQjs4QkFDOEM7MEZBQ2pDOzJDQUNVO0FBRTlCQSxPQUFPQyxJQUFJLEdBQUc7SUFDWkMsU0FBQUEsRUFBQUEsT0FBTztJQUNQLDBEQUEwRDtJQUMxRCxJQUFJQyxVQUFTO1FBQ1gsT0FBT0EsRUFBQUEsTUFBTTtJQUNmO0lBQ0FDLFNBQUFBLEVBQUFBLE9BQU87QUFDVDtBQUVBLE1BQU1DLFlBQVlDLENBQUFBLEdBQUFBLHFCQUFBQSxPQUFBQTtBQUNsQkMsQ0FBQUEsR0FBQUEsRUFBQUEsVUFBQUEsRUFBVztJQUFFRjtBQUFVLEdBQ3BCRyxJQUFJLENBQUM7UUFBQyxFQUFFQyxXQUFXLEVBQUU7SUFDcEIsT0FBT0MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY0Q7QUFDdkIsR0FDQ0UsS0FBSyxDQUFDLENBQUNDO0lBQ05DLFFBQVFDLEtBQUssQ0FBQyx3QkFBd0JGO0FBQ3hDIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXG5leHQtZGV2LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IFJlbW92ZSB1c2Ugb2YgYGFueWAgdHlwZS5cbmltcG9ydCAnLi93ZWJwYWNrJ1xuaW1wb3J0IHsgaW5pdGlhbGl6ZSwgdmVyc2lvbiwgcm91dGVyLCBlbWl0dGVyIH0gZnJvbSAnLi8nXG5pbXBvcnQgaW5pdEhNUiBmcm9tICcuL2Rldi9ob3QtbWlkZGxld2FyZS1jbGllbnQnXG5pbXBvcnQgeyBwYWdlQm9vdHN0cmFwIH0gZnJvbSAnLi9wYWdlLWJvb3RzdHJhcCdcblxud2luZG93Lm5leHQgPSB7XG4gIHZlcnNpb24sXG4gIC8vIHJvdXRlciBpcyBpbml0aWFsaXplZCBsYXRlciBzbyBpdCBoYXMgdG8gYmUgbGl2ZS1iaW5kZWRcbiAgZ2V0IHJvdXRlcigpIHtcbiAgICByZXR1cm4gcm91dGVyXG4gIH0sXG4gIGVtaXR0ZXIsXG59XG5cbmNvbnN0IGRldkNsaWVudCA9IGluaXRITVIoKVxuaW5pdGlhbGl6ZSh7IGRldkNsaWVudCB9KVxuICAudGhlbigoeyBhc3NldFByZWZpeCB9KSA9PiB7XG4gICAgcmV0dXJuIHBhZ2VCb290c3RyYXAoYXNzZXRQcmVmaXgpXG4gIH0pXG4gIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3Igd2FzIG5vdCBjYXVnaHQnLCBlcnIpXG4gIH0pXG4iXSwibmFtZXMiOlsid2luZG93IiwibmV4dCIsInZlcnNpb24iLCJyb3V0ZXIiLCJlbWl0dGVyIiwiZGV2Q2xpZW50IiwiaW5pdEhNUiIsImluaXRpYWxpemUiLCJ0aGVuIiwiYXNzZXRQcmVmaXgiLCJwYWdlQm9vdHN0cmFwIiwiY2F0Y2giLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/next-dev.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/normalize-trailing-slash.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return normalizePathTrailingSlash;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst normalizePathTrailingSlash = (path)=>{\n if (!path.startsWith('/') || undefined) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n if (false) {}\n return \"\" + (0, _removetrailingslash.removeTrailingSlash)(pathname) + query + hash;\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=normalize-trailing-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaC5qcyIsIm1hcHBpbmdzIjoiOzs7OzhEQU9hQTs7O2VBQUFBOzs7aURBUHVCO3VDQUNWO0FBTW5CLE1BQU1BLDZCQUE2QixDQUFDQztJQUN6QyxJQUFJLENBQUNBLEtBQUtDLFVBQVUsQ0FBQyxRQUFRQyxTQUF3QyxFQUFFO1FBQ3JFLE9BQU9GO0lBQ1Q7SUFFQSxNQUFNLEVBQUVLLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVVI7SUFDNUMsSUFBSUUsS0FBaUMsRUFBRSxFQVF0QztJQUVELE9BQVEsS0FBRVMsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQk4sWUFBWUMsUUFBUUM7QUFDcEQiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxcbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbW92ZVRyYWlsaW5nU2xhc2ggfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yZW1vdmUtdHJhaWxpbmctc2xhc2gnXG5pbXBvcnQgeyBwYXJzZVBhdGggfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1wYXRoJ1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgdGhlIHRyYWlsaW5nIHNsYXNoIG9mIGEgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIGB0cmFpbGluZ1NsYXNoYCBvcHRpb25cbiAqIGluIGBuZXh0LmNvbmZpZy5qc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSB8fCBwcm9jZXNzLmVudi5fX05FWFRfTUFOVUFMX1RSQUlMSU5HX1NMQVNIKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5LCBoYXNoIH0gPSBwYXJzZVBhdGgocGF0aClcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9UUkFJTElOR19TTEFTSCkge1xuICAgIGlmICgvXFwuW14vXStcXC8/JC8udGVzdChwYXRobmFtZSkpIHtcbiAgICAgIHJldHVybiBgJHtyZW1vdmVUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKX0ke3F1ZXJ5fSR7aGFzaH1gXG4gICAgfSBlbHNlIGlmIChwYXRobmFtZS5lbmRzV2l0aCgnLycpKSB7XG4gICAgICByZXR1cm4gYCR7cGF0aG5hbWV9JHtxdWVyeX0ke2hhc2h9YFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cGF0aG5hbWV9LyR7cXVlcnl9JHtoYXNofWBcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYCR7cmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSl9JHtxdWVyeX0ke2hhc2h9YFxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoIiwicGF0aCIsInN0YXJ0c1dpdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX01BTlVBTF9UUkFJTElOR19TTEFTSCIsInBhdGhuYW1lIiwicXVlcnkiLCJoYXNoIiwicGFyc2VQYXRoIiwiX19ORVhUX1RSQUlMSU5HX1NMQVNIIiwidGVzdCIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJlbmRzV2l0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/page-bootstrap.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/page-bootstrap.js ***!
|
||
\*********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pageBootstrap\", ({\n enumerable: true,\n get: function() {\n return pageBootstrap;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\n__webpack_require__(/*! ../lib/require-instrumentation-client */ \"(pages-dir-browser)/./node_modules/next/dist/lib/require-instrumentation-client.js\");\nconst _ = __webpack_require__(/*! ./ */ \"(pages-dir-browser)/./node_modules/next/dist/client/index.js\");\nconst _ondemandentriesclient = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./dev/on-demand-entries-client */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/on-demand-entries-client.js\"));\nconst _fouc = __webpack_require__(/*! ./dev/fouc */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/fouc.js\");\nconst _websocket = __webpack_require__(/*! ./dev/hot-reloader/pages/websocket */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\");\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../server/dev/hot-reloader-types */ \"(pages-dir-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _runtimeerrorhandler = __webpack_require__(/*! ./dev/runtime-error-handler */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/runtime-error-handler.js\");\nconst _shared = __webpack_require__(/*! ./dev/hot-reloader/shared */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/shared.js\");\nconst _hotreloaderpages = __webpack_require__(/*! ./dev/hot-reloader/pages/hot-reloader-pages */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(pages-dir-browser)/./node_modules/next/dist/compiled/next-devtools/index.js\");\nfunction pageBootstrap(assetPrefix) {\n (0, _websocket.connectHMR)({\n assetPrefix,\n path: '/_next/webpack-hmr'\n });\n return (0, _.hydrate)({\n beforeRender: _fouc.displayContent\n }).then(()=>{\n (0, _ondemandentriesclient.default)();\n let reloading = false;\n (0, _websocket.addMessageListener)((payload)=>{\n if (reloading) return;\n if ('action' in payload) {\n switch(payload.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n {\n const { stack, message } = JSON.parse(payload.errorJSON);\n const error = Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n error.stack = stack;\n throw error;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE:\n {\n reloading = true;\n window.location.reload();\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE:\n {\n fetch(\"\" + assetPrefix + \"/_next/static/development/_devPagesManifest.json\").then((res)=>res.json()).then((manifest)=>{\n window.__DEV_PAGES_MANIFEST = manifest;\n }).catch((err)=>{\n console.log(\"Failed to fetch devPagesManifest\", err);\n });\n break;\n }\n default:\n break;\n }\n } else if ('event' in payload) {\n switch(payload.event){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.MIDDLEWARE_CHANGES:\n {\n return window.location.reload();\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.CLIENT_CHANGES:\n {\n // This is used in `../server/dev/turbopack-utils.ts`.\n const isOnErrorPage = window.next.router.pathname === '/_error';\n // On the error page we want to reload the page when a page was changed\n if (isOnErrorPage) {\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n }\n reloading = true;\n (0, _hotreloaderpages.performFullReload)(null);\n }\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ONLY_CHANGES:\n {\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n (0, _hotreloaderpages.performFullReload)(null);\n }\n const { pages } = payload;\n // Make sure to reload when the dev-overlay is showing for an\n // API route\n // TODO: Fix `__NEXT_PAGE` type\n if (pages.includes(_.router.query.__NEXT_PAGE)) {\n return window.location.reload();\n }\n if (!_.router.clc && pages.includes(_.router.pathname)) {\n console.log('Refreshing page data due to server-side change');\n _nextdevtools.dispatcher.buildingIndicatorShow();\n const clearIndicator = _nextdevtools.dispatcher.buildingIndicatorHide;\n _.router.replace(_.router.pathname + '?' + String((0, _querystring.assign)((0, _querystring.urlQueryToSearchParams)(_.router.query), new URLSearchParams(location.search))), _.router.asPath, {\n scroll: false\n }).catch(()=>{\n // trigger hard reload when failing to refresh data\n // to show error overlay properly\n location.reload();\n }).finally(clearIndicator);\n }\n break;\n }\n default:\n break;\n }\n }\n });\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=page-bootstrap.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3BhZ2UtYm9vdHN0cmFwLmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBa0JnQkE7OztlQUFBQTs7OztvQkFsQlQ7OEJBQ3lCOzRGQUNBO2tDQUNEO3VDQUl4Qjt5Q0FJQTs4Q0FDcUM7aURBQ1I7b0NBQ2lCOzhDQUNuQjswQ0FDUDtBQUVwQixTQUFTQSxjQUFjQyxXQUFtQjtJQUMvQ0MsQ0FBQUEsR0FBQUEsV0FBQUEsVUFBQUEsRUFBVztRQUFFRDtRQUFhRSxNQUFNO0lBQXFCO0lBRXJELE9BQU9DLENBQUFBLEdBQUFBLEVBQUFBLE9BQUFBLEVBQVE7UUFBRUMsY0FBY0MsTUFBQUEsY0FBYztJQUFDLEdBQUdDLElBQUksQ0FBQztRQUNwREMsQ0FBQUEsR0FBQUEsdUJBQUFBLE9BQUFBO1FBRUEsSUFBSUMsWUFBWTtRQUVoQkMsQ0FBQUEsR0FBQUEsV0FBQUEsa0JBQUFBLEVBQW1CLENBQUNDO1lBQ2xCLElBQUlGLFdBQVc7WUFDZixJQUFJLFlBQVlFLFNBQVM7Z0JBQ3ZCLE9BQVFBLFFBQVFDLE1BQU07b0JBQ3BCLEtBQUtDLGtCQUFBQSwyQkFBMkIsQ0FBQ0MsWUFBWTt3QkFBRTs0QkFDN0MsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyxLQUFLQyxLQUFLLENBQUNQLFFBQVFRLFNBQVM7NEJBQ3ZELE1BQU1DLFFBQVEscUJBQWtCLENBQWxCLElBQUlDLE1BQU1MLFVBQVY7dUNBQUE7NENBQUE7OENBQUE7NEJBQWlCOzRCQUMvQkksTUFBTUwsS0FBSyxHQUFHQTs0QkFDZCxNQUFNSzt3QkFDUjtvQkFDQSxLQUFLUCxrQkFBQUEsMkJBQTJCLENBQUNTLFdBQVc7d0JBQUU7NEJBQzVDYixZQUFZOzRCQUNaYyxPQUFPQyxRQUFRLENBQUNDLE1BQU07NEJBQ3RCO3dCQUNGO29CQUNBLEtBQUtaLGtCQUFBQSwyQkFBMkIsQ0FBQ2EseUJBQXlCO3dCQUFFOzRCQUMxREMsTUFDRyxLQUFFMUIsY0FBWSxvREFFZE0sSUFBSSxDQUFDLENBQUNxQixNQUFRQSxJQUFJQyxJQUFJLElBQ3RCdEIsSUFBSSxDQUFDLENBQUN1QjtnQ0FDTFAsT0FBT1Esb0JBQW9CLEdBQUdEOzRCQUNoQyxHQUNDRSxLQUFLLENBQUMsQ0FBQ0M7Z0NBQ05DLFFBQVFDLEdBQUcsQ0FBRSxvQ0FBbUNGOzRCQUNsRDs0QkFDRjt3QkFDRjtvQkFDQTt3QkFDRTtnQkFDSjtZQUNGLE9BQU8sSUFBSSxXQUFXdEIsU0FBUztnQkFDN0IsT0FBUUEsUUFBUXlCLEtBQUs7b0JBQ25CLEtBQUt2QixrQkFBQUEsMkJBQTJCLENBQUN3QixrQkFBa0I7d0JBQUU7NEJBQ25ELE9BQU9kLE9BQU9DLFFBQVEsQ0FBQ0MsTUFBTTt3QkFDL0I7b0JBQ0EsS0FBS1osa0JBQUFBLDJCQUEyQixDQUFDeUIsY0FBYzt3QkFBRTs0QkFDL0Msc0RBQXNEOzRCQUN0RCxNQUFNQyxnQkFBZ0JoQixPQUFPaUIsSUFBSSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsS0FBSzs0QkFDdEQsdUVBQXVFOzRCQUN2RSxJQUFJSCxlQUFlO2dDQUNqQixJQUFJSSxxQkFBQUEsbUJBQW1CLENBQUNDLGVBQWUsRUFBRTtvQ0FDdkNWLFFBQVFXLElBQUksQ0FBQ0MsUUFBQUEsb0NBQW9DO2dDQUNuRDtnQ0FDQXJDLFlBQVk7Z0NBQ1pzQyxDQUFBQSxHQUFBQSxrQkFBQUEsaUJBQUFBLEVBQWtCOzRCQUNwQjs0QkFDQTt3QkFDRjtvQkFDQSxLQUFLbEMsa0JBQUFBLDJCQUEyQixDQUFDbUMsbUJBQW1CO3dCQUFFOzRCQUNwRCxJQUFJTCxxQkFBQUEsbUJBQW1CLENBQUNDLGVBQWUsRUFBRTtnQ0FDdkNWLFFBQVFXLElBQUksQ0FBQ0MsUUFBQUEsb0NBQW9DO2dDQUNqREMsQ0FBQUEsR0FBQUEsa0JBQUFBLGlCQUFBQSxFQUFrQjs0QkFDcEI7NEJBRUEsTUFBTSxFQUFFRSxLQUFLLEVBQUUsR0FBR3RDOzRCQUVsQiw2REFBNkQ7NEJBQzdELFlBQVk7NEJBQ1osK0JBQStCOzRCQUMvQixJQUFJc0MsTUFBTUMsUUFBUSxDQUFDVCxFQUFBQSxNQUFNLENBQUNVLEtBQUssQ0FBQ0MsV0FBVyxHQUFhO2dDQUN0RCxPQUFPN0IsT0FBT0MsUUFBUSxDQUFDQyxNQUFNOzRCQUMvQjs0QkFFQSxJQUFJLENBQUNnQixFQUFBQSxNQUFNLENBQUNZLEdBQUcsSUFBSUosTUFBTUMsUUFBUSxDQUFDVCxFQUFBQSxNQUFNLENBQUNDLFFBQVEsR0FBRztnQ0FDbERSLFFBQVFDLEdBQUcsQ0FBQztnQ0FDWm1CLGNBQUFBLFVBQVUsQ0FBQ0MscUJBQXFCO2dDQUNoQyxNQUFNQyxpQkFBaUJGLGNBQUFBLFVBQVUsQ0FBQ0cscUJBQXFCO2dDQUV2RGhCLEVBQUFBLE1BQU0sQ0FDSGlCLE9BQU8sQ0FDTmpCLEVBQUFBLE1BQU0sQ0FBQ0MsUUFBUSxHQUNiLE1BQ0FpQixPQUNFQyxDQUFBQSxHQUFBQSxhQUFBQSxNQUFBQSxFQUNFQyxDQUFBQSxHQUFBQSxhQUFBQSxzQkFBQUEsRUFBdUJwQixFQUFBQSxNQUFNLENBQUNVLEtBQUssR0FDbkMsSUFBSVcsZ0JBQWdCdEMsU0FBU3VDLE1BQU0sS0FHekN0QixFQUFBQSxNQUFNLENBQUN1QixNQUFNLEVBQ2I7b0NBQUVDLFFBQVE7Z0NBQU0sR0FFakJqQyxLQUFLLENBQUM7b0NBQ0wsbURBQW1EO29DQUNuRCxpQ0FBaUM7b0NBQ2pDUixTQUFTQyxNQUFNO2dDQUNqQixHQUNDeUMsT0FBTyxDQUFDVjs0QkFDYjs0QkFDQTt3QkFDRjtvQkFDQTt3QkFDRTtnQkFDSjtZQUNGO1FBQ0Y7SUFDRjtBQUNGIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXHBhZ2UtYm9vdHN0cmFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnLi4vbGliL3JlcXVpcmUtaW5zdHJ1bWVudGF0aW9uLWNsaWVudCdcbmltcG9ydCB7IGh5ZHJhdGUsIHJvdXRlciB9IGZyb20gJy4vJ1xuaW1wb3J0IGluaXRPbkRlbWFuZEVudHJpZXMgZnJvbSAnLi9kZXYvb24tZGVtYW5kLWVudHJpZXMtY2xpZW50J1xuaW1wb3J0IHsgZGlzcGxheUNvbnRlbnQgfSBmcm9tICcuL2Rldi9mb3VjJ1xuaW1wb3J0IHtcbiAgY29ubmVjdEhNUixcbiAgYWRkTWVzc2FnZUxpc3RlbmVyLFxufSBmcm9tICcuL2Rldi9ob3QtcmVsb2FkZXIvcGFnZXMvd2Vic29ja2V0J1xuaW1wb3J0IHtcbiAgYXNzaWduLFxuICB1cmxRdWVyeVRvU2VhcmNoUGFyYW1zLFxufSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9xdWVyeXN0cmluZydcbmltcG9ydCB7IEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiB9IGZyb20gJy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzJ1xuaW1wb3J0IHsgUnVudGltZUVycm9ySGFuZGxlciB9IGZyb20gJy4vZGV2L3J1bnRpbWUtZXJyb3ItaGFuZGxlcidcbmltcG9ydCB7IFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUiB9IGZyb20gJy4vZGV2L2hvdC1yZWxvYWRlci9zaGFyZWQnXG5pbXBvcnQgeyBwZXJmb3JtRnVsbFJlbG9hZCB9IGZyb20gJy4vZGV2L2hvdC1yZWxvYWRlci9wYWdlcy9ob3QtcmVsb2FkZXItcGFnZXMnXG5pbXBvcnQgeyBkaXNwYXRjaGVyIH0gZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL25leHQtZGV2dG9vbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYWdlQm9vdHN0cmFwKGFzc2V0UHJlZml4OiBzdHJpbmcpIHtcbiAgY29ubmVjdEhNUih7IGFzc2V0UHJlZml4LCBwYXRoOiAnL19uZXh0L3dlYnBhY2staG1yJyB9KVxuXG4gIHJldHVybiBoeWRyYXRlKHsgYmVmb3JlUmVuZGVyOiBkaXNwbGF5Q29udGVudCB9KS50aGVuKCgpID0+IHtcbiAgICBpbml0T25EZW1hbmRFbnRyaWVzKClcblxuICAgIGxldCByZWxvYWRpbmcgPSBmYWxzZVxuXG4gICAgYWRkTWVzc2FnZUxpc3RlbmVyKChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAocmVsb2FkaW5nKSByZXR1cm5cbiAgICAgIGlmICgnYWN0aW9uJyBpbiBwYXlsb2FkKSB7XG4gICAgICAgIHN3aXRjaCAocGF5bG9hZC5hY3Rpb24pIHtcbiAgICAgICAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfRVJST1I6IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhY2ssIG1lc3NhZ2UgfSA9IEpTT04ucGFyc2UocGF5bG9hZC5lcnJvckpTT04pXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKVxuICAgICAgICAgICAgZXJyb3Iuc3RhY2sgPSBzdGFja1xuICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuUkVMT0FEX1BBR0U6IHtcbiAgICAgICAgICAgIHJlbG9hZGluZyA9IHRydWVcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuREVWX1BBR0VTX01BTklGRVNUX1VQREFURToge1xuICAgICAgICAgICAgZmV0Y2goXG4gICAgICAgICAgICAgIGAke2Fzc2V0UHJlZml4fS9fbmV4dC9zdGF0aWMvZGV2ZWxvcG1lbnQvX2RldlBhZ2VzTWFuaWZlc3QuanNvbmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSlcbiAgICAgICAgICAgICAgLnRoZW4oKG1hbmlmZXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgd2luZG93Ll9fREVWX1BBR0VTX01BTklGRVNUID0gbWFuaWZlc3RcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGZldGNoIGRldlBhZ2VzTWFuaWZlc3RgLCBlcnIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgnZXZlbnQnIGluIHBheWxvYWQpIHtcbiAgICAgICAgc3dpdGNoIChwYXlsb2FkLmV2ZW50KSB7XG4gICAgICAgICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuTUlERExFV0FSRV9DSEFOR0VTOiB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkNMSUVOVF9DSEFOR0VTOiB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gYC4uL3NlcnZlci9kZXYvdHVyYm9wYWNrLXV0aWxzLnRzYC5cbiAgICAgICAgICAgIGNvbnN0IGlzT25FcnJvclBhZ2UgPSB3aW5kb3cubmV4dC5yb3V0ZXIucGF0aG5hbWUgPT09ICcvX2Vycm9yJ1xuICAgICAgICAgICAgLy8gT24gdGhlIGVycm9yIHBhZ2Ugd2Ugd2FudCB0byByZWxvYWQgdGhlIHBhZ2Ugd2hlbiBhIHBhZ2Ugd2FzIGNoYW5nZWRcbiAgICAgICAgICAgIGlmIChpc09uRXJyb3JQYWdlKSB7XG4gICAgICAgICAgICAgIGlmIChSdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVsb2FkaW5nID0gdHJ1ZVxuICAgICAgICAgICAgICBwZXJmb3JtRnVsbFJlbG9hZChudWxsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuU0VSVkVSX09OTFlfQ0hBTkdFUzoge1xuICAgICAgICAgICAgaWYgKFJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IpXG4gICAgICAgICAgICAgIHBlcmZvcm1GdWxsUmVsb2FkKG51bGwpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHsgcGFnZXMgfSA9IHBheWxvYWRcblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHJlbG9hZCB3aGVuIHRoZSBkZXYtb3ZlcmxheSBpcyBzaG93aW5nIGZvciBhblxuICAgICAgICAgICAgLy8gQVBJIHJvdXRlXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggYF9fTkVYVF9QQUdFYCB0eXBlXG4gICAgICAgICAgICBpZiAocGFnZXMuaW5jbHVkZXMocm91dGVyLnF1ZXJ5Ll9fTkVYVF9QQUdFIGFzIHN0cmluZykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXJvdXRlci5jbGMgJiYgcGFnZXMuaW5jbHVkZXMocm91dGVyLnBhdGhuYW1lKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVmcmVzaGluZyBwYWdlIGRhdGEgZHVlIHRvIHNlcnZlci1zaWRlIGNoYW5nZScpXG4gICAgICAgICAgICAgIGRpc3BhdGNoZXIuYnVpbGRpbmdJbmRpY2F0b3JTaG93KClcbiAgICAgICAgICAgICAgY29uc3QgY2xlYXJJbmRpY2F0b3IgPSBkaXNwYXRjaGVyLmJ1aWxkaW5nSW5kaWNhdG9ySGlkZVxuXG4gICAgICAgICAgICAgIHJvdXRlclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgcm91dGVyLnBhdGhuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgJz8nICtcbiAgICAgICAgICAgICAgICAgICAgU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMocm91dGVyLnF1ZXJ5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHJvdXRlci5hc1BhdGgsXG4gICAgICAgICAgICAgICAgICB7IHNjcm9sbDogZmFsc2UgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBoYXJkIHJlbG9hZCB3aGVuIGZhaWxpbmcgdG8gcmVmcmVzaCBkYXRhXG4gICAgICAgICAgICAgICAgICAvLyB0byBzaG93IGVycm9yIG92ZXJsYXkgcHJvcGVybHlcbiAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmluYWxseShjbGVhckluZGljYXRvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cbiJdLCJuYW1lcyI6WyJwYWdlQm9vdHN0cmFwIiwiYXNzZXRQcmVmaXgiLCJjb25uZWN0SE1SIiwicGF0aCIsImh5ZHJhdGUiLCJiZWZvcmVSZW5kZXIiLCJkaXNwbGF5Q29udGVudCIsInRoZW4iLCJpbml0T25EZW1hbmRFbnRyaWVzIiwicmVsb2FkaW5nIiwiYWRkTWVzc2FnZUxpc3RlbmVyIiwicGF5bG9hZCIsImFjdGlvbiIsIkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiIsIlNFUlZFUl9FUlJPUiIsInN0YWNrIiwibWVzc2FnZSIsIkpTT04iLCJwYXJzZSIsImVycm9ySlNPTiIsImVycm9yIiwiRXJyb3IiLCJSRUxPQURfUEFHRSIsIndpbmRvdyIsImxvY2F0aW9uIiwicmVsb2FkIiwiREVWX1BBR0VTX01BTklGRVNUX1VQREFURSIsImZldGNoIiwicmVzIiwianNvbiIsIm1hbmlmZXN0IiwiX19ERVZfUEFHRVNfTUFOSUZFU1QiLCJjYXRjaCIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJldmVudCIsIk1JRERMRVdBUkVfQ0hBTkdFUyIsIkNMSUVOVF9DSEFOR0VTIiwiaXNPbkVycm9yUGFnZSIsIm5leHQiLCJyb3V0ZXIiLCJwYXRobmFtZSIsIlJ1bnRpbWVFcnJvckhhbmRsZXIiLCJoYWRSdW50aW1lRXJyb3IiLCJ3YXJuIiwiUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRF9GUk9NX0VSUk9SIiwicGVyZm9ybUZ1bGxSZWxvYWQiLCJTRVJWRVJfT05MWV9DSEFOR0VTIiwicGFnZXMiLCJpbmNsdWRlcyIsInF1ZXJ5IiwiX19ORVhUX1BBR0UiLCJjbGMiLCJkaXNwYXRjaGVyIiwiYnVpbGRpbmdJbmRpY2F0b3JTaG93IiwiY2xlYXJJbmRpY2F0b3IiLCJidWlsZGluZ0luZGljYXRvckhpZGUiLCJyZXBsYWNlIiwiU3RyaW5nIiwiYXNzaWduIiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsInNlYXJjaCIsImFzUGF0aCIsInNjcm9sbCIsImZpbmFsbHkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/page-bootstrap.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/page-loader.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/page-loader.js ***!
|
||
\******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return PageLoader;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _addbasepath = __webpack_require__(/*! ./add-base-path */ \"(pages-dir-browser)/./node_modules/next/dist/client/add-base-path.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _getassetpathfromroute = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/utils/get-asset-path-from-route */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\"));\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"(pages-dir-browser)/./node_modules/next/dist/client/add-locale.js\");\nconst _isdynamic = __webpack_require__(/*! ../shared/lib/router/utils/is-dynamic */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _parserelativeurl = __webpack_require__(/*! ../shared/lib/router/utils/parse-relative-url */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _routeloader = __webpack_require__(/*! ./route-loader */ \"(pages-dir-browser)/./node_modules/next/dist/client/route-loader.js\");\nconst _constants = __webpack_require__(/*! ../shared/lib/constants */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/constants.js\");\nclass PageLoader {\n getPageList() {\n if (false) {} else {\n if (window.__DEV_PAGES_MANIFEST) {\n return window.__DEV_PAGES_MANIFEST.pages;\n } else {\n this.promisedDevPagesManifest || (this.promisedDevPagesManifest = fetch(this.assetPrefix + \"/_next/static/development/\" + _constants.DEV_CLIENT_PAGES_MANIFEST, {\n credentials: 'same-origin'\n }).then((res)=>res.json()).then((manifest)=>{\n window.__DEV_PAGES_MANIFEST = manifest;\n return manifest.pages;\n }).catch((err)=>{\n console.log(\"Failed to fetch devPagesManifest:\", err);\n throw Object.defineProperty(new Error(\"Failed to fetch _devPagesManifest.json. Is something blocking that network request?\\n\" + 'Read more: https://nextjs.org/docs/messages/failed-to-fetch-devpagesmanifest'), \"__NEXT_ERROR_CODE\", {\n value: \"E423\",\n enumerable: false,\n configurable: true\n });\n }));\n return this.promisedDevPagesManifest;\n }\n }\n }\n getMiddleware() {\n // Webpack production\n if (false) {} else if (false) {} else {\n if (window.__DEV_MIDDLEWARE_MATCHERS) {\n return window.__DEV_MIDDLEWARE_MATCHERS;\n } else {\n if (!this.promisedMiddlewareMatchers) {\n // TODO: Decide what should happen when fetching fails instead of asserting\n // @ts-ignore\n this.promisedMiddlewareMatchers = fetch(this.assetPrefix + \"/_next/static/\" + this.buildId + \"/\" + _constants.DEV_CLIENT_MIDDLEWARE_MANIFEST, {\n credentials: 'same-origin'\n }).then((res)=>res.json()).then((matchers)=>{\n window.__DEV_MIDDLEWARE_MATCHERS = matchers;\n return matchers;\n }).catch((err)=>{\n console.log(\"Failed to fetch _devMiddlewareManifest\", err);\n });\n }\n // TODO Remove this assertion as this could be undefined\n return this.promisedMiddlewareMatchers;\n }\n }\n }\n getDataHref(params) {\n const { asPath, href, locale } = params;\n const { pathname: hrefPathname, query, search } = (0, _parserelativeurl.parseRelativeUrl)(href);\n const { pathname: asPathname } = (0, _parserelativeurl.parseRelativeUrl)(asPath);\n const route = (0, _removetrailingslash.removeTrailingSlash)(hrefPathname);\n if (route[0] !== '/') {\n throw Object.defineProperty(new Error('Route name should start with a \"/\", got \"' + route + '\"'), \"__NEXT_ERROR_CODE\", {\n value: \"E303\",\n enumerable: false,\n configurable: true\n });\n }\n const getHrefForSlug = (path)=>{\n const dataRoute = (0, _getassetpathfromroute.default)((0, _removetrailingslash.removeTrailingSlash)((0, _addlocale.addLocale)(path, locale)), '.json');\n return (0, _addbasepath.addBasePath)(\"/_next/data/\" + this.buildId + dataRoute + search, true);\n };\n return getHrefForSlug(params.skipInterpolation ? asPathname : (0, _isdynamic.isDynamicRoute)(route) ? (0, _interpolateas.interpolateAs)(hrefPathname, asPathname, query).result : route);\n }\n _isSsg(/** the route (file-system path) */ route) {\n return this.promisedSsgManifest.then((manifest)=>manifest.has(route));\n }\n loadPage(route) {\n return this.routeLoader.loadRoute(route).then((res)=>{\n if ('component' in res) {\n return {\n page: res.component,\n mod: res.exports,\n styleSheets: res.styles.map((o)=>({\n href: o.href,\n text: o.content\n }))\n };\n }\n throw res.error;\n });\n }\n prefetch(route) {\n return this.routeLoader.prefetch(route);\n }\n constructor(buildId, assetPrefix){\n this.routeLoader = (0, _routeloader.createRouteLoader)(assetPrefix);\n this.buildId = buildId;\n this.assetPrefix = assetPrefix;\n this.promisedSsgManifest = new Promise((resolve)=>{\n if (window.__SSG_MANIFEST) {\n resolve(window.__SSG_MANIFEST);\n } else {\n window.__SSG_MANIFEST_CB = ()=>{\n resolve(window.__SSG_MANIFEST);\n };\n }\n });\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=page-loader.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3BhZ2UtbG9hZGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7ZUFpQ3FCQTs7Ozt5Q0E5Qk87MkNBQ0U7NEZBQ0k7dUNBQ1I7dUNBQ0s7OENBQ0U7aURBQ0c7eUNBQ3NCO3VDQUtuRDtBQWtCUSxNQUFNQTtJQTBCbkJDLGNBQWM7UUFDWixJQUFJQyxLQUFvQixFQUFtQixFQUUxQyxNQUFNO1lBQ0wsSUFBSU8sT0FBT0Msb0JBQW9CLEVBQUU7Z0JBQy9CLE9BQU9ELE9BQU9DLG9CQUFvQixDQUFDQyxLQUFLO1lBQzFDLE9BQU87Z0JBQ0wsSUFBSSxDQUFDQyx3QkFBQUEsS0FBTCxJQUFJLENBQUNBLHdCQUFBQSxHQUE2QkMsTUFDN0IsSUFBSSxDQUFDQyxXQUFXLEdBQUMsK0JBQTRCQyxXQUFBQSx5QkFBeUIsRUFDekU7b0JBQUVDLGFBQWE7Z0JBQWMsR0FFNUJWLElBQUksQ0FBQyxDQUFDVyxNQUFRQSxJQUFJQyxJQUFJLElBQ3RCWixJQUFJLENBQUMsQ0FBQ0M7b0JBQ0xFLE9BQU9DLG9CQUFvQixHQUFHSDtvQkFDOUIsT0FBT0EsU0FBU0ksS0FBSztnQkFDdkIsR0FDQ1EsS0FBSyxDQUFDLENBQUNDO29CQUNOQyxRQUFRQyxHQUFHLENBQUUscUNBQW9DRjtvQkFDakQsTUFBTSxxQkFHTCxDQUhLLElBQUlHLE1BQ1AsMEZBQ0MsaUZBRkU7K0JBQUE7b0NBQUE7c0NBQUE7b0JBR047Z0JBQ0Y7Z0JBQ0YsT0FBTyxJQUFJLENBQUNYLHdCQUF3QjtZQUN0QztRQUNGO0lBQ0Y7SUFFQVksZ0JBQWdCO1FBQ2QscUJBQXFCO1FBQ3JCLElBQ0V0QixLQUNzQyxFQUN0QyxFQU9ELE1BQU0sSUFBSUEsS0FBb0IsRUFBbUIsRUF3QmpELE1BQU07WUFDTCxJQUFJTyxPQUFPd0IseUJBQXlCLEVBQUU7Z0JBQ3BDLE9BQU94QixPQUFPd0IseUJBQXlCO1lBQ3pDLE9BQU87Z0JBQ0wsSUFB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Q2dELFdBQVcsR0FBR2UsQ0FBQUEsR0FBQUEsYUFBQUEsaUJBQUFBLEVBQWtCL0Q7UUFFckMsSUFBSSxDQUFDZ0IsT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQ2hCLFdBQVcsR0FBR0E7UUFFbkIsSUFBSSxDQUFDNkMsbUJBQW1CLEdBQUcsSUFBSW1CLFFBQVEsQ0FBQ0M7WUFDdEMsSUFBSXRFLE9BQU91RSxjQUFjLEVBQUU7Z0JBQ3pCRCxRQUFRdEUsT0FBT3VFLGNBQWM7WUFDL0IsT0FBTztnQkFDTHZFLE9BQU93RSxpQkFBaUIsR0FBRztvQkFDekJGLFFBQVF0RSxPQUFPdUUsY0FBYztnQkFDL0I7WUFDRjtRQUNGO0lBQ0Y7QUF3SkYiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxccGFnZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJvdXRlTG9hZGVyIH0gZnJvbSAnLi9yb3V0ZS1sb2FkZXInXG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmVNYXRjaGVyIH0gZnJvbSAnLi4vYnVpbGQvYW5hbHlzaXMvZ2V0LXBhZ2Utc3RhdGljLWluZm8nXG5pbXBvcnQgeyBhZGRCYXNlUGF0aCB9IGZyb20gJy4vYWRkLWJhc2UtcGF0aCdcbmltcG9ydCB7IGludGVycG9sYXRlQXMgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbnRlcnBvbGF0ZS1hcydcbmltcG9ydCBnZXRBc3NldFBhdGhGcm9tUm91dGUgZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LWFzc2V0LXBhdGgtZnJvbS1yb3V0ZSdcbmltcG9ydCB7IGFkZExvY2FsZSB9IGZyb20gJy4vYWRkLWxvY2FsZSdcbmltcG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYydcbmltcG9ydCB7IHBhcnNlUmVsYXRpdmVVcmwgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1yZWxhdGl2ZS11cmwnXG5pbXBvcnQgeyByZW1vdmVUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVMb2FkZXIsIGdldENsaWVudEJ1aWxkTWFuaWZlc3QgfSBmcm9tICcuL3JvdXRlLWxvYWRlcidcbmltcG9ydCB7XG4gIERFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1QsXG4gIERFVl9DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVCxcbiAgVFVSQk9QQUNLX0NMSUVOVF9NSURETEVXQVJFX01BTklGRVNULFxufSBmcm9tICcuLi9zaGFyZWQvbGliL2NvbnN0YW50cydcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX0RFVl9NSURETEVXQVJFX01BVENIRVJTPzogTWlkZGxld2FyZU1hdGNoZXJbXVxuICAgIF9fREVWX1BBR0VTX01BTklGRVNUPzogeyBwYWdlczogc3RyaW5nW10gfVxuICAgIF9fU1NHX01BTklGRVNUX0NCPzogKCkgPT4gdm9pZFxuICAgIF9fU1NHX01BTklGRVNUPzogU2V0PHN0cmluZz5cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTdHlsZVNoZWV0VHVwbGUgPSB7IGhyZWY6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1cbmV4cG9ydCB0eXBlIEdvb2RQYWdlQ2FjaGUgPSB7XG4gIHBhZ2U6IENvbXBvbmVudFR5cGVcbiAgbW9kOiBhbnlcbiAgc3R5bGVTaGVldHM6IFN0eWxlU2hlZXRUdXBsZVtdXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2VMb2FkZXIge1xuICBwcml2YXRlIGJ1aWxkSWQ6IHN0cmluZ1xuICBwcml2YXRlIGFzc2V0UHJlZml4OiBzdHJpbmdcbiAgcHJpdmF0ZSBwcm9taXNlZFNzZ01hbmlmZXN0OiBQcm9taXNlPFNldDxzdHJpbmc+PlxuICBwcml2YXRlIHByb21pc2VkRGV2UGFnZXNNYW5pZmVzdD86IFByb21pc2U8c3RyaW5nW10+XG4gIHByaXZhdGUgcHJvbWlzZWRNaWRkbGV3YXJlTWF0Y2hlcnM/OiBQcm9taXNlPE1pZGRsZXdhcmVNYXRjaGVyW10+XG5cbiAgcHVibGljIHJvdXRlTG9hZGVyOiBSb3V0ZUxvYWRlclxuXG4gIGNvbnN0cnVjdG9yKGJ1aWxkSWQ6IHN0cmluZywgYXNzZXRQcmVmaXg6IHN0cmluZykge1xuICAgIHRoaXMucm91dGVMb2FkZXIgPSBjcmVhdGVSb3V0ZUxvYWRlcihhc3NldFByZWZpeClcblxuICAgIHRoaXMuYnVpbGRJZCA9IGJ1aWxkSWRcbiAgICB0aGlzLmFzc2V0UHJlZml4ID0gYXNzZXRQcmVmaXhcblxuICAgIHRoaXMucHJvbWlzZWRTc2dNYW5pZmVzdCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAod2luZG93Ll9fU1NHX01BTklGRVNUKSB7XG4gICAgICAgIHJlc29sdmUod2luZG93Ll9fU1NHX01BTklGRVNUKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93Ll9fU1NHX01BTklGRVNUX0NCID0gKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUod2luZG93Ll9fU1NHX01BTklGRVNUISlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXRQYWdlTGlzdCgpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmV0dXJuIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKS50aGVuKChtYW5pZmVzdCkgPT4gbWFuaWZlc3Quc29ydGVkUGFnZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh3aW5kb3cuX19ERVZfUEFHRVNfTUFOSUZFU1QpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5fX0RFVl9QQUdFU19NQU5JRkVTVC5wYWdlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9taXNlZERldlBhZ2VzTWFuaWZlc3QgfHw9IGZldGNoKFxuICAgICAgICAgIGAke3RoaXMuYXNzZXRQcmVmaXh9L19uZXh0L3N0YXRpYy9kZXZlbG9wbWVudC8ke0RFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1R9YCxcbiAgICAgICAgICB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nIH1cbiAgICAgICAgKVxuICAgICAgICAgIC50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG4gICAgICAgICAgLnRoZW4oKG1hbmlmZXN0OiB7IHBhZ2VzOiBzdHJpbmdbXSB9KSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuX19ERVZfUEFHRVNfTUFOSUZFU1QgPSBtYW5pZmVzdFxuICAgICAgICAgICAgcmV0dXJuIG1hbmlmZXN0LnBhZ2VzXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYEZhaWxlZCB0byBmZXRjaCBkZXZQYWdlc01hbmlmZXN0OmAsIGVycilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byBmZXRjaCBfZGV2UGFnZXNNYW5pZmVzdC5qc29uLiBJcyBzb21ldGhpbmcgYmxvY2tpbmcgdGhhdCBuZXR3b3JrIHJlcXVlc3Q/XFxuYCArXG4gICAgICAgICAgICAgICAgJ1JlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZmFpbGVkLXRvLWZldGNoLWRldnBhZ2VzbWFuaWZlc3QnXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZWREZXZQYWdlc01hbmlmZXN0XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0TWlkZGxld2FyZSgpIHtcbiAgICAvLyBXZWJwYWNrIHByb2R1Y3Rpb25cbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBwcm9jZXNzLmVudi5fX05FWFRfTUlERExFV0FSRV9NQVRDSEVSU1xuICAgICkge1xuICAgICAgY29uc3QgbWlkZGxld2FyZU1hdGNoZXJzID0gcHJvY2Vzcy5lbnYuX19ORVhUX01JRERMRVdBUkVfTUFUQ0hFUlNcbiAgICAgIHdpbmRvdy5fX01JRERMRVdBUkVfTUFUQ0hFUlMgPSBtaWRkbGV3YXJlTWF0Y2hlcnNcbiAgICAgICAgPyAobWlkZGxld2FyZU1hdGNoZXJzIGFzIGFueSBhcyBNaWRkbGV3YXJlTWF0Y2hlcltdKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIHdpbmRvdy5fX01JRERMRVdBUkVfTUFUQ0hFUlNcbiAgICAgIC8vIFR1cmJvcGFjayBwcm9kdWN0aW9uXG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAod2luZG93Ll9fTUlERExFV0FSRV9NQVRDSEVSUykge1xuICAgICAgICByZXR1cm4gd2luZG93Ll9fTUlERExFV0FSRV9NQVRDSEVSU1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLnByb21pc2VkTWlkZGxld2FyZU1hdGNoZXJzKSB7XG4gICAgICAgICAgLy8gVE9ETzogRGVjaWRlIHdoYXQgc2hvdWxkIGhhcHBlbiB3aGVuIGZldGNoaW5nIGZhaWxzIGluc3RlYWQgb2YgYXNzZXJ0aW5nXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHRoaXMucHJvbWlzZWRNaWRkbGV3YXJlTWF0Y2hlcnMgPSBmZXRjaChcbiAgICAgICAgICAgIGAke3RoaXMuYXNzZXRQcmVmaXh9L19uZXh0L3N0YXRpYy8ke3RoaXMuYnVpbGRJZH0vJHtUVVJCT1BBQ0tfQ0xJRU5UX01JRERMRVdBUkVfTUFOSUZFU1R9YCxcbiAgICAgICAgICAgIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHJlcy5qc29uKCkpXG4gICAgICAgICAgICAudGhlbigobWF0Y2hlcnM6IE1pZGRsZXdhcmVNYXRjaGVyW10pID0+IHtcbiAgICAgICAgICAgICAgd2luZG93Ll9fTUlERExFV0FSRV9NQVRDSEVSUyA9IG1hdGNoZXJzXG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gZmV0Y2ggX2Rldk1pZGRsZXdhcmVNYW5pZmVzdGAsIGVycilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBSZW1vdmUgdGhpcyBhc3NlcnRpb24gYXMgdGhpcyBjb3VsZCBiZSB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZWRNaWRkbGV3YXJlTWF0Y2hlcnMhXG4gICAgICB9XG4gICAgICAvLyBEZXZlbG9wbWVudCBib3RoIFR1cmJvcGFjayBhbmQgV2VicGFja1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAod2luZG93Ll9fREVWX01JRERMRVdBUkVfTUFUQ0hFUlMpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5fX0RFVl9NSURETEVXQVJFX01BVENIRVJTXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMucHJvbWlzZWRNaWRkbGV3YXJlTWF0Y2hlcnMpIHtcbiAgICAgICAgICAvLyBUT0RPOiBEZWNpZGUgd2hhdCBzaG91bGQgaGFwcGVuIHdoZW4gZmV0Y2hpbmcgZmFpbHMgaW5zdGVhZCBvZiBhc3NlcnRpbmdcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgdGhpcy5wcm9taXNlZE1pZGRsZXdhcmVNYXRjaGVycyA9IGZldGNoKFxuICAgICAgICAgICAgYCR7dGhpcy5hc3NldFByZWZpeH0vX25leHQvc3RhdGljLyR7dGhpcy5idWlsZElkfS8ke0RFVl9DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVH1gLFxuICAgICAgICAgICAgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9XG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmpzb24oKSlcbiAgICAgICAgICAgIC50aGVuKChtYXRjaGVyczogTWlkZGxld2FyZU1hdGNoZXJbXSkgPT4ge1xuICAgICAgICAgICAgICB3aW5kb3cuX19ERVZfTUlERExFV0FSRV9NQVRDSEVSUyA9IG1hdGNoZXJzXG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gZmV0Y2ggX2Rldk1pZGRsZXdhcmVNYW5pZmVzdGAsIGVycilcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETyBSZW1vdmUgdGhpcyBhc3NlcnRpb24gYXMgdGhpcyBjb3VsZCBiZSB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZWRNaWRkbGV3YXJlTWF0Y2hlcnMhXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YUhyZWYocGFyYW1zOiB7XG4gICAgYXNQYXRoOiBzdHJpbmdcbiAgICBocmVmOiBzdHJpbmdcbiAgICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZVxuICAgIHNraXBJbnRlcnBvbGF0aW9uPzogYm9vbGVhblxuICB9KTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGFzUGF0aCwgaHJlZiwgbG9jYWxlIH0gPSBwYXJhbXNcbiAgICBjb25zdCB7IHBhdGhuYW1lOiBocmVmUGF0aG5hbWUsIHF1ZXJ5LCBzZWFyY2ggfSA9IHBhcnNlUmVsYXRpdmVVcmwoaHJlZilcbiAgICBjb25zdCB7IHBhdGhuYW1lOiBhc1BhdGhuYW1lIH0gPSBwYXJzZVJlbGF0aXZlVXJsKGFzUGF0aClcbiAgICBjb25zdCByb3V0ZSA9IHJlbW92ZVRyYWlsaW5nU2xhc2goaHJlZlBhdGhuYW1lKVxuICAgIGlmIChyb3V0ZVswXSAhPT0gJy8nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdXRlIG5hbWUgc2hvdWxkIHN0YXJ0IHdpdGggYSBcIi9cIiwgZ290IFwiJHtyb3V0ZX1cImApXG4gICAgfVxuXG4gICAgY29uc3QgZ2V0SHJlZkZvclNsdWcgPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBkYXRhUm91dGUgPSBnZXRBc3NldFBhdGhGcm9tUm91dGUoXG4gICAgICAgIHJlbW92ZVRyYWlsaW5nU2xhc2goYWRkTG9jYWxlKHBhdGgsIGxvY2FsZSkpLFxuICAgICAgICAnLmpzb24nXG4gICAgICApXG4gICAgICByZXR1cm4gYWRkQmFzZVBhdGgoXG4gICAgICAgIGAvX25leHQvZGF0YS8ke3RoaXMuYnVpbGRJZH0ke2RhdGFSb3V0ZX0ke3NlYXJjaH1gLFxuICAgICAgICB0cnVlXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIGdldEhyZWZGb3JTbHVnKFxuICAgICAgcGFyYW1zLnNraXBJbnRlcnBvbGF0aW9uXG4gICAgICAgID8gYXNQYXRobmFtZVxuICAgICAgICA6IGlzRHluYW1pY1JvdXRlKHJvdXRlKVxuICAgICAgICAgID8gaW50ZXJwb2xhdGVBcyhocmVmUGF0aG5hbWUsIGFzUGF0aG5hbWUsIHF1ZXJ5KS5yZXN1bHRcbiAgICAgICAgICA6IHJvdXRlXG4gICAgKVxuICB9XG5cbiAgX2lzU3NnKFxuICAgIC8qKiB0aGUgcm91dGUgKGZpbGUtc3lzdGVtIHBhdGgpICovXG4gICAgcm91dGU6IHN0cmluZ1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlZFNzZ01hbmlmZXN0LnRoZW4oKG1hbmlmZXN0KSA9PiBtYW5pZmVzdC5oYXMocm91dGUpKVxuICB9XG5cbiAgbG9hZFBhZ2Uocm91dGU6IHN0cmluZyk6IFByb21pc2U8R29vZFBhZ2VDYWNoZT4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlTG9hZGVyLmxvYWRSb3V0ZShyb3V0ZSkudGhlbigocmVzKSA9PiB7XG4gICAgICBpZiAoJ2NvbXBvbmVudCcgaW4gcmVzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGFnZTogcmVzLmNvbXBvbmVudCxcbiAgICAgICAgICBtb2Q6IHJlcy5leHBvcnRzLFxuICAgICAgICAgIHN0eWxlU2hlZXRzOiByZXMuc3R5bGVzLm1hcCgobykgPT4gKHtcbiAgICAgICAgICAgIGhyZWY6IG8uaHJlZixcbiAgICAgICAgICAgIHRleHQ6IG8uY29udGVudCxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IHJlcy5lcnJvclxuICAgIH0pXG4gIH1cblxuICBwcmVmZXRjaChyb3V0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVMb2FkZXIucHJlZmV0Y2gocm91dGUpXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJQYWdlTG9hZGVyIiwiZ2V0UGFnZUxpc3QiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJnZXRDbGllbnRCdWlsZE1hbmlmZXN0IiwidGhlbiIsIm1hbmlmZXN0Iiwic29ydGVkUGFnZXMiLCJ3aW5kb3ciLCJfX0RFVl9QQUdFU19NQU5JRkVTVCIsInBhZ2VzIiwicHJvbWlzZWREZXZQYWdlc01hbmlmZXN0IiwiZmV0Y2giLCJhc3NldFByZWZpeCIsIkRFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1QiLCJjcmVkZW50aWFscyIsInJlcyIsImpzb24iLCJjYXRjaCIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJFcnJvciIsImdldE1pZGRsZXdhcmUiLCJfX05FWFRfTUlERExFV0FSRV9NQVRDSEVSUyIsIm1pZGRsZXdhcmVNYXRjaGVycyIsIl9fTUlERExFV0FSRV9NQVRDSEVSUyIsInVuZGVmaW5lZCIsInByb21pc2VkTWlkZGxld2FyZU1hdGNoZXJzIiwiYnVpbGRJZCIsIlRVUkJPUEFDS19DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVCIsIm1hdGNoZXJzIiwiX19ERVZfTUlERExFV0FSRV9NQVRDSEVSUyIsIkRFVl9DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVCIsImdldERhdGFIcmVmIiwicGFyYW1zIiwiYXNQYXRoIiwiaHJlZiIsImxvY2FsZSIsInBhdGhuYW1lIiwiaHJlZlBhdGhuYW1lIiwicXVlcnkiLCJzZWFyY2giLCJwYXJzZVJlbGF0aXZlVXJsIiwiYXNQYXRobmFtZSIsInJvdXRlIiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsImdldEhyZWZGb3JTbHVnIiwicGF0aCIsImRhdGFSb3V0ZSIsImdldEFzc2V0UGF0aEZyb21Sb3V0ZSIsImFkZExvY2FsZSIsImFkZEJhc2VQYXRoIiwic2tpcEludGVycG9sYXRpb24iLCJpc0R5bmFtaWNSb3V0ZSIsImludGVycG9sYXRlQXMiLCJyZXN1bHQiLCJfaXNTc2ciLCJwcm9taXNlZFNzZ01hbmlmZXN0IiwiaGFzIiwibG9hZFBhZ2UiLCJyb3V0ZUxvYWRlciIsImxvYWRSb3V0ZSIsInBhZ2UiLCJjb21wb25lbnQiLCJtb2QiLCJleHBvcnRzIiwic3R5bGVTaGVldHMiLCJzdHlsZXMiLCJtYXAiLCJvIiwidGV4dCIsImNvbnRlbnQiLCJlcnJvciIsInByZWZldGNoIiwiY29uc3RydWN0b3IiLCJjcmVhdGVSb3V0ZUxvYWRlciIsIlByb21pc2UiLCJyZXNvbHZlIiwiX19TU0dfTUFOSUZFU1QiLCJfX1NTR19NQU5JRkVTVF9DQiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/page-loader.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/portal/index.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/portal/index.js ***!
|
||
\*******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Portal\", ({\n enumerable: true,\n get: function() {\n return Portal;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\");\nconst _reactdom = __webpack_require__(/*! react-dom */ \"(pages-dir-browser)/./node_modules/react-dom/index.js\");\nconst Portal = (param)=>{\n let { children, type } = param;\n const [portalNode, setPortalNode] = (0, _react.useState)(null);\n (0, _react.useEffect)(()=>{\n const element = document.createElement(type);\n document.body.appendChild(element);\n setPortalNode(element);\n return ()=>{\n document.body.removeChild(element);\n };\n }, [\n type\n ]);\n return portalNode ? /*#__PURE__*/ (0, _reactdom.createPortal)(children, portalNode) : null;\n};\n_c = Portal;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\nvar _c;\n$RefreshReg$(_c, \"Portal\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3BvcnRhbC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7OzBDQVFhQTs7O2VBQUFBOzs7bUNBUnVCO3NDQUNQO0FBT3RCLGVBQWU7UUFBQyxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBZTtJQUNwRCxNQUFNLENBQUNDLFlBQVlDLGNBQWMsR0FBR0MsQ0FBQUEsR0FBQUEsT0FBQUEsUUFBQUEsRUFBNkI7SUFFakVDLENBQUFBLEdBQUFBLE9BQUFBLFNBQUFBLEVBQVU7UUFDUixNQUFNQyxVQUFVQyxTQUFTQyxhQUFhLENBQUNQO1FBQ3ZDTSxTQUFTRSxJQUFJLENBQUNDLFdBQVcsQ0FBQ0o7UUFDMUJILGNBQWNHO1FBQ2QsT0FBTztZQUNMQyxTQUFTRSxJQUFJLENBQUNFLFdBQVcsQ0FBQ0w7UUFDNUI7SUFDRixHQUFHO1FBQUNMO0tBQUs7SUFFVCxPQUFPQyxhQUFBQSxXQUFBQSxHQUFhVSxDQUFBQSxHQUFBQSxVQUFBQSxZQUFBQSxFQUFhWixVQUFVRSxjQUFjO0FBQzNEO0tBYmFIIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXHBvcnRhbFxcaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcblxudHlwZSBQb3J0YWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICB0eXBlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFBvcnRhbCA9ICh7IGNoaWxkcmVuLCB0eXBlIH06IFBvcnRhbFByb3BzKSA9PiB7XG4gIGNvbnN0IFtwb3J0YWxOb2RlLCBzZXRQb3J0YWxOb2RlXSA9IHVzZVN0YXRlPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KVxuICAgIHNldFBvcnRhbE5vZGUoZWxlbWVudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbGVtZW50KVxuICAgIH1cbiAgfSwgW3R5cGVdKVxuXG4gIHJldHVybiBwb3J0YWxOb2RlID8gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBwb3J0YWxOb2RlKSA6IG51bGxcbn1cbiJdLCJuYW1lcyI6WyJQb3J0YWwiLCJjaGlsZHJlbiIsInR5cGUiLCJwb3J0YWxOb2RlIiwic2V0UG9ydGFsTm9kZSIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiZWxlbWVudCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiY3JlYXRlUG9ydGFsIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/portal/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js":
|
||
/*!**************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js ***!
|
||
\**************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This module can be shared between both pages router and app router\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n isRecoverableError: function() {\n return isRecoverableError;\n },\n onRecoverableError: function() {\n return onRecoverableError;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _bailouttocsr = __webpack_require__(/*! ../../shared/lib/lazy-dynamic/bailout-to-csr */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../lib/is-error */ \"(pages-dir-browser)/./node_modules/next/dist/lib/is-error.js\"));\nconst _reportglobalerror = __webpack_require__(/*! ./report-global-error */ \"(pages-dir-browser)/./node_modules/next/dist/client/react-client-callbacks/report-global-error.js\");\nconst recoverableErrors = new WeakSet();\nfunction isRecoverableError(error) {\n return recoverableErrors.has(error);\n}\nconst onRecoverableError = (error, errorInfo)=>{\n // x-ref: https://github.com/facebook/react/pull/28736\n let cause = (0, _iserror.default)(error) && 'cause' in error ? error.cause : error;\n // Skip certain custom errors which are not expected to be reported on client\n if ((0, _bailouttocsr.isBailoutToCSRError)(cause)) return;\n if (true) {\n const { decorateDevError } = __webpack_require__(/*! ../../next-devtools/userspace/app/errors/stitched-error */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\n const causeError = decorateDevError(cause, errorInfo);\n recoverableErrors.add(causeError);\n cause = causeError;\n }\n (0, _reportglobalerror.reportGlobalError)(cause);\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=on-recoverable-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3Mvb24tcmVjb3ZlcmFibGUtZXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQUEscUVBQXFFOzs7Ozs7Ozs7Ozs7O0lBU3JEQSxrQkFBa0I7ZUFBbEJBOztJQUlIQyxrQkFBa0I7ZUFBbEJBOzs7OzBDQVZ1Qjs4RUFDaEI7K0NBQ2M7QUFFbEMsTUFBTUMsb0JBQW9CLElBQUlDO0FBRXZCLFNBQVNILG1CQUFtQkksS0FBWTtJQUM3QyxPQUFPRixrQkFBa0JHLEdBQUcsQ0FBQ0Q7QUFDL0I7QUFFTyxNQUFNSCxxQkFBNkQsQ0FDeEVHLE9BQ0FFO0lBRUEsc0RBQXNEO0lBQ3RELElBQUlDLFFBQVFDLENBQUFBLEdBQUFBLFNBQUFBLE9BQUFBLEVBQVFKLFVBQVUsV0FBV0EsUUFBUUEsTUFBTUcsS0FBSyxHQUFHSDtJQUMvRCw2RUFBNkU7SUFDN0UsSUFBSUssQ0FBQUEsR0FBQUEsY0FBQUEsbUJBQUFBLEVBQW9CRixRQUFRO0lBRWhDLElBQUlHLElBQW9CLEVBQW1CO1FBQ3pDLE1BQU0sRUFBRUcsZ0JBQWdCLEVBQUUsR0FDeEJDLG1CQUFPQSxDQUFDLGtLQUF5RDtRQUNuRSxNQUFNQyxhQUFhRixpQkFBaUJOLE9BQU9EO1FBQzNDSixrQkFBa0JjLEdBQUcsQ0FBQ0Q7UUFDdEJSLFFBQVFRO0lBQ1Y7SUFFQUUsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQlY7QUFDcEIiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxccmVhY3QtY2xpZW50LWNhbGxiYWNrc1xcb24tcmVjb3ZlcmFibGUtZXJyb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBtb2R1bGUgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGJvdGggcGFnZXMgcm91dGVyIGFuZCBhcHAgcm91dGVyXG5cbmltcG9ydCB0eXBlIHsgSHlkcmF0aW9uT3B0aW9ucyB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnXG5pbXBvcnQgeyBpc0JhaWxvdXRUb0NTUkVycm9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3InXG5pbXBvcnQgaXNFcnJvciBmcm9tICcuLi8uLi9saWIvaXMtZXJyb3InXG5pbXBvcnQgeyByZXBvcnRHbG9iYWxFcnJvciB9IGZyb20gJy4vcmVwb3J0LWdsb2JhbC1lcnJvcidcblxuY29uc3QgcmVjb3ZlcmFibGVFcnJvcnMgPSBuZXcgV2Vha1NldDxFcnJvcj4oKVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWNvdmVyYWJsZUVycm9yKGVycm9yOiBFcnJvcik6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVjb3ZlcmFibGVFcnJvcnMuaGFzKGVycm9yKVxufVxuXG5leHBvcnQgY29uc3Qgb25SZWNvdmVyYWJsZUVycm9yOiBIeWRyYXRpb25PcHRpb25zWydvblJlY292ZXJhYmxlRXJyb3InXSA9IChcbiAgZXJyb3IsXG4gIGVycm9ySW5mb1xuKSA9PiB7XG4gIC8vIHgtcmVmOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yODczNlxuICBsZXQgY2F1c2UgPSBpc0Vycm9yKGVycm9yKSAmJiAnY2F1c2UnIGluIGVycm9yID8gZXJyb3IuY2F1c2UgOiBlcnJvclxuICAvLyBTa2lwIGNlcnRhaW4gY3VzdG9tIGVycm9ycyB3aGljaCBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIHJlcG9ydGVkIG9uIGNsaWVudFxuICBpZiAoaXNCYWlsb3V0VG9DU1JFcnJvcihjYXVzZSkpIHJldHVyblxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc3QgeyBkZWNvcmF0ZURldkVycm9yIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9zdGl0Y2hlZC1lcnJvcicpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMvc3RpdGNoZWQtZXJyb3InKVxuICAgIGNvbnN0IGNhdXNlRXJyb3IgPSBkZWNvcmF0ZURldkVycm9yKGNhdXNlLCBlcnJvckluZm8pXG4gICAgcmVjb3ZlcmFibGVFcnJvcnMuYWRkKGNhdXNlRXJyb3IpXG4gICAgY2F1c2UgPSBjYXVzZUVycm9yXG4gIH1cblxuICByZXBvcnRHbG9iYWxFcnJvcihjYXVzZSlcbn1cbiJdLCJuYW1lcyI6WyJpc1JlY292ZXJhYmxlRXJyb3IiLCJvblJlY292ZXJhYmxlRXJyb3IiLCJyZWNvdmVyYWJsZUVycm9ycyIsIldlYWtTZXQiLCJlcnJvciIsImhhcyIsImVycm9ySW5mbyIsImNhdXNlIiwiaXNFcnJvciIsImlzQmFpbG91dFRvQ1NSRXJyb3IiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJkZWNvcmF0ZURldkVycm9yIiwicmVxdWlyZSIsImNhdXNlRXJyb3IiLCJhZGQiLCJyZXBvcnRHbG9iYWxFcnJvciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/react-client-callbacks/report-global-error.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/react-client-callbacks/report-global-error.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"reportGlobalError\", ({\n enumerable: true,\n get: function() {\n return reportGlobalError;\n }\n}));\nconst reportGlobalError = typeof reportError === 'function' ? reportError : (error)=>{\n // TODO: Dispatch error event\n globalThis.console.error(error);\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=report-global-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3MvcmVwb3J0LWdsb2JhbC1lcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7O3FEQUFhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSxvQkFDWCxPQUFPQyxnQkFBZ0IsYUFFbkIsY0FFQSxDQUFDQztJQUNDLDZCQUE2QjtJQUM3QkMsV0FBV0MsT0FBTyxDQUFDRixLQUFLLENBQUNBO0FBQzNCIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXHJlYWN0LWNsaWVudC1jYWxsYmFja3NcXHJlcG9ydC1nbG9iYWwtZXJyb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHJlcG9ydEdsb2JhbEVycm9yID1cbiAgdHlwZW9mIHJlcG9ydEVycm9yID09PSAnZnVuY3Rpb24nXG4gICAgPyAvLyBJbiBtb2Rlcm4gYnJvd3NlcnMsIHJlcG9ydEVycm9yIHdpbGwgZGlzcGF0Y2ggYW4gZXJyb3IgZXZlbnQsXG4gICAgICAvLyBlbXVsYXRpbmcgYW4gdW5jYXVnaHQgSmF2YVNjcmlwdCBlcnJvci5cbiAgICAgIHJlcG9ydEVycm9yXG4gICAgOiAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8gVE9ETzogRGlzcGF0Y2ggZXJyb3IgZXZlbnRcbiAgICAgICAgZ2xvYmFsVGhpcy5jb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgfVxuIl0sIm5hbWVzIjpbInJlcG9ydEdsb2JhbEVycm9yIiwicmVwb3J0RXJyb3IiLCJlcnJvciIsImdsb2JhbFRoaXMiLCJjb25zb2xlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/react-client-callbacks/report-global-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/remove-base-path.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/remove-base-path.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeBasePath\", ({\n enumerable: true,\n get: function() {\n return removeBasePath;\n }\n}));\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"(pages-dir-browser)/./node_modules/next/dist/client/has-base-path.js\");\nconst basePath = false || '';\nfunction removeBasePath(path) {\n if (false) {}\n // Can't trim the basePath if it has zero length!\n if (basePath.length === 0) return path;\n path = path.slice(basePath.length);\n if (!path.startsWith('/')) path = \"/\" + path;\n return path;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=remove-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlbW92ZS1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OztrREFJZ0JBOzs7ZUFBQUE7Ozt5Q0FKWTtBQUU1QixNQUFNQyxXQUFZQyxNQUFrQyxJQUFlO0FBRTVELFNBQVNGLGVBQWVLLElBQVk7SUFDekMsSUFBSUgsS0FBMEMsRUFBRSxFQUkvQztJQUVELGlEQUFpRDtJQUNqRCxJQUFJRCxTQUFTTyxNQUFNLEtBQUssR0FBRyxPQUFPSDtJQUVsQ0EsT0FBT0EsS0FBS0ksS0FBSyxDQUFDUixTQUFTTyxNQUFNO0lBQ2pDLElBQUksQ0FBQ0gsS0FBS0ssVUFBVSxDQUFDLE1BQU1MLE9BQVEsTUFBR0E7SUFDdEMsT0FBT0E7QUFDVCIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxyZW1vdmUtYmFzZS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhhc0Jhc2VQYXRoIH0gZnJvbSAnLi9oYXMtYmFzZS1wYXRoJ1xuXG5jb25zdCBiYXNlUGF0aCA9IChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIGFzIHN0cmluZykgfHwgJydcblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUJhc2VQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgpIHtcbiAgICBpZiAoIWhhc0Jhc2VQYXRoKHBhdGgpKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuXG4gIC8vIENhbid0IHRyaW0gdGhlIGJhc2VQYXRoIGlmIGl0IGhhcyB6ZXJvIGxlbmd0aCFcbiAgaWYgKGJhc2VQYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHBhdGhcblxuICBwYXRoID0gcGF0aC5zbGljZShiYXNlUGF0aC5sZW5ndGgpXG4gIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHBhdGggPSBgLyR7cGF0aH1gXG4gIHJldHVybiBwYXRoXG59XG4iXSwibmFtZXMiOlsicmVtb3ZlQmFzZVBhdGgiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsIl9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCIsImhhc0Jhc2VQYXRoIiwibGVuZ3RoIiwic2xpY2UiLCJzdGFydHNXaXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/remove-base-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/remove-locale.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/remove-locale.js ***!
|
||
\********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeLocale\", ({\n enumerable: true,\n get: function() {\n return removeLocale;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction removeLocale(path, locale) {\n if (false) {}\n return path;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=remove-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlbW92ZS1sb2NhbGUuanMiLCJtYXBwaW5ncyI6Ijs7OztnREFFZ0JBOzs7ZUFBQUE7Ozt1Q0FGVTtBQUVuQixTQUFTQSxhQUFhQyxJQUFZLEVBQUVDLE1BQWU7SUFDeEQsSUFBSUMsS0FBK0IsRUFBRSxFQVlwQztJQUNELE9BQU9GO0FBQ1QiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxccmVtb3ZlLWxvY2FsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZVBhdGggfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1wYXRoJ1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTG9jYWxlKHBhdGg6IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKSB7XG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgY29uc3QgeyBwYXRobmFtZSB9ID0gcGFyc2VQYXRoKHBhdGgpXG4gICAgY29uc3QgcGF0aExvd2VyID0gcGF0aG5hbWUudG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IGxvY2FsZUxvd2VyID0gbG9jYWxlPy50b0xvd2VyQ2FzZSgpXG5cbiAgICByZXR1cm4gbG9jYWxlICYmXG4gICAgICAocGF0aExvd2VyLnN0YXJ0c1dpdGgoYC8ke2xvY2FsZUxvd2VyfS9gKSB8fFxuICAgICAgICBwYXRoTG93ZXIgPT09IGAvJHtsb2NhbGVMb3dlcn1gKVxuICAgICAgPyBgJHtwYXRobmFtZS5sZW5ndGggPT09IGxvY2FsZS5sZW5ndGggKyAxID8gYC9gIDogYGB9JHtwYXRoLnNsaWNlKFxuICAgICAgICAgIGxvY2FsZS5sZW5ndGggKyAxXG4gICAgICAgICl9YFxuICAgICAgOiBwYXRoXG4gIH1cbiAgcmV0dXJuIHBhdGhcbn1cbiJdLCJuYW1lcyI6WyJyZW1vdmVMb2NhbGUiLCJwYXRoIiwibG9jYWxlIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9JMThOX1NVUFBPUlQiLCJwYXRobmFtZSIsInBhcnNlUGF0aCIsInBhdGhMb3dlciIsInRvTG93ZXJDYXNlIiwibG9jYWxlTG93ZXIiLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwic2xpY2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/remove-locale.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/request-idle-callback.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/request-idle-callback.js ***!
|
||
\****************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n cancelIdleCallback: function() {\n return cancelIdleCallback;\n },\n requestIdleCallback: function() {\n return requestIdleCallback;\n }\n});\nconst requestIdleCallback = typeof self !== 'undefined' && self.requestIdleCallback && self.requestIdleCallback.bind(window) || function(cb) {\n let start = Date.now();\n return self.setTimeout(function() {\n cb({\n didTimeout: false,\n timeRemaining: function() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n};\nconst cancelIdleCallback = typeof self !== 'undefined' && self.cancelIdleCallback && self.cancelIdleCallback.bind(window) || function(id) {\n return clearTimeout(id);\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=request-idle-callback.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlcXVlc3QtaWRsZS1jYWxsYmFjay5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFnQmFBLGtCQUFrQjtlQUFsQkE7O0lBaEJBQyxtQkFBbUI7ZUFBbkJBOzs7QUFBTixNQUFNQSxzQkFDVixPQUFPQyxTQUFTLGVBQ2ZBLEtBQUtELG1CQUFtQixJQUN4QkMsS0FBS0QsbUJBQW1CLENBQUNFLElBQUksQ0FBQ0MsV0FDaEMsU0FBVUMsRUFBdUI7SUFDL0IsSUFBSUMsUUFBUUMsS0FBS0MsR0FBRztJQUNwQixPQUFPTixLQUFLTyxVQUFVLENBQUM7UUFDckJKLEdBQUc7WUFDREssWUFBWTtZQUNaQyxlQUFlO2dCQUNiLE9BQU9DLEtBQUtDLEdBQUcsQ0FBQyxHQUFHLEtBQU1OLENBQUFBLEtBQUtDLEdBQUcsS0FBS0YsS0FBQUEsQ0FBSTtZQUM1QztRQUNGO0lBQ0YsR0FBRztBQUNMO0FBRUssTUFBTU4scUJBQ1YsT0FBT0UsU0FBUyxlQUNmQSxLQUFLRixrQkFBa0IsSUFDdkJFLEtBQUtGLGtCQUFrQixDQUFDRyxJQUFJLENBQUNDLFdBQy9CLFNBQVVVLEVBQVU7SUFDbEIsT0FBT0MsYUFBYUQ7QUFDdEIiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxccmVxdWVzdC1pZGxlLWNhbGxiYWNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCByZXF1ZXN0SWRsZUNhbGxiYWNrID1cbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHNlbGYucmVxdWVzdElkbGVDYWxsYmFjayAmJlxuICAgIHNlbGYucmVxdWVzdElkbGVDYWxsYmFjay5iaW5kKHdpbmRvdykpIHx8XG4gIGZ1bmN0aW9uIChjYjogSWRsZVJlcXVlc3RDYWxsYmFjayk6IG51bWJlciB7XG4gICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgIHJldHVybiBzZWxmLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgY2Ioe1xuICAgICAgICBkaWRUaW1lb3V0OiBmYWxzZSxcbiAgICAgICAgdGltZVJlbWFpbmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCA1MCAtIChEYXRlLm5vdygpIC0gc3RhcnQpKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LCAxKVxuICB9XG5cbmV4cG9ydCBjb25zdCBjYW5jZWxJZGxlQ2FsbGJhY2sgPVxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmXG4gICAgc2VsZi5jYW5jZWxJZGxlQ2FsbGJhY2sgJiZcbiAgICBzZWxmLmNhbmNlbElkbGVDYWxsYmFjay5iaW5kKHdpbmRvdykpIHx8XG4gIGZ1bmN0aW9uIChpZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGNsZWFyVGltZW91dChpZClcbiAgfVxuIl0sIm5hbWVzIjpbImNhbmNlbElkbGVDYWxsYmFjayIsInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJzZWxmIiwiYmluZCIsIndpbmRvdyIsImNiIiwic3RhcnQiLCJEYXRlIiwibm93Iiwic2V0VGltZW91dCIsImRpZFRpbWVvdXQiLCJ0aW1lUmVtYWluaW5nIiwiTWF0aCIsIm1heCIsImlkIiwiY2xlYXJUaW1lb3V0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/request-idle-callback.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/resolve-href.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/resolve-href.js ***!
|
||
\*******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"resolveHref\", ({\n enumerable: true,\n get: function() {\n return resolveHref;\n }\n}));\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _omit = __webpack_require__(/*! ../shared/lib/router/utils/omit */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(pages-dir-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _utils1 = __webpack_require__(/*! ../shared/lib/router/utils */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nfunction resolveHref(router, href, resolveAs) {\n // we use a dummy base url for relative urls\n let base;\n let urlAsString = typeof href === 'string' ? href : (0, _formaturl.formatWithValidation)(href);\n // repeated slashes and backslashes in the URL are considered\n // invalid and will never match a Next.js page/file\n // https://www.rfc-editor.org/rfc/rfc3986.html#section-3.1\n const urlProtoMatch = urlAsString.match(/^[a-z][a-z0-9+.-]*:\\/\\//i);\n const urlAsStringNoProto = urlProtoMatch ? urlAsString.slice(urlProtoMatch[0].length) : urlAsString;\n const urlParts = urlAsStringNoProto.split('?', 1);\n if ((urlParts[0] || '').match(/(\\/\\/|\\\\)/)) {\n console.error(\"Invalid href '\" + urlAsString + \"' passed to next/router in page: '\" + router.pathname + \"'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.\");\n const normalizedUrl = (0, _utils.normalizeRepeatedSlashes)(urlAsStringNoProto);\n urlAsString = (urlProtoMatch ? urlProtoMatch[0] : '') + normalizedUrl;\n }\n // Return because it cannot be routed by the Next.js router\n if (!(0, _islocalurl.isLocalURL)(urlAsString)) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n try {\n base = new URL(urlAsString.startsWith('#') ? router.asPath : router.pathname, 'http://n');\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n base = new URL('/', 'http://n');\n }\n try {\n const finalUrl = new URL(urlAsString, base);\n finalUrl.pathname = (0, _normalizetrailingslash.normalizePathTrailingSlash)(finalUrl.pathname);\n let interpolatedAs = '';\n if ((0, _utils1.isDynamicRoute)(finalUrl.pathname) && finalUrl.searchParams && resolveAs) {\n const query = (0, _querystring.searchParamsToUrlQuery)(finalUrl.searchParams);\n const { result, params } = (0, _interpolateas.interpolateAs)(finalUrl.pathname, finalUrl.pathname, query);\n if (result) {\n interpolatedAs = (0, _formaturl.formatWithValidation)({\n pathname: result,\n hash: finalUrl.hash,\n query: (0, _omit.omit)(query, params)\n });\n }\n }\n // if the origin didn't change, it means we received a relative href\n const resolvedHref = finalUrl.origin === base.origin ? finalUrl.href.slice(finalUrl.origin.length) : finalUrl.href;\n return resolveAs ? [\n resolvedHref,\n interpolatedAs || resolvedHref\n ] : resolvedHref;\n } catch (_) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=resolve-href.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3Jlc29sdmUtaHJlZi5qcyIsIm1hcHBpbmdzIjoiOzs7OytDQXlCZ0JBOzs7ZUFBQUE7Ozt5Q0F2QnVCO3VDQUNGO2tDQUNoQjttQ0FDb0I7b0RBQ0U7d0NBQ2hCO29DQUNJOzJDQUNEO0FBZ0J2QixTQUFTQSxZQUNkQyxNQUFrQixFQUNsQkMsSUFBUyxFQUNUQyxTQUFtQjtJQUVuQiw0Q0FBNEM7SUFDNUMsSUFBSUM7SUFDSixJQUFJQyxjQUFjLE9BQU9ILFNBQVMsV0FBV0EsT0FBT0ksQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBLEVBQXFCSjtJQUV6RSw2REFBNkQ7SUFDN0QsbURBQW1EO0lBQ25ELDBEQUEwRDtJQUMxRCxNQUFNSyxnQkFBZ0JGLFlBQVlHLEtBQUssQ0FBQztJQUN4QyxNQUFNQyxxQkFBcUJGLGdCQUN2QkYsWUFBWUssS0FBSyxDQUFDSCxhQUFhLENBQUMsRUFBRSxDQUFDSSxNQUFNLElBQ3pDTjtJQUVKLE1BQU1PLFdBQVdILG1CQUFtQkksS0FBSyxDQUFDLEtBQUs7SUFFL0MsSUFBS0QsQ0FBQUEsUUFBUSxDQUFDLEVBQUUsSUFBSSxHQUFDLENBQUdKLEtBQUssQ0FBQyxjQUFjO1FBQzFDTSxRQUFRQyxLQUFLLENBQ1YsbUJBQWdCVixjQUFZLHVDQUFvQ0osT0FBT2UsUUFBUSxHQUFDO1FBRW5GLE1BQU1DLGdCQUFnQkMsQ0FBQUEsR0FBQUEsT0FBQUEsd0JBQUFBLEVBQXlCVDtRQUMvQ0osY0FBZUUsQ0FBQUEsZ0JBQWdCQSxhQUFhLENBQUMsRUFBRSxHQUFHLEdBQUMsR0FBS1U7SUFDMUQ7SUFFQSwyREFBMkQ7SUFDM0QsSUFBSSxDQUFDRSxDQUFBQSxHQUFBQSxZQUFBQSxVQUFBQSxFQUFXZCxjQUFjO1FBQzVCLE9BQVFGLFlBQVk7WUFBQ0U7U0FBWSxHQUFHQTtJQUN0QztJQUVBLElBQUk7UUFDRkQsT0FBTyxJQUFJZ0IsSUFDVGYsWUFBWWdCLFVBQVUsQ0FBQyxPQUFPcEIsT0FBT3FCLE1BQU0sR0FBR3JCLE9BQU9lLFFBQVEsRUFDN0Q7SUFFSixFQUFFLE9BQU9PLEdBQUc7UUFDVixrREFBa0Q7UUFDbERuQixPQUFPLElBQUlnQixJQUFJLEtBQUs7SUFDdEI7SUFFQSxJQUFJO1FBQ0YsTUFBTUksV0FBVyxJQUFJSixJQUFJZixhQUFhRDtRQUN0Q29CLFNBQVNSLFFBQVEsR0FBR1MsQ0FBQUEsR0FBQUEsd0JBQUFBLDBCQUFBQSxFQUEyQkQsU0FBU1IsUUFBUTtRQUNoRSxJQUFJVSxpQkFBaUI7UUFFckIsSUFDRUMsQ0FBQUEsR0FBQUEsUUFBQUEsY0FBQUEsRUFBZUgsU0FBU1IsUUFBUSxLQUNoQ1EsU0FBU0ksWUFBWSxJQUNyQnpCLFdBQ0E7WUFDQSxNQUFNMEIsUUFBUUMsQ0FBQUEsR0FBQUEsYUFBQUEsc0JBQXNCLEVBQUNOLFNBQVNJLFlBQVk7WUFFMUQsTUFBTSxFQUFFRyxNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFhLEVBQ3RDVCxTQUFTUixRQUFRLEVBQ2pCUSxTQUFTUixRQUFRLEVBQ2pCYTtZQUdGLElBQUlFLFFBQVE7Z0JBQ1ZMLGlCQUFpQnBCLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFvQixFQUFDO29CQUNwQ1UsVUFBVWU7b0JBQ1ZHLE1BQU1WLFNBQVNVLElBQUk7b0JBQ25CTCxPQUFPTSxDQUFBQSxHQUFBQSxNQUFBQSxJQUFBQSxFQUFLTixPQUFPRztnQkFDckI7WUFDRjtRQUNGO1FBRUEsb0VBQW9FO1FBQ3BFLE1BQU1JLGVBQ0paLFNBQVNhLE1BQU0sS0FBS2pDLEtBQUtpQyxNQUFNLEdBQzNCYixTQUFTdEIsSUFBSSxDQUFDUSxLQUFLLENBQUNjLFNBQVNhLE1BQU0sQ0FBQzFCLE1BQU0sSUFDMUNhLFNBQVN0QixJQUFJO1FBRW5CLE9BQU9DLFlBQ0g7WUFBQ2lDO1lBQWNWLGtCQUFrQlU7U0FBYSxHQUM5Q0E7SUFDTixFQUFFLE9BQU9iLEdBQUc7UUFDVixPQUFPcEIsWUFBWTtZQUFDRTtTQUFZLEdBQUdBO0lBQ3JDO0FBQ0YiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxccmVzb2x2ZS1ocmVmLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTmV4dFJvdXRlciwgVXJsIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyJ1xuXG5pbXBvcnQgeyBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcnXG5pbXBvcnQgeyBmb3JtYXRXaXRoVmFsaWRhdGlvbiB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvb21pdCdcbmltcG9ydCB7IG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyB9IGZyb20gJy4uL3NoYXJlZC9saWIvdXRpbHMnXG5pbXBvcnQgeyBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCB9IGZyb20gJy4vbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoJ1xuaW1wb3J0IHsgaXNMb2NhbFVSTCB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWxvY2FsLXVybCdcbmltcG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMnXG5pbXBvcnQgeyBpbnRlcnBvbGF0ZUFzIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJwb2xhdGUtYXMnXG5cbi8qKlxuICogUmVzb2x2ZXMgYSBnaXZlbiBoeXBlcmxpbmsgd2l0aCBhIGNlcnRhaW4gcm91dGVyIHN0YXRlIChiYXNlUGF0aCBub3QgaW5jbHVkZWQpLlxuICogUHJlc2VydmVzIGFic29sdXRlIHVybHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSHJlZihcbiAgcm91dGVyOiBOZXh0Um91dGVyLFxuICBocmVmOiBVcmwsXG4gIHJlc29sdmVBczogdHJ1ZVxuKTogW3N0cmluZywgc3RyaW5nXSB8IFtzdHJpbmddXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUhyZWYoXG4gIHJvdXRlcjogTmV4dFJvdXRlcixcbiAgaHJlZjogVXJsLFxuICByZXNvbHZlQXM/OiBmYWxzZVxuKTogc3RyaW5nXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUhyZWYoXG4gIHJvdXRlcjogTmV4dFJvdXRlcixcbiAgaHJlZjogVXJsLFxuICByZXNvbHZlQXM/OiBib29sZWFuXG4pOiBbc3RyaW5nLCBzdHJpbmddIHwgW3N0cmluZ10gfCBzdHJpbmcge1xuICAvLyB3ZSB1c2UgYSBkdW1teSBiYXNlIHVybCBmb3IgcmVsYXRpdmUgdXJsc1xuICBsZXQgYmFzZTogVVJMXG4gIGxldCB1cmxBc1N0cmluZyA9IHR5cGVvZiBocmVmID09PSAnc3RyaW5nJyA/IGhyZWYgOiBmb3JtYXRXaXRoVmFsaWRhdGlvbihocmVmKVxuXG4gIC8vIHJlcGVhdGVkIHNsYXNoZXMgYW5kIGJhY2tzbGFzaGVzIGluIHRoZSBVUkwgYXJlIGNvbnNpZGVyZWRcbiAgLy8gaW52YWxpZCBhbmQgd2lsbCBuZXZlciBtYXRjaCBhIE5leHQuanMgcGFnZS9maWxlXG4gIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzOTg2Lmh0bWwjc2VjdGlvbi0zLjFcbiAgY29uc3QgdXJsUHJvdG9NYXRjaCA9IHVybEFzU3RyaW5nLm1hdGNoKC9eW2Etel1bYS16MC05Ky4tXSo6XFwvXFwvL2kpXG4gIGNvbnN0IHVybEFzU3RyaW5nTm9Qcm90byA9IHVybFByb3RvTWF0Y2hcbiAgICA/IHVybEFzU3RyaW5nLnNsaWNlKHVybFByb3RvTWF0Y2hbMF0ubGVuZ3RoKVxuICAgIDogdXJsQXNTdHJpbmdcblxuICBjb25zdCB1cmxQYXJ0cyA9IHVybEFzU3RyaW5nTm9Qcm90by5zcGxpdCgnPycsIDEpXG5cbiAgaWYgKCh1cmxQYXJ0c1swXSB8fCAnJykubWF0Y2goLyhcXC9cXC98XFxcXCkvKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgSW52YWxpZCBocmVmICcke3VybEFzU3RyaW5nfScgcGFzc2VkIHRvIG5leHQvcm91dGVyIGluIHBhZ2U6ICcke3JvdXRlci5wYXRobmFtZX0nLiBSZXBlYXRlZCBmb3J3YXJkLXNsYXNoZXMgKC8vKSBvciBiYWNrc2xhc2hlcyBcXFxcIGFyZSBub3QgdmFsaWQgaW4gdGhlIGhyZWYuYFxuICAgIClcbiAgICBjb25zdCBub3JtYWxpemVkVXJsID0gbm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzKHVybEFzU3RyaW5nTm9Qcm90bylcbiAgICB1cmxBc1N0cmluZyA9ICh1cmxQcm90b01hdGNoID8gdXJsUHJvdG9NYXRjaFswXSA6ICcnKSArIG5vcm1hbGl6ZWRVcmxcbiAgfVxuXG4gIC8vIFJldHVybiBiZWNhdXNlIGl0IGNhbm5vdCBiZSByb3V0ZWQgYnkgdGhlIE5leHQuanMgcm91dGVyXG4gIGlmICghaXNMb2NhbFVSTCh1cmxBc1N0cmluZykpIHtcbiAgICByZXR1cm4gKHJlc29sdmVBcyA/IFt1cmxBc1N0cmluZ10gOiB1cmxBc1N0cmluZykgYXMgc3RyaW5nXG4gIH1cblxuICB0cnkge1xuICAgIGJhc2UgPSBuZXcgVVJMKFxuICAgICAgdXJsQXNTdHJpbmcuc3RhcnRzV2l0aCgnIycpID8gcm91dGVyLmFzUGF0aCA6IHJvdXRlci5wYXRobmFtZSxcbiAgICAgICdodHRwOi8vbidcbiAgICApXG4gIH0gY2F0Y2ggKF8pIHtcbiAgICAvLyBmYWxsYmFjayB0byAvIGZvciBpbnZhbGlkIGFzUGF0aCB2YWx1ZXMgZS5nLiAvL1xuICAgIGJhc2UgPSBuZXcgVVJMKCcvJywgJ2h0dHA6Ly9uJylcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZmluYWxVcmwgPSBuZXcgVVJMKHVybEFzU3RyaW5nLCBiYXNlKVxuICAgIGZpbmFsVXJsLnBhdGhuYW1lID0gbm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2goZmluYWxVcmwucGF0aG5hbWUpXG4gICAgbGV0IGludGVycG9sYXRlZEFzID0gJydcblxuICAgIGlmIChcbiAgICAgIGlzRHluYW1pY1JvdXRlKGZpbmFsVXJsLnBhdGhuYW1lKSAmJlxuICAgICAgZmluYWxVcmwuc2VhcmNoUGFyYW1zICYmXG4gICAgICByZXNvbHZlQXNcbiAgICApIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gc2VhcmNoUGFyYW1zVG9VcmxRdWVyeShmaW5hbFVybC5zZWFyY2hQYXJhbXMpXG5cbiAgICAgIGNvbnN0IHsgcmVzdWx0LCBwYXJhbXMgfSA9IGludGVycG9sYXRlQXMoXG4gICAgICAgIGZpbmFsVXJsLnBhdGhuYW1lLFxuICAgICAgICBmaW5hbFVybC5wYXRobmFtZSxcbiAgICAgICAgcXVlcnlcbiAgICAgIClcblxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBpbnRlcnBvbGF0ZWRBcyA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHtcbiAgICAgICAgICBwYXRobmFtZTogcmVzdWx0LFxuICAgICAgICAgIGhhc2g6IGZpbmFsVXJsLmhhc2gsXG4gICAgICAgICAgcXVlcnk6IG9taXQocXVlcnksIHBhcmFtcyksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIG9yaWdpbiBkaWRuJ3QgY2hhbmdlLCBpdCBtZWFucyB3ZSByZWNlaXZlZCBhIHJlbGF0aXZlIGhyZWZcbiAgICBjb25zdCByZXNvbHZlZEhyZWYgPVxuICAgICAgZmluYWxVcmwub3JpZ2luID09PSBiYXNlLm9yaWdpblxuICAgICAgICA/IGZpbmFsVXJsLmhyZWYuc2xpY2UoZmluYWxVcmwub3JpZ2luLmxlbmd0aClcbiAgICAgICAgOiBmaW5hbFVybC5ocmVmXG5cbiAgICByZXR1cm4gcmVzb2x2ZUFzXG4gICAgICA/IFtyZXNvbHZlZEhyZWYsIGludGVycG9sYXRlZEFzIHx8IHJlc29sdmVkSHJlZl1cbiAgICAgIDogcmVzb2x2ZWRIcmVmXG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gcmVzb2x2ZUFzID8gW3VybEFzU3RyaW5nXSA6IHVybEFzU3RyaW5nXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJyZXNvbHZlSHJlZiIsInJvdXRlciIsImhyZWYiLCJyZXNvbHZlQXMiLCJiYXNlIiwidXJsQXNTdHJpbmciLCJmb3JtYXRXaXRoVmFsaWRhdGlvbiIsInVybFByb3RvTWF0Y2giLCJtYXRjaCIsInVybEFzU3RyaW5nTm9Qcm90byIsInNsaWNlIiwibGVuZ3RoIiwidXJsUGFydHMiLCJzcGxpdCIsImNvbnNvbGUiLCJlcnJvciIsInBhdGhuYW1lIiwibm9ybWFsaXplZFVybCIsIm5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyIsImlzTG9jYWxVUkwiLCJVUkwiLCJzdGFydHNXaXRoIiwiYXNQYXRoIiwiXyIsImZpbmFsVXJsIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJpbnRlcnBvbGF0ZWRBcyIsImlzRHluYW1pY1JvdXRlIiwic2VhcmNoUGFyYW1zIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwicmVzdWx0IiwicGFyYW1zIiwiaW50ZXJwb2xhdGVBcyIsImhhc2giLCJvbWl0IiwicmVzb2x2ZWRIcmVmIiwib3JpZ2luIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/resolve-href.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/route-announcer.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/route-announcer.js ***!
|
||
\**********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RouteAnnouncer: function() {\n return RouteAnnouncer;\n },\n default: function() {\n return _default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst _router = __webpack_require__(/*! ./router */ \"(pages-dir-browser)/./node_modules/next/dist/client/router.js\");\nconst nextjsRouteAnnouncerStyles = {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n top: 0,\n width: '1px',\n // https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe\n whiteSpace: 'nowrap',\n wordWrap: 'normal'\n};\nconst RouteAnnouncer = ()=>{\n _s();\n const { asPath } = (0, _router.useRouter)();\n const [routeAnnouncement, setRouteAnnouncement] = _react.default.useState('');\n // Only announce the path change, but not for the first load because screen\n // reader will do that automatically.\n const previouslyLoadedPath = _react.default.useRef(asPath);\n // Every time the path changes, announce the new page’s title following this\n // priority: first the document title (from head), otherwise the first h1, or\n // if none of these exist, then the pathname from the URL. This methodology is\n // inspired by Marcy Sutton’s accessible client routing user testing. More\n // information can be found here:\n // https://www.gatsbyjs.com/blog/2019-07-11-user-testing-accessible-client-routing/\n _react.default.useEffect({\n \"RouteAnnouncer.useEffect\": ()=>{\n // If the path hasn't change, we do nothing.\n if (previouslyLoadedPath.current === asPath) return;\n previouslyLoadedPath.current = asPath;\n if (document.title) {\n setRouteAnnouncement(document.title);\n } else {\n const pageHeader = document.querySelector('h1');\n var _pageHeader_innerText;\n const content = (_pageHeader_innerText = pageHeader == null ? void 0 : pageHeader.innerText) != null ? _pageHeader_innerText : pageHeader == null ? void 0 : pageHeader.textContent;\n setRouteAnnouncement(content || asPath);\n }\n }\n }[\"RouteAnnouncer.useEffect\"], [\n asPath\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n \"aria-live\": \"assertive\" // Make the announcement immediately.\n ,\n id: \"__next-route-announcer__\",\n role: \"alert\",\n style: nextjsRouteAnnouncerStyles,\n children: routeAnnouncement\n });\n};\n_s(RouteAnnouncer, \"/W0p/lKvDcDf5qahTtmgH0KR5eY=\");\n_c = RouteAnnouncer;\nconst _default = RouteAnnouncer;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=route-announcer.js.map\nvar _c;\n$RefreshReg$(_c, \"RouteAnnouncer\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JvdXRlLWFubm91bmNlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztJQW1CYUEsY0FBYztlQUFkQTs7SUE2Q2IsT0FBNkI7ZUFBN0I7Ozs7OzRFQWhFa0I7b0NBQ1E7QUFFMUIsTUFBTUMsNkJBQWtEO0lBQ3REQyxRQUFRO0lBQ1JDLE1BQU07SUFDTkMsUUFBUTtJQUNSQyxRQUFRO0lBQ1JDLFVBQVU7SUFDVkMsU0FBUztJQUNUQyxVQUFVO0lBQ1ZDLEtBQUs7SUFDTEMsT0FBTztJQUVQLHdGQUF3RjtJQUN4RkMsWUFBWTtJQUNaQyxVQUFVO0FBQ1o7QUFFTyx1QkFBdUI7O0lBQzVCLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFFBQUFBLFNBQVM7SUFDNUIsTUFBTSxDQUFDQyxtQkFBbUJDLHFCQUFxQixHQUFHQyxPQUFBQSxPQUFLLENBQUNDLFFBQVEsQ0FBQztJQUVqRSwyRUFBMkU7SUFDM0UscUNBQXFDO0lBQ3JDLE1BQU1DLHVCQUF1QkYsT0FBQUEsT0FBSyxDQUFDRyxNQUFNLENBQUNQO0lBRTFDLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsOEVBQThFO0lBQzlFLDBFQUEwRTtJQUMxRSxpQ0FBaUM7SUFDakMsbUZBQW1GO0lBQ25GSSxPQUFBQSxPQUFLLENBQUNJLFNBQVM7b0NBQ2I7WUFDRSw0Q0FBNEM7WUFDNUMsSUFBSUYscUJBQXFCRyxPQUFPLEtBQUtULFFBQVE7WUFDN0NNLHFCQUFxQkcsT0FBTyxHQUFHVDtZQUUvQixJQUFJVSxTQUFTQyxLQUFLLEVBQUU7Z0JBQ2xCUixxQkFBcUJPLFNBQVNDLEtBQUs7WUFDckMsT0FBTztnQkFDTCxNQUFNQyxhQUFhRixTQUFTRyxhQUFhLENBQUM7b0JBQzFCRDtnQkFBaEIsTUFBTUUsVUFBVUYsQ0FBQUEsd0JBQUFBLGNBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFdBQVlHLFNBQUFBLEtBQVMsT0FBckJILHdCQUF5QkEsY0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsV0FBWUksV0FBVztnQkFFaEViLHFCQUFxQlcsV0FBV2Q7WUFDbEM7UUFDRjttQ0FFQTtRQUFDQTtLQUFPO0lBR1YscUJBQ0UscUJBQUNpQixLQUFBQTtRQUNDQyxhQUFVLFlBQVkscUNBQXFDOztRQUMzREMsSUFBRztRQUNIQyxNQUFLO1FBQ0xDLE9BQU9qQztrQkFFTmM7O0FBR1A7O0tBM0NhZjtNQTZDYixXQUFlQSIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxyb3V0ZS1hbm5vdW5jZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJy4vcm91dGVyJ1xuXG5jb25zdCBuZXh0anNSb3V0ZUFubm91bmNlclN0eWxlczogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgYm9yZGVyOiAwLFxuICBjbGlwOiAncmVjdCgwIDAgMCAwKScsXG4gIGhlaWdodDogJzFweCcsXG4gIG1hcmdpbjogJy0xcHgnLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBhZGRpbmc6IDAsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB0b3A6IDAsXG4gIHdpZHRoOiAnMXB4JyxcblxuICAvLyBodHRwczovL21lZGl1bS5jb20vQGplc3NlYmVhY2gvYmV3YXJlLXNtdXNoZWQtb2ZmLXNjcmVlbi1hY2Nlc3NpYmxlLXRleHQtNTk1MmE0YzJjYmZlXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICB3b3JkV3JhcDogJ25vcm1hbCcsXG59XG5cbmV4cG9ydCBjb25zdCBSb3V0ZUFubm91bmNlciA9ICgpID0+IHtcbiAgY29uc3QgeyBhc1BhdGggfSA9IHVzZVJvdXRlcigpXG4gIGNvbnN0IFtyb3V0ZUFubm91bmNlbWVudCwgc2V0Um91dGVBbm5vdW5jZW1lbnRdID0gUmVhY3QudXNlU3RhdGUoJycpXG5cbiAgLy8gT25seSBhbm5vdW5jZSB0aGUgcGF0aCBjaGFuZ2UsIGJ1dCBub3QgZm9yIHRoZSBmaXJzdCBsb2FkIGJlY2F1c2Ugc2NyZWVuXG4gIC8vIHJlYWRlciB3aWxsIGRvIHRoYXQgYXV0b21hdGljYWxseS5cbiAgY29uc3QgcHJldmlvdXNseUxvYWRlZFBhdGggPSBSZWFjdC51c2VSZWYoYXNQYXRoKVxuXG4gIC8vIEV2ZXJ5IHRpbWUgdGhlIHBhdGggY2hhbmdlcywgYW5ub3VuY2UgdGhlIG5ldyBwYWdl4oCZcyB0aXRsZSBmb2xsb3dpbmcgdGhpc1xuICAvLyBwcmlvcml0eTogZmlyc3QgdGhlIGRvY3VtZW50IHRpdGxlIChmcm9tIGhlYWQpLCBvdGhlcndpc2UgdGhlIGZpcnN0IGgxLCBvclxuICAvLyBpZiBub25lIG9mIHRoZXNlIGV4aXN0LCB0aGVuIHRoZSBwYXRobmFtZSBmcm9tIHRoZSBVUkwuIFRoaXMgbWV0aG9kb2xvZ3kgaXNcbiAgLy8gaW5zcGlyZWQgYnkgTWFyY3kgU3V0dG9u4oCZcyBhY2Nlc3NpYmxlIGNsaWVudCByb3V0aW5nIHVzZXIgdGVzdGluZy4gTW9yZVxuICAvLyBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaGVyZTpcbiAgLy8gaHR0cHM6Ly93d3cuZ2F0c2J5anMuY29tL2Jsb2cvMjAxOS0wNy0xMS11c2VyLXRlc3RpbmctYWNjZXNzaWJsZS1jbGllbnQtcm91dGluZy9cbiAgUmVhY3QudXNlRWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIC8vIElmIHRoZSBwYXRoIGhhc24ndCBjaGFuZ2UsIHdlIGRvIG5vdGhpbmcuXG4gICAgICBpZiAocHJldmlvdXNseUxvYWRlZFBhdGguY3VycmVudCA9PT0gYXNQYXRoKSByZXR1cm5cbiAgICAgIHByZXZpb3VzbHlMb2FkZWRQYXRoLmN1cnJlbnQgPSBhc1BhdGhcblxuICAgICAgaWYgKGRvY3VtZW50LnRpdGxlKSB7XG4gICAgICAgIHNldFJvdXRlQW5ub3VuY2VtZW50KGRvY3VtZW50LnRpdGxlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFnZUhlYWRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2gxJylcbiAgICAgICAgY29uc3QgY29udGVudCA9IHBhZ2VIZWFkZXI/LmlubmVyVGV4dCA/PyBwYWdlSGVhZGVyPy50ZXh0Q29udGVudFxuXG4gICAgICAgIHNldFJvdXRlQW5ub3VuY2VtZW50KGNvbnRlbnQgfHwgYXNQYXRoKVxuICAgICAgfVxuICAgIH0sXG4gICAgLy8gVE9ETzogc3dpdGNoIHRvIHBhdGhuYW1lICsgcXVlcnkgb2JqZWN0IG9mIGR5bmFtaWMgcm91dGUgcmVxdWlyZW1lbnRzXG4gICAgW2FzUGF0aF1cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPHBcbiAgICAgIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIC8vIE1ha2UgdGhlIGFubm91bmNlbWVudCBpbW1lZGlhdGVseS5cbiAgICAgIGlkPVwiX19uZXh0LXJvdXRlLWFubm91bmNlcl9fXCJcbiAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICBzdHlsZT17bmV4dGpzUm91dGVBbm5vdW5jZXJTdHlsZXN9XG4gICAgPlxuICAgICAge3JvdXRlQW5ub3VuY2VtZW50fVxuICAgIDwvcD5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZUFubm91bmNlclxuIl0sIm5hbWVzIjpbIlJvdXRlQW5ub3VuY2VyIiwibmV4dGpzUm91dGVBbm5vdW5jZXJTdHlsZXMiLCJib3JkZXIiLCJjbGlwIiwiaGVpZ2h0IiwibWFyZ2luIiwib3ZlcmZsb3ciLCJwYWRkaW5nIiwicG9zaXRpb24iLCJ0b3AiLCJ3aWR0aCIsIndoaXRlU3BhY2UiLCJ3b3JkV3JhcCIsImFzUGF0aCIsInVzZVJvdXRlciIsInJvdXRlQW5ub3VuY2VtZW50Iiwic2V0Um91dGVBbm5vdW5jZW1lbnQiLCJSZWFjdCIsInVzZVN0YXRlIiwicHJldmlvdXNseUxvYWRlZFBhdGgiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwiZG9jdW1lbnQiLCJ0aXRsZSIsInBhZ2VIZWFkZXIiLCJxdWVyeVNlbGVjdG9yIiwiY29udGVudCIsImlubmVyVGV4dCIsInRleHRDb250ZW50IiwicCIsImFyaWEtbGl2ZSIsImlkIiwicm9sZSIsInN0eWxlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/route-announcer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/route-loader.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/route-loader.js ***!
|
||
\*******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n createRouteLoader: function() {\n return createRouteLoader;\n },\n getClientBuildManifest: function() {\n return getClientBuildManifest;\n },\n isAssetError: function() {\n return isAssetError;\n },\n markAssetError: function() {\n return markAssetError;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _getassetpathfromroute = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/utils/get-asset-path-from-route */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\"));\nconst _trustedtypes = __webpack_require__(/*! ./trusted-types */ \"(pages-dir-browser)/./node_modules/next/dist/client/trusted-types.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"(pages-dir-browser)/./node_modules/next/dist/client/request-idle-callback.js\");\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"(pages-dir-browser)/./node_modules/next/dist/build/deployment-id.js\");\nconst _encodeuripath = __webpack_require__(/*! ../shared/lib/encode-uri-path */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/encode-uri-path.js\");\n// 3.8s was arbitrarily chosen as it's what https://web.dev/interactive\n// considers as \"Good\" time-to-interactive. We must assume something went\n// wrong beyond this point, and then fall-back to a full page transition to\n// show the user something of value.\nconst MS_MAX_IDLE_DELAY = 3800;\nfunction withFuture(key, map, generator) {\n let entry = map.get(key);\n if (entry) {\n if ('future' in entry) {\n return entry.future;\n }\n return Promise.resolve(entry);\n }\n let resolver;\n const prom = new Promise((resolve)=>{\n resolver = resolve;\n });\n map.set(key, {\n resolve: resolver,\n future: prom\n });\n return generator ? generator().then((value)=>{\n resolver(value);\n return value;\n }).catch((err)=>{\n map.delete(key);\n throw err;\n }) : prom;\n}\nconst ASSET_LOAD_ERROR = Symbol('ASSET_LOAD_ERROR');\nfunction markAssetError(err) {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {});\n}\nfunction isAssetError(err) {\n return err && ASSET_LOAD_ERROR in err;\n}\nfunction hasPrefetch(link) {\n try {\n link = document.createElement('link');\n return(// with relList.support\n !!window.MSInputMethodContext && !!document.documentMode || link.relList.supports('prefetch'));\n } catch (e) {\n return false;\n }\n}\nconst canPrefetch = hasPrefetch();\nconst getAssetQueryString = ()=>{\n return (0, _deploymentid.getDeploymentIdQueryOrEmptyString)();\n};\nfunction prefetchViaDom(href, as, link) {\n return new Promise((resolve, reject)=>{\n const selector = '\\n link[rel=\"prefetch\"][href^=\"' + href + '\"],\\n link[rel=\"preload\"][href^=\"' + href + '\"],\\n script[src^=\"' + href + '\"]';\n if (document.querySelector(selector)) {\n return resolve();\n }\n link = document.createElement('link');\n // The order of property assignment here is intentional:\n if (as) link.as = as;\n link.rel = \"prefetch\";\n link.crossOrigin = undefined;\n link.onload = resolve;\n link.onerror = ()=>reject(markAssetError(Object.defineProperty(new Error(\"Failed to prefetch: \" + href), \"__NEXT_ERROR_CODE\", {\n value: \"E268\",\n enumerable: false,\n configurable: true\n })));\n // `href` should always be last:\n link.href = href;\n document.head.appendChild(link);\n });\n}\nfunction appendScript(src, script) {\n return new Promise((resolve, reject)=>{\n script = document.createElement('script');\n // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n script.onload = resolve;\n script.onerror = ()=>reject(markAssetError(Object.defineProperty(new Error(\"Failed to load script: \" + src), \"__NEXT_ERROR_CODE\", {\n value: \"E74\",\n enumerable: false,\n configurable: true\n })));\n // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n script.crossOrigin = undefined;\n // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n script.src = src;\n document.body.appendChild(script);\n });\n}\n// We wait for pages to be built in dev before we start the route transition\n// timeout to prevent an un-necessary hard navigation in development.\nlet devBuildPromise;\n// Resolve a promise that times out after given amount of milliseconds.\nfunction resolvePromiseWithTimeout(p, ms, err) {\n return new Promise((resolve, reject)=>{\n let cancelled = false;\n p.then((r)=>{\n // Resolved, cancel the timeout\n cancelled = true;\n resolve(r);\n }).catch(reject);\n // We wrap these checks separately for better dead-code elimination in\n // production bundles.\n if (true) {\n ;\n (devBuildPromise || Promise.resolve()).then(()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>setTimeout(()=>{\n if (!cancelled) {\n reject(err);\n }\n }, ms));\n });\n }\n if (false) {}\n });\n}\nfunction getClientBuildManifest() {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST);\n }\n const onBuildManifest = new Promise((resolve)=>{\n // Mandatory because this is not concurrent safe:\n const cb = self.__BUILD_MANIFEST_CB;\n self.__BUILD_MANIFEST_CB = ()=>{\n resolve(self.__BUILD_MANIFEST);\n cb && cb();\n };\n });\n return resolvePromiseWithTimeout(onBuildManifest, MS_MAX_IDLE_DELAY, markAssetError(Object.defineProperty(new Error('Failed to load client build manifest'), \"__NEXT_ERROR_CODE\", {\n value: \"E273\",\n enumerable: false,\n configurable: true\n })));\n}\nfunction getFilesForRoute(assetPrefix, route) {\n if (true) {\n const scriptUrl = assetPrefix + '/_next/static/chunks/pages' + (0, _encodeuripath.encodeURIPath)((0, _getassetpathfromroute.default)(route, '.js')) + getAssetQueryString();\n return Promise.resolve({\n scripts: [\n (0, _trustedtypes.__unsafeCreateTrustedScriptURL)(scriptUrl)\n ],\n // Styles are handled by `style-loader` in development:\n css: []\n });\n }\n return getClientBuildManifest().then((manifest)=>{\n if (!(route in manifest)) {\n throw markAssetError(Object.defineProperty(new Error(\"Failed to lookup route: \" + route), \"__NEXT_ERROR_CODE\", {\n value: \"E446\",\n enumerable: false,\n configurable: true\n }));\n }\n const allFiles = manifest[route].map((entry)=>assetPrefix + '/_next/' + (0, _encodeuripath.encodeURIPath)(entry));\n return {\n scripts: allFiles.filter((v)=>v.endsWith('.js')).map((v)=>(0, _trustedtypes.__unsafeCreateTrustedScriptURL)(v) + getAssetQueryString()),\n css: allFiles.filter((v)=>v.endsWith('.css')).map((v)=>v + getAssetQueryString())\n };\n });\n}\nfunction createRouteLoader(assetPrefix) {\n const entrypoints = new Map();\n const loadedScripts = new Map();\n const styleSheets = new Map();\n const routes = new Map();\n function maybeExecuteScript(src) {\n // With HMR we might need to \"reload\" scripts when they are\n // disposed and readded. Executing scripts twice has no functional\n // differences\n if (false) {} else {\n return appendScript(src);\n }\n }\n function fetchStyleSheet(href) {\n let prom = styleSheets.get(href);\n if (prom) {\n return prom;\n }\n styleSheets.set(href, prom = fetch(href, {\n credentials: 'same-origin'\n }).then((res)=>{\n if (!res.ok) {\n throw Object.defineProperty(new Error(\"Failed to load stylesheet: \" + href), \"__NEXT_ERROR_CODE\", {\n value: \"E189\",\n enumerable: false,\n configurable: true\n });\n }\n return res.text().then((text)=>({\n href: href,\n content: text\n }));\n }).catch((err)=>{\n throw markAssetError(err);\n }));\n return prom;\n }\n return {\n whenEntrypoint (route) {\n return withFuture(route, entrypoints);\n },\n onEntrypoint (route, execute) {\n ;\n (execute ? Promise.resolve().then(()=>execute()).then((exports1)=>({\n component: exports1 && exports1.default || exports1,\n exports: exports1\n }), (err)=>({\n error: err\n })) : Promise.resolve(undefined)).then((input)=>{\n const old = entrypoints.get(route);\n if (old && 'resolve' in old) {\n if (input) {\n entrypoints.set(route, input);\n old.resolve(input);\n }\n } else {\n if (input) {\n entrypoints.set(route, input);\n } else {\n entrypoints.delete(route);\n }\n // when this entrypoint has been resolved before\n // the route is outdated and we want to invalidate\n // this cache entry\n routes.delete(route);\n }\n });\n },\n loadRoute (route, prefetch) {\n return withFuture(route, routes, ()=>{\n let devBuildPromiseResolve;\n if (true) {\n devBuildPromise = new Promise((resolve)=>{\n devBuildPromiseResolve = resolve;\n });\n }\n return resolvePromiseWithTimeout(getFilesForRoute(assetPrefix, route).then((param)=>{\n let { scripts, css } = param;\n return Promise.all([\n entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)),\n Promise.all(css.map(fetchStyleSheet))\n ]);\n }).then((res)=>{\n return this.whenEntrypoint(route).then((entrypoint)=>({\n entrypoint,\n styles: res[1]\n }));\n }), MS_MAX_IDLE_DELAY, markAssetError(Object.defineProperty(new Error(\"Route did not complete loading: \" + route), \"__NEXT_ERROR_CODE\", {\n value: \"E12\",\n enumerable: false,\n configurable: true\n }))).then((param)=>{\n let { entrypoint, styles } = param;\n const res = Object.assign({\n styles: styles\n }, entrypoint);\n return 'error' in entrypoint ? entrypoint : res;\n }).catch((err)=>{\n if (prefetch) {\n // we don't want to cache errors during prefetch\n throw err;\n }\n return {\n error: err\n };\n }).finally(()=>devBuildPromiseResolve == null ? void 0 : devBuildPromiseResolve());\n });\n },\n prefetch (route) {\n // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n // License: Apache 2.0\n let cn;\n if (cn = navigator.connection) {\n // Don't prefetch if using 2G or if Save-Data is enabled.\n if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve();\n }\n return getFilesForRoute(assetPrefix, route).then((output)=>Promise.all(canPrefetch ? output.scripts.map((script)=>prefetchViaDom(script.toString(), 'script')) : [])).then(()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>this.loadRoute(route, true).catch(()=>{}));\n }).catch(()=>{});\n }\n };\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=route-loader.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JvdXRlLWxvYWRlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFpU2dCQSxpQkFBaUI7ZUFBakJBOztJQTNEQUMsc0JBQXNCO2VBQXRCQTs7SUFuSUFDLFlBQVk7ZUFBWkE7O0lBSkFDLGNBQWM7ZUFBZEE7Ozs7NEZBN0ZrQjswQ0FDYTtpREFDWDswQ0FDYzsyQ0FDcEI7QUFFOUIsdUVBQXVFO0FBQ3ZFLHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0Usb0NBQW9DO0FBQ3BDLE1BQU1DLG9CQUFvQjtBQTRDMUIsU0FBU0MsV0FDUEMsR0FBVyxFQUNYQyxHQUErQixFQUMvQkMsU0FBNEI7SUFFNUIsSUFBSUMsUUFBUUYsSUFBSUcsR0FBRyxDQUFDSjtJQUNwQixJQUFJRyxPQUFPO1FBQ1QsSUFBSSxZQUFZQSxPQUFPO1lBQ3JCLE9BQU9BLE1BQU1FLE1BQU07UUFDckI7UUFDQSxPQUFPQyxRQUFRQyxPQUFPLENBQUNKO0lBQ3pCO0lBQ0EsSUFBSUs7SUFDSixNQUFNQyxPQUFtQixJQUFJSCxRQUFXLENBQUNDO1FBQ3ZDQyxXQUFXRDtJQUNiO0lBQ0FOLElBQUlTLEdBQUcsQ0FBQ1YsS0FBSztRQUFFTyxTQUFTQztRQUFXSCxRQUFRSTtJQUFLO0lBQ2hELE9BQU9QLFlBQ0hBLFlBQ0dTLElBQUksQ0FBQyxDQUFDQztRQUNMSixTQUFTSTtRQUNULE9BQU9BO0lBQ1QsR0FDQ0MsS0FBSyxDQUFDLENBQUNDO1FBQ05iLElBQUljLE1BQU0sQ0FBQ2Y7UUFDWCxNQUFNYztJQUNSLEtBQ0ZMO0FBQ047QUFTQSxNQUFNTyxtQkFBbUJDLE9BQU87QUFFekIsU0FBU3BCLGVBQWVpQixHQUFVO0lBQ3ZDLE9BQU9JLE9BQU9DLGNBQWMsQ0FBQ0wsS0FBS0Usa0JBQWtCLENBQUM7QUFDdkQ7QUFFTyxTQUFTcEIsYUFBYWtCLEdBQVc7SUFDdEMsT0FBT0EsT0FBT0Usb0JBQW9CRjtB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QVEsSUFBSSxLQUFLQyxJQUFJLENBQUNKLEdBQUdLLGFBQWEsR0FBRyxPQUFPaEgsUUFBUUMsT0FBTztZQUN4RTtZQUNBLE9BQU8yRCxpQkFBaUJDLGFBQWFDLE9BQ2xDekQsSUFBSSxDQUFDLENBQUM0RyxTQUNMakgsUUFBUXFHLEdBQUcsQ0FDVDlFLGNBQ0kwRixPQUFPL0MsT0FBTyxDQUFDdkUsR0FBRyxDQUFDLENBQUNpRCxTQUNsQmxCLGVBQWVrQixPQUFPb0MsUUFBUSxJQUFJLGFBRXBDLEVBQUUsR0FHVDNFLElBQUksQ0FBQztnQkFDSmdELENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0IsSUFBTSxJQUFJLENBQUM2QyxTQUFTLENBQUNwQyxPQUFPLE1BQU12RCxLQUFLLENBQUMsS0FBTztZQUNyRSxHQUNDQSxLQUFLLENBQ0osS0FDTztRQUViO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxyb3V0ZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmVNYXRjaGVyIH0gZnJvbSAnLi4vYnVpbGQvYW5hbHlzaXMvZ2V0LXBhZ2Utc3RhdGljLWluZm8nXG5pbXBvcnQgZ2V0QXNzZXRQYXRoRnJvbVJvdXRlIGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1hc3NldC1wYXRoLWZyb20tcm91dGUnXG5pbXBvcnQgeyBfX3Vuc2FmZUNyZWF0ZVRydXN0ZWRTY3JpcHRVUkwgfSBmcm9tICcuL3RydXN0ZWQtdHlwZXMnXG5pbXBvcnQgeyByZXF1ZXN0SWRsZUNhbGxiYWNrIH0gZnJvbSAnLi9yZXF1ZXN0LWlkbGUtY2FsbGJhY2snXG5pbXBvcnQgeyBnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmcgfSBmcm9tICcuLi9idWlsZC9kZXBsb3ltZW50LWlkJ1xuaW1wb3J0IHsgZW5jb2RlVVJJUGF0aCB9IGZyb20gJy4uL3NoYXJlZC9saWIvZW5jb2RlLXVyaS1wYXRoJ1xuXG4vLyAzLjhzIHdhcyBhcmJpdHJhcmlseSBjaG9zZW4gYXMgaXQncyB3aGF0IGh0dHBzOi8vd2ViLmRldi9pbnRlcmFjdGl2ZVxuLy8gY29uc2lkZXJzIGFzIFwiR29vZFwiIHRpbWUtdG8taW50ZXJhY3RpdmUuIFdlIG11c3QgYXNzdW1lIHNvbWV0aGluZyB3ZW50XG4vLyB3cm9uZyBiZXlvbmQgdGhpcyBwb2ludCwgYW5kIHRoZW4gZmFsbC1iYWNrIHRvIGEgZnVsbCBwYWdlIHRyYW5zaXRpb24gdG9cbi8vIHNob3cgdGhlIHVzZXIgc29tZXRoaW5nIG9mIHZhbHVlLlxuY29uc3QgTVNfTUFYX0lETEVfREVMQVkgPSAzODAwXG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19CVUlMRF9NQU5JRkVTVD86IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuICAgIF9fQlVJTERfTUFOSUZFU1RfQ0I/OiBGdW5jdGlvblxuICAgIF9fTUlERExFV0FSRV9NQVRDSEVSUz86IE1pZGRsZXdhcmVNYXRjaGVyW11cbiAgICBfX01JRERMRVdBUkVfTUFOSUZFU1RfQ0I/OiBGdW5jdGlvblxuICAgIF9fUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1Q/OiBhbnlcbiAgICBfX0RZTkFNSUNfQ1NTX01BTklGRVNUPzogYW55XG4gICAgX19SU0NfTUFOSUZFU1Q/OiBhbnlcbiAgICBfX1JTQ19TRVJWRVJfTUFOSUZFU1Q/OiBhbnlcbiAgICBfX05FWFRfRk9OVF9NQU5JRkVTVD86IGFueVxuICAgIF9fU1VCUkVTT1VSQ0VfSU5URUdSSVRZX01BTklGRVNUPzogc3RyaW5nXG4gICAgX19JTlRFUkNFUFRJT05fUk9VVEVfUkVXUklURV9NQU5JRkVTVD86IHN0cmluZ1xuICB9XG59XG5cbmludGVyZmFjZSBMb2FkZWRFbnRyeXBvaW50U3VjY2VzcyB7XG4gIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZVxuICBleHBvcnRzOiBhbnlcbn1cbmludGVyZmFjZSBMb2FkZWRFbnRyeXBvaW50RmFpbHVyZSB7XG4gIGVycm9yOiB1bmtub3duXG59XG50eXBlIFJvdXRlRW50cnlwb2ludCA9IExvYWRlZEVudHJ5cG9pbnRTdWNjZXNzIHwgTG9hZGVkRW50cnlwb2ludEZhaWx1cmVcblxuaW50ZXJmYWNlIFJvdXRlU3R5bGVTaGVldCB7XG4gIGhyZWY6IHN0cmluZ1xuICBjb250ZW50OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIExvYWRlZFJvdXRlU3VjY2VzcyBleHRlbmRzIExvYWRlZEVudHJ5cG9pbnRTdWNjZXNzIHtcbiAgc3R5bGVzOiBSb3V0ZVN0eWxlU2hlZXRbXVxufVxuaW50ZXJmYWNlIExvYWRlZFJvdXRlRmFpbHVyZSB7XG4gIGVycm9yOiB1bmtub3duXG59XG50eXBlIFJvdXRlTG9hZGVyRW50cnkgPSBMb2FkZWRSb3V0ZVN1Y2Nlc3MgfCBMb2FkZWRSb3V0ZUZhaWx1cmVcblxuaW50ZXJmYWNlIEZ1dHVyZTxWPiB7XG4gIHJlc29sdmU6IChlbnRyeXBvaW50OiBWKSA9PiB2b2lkXG4gIGZ1dHVyZTogUHJvbWlzZTxWPlxufVxuZnVuY3Rpb24gd2l0aEZ1dHVyZTxUIGV4dGVuZHMgb2JqZWN0PihcbiAga2V5OiBzdHJpbmcsXG4gIG1hcDogTWFwPHN0cmluZywgRnV0dXJlPFQ+IHwgVD4sXG4gIGdlbmVyYXRvcj86ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBsZXQgZW50cnkgPSBtYXAuZ2V0KGtleSlcbiAgaWYgKGVudHJ5KSB7XG4gICAgaWYgKCdmdXR1cmUnIGluIGVudHJ5KSB7XG4gICAgICByZXR1cm4gZW50cnkuZnV0dXJlXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW50cnkpXG4gIH1cbiAgbGV0IHJlc29sdmVyOiAoZW50cnlwb2ludDogVCkgPT4gdm9pZFxuICBjb25zdCBwcm9tOiBQcm9taXNlPFQ+ID0gbmV3IFByb21pc2U8VD4oKHJlc29sdmUpID0+IHtcbiAgICByZXNvbHZlciA9IHJlc29sdmVcbiAgfSlcbiAgbWFwLnNldChrZXksIHsgcmVzb2x2ZTogcmVzb2x2ZXIhLCBmdXR1cmU6IHByb20gfSlcbiAgcmV0dXJuIGdlbmVyYXRvclxuICAgID8gZ2VuZXJhdG9yKClcbiAgICAgICAgLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZXIodmFsdWUpXG4gICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgbWFwLmRlbGV0ZShrZXkpXG4gICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgIH0pXG4gICAgOiBwcm9tXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVMb2FkZXIge1xuICB3aGVuRW50cnlwb2ludChyb3V0ZTogc3RyaW5nKTogUHJvbWlzZTxSb3V0ZUVudHJ5cG9pbnQ+XG4gIG9uRW50cnlwb2ludChyb3V0ZTogc3RyaW5nLCBleGVjdXRlOiAoKSA9PiB1bmtub3duKTogdm9pZFxuICBsb2FkUm91dGUocm91dGU6IHN0cmluZywgcHJlZmV0Y2g/OiBib29sZWFuKTogUHJvbWlzZTxSb3V0ZUxvYWRlckVudHJ5PlxuICBwcmVmZXRjaChyb3V0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPlxufVxuXG5jb25zdCBBU1NFVF9MT0FEX0VSUk9SID0gU3ltYm9sKCdBU1NFVF9MT0FEX0VSUk9SJylcbi8vIFRPRE86IHVuZXhwb3J0XG5leHBvcnQgZnVuY3Rpb24gbWFya0Fzc2V0RXJyb3IoZXJyOiBFcnJvcik6IEVycm9yIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnIsIEFTU0VUX0xPQURfRVJST1IsIHt9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBc3NldEVycm9yKGVycj86IEVycm9yKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBlcnIgJiYgQVNTRVRfTE9BRF9FUlJPUiBpbiBlcnJcbn1cblxuZnVuY3Rpb24gaGFzUHJlZmV0Y2gobGluaz86IEhUTUxMaW5rRWxlbWVudCk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJylcbiAgICByZXR1cm4gKFxuICAgICAgLy8gZGV0ZWN0IElFMTEgc2luY2UgaXQgc3VwcG9ydHMgcHJlZmV0Y2ggYnV0IGlzbid0IGRldGVjdGVkXG4gICAgICAvLyB3aXRoIHJlbExpc3Quc3VwcG9ydFxuICAgICAgKCEhd2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0ICYmICEhKGRvY3VtZW50IGFzIGFueSkuZG9jdW1lbnRNb2RlKSB8fFxuICAgICAgbGluay5yZWxMaXN0LnN1cHBvcnRzKCdwcmVmZXRjaCcpXG4gICAgKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5jb25zdCBjYW5QcmVmZXRjaDogYm9vbGVhbiA9IGhhc1ByZWZldGNoKClcblxuY29uc3QgZ2V0QXNzZXRRdWVyeVN0cmluZyA9ICgpID0+IHtcbiAgcmV0dXJuIGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZygpXG59XG5cbmZ1bmN0aW9uIHByZWZldGNoVmlhRG9tKFxuICBocmVmOiBzdHJpbmcsXG4gIGFzOiBzdHJpbmcsXG4gIGxpbms/OiBIVE1MTGlua0VsZW1lbnRcbik6IFByb21pc2U8YW55PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgXG4gICAgICBsaW5rW3JlbD1cInByZWZldGNoXCJdW2hyZWZePVwiJHtocmVmfVwiXSxcbiAgICAgIGxpbmtbcmVsPVwicHJlbG9hZFwiXVtocmVmXj1cIiR7aHJlZn1cIl0sXG4gICAgICBzY3JpcHRbc3JjXj1cIiR7aHJlZn1cIl1gXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKVxuXG4gICAgLy8gVGhlIG9yZGVyIG9mIHByb3BlcnR5IGFzc2lnbm1lbnQgaGVyZSBpcyBpbnRlbnRpb25hbDpcbiAgICBpZiAoYXMpIGxpbmshLmFzID0gYXNcbiAgICBsaW5rIS5yZWwgPSBgcHJlZmV0Y2hgXG4gICAgbGluayEuY3Jvc3NPcmlnaW4gPSBwcm9jZXNzLmVudi5fX05FWFRfQ1JPU1NfT1JJR0lOIVxuICAgIGxpbmshLm9ubG9hZCA9IHJlc29sdmUgYXMgYW55XG4gICAgbGluayEub25lcnJvciA9ICgpID0+XG4gICAgICByZWplY3QobWFya0Fzc2V0RXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gcHJlZmV0Y2g6ICR7aHJlZn1gKSkpXG5cbiAgICAvLyBgaHJlZmAgc2hvdWxkIGFsd2F5cyBiZSBsYXN0OlxuICAgIGxpbmshLmhyZWYgPSBocmVmXG5cbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGFwcGVuZFNjcmlwdChcbiAgc3JjOiBUcnVzdGVkU2NyaXB0VVJMIHwgc3RyaW5nLFxuICBzY3JpcHQ/OiBIVE1MU2NyaXB0RWxlbWVudFxuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JylcblxuICAgIC8vIFRoZSBvcmRlciBvZiBwcm9wZXJ0eSBhc3NpZ25tZW50IGhlcmUgaXMgaW50ZW50aW9uYWwuXG4gICAgLy8gMS4gU2V0dXAgc3VjY2Vzcy9mYWlsdXJlIGhvb2tzIGluIGNhc2UgdGhlIGJyb3dzZXIgc3luY2hyb25vdXNseVxuICAgIC8vICAgIGV4ZWN1dGVzIHdoZW4gYHNyY2AgaXMgc2V0LlxuICAgIHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlXG4gICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PlxuICAgICAgcmVqZWN0KG1hcmtBc3NldEVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgc2NyaXB0OiAke3NyY31gKSkpXG5cbiAgICAvLyAyLiBDb25maWd1cmUgdGhlIGNyb3NzLW9yaWdpbiBhdHRyaWJ1dGUgYmVmb3JlIHNldHRpbmcgYHNyY2AgaW4gY2FzZSB0aGVcbiAgICAvLyAgICBicm93c2VyIGJlZ2lucyB0byBmZXRjaC5cbiAgICBzY3JpcHQuY3Jvc3NPcmlnaW4gPSBwcm9jZXNzLmVudi5fX05FWFRfQ1JPU1NfT1JJR0lOIVxuXG4gICAgLy8gMy4gRmluYWxseSwgc2V0IHRoZSBzb3VyY2UgYW5kIGluamVjdCBpbnRvIHRoZSBET00gaW4gY2FzZSB0aGUgY2hpbGRcbiAgICAvLyAgICBtdXN0IGJlIGFwcGVuZGVkIGZvciBmZXRjaGluZyB0byBzdGFydC5cbiAgICBzY3JpcHQuc3JjID0gc3JjIGFzIHN0cmluZ1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KVxuICB9KVxufVxuXG4vLyBXZSB3YWl0IGZvciBwYWdlcyB0byBiZSBidWlsdCBpbiBkZXYgYmVmb3JlIHdlIHN0YXJ0IHRoZSByb3V0ZSB0cmFuc2l0aW9uXG4vLyB0aW1lb3V0IHRvIHByZXZlbnQgYW4gdW4tbmVjZXNzYXJ5IGhhcmQgbmF2aWdhdGlvbiBpbiBkZXZlbG9wbWVudC5cbmxldCBkZXZCdWlsZFByb21pc2U6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWRcblxuLy8gUmVzb2x2ZSBhIHByb21pc2UgdGhhdCB0aW1lcyBvdXQgYWZ0ZXIgZ2l2ZW4gYW1vdW50IG9mIG1pbGxpc2Vjb25kcy5cbmZ1bmN0aW9uIHJlc29sdmVQcm9taXNlV2l0aFRpbWVvdXQ8VD4oXG4gIHA6IFByb21pc2U8VD4sXG4gIG1zOiBudW1iZXIsXG4gIGVycjogRXJyb3Jcbik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZVxuXG4gICAgcC50aGVuKChyKSA9PiB7XG4gICAgICAvLyBSZXNvbHZlZCwgY2FuY2VsIHRoZSB0aW1lb3V0XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlXG4gICAgICByZXNvbHZlKHIpXG4gICAgfSkuY2F0Y2gocmVqZWN0KVxuXG4gICAgLy8gV2Ugd3JhcCB0aGVzZSBjaGVja3Mgc2VwYXJhdGVseSBmb3IgYmV0dGVyIGRlYWQtY29kZSBlbGltaW5hdGlvbiBpblxuICAgIC8vIHByb2R1Y3Rpb24gYnVuZGxlcy5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIDsoZGV2QnVpbGRQcm9taXNlIHx8IFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PlxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBtcylcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfVxuICAgICAgICB9LCBtcylcbiAgICAgIClcbiAgICB9XG4gIH0pXG59XG5cbi8vIFRPRE86IHN0b3AgZXhwb3J0aW5nIG9yIGNhY2hlIHRoZSBmYWlsdXJlXG4vLyBJdCdkIGJlIGJlc3QgdG8gc3RvcCBleHBvcnRpbmcgdGhpcy4gSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIFdlJ3JlXG4vLyBvbmx5IGV4cG9ydGluZyBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgYHBhZ2UtbG9hZGVyYC5cbi8vIE9ubHkgY2FjaGUgdGhpcyByZXNwb25zZSBhcyBhIGxhc3QgcmVzb3J0IGlmIHdlIGNhbm5vdCBlbGltaW5hdGUgYWxsIG90aGVyXG4vLyBjb2RlIGJyYW5jaGVzIHRoYXQgdXNlIHRoZSBCdWlsZCBNYW5pZmVzdCBDYWxsYmFjayBhbmQgcHVzaCB0aGVtIHRocm91Z2hcbi8vIHRoZSBSb3V0ZSBMb2FkZXIgaW50ZXJmYWNlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKSB7XG4gIGlmIChzZWxmLl9fQlVJTERfTUFOSUZFU1QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNlbGYuX19CVUlMRF9NQU5JRkVTVClcbiAgfVxuXG4gIGNvbnN0IG9uQnVpbGRNYW5pZmVzdCA9IG5ldyBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj4oKHJlc29sdmUpID0+IHtcbiAgICAvLyBNYW5kYXRvcnkgYmVjYXVzZSB0aGlzIGlzIG5vdCBjb25jdXJyZW50IHNhZmU6XG4gICAgY29uc3QgY2IgPSBzZWxmLl9fQlVJTERfTUFOSUZFU1RfQ0JcbiAgICBzZWxmLl9fQlVJTERfTUFOSUZFU1RfQ0IgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHNlbGYuX19CVUlMRF9NQU5JRkVTVCEpXG4gICAgICBjYiAmJiBjYigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiByZXNvbHZlUHJvbWlzZVdpdGhUaW1lb3V0KFxuICAgIG9uQnVpbGRNYW5pZmVzdCxcbiAgICBNU19NQVhfSURMRV9ERUxBWSxcbiAgICBtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNsaWVudCBidWlsZCBtYW5pZmVzdCcpKVxuICApXG59XG5cbmludGVyZmFjZSBSb3V0ZUZpbGVzIHtcbiAgc2NyaXB0czogKFRydXN0ZWRTY3JpcHRVUkwgfCBzdHJpbmcpW11cbiAgY3NzOiBzdHJpbmdbXVxufVxuZnVuY3Rpb24gZ2V0RmlsZXNGb3JSb3V0ZShcbiAgYXNzZXRQcmVmaXg6IHN0cmluZyxcbiAgcm91dGU6IHN0cmluZ1xuKTogUHJvbWlzZTxSb3V0ZUZpbGVzPiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIGNvbnN0IHNjcmlwdFVybCA9XG4gICAgICBhc3NldFByZWZpeCArXG4gICAgICAnL19uZXh0L3N0YXRpYy9jaHVua3MvcGFnZXMnICtcbiAgICAgIGVuY29kZVVSSVBhdGgoZ2V0QXNzZXRQYXRoRnJvbVJvdXRlKHJvdXRlLCAnLmpzJykpICtcbiAgICAgIGdldEFzc2V0UXVlcnlTdHJpbmcoKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgc2NyaXB0czogW19fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTChzY3JpcHRVcmwpXSxcbiAgICAgIC8vIFN0eWxlcyBhcmUgaGFuZGxlZCBieSBgc3R5bGUtbG9hZGVyYCBpbiBkZXZlbG9wbWVudDpcbiAgICAgIGNzczogW10sXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCgpLnRoZW4oKG1hbmlmZXN0KSA9PiB7XG4gICAgaWYgKCEocm91dGUgaW4gbWFuaWZlc3QpKSB7XG4gICAgICB0aHJvdyBtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBsb29rdXAgcm91dGU6ICR7cm91dGV9YCkpXG4gICAgfVxuICAgIGNvbnN0IGFsbEZpbGVzID0gbWFuaWZlc3Rbcm91dGVdLm1hcChcbiAgICAgIChlbnRyeSkgPT4gYXNzZXRQcmVmaXggKyAnL19uZXh0LycgKyBlbmNvZGVVUklQYXRoKGVudHJ5KVxuICAgIClcbiAgICByZXR1cm4ge1xuICAgICAgc2NyaXB0czogYWxsRmlsZXNcbiAgICAgICAgLmZpbHRlcigodikgPT4gdi5lbmRzV2l0aCgnLmpzJykpXG4gICAgICAgIC5tYXAoKHYpID0+IF9fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTCh2KSArIGdldEFzc2V0UXVlcnlTdHJpbmcoKSksXG4gICAgICBjc3M6IGFsbEZpbGVzXG4gICAgICAgIC5maWx0ZXIoKHYpID0+IHYuZW5kc1dpdGgoJy5jc3MnKSlcbiAgICAgICAgLm1hcCgodikgPT4gdiArIGdldEFzc2V0UXVlcnlTdHJpbmcoKSksXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVMb2FkZXIoYXNzZXRQcmVmaXg6IHN0cmluZyk6IFJvdXRlTG9hZGVyIHtcbiAgY29uc3QgZW50cnlwb2ludHM6IE1hcDxzdHJpbmcsIEZ1dHVyZTxSb3V0ZUVudHJ5cG9pbnQ+IHwgUm91dGVFbnRyeXBvaW50PiA9XG4gICAgbmV3IE1hcCgpXG4gIGNvbnN0IGxvYWRlZFNjcmlwdHM6IE1hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+ID0gbmV3IE1hcCgpXG4gIGNvbnN0IHN0eWxlU2hlZXRzOiBNYXA8c3RyaW5nLCBQcm9taXNlPFJvdXRlU3R5bGVTaGVldD4+ID0gbmV3IE1hcCgpXG4gIGNvbnN0IHJvdXRlczogTWFwPHN0cmluZywgRnV0dXJlPFJvdXRlTG9hZGVyRW50cnk+IHwgUm91dGVMb2FkZXJFbnRyeT4gPVxuICAgIG5ldyBNYXAoKVxuXG4gIGZ1bmN0aW9uIG1heWJlRXhlY3V0ZVNjcmlwdChcbiAgICBzcmM6IFRydXN0ZWRTY3JpcHRVUkwgfCBzdHJpbmdcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgLy8gV2l0aCBITVIgd2UgbWlnaHQgbmVlZCB0byBcInJlbG9hZFwiIHNjcmlwdHMgd2hlbiB0aGV5IGFyZVxuICAgIC8vIGRpc3Bvc2VkIGFuZCByZWFkZGVkLiBFeGVjdXRpbmcgc2NyaXB0cyB0d2ljZSBoYXMgbm8gZnVuY3Rpb25hbFxuICAgIC8vIGRpZmZlcmVuY2VzXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICBsZXQgcHJvbTogUHJvbWlzZTx1bmtub3duPiB8IHVuZGVmaW5lZCA9IGxvYWRlZFNjcmlwdHMuZ2V0KHNyYy50b1N0cmluZygpKVxuICAgICAgaWYgKHByb20pIHtcbiAgICAgICAgcmV0dXJuIHByb21cbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBleGVjdXRpbmcgc2NyaXB0IGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgRE9NOlxuICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmNePVwiJHtzcmN9XCJdYCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGxvYWRlZFNjcmlwdHMuc2V0KHNyYy50b1N0cmluZygpLCAocHJvbSA9IGFwcGVuZFNjcmlwdChzcmMpKSlcbiAgICAgIHJldHVybiBwcm9tXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhcHBlbmRTY3JpcHQoc3JjKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoU3R5bGVTaGVldChocmVmOiBzdHJpbmcpOiBQcm9taXNlPFJvdXRlU3R5bGVTaGVldD4ge1xuICAgIGxldCBwcm9tOiBQcm9taXNlPFJvdXRlU3R5bGVTaGVldD4gfCB1bmRlZmluZWQgPSBzdHlsZVNoZWV0cy5nZXQoaHJlZilcbiAgICBpZiAocHJvbSkge1xuICAgICAgcmV0dXJuIHByb21cbiAgICB9XG5cbiAgICBzdHlsZVNoZWV0cy5zZXQoXG4gICAgICBocmVmLFxuICAgICAgKHByb20gPSBmZXRjaChocmVmLCB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nIH0pXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBzdHlsZXNoZWV0OiAke2hyZWZ9YClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlcy50ZXh0KCkudGhlbigodGV4dCkgPT4gKHsgaHJlZjogaHJlZiwgY29udGVudDogdGV4dCB9KSlcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICB0aHJvdyBtYXJrQXNzZXRFcnJvcihlcnIpXG4gICAgICAgIH0pKVxuICAgIClcbiAgICByZXR1cm4gcHJvbVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aGVuRW50cnlwb2ludChyb3V0ZTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gd2l0aEZ1dHVyZShyb3V0ZSwgZW50cnlwb2ludHMpXG4gICAgfSxcbiAgICBvbkVudHJ5cG9pbnQocm91dGU6IHN0cmluZywgZXhlY3V0ZTogdW5kZWZpbmVkIHwgKCgpID0+IHVua25vd24pKSB7XG4gICAgICA7KGV4ZWN1dGVcbiAgICAgICAgPyBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gZXhlY3V0ZSgpKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgIChleHBvcnRzOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiAoZXhwb3J0cyAmJiBleHBvcnRzLmRlZmF1bHQpIHx8IGV4cG9ydHMsXG4gICAgICAgICAgICAgICAgZXhwb3J0czogZXhwb3J0cyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIChlcnIpID0+ICh7IGVycm9yOiBlcnIgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgKS50aGVuKChpbnB1dDogUm91dGVFbnRyeXBvaW50IHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZCA9IGVudHJ5cG9pbnRzLmdldChyb3V0ZSlcbiAgICAgICAgaWYgKG9sZCAmJiAncmVzb2x2ZScgaW4gb2xkKSB7XG4gICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICBlbnRyeXBvaW50cy5zZXQocm91dGUsIGlucHV0KVxuICAgICAgICAgICAgb2xkLnJlc29sdmUoaW5wdXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgZW50cnlwb2ludHMuc2V0KHJvdXRlLCBpbnB1dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW50cnlwb2ludHMuZGVsZXRlKHJvdXRlKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3aGVuIHRoaXMgZW50cnlwb2ludCBoYXMgYmVlbiByZXNvbHZlZCBiZWZvcmVcbiAgICAgICAgICAvLyB0aGUgcm91dGUgaXMgb3V0ZGF0ZWQgYW5kIHdlIHdhbnQgdG8gaW52YWxpZGF0ZVxuICAgICAgICAgIC8vIHRoaXMgY2FjaGUgZW50cnlcbiAgICAgICAgICByb3V0ZXMuZGVsZXRlKHJvdXRlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG4gICAgbG9hZFJvdXRlKHJvdXRlOiBzdHJpbmcsIHByZWZldGNoPzogYm9vbGVhbikge1xuICAgICAgcmV0dXJuIHdpdGhGdXR1cmU8Um91dGVMb2FkZXJFbnRyeT4ocm91dGUsIHJvdXRlcywgKCkgPT4ge1xuICAgICAgICBsZXQgZGV2QnVpbGRQcm9taXNlUmVzb2x2ZTogKCkgPT4gdm9pZFxuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAgIGRldkJ1aWxkUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBkZXZCdWlsZFByb21pc2VSZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzb2x2ZVByb21pc2VXaXRoVGltZW91dChcbiAgICAgICAgICBnZXRGaWxlc0ZvclJvdXRlKGFzc2V0UHJlZml4LCByb3V0ZSlcbiAgICAgICAgICAgIC50aGVuKCh7IHNjcmlwdHMsIGNzcyB9KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgZW50cnlwb2ludHMuaGFzKHJvdXRlKVxuICAgICAgICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgICAgICAgOiBQcm9taXNlLmFsbChzY3JpcHRzLm1hcChtYXliZUV4ZWN1dGVTY3JpcHQpKSxcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChjc3MubWFwKGZldGNoU3R5bGVTaGVldCkpLFxuICAgICAgICAgICAgICBdIGFzIGNvbnN0KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2hlbkVudHJ5cG9pbnQocm91dGUpLnRoZW4oKGVudHJ5cG9pbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgZW50cnlwb2ludCxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IHJlc1sxXSxcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBNU19NQVhfSURMRV9ERUxBWSxcbiAgICAgICAgICBtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoYFJvdXRlIGRpZCBub3QgY29tcGxldGUgbG9hZGluZzogJHtyb3V0ZX1gKSlcbiAgICAgICAgKVxuICAgICAgICAgIC50aGVuKCh7IGVudHJ5cG9pbnQsIHN0eWxlcyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXM6IFJvdXRlTG9hZGVyRW50cnkgPSBPYmplY3QuYXNzaWduPFxuICAgICAgICAgICAgICB7IHN0eWxlczogUm91dGVTdHlsZVNoZWV0W10gfSxcbiAgICAgICAgICAgICAgUm91dGVFbnRyeXBvaW50XG4gICAgICAgICAgICA+KHsgc3R5bGVzOiBzdHlsZXMhIH0sIGVudHJ5cG9pbnQpXG4gICAgICAgICAgICByZXR1cm4gJ2Vycm9yJyBpbiBlbnRyeXBvaW50ID8gZW50cnlwb2ludCA6IHJlc1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmVmZXRjaCkge1xuICAgICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIGVycm9ycyBkdXJpbmcgcHJlZmV0Y2hcbiAgICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZXJyIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maW5hbGx5KCgpID0+IGRldkJ1aWxkUHJvbWlzZVJlc29sdmU/LigpKVxuICAgICAgfSlcbiAgICB9LFxuICAgIHByZWZldGNoKHJvdXRlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL3F1aWNrbGluay9ibG9iLzQ1M2E2NjFmYTFmYTk0MGUyZDJlMDQ0NDUyMzk4ZTM4YzY3YTk4ZmIvc3JjL2luZGV4Lm1qcyNMMTE1LUwxMThcbiAgICAgIC8vIExpY2Vuc2U6IEFwYWNoZSAyLjBcbiAgICAgIGxldCBjblxuICAgICAgaWYgKChjbiA9IChuYXZpZ2F0b3IgYXMgYW55KS5jb25uZWN0aW9uKSkge1xuICAgICAgICAvLyBEb24ndCBwcmVmZXRjaCBpZiB1c2luZyAyRyBvciBpZiBTYXZlLURhdGEgaXMgZW5hYmxlZC5cbiAgICAgICAgaWYgKGNuLnNhdmVEYXRhIHx8IC8yZy8udGVzdChjbi5lZmZlY3RpdmVUeXBlKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RmlsZXNGb3JSb3V0ZShhc3NldFByZWZpeCwgcm91dGUpXG4gICAgICAgIC50aGVuKChvdXRwdXQpID0+XG4gICAgICAgICAgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBjYW5QcmVmZXRjaFxuICAgICAgICAgICAgICA/IG91dHB1dC5zY3JpcHRzLm1hcCgoc2NyaXB0KSA9PlxuICAgICAgICAgICAgICAgICAgcHJlZmV0Y2hWaWFEb20oc2NyaXB0LnRvU3RyaW5nKCksICdzY3JpcHQnKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PiB0aGlzLmxvYWRSb3V0ZShyb3V0ZSwgdHJ1ZSkuY2F0Y2goKCkgPT4ge30pKVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goXG4gICAgICAgICAgLy8gc3dhbGxvdyBwcmVmZXRjaCBlcnJvcnNcbiAgICAgICAgICAoKSA9PiB7fVxuICAgICAgICApXG4gICAgfSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVJvdXRlTG9hZGVyIiwiZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCIsImlzQXNzZXRFcnJvciIsIm1hcmtBc3NldEVycm9yIiwiTVNfTUFYX0lETEVfREVMQVkiLCJ3aXRoRnV0dXJlIiwia2V5IiwibWFwIiwiZ2VuZXJhdG9yIiwiZW50cnkiLCJnZXQiLCJmdXR1cmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc29sdmVyIiwicHJvbSIsInNldCIsInRoZW4iLCJ2YWx1ZSIsImNhdGNoIiwiZXJyIiwiZGVsZXRlIiwiQVNTRVRfTE9BRF9FUlJPUiIsIlN5bWJvbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiaGFzUHJlZmV0Y2giLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid2luZG93IiwiTVNJbnB1dE1ldGhvZENvbnRleHQiLCJkb2N1bWVudE1vZGUiLCJyZWxMaXN0Iiwic3VwcG9ydHMiLCJjYW5QcmVmZXRjaCIsImdldEFzc2V0UXVlcnlTdHJpbmciLCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmciLCJwcmVmZXRjaFZpYURvbSIsImhyZWYiLCJhcyIsInJlamVjdCIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsInJlbCIsImNyb3NzT3JpZ2luIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9DUk9TU19PUklHSU4iLCJvbmxvYWQiLCJvbmVycm9yIiwiRXJyb3IiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJhcHBlbmRTY3JpcHQiLCJzcmMiLCJzY3JpcHQiLCJib2R5IiwiZGV2QnVpbGRQcm9taXNlIiwicmVzb2x2ZVByb21pc2VXaXRoVGltZW91dCIsInAiLCJtcyIsImNhbmNlbGxlZCIsInIiLCJOT0RFX0VOViIsInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJzZXRUaW1lb3V0Iiwic2VsZiIsIl9fQlVJTERfTUFOSUZFU1QiLCJvbkJ1aWxkTWFuaWZlc3QiLCJjYiIsIl9fQlVJTERfTUFOSUZFU1RfQ0IiLCJnZXRGaWxlc0ZvclJvdXRlIiwiYXNzZXRQcmVmaXgiLCJyb3V0ZSIsInNjcmlwdFVybCIsImVuY29kZVVSSVBhdGgiLCJnZXRBc3NldFBhdGhGcm9tUm91dGUiLCJzY3JpcHRzIiwiX191bnNhZmVDcmVhdGVUcnVzdGVkU2NyaXB0VVJMIiwiY3NzIiwibWFuaWZlc3QiLCJhbGxGaWxlcyIsImZpbHRlciIsInYiLCJlbmRzV2l0aCIsImVudHJ5cG9pbnRzIiwiTWFwIiwibG9hZGVkU2NyaXB0cyIsInN0eWxlU2hlZXRzIiwicm91dGVzIiwibWF5YmVFeGVjdXRlU2NyaXB0IiwidG9TdHJpbmciLCJmZXRjaFN0eWxlU2hlZXQiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwicmVzIiwib2siLCJ0ZXh0IiwiY29udGVudCIsIndoZW5FbnRyeXBvaW50Iiwib25FbnRyeXBvaW50IiwiZXhlY3V0ZSIsImV4cG9ydHMiLCJjb21wb25lbnQiLCJkZWZhdWx0IiwiZXJyb3IiLCJ1bmRlZmluZWQiLCJpbnB1dCIsIm9sZCIsImxvYWRSb3V0ZSIsInByZWZldGNoIiwiZGV2QnVpbGRQcm9taXNlUmVzb2x2ZSIsImFsbCIsImhhcyIsImVudHJ5cG9pbnQiLCJzdHlsZXMiLCJhc3NpZ24iLCJmaW5hbGx5IiwiY24iLCJuYXZpZ2F0b3IiLCJjb25uZWN0aW9uIiwic2F2ZURhdGEiLCJ0ZXN0IiwiZWZmZWN0aXZlVHlwZSIsIm91dHB1dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/route-loader.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/router.js":
|
||
/*!*************************************************!*\
|
||
!*** ./node_modules/next/dist/client/router.js ***!
|
||
\*************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* global window */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Router: function() {\n return _router.default;\n },\n createRouter: function() {\n return createRouter;\n },\n // Export the singletonRouter and this is the public API.\n default: function() {\n return _default;\n },\n makePublicRouterInstance: function() {\n return makePublicRouterInstance;\n },\n useRouter: function() {\n return useRouter;\n },\n withRouter: function() {\n return _withrouter.default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst _router = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/router */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/router.js\"));\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../lib/is-error */ \"(pages-dir-browser)/./node_modules/next/dist/lib/is-error.js\"));\nconst _withrouter = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./with-router */ \"(pages-dir-browser)/./node_modules/next/dist/client/with-router.js\"));\nconst singletonRouter = {\n router: null,\n readyCallbacks: [],\n ready (callback) {\n if (this.router) return callback();\n if (true) {\n this.readyCallbacks.push(callback);\n }\n }\n};\n// Create public properties and methods of the router in the singletonRouter\nconst urlPropertyFields = [\n 'pathname',\n 'route',\n 'query',\n 'asPath',\n 'components',\n 'isFallback',\n 'basePath',\n 'locale',\n 'locales',\n 'defaultLocale',\n 'isReady',\n 'isPreview',\n 'isLocaleDomain',\n 'domainLocales'\n];\nconst routerEvents = [\n 'routeChangeStart',\n 'beforeHistoryChange',\n 'routeChangeComplete',\n 'routeChangeError',\n 'hashChangeStart',\n 'hashChangeComplete'\n];\nconst coreMethodFields = [\n 'push',\n 'replace',\n 'reload',\n 'back',\n 'prefetch',\n 'beforePopState'\n];\n// Events is a static property on the router, the router doesn't have to be initialized to use it\nObject.defineProperty(singletonRouter, 'events', {\n get () {\n return _router.default.events;\n }\n});\nfunction getRouter() {\n if (!singletonRouter.router) {\n const message = 'No router instance found.\\n' + 'You should only use \"next/router\" on the client side of your app.\\n';\n throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n }\n return singletonRouter.router;\n}\nurlPropertyFields.forEach((field)=>{\n // Here we need to use Object.defineProperty because we need to return\n // the property assigned to the actual router\n // The value might get changed as we change routes and this is the\n // proper way to access it\n Object.defineProperty(singletonRouter, field, {\n get () {\n const router = getRouter();\n return router[field];\n }\n });\n});\ncoreMethodFields.forEach((field)=>{\n // We don't really know the types here, so we add them later instead\n ;\n singletonRouter[field] = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n const router = getRouter();\n return router[field](...args);\n };\n});\nrouterEvents.forEach((event)=>{\n singletonRouter.ready(()=>{\n _router.default.events.on(event, function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n const eventField = \"on\" + event.charAt(0).toUpperCase() + event.substring(1);\n const _singletonRouter = singletonRouter;\n if (_singletonRouter[eventField]) {\n try {\n _singletonRouter[eventField](...args);\n } catch (err) {\n console.error(\"Error when running the Router event: \" + eventField);\n console.error((0, _iserror.default)(err) ? err.message + \"\\n\" + err.stack : err + '');\n }\n }\n });\n });\n});\nconst _default = singletonRouter;\nfunction useRouter() {\n _s();\n const router = _react.default.useContext(_routercontextsharedruntime.RouterContext);\n if (!router) {\n throw Object.defineProperty(new Error('NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted'), \"__NEXT_ERROR_CODE\", {\n value: \"E509\",\n enumerable: false,\n configurable: true\n });\n }\n return router;\n}\n_s(useRouter, \"rbAhEc3dLGnVlsHWaSDsgP4MZS0=\");\nfunction createRouter() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n singletonRouter.router = new _router.default(...args);\n singletonRouter.readyCallbacks.forEach((cb)=>cb());\n singletonRouter.readyCallbacks = [];\n return singletonRouter.router;\n}\nfunction makePublicRouterInstance(router) {\n const scopedRouter = router;\n const instance = {};\n for (const property of urlPropertyFields){\n if (typeof scopedRouter[property] === 'object') {\n instance[property] = Object.assign(Array.isArray(scopedRouter[property]) ? [] : {}, scopedRouter[property]) // makes sure query is not stateful\n ;\n continue;\n }\n instance[property] = scopedRouter[property];\n }\n // Events is a static property on the router, the router doesn't have to be initialized to use it\n instance.events = _router.default.events;\n coreMethodFields.forEach((field)=>{\n instance[field] = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n return scopedRouter[field](...args);\n };\n });\n return instance;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=router.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JvdXRlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7O0FBQUE7Ozs7Ozs7Ozs7OztJQWFSQSxNQUFNO2VBQU5BLFFBQUFBLE9BQU07O0lBNklDQyxZQUFZO2VBQVpBOztJQTdCaEIseURBQXlEO0lBQ3pELE9BQWlEO2VBQWpEOztJQTBDZ0JDLHdCQUF3QjtlQUF4QkE7O0lBL0JBQyxTQUFTO2VBQVRBOztJQVJJQyxVQUFVO2VBQVZBLFlBQUFBLE9BQVU7Ozs7NEVBaElaOzZFQUNDO3dEQUVXOzhFQUNWO2lGQTRIa0I7QUE5R3RDLE1BQU1DLGtCQUF1QztJQUMzQ0MsUUFBUTtJQUNSQyxnQkFBZ0IsRUFBRTtJQUNsQkMsT0FBTUMsUUFBb0I7UUFDeEIsSUFBSSxJQUFJLENBQUNILE1BQU0sRUFBRSxPQUFPRztRQUN4QixJQUFJLElBQTZCLEVBQUU7WUFDakMsSUFBSSxDQUFDRixjQUFjLENBQUNJLElBQUksQ0FBQ0Y7UUFDM0I7SUFDRjtBQUNGO0FBRUEsNEVBQTRFO0FBQzVFLE1BQU1HLG9CQUFvQjtJQUN4QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFDRCxNQUFNQyxlQUFlO0lBQ25CO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBR0QsTUFBTUMsbUJBQW1CO0lBQ3ZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRUQsaUdBQWlHO0FBQ2pHQyxPQUFPQyxjQUFjLENBQUNYLGlCQUFpQixVQUFVO0lBQy9DWTtRQUNFLE9BQU9qQixRQUFBQSxPQUFNLENBQUNrQixNQUFNO0lBQ3RCO0FBQ0Y7QUFFQSxTQUFTQztJQUNQLElBQUksQ0FBQ2QsZ0JBQWdCQyxNQUFNLEVBQUU7UUFDM0IsTUFBTWMsVUFDSixnQ0FDQTtRQUNGLE1BQU0scUJBQWtCLENBQWxC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Q0MsU0FBUyxHQUFHRixZQUFZLENBQUNFLFNBQVM7SUFDN0M7SUFFQSxpR0FBaUc7SUFDakdELFNBQVN4QixNQUFNLEdBQUdsQixRQUFBQSxPQUFNLENBQUNrQixNQUFNO0lBRS9CSixpQkFBaUJRLE9BQU8sQ0FBQyxDQUFDQztRQUN4Qm1CLFFBQVEsQ0FBQ25CLE1BQU0sR0FBRzs2Q0FBSUMsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7Z0JBQUFBLElBQUFBLENBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEtBQUFBOztZQUNwQixPQUFPaUIsWUFBWSxDQUFDbEIsTUFBTSxJQUFJQztRQUNoQztJQUNGO0lBRUEsT0FBT2tCO0FBQ1QiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxccm91dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCB3aW5kb3cgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBSb3V0ZXIgZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyJ1xuaW1wb3J0IHR5cGUgeyBOZXh0Um91dGVyIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyJ1xuaW1wb3J0IHsgUm91dGVyQ29udGV4dCB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgaXNFcnJvciBmcm9tICcuLi9saWIvaXMtZXJyb3InXG5cbnR5cGUgU2luZ2xldG9uUm91dGVyQmFzZSA9IHtcbiAgcm91dGVyOiBSb3V0ZXIgfCBudWxsXG4gIHJlYWR5Q2FsbGJhY2tzOiBBcnJheTwoKSA9PiBhbnk+XG4gIHJlYWR5KGNiOiAoKSA9PiBhbnkpOiB2b2lkXG59XG5cbmV4cG9ydCB7IFJvdXRlciB9XG5cbmV4cG9ydCB0eXBlIHsgTmV4dFJvdXRlciB9XG5cbmV4cG9ydCB0eXBlIFNpbmdsZXRvblJvdXRlciA9IFNpbmdsZXRvblJvdXRlckJhc2UgJiBOZXh0Um91dGVyXG5cbmNvbnN0IHNpbmdsZXRvblJvdXRlcjogU2luZ2xldG9uUm91dGVyQmFzZSA9IHtcbiAgcm91dGVyOiBudWxsLCAvLyBob2xkcyB0aGUgYWN0dWFsIHJvdXRlciBpbnN0YW5jZVxuICByZWFkeUNhbGxiYWNrczogW10sXG4gIHJlYWR5KGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMucm91dGVyKSByZXR1cm4gY2FsbGJhY2soKVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5yZWFkeUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgIH1cbiAgfSxcbn1cblxuLy8gQ3JlYXRlIHB1YmxpYyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIG9mIHRoZSByb3V0ZXIgaW4gdGhlIHNpbmdsZXRvblJvdXRlclxuY29uc3QgdXJsUHJvcGVydHlGaWVsZHMgPSBbXG4gICdwYXRobmFtZScsXG4gICdyb3V0ZScsXG4gICdxdWVyeScsXG4gICdhc1BhdGgnLFxuICAnY29tcG9uZW50cycsXG4gICdpc0ZhbGxiYWNrJyxcbiAgJ2Jhc2VQYXRoJyxcbiAgJ2xvY2FsZScsXG4gICdsb2NhbGVzJyxcbiAgJ2RlZmF1bHRMb2NhbGUnLFxuICAnaXNSZWFkeScsXG4gICdpc1ByZXZpZXcnLFxuICAnaXNMb2NhbGVEb21haW4nLFxuICAnZG9tYWluTG9jYWxlcycsXG5dIGFzIGNvbnN0XG5jb25zdCByb3V0ZXJFdmVudHMgPSBbXG4gICdyb3V0ZUNoYW5nZVN0YXJ0JyxcbiAgJ2JlZm9yZUhpc3RvcnlDaGFuZ2UnLFxuICAncm91dGVDaGFuZ2VDb21wbGV0ZScsXG4gICdyb3V0ZUNoYW5nZUVycm9yJyxcbiAgJ2hhc2hDaGFuZ2VTdGFydCcsXG4gICdoYXNoQ2hhbmdlQ29tcGxldGUnLFxuXSBhcyBjb25zdFxuZXhwb3J0IHR5cGUgUm91dGVyRXZlbnQgPSAodHlwZW9mIHJvdXRlckV2ZW50cylbbnVtYmVyXVxuXG5jb25zdCBjb3JlTWV0aG9kRmllbGRzID0gW1xuICAncHVzaCcsXG4gICdyZXBsYWNlJyxcbiAgJ3JlbG9hZCcsXG4gICdiYWNrJyxcbiAgJ3ByZWZldGNoJyxcbiAgJ2JlZm9yZVBvcFN0YXRlJyxcbl0gYXMgY29uc3RcblxuLy8gRXZlbnRzIGlzIGEgc3RhdGljIHByb3BlcnR5IG9uIHRoZSByb3V0ZXIsIHRoZSByb3V0ZXIgZG9lc24ndCBoYXZlIHRvIGJlIGluaXRpYWxpemVkIHRvIHVzZSBpdFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpbmdsZXRvblJvdXRlciwgJ2V2ZW50cycsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiBSb3V0ZXIuZXZlbnRzXG4gIH0sXG59KVxuXG5mdW5jdGlvbiBnZXRSb3V0ZXIoKTogUm91dGVyIHtcbiAgaWYgKCFzaW5nbGV0b25Sb3V0ZXIucm91dGVyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAnTm8gcm91dGVyIGluc3RhbmNlIGZvdW5kLlxcbicgK1xuICAgICAgJ1lvdSBzaG91bGQgb25seSB1c2UgXCJuZXh0L3JvdXRlclwiIG9uIHRoZSBjbGllbnQgc2lkZSBvZiB5b3VyIGFwcC5cXG4nXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG4gIH1cbiAgcmV0dXJuIHNpbmdsZXRvblJvdXRlci5yb3V0ZXJcbn1cblxudXJsUHJvcGVydHlGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgLy8gSGVyZSB3ZSBuZWVkIHRvIHVzZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgYmVjYXVzZSB3ZSBuZWVkIHRvIHJldHVyblxuICAvLyB0aGUgcHJvcGVydHkgYXNzaWduZWQgdG8gdGhlIGFjdHVhbCByb3V0ZXJcbiAgLy8gVGhlIHZhbHVlIG1pZ2h0IGdldCBjaGFuZ2VkIGFzIHdlIGNoYW5nZSByb3V0ZXMgYW5kIHRoaXMgaXMgdGhlXG4gIC8vIHByb3BlciB3YXkgdG8gYWNjZXNzIGl0XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzaW5nbGV0b25Sb3V0ZXIsIGZpZWxkLCB7XG4gICAgZ2V0KCkge1xuICAgICAgY29uc3Qgcm91dGVyID0gZ2V0Um91dGVyKClcbiAgICAgIHJldHVybiByb3V0ZXJbZmllbGRdIGFzIHN0cmluZ1xuICAgIH0sXG4gIH0pXG59KVxuXG5jb3JlTWV0aG9kRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gIC8vIFdlIGRvbid0IHJlYWxseSBrbm93IHRoZSB0eXBlcyBoZXJlLCBzbyB3ZSBhZGQgdGhlbSBsYXRlciBpbnN0ZWFkXG4gIDsoc2luZ2xldG9uUm91dGVyIGFzIGFueSlbZmllbGRdID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyID0gZ2V0Um91dGVyKCkgYXMgYW55XG4gICAgcmV0dXJuIHJvdXRlcltmaWVsZF0oLi4uYXJncylcbiAgfVxufSlcblxucm91dGVyRXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gIHNpbmdsZXRvblJvdXRlci5yZWFkeSgoKSA9PiB7XG4gICAgUm91dGVyLmV2ZW50cy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50RmllbGQgPSBgb24ke2V2ZW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7ZXZlbnQuc3Vic3RyaW5nKFxuICAgICAgICAxXG4gICAgICApfWBcbiAgICAgIGNvbnN0IF9zaW5nbGV0b25Sb3V0ZXIgPSBzaW5nbGV0b25Sb3V0ZXIgYXMgYW55XG4gICAgICBpZiAoX3NpbmdsZXRvblJvdXRlcltldmVudEZpZWxkXSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIF9zaW5nbGV0b25Sb3V0ZXJbZXZlbnRGaWVsZF0oLi4uYXJncylcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3Igd2hlbiBydW5uaW5nIHRoZSBSb3V0ZXIgZXZlbnQ6ICR7ZXZlbnRGaWVsZH1gKVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBpc0Vycm9yKGVycikgPyBgJHtlcnIubWVzc2FnZX1cXG4ke2Vyci5zdGFja31gIDogZXJyICsgJydcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9KVxufSlcblxuLy8gRXhwb3J0IHRoZSBzaW5nbGV0b25Sb3V0ZXIgYW5kIHRoaXMgaXMgdGhlIHB1YmxpYyBBUEkuXG5leHBvcnQgZGVmYXVsdCBzaW5nbGV0b25Sb3V0ZXIgYXMgU2luZ2xldG9uUm91dGVyXG5cbi8vIFJlZXhwb3J0IHRoZSB3aXRoUm91dGVyIEhPQ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB3aXRoUm91dGVyIH0gZnJvbSAnLi93aXRoLXJvdXRlcidcblxuLyoqXG4gKiBUaGlzIGhvb2sgZ2l2ZXMgYWNjZXNzIHRoZSBbcm91dGVyIG9iamVjdF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvcGFnZXMvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXJvdXRlciNyb3V0ZXItb2JqZWN0KVxuICogaW5zaWRlIHRoZSBbUGFnZXMgUm91dGVyXShodHRwczovL25leHRqcy5vcmcvZG9jcy9wYWdlcy9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uKS5cbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGB1c2VSb3V0ZXJgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9wYWdlcy9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91c2Utcm91dGVyKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUm91dGVyKCk6IE5leHRSb3V0ZXIge1xuICBjb25zdCByb3V0ZXIgPSBSZWFjdC51c2VDb250ZXh0KFJvdXRlckNvbnRleHQpXG4gIGlmICghcm91dGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ05leHRSb3V0ZXIgd2FzIG5vdCBtb3VudGVkLiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uZXh0LXJvdXRlci1ub3QtbW91bnRlZCdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcm91dGVyXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcm91dGVyIGFuZCBhc3NpZ24gaXQgYXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS5cbiAqIFRoaXMgaXMgdXNlZCBpbiBjbGllbnQgc2lkZSB3aGVuIHdlIGFyZSBpbml0aWFsaXppbmcgdGhlIGFwcC5cbiAqIFRoaXMgc2hvdWxkICoqbm90KiogYmUgdXNlZCBpbnNpZGUgdGhlIHNlcnZlci5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVyKFxuICAuLi5hcmdzOiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFJvdXRlcj5cbik6IFJvdXRlciB7XG4gIHNpbmdsZXRvblJvdXRlci5yb3V0ZXIgPSBuZXcgUm91dGVyKC4uLmFyZ3MpXG4gIHNpbmdsZXRvblJvdXRlci5yZWFkeUNhbGxiYWNrcy5mb3JFYWNoKChjYikgPT4gY2IoKSlcbiAgc2luZ2xldG9uUm91dGVyLnJlYWR5Q2FsbGJhY2tzID0gW11cblxuICByZXR1cm4gc2luZ2xldG9uUm91dGVyLnJvdXRlclxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjcmVhdGUgdGhlIGB3aXRoUm91dGVyYCByb3V0ZXIgaW5zdGFuY2VcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVB1YmxpY1JvdXRlckluc3RhbmNlKHJvdXRlcjogUm91dGVyKTogTmV4dFJvdXRlciB7XG4gIGNvbnN0IHNjb3BlZFJvdXRlciA9IHJvdXRlciBhcyBhbnlcbiAgY29uc3QgaW5zdGFuY2UgPSB7fSBhcyBhbnlcblxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHVybFByb3BlcnR5RmllbGRzKSB7XG4gICAgaWYgKHR5cGVvZiBzY29wZWRSb3V0ZXJbcHJvcGVydHldID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5zdGFuY2VbcHJvcGVydHldID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgQXJyYXkuaXNBcnJheShzY29wZWRSb3V0ZXJbcHJvcGVydHldKSA/IFtdIDoge30sXG4gICAgICAgIHNjb3BlZFJvdXRlcltwcm9wZXJ0eV1cbiAgICAgICkgLy8gbWFrZXMgc3VyZSBxdWVyeSBpcyBub3Qgc3RhdGVmdWxcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaW5zdGFuY2VbcHJvcGVydHldID0gc2NvcGVkUm91dGVyW3Byb3BlcnR5XVxuICB9XG5cbiAgLy8gRXZlbnRzIGlzIGEgc3RhdGljIHByb3BlcnR5IG9uIHRoZSByb3V0ZXIsIHRoZSByb3V0ZXIgZG9lc24ndCBoYXZlIHRvIGJlIGluaXRpYWxpemVkIHRvIHVzZSBpdFxuICBpbnN0YW5jZS5ldmVudHMgPSBSb3V0ZXIuZXZlbnRzXG5cbiAgY29yZU1ldGhvZEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgIGluc3RhbmNlW2ZpZWxkXSA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgcmV0dXJuIHNjb3BlZFJvdXRlcltmaWVsZF0oLi4uYXJncylcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGluc3RhbmNlXG59XG4iXSwibmFtZXMiOlsiUm91dGVyIiwiY3JlYXRlUm91dGVyIiwibWFrZVB1YmxpY1JvdXRlckluc3RhbmNlIiwidXNlUm91dGVyIiwid2l0aFJvdXRlciIsInNpbmdsZXRvblJvdXRlciIsInJvdXRlciIsInJlYWR5Q2FsbGJhY2tzIiwicmVhZHkiLCJjYWxsYmFjayIsIndpbmRvdyIsInB1c2giLCJ1cmxQcm9wZXJ0eUZpZWxkcyIsInJvdXRlckV2ZW50cyIsImNvcmVNZXRob2RGaWVsZHMiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImV2ZW50cyIsImdldFJvdXRlciIsIm1lc3NhZ2UiLCJFcnJvciIsImZvckVhY2giLCJmaWVsZCIsImFyZ3MiLCJldmVudCIsIm9uIiwiZXZlbnRGaWVsZCIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic3Vic3RyaW5nIiwiX3NpbmdsZXRvblJvdXRlciIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsImlzRXJyb3IiLCJzdGFjayIsIlJlYWN0IiwidXNlQ29udGV4dCIsIlJvdXRlckNvbnRleHQiLCJjYiIsInNjb3BlZFJvdXRlciIsImluc3RhbmNlIiwicHJvcGVydHkiLCJhc3NpZ24iLCJBcnJheSIsImlzQXJyYXkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/router.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/script.js":
|
||
/*!*************************************************!*\
|
||
!*** ./node_modules/next/dist/client/script.js ***!
|
||
\*************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return _default;\n },\n handleClientScriptLoad: function() {\n return handleClientScriptLoad;\n },\n initScriptLoader: function() {\n return initScriptLoader;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/react/jsx-runtime.js\");\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"(pages-dir-browser)/./node_modules/react-dom/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _setattributesfromprops = __webpack_require__(/*! ./set-attributes-from-props */ \"(pages-dir-browser)/./node_modules/next/dist/client/set-attributes-from-props.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"(pages-dir-browser)/./node_modules/next/dist/client/request-idle-callback.js\");\nconst ScriptCache = new Map();\nconst LoadCache = new Set();\nconst insertStylesheets = (stylesheets)=>{\n // Case 1: Styles for afterInteractive/lazyOnload with appDir injected via handleClientScriptLoad\n //\n // Using ReactDOM.preinit to feature detect appDir and inject styles\n // Stylesheets might have already been loaded if initialized with Script component\n // Re-inject styles here to handle scripts loaded via handleClientScriptLoad\n // ReactDOM.preinit handles dedup and ensures the styles are loaded only once\n if (_reactdom.default.preinit) {\n stylesheets.forEach((stylesheet)=>{\n _reactdom.default.preinit(stylesheet, {\n as: 'style'\n });\n });\n return;\n }\n // Case 2: Styles for afterInteractive/lazyOnload with pages injected via handleClientScriptLoad\n //\n // We use this function to load styles when appdir is not detected\n // TODO: Use React float APIs to load styles once available for pages dir\n if (true) {\n let head = document.head;\n stylesheets.forEach((stylesheet)=>{\n let link = document.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = stylesheet;\n head.appendChild(link);\n });\n }\n};\nconst loadScript = (props)=>{\n const { src, id, onLoad = ()=>{}, onReady = null, dangerouslySetInnerHTML, children = '', strategy = 'afterInteractive', onError, stylesheets } = props;\n const cacheKey = id || src;\n // Script has already loaded\n if (cacheKey && LoadCache.has(cacheKey)) {\n return;\n }\n // Contents of this script are already loading/loaded\n if (ScriptCache.has(src)) {\n LoadCache.add(cacheKey);\n // It is possible that multiple `next/script` components all have same \"src\", but has different \"onLoad\"\n // This is to make sure the same remote script will only load once, but \"onLoad\" are executed in order\n ScriptCache.get(src).then(onLoad, onError);\n return;\n }\n /** Execute after the script first loaded */ const afterLoad = ()=>{\n // Run onReady for the first time after load event\n if (onReady) {\n onReady();\n }\n // add cacheKey to LoadCache when load successfully\n LoadCache.add(cacheKey);\n };\n const el = document.createElement('script');\n const loadPromise = new Promise((resolve, reject)=>{\n el.addEventListener('load', function(e) {\n resolve();\n if (onLoad) {\n onLoad.call(this, e);\n }\n afterLoad();\n });\n el.addEventListener('error', function(e) {\n reject(e);\n });\n }).catch(function(e) {\n if (onError) {\n onError(e);\n }\n });\n if (dangerouslySetInnerHTML) {\n // Casting since lib.dom.d.ts doesn't have TrustedHTML yet.\n el.innerHTML = dangerouslySetInnerHTML.__html || '';\n afterLoad();\n } else if (children) {\n el.textContent = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';\n afterLoad();\n } else if (src) {\n el.src = src;\n // do not add cacheKey into LoadCache for remote script here\n // cacheKey will be added to LoadCache when it is actually loaded (see loadPromise above)\n ScriptCache.set(src, loadPromise);\n }\n (0, _setattributesfromprops.setAttributesFromProps)(el, props);\n if (strategy === 'worker') {\n el.setAttribute('type', 'text/partytown');\n }\n el.setAttribute('data-nscript', strategy);\n // Load styles associated with this script\n if (stylesheets) {\n insertStylesheets(stylesheets);\n }\n document.body.appendChild(el);\n};\nfunction handleClientScriptLoad(props) {\n const { strategy = 'afterInteractive' } = props;\n if (strategy === 'lazyOnload') {\n window.addEventListener('load', ()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n });\n } else {\n loadScript(props);\n }\n}\nfunction loadLazyScript(props) {\n if (document.readyState === 'complete') {\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n } else {\n window.addEventListener('load', ()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n });\n }\n}\nfunction addBeforeInteractiveToCache() {\n const scripts = [\n ...document.querySelectorAll('[data-nscript=\"beforeInteractive\"]'),\n ...document.querySelectorAll('[data-nscript=\"beforePageRender\"]')\n ];\n scripts.forEach((script)=>{\n const cacheKey = script.id || script.getAttribute('src');\n LoadCache.add(cacheKey);\n });\n}\nfunction initScriptLoader(scriptLoaderItems) {\n scriptLoaderItems.forEach(handleClientScriptLoad);\n addBeforeInteractiveToCache();\n}\n/**\n * Load a third-party scripts in an optimized way.\n *\n * Read more: [Next.js Docs: `next/script`](https://nextjs.org/docs/app/api-reference/components/script)\n */ function Script(props) {\n const { id, src = '', onLoad = ()=>{}, onReady = null, strategy = 'afterInteractive', onError, stylesheets, ...restProps } = props;\n // Context is available only during SSR\n let { updateScripts, scripts, getIsSsr, appDir, nonce } = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n // if a nonce is explicitly passed to the script tag, favor that over the automatic handling\n nonce = restProps.nonce || nonce;\n /**\n * - First mount:\n * 1. The useEffect for onReady executes\n * 2. hasOnReadyEffectCalled.current is false, but the script hasn't loaded yet (not in LoadCache)\n * onReady is skipped, set hasOnReadyEffectCalled.current to true\n * 3. The useEffect for loadScript executes\n * 4. hasLoadScriptEffectCalled.current is false, loadScript executes\n * Once the script is loaded, the onLoad and onReady will be called by then\n * [If strict mode is enabled / is wrapped in <OffScreen /> component]\n * 5. The useEffect for onReady executes again\n * 6. hasOnReadyEffectCalled.current is true, so entire effect is skipped\n * 7. The useEffect for loadScript executes again\n * 8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped\n *\n * - Second mount:\n * 1. The useEffect for onReady executes\n * 2. hasOnReadyEffectCalled.current is false, but the script has already loaded (found in LoadCache)\n * onReady is called, set hasOnReadyEffectCalled.current to true\n * 3. The useEffect for loadScript executes\n * 4. The script is already loaded, loadScript bails out\n * [If strict mode is enabled / is wrapped in <OffScreen /> component]\n * 5. The useEffect for onReady executes again\n * 6. hasOnReadyEffectCalled.current is true, so entire effect is skipped\n * 7. The useEffect for loadScript executes again\n * 8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped\n */ const hasOnReadyEffectCalled = (0, _react.useRef)(false);\n (0, _react.useEffect)(()=>{\n const cacheKey = id || src;\n if (!hasOnReadyEffectCalled.current) {\n // Run onReady if script has loaded before but component is re-mounted\n if (onReady && cacheKey && LoadCache.has(cacheKey)) {\n onReady();\n }\n hasOnReadyEffectCalled.current = true;\n }\n }, [\n onReady,\n id,\n src\n ]);\n const hasLoadScriptEffectCalled = (0, _react.useRef)(false);\n (0, _react.useEffect)(()=>{\n if (!hasLoadScriptEffectCalled.current) {\n if (strategy === 'afterInteractive') {\n loadScript(props);\n } else if (strategy === 'lazyOnload') {\n loadLazyScript(props);\n }\n hasLoadScriptEffectCalled.current = true;\n }\n }, [\n props,\n strategy\n ]);\n if (strategy === 'beforeInteractive' || strategy === 'worker') {\n if (updateScripts) {\n scripts[strategy] = (scripts[strategy] || []).concat([\n {\n id,\n src,\n onLoad,\n onReady,\n onError,\n ...restProps,\n nonce\n }\n ]);\n updateScripts(scripts);\n } else if (getIsSsr && getIsSsr()) {\n // Script has already loaded during SSR\n LoadCache.add(id || src);\n } else if (getIsSsr && !getIsSsr()) {\n loadScript({\n ...props,\n nonce\n });\n }\n }\n // For the app directory, we need React Float to preload these scripts.\n if (appDir) {\n // Injecting stylesheets here handles beforeInteractive and worker scripts correctly\n // For other strategies injecting here ensures correct stylesheet order\n // ReactDOM.preinit handles loading the styles in the correct order,\n // also ensures the stylesheet is loaded only once and in a consistent manner\n //\n // Case 1: Styles for beforeInteractive/worker with appDir - handled here\n // Case 2: Styles for beforeInteractive/worker with pages dir - Not handled yet\n // Case 3: Styles for afterInteractive/lazyOnload with appDir - handled here\n // Case 4: Styles for afterInteractive/lazyOnload with pages dir - handled in insertStylesheets function\n if (stylesheets) {\n stylesheets.forEach((styleSrc)=>{\n _reactdom.default.preinit(styleSrc, {\n as: 'style'\n });\n });\n }\n // Before interactive scripts need to be loaded by Next.js' runtime instead\n // of native <script> tags, because they no longer have `defer`.\n if (strategy === 'beforeInteractive') {\n if (!src) {\n // For inlined scripts, we put the content in `children`.\n if (restProps.dangerouslySetInnerHTML) {\n // Casting since lib.dom.d.ts doesn't have TrustedHTML yet.\n restProps.children = restProps.dangerouslySetInnerHTML.__html;\n delete restProps.dangerouslySetInnerHTML;\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n nonce: nonce,\n dangerouslySetInnerHTML: {\n __html: \"(self.__next_s=self.__next_s||[]).push(\" + JSON.stringify([\n 0,\n {\n ...restProps,\n id\n }\n ]) + \")\"\n }\n });\n } else {\n // @ts-ignore\n _reactdom.default.preload(src, restProps.integrity ? {\n as: 'script',\n integrity: restProps.integrity,\n nonce,\n crossOrigin: restProps.crossOrigin\n } : {\n as: 'script',\n nonce,\n crossOrigin: restProps.crossOrigin\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n nonce: nonce,\n dangerouslySetInnerHTML: {\n __html: \"(self.__next_s=self.__next_s||[]).push(\" + JSON.stringify([\n src,\n {\n ...restProps,\n id\n }\n ]) + \")\"\n }\n });\n }\n } else if (strategy === 'afterInteractive') {\n if (src) {\n // @ts-ignore\n _reactdom.default.preload(src, restProps.integrity ? {\n as: 'script',\n integrity: restProps.integrity,\n nonce,\n crossOrigin: restProps.crossOrigin\n } : {\n as: 'script',\n nonce,\n crossOrigin: restProps.crossOrigin\n });\n }\n }\n }\n return null;\n}\n_c = Script;\nObject.defineProperty(Script, '__nextScript', {\n value: true\n});\nconst _default = Script;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=script.js.map\nvar _c;\n$RefreshReg$(_c, \"Script\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3NjcmlwdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFnWUEsT0FBcUI7ZUFBckI7O0lBcE9nQkEsc0JBQXNCO2VBQXRCQTs7SUFnQ0FDLGdCQUFnQjtlQUFoQkE7Ozs7OzsrRUExTEs7NkVBQzBDOzZEQUU1QjtvREFDSTtpREFDSDtBQUVwQyxNQUFNQyxjQUFjLElBQUlDO0FBQ3hCLE1BQU1DLFlBQVksSUFBSUM7QUFpQnRCLE1BQU1DLG9CQUFvQixDQUFDQztJQUN6QixpR0FBaUc7SUFDakcsRUFBRTtJQUNGLG9FQUFvRTtJQUNwRSxrRkFBa0Y7SUFDbEYsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSxJQUFJQyxVQUFBQSxPQUFRLENBQUNDLE9BQU8sRUFBRTtRQUNwQkYsWUFBWUcsT0FBTyxDQUFDLENBQUNDO1lBQ25CSCxVQUFBQSxPQUFRLENBQUNDLE9BQU8sQ0FBQ0UsWUFBWTtnQkFBRUMsSUFBSTtZQUFRO1FBQzdDO1FBRUE7SUFDRjtJQUVBLGdHQUFnRztJQUNoRyxFQUFFO0lBQ0Ysa0VBQWtFO0lBQ2xFLHlFQUF5RTtJQUN6RSxJQUFJLElBQTZCLEVBQUU7UUFDakMsSUFBSUUsT0FBT0MsU0FBU0QsSUFBSTtRQUN4QlAsWUFBWUcsT0FBTyxDQUFDLENBQUNDO1lBQ25CLElBQUlLLE9BQU9ELFNBQVNFLGFBQWEsQ0FBQztZQUVsQ0QsS0FBS0UsSUFBSSxHQUFHO1lBQ1pGLEtBQUtHLEdBQUcsR0FBRztZQUNYSCxLQUFLSSxJQUFJLEdBQUdUO1lBRVpHLEtBQUtPLFdBQVcsQ0FBQ0w7UUFDbkI7SUFDRjtBQUNGO0FBRUEsTUFBTU0sYUFBYSxDQUFDQztJQUNsQixNQUFNLEVBQ0pDLEdBQUcsRUFDSEMsRUFBRSxFQUNGQyxTQUFTLEtBQU8sQ0FBQyxFQUNqQkMsVUFBVSxJQUFJLEVBQ2RDLHVCQUF1QixFQUN2QkMsV0FBVyxFQUFFLEVBQ2JDLFdBQVcs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QVVrQixXQUFXO2dCQUNwQyxJQUNBO29CQUFFekUsSUFBSTtvQkFBVTJEO29CQUFPYyxhQUFhbEIsVUFBVWtCLFdBQVc7Z0JBQUM7WUFFbEU7UUFDRjtJQUNGO0lBRUEsT0FBTztBQUNUO0tBdExTbkI7QUF3TFRvQixPQUFPQyxjQUFjLENBQUNyQixRQUFRLGdCQUFnQjtJQUFFc0IsT0FBTztBQUFLO01BRTVELFdBQWV0QiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxzY3JpcHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlQ29udGV4dCwgdXNlUmVmLCB0eXBlIEpTWCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBTY3JpcHRIVE1MQXR0cmlidXRlcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSGVhZE1hbmFnZXJDb250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IHNldEF0dHJpYnV0ZXNGcm9tUHJvcHMgfSBmcm9tICcuL3NldC1hdHRyaWJ1dGVzLWZyb20tcHJvcHMnXG5pbXBvcnQgeyByZXF1ZXN0SWRsZUNhbGxiYWNrIH0gZnJvbSAnLi9yZXF1ZXN0LWlkbGUtY2FsbGJhY2snXG5cbmNvbnN0IFNjcmlwdENhY2hlID0gbmV3IE1hcCgpXG5jb25zdCBMb2FkQ2FjaGUgPSBuZXcgU2V0KClcblxuZXhwb3J0IGludGVyZmFjZSBTY3JpcHRQcm9wcyBleHRlbmRzIFNjcmlwdEhUTUxBdHRyaWJ1dGVzPEhUTUxTY3JpcHRFbGVtZW50PiB7XG4gIHN0cmF0ZWd5PzogJ2FmdGVySW50ZXJhY3RpdmUnIHwgJ2xhenlPbmxvYWQnIHwgJ2JlZm9yZUludGVyYWN0aXZlJyB8ICd3b3JrZXInXG4gIGlkPzogc3RyaW5nXG4gIG9uTG9hZD86IChlOiBhbnkpID0+IHZvaWRcbiAgb25SZWFkeT86ICgpID0+IHZvaWQgfCBudWxsXG4gIG9uRXJyb3I/OiAoZTogYW55KSA9PiB2b2lkXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIHN0eWxlc2hlZXRzPzogc3RyaW5nW11cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYFNjcmlwdFByb3BzYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgdHlwZSBQcm9wcyA9IFNjcmlwdFByb3BzXG5cbmNvbnN0IGluc2VydFN0eWxlc2hlZXRzID0gKHN0eWxlc2hlZXRzOiBzdHJpbmdbXSkgPT4ge1xuICAvLyBDYXNlIDE6IFN0eWxlcyBmb3IgYWZ0ZXJJbnRlcmFjdGl2ZS9sYXp5T25sb2FkIHdpdGggYXBwRGlyIGluamVjdGVkIHZpYSBoYW5kbGVDbGllbnRTY3JpcHRMb2FkXG4gIC8vXG4gIC8vIFVzaW5nIFJlYWN0RE9NLnByZWluaXQgdG8gZmVhdHVyZSBkZXRlY3QgYXBwRGlyIGFuZCBpbmplY3Qgc3R5bGVzXG4gIC8vIFN0eWxlc2hlZXRzIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGxvYWRlZCBpZiBpbml0aWFsaXplZCB3aXRoIFNjcmlwdCBjb21wb25lbnRcbiAgLy8gUmUtaW5qZWN0IHN0eWxlcyBoZXJlIHRvIGhhbmRsZSBzY3JpcHRzIGxvYWRlZCB2aWEgaGFuZGxlQ2xpZW50U2NyaXB0TG9hZFxuICAvLyBSZWFjdERPTS5wcmVpbml0IGhhbmRsZXMgZGVkdXAgYW5kIGVuc3VyZXMgdGhlIHN0eWxlcyBhcmUgbG9hZGVkIG9ubHkgb25jZVxuICBpZiAoUmVhY3RET00ucHJlaW5pdCkge1xuICAgIHN0eWxlc2hlZXRzLmZvckVhY2goKHN0eWxlc2hlZXQ6IHN0cmluZykgPT4ge1xuICAgICAgUmVhY3RET00ucHJlaW5pdChzdHlsZXNoZWV0LCB7IGFzOiAnc3R5bGUnIH0pXG4gICAgfSlcblxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gQ2FzZSAyOiBTdHlsZXMgZm9yIGFmdGVySW50ZXJhY3RpdmUvbGF6eU9ubG9hZCB3aXRoIHBhZ2VzIGluamVjdGVkIHZpYSBoYW5kbGVDbGllbnRTY3JpcHRMb2FkXG4gIC8vXG4gIC8vIFdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGxvYWQgc3R5bGVzIHdoZW4gYXBwZGlyIGlzIG5vdCBkZXRlY3RlZFxuICAvLyBUT0RPOiBVc2UgUmVhY3QgZmxvYXQgQVBJcyB0byBsb2FkIHN0eWxlcyBvbmNlIGF2YWlsYWJsZSBmb3IgcGFnZXMgZGlyXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGxldCBoZWFkID0gZG9jdW1lbnQuaGVhZFxuICAgIHN0eWxlc2hlZXRzLmZvckVhY2goKHN0eWxlc2hlZXQ6IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJylcblxuICAgICAgbGluay50eXBlID0gJ3RleHQvY3NzJ1xuICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCdcbiAgICAgIGxpbmsuaHJlZiA9IHN0eWxlc2hlZXRcblxuICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKVxuICAgIH0pXG4gIH1cbn1cblxuY29uc3QgbG9hZFNjcmlwdCA9IChwcm9wczogU2NyaXB0UHJvcHMpOiB2b2lkID0+IHtcbiAgY29uc3Qge1xuICAgIHNyYyxcbiAgICBpZCxcbiAgICBvbkxvYWQgPSAoKSA9PiB7fSxcbiAgICBvblJlYWR5ID0gbnVsbCxcbiAgICBkYW5nZXJvdXNseVNldElubmVySFRNTCxcbiAgICBjaGlsZHJlbiA9ICcnLFxuICAgIHN0cmF0ZWd5ID0gJ2FmdGVySW50ZXJhY3RpdmUnLFxuICAgIG9uRXJyb3IsXG4gICAgc3R5bGVzaGVldHMsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IGNhY2hlS2V5ID0gaWQgfHwgc3JjXG5cbiAgLy8gU2NyaXB0IGhhcyBhbHJlYWR5IGxvYWRlZFxuICBpZiAoY2FjaGVLZXkgJiYgTG9hZENhY2hlLmhhcyhjYWNoZUtleSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIENvbnRlbnRzIG9mIHRoaXMgc2NyaXB0IGFyZSBhbHJlYWR5IGxvYWRpbmcvbG9hZGVkXG4gIGlmIChTY3JpcHRDYWNoZS5oYXMoc3JjKSkge1xuICAgIExvYWRDYWNoZS5hZGQoY2FjaGVLZXkpXG4gICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCBtdWx0aXBsZSBgbmV4dC9zY3JpcHRgIGNvbXBvbmVudHMgYWxsIGhhdmUgc2FtZSBcInNyY1wiLCBidXQgaGFzIGRpZmZlcmVudCBcIm9uTG9hZFwiXG4gICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgdGhlIHNhbWUgcmVtb3RlIHNjcmlwdCB3aWxsIG9ubHkgbG9hZCBvbmNlLCBidXQgXCJvbkxvYWRcIiBhcmUgZXhlY3V0ZWQgaW4gb3JkZXJcbiAgICBTY3JpcHRDYWNoZS5nZXQoc3JjKS50aGVuKG9uTG9hZCwgb25FcnJvcilcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKiBFeGVjdXRlIGFmdGVyIHRoZSBzY3JpcHQgZmlyc3QgbG9hZGVkICovXG4gIGNvbnN0IGFmdGVyTG9hZCA9ICgpID0+IHtcbiAgICAvLyBSdW4gb25SZWFkeSBmb3IgdGhlIGZpcnN0IHRpbWUgYWZ0ZXIgbG9hZCBldmVudFxuICAgIGlmIChvblJlYWR5KSB7XG4gICAgICBvblJlYWR5KClcbiAgICB9XG4gICAgLy8gYWRkIGNhY2hlS2V5IHRvIExvYWRDYWNoZSB3aGVuIGxvYWQgc3VjY2Vzc2Z1bGx5XG4gICAgTG9hZENhY2hlLmFkZChjYWNoZUtleSlcbiAgfVxuXG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JylcblxuICBjb25zdCBsb2FkUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJlc29sdmUoKVxuICAgICAgaWYgKG9uTG9hZCkge1xuICAgICAgICBvbkxvYWQuY2FsbCh0aGlzLCBlKVxuICAgICAgfVxuICAgICAgYWZ0ZXJMb2FkKClcbiAgICB9KVxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJlamVjdChlKVxuICAgIH0pXG4gIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZSlcbiAgICB9XG4gIH0pXG5cbiAgaWYgKGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSB7XG4gICAgLy8gQ2FzdGluZyBzaW5jZSBsaWIuZG9tLmQudHMgZG9lc24ndCBoYXZlIFRydXN0ZWRIVE1MIHlldC5cbiAgICBlbC5pbm5lckhUTUwgPSAoZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sIGFzIHN0cmluZykgfHwgJydcblxuICAgIGFmdGVyTG9hZCgpXG4gIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcbiAgICBlbC50ZXh0Q29udGVudCA9XG4gICAgICB0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnXG4gICAgICAgID8gY2hpbGRyZW5cbiAgICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkcmVuKVxuICAgICAgICAgID8gY2hpbGRyZW4uam9pbignJylcbiAgICAgICAgICA6ICcnXG5cbiAgICBhZnRlckxvYWQoKVxuICB9IGVsc2UgaWYgKHNyYykge1xuICAgIGVsLnNyYyA9IHNyY1xuICAgIC8vIGRvIG5vdCBhZGQgY2FjaGVLZXkgaW50byBMb2FkQ2FjaGUgZm9yIHJlbW90ZSBzY3JpcHQgaGVyZVxuICAgIC8vIGNhY2hlS2V5IHdpbGwgYmUgYWRkZWQgdG8gTG9hZENhY2hlIHdoZW4gaXQgaXMgYWN0dWFsbHkgbG9hZGVkIChzZWUgbG9hZFByb21pc2UgYWJvdmUpXG5cbiAgICBTY3JpcHRDYWNoZS5zZXQoc3JjLCBsb2FkUHJvbWlzZSlcbiAgfVxuXG4gIHNldEF0dHJpYnV0ZXNGcm9tUHJvcHMoZWwsIHByb3BzKVxuXG4gIGlmIChzdHJhdGVneSA9PT0gJ3dvcmtlcicpIHtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9wYXJ0eXRvd24nKVxuICB9XG5cbiAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLW5zY3JpcHQnLCBzdHJhdGVneSlcblxuICAvLyBMb2FkIHN0eWxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY3JpcHRcbiAgaWYgKHN0eWxlc2hlZXRzKSB7XG4gICAgaW5zZXJ0U3R5bGVzaGVldHMoc3R5bGVzaGVldHMpXG4gIH1cblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlQ2xpZW50U2NyaXB0TG9hZChwcm9wczogU2NyaXB0UHJvcHMpIHtcbiAgY29uc3QgeyBzdHJhdGVneSA9ICdhZnRlckludGVyYWN0aXZlJyB9ID0gcHJvcHNcbiAgaWYgKHN0cmF0ZWd5ID09PSAnbGF6eU9ubG9hZCcpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT4gbG9hZFNjcmlwdChwcm9wcykpXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBsb2FkU2NyaXB0KHByb3BzKVxuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRMYXp5U2NyaXB0KHByb3BzOiBTY3JpcHRQcm9wcykge1xuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT4gbG9hZFNjcmlwdChwcm9wcykpXG4gIH0gZWxzZSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICByZXF1ZXN0SWRsZUNhbGxiYWNrKCgpID0+IGxvYWRTY3JpcHQocHJvcHMpKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQmVmb3JlSW50ZXJhY3RpdmVUb0NhY2hlKCkge1xuICBjb25zdCBzY3JpcHRzID0gW1xuICAgIC4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW5zY3JpcHQ9XCJiZWZvcmVJbnRlcmFjdGl2ZVwiXScpLFxuICAgIC4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW5zY3JpcHQ9XCJiZWZvcmVQYWdlUmVuZGVyXCJdJyksXG4gIF1cbiAgc2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpID0+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IHNjcmlwdC5pZCB8fCBzY3JpcHQuZ2V0QXR0cmlidXRlKCdzcmMnKVxuICAgIExvYWRDYWNoZS5hZGQoY2FjaGVLZXkpXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0U2NyaXB0TG9hZGVyKHNjcmlwdExvYWRlckl0ZW1zOiBTY3JpcHRQcm9wc1tdKSB7XG4gIHNjcmlwdExvYWRlckl0ZW1zLmZvckVhY2goaGFuZGxlQ2xpZW50U2NyaXB0TG9hZClcbiAgYWRkQmVmb3JlSW50ZXJhY3RpdmVUb0NhY2hlKClcbn1cblxuLyoqXG4gKiBMb2FkIGEgdGhpcmQtcGFydHkgc2NyaXB0cyBpbiBhbiBvcHRpbWl6ZWQgd2F5LlxuICpcbiAqIFJlYWQgbW9yZTogW05leHQuanMgRG9jczogYG5leHQvc2NyaXB0YF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvY29tcG9uZW50cy9zY3JpcHQpXG4gKi9cbmZ1bmN0aW9uIFNjcmlwdChwcm9wczogU2NyaXB0UHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgc3JjID0gJycsXG4gICAgb25Mb2FkID0gKCkgPT4ge30sXG4gICAgb25SZWFkeSA9IG51bGwsXG4gICAgc3RyYXRlZ3kgPSAnYWZ0ZXJJbnRlcmFjdGl2ZScsXG4gICAgb25FcnJvcixcbiAgICBzdHlsZXNoZWV0cyxcbiAgICAuLi5yZXN0UHJvcHNcbiAgfSA9IHByb3BzXG5cbiAgLy8gQ29udGV4dCBpcyBhdmFpbGFibGUgb25seSBkdXJpbmcgU1NSXG4gIGxldCB7IHVwZGF0ZVNjcmlwdHMsIHNjcmlwdHMsIGdldElzU3NyLCBhcHBEaXIsIG5vbmNlIH0gPVxuICAgIHVzZUNvbnRleHQoSGVhZE1hbmFnZXJDb250ZXh0KVxuXG4gIC8vIGlmIGEgbm9uY2UgaXMgZXhwbGljaXRseSBwYXNzZWQgdG8gdGhlIHNjcmlwdCB0YWcsIGZhdm9yIHRoYXQgb3ZlciB0aGUgYXV0b21hdGljIGhhbmRsaW5nXG4gIG5vbmNlID0gcmVzdFByb3BzLm5vbmNlIHx8IG5vbmNlXG5cbiAgLyoqXG4gICAqIC0gRmlyc3QgbW91bnQ6XG4gICAqICAgMS4gVGhlIHVzZUVmZmVjdCBmb3Igb25SZWFkeSBleGVjdXRlc1xuICAgKiAgIDIuIGhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCBpcyBmYWxzZSwgYnV0IHRoZSBzY3JpcHQgaGFzbid0IGxvYWRlZCB5ZXQgKG5vdCBpbiBMb2FkQ2FjaGUpXG4gICAqICAgICAgb25SZWFkeSBpcyBza2lwcGVkLCBzZXQgaGFzT25SZWFkeUVmZmVjdENhbGxlZC5jdXJyZW50IHRvIHRydWVcbiAgICogICAzLiBUaGUgdXNlRWZmZWN0IGZvciBsb2FkU2NyaXB0IGV4ZWN1dGVzXG4gICAqICAgNC4gaGFzTG9hZFNjcmlwdEVmZmVjdENhbGxlZC5jdXJyZW50IGlzIGZhbHNlLCBsb2FkU2NyaXB0IGV4ZWN1dGVzXG4gICAqICAgICAgT25jZSB0aGUgc2NyaXB0IGlzIGxvYWRlZCwgdGhlIG9uTG9hZCBhbmQgb25SZWFkeSB3aWxsIGJlIGNhbGxlZCBieSB0aGVuXG4gICAqICAgW0lmIHN0cmljdCBtb2RlIGlzIGVuYWJsZWQgLyBpcyB3cmFwcGVkIGluIDxPZmZTY3JlZW4gLz4gY29tcG9uZW50XVxuICAgKiAgIDUuIFRoZSB1c2VFZmZlY3QgZm9yIG9uUmVhZHkgZXhlY3V0ZXMgYWdhaW5cbiAgICogICA2LiBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQgaXMgdHJ1ZSwgc28gZW50aXJlIGVmZmVjdCBpcyBza2lwcGVkXG4gICAqICAgNy4gVGhlIHVzZUVmZmVjdCBmb3IgbG9hZFNjcmlwdCBleGVjdXRlcyBhZ2FpblxuICAgKiAgIDguIGhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQuY3VycmVudCBpcyB0cnVlLCBzbyBlbnRpcmUgZWZmZWN0IGlzIHNraXBwZWRcbiAgICpcbiAgICogLSBTZWNvbmQgbW91bnQ6XG4gICAqICAgMS4gVGhlIHVzZUVmZmVjdCBmb3Igb25SZWFkeSBleGVjdXRlc1xuICAgKiAgIDIuIGhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCBpcyBmYWxzZSwgYnV0IHRoZSBzY3JpcHQgaGFzIGFscmVhZHkgbG9hZGVkIChmb3VuZCBpbiBMb2FkQ2FjaGUpXG4gICAqICAgICAgb25SZWFkeSBpcyBjYWxsZWQsIHNldCBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQgdG8gdHJ1ZVxuICAgKiAgIDMuIFRoZSB1c2VFZmZlY3QgZm9yIGxvYWRTY3JpcHQgZXhlY3V0ZXNcbiAgICogICA0LiBUaGUgc2NyaXB0IGlzIGFscmVhZHkgbG9hZGVkLCBsb2FkU2NyaXB0IGJhaWxzIG91dFxuICAgKiAgIFtJZiBzdHJpY3QgbW9kZSBpcyBlbmFibGVkIC8gaXMgd3JhcHBlZCBpbiA8T2ZmU2NyZWVuIC8+IGNvbXBvbmVudF1cbiAgICogICA1LiBUaGUgdXNlRWZmZWN0IGZvciBvblJlYWR5IGV4ZWN1dGVzIGFnYWluXG4gICAqICAgNi4gaGFzT25SZWFkeUVmZmVjdENhbGxlZC5jdXJyZW50IGlzIHRydWUsIHNvIGVudGlyZSBlZmZlY3QgaXMgc2tpcHBlZFxuICAgKiAgIDcuIFRoZSB1c2VFZmZlY3QgZm9yIGxvYWRTY3JpcHQgZXhlY3V0ZXMgYWdhaW5cbiAgICogICA4LiBoYXNMb2FkU2NyaXB0RWZmZWN0Q2FsbGVkLmN1cnJlbnQgaXMgdHJ1ZSwgc28gZW50aXJlIGVmZmVjdCBpcyBza2lwcGVkXG4gICAqL1xuICBjb25zdCBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBpZCB8fCBzcmNcbiAgICBpZiAoIWhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCkge1xuICAgICAgLy8gUnVuIG9uUmVhZHkgaWYgc2NyaXB0IGhhcyBsb2FkZWQgYmVmb3JlIGJ1dCBjb21wb25lbnQgaXMgcmUtbW91bnRlZFxuICAgICAgaWYgKG9uUmVhZHkgJiYgY2FjaGVLZXkgJiYgTG9hZENhY2hlLmhhcyhjYWNoZUtleSkpIHtcbiAgICAgICAgb25SZWFkeSgpXG4gICAgICB9XG5cbiAgICAgIGhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCA9IHRydWVcbiAgICB9XG4gIH0sIFtvblJlYWR5LCBpZCwgc3JjXSlcblxuICBjb25zdCBoYXNMb2FkU2NyaXB0RWZmZWN0Q2FsbGVkID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFoYXNMb2FkU2NyaXB0RWZmZWN0Q2FsbGVkLmN1cnJlbnQpIHtcbiAgICAgIGlmIChzdHJhdGVneSA9PT0gJ2FmdGVySW50ZXJhY3RpdmUnKSB7XG4gICAgICAgIGxvYWRTY3JpcHQocHJvcHMpXG4gICAgICB9IGVsc2UgaWYgKHN0cmF0ZWd5ID09PSAnbGF6eU9ubG9hZCcpIHtcbiAgICAgICAgbG9hZExhenlTY3JpcHQocHJvcHMpXG4gICAgICB9XG5cbiAgICAgIGhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQuY3VycmVudCA9IHRydWVcbiAgICB9XG4gIH0sIFtwcm9wcywgc3RyYXRlZ3ldKVxuXG4gIGlmIChzdHJhdGVneSA9PT0gJ2JlZm9yZUludGVyYWN0aXZlJyB8fCBzdHJhdGVneSA9PT0gJ3dvcmtlcicpIHtcbiAgICBpZiAodXBkYXRlU2NyaXB0cykge1xuICAgICAgc2NyaXB0c1tzdHJhdGVneV0gPSAoc2NyaXB0c1tzdHJhdGVneV0gfHwgW10pLmNvbmNhdChbXG4gICAgICAgIHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBzcmMsXG4gICAgICAgICAgb25Mb2FkLFxuICAgICAgICAgIG9uUmVhZHksXG4gICAgICAgICAgb25FcnJvcixcbiAgICAgICAgICAuLi5yZXN0UHJvcHMsXG4gICAgICAgICAgbm9uY2UsXG4gICAgICAgIH0sXG4gICAgICBdKVxuICAgICAgdXBkYXRlU2NyaXB0cyhzY3JpcHRzKVxuICAgIH0gZWxzZSBpZiAoZ2V0SXNTc3IgJiYgZ2V0SXNTc3IoKSkge1xuICAgICAgLy8gU2NyaXB0IGhhcyBhbHJlYWR5IGxvYWRlZCBkdXJpbmcgU1NSXG4gICAgICBMb2FkQ2FjaGUuYWRkKGlkIHx8IHNyYylcbiAgICB9IGVsc2UgaWYgKGdldElzU3NyICYmICFnZXRJc1NzcigpKSB7XG4gICAgICBsb2FkU2NyaXB0KHtcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIG5vbmNlLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvLyBGb3IgdGhlIGFwcCBkaXJlY3RvcnksIHdlIG5lZWQgUmVhY3QgRmxvYXQgdG8gcHJlbG9hZCB0aGVzZSBzY3JpcHRzLlxuICBpZiAoYXBwRGlyKSB7XG4gICAgLy8gSW5qZWN0aW5nIHN0eWxlc2hlZXRzIGhlcmUgaGFuZGxlcyBiZWZvcmVJbnRlcmFjdGl2ZSBhbmQgd29ya2VyIHNjcmlwdHMgY29ycmVjdGx5XG4gICAgLy8gRm9yIG90aGVyIHN0cmF0ZWdpZXMgaW5qZWN0aW5nIGhlcmUgZW5zdXJlcyBjb3JyZWN0IHN0eWxlc2hlZXQgb3JkZXJcbiAgICAvLyBSZWFjdERPTS5wcmVpbml0IGhhbmRsZXMgbG9hZGluZyB0aGUgc3R5bGVzIGluIHRoZSBjb3JyZWN0IG9yZGVyLFxuICAgIC8vIGFsc28gZW5zdXJlcyB0aGUgc3R5bGVzaGVldCBpcyBsb2FkZWQgb25seSBvbmNlIGFuZCBpbiBhIGNvbnNpc3RlbnQgbWFubmVyXG4gICAgLy9cbiAgICAvLyBDYXNlIDE6IFN0eWxlcyBmb3IgYmVmb3JlSW50ZXJhY3RpdmUvd29ya2VyIHdpdGggYXBwRGlyIC0gaGFuZGxlZCBoZXJlXG4gICAgLy8gQ2FzZSAyOiBTdHlsZXMgZm9yIGJlZm9yZUludGVyYWN0aXZlL3dvcmtlciB3aXRoIHBhZ2VzIGRpciAtIE5vdCBoYW5kbGVkIHlldFxuICAgIC8vIENhc2UgMzogU3R5bGVzIGZvciBhZnRlckludGVyYWN0aXZlL2xhenlPbmxvYWQgd2l0aCBhcHBEaXIgLSBoYW5kbGVkIGhlcmVcbiAgICAvLyBDYXNlIDQ6IFN0eWxlcyBmb3IgYWZ0ZXJJbnRlcmFjdGl2ZS9sYXp5T25sb2FkIHdpdGggcGFnZXMgZGlyIC0gaGFuZGxlZCBpbiBpbnNlcnRTdHlsZXNoZWV0cyBmdW5jdGlvblxuICAgIGlmIChzdHlsZXNoZWV0cykge1xuICAgICAgc3R5bGVzaGVldHMuZm9yRWFjaCgoc3R5bGVTcmMpID0+IHtcbiAgICAgICAgUmVhY3RET00ucHJlaW5pdChzdHlsZVNyYywgeyBhczogJ3N0eWxlJyB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBCZWZvcmUgaW50ZXJhY3RpdmUgc2NyaXB0cyBuZWVkIHRvIGJlIGxvYWRlZCBieSBOZXh0LmpzJyBydW50aW1lIGluc3RlYWRcbiAgICAvLyBvZiBuYXRpdmUgPHNjcmlwdD4gdGFncywgYmVjYXVzZSB0aGV5IG5vIGxvbmdlciBoYXZlIGBkZWZlcmAuXG4gICAgaWYgKHN0cmF0ZWd5ID09PSAnYmVmb3JlSW50ZXJhY3RpdmUnKSB7XG4gICAgICBpZiAoIXNyYykge1xuICAgICAgICAvLyBGb3IgaW5saW5lZCBzY3JpcHRzLCB3ZSBwdXQgdGhlIGNvbnRlbnQgaW4gYGNoaWxkcmVuYC5cbiAgICAgICAgaWYgKHJlc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCkge1xuICAgICAgICAgIC8vIENhc3Rpbmcgc2luY2UgbGliLmRvbS5kLnRzIGRvZXNuJ3QgaGF2ZSBUcnVzdGVkSFRNTCB5ZXQuXG4gICAgICAgICAgcmVzdFByb3BzLmNoaWxkcmVuID0gcmVzdFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXG4gICAgICAgICAgICAuX19odG1sIGFzIHN0cmluZ1xuICAgICAgICAgIGRlbGV0ZSByZXN0UHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPHNjcmlwdFxuICAgICAgICAgICAgbm9uY2U9e25vbmNlfVxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgICAgX19odG1sOiBgKHNlbGYuX19uZXh0X3M9c2VsZi5fX25leHRfc3x8W10pLnB1c2goJHtKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB7IC4uLnJlc3RQcm9wcywgaWQgfSxcbiAgICAgICAgICAgICAgXSl9KWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgUmVhY3RET00ucHJlbG9hZChcbiAgICAgICAgICBzcmMsXG4gICAgICAgICAgcmVzdFByb3BzLmludGVncml0eVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgYXM6ICdzY3JpcHQnLFxuICAgICAgICAgICAgICAgIGludGVncml0eTogcmVzdFByb3BzLmludGVncml0eSxcbiAgICAgICAgICAgICAgICBub25jZSxcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzdFByb3BzLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHsgYXM6ICdzY3JpcHQnLCBub25jZSwgY3Jvc3NPcmlnaW46IHJlc3RQcm9wcy5jcm9zc09yaWdpbiB9XG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICBub25jZT17bm9uY2V9XG4gICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICBfX2h0bWw6IGAoc2VsZi5fX25leHRfcz1zZWxmLl9fbmV4dF9zfHxbXSkucHVzaCgke0pTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICBzcmMsXG4gICAgICAgICAgICAgICAgeyAuLi5yZXN0UHJvcHMsIGlkIH0sXG4gICAgICAgICAgICAgIF0pfSlgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHJhdGVneSA9PT0gJ2FmdGVySW50ZXJhY3RpdmUnKSB7XG4gICAgICBpZiAoc3JjKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgUmVhY3RET00ucHJlbG9hZChcbiAgICAgICAgICBzcmMsXG4gICAgICAgICAgcmVzdFByb3BzLmludGVncml0eVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgYXM6ICdzY3JpcHQnLFxuICAgICAgICAgICAgICAgIGludGVncml0eTogcmVzdFByb3BzLmludGVncml0eSxcbiAgICAgICAgICAgICAgICBub25jZSxcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcmVzdFByb3BzLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHsgYXM6ICdzY3JpcHQnLCBub25jZSwgY3Jvc3NPcmlnaW46IHJlc3RQcm9wcy5jcm9zc09yaWdpbiB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU2NyaXB0LCAnX19uZXh0U2NyaXB0JywgeyB2YWx1ZTogdHJ1ZSB9KVxuXG5leHBvcnQgZGVmYXVsdCBTY3JpcHRcbiJdLCJuYW1lcyI6WyJoYW5kbGVDbGllbnRTY3JpcHRMb2FkIiwiaW5pdFNjcmlwdExvYWRlciIsIlNjcmlwdENhY2hlIiwiTWFwIiwiTG9hZENhY2hlIiwiU2V0IiwiaW5zZXJ0U3R5bGVzaGVldHMiLCJzdHlsZXNoZWV0cyIsIlJlYWN0RE9NIiwicHJlaW5pdCIsImZvckVhY2giLCJzdHlsZXNoZWV0IiwiYXMiLCJ3aW5kb3ciLCJoZWFkIiwiZG9jdW1lbnQiLCJsaW5rIiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJyZWwiLCJocmVmIiwiYXBwZW5kQ2hpbGQiLCJsb2FkU2NyaXB0IiwicHJvcHMiLCJzcmMiLCJpZCIsIm9uTG9hZCIsIm9uUmVhZHkiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImNoaWxkcmVuIiwic3RyYXRlZ3kiLCJvbkVycm9yIiwiY2FjaGVLZXkiLCJoYXMiLCJhZGQiLCJnZXQiLCJ0aGVuIiwiYWZ0ZXJMb2FkIiwiZWwiLCJsb2FkUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJjYWxsIiwiY2F0Y2giLCJpbm5lckhUTUwiLCJfX2h0bWwiLCJ0ZXh0Q29udGVudCIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJzZXQiLCJzZXRBdHRyaWJ1dGVzRnJvbVByb3BzIiwic2V0QXR0cmlidXRlIiwiYm9keSIsInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJsb2FkTGF6eVNjcmlwdCIsInJlYWR5U3RhdGUiLCJhZGRCZWZvcmVJbnRlcmFjdGl2ZVRvQ2FjaGUiLCJzY3JpcHRzIiwicXVlcnlTZWxlY3RvckFsbCIsInNjcmlwdCIsImdldEF0dHJpYnV0ZSIsInNjcmlwdExvYWRlckl0ZW1zIiwiU2NyaXB0IiwicmVzdFByb3BzIiwidXBkYXRlU2NyaXB0cyIsImdldElzU3NyIiwiYXBwRGlyIiwibm9uY2UiLCJ1c2VDb250ZXh0IiwiSGVhZE1hbmFnZXJDb250ZXh0IiwiaGFzT25SZWFkeUVmZmVjdENhbGxlZCIsInVzZVJlZiIsInVzZUVmZmVjdCIsImN1cnJlbnQiLCJoYXNMb2FkU2NyaXB0RWZmZWN0Q2FsbGVkIiwiY29uY2F0Iiwic3R5bGVTcmMiLCJKU09OIiwic3RyaW5naWZ5IiwicHJlbG9hZCIsImludGVncml0eSIsImNyb3NzT3JpZ2luIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/script.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/set-attributes-from-props.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/set-attributes-from-props.js ***!
|
||
\********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"setAttributesFromProps\", ({\n enumerable: true,\n get: function() {\n return setAttributesFromProps;\n }\n}));\nconst DOMAttributeNames = {\n acceptCharset: 'accept-charset',\n className: 'class',\n htmlFor: 'for',\n httpEquiv: 'http-equiv',\n noModule: 'noModule'\n};\nconst ignoreProps = [\n 'onLoad',\n 'onReady',\n 'dangerouslySetInnerHTML',\n 'children',\n 'onError',\n 'strategy',\n 'stylesheets'\n];\nfunction isBooleanScriptAttribute(attr) {\n return [\n 'async',\n 'defer',\n 'noModule'\n ].includes(attr);\n}\nfunction setAttributesFromProps(el, props) {\n for (const [p, value] of Object.entries(props)){\n if (!props.hasOwnProperty(p)) continue;\n if (ignoreProps.includes(p)) continue;\n // we don't render undefined props to the DOM\n if (value === undefined) {\n continue;\n }\n const attr = DOMAttributeNames[p] || p.toLowerCase();\n if (el.tagName === 'SCRIPT' && isBooleanScriptAttribute(attr)) {\n // Correctly assign boolean script attributes\n // https://github.com/vercel/next.js/pull/20748\n ;\n el[attr] = !!value;\n } else {\n el.setAttribute(attr, String(value));\n }\n // Remove falsy non-zero boolean attributes so they are correctly interpreted\n // (e.g. if we set them to false, this coerces to the string \"false\", which the browser interprets as true)\n if (value === false || el.tagName === 'SCRIPT' && isBooleanScriptAttribute(attr) && (!value || value === 'false')) {\n // Call setAttribute before, as we need to set and unset the attribute to override force async:\n // https://html.spec.whatwg.org/multipage/scripting.html#script-force-async\n el.setAttribute(attr, '');\n el.removeAttribute(attr);\n }\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=set-attributes-from-props.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3NldC1hdHRyaWJ1dGVzLWZyb20tcHJvcHMuanMiLCJtYXBwaW5ncyI6Ijs7OzswREF3QmdCQTs7O2VBQUFBOzs7QUF4QmhCLE1BQU1DLG9CQUE0QztJQUNoREMsZUFBZTtJQUNmQyxXQUFXO0lBQ1hDLFNBQVM7SUFDVEMsV0FBVztJQUNYQyxVQUFVO0FBQ1o7QUFFQSxNQUFNQyxjQUFjO0lBQ2xCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFRCxTQUFTQyx5QkFDUEMsSUFBWTtJQUVaLE9BQU87UUFBQztRQUFTO1FBQVM7S0FBVyxDQUFDQyxRQUFRLENBQUNEO0FBQ2pEO0FBRU8sU0FBU1QsdUJBQXVCVyxFQUFlLEVBQUVDLEtBQWE7SUFDbkUsS0FBSyxNQUFNLENBQUNDLEdBQUdDLE1BQU0sSUFBSUMsT0FBT0MsT0FBTyxDQUFDSixPQUFRO1FBQzlDLElBQUksQ0FBQ0EsTUFBTUssY0FBYyxDQUFDSixJQUFJO1FBQzlCLElBQUlOLFlBQVlHLFFBQVEsQ0FBQ0csSUFBSTtRQUU3Qiw2Q0FBNkM7UUFDN0MsSUFBSUMsVUFBVUksV0FBVztZQUN2QjtRQUNGO1FBRUEsTUFBTVQsT0FBT1IsaUJBQWlCLENBQUNZLEVBQUUsSUFBSUEsRUFBRU0sV0FBVztRQUVsRCxJQUFJUixHQUFHUyxPQUFPLEtBQUssWUFBWVoseUJBQXlCQyxPQUFPO1lBQzdELDZDQUE2QztZQUM3QywrQ0FBK0M7O1lBQzdDRSxFQUF3QixDQUFDRixLQUFLLEdBQUcsQ0FBQyxDQUFDSztRQUN2QyxPQUFPO1lBQ0xILEdBQUdVLFlBQVksQ0FBQ1osTUFBTWEsT0FBT1I7UUFDL0I7UUFFQSw2RUFBNkU7UUFDN0UsMkdBQTJHO1FBQzNHLElBQ0VBLFVBQVUsU0FDVEgsR0FBR1MsT0FBTyxLQUFLLFlBQ2RaLHlCQUF5QkMsU0FDeEIsRUFBQ0ssU0FBU0EsVUFBVSxRQUFNLEVBQzdCO1lBQ0EsK0ZBQStGO1lBQy9GLDJFQUEyRTtZQUMzRUgsR0FBR1UsWUFBWSxDQUFDWixNQUFNO1lBQ3RCRSxHQUFHWSxlQUFlLENBQUNkO1FBQ3JCO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFxzZXQtYXR0cmlidXRlcy1mcm9tLXByb3BzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IERPTUF0dHJpYnV0ZU5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBhY2NlcHRDaGFyc2V0OiAnYWNjZXB0LWNoYXJzZXQnLFxuICBjbGFzc05hbWU6ICdjbGFzcycsXG4gIGh0bWxGb3I6ICdmb3InLFxuICBodHRwRXF1aXY6ICdodHRwLWVxdWl2JyxcbiAgbm9Nb2R1bGU6ICdub01vZHVsZScsXG59XG5cbmNvbnN0IGlnbm9yZVByb3BzID0gW1xuICAnb25Mb2FkJyxcbiAgJ29uUmVhZHknLFxuICAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLFxuICAnY2hpbGRyZW4nLFxuICAnb25FcnJvcicsXG4gICdzdHJhdGVneScsXG4gICdzdHlsZXNoZWV0cycsXG5dXG5cbmZ1bmN0aW9uIGlzQm9vbGVhblNjcmlwdEF0dHJpYnV0ZShcbiAgYXR0cjogc3RyaW5nXG4pOiBhdHRyIGlzICdhc3luYycgfCAnZGVmZXInIHwgJ25vTW9kdWxlJyB7XG4gIHJldHVybiBbJ2FzeW5jJywgJ2RlZmVyJywgJ25vTW9kdWxlJ10uaW5jbHVkZXMoYXR0cilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNGcm9tUHJvcHMoZWw6IEhUTUxFbGVtZW50LCBwcm9wczogb2JqZWN0KSB7XG4gIGZvciAoY29uc3QgW3AsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcykpIHtcbiAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KHApKSBjb250aW51ZVxuICAgIGlmIChpZ25vcmVQcm9wcy5pbmNsdWRlcyhwKSkgY29udGludWVcblxuICAgIC8vIHdlIGRvbid0IHJlbmRlciB1bmRlZmluZWQgcHJvcHMgdG8gdGhlIERPTVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGF0dHIgPSBET01BdHRyaWJ1dGVOYW1lc1twXSB8fCBwLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChlbC50YWdOYW1lID09PSAnU0NSSVBUJyAmJiBpc0Jvb2xlYW5TY3JpcHRBdHRyaWJ1dGUoYXR0cikpIHtcbiAgICAgIC8vIENvcnJlY3RseSBhc3NpZ24gYm9vbGVhbiBzY3JpcHQgYXR0cmlidXRlc1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL3B1bGwvMjA3NDhcbiAgICAgIDsoZWwgYXMgSFRNTFNjcmlwdEVsZW1lbnQpW2F0dHJdID0gISF2YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ciwgU3RyaW5nKHZhbHVlKSlcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgZmFsc3kgbm9uLXplcm8gYm9vbGVhbiBhdHRyaWJ1dGVzIHNvIHRoZXkgYXJlIGNvcnJlY3RseSBpbnRlcnByZXRlZFxuICAgIC8vIChlLmcuIGlmIHdlIHNldCB0aGVtIHRvIGZhbHNlLCB0aGlzIGNvZXJjZXMgdG8gdGhlIHN0cmluZyBcImZhbHNlXCIsIHdoaWNoIHRoZSBicm93c2VyIGludGVycHJldHMgYXMgdHJ1ZSlcbiAgICBpZiAoXG4gICAgICB2YWx1ZSA9PT0gZmFsc2UgfHxcbiAgICAgIChlbC50YWdOYW1lID09PSAnU0NSSVBUJyAmJlxuICAgICAgICBpc0Jvb2xlYW5TY3JpcHRBdHRyaWJ1dGUoYXR0cikgJiZcbiAgICAgICAgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJ2ZhbHNlJykpXG4gICAgKSB7XG4gICAgICAvLyBDYWxsIHNldEF0dHJpYnV0ZSBiZWZvcmUsIGFzIHdlIG5lZWQgdG8gc2V0IGFuZCB1bnNldCB0aGUgYXR0cmlidXRlIHRvIG92ZXJyaWRlIGZvcmNlIGFzeW5jOlxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2NyaXB0LWZvcmNlLWFzeW5jXG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ciwgJycpXG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoYXR0cilcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJzZXRBdHRyaWJ1dGVzRnJvbVByb3BzIiwiRE9NQXR0cmlidXRlTmFtZXMiLCJhY2NlcHRDaGFyc2V0IiwiY2xhc3NOYW1lIiwiaHRtbEZvciIsImh0dHBFcXVpdiIsIm5vTW9kdWxlIiwiaWdub3JlUHJvcHMiLCJpc0Jvb2xlYW5TY3JpcHRBdHRyaWJ1dGUiLCJhdHRyIiwiaW5jbHVkZXMiLCJlbCIsInByb3BzIiwicCIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsImhhc093blByb3BlcnR5IiwidW5kZWZpbmVkIiwidG9Mb3dlckNhc2UiLCJ0YWdOYW1lIiwic2V0QXR0cmlidXRlIiwiU3RyaW5nIiwicmVtb3ZlQXR0cmlidXRlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/set-attributes-from-props.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/tracing/report-to-socket.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/tracing/report-to-socket.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return reportToSocket;\n }\n}));\nconst _websocket = __webpack_require__(/*! ../dev/hot-reloader/pages/websocket */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/websocket.js\");\nfunction reportToSocket(span) {\n if (span.state.state !== 'ended') {\n throw Object.defineProperty(new Error('Expected span to be ended'), \"__NEXT_ERROR_CODE\", {\n value: \"E302\",\n enumerable: false,\n configurable: true\n });\n }\n (0, _websocket.sendMessage)(JSON.stringify({\n event: 'span-end',\n startTime: span.startTime,\n endTime: span.state.endTime,\n spanName: span.name,\n attributes: span.attributes\n }));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=report-to-socket.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3RyYWNpbmcvcmVwb3J0LXRvLXNvY2tldC5qcyIsIm1hcHBpbmdzIjoiOzs7OzJDQUdBOzs7ZUFBd0JBOzs7dUNBSEk7QUFHYixTQUFTQSxlQUFlQyxJQUFVO0lBQy9DLElBQUlBLEtBQUtDLEtBQUssQ0FBQ0EsS0FBSyxLQUFLLFNBQVM7UUFDaEMsTUFBTSxxQkFBc0MsQ0FBdEMsSUFBSUMsTUFBTSw4QkFBVjttQkFBQTt3QkFBQTswQkFBQTtRQUFxQztJQUM3QztJQUVBQyxDQUFBQSxHQUFBQSxXQUFBQSxXQUFBQSxFQUNFQyxLQUFLQyxTQUFTLENBQUM7UUFDYkMsT0FBTztRQUNQQyxXQUFXUCxLQUFLTyxTQUFTO1FBQ3pCQyxTQUFTUixLQUFLQyxLQUFLLENBQUNPLE9BQU87UUFDM0JDLFVBQVVULEtBQUtVLElBQUk7UUFDbkJDLFlBQVlYLEtBQUtXLFVBQVU7SUFDN0I7QUFFSiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFx0cmFjaW5nXFxyZXBvcnQtdG8tc29ja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNlbmRNZXNzYWdlIH0gZnJvbSAnLi4vZGV2L2hvdC1yZWxvYWRlci9wYWdlcy93ZWJzb2NrZXQnXG5pbXBvcnQgdHlwZSB7IFNwYW4gfSBmcm9tICcuL3RyYWNlcidcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVwb3J0VG9Tb2NrZXQoc3BhbjogU3Bhbikge1xuICBpZiAoc3Bhbi5zdGF0ZS5zdGF0ZSAhPT0gJ2VuZGVkJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgc3BhbiB0byBiZSBlbmRlZCcpXG4gIH1cblxuICBzZW5kTWVzc2FnZShcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogJ3NwYW4tZW5kJyxcbiAgICAgIHN0YXJ0VGltZTogc3Bhbi5zdGFydFRpbWUsXG4gICAgICBlbmRUaW1lOiBzcGFuLnN0YXRlLmVuZFRpbWUsXG4gICAgICBzcGFuTmFtZTogc3Bhbi5uYW1lLFxuICAgICAgYXR0cmlidXRlczogc3Bhbi5hdHRyaWJ1dGVzLFxuICAgIH0pXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJyZXBvcnRUb1NvY2tldCIsInNwYW4iLCJzdGF0ZSIsIkVycm9yIiwic2VuZE1lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwic3Bhbk5hbWUiLCJuYW1lIiwiYXR0cmlidXRlcyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/tracing/report-to-socket.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/tracing/tracer.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/tracing/tracer.js ***!
|
||
\*********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../shared/lib/mitt */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/mitt.js\"));\nclass Span {\n end(endTime) {\n if (this.state.state === 'ended') {\n throw Object.defineProperty(new Error('Span has already ended'), \"__NEXT_ERROR_CODE\", {\n value: \"E17\",\n enumerable: false,\n configurable: true\n });\n }\n this.state = {\n state: 'ended',\n endTime: endTime != null ? endTime : Date.now()\n };\n this.onSpanEnd(this);\n }\n constructor(name, options, onSpanEnd){\n this.name = name;\n var _options_attributes;\n this.attributes = (_options_attributes = options.attributes) != null ? _options_attributes : {};\n var _options_startTime;\n this.startTime = (_options_startTime = options.startTime) != null ? _options_startTime : Date.now();\n this.onSpanEnd = onSpanEnd;\n this.state = {\n state: 'inprogress'\n };\n }\n}\nclass Tracer {\n startSpan(name, options) {\n return new Span(name, options, this.handleSpanEnd);\n }\n onSpanEnd(cb) {\n this._emitter.on('spanend', cb);\n return ()=>{\n this._emitter.off('spanend', cb);\n };\n }\n constructor(){\n this._emitter = (0, _mitt.default)();\n this.handleSpanEnd = (span)=>{\n this._emitter.emit('spanend', span);\n };\n }\n}\nconst _default = new Tracer();\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=tracer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3RyYWNpbmcvdHJhY2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBOEVBOzs7ZUFBQTs7OzsyRUE5RWlCO0FBeUJqQixNQUFNQTtJQW1CSkMsSUFBSUMsT0FBZ0IsRUFBRTtRQUNwQixJQUFJLElBQUksQ0FBQ0MsS0FBSyxDQUFDQSxLQUFLLEtBQUssU0FBUztZQUNoQyxNQUFNLHFCQUFtQyxDQUFuQyxJQUFJQyxNQUFNLDJCQUFWO3VCQUFBOzRCQUFBOzhCQUFBO1lBQWtDO1FBQzFDO1FBRUEsSUFBSSxDQUFDRCxLQUFLLEdBQUc7WUFDWEEsT0FBTztZQUNQRCxTQUFTQSxXQUFBQSxPQUFBQSxVQUFXRyxLQUFLQyxHQUFHO1FBQzlCO1FBRUEsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSTtJQUNyQjtJQXZCQUMsWUFDRUMsSUFBWSxFQUNaQyxPQUFvQixFQUNwQkgsU0FBK0IsQ0FDL0I7UUFDQSxJQUFJLENBQUNFLElBQUksR0FBR0E7WUFDTUM7UUFBbEIsSUFBSSxDQUFDQyxVQUFVLEdBQUdELENBQUFBLHNCQUFBQSxRQUFRQyxVQUFBQSxLQUFVLE9BQWxCRCxzQkFBc0IsQ0FBQztZQUN4QkE7UUFBakIsSUFBSSxDQUFDRSxTQUFTLEdBQUdGLENBQUFBLHFCQUFBQSxRQUFRRSxTQUFBQSxLQUFTLE9BQWpCRixxQkFBcUJMLEtBQUtDLEdBQUc7UUFDOUMsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0osS0FBSyxHQUFHO1lBQUVBLE9BQU87UUFBYTtJQUNyQztBQWNGO0FBRUEsTUFBTVU7SUFPSkMsVUFBVUwsSUFBWSxFQUFFQyxPQUFvQixFQUFFO1FBQzVDLE9BQU8sSUFBSVYsS0FBS1MsTUFBTUMsU0FBUyxJQUFJLENBQUNLLGFBQWE7SUFDbkQ7SUFFQVIsVUFBVVMsRUFBeUIsRUFBYztRQUMvQyxJQUFJLENBQUNDLFFBQVEsQ0FBQ0MsRUFBRSxDQUFDLFdBQVdGO1FBQzVCLE9BQU87WUFDTCxJQUFJLENBQUNDLFFBQVEsQ0FBQ0UsR0FBRyxDQUFDLFdBQVdIO1FBQy9CO0lBQ0Y7O2FBZkFDLFFBQUFBLEdBQWdDRyxDQUFBQSxHQUFBQSxNQUFBQSxPQUFBQTthQUV4QkwsYUFBQUEsR0FBZ0IsQ0FBQ007WUFDdkIsSUFBSSxDQUFDSixRQUFRLENBQUNLLElBQUksQ0FBQyxXQUFXRDtRQUNoQzs7QUFZRjtNQUdBLFdBQWUsSUFBSVIiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXGNsaWVudFxcdHJhY2luZ1xcdHJhY2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtaXR0IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvbWl0dCdcbmltcG9ydCB0eXBlIHsgTWl0dEVtaXR0ZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL21pdHQnXG5cbmV4cG9ydCB0eXBlIFNwYW5PcHRpb25zID0ge1xuICBzdGFydFRpbWU/OiBudW1iZXJcbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59XG5cbmV4cG9ydCB0eXBlIFNwYW5TdGF0ZSA9XG4gIHwge1xuICAgICAgc3RhdGU6ICdpbnByb2dyZXNzJ1xuICAgIH1cbiAgfCB7XG4gICAgICBzdGF0ZTogJ2VuZGVkJ1xuICAgICAgZW5kVGltZTogbnVtYmVyXG4gICAgfVxuXG5pbnRlcmZhY2UgSVNwYW4ge1xuICBuYW1lOiBzdHJpbmdcbiAgc3RhcnRUaW1lOiBudW1iZXJcbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgc3RhdGU6IFNwYW5TdGF0ZVxuICBlbmQoZW5kVGltZT86IG51bWJlcik6IHZvaWRcbn1cblxuY2xhc3MgU3BhbiBpbXBsZW1lbnRzIElTcGFuIHtcbiAgbmFtZTogc3RyaW5nXG4gIHN0YXJ0VGltZTogbnVtYmVyXG4gIG9uU3BhbkVuZDogKHNwYW46IFNwYW4pID0+IHZvaWRcbiAgc3RhdGU6IFNwYW5TdGF0ZVxuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBTcGFuT3B0aW9ucyxcbiAgICBvblNwYW5FbmQ6IChzcGFuOiBTcGFuKSA9PiB2b2lkXG4gICkge1xuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBvcHRpb25zLmF0dHJpYnV0ZXMgPz8ge31cbiAgICB0aGlzLnN0YXJ0VGltZSA9IG9wdGlvbnMuc3RhcnRUaW1lID8/IERhdGUubm93KClcbiAgICB0aGlzLm9uU3BhbkVuZCA9IG9uU3BhbkVuZFxuICAgIHRoaXMuc3RhdGUgPSB7IHN0YXRlOiAnaW5wcm9ncmVzcycgfVxuICB9XG5cbiAgZW5kKGVuZFRpbWU/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5zdGF0ZSA9PT0gJ2VuZGVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTcGFuIGhhcyBhbHJlYWR5IGVuZGVkJylcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdGU6ICdlbmRlZCcsXG4gICAgICBlbmRUaW1lOiBlbmRUaW1lID8/IERhdGUubm93KCksXG4gICAgfVxuXG4gICAgdGhpcy5vblNwYW5FbmQodGhpcylcbiAgfVxufVxuXG5jbGFzcyBUcmFjZXIge1xuICBfZW1pdHRlcjogTWl0dEVtaXR0ZXI8c3RyaW5nPiA9IG1pdHQoKVxuXG4gIHByaXZhdGUgaGFuZGxlU3BhbkVuZCA9IChzcGFuOiBTcGFuKSA9PiB7XG4gICAgdGhpcy5fZW1pdHRlci5lbWl0KCdzcGFuZW5kJywgc3BhbilcbiAgfVxuXG4gIHN0YXJ0U3BhbihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFNwYW5PcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBTcGFuKG5hbWUsIG9wdGlvbnMsIHRoaXMuaGFuZGxlU3BhbkVuZClcbiAgfVxuXG4gIG9uU3BhbkVuZChjYjogKHNwYW46IElTcGFuKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5fZW1pdHRlci5vbignc3BhbmVuZCcsIGNiKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLl9lbWl0dGVyLm9mZignc3BhbmVuZCcsIGNiKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSB7IElTcGFuIGFzIFNwYW4gfVxuZXhwb3J0IGRlZmF1bHQgbmV3IFRyYWNlcigpXG4iXSwibmFtZXMiOlsiU3BhbiIsImVuZCIsImVuZFRpbWUiLCJzdGF0ZSIsIkVycm9yIiwiRGF0ZSIsIm5vdyIsIm9uU3BhbkVuZCIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm9wdGlvbnMiLCJhdHRyaWJ1dGVzIiwic3RhcnRUaW1lIiwiVHJhY2VyIiwic3RhcnRTcGFuIiwiaGFuZGxlU3BhbkVuZCIsImNiIiwiX2VtaXR0ZXIiLCJvbiIsIm9mZiIsIm1pdHQiLCJzcGFuIiwiZW1pdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/tracing/tracer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/trusted-types.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/trusted-types.js ***!
|
||
\********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Stores the Trusted Types Policy. Starts as undefined and can be set to null\n * if Trusted Types is not supported in the browser.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"__unsafeCreateTrustedScriptURL\", ({\n enumerable: true,\n get: function() {\n return __unsafeCreateTrustedScriptURL;\n }\n}));\nlet policy;\n/**\n * Getter for the Trusted Types Policy. If it is undefined, it is instantiated\n * here or set to null if Trusted Types is not supported in the browser.\n */ function getPolicy() {\n if (typeof policy === 'undefined' && \"object\" !== 'undefined') {\n var _window_trustedTypes;\n policy = ((_window_trustedTypes = window.trustedTypes) == null ? void 0 : _window_trustedTypes.createPolicy('nextjs', {\n createHTML: (input)=>input,\n createScript: (input)=>input,\n createScriptURL: (input)=>input\n })) || null;\n }\n return policy;\n}\nfunction __unsafeCreateTrustedScriptURL(url) {\n var _getPolicy;\n return ((_getPolicy = getPolicy()) == null ? void 0 : _getPolicy.createScriptURL(url)) || url;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=trusted-types.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3RydXN0ZWQtdHlwZXMuanMiLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDOzs7O2tFQTZCZUE7OztlQUFBQTs7O0FBNUJoQixJQUFJQztBQUVKOzs7Q0FHQyxHQUNELFNBQVNDO0lBQ1AsSUFBSSxPQUFPRCxXQUFXLGVBQWUsT0FBT0UsTUFBVyxhQUFhO1lBRWhFQTtRQURGRixTQUNFRSxDQUFBQSxDQUFBQSx1QkFBQUEsT0FBT0MsWUFBQUEsS0FBWSxnQkFBbkJELHFCQUFxQkUsWUFBWSxDQUFDLFVBQVU7WUFDMUNDLFlBQVksQ0FBQ0MsUUFBVUE7WUFDdkJDLGNBQWMsQ0FBQ0QsUUFBVUE7WUFDekJFLGlCQUFpQixDQUFDRixRQUFVQTtRQUM5QixPQUFNO0lBQ1Y7SUFFQSxPQUFPTjtBQUNUO0FBV08sU0FBU0QsK0JBQ2RVLEdBQVc7UUFFSlI7SUFBUCxPQUFPQSxDQUFBQSxDQUFBQSxhQUFBQSxXQUFBQSxLQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxXQUFhTyxlQUFlLENBQUNDLElBQUFBLEtBQVFBO0FBQzlDIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXHRydXN0ZWQtdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdG9yZXMgdGhlIFRydXN0ZWQgVHlwZXMgUG9saWN5LiBTdGFydHMgYXMgdW5kZWZpbmVkIGFuZCBjYW4gYmUgc2V0IHRvIG51bGxcbiAqIGlmIFRydXN0ZWQgVHlwZXMgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgYnJvd3Nlci5cbiAqL1xubGV0IHBvbGljeTogVHJ1c3RlZFR5cGVQb2xpY3kgfCBudWxsIHwgdW5kZWZpbmVkXG5cbi8qKlxuICogR2V0dGVyIGZvciB0aGUgVHJ1c3RlZCBUeXBlcyBQb2xpY3kuIElmIGl0IGlzIHVuZGVmaW5lZCwgaXQgaXMgaW5zdGFudGlhdGVkXG4gKiBoZXJlIG9yIHNldCB0byBudWxsIGlmIFRydXN0ZWQgVHlwZXMgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgYnJvd3Nlci5cbiAqL1xuZnVuY3Rpb24gZ2V0UG9saWN5KCkge1xuICBpZiAodHlwZW9mIHBvbGljeSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBwb2xpY3kgPVxuICAgICAgd2luZG93LnRydXN0ZWRUeXBlcz8uY3JlYXRlUG9saWN5KCduZXh0anMnLCB7XG4gICAgICAgIGNyZWF0ZUhUTUw6IChpbnB1dCkgPT4gaW5wdXQsXG4gICAgICAgIGNyZWF0ZVNjcmlwdDogKGlucHV0KSA9PiBpbnB1dCxcbiAgICAgICAgY3JlYXRlU2NyaXB0VVJMOiAoaW5wdXQpID0+IGlucHV0LFxuICAgICAgfSkgfHwgbnVsbFxuICB9XG5cbiAgcmV0dXJuIHBvbGljeVxufVxuXG4vKipcbiAqIFVuc2FmZWx5IHByb21vdGUgYSBzdHJpbmcgdG8gYSBUcnVzdGVkU2NyaXB0VVJMLCBmYWxsaW5nIGJhY2sgdG8gc3RyaW5nc1xuICogd2hlbiBUcnVzdGVkIFR5cGVzIGFyZSBub3QgYXZhaWxhYmxlLlxuICogVGhpcyBpcyBhIHNlY3VyaXR5LXNlbnNpdGl2ZSBmdW5jdGlvbjsgYW55IHVzZSBvZiB0aGlzIGZ1bmN0aW9uXG4gKiBtdXN0IGdvIHRocm91Z2ggc2VjdXJpdHkgcmV2aWV3LiBJbiBwYXJ0aWN1bGFyLCBpdCBtdXN0IGJlIGFzc3VyZWQgdGhhdCB0aGVcbiAqIHByb3ZpZGVkIHN0cmluZyB3aWxsIG5ldmVyIGNhdXNlIGFuIFhTUyB2dWxuZXJhYmlsaXR5IGlmIHVzZWQgaW4gYSBjb250ZXh0XG4gKiB0aGF0IHdpbGwgY2F1c2UgYSBicm93c2VyIHRvIGxvYWQgYW5kIGV4ZWN1dGUgYSByZXNvdXJjZSwgZS5nLiB3aGVuXG4gKiBhc3NpZ25pbmcgdG8gc2NyaXB0LnNyYy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTChcbiAgdXJsOiBzdHJpbmdcbik6IFRydXN0ZWRTY3JpcHRVUkwgfCBzdHJpbmcge1xuICByZXR1cm4gZ2V0UG9saWN5KCk/LmNyZWF0ZVNjcmlwdFVSTCh1cmwpIHx8IHVybFxufVxuIl0sIm5hbWVzIjpbIl9fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTCIsInBvbGljeSIsImdldFBvbGljeSIsIndpbmRvdyIsInRydXN0ZWRUeXBlcyIsImNyZWF0ZVBvbGljeSIsImNyZWF0ZUhUTUwiLCJpbnB1dCIsImNyZWF0ZVNjcmlwdCIsImNyZWF0ZVNjcmlwdFVSTCIsInVybCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/trusted-types.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/webpack.js":
|
||
/*!**************************************************!*\
|
||
!*** ./node_modules/next/dist/client/webpack.js ***!
|
||
\**************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"(pages-dir-browser)/./node_modules/next/dist/build/deployment-id.js\");\n// If we have a deployment ID, we need to append it to the webpack chunk names\n// I am keeping the process check explicit so this can be statically optimized\nif (false) {}\nself.__next_set_public_path__ = (path)=>{\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n __webpack_require__.p = path;\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=webpack.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3dlYnBhY2suanMiLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEOzs7OzswQ0FLWDtBQUVsRCw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlFLElBQUlBLEtBQThCLEVBQUUsRUFxQm5DO0FBR0NhLEtBQWFDLHdCQUF3QixHQUFHLENBQUNDO0lBQ3pDLDZEQUE2RDtJQUM3REMscUJBQXVCQSxHQUFHRDtBQUM1QiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcY2xpZW50XFx3ZWJwYWNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmRlY2xhcmUgY29uc3QgX193ZWJwYWNrX3JlcXVpcmVfXzogYW55XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5kZWNsYXJlIGxldCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXzogc3RyaW5nXG5cbmltcG9ydCB7IGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZyB9IGZyb20gJy4uL2J1aWxkL2RlcGxveW1lbnQtaWQnXG5cbi8vIElmIHdlIGhhdmUgYSBkZXBsb3ltZW50IElELCB3ZSBuZWVkIHRvIGFwcGVuZCBpdCB0byB0aGUgd2VicGFjayBjaHVuayBuYW1lc1xuLy8gSSBhbSBrZWVwaW5nIHRoZSBwcm9jZXNzIGNoZWNrIGV4cGxpY2l0IHNvIHRoaXMgY2FuIGJlIHN0YXRpY2FsbHkgb3B0aW1pemVkXG5pZiAocHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEKSB7XG4gIGNvbnN0IHN1ZmZpeCA9IGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZygpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjb25zdCBnZXRDaHVua1NjcmlwdEZpbGVuYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXy51XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBfX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoLi4uYXJnczogYW55W10pID0+XG4gICAgLy8gV2UgZW5vZGUgdGhlIGNodW5rIGZpbGVuYW1lIGJlY2F1c2Ugb3VyIHN0YXRpYyBzZXJ2ZXIgbWF0Y2hlcyBhZ2FpbnN0IGFuZCBlbmNvZGVkXG4gICAgLy8gZmlsZW5hbWUgcGF0aC5cbiAgICBnZXRDaHVua1NjcmlwdEZpbGVuYW1lKC4uLmFyZ3MpICsgc3VmZml4XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNvbnN0IGdldENodW5rQ3NzRmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIF9fd2VicGFja19yZXF1aXJlX18uayA9ICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICBnZXRDaHVua0Nzc0ZpbGVuYW1lKC4uLmFyZ3MpICsgc3VmZml4XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNvbnN0IGdldE1pbmlDc3NGaWxlbmFtZSA9IF9fd2VicGFja19yZXF1aXJlX18ubWluaUNzc0ZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIF9fd2VicGFja19yZXF1aXJlX18ubWluaUNzc0YgPSAoLi4uYXJnczogYW55W10pID0+XG4gICAgZ2V0TWluaUNzc0ZpbGVuYW1lKC4uLmFyZ3MpICsgc3VmZml4XG59XG5cbi8vIElnbm9yZSB0aGUgbW9kdWxlIElEIHRyYW5zZm9ybSBpbiBjbGllbnQuXG47KHNlbGYgYXMgYW55KS5fX25leHRfc2V0X3B1YmxpY19wYXRoX18gPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gPSBwYXRoXG59XG5cbmV4cG9ydCB7fVxuIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJlbnYiLCJORVhUX0RFUExPWU1FTlRfSUQiLCJzdWZmaXgiLCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmciLCJnZXRDaHVua1NjcmlwdEZpbGVuYW1lIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsInUiLCJhcmdzIiwiZ2V0Q2h1bmtDc3NGaWxlbmFtZSIsImsiLCJnZXRNaW5pQ3NzRmlsZW5hbWUiLCJtaW5pQ3NzRiIsInNlbGYiLCJfX25leHRfc2V0X3B1YmxpY19wYXRoX18iLCJwYXRoIiwiX193ZWJwYWNrX3B1YmxpY19wYXRoX18iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/webpack.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/client/with-router.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/with-router.js ***!
|
||
\******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return withRouter;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst _router = __webpack_require__(/*! ./router */ \"(pages-dir-browser)/./node_modules/next/dist/client/router.js\");\nfunction withRouter(ComposedComponent) {\n function WithRouterWrapper(props) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(ComposedComponent, {\n router: (0, _router.useRouter)(),\n ...props\n });\n }\n WithRouterWrapper.getInitialProps = ComposedComponent.getInitialProps;\n WithRouterWrapper.origGetInitialProps = ComposedComponent.origGetInitialProps;\n if (true) {\n const name = ComposedComponent.displayName || ComposedComponent.name || 'Unknown';\n WithRouterWrapper.displayName = \"withRouter(\" + name + \")\";\n }\n return WithRouterWrapper;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=with-router.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3dpdGgtcm91dGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBa0JBOzs7ZUFBd0JBOzs7Ozs0RUFsQlE7b0NBT047QUFXWCxTQUFTQSxXQUl0QkMsaUJBQStDO0lBRS9DLFNBQVNDLGtCQUFrQkMsS0FBVTtRQUNuQyxxQkFBTyxxQkFBQ0YsbUJBQUFBO1lBQWtCRyxRQUFRQyxDQUFBQSxHQUFBQSxRQUFBQSxTQUFBQTtZQUFjLEdBQUdGLEtBQUs7O0lBQzFEO0lBRUFELGtCQUFrQkksZUFBZSxHQUFHTCxrQkFBa0JLLGVBQWU7SUFFbkVKLGtCQUEwQkssbUJBQW1CLEdBQzdDTixrQkFDQU0sbUJBQW1CO0lBQ3JCLElBQUlDLElBQW9CLEVBQW1CO1FBQ3pDLE1BQU1HLE9BQ0pWLGtCQUFrQlcsV0FBVyxJQUFJWCxrQkFBa0JVLElBQUksSUFBSTtRQUM3RFQsa0JBQWtCVSxXQUFXLEdBQUksZ0JBQWFELE9BQUs7SUFDckQ7SUFFQSxPQUFPVDtBQUNUIiwic291cmNlcyI6WyJEOlxcc3JjXFxjbGllbnRcXHdpdGgtcm91dGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHtcbiAgQmFzZUNvbnRleHQsXG4gIE5leHRDb21wb25lbnRUeXBlLFxuICBOZXh0UGFnZUNvbnRleHQsXG59IGZyb20gJy4uL3NoYXJlZC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IE5leHRSb3V0ZXIgfSBmcm9tICcuL3JvdXRlcidcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJy4vcm91dGVyJ1xuXG5leHBvcnQgdHlwZSBXaXRoUm91dGVyUHJvcHMgPSB7XG4gIHJvdXRlcjogTmV4dFJvdXRlclxufVxuXG5leHBvcnQgdHlwZSBFeGNsdWRlUm91dGVyUHJvcHM8UD4gPSBQaWNrPFxuICBQLFxuICBFeGNsdWRlPGtleW9mIFAsIGtleW9mIFdpdGhSb3V0ZXJQcm9wcz5cbj5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2l0aFJvdXRlcjxcbiAgUCBleHRlbmRzIFdpdGhSb3V0ZXJQcm9wcyxcbiAgQyBleHRlbmRzIEJhc2VDb250ZXh0ID0gTmV4dFBhZ2VDb250ZXh0LFxuPihcbiAgQ29tcG9zZWRDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPEMsIGFueSwgUD5cbik6IFJlYWN0LkNvbXBvbmVudFR5cGU8RXhjbHVkZVJvdXRlclByb3BzPFA+PiB7XG4gIGZ1bmN0aW9uIFdpdGhSb3V0ZXJXcmFwcGVyKHByb3BzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxDb21wb3NlZENvbXBvbmVudCByb3V0ZXI9e3VzZVJvdXRlcigpfSB7Li4ucHJvcHN9IC8+XG4gIH1cblxuICBXaXRoUm91dGVyV3JhcHBlci5nZXRJbml0aWFsUHJvcHMgPSBDb21wb3NlZENvbXBvbmVudC5nZXRJbml0aWFsUHJvcHNcbiAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYWxsb3cgY2hlY2tpbmcgZm9yIGN1c3RvbSBnZXRJbml0aWFsUHJvcHMgaW4gX2FwcFxuICA7KFdpdGhSb3V0ZXJXcmFwcGVyIGFzIGFueSkub3JpZ0dldEluaXRpYWxQcm9wcyA9IChcbiAgICBDb21wb3NlZENvbXBvbmVudCBhcyBhbnlcbiAgKS5vcmlnR2V0SW5pdGlhbFByb3BzXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc3QgbmFtZSA9XG4gICAgICBDb21wb3NlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb3NlZENvbXBvbmVudC5uYW1lIHx8ICdVbmtub3duJ1xuICAgIFdpdGhSb3V0ZXJXcmFwcGVyLmRpc3BsYXlOYW1lID0gYHdpdGhSb3V0ZXIoJHtuYW1lfSlgXG4gIH1cblxuICByZXR1cm4gV2l0aFJvdXRlcldyYXBwZXJcbn1cbiJdLCJuYW1lcyI6WyJ3aXRoUm91dGVyIiwiQ29tcG9zZWRDb21wb25lbnQiLCJXaXRoUm91dGVyV3JhcHBlciIsInByb3BzIiwicm91dGVyIiwidXNlUm91dGVyIiwiZ2V0SW5pdGlhbFByb3BzIiwib3JpZ0dldEluaXRpYWxQcm9wcyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIm5hbWUiLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/client/with-router.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/compiled/next-devtools/index.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/next-devtools/index.js ***!
|
||
\****************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("/* provided dependency */ var process = __webpack_require__(/*! process */ \"(pages-dir-browser)/./node_modules/process/browser.js\");\nvar __webpack_modules__={\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/components/tooltip.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.tooltip-wrapper {\n position: relative;\n display: inline-block;\n line-height: 1;\n}\n\n.tooltip {\n position: relative;\n padding: 6px 12px;\n border-radius: 8px;\n font-size: 14px;\n line-height: 1.4;\n pointer-events: none;\n}\n\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: var(--arrow-size, 6px);\n border-color: transparent;\n}\n\n.tooltip-arrow--top {\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px) 0\n var(--arrow-size, 6px);\n border-top-color: var(--tooltip-bg-color);\n bottom: 0;\n transform: translateY(100%);\n}\n\n.tooltip-arrow--bottom {\n border-width: 0 var(--arrow-size, 6px) var(--arrow-size, 6px)\n var(--arrow-size, 6px);\n border-bottom-color: var(--tooltip-bg-color);\n top: 0;\n transform: translateY(-100%);\n}\n\n.tooltip-arrow--left {\n border-width: var(--arrow-size, 6px) 0 var(--arrow-size, 6px)\n var(--arrow-size, 6px);\n border-left-color: var(--tooltip-bg-color);\n right: 0;\n transform: translateX(100%);\n}\n\n.tooltip-arrow--right {\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px)\n var(--arrow-size, 6px) 0;\n border-right-color: var(--tooltip-bg-color);\n left: 0;\n transform: translateX(-100%);\n}\n\n.tooltip-positioner {\n z-index: var(--top-z-index);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/components/tooltip.css\"],names:[],mappings:\"AAAA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,cAAc;AAChB;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,mBAAmB;EACnB,oCAAoC;EACpC,yBAAyB;AAC3B;;AAEA;EACE;0BACwB;EACxB,yCAAyC;EACzC,SAAS;EACT,2BAA2B;AAC7B;;AAEA;EACE;0BACwB;EACxB,4CAA4C;EAC5C,MAAM;EACN,4BAA4B;AAC9B;;AAEA;EACE;0BACwB;EACxB,0CAA0C;EAC1C,QAAQ;EACR,2BAA2B;AAC7B;;AAEA;EACE;4BAC0B;EAC1B,2CAA2C;EAC3C,OAAO;EACP,4BAA4B;AAC9B;;AAEA;EACE,2BAA2B;AAC7B\",sourcesContent:[\".tooltip-wrapper {\\n position: relative;\\n display: inline-block;\\n line-height: 1;\\n}\\n\\n.tooltip {\\n position: relative;\\n padding: 6px 12px;\\n border-radius: 8px;\\n font-size: 14px;\\n line-height: 1.4;\\n pointer-events: none;\\n}\\n\\n.tooltip-arrow {\\n position: absolute;\\n width: 0;\\n height: 0;\\n border-style: solid;\\n border-width: var(--arrow-size, 6px);\\n border-color: transparent;\\n}\\n\\n.tooltip-arrow--top {\\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px) 0\\n var(--arrow-size, 6px);\\n border-top-color: var(--tooltip-bg-color);\\n bottom: 0;\\n transform: translateY(100%);\\n}\\n\\n.tooltip-arrow--bottom {\\n border-width: 0 var(--arrow-size, 6px) var(--arrow-size, 6px)\\n var(--arrow-size, 6px);\\n border-bottom-color: var(--tooltip-bg-color);\\n top: 0;\\n transform: translateY(-100%);\\n}\\n\\n.tooltip-arrow--left {\\n border-width: var(--arrow-size, 6px) 0 var(--arrow-size, 6px)\\n var(--arrow-size, 6px);\\n border-left-color: var(--tooltip-bg-color);\\n right: 0;\\n transform: translateX(100%);\\n}\\n\\n.tooltip-arrow--right {\\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px)\\n var(--arrow-size, 6px) 0;\\n border-right-color: var(--tooltip-bg-color);\\n left: 0;\\n transform: translateX(-100%);\\n}\\n\\n.tooltip-positioner {\\n z-index: var(--top-z-index);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.resize-container {\n position: absolute;\n /* todo: better z index */\n z-index: 10;\n /* todo: is this needed */\n background: transparent;\n}\n\n.resize-line {\n position: absolute;\n /* todo smarter z index */\n z-index: -1;\n pointer-events: none;\n /* a normal exit animation curve- at this point the exit animation is */\n /* immediately responsive so we don't need a bespoke curve */\n transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n /* todo: better var? */\n border: 1px solid var(--color-gray-100);\n}\n\n/* start really fast because we start super hidden initially behind the panel, otherwise feels like an unintended animation delay */\n.resize-container:hover ~ .resize-line {\n transition: transform 0.2s cubic-bezier(0.05, 0.9, 0.2, 1); /* Fast start for animate in */\n}\n\n.resize-container.right,\n.resize-container.left {\n top: 0;\n height: 100%;\n width: 25px;\n cursor: ew-resize;\n}\n\n/* todo: don't hard code all these values/use vars */\n\n.resize-container.bottom,\n.resize-container.top {\n left: 0;\n width: 100%;\n height: 25px;\n cursor: ns-resize;\n}\n\n.resize-container.top {\n top: -12px;\n}\n.resize-container.bottom {\n bottom: -12px;\n}\n.resize-container.left {\n left: -12px;\n}\n.resize-container.right {\n right: -12px;\n}\n\n.resize-container.top-left,\n.resize-container.top-right,\n.resize-container.bottom-left,\n.resize-container.bottom-right {\n width: 32px;\n height: 32px;\n z-index: 15;\n}\n\n.resize-container.top-left {\n top: -16px;\n left: -16px;\n cursor: nwse-resize;\n}\n.resize-container.top-right {\n top: -16px;\n right: -16px;\n cursor: nesw-resize;\n}\n.resize-container.bottom-left {\n bottom: -16px;\n left: -16px;\n cursor: nesw-resize;\n}\n.resize-container.bottom-right {\n bottom: -16px;\n right: -16px;\n cursor: nwse-resize;\n}\n\n.resize-line.top,\n.resize-line.bottom {\n height: 28px;\n width: 100%;\n background-color: var(--color-background-100);\n}\n\n.resize-line.left,\n.resize-line.right {\n width: 28px;\n height: 100%;\n background-color: var(--color-background-100);\n}\n\n.resize-line.top {\n top: -12px;\n left: calc(-1 * var(--border-left, 2px));\n width: calc(100% + var(--border-horizontal, 4px));\n border-radius: var(--rounded-md) var(--rounded-md) 0 0;\n transform: translateY(28px);\n}\n\n.resize-line.bottom {\n bottom: -12px;\n left: calc(-1 * var(--border-left, 2px));\n width: calc(100% + var(--border-horizontal, 4px));\n border-radius: 0 0 var(--rounded-md) var(--rounded-md);\n transform: translateY(-28px);\n}\n\n.resize-line.left {\n top: calc(-1 * var(--border-top, 2px));\n left: -12px;\n height: calc(100% + var(--border-vertical, 4px));\n border-radius: var(--rounded-md) 0 0 var(--rounded-md);\n transform: translateX(28px);\n}\n\n.resize-line.right {\n top: calc(-1 * var(--border-top, 2px));\n right: -12px;\n height: calc(100% + var(--border-vertical, 4px));\n border-radius: 0 var(--rounded-md) var(--rounded-md) 0;\n transform: translateX(-28px);\n}\n\n.resize-container.right:hover ~ .resize-line.right,\n.resize-container.left:hover ~ .resize-line.left,\n.resize-line.right.dragging,\n.resize-line.left.dragging {\n transform: translateX(0);\n}\n\n.resize-container.bottom:hover ~ .resize-line.bottom,\n.resize-container.top:hover ~ .resize-line.top,\n.resize-line.bottom.dragging,\n.resize-line.top.dragging {\n transform: translateY(0);\n}\n\n/* make sure that we don't show multiple handles at once\n * we should only ever show the currently resizing handle\n * regardless of hover state \n */\n.resize-container.no-hover.right:hover ~ .resize-line.right {\n transform: translateX(-28px);\n}\n.resize-container.no-hover.left:hover ~ .resize-line.left {\n transform: translateX(28px);\n}\n.resize-container.no-hover.bottom:hover ~ .resize-line.bottom {\n transform: translateY(-28px);\n}\n.resize-container.no-hover.top:hover ~ .resize-line.top {\n transform: translateY(28px);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\"],names:[],mappings:\"AAAA;EACE,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;EACX,yBAAyB;EACzB,uBAAuB;AACzB;;AAEA;EACE,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;EACX,oBAAoB;EACpB,uEAAuE;EACvE,4DAA4D;EAC5D,uDAAuD;EACvD,sBAAsB;EACtB,uCAAuC;AACzC;;AAEA,mIAAmI;AACnI;EACE,0DAA0D,EAAE,8BAA8B;AAC5F;;AAEA;;EAEE,MAAM;EACN,YAAY;EACZ,WAAW;EACX,iBAAiB;AACnB;;AAEA,oDAAoD;;AAEpD;;EAEE,OAAO;EACP,WAAW;EACX,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,UAAU;AACZ;AACA;EACE,aAAa;AACf;AACA;EACE,WAAW;AACb;AACA;EACE,YAAY;AACd;;AAEA;;;;EAIE,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,UAAU;EACV,WAAW;EACX,mBAAmB;AACrB;AACA;EACE,UAAU;EACV,YAAY;EACZ,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,WAAW;EACX,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,YAAY;EACZ,mBAAmB;AACrB;;AAEA;;EAEE,YAAY;EACZ,WAAW;EACX,6CAA6C;AAC/C;;AAEA;;EAEE,WAAW;EACX,YAAY;EACZ,6CAA6C;AAC/C;;AAEA;EACE,UAAU;EACV,wCAAwC;EACxC,iDAAiD;EACjD,sDAAsD;EACtD,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,wCAAwC;EACxC,iDAAiD;EACjD,sDAAsD;EACtD,4BAA4B;AAC9B;;AAEA;EACE,sCAAsC;EACtC,WAAW;EACX,gDAAgD;EAChD,sDAAsD;EACtD,2BAA2B;AAC7B;;AAEA;EACE,sCAAsC;EACtC,YAAY;EACZ,gDAAgD;EAChD,sDAAsD;EACtD,4BAA4B;AAC9B;;AAEA;;;;EAIE,wBAAwB;AAC1B;;AAEA;;;;EAIE,wBAAwB;AAC1B;;AAEA;;;EAGE;AACF;EACE,4BAA4B;AAC9B;AACA;EACE,2BAA2B;AAC7B;AACA;EACE,4BAA4B;AAC9B;AACA;EACE,2BAA2B;AAC7B\",sourcesContent:[\".resize-container {\\n position: absolute;\\n /* todo: better z index */\\n z-index: 10;\\n /* todo: is this needed */\\n background: transparent;\\n}\\n\\n.resize-line {\\n position: absolute;\\n /* todo smarter z index */\\n z-index: -1;\\n pointer-events: none;\\n /* a normal exit animation curve- at this point the exit animation is */\\n /* immediately responsive so we don't need a bespoke curve */\\n transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\\n /* todo: better var? */\\n border: 1px solid var(--color-gray-100);\\n}\\n\\n/* start really fast because we start super hidden initially behind the panel, otherwise feels like an unintended animation delay */\\n.resize-container:hover ~ .resize-line {\\n transition: transform 0.2s cubic-bezier(0.05, 0.9, 0.2, 1); /* Fast start for animate in */\\n}\\n\\n.resize-container.right,\\n.resize-container.left {\\n top: 0;\\n height: 100%;\\n width: 25px;\\n cursor: ew-resize;\\n}\\n\\n/* todo: don't hard code all these values/use vars */\\n\\n.resize-container.bottom,\\n.resize-container.top {\\n left: 0;\\n width: 100%;\\n height: 25px;\\n cursor: ns-resize;\\n}\\n\\n.resize-container.top {\\n top: -12px;\\n}\\n.resize-container.bottom {\\n bottom: -12px;\\n}\\n.resize-container.left {\\n left: -12px;\\n}\\n.resize-container.right {\\n right: -12px;\\n}\\n\\n.resize-container.top-left,\\n.resize-container.top-right,\\n.resize-container.bottom-left,\\n.resize-container.bottom-right {\\n width: 32px;\\n height: 32px;\\n z-index: 15;\\n}\\n\\n.resize-container.top-left {\\n top: -16px;\\n left: -16px;\\n cursor: nwse-resize;\\n}\\n.resize-container.top-right {\\n top: -16px;\\n right: -16px;\\n cursor: nesw-resize;\\n}\\n.resize-container.bottom-left {\\n bottom: -16px;\\n left: -16px;\\n cursor: nesw-resize;\\n}\\n.resize-container.bottom-right {\\n bottom: -16px;\\n right: -16px;\\n cursor: nwse-resize;\\n}\\n\\n.resize-line.top,\\n.resize-line.bottom {\\n height: 28px;\\n width: 100%;\\n background-color: var(--color-background-100);\\n}\\n\\n.resize-line.left,\\n.resize-line.right {\\n width: 28px;\\n height: 100%;\\n background-color: var(--color-background-100);\\n}\\n\\n.resize-line.top {\\n top: -12px;\\n left: calc(-1 * var(--border-left, 2px));\\n width: calc(100% + var(--border-horizontal, 4px));\\n border-radius: var(--rounded-md) var(--rounded-md) 0 0;\\n transform: translateY(28px);\\n}\\n\\n.resize-line.bottom {\\n bottom: -12px;\\n left: calc(-1 * var(--border-left, 2px));\\n width: calc(100% + var(--border-horizontal, 4px));\\n border-radius: 0 0 var(--rounded-md) var(--rounded-md);\\n transform: translateY(-28px);\\n}\\n\\n.resize-line.left {\\n top: calc(-1 * var(--border-top, 2px));\\n left: -12px;\\n height: calc(100% + var(--border-vertical, 4px));\\n border-radius: var(--rounded-md) 0 0 var(--rounded-md);\\n transform: translateX(28px);\\n}\\n\\n.resize-line.right {\\n top: calc(-1 * var(--border-top, 2px));\\n right: -12px;\\n height: calc(100% + var(--border-vertical, 4px));\\n border-radius: 0 var(--rounded-md) var(--rounded-md) 0;\\n transform: translateX(-28px);\\n}\\n\\n.resize-container.right:hover ~ .resize-line.right,\\n.resize-container.left:hover ~ .resize-line.left,\\n.resize-line.right.dragging,\\n.resize-line.left.dragging {\\n transform: translateX(0);\\n}\\n\\n.resize-container.bottom:hover ~ .resize-line.bottom,\\n.resize-container.top:hover ~ .resize-line.top,\\n.resize-line.bottom.dragging,\\n.resize-line.top.dragging {\\n transform: translateY(0);\\n}\\n\\n/* make sure that we don't show multiple handles at once\\n * we should only ever show the currently resizing handle\\n * regardless of hover state \\n */\\n.resize-container.no-hover.right:hover ~ .resize-line.right {\\n transform: translateX(-28px);\\n}\\n.resize-container.no-hover.left:hover ~ .resize-line.left {\\n transform: translateX(28px);\\n}\\n.resize-container.no-hover.bottom:hover ~ .resize-line.bottom {\\n transform: translateY(-28px);\\n}\\n.resize-container.no-hover.top:hover ~ .resize-line.top {\\n transform: translateY(28px);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.segment-boundary-trigger {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 6px;\n line-height: 16px;\n font-weight: 500;\n color: var(--color-gray-1000);\n border-radius: 999px;\n border: none;\n font-size: var(--size-12);\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.segment-boundary-trigger-text {\n font-size: var(--size-12);\n font-weight: 500;\n user-select: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.segment-boundary-trigger-text .plus-icon {\n transition: transform 0.25s ease;\n}\n\n.segment-boundary-trigger-text:hover .plus-icon {\n color: var(--color-gray-800);\n}\n\n.segment-boundary-trigger svg {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n vertical-align: middle;\n}\n\n.segment-boundary-trigger:hover svg {\n color: var(--color-gray-700);\n}\n\n.segment-boundary-trigger[disabled] svg,\n.segment-boundary-trigger[disabled]:hover svg {\n color: var(--color-gray-400);\n cursor: not-allowed;\n}\n\n.segment-boundary-dropdown {\n padding: 8px;\n background: var(--color-background-100);\n border: 1px solid var(--color-gray-400);\n border-radius: 16px;\n min-width: 120px;\n user-select: none;\n cursor: default;\n box-shadow: 0px 4px 8px -4px color-mix(in srgb, var(--color-gray-900) 4%, transparent);\n}\n\n.segment-boundary-dropdown-positioner {\n z-index: var(--top-z-index);\n}\n\n.segment-boundary-dropdown-item {\n display: flex;\n align-items: center;\n padding: 8px;\n line-height: 20px;\n font-size: 14px;\n border-radius: 6px;\n color: var(--color-gray-1000);\n cursor: pointer;\n min-width: 220px;\n border: none;\n background: none;\n width: 100%;\n}\n\n.segment-boundary-dropdown-item[data-disabled] {\n color: var(--color-gray-400);\n cursor: not-allowed;\n}\n\n.segment-boundary-dropdown-item svg {\n margin-right: 12px;\n color: currentColor;\n}\n\n.segment-boundary-dropdown-item:hover {\n background: var(--color-gray-200);\n}\n\n.segment-boundary-dropdown-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n\n.segment-boundary-dropdown-item:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n\n.segment-boundary-group-label {\n padding: 8px;\n font-size: 13px;\n line-height: 16px;\n font-weight: 400;\n color: var(--color-gray-900);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\"],names:[],mappings:\"AAAA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,iBAAiB;EACjB,gBAAgB;EAChB,6BAA6B;EAC7B,oBAAoB;EACpB,YAAY;EACZ,yBAAyB;EACzB,eAAe;EACf,uCAAuC;AACzC;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,cAAc;EACd,sBAAsB;AACxB;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;;EAEE,4BAA4B;EAC5B,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,uCAAuC;EACvC,uCAAuC;EACvC,mBAAmB;EACnB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;EACf,sFAAsF;AACxF;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,YAAY;EACZ,iBAAiB;EACjB,eAAe;EACf,kBAAkB;EAClB,6BAA6B;EAC7B,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;EAChB,WAAW;AACb;;AAEA;EACE,4BAA4B;EAC5B,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,2BAA2B;EAC3B,4BAA4B;AAC9B;;AAEA;EACE,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,iBAAiB;EACjB,gBAAgB;EAChB,4BAA4B;AAC9B\",sourcesContent:[\".segment-boundary-trigger {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n padding: 4px 6px;\\n line-height: 16px;\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n border-radius: 999px;\\n border: none;\\n font-size: var(--size-12);\\n cursor: pointer;\\n transition: background-color 0.15s ease;\\n}\\n\\n.segment-boundary-trigger-text {\\n font-size: var(--size-12);\\n font-weight: 500;\\n user-select: none;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.segment-boundary-trigger-text .plus-icon {\\n transition: transform 0.25s ease;\\n}\\n\\n.segment-boundary-trigger-text:hover .plus-icon {\\n color: var(--color-gray-800);\\n}\\n\\n.segment-boundary-trigger svg {\\n width: 14px;\\n height: 14px;\\n flex-shrink: 0;\\n vertical-align: middle;\\n}\\n\\n.segment-boundary-trigger:hover svg {\\n color: var(--color-gray-700);\\n}\\n\\n.segment-boundary-trigger[disabled] svg,\\n.segment-boundary-trigger[disabled]:hover svg {\\n color: var(--color-gray-400);\\n cursor: not-allowed;\\n}\\n\\n.segment-boundary-dropdown {\\n padding: 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: 16px;\\n min-width: 120px;\\n user-select: none;\\n cursor: default;\\n box-shadow: 0px 4px 8px -4px color-mix(in srgb, var(--color-gray-900) 4%, transparent);\\n}\\n\\n.segment-boundary-dropdown-positioner {\\n z-index: var(--top-z-index);\\n}\\n\\n.segment-boundary-dropdown-item {\\n display: flex;\\n align-items: center;\\n padding: 8px;\\n line-height: 20px;\\n font-size: 14px;\\n border-radius: 6px;\\n color: var(--color-gray-1000);\\n cursor: pointer;\\n min-width: 220px;\\n border: none;\\n background: none;\\n width: 100%;\\n}\\n\\n.segment-boundary-dropdown-item[data-disabled] {\\n color: var(--color-gray-400);\\n cursor: not-allowed;\\n}\\n\\n.segment-boundary-dropdown-item svg {\\n margin-right: 12px;\\n color: currentColor;\\n}\\n\\n.segment-boundary-dropdown-item:hover {\\n background: var(--color-gray-200);\\n}\\n\\n.segment-boundary-dropdown-item:first-child {\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n}\\n\\n.segment-boundary-dropdown-item:last-child {\\n border-bottom-left-radius: 4px;\\n border-bottom-right-radius: 4px;\\n}\\n\\n.segment-boundary-group-label {\\n padding: 8px;\\n font-size: 13px;\\n line-height: 16px;\\n font-weight: 400;\\n color: var(--color-gray-900);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.segment-explorer-content {\n font-size: var(--size-14);\n padding: 0 8px;\n width: 700px;\n height: 400px;\n max-width: calc(100vw - 40px);\n max-height: calc(100vh - 240px);\n}\n\n.segment-explorer-page-route-bar {\n display: flex;\n align-items: center;\n padding: 14px 16px;\n background-color: var(--color-background-200);\n gap: 12px;\n}\n\n.segment-explorer-page-route-bar-path {\n font-size: var(--size-14);\n font-weight: 500;\n color: var(--color-gray-1000);\n font-family: var(--font-mono);\n white-space: nowrap;\n line-height: 20px;\n}\n\n.segment-explorer-item {\n margin: 4px 0;\n border-radius: 6px;\n}\n\n.segment-explorer-item:nth-child(even) {\n background-color: var(--color-background-200);\n}\n\n.segment-explorer-item-row {\n display: flex;\n align-items: center;\n padding-top: 10px;\n padding-bottom: 10px;\n padding-right: 4px;\n white-space: pre;\n cursor: default;\n color: var(--color-gray-1000);\n}\n\n.segment-explorer-children--intended {\n padding-left: 16px;\n}\n\n.segment-explorer-filename {\n display: inline-flex;\n width: 100%;\n align-items: center;\n}\n\n.segment-explorer-filename select {\n margin-left: auto;\n}\n\n.segment-explorer-filename--path {\n margin-right: auto;\n}\n.segment-explorer-filename--path small {\n display: inline-block;\n width: 0;\n opacity: 0;\n}\n.segment-explorer-filename--name {\n color: var(--color-gray-800);\n}\n\n.segment-explorer-files {\n display: inline-flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.segment-explorer-files + .segment-boundary-trigger {\n margin-left: 8px;\n}\n\n.segment-explorer-file-label {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 4px 6px;\n border-radius: 16px;\n line-height: 16px;\n font-size: var(--size-12);\n font-weight: 500;\n user-select: none;\n cursor: pointer;\n background-color: var(--color-gray-300);\n color: var(--color-gray-1000);\n}\n\n.segment-explorer-file-label--overridden {\n background-color: var(--color-amber-300);\n color: var(--color-amber-900);\n}\n\n.segment-explorer-file-label .code-icon {\n opacity: 0;\n margin-left: 0;\n width: 0;\n transition: all 0.15s ease-in-out;\n}\n.segment-explorer-file-label:hover .code-icon {\n opacity: 1;\n width: 12px;\n margin-left: 4px;\n}\n\n.segment-explorer-file-label:hover {\n filter: brightness(0.95);\n}\n\n.segment-explorer-file-label--builtin {\n background-color: transparent;\n color: var(--color-gray-900);\n border: 1px dashed var(--color-gray-500);\n height: 24px;\n cursor: default;\n}\n.segment-explorer-file-label--builtin svg {\n margin-left: 4px;\n margin-right: -4px;\n}\n\n/* Footer styles */\n.segment-explorer-footer {\n padding: 8px;\n border-top: 1px solid var(--color-gray-400);\n background-color: var(--color-background-100);\n user-select: none;\n}\n\n.segment-explorer-footer-button {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n width: 100%;\n padding: 6px;\n background: var(--color-background-100);\n border: 1px solid var(--color-gray-400);\n border-radius: 6px;\n color: var(--color-gray-1000);\n font-size: var(--size-14);\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.segment-explorer-footer-button:hover:not(:disabled) {\n background: var(--color-gray-200);\n}\n\n.segment-explorer-footer-button--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.segment-explorer-footer-text {\n text-align: center;\n}\n\n.segment-explorer-footer-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: var(--color-amber-300);\n color: var(--color-amber-900);\n border-radius: 10px;\n font-size: var(--size-12);\n font-weight: 600;\n line-height: 1;\n}\n\n.segment-explorer-file-label-tooltip--sm {\n white-space: nowrap;\n}\n\n.segment-explorer-file-label-tooltip--lg {\n min-width: 200px;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\"],names:[],mappings:\"AAAA;EACE,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,aAAa;EACb,6BAA6B;EAC7B,+BAA+B;AACjC;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,6CAA6C;EAC7C,SAAS;AACX;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,6BAA6B;EAC7B,6BAA6B;EAC7B,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,iBAAiB;EACjB,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,WAAW;EACX,mBAAmB;AACrB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,kBAAkB;AACpB;AACA;EACE,qBAAqB;EACrB,QAAQ;EACR,UAAU;AACZ;AACA;EACE,4BAA4B;AAC9B;;AAEA;EACE,oBAAoB;EACpB,QAAQ;EACR,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,gBAAgB;EAChB,mBAAmB;EACnB,iBAAiB;EACjB,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;EACf,uCAAuC;EACvC,6BAA6B;AAC/B;;AAEA;EACE,wCAAwC;EACxC,6BAA6B;AAC/B;;AAEA;EACE,UAAU;EACV,cAAc;EACd,QAAQ;EACR,iCAAiC;AACnC;AACA;EACE,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,6BAA6B;EAC7B,4BAA4B;EAC5B,wCAAwC;EACxC,YAAY;EACZ,eAAe;AACjB;AACA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA,kBAAkB;AAClB;EACE,YAAY;EACZ,2CAA2C;EAC3C,6CAA6C;EAC7C,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,uCAAuC;EACvC,uCAAuC;EACvC,kBAAkB;EAClB,6BAA6B;EAC7B,yBAAyB;EACzB,gBAAgB;EAChB,eAAe;EACf,uCAAuC;AACzC;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,YAAY;EACZ,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,eAAe;EACf,YAAY;EACZ,cAAc;EACd,kCAAkC;EAClC,6BAA6B;EAC7B,mBAAmB;EACnB,yBAAyB;EACzB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;AAClB\",sourcesContent:[\".segment-explorer-content {\\n font-size: var(--size-14);\\n padding: 0 8px;\\n width: 700px;\\n height: 400px;\\n max-width: calc(100vw - 40px);\\n max-height: calc(100vh - 240px);\\n}\\n\\n.segment-explorer-page-route-bar {\\n display: flex;\\n align-items: center;\\n padding: 14px 16px;\\n background-color: var(--color-background-200);\\n gap: 12px;\\n}\\n\\n.segment-explorer-page-route-bar-path {\\n font-size: var(--size-14);\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n font-family: var(--font-mono);\\n white-space: nowrap;\\n line-height: 20px;\\n}\\n\\n.segment-explorer-item {\\n margin: 4px 0;\\n border-radius: 6px;\\n}\\n\\n.segment-explorer-item:nth-child(even) {\\n background-color: var(--color-background-200);\\n}\\n\\n.segment-explorer-item-row {\\n display: flex;\\n align-items: center;\\n padding-top: 10px;\\n padding-bottom: 10px;\\n padding-right: 4px;\\n white-space: pre;\\n cursor: default;\\n color: var(--color-gray-1000);\\n}\\n\\n.segment-explorer-children--intended {\\n padding-left: 16px;\\n}\\n\\n.segment-explorer-filename {\\n display: inline-flex;\\n width: 100%;\\n align-items: center;\\n}\\n\\n.segment-explorer-filename select {\\n margin-left: auto;\\n}\\n\\n.segment-explorer-filename--path {\\n margin-right: auto;\\n}\\n.segment-explorer-filename--path small {\\n display: inline-block;\\n width: 0;\\n opacity: 0;\\n}\\n.segment-explorer-filename--name {\\n color: var(--color-gray-800);\\n}\\n\\n.segment-explorer-files {\\n display: inline-flex;\\n gap: 8px;\\n margin-left: auto;\\n}\\n\\n.segment-explorer-files + .segment-boundary-trigger {\\n margin-left: 8px;\\n}\\n\\n.segment-explorer-file-label {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n padding: 4px 6px;\\n border-radius: 16px;\\n line-height: 16px;\\n font-size: var(--size-12);\\n font-weight: 500;\\n user-select: none;\\n cursor: pointer;\\n background-color: var(--color-gray-300);\\n color: var(--color-gray-1000);\\n}\\n\\n.segment-explorer-file-label--overridden {\\n background-color: var(--color-amber-300);\\n color: var(--color-amber-900);\\n}\\n\\n.segment-explorer-file-label .code-icon {\\n opacity: 0;\\n margin-left: 0;\\n width: 0;\\n transition: all 0.15s ease-in-out;\\n}\\n.segment-explorer-file-label:hover .code-icon {\\n opacity: 1;\\n width: 12px;\\n margin-left: 4px;\\n}\\n\\n.segment-explorer-file-label:hover {\\n filter: brightness(0.95);\\n}\\n\\n.segment-explorer-file-label--builtin {\\n background-color: transparent;\\n color: var(--color-gray-900);\\n border: 1px dashed var(--color-gray-500);\\n height: 24px;\\n cursor: default;\\n}\\n.segment-explorer-file-label--builtin svg {\\n margin-left: 4px;\\n margin-right: -4px;\\n}\\n\\n/* Footer styles */\\n.segment-explorer-footer {\\n padding: 8px;\\n border-top: 1px solid var(--color-gray-400);\\n background-color: var(--color-background-100);\\n user-select: none;\\n}\\n\\n.segment-explorer-footer-button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n width: 100%;\\n padding: 6px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: 6px;\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n font-weight: 500;\\n cursor: pointer;\\n transition: background-color 0.15s ease;\\n}\\n\\n.segment-explorer-footer-button:hover:not(:disabled) {\\n background: var(--color-gray-200);\\n}\\n\\n.segment-explorer-footer-button--disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n\\n.segment-explorer-footer-text {\\n text-align: center;\\n}\\n\\n.segment-explorer-footer-badge {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n min-width: 20px;\\n height: 20px;\\n padding: 0 6px;\\n background: var(--color-amber-300);\\n color: var(--color-amber-900);\\n border-radius: 10px;\\n font-size: var(--size-12);\\n font-weight: 600;\\n line-height: 1;\\n}\\n\\n.segment-explorer-file-label-tooltip--sm {\\n white-space: nowrap;\\n}\\n\\n.segment-explorer-file-label-tooltip--lg {\\n min-width: 200px;\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/toast/style.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.nextjs-toast {\n position: fixed;\n z-index: var(--top-z-index);\n max-width: 420px;\n box-shadow: 0px 16px 32px rgba(0, 0, 0, 0.25);\n}\n\n.nextjs-toast-errors-parent {\n padding: 16px;\n border-radius: var(--rounded-4xl);\n font-weight: 500;\n color: var(--color-ansi-bright-white);\n background-color: var(--color-ansi-red);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/toast/style.css\"],names:[],mappings:\"AAAA;EACE,eAAe;EACf,2BAA2B;EAC3B,gBAAgB;EAChB,6CAA6C;AAC/C;;AAEA;EACE,aAAa;EACb,iCAAiC;EACjC,gBAAgB;EAChB,qCAAqC;EACrC,uCAAuC;AACzC\",sourcesContent:[\".nextjs-toast {\\n position: fixed;\\n z-index: var(--top-z-index);\\n max-width: 420px;\\n box-shadow: 0px 16px 32px rgba(0, 0, 0, 0.25);\\n}\\n\\n.nextjs-toast-errors-parent {\\n padding: 16px;\\n border-radius: var(--rounded-4xl);\\n font-weight: 500;\\n color: var(--color-ansi-bright-white);\\n background-color: var(--color-ansi-red);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/global.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`/* devtool global css variables */\n:host {\n --top-z-index: 2147483647;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/global.css\"],names:[],mappings:\"AAAA,iCAAiC;AACjC;EACE,yBAAyB;AAC3B\",sourcesContent:[\"/* devtool global css variables */\\n:host {\\n --top-z-index: 2147483647;\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\":function(e){\"use strict\";e.exports=function(e){var n=[];return n.toString=function(){return this.map(function(n){var t=\"\",r=void 0!==n[5];return n[4]&&(t+=\"@supports (\".concat(n[4],\") {\")),n[2]&&(t+=\"@media \".concat(n[2],\" {\")),r&&(t+=\"@layer\".concat(n[5].length>0?\" \".concat(n[5]):\"\",\" {\")),t+=e(n),r&&(t+=\"}\"),n[2]&&(t+=\"}\"),n[4]&&(t+=\"}\"),t}).join(\"\")},n.i=function(e,t,r,o,a){\"string\"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var l=0;l<this.length;l++){var s=this[l][0];null!=s&&(i[s]=!0)}for(var c=0;c<e.length;c++){var u=[].concat(e[c]);r&&i[u[0]]||(void 0!==a&&(void 0===u[5]||(u[1]=\"@layer\".concat(u[5].length>0?\" \".concat(u[5]):\"\",\" {\").concat(u[1],\"}\")),u[5]=a),t&&(u[2]&&(u[1]=\"@media \".concat(u[2],\" {\").concat(u[1],\"}\")),u[2]=t),o&&(u[4]?(u[1]=\"@supports (\".concat(u[4],\") {\").concat(u[1],\"}\"),u[4]=o):u[4]=\"\".concat(o)),n.push(u))}},n}},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\":function(e){\"use strict\";e.exports=function(e){var n=e[1],t=e[3];if(!t)return n;if(\"function\"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(t))));return[n].concat([\"/*# \".concat(\"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(r),\" */\")]).join(\"\\n\")}return[n].join(\"\\n\")}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\":function(e){\"use strict\";var n=[];function t(e){for(var t=-1,r=0;r<n.length;r++)if(n[r].identifier===e){t=r;break}return t}function r(e,r){for(var o={},a=[],i=0;i<e.length;i++){var l=e[i],s=r.base?l[0]+r.base:l[0],c=o[s]||0,u=\"\".concat(s,\" \").concat(c);o[s]=c+1;var d=t(u),f={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)n[d].references++,n[d].updater(f);else{var p=function(e,n){var t=n.domAPI(n);return t.update(e),function(n){n?(n.css!==e.css||n.media!==e.media||n.sourceMap!==e.sourceMap||n.supports!==e.supports||n.layer!==e.layer)&&t.update(e=n):t.remove()}}(f,r);r.byIndex=i,n.splice(i,0,{identifier:u,updater:p,references:1})}a.push(u)}return a}e.exports=function(e,o){var a=r(e=e||[],o=o||{});return function(e){e=e||[];for(var i=0;i<a.length;i++){var l=t(a[i]);n[l].references--}for(var s=r(e,o),c=0;c<a.length;c++){var u=t(a[c]);0===n[u].references&&(n[u].updater(),n.splice(u,1))}a=s}}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\":function(e){\"use strict\";e.exports=function(e){var n=document.createElement(\"style\");return e.setAttributes(n,e.attributes),e.insert(n,e.options),n}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\":function(e,n,t){\"use strict\";e.exports=function(e){var n=t.nc;n&&e.setAttribute(\"nonce\",n)}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\":function(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var n=e.insertStyleElement(e);return{update:function(t){var r,o,a;r=\"\",t.supports&&(r+=\"@supports (\".concat(t.supports,\") {\")),t.media&&(r+=\"@media \".concat(t.media,\" {\")),(o=void 0!==t.layer)&&(r+=\"@layer\".concat(t.layer.length>0?\" \".concat(t.layer):\"\",\" {\")),r+=t.css,o&&(r+=\"}\"),t.media&&(r+=\"}\"),t.supports&&(r+=\"}\"),(a=t.sourceMap)&&\"undefined\"!=typeof btoa&&(r+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" */\")),e.styleTagTransform(r,n,e.options)},remove:function(){!function(e){if(null!==e.parentNode)e.parentNode.removeChild(e)}(n)}}}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\":function(e){\"use strict\";e.exports=function(e,n){if(n.styleSheet)n.styleSheet.cssText=e;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(e))}}},\"./dist/compiled/anser/index.js\":function(e){(()=>{\"use strict\";var n={211:e=>{var n=function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}(),t=[[{color:\"0, 0, 0\",class:\"ansi-black\"},{color:\"187, 0, 0\",class:\"ansi-red\"},{color:\"0, 187, 0\",class:\"ansi-green\"},{color:\"187, 187, 0\",class:\"ansi-yellow\"},{color:\"0, 0, 187\",class:\"ansi-blue\"},{color:\"187, 0, 187\",class:\"ansi-magenta\"},{color:\"0, 187, 187\",class:\"ansi-cyan\"},{color:\"255,255,255\",class:\"ansi-white\"}],[{color:\"85, 85, 85\",class:\"ansi-bright-black\"},{color:\"255, 85, 85\",class:\"ansi-bright-red\"},{color:\"0, 255, 0\",class:\"ansi-bright-green\"},{color:\"255, 255, 85\",class:\"ansi-bright-yellow\"},{color:\"85, 85, 255\",class:\"ansi-bright-blue\"},{color:\"255, 85, 255\",class:\"ansi-bright-magenta\"},{color:\"85, 255, 255\",class:\"ansi-bright-cyan\"},{color:\"255, 255, 255\",class:\"ansi-bright-white\"}]];e.exports=function(){function e(){if(!(this instanceof e))throw TypeError(\"Cannot call a class as a function\");this.fg=this.bg=this.fg_truecolor=this.bg_truecolor=null,this.bright=0}return n(e,null,[{key:\"escapeForHtml\",value:function(n){return(new e).escapeForHtml(n)}},{key:\"linkify\",value:function(n){return(new e).linkify(n)}},{key:\"ansiToHtml\",value:function(n,t){return(new e).ansiToHtml(n,t)}},{key:\"ansiToJson\",value:function(n,t){return(new e).ansiToJson(n,t)}},{key:\"ansiToText\",value:function(n){return(new e).ansiToText(n)}}]),n(e,[{key:\"setupPalette\",value:function(){this.PALETTE_COLORS=[];for(var e=0;e<2;++e)for(var n=0;n<8;++n)this.PALETTE_COLORS.push(t[e][n].color);for(var r=[0,95,135,175,215,255],o=function(e,n,t){return r[e]+\", \"+r[n]+\", \"+r[t]},a=0;a<6;++a)for(var i=0;i<6;++i)for(var l=0;l<6;++l)this.PALETTE_COLORS.push(o(a,i,l));for(var s=8,c=0;c<24;++c,s+=10)this.PALETTE_COLORS.push(o(s,s,s))}},{key:\"escapeForHtml\",value:function(e){return e.replace(/[&<>]/gm,function(e){return\"&\"==e?\"&\":\"<\"==e?\"<\":\">\"==e?\">\":\"\"})}},{key:\"linkify\",value:function(e){return e.replace(/(https?:\\/\\/[^\\s]+)/gm,function(e){return'<a href=\"'+e+'\">'+e+\"</a>\"})}},{key:\"ansiToHtml\",value:function(e,n){return this.process(e,n,!0)}},{key:\"ansiToJson\",value:function(e,n){return(n=n||{}).json=!0,n.clearLine=!1,this.process(e,n,!0)}},{key:\"ansiToText\",value:function(e){return this.process(e,{},!1)}},{key:\"process\",value:function(e,n,t){var r=this,o=e.split(/\\033\\[/),a=o.shift();null==n&&(n={}),n.clearLine=/\\r/.test(e);var i=o.map(function(e){return r.processChunk(e,n,t)});if(n&&n.json){var l=this.processChunkJson(\"\");return l.content=a,l.clearLine=n.clearLine,i.unshift(l),n.remove_empty&&(i=i.filter(function(e){return!e.isEmpty()})),i}return i.unshift(a),i.join(\"\")}},{key:\"processChunkJson\",value:function(e,n,r){var o=(n=void 0===n?{}:n).use_classes=void 0!==n.use_classes&&n.use_classes,a=n.key=o?\"class\":\"color\",i={content:e,fg:null,bg:null,fg_truecolor:null,bg_truecolor:null,clearLine:n.clearLine,decoration:null,was_processed:!1,isEmpty:function(){return!i.content}},l=e.match(/^([!\\x3c-\\x3f]*)([\\d;]*)([\\x20-\\x2c]*[\\x40-\\x7e])([\\s\\S]*)/m);if(!l)return i;i.content=l[4];var s=l[2].split(\";\");if(\"\"!==l[1]||\"m\"!==l[3]||!r)return i;for(this.decoration=null;s.length>0;){var c=parseInt(s.shift());if(isNaN(c)||0===c)this.fg=this.bg=this.decoration=null;else if(1===c)this.decoration=\"bold\";else if(2===c)this.decoration=\"dim\";else if(3==c)this.decoration=\"italic\";else if(4==c)this.decoration=\"underline\";else if(5==c)this.decoration=\"blink\";else if(7===c)this.decoration=\"reverse\";else if(8===c)this.decoration=\"hidden\";else if(9===c)this.decoration=\"strikethrough\";else if(39==c)this.fg=null;else if(49==c)this.bg=null;else if(c>=30&&c<38)this.fg=t[0][c%10][a];else if(c>=90&&c<98)this.fg=t[1][c%10][a];else if(c>=40&&c<48)this.bg=t[0][c%10][a];else if(c>=100&&c<108)this.bg=t[1][c%10][a];else if(38===c||48===c){var u=38===c;if(s.length>=1){var d=s.shift();if(\"5\"===d&&s.length>=1){var f=parseInt(s.shift());if(f>=0&&f<=255)if(o){var p=f>=16?\"ansi-palette-\"+f:t[+(f>7)][f%8].class;u?this.fg=p:this.bg=p}else this.PALETTE_COLORS||this.setupPalette(),u?this.fg=this.PALETTE_COLORS[f]:this.bg=this.PALETTE_COLORS[f]}else if(\"2\"===d&&s.length>=3){var h=parseInt(s.shift()),g=parseInt(s.shift()),m=parseInt(s.shift());if(h>=0&&h<=255&&g>=0&&g<=255&&m>=0&&m<=255){var v=h+\", \"+g+\", \"+m;o?u?(this.fg=\"ansi-truecolor\",this.fg_truecolor=v):(this.bg=\"ansi-truecolor\",this.bg_truecolor=v):u?this.fg=v:this.bg=v}}}}}return null===this.fg&&null===this.bg&&null===this.decoration||(i.fg=this.fg,i.bg=this.bg,i.fg_truecolor=this.fg_truecolor,i.bg_truecolor=this.bg_truecolor,i.decoration=this.decoration,i.was_processed=!0),i}},{key:\"processChunk\",value:function(e,n,t){var r=this;n=n||{};var o=this.processChunkJson(e,n,t);if(n.json)return o;if(o.isEmpty())return\"\";if(!o.was_processed)return o.content;var a=n.use_classes,i=[],l=[],s={},c=function(e){var n=[],t=void 0;for(t in e)e.hasOwnProperty(t)&&n.push(\"data-\"+t+'=\"'+r.escapeForHtml(e[t])+'\"');return n.length>0?\" \"+n.join(\" \"):\"\"};return(o.fg&&(a?(l.push(o.fg+\"-fg\"),null!==o.fg_truecolor&&(s[\"ansi-truecolor-fg\"]=o.fg_truecolor,o.fg_truecolor=null)):i.push(\"color:rgb(\"+o.fg+\")\")),o.bg&&(a?(l.push(o.bg+\"-bg\"),null!==o.bg_truecolor&&(s[\"ansi-truecolor-bg\"]=o.bg_truecolor,o.bg_truecolor=null)):i.push(\"background-color:rgb(\"+o.bg+\")\")),o.decoration&&(a?l.push(\"ansi-\"+o.decoration):\"bold\"===o.decoration?i.push(\"font-weight:bold\"):\"dim\"===o.decoration?i.push(\"opacity:0.5\"):\"italic\"===o.decoration?i.push(\"font-style:italic\"):\"reverse\"===o.decoration?i.push(\"filter:invert(100%)\"):\"hidden\"===o.decoration?i.push(\"visibility:hidden\"):\"strikethrough\"===o.decoration?i.push(\"text-decoration:line-through\"):i.push(\"text-decoration:\"+o.decoration)),a)?'<span class=\"'+l.join(\" \")+'\"'+c(s)+\">\"+o.content+\"</span>\":'<span style=\"'+i.join(\";\")+'\"'+c(s)+\">\"+o.content+\"</span>\"}}]),e}()}},t={};function r(e){var o=t[e];if(void 0!==o)return o.exports;var a=t[e]={exports:{}},i=!0;try{n[e](a,a.exports,r),i=!1}finally{i&&delete t[e]}return a.exports}r.ab=\"//\",e.exports=r(211)})()},\"./dist/compiled/react-dom/cjs/react-dom-client.production.js\":function(e,n,t){\"use strict\";var r,o=t(\"./dist/compiled/scheduler/index.js\"),a=t(\"./dist/compiled/react/index.js\"),i=t(\"./dist/compiled/react-dom/index.js\");function l(e){var n=\"https://react.dev/errors/\"+e;if(1<arguments.length){n+=\"?args[]=\"+encodeURIComponent(arguments[1]);for(var t=2;t<arguments.length;t++)n+=\"&args[]=\"+encodeURIComponent(arguments[t])}return\"Minified React error #\"+e+\"; visit \"+n+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}function s(e){var n=e,t=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do 0!=(4098&(n=e).flags)&&(t=n.return),e=n.return;while(e)}return 3===n.tag?t:null}function c(e){if(13===e.tag){var n=e.memoizedState;if(null===n&&null!==(e=e.alternate)&&(n=e.memoizedState),null!==n)return n.dehydrated}return null}function u(e){if(31===e.tag){var n=e.memoizedState;if(null===n&&null!==(e=e.alternate)&&(n=e.memoizedState),null!==n)return n.dehydrated}return null}function d(e){if(s(e)!==e)throw Error(l(188))}var f=Object.assign,p=Symbol.for(\"react.element\"),h=Symbol.for(\"react.transitional.element\"),g=Symbol.for(\"react.portal\"),m=Symbol.for(\"react.fragment\"),v=Symbol.for(\"react.strict_mode\"),b=Symbol.for(\"react.profiler\"),y=Symbol.for(\"react.consumer\"),x=Symbol.for(\"react.context\"),w=Symbol.for(\"react.forward_ref\"),j=Symbol.for(\"react.suspense\"),k=Symbol.for(\"react.suspense_list\"),A=Symbol.for(\"react.memo\"),O=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");var C=Symbol.for(\"react.activity\");Symbol.for(\"react.legacy_hidden\"),Symbol.for(\"react.tracing_marker\");var S=Symbol.for(\"react.memo_cache_sentinel\");Symbol.for(\"react.view_transition\");var E=Symbol.iterator;function _(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=E&&e[E]||e[\"@@iterator\"])?e:null}var P=Symbol.for(\"react.client.reference\"),z=Array.isArray,L=a.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,T=i.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,R={pending:!1,data:null,method:null,action:null},N=[],D=-1;function B(e){return{current:e}}function M(e){0>D||(e.current=N[D],N[D]=null,D--)}function I(e,n){N[++D]=e.current,e.current=n}var H=B(null),F=B(null),U=B(null),V=B(null);function q(e,n){switch(I(U,n),I(F,e),I(H,null),n.nodeType){case 9:case 11:e=(e=n.documentElement)&&(e=e.namespaceURI)?cp(e):0;break;default:if(e=n.tagName,n=n.namespaceURI)e=ch(n=cp(n),e);else switch(e){case\"svg\":e=1;break;case\"math\":e=2;break;default:e=0}}M(H),I(H,e)}function W(){M(H),M(F),M(U)}function $(e){null!==e.memoizedState&&I(V,e);var n=H.current,t=ch(n,e.type);n!==t&&(I(F,e),I(H,t))}function Z(e){F.current===e&&(M(H),M(F)),V.current===e&&(M(V),c6._currentValue=R)}function Y(e){if(void 0===nD)try{throw Error()}catch(e){var n=e.stack.trim().match(/\\n( *(at )?)/);nD=n&&n[1]||\"\",nB=-1<e.stack.indexOf(\"\\n at\")?\" (<anonymous>)\":-1<e.stack.indexOf(\"@\")?\"@unknown:0:0\":\"\"}return\"\\n\"+nD+e+nB}var X=!1;function K(e,n){if(!e||X)return\"\";X=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(n){var t=function(){throw Error()};if(Object.defineProperty(t.prototype,\"props\",{set:function(){throw Error()}}),\"object\"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}}else{try{throw Error()}catch(e){r=e}(t=e())&&\"function\"==typeof t.catch&&t.catch(function(){})}}catch(e){if(e&&r&&\"string\"==typeof e.stack)return[e.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName=\"DetermineComponentFrameRoot\";var o=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,\"name\");o&&o.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,\"name\",{value:\"DetermineComponentFrameRoot\"});var a=r.DetermineComponentFrameRoot(),i=a[0],l=a[1];if(i&&l){var s=i.split(\"\\n\"),c=l.split(\"\\n\");for(o=r=0;r<s.length&&!s[r].includes(\"DetermineComponentFrameRoot\");)r++;for(;o<c.length&&!c[o].includes(\"DetermineComponentFrameRoot\");)o++;if(r===s.length||o===c.length)for(r=s.length-1,o=c.length-1;1<=r&&0<=o&&s[r]!==c[o];)o--;for(;1<=r&&0<=o;r--,o--)if(s[r]!==c[o]){if(1!==r||1!==o)do if(r--,o--,0>o||s[r]!==c[o]){var u=\"\\n\"+s[r].replace(\" at new \",\" at \");return e.displayName&&u.includes(\"<anonymous>\")&&(u=u.replace(\"<anonymous>\",e.displayName)),u}while(1<=r&&0<=o);break}}}finally{X=!1,Error.prepareStackTrace=t}return(t=e?e.displayName||e.name:\"\")?Y(t):\"\"}function Q(e){try{var n=\"\",t=null;do n+=function(e,n){switch(e.tag){case 26:case 27:case 5:return Y(e.type);case 16:return Y(\"Lazy\");case 13:return e.child!==n&&null!==n?Y(\"Suspense Fallback\"):Y(\"Suspense\");case 19:return Y(\"SuspenseList\");case 0:case 15:return K(e.type,!1);case 11:return K(e.type.render,!1);case 1:return K(e.type,!0);case 31:return Y(\"Activity\");default:return\"\"}}(e,t),t=e,e=e.return;while(e);return n}catch(e){return\"\\nError generating stack: \"+e.message+\"\\n\"+e.stack}}var G=Object.prototype.hasOwnProperty,J=o.unstable_scheduleCallback,ee=o.unstable_cancelCallback,en=o.unstable_shouldYield,et=o.unstable_requestPaint,er=o.unstable_now,eo=o.unstable_getCurrentPriorityLevel,ea=o.unstable_ImmediatePriority,ei=o.unstable_UserBlockingPriority,el=o.unstable_NormalPriority,es=o.unstable_LowPriority,ec=o.unstable_IdlePriority,eu=o.log,ed=o.unstable_setDisableYieldValue,ef=null,ep=null;function eh(e){if(\"function\"==typeof eu&&ed(e),ep&&\"function\"==typeof ep.setStrictMode)try{ep.setStrictMode(ef,e)}catch(e){}}var eg=Math.clz32?Math.clz32:function(e){return 0==(e>>>=0)?32:31-(em(e)/ev|0)|0},em=Math.log,ev=Math.LN2,eb=256,ey=4194304;function ex(e){var n=42&e;if(0!==n)return n;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 0x1000000:case 0x2000000:return 0x3c00000&e;case 0x4000000:return 0x4000000;case 0x8000000:return 0x8000000;case 0x10000000:return 0x10000000;case 0x20000000:return 0x20000000;case 0x40000000:return 0;default:return e}}function ew(e,n,t){var r=e.pendingLanes;if(0===r)return 0;var o=0,a=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var l=0x7ffffff&r;return 0!==l?0!=(r=l&~a)?o=ex(r):0!=(i&=l)?o=ex(i):t||0!=(t=l&~e)&&(o=ex(t)):0!=(l=r&~a)?o=ex(l):0!==i?o=ex(i):t||0!=(t=r&~e)&&(o=ex(t)),0===o?0:0!==n&&n!==o&&0==(n&a)&&((a=o&-o)>=(t=n&-n)||32===a&&0!=(4194048&t))?n:o}function ej(e,n){return 0==(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&n)}function ek(){var e=eb;return 0==(4194048&(eb<<=1))&&(eb=256),e}function eA(){var e=ey;return 0==(0x3c00000&(ey<<=1))&&(ey=4194304),e}function eO(e){for(var n=[],t=0;31>t;t++)n.push(e);return n}function eC(e,n){e.pendingLanes|=n,0x10000000!==n&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function eS(e,n,t){e.pendingLanes|=n,e.suspendedLanes&=~n;var r=31-eg(n);e.entangledLanes|=n,e.entanglements[r]=0x40000000|e.entanglements[r]|4194090&t}function eE(e,n){var t=e.entangledLanes|=n;for(e=e.entanglements;t;){var r=31-eg(t),o=1<<r;o&n|e[r]&n&&(e[r]|=n),t&=~o}}function e_(e,n){var t=n&-n;return 0!=((t=0!=(42&t)?1:eP(t))&(e.suspendedLanes|n))?0:t}function eP(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 0x1000000:case 0x2000000:e=128;break;case 0x10000000:e=0x8000000;break;default:e=0}return e}function ez(e){return 2<(e&=-e)?8<e?0!=(0x7ffffff&e)?32:0x10000000:8:2}function eL(){var e=T.p;return 0!==e?e:void 0===(e=window.event)?32:uu(e.type)}function eT(e,n){var t=T.p;try{return T.p=e,n()}finally{T.p=t}}var eR=Math.random().toString(36).slice(2),eN=\"__reactFiber$\"+eR,eD=\"__reactProps$\"+eR,eB=\"__reactContainer$\"+eR,eM=\"__reactEvents$\"+eR,eI=\"__reactListeners$\"+eR,eH=\"__reactHandles$\"+eR,eF=\"__reactResources$\"+eR,eU=\"__reactMarker$\"+eR;function eV(e){delete e[eN],delete e[eD],delete e[eM],delete e[eI],delete e[eH]}function eq(e){var n=e[eN];if(n)return n;for(var t=e.parentNode;t;){if(n=t[eB]||t[eN]){if(t=n.alternate,null!==n.child||null!==t&&null!==t.child)for(e=cL(e);null!==e;){if(t=e[eN])return t;e=cL(e)}return n}t=(e=t).parentNode}return null}function eW(e){if(e=e[eN]||e[eB]){var n=e.tag;if(5===n||6===n||13===n||31===n||26===n||27===n||3===n)return e}return null}function e$(e){var n=e.tag;if(5===n||26===n||27===n||6===n)return e.stateNode;throw Error(l(33))}function eZ(e){var n=e[eF];return n||(n=e[eF]={hoistableStyles:new Map,hoistableScripts:new Map}),n}function eY(e){e[eU]=!0}var eX=new Set,eK={};function eQ(e,n){eG(e,n),eG(e+\"Capture\",n)}function eG(e,n){for(eK[e]=n,e=0;e<n.length;e++)eX.add(n[e])}var eJ=RegExp(\"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"),e0={},e1={};function e2(e,n,t){if(G.call(e1,n)||!G.call(e0,n)&&(eJ.test(n)?e1[n]=!0:(e0[n]=!0,!1)))if(null===t)e.removeAttribute(n);else{switch(typeof t){case\"undefined\":case\"function\":case\"symbol\":e.removeAttribute(n);return;case\"boolean\":var r=n.toLowerCase().slice(0,5);if(\"data-\"!==r&&\"aria-\"!==r)return void e.removeAttribute(n)}e.setAttribute(n,\"\"+t)}}function e4(e,n,t){if(null===t)e.removeAttribute(n);else{switch(typeof t){case\"undefined\":case\"function\":case\"symbol\":case\"boolean\":e.removeAttribute(n);return}e.setAttribute(n,\"\"+t)}}function e5(e,n,t,r){if(null===r)e.removeAttribute(t);else{switch(typeof r){case\"undefined\":case\"function\":case\"symbol\":case\"boolean\":e.removeAttribute(t);return}e.setAttributeNS(n,t,\"\"+r)}}function e3(e){switch(typeof e){case\"bigint\":case\"boolean\":case\"number\":case\"string\":case\"undefined\":case\"object\":return e;default:return\"\"}}function e6(e){var n=e.type;return(e=e.nodeName)&&\"input\"===e.toLowerCase()&&(\"checkbox\"===n||\"radio\"===n)}function e9(e){if(!e._valueTracker){var n=e6(e)?\"checked\":\"value\";e._valueTracker=function(e,n,t){var r=Object.getOwnPropertyDescriptor(e.constructor.prototype,n);if(!e.hasOwnProperty(n)&&void 0!==r&&\"function\"==typeof r.get&&\"function\"==typeof r.set){var o=r.get,a=r.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return o.call(this)},set:function(e){t=\"\"+e,a.call(this,e)}}),Object.defineProperty(e,n,{enumerable:r.enumerable}),{getValue:function(){return t},setValue:function(e){t=\"\"+e},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}(e,n,\"\"+e[n])}}function e8(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),r=\"\";return e&&(r=e6(e)?e.checked?\"true\":\"false\":e.value),(e=r)!==t&&(n.setValue(e),!0)}function e7(e){if(void 0===(e=e||(\"undefined\"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(n){return e.body}}var ne=/[\\n\"\\\\]/g;function nn(e){return e.replace(ne,function(e){return\"\\\\\"+e.charCodeAt(0).toString(16)+\" \"})}function nt(e,n,t,r,o,a,i,l){e.name=\"\",null!=i&&\"function\"!=typeof i&&\"symbol\"!=typeof i&&\"boolean\"!=typeof i?e.type=i:e.removeAttribute(\"type\"),null!=n?\"number\"===i?(0===n&&\"\"===e.value||e.value!=n)&&(e.value=\"\"+e3(n)):e.value!==\"\"+e3(n)&&(e.value=\"\"+e3(n)):\"submit\"!==i&&\"reset\"!==i||e.removeAttribute(\"value\"),null!=n?no(e,i,e3(n)):null!=t?no(e,i,e3(t)):null!=r&&e.removeAttribute(\"value\"),null==o&&null!=a&&(e.defaultChecked=!!a),null!=o&&(e.checked=o&&\"function\"!=typeof o&&\"symbol\"!=typeof o),null!=l&&\"function\"!=typeof l&&\"symbol\"!=typeof l&&\"boolean\"!=typeof l?e.name=\"\"+e3(l):e.removeAttribute(\"name\")}function nr(e,n,t,r,o,a,i,l){if(null!=a&&\"function\"!=typeof a&&\"symbol\"!=typeof a&&\"boolean\"!=typeof a&&(e.type=a),null!=n||null!=t){if((\"submit\"===a||\"reset\"===a)&&null==n)return void e9(e);t=null!=t?\"\"+e3(t):\"\",n=null!=n?\"\"+e3(n):t,l||n===e.value||(e.value=n),e.defaultValue=n}r=\"function\"!=typeof(r=null!=r?r:o)&&\"symbol\"!=typeof r&&!!r,e.checked=l?e.checked:!!r,e.defaultChecked=!!r,null!=i&&\"function\"!=typeof i&&\"symbol\"!=typeof i&&\"boolean\"!=typeof i&&(e.name=i),e9(e)}function no(e,n,t){\"number\"===n&&e7(e.ownerDocument)===e||e.defaultValue===\"\"+t||(e.defaultValue=\"\"+t)}function na(e,n,t,r){if(e=e.options,n){n={};for(var o=0;o<t.length;o++)n[\"$\"+t[o]]=!0;for(t=0;t<e.length;t++)o=n.hasOwnProperty(\"$\"+e[t].value),e[t].selected!==o&&(e[t].selected=o),o&&r&&(e[t].defaultSelected=!0)}else{for(o=0,t=\"\"+e3(t),n=null;o<e.length;o++){if(e[o].value===t){e[o].selected=!0,r&&(e[o].defaultSelected=!0);return}null!==n||e[o].disabled||(n=e[o])}null!==n&&(n.selected=!0)}}function ni(e,n,t){if(null!=n&&((n=\"\"+e3(n))!==e.value&&(e.value=n),null==t)){e.defaultValue!==n&&(e.defaultValue=n);return}e.defaultValue=null!=t?\"\"+e3(t):\"\"}function nl(e,n,t,r){if(null==n){if(null!=r){if(null!=t)throw Error(l(92));if(z(r)){if(1<r.length)throw Error(l(93));r=r[0]}t=r}null==t&&(t=\"\"),n=t}e.defaultValue=t=e3(n),(r=e.textContent)===t&&\"\"!==r&&null!==r&&(e.value=r),e9(e)}function ns(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&3===t.nodeType){t.nodeValue=n;return}}e.textContent=n}var nc=new Set(\"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\" \"));function nu(e,n,t){var r=0===n.indexOf(\"--\");null==t||\"boolean\"==typeof t||\"\"===t?r?e.setProperty(n,\"\"):\"float\"===n?e.cssFloat=\"\":e[n]=\"\":r?e.setProperty(n,t):\"number\"!=typeof t||0===t||nc.has(n)?\"float\"===n?e.cssFloat=t:e[n]=(\"\"+t).trim():e[n]=t+\"px\"}function nd(e,n,t){if(null!=n&&\"object\"!=typeof n)throw Error(l(62));if(e=e.style,null!=t){for(var r in t)!t.hasOwnProperty(r)||null!=n&&n.hasOwnProperty(r)||(0===r.indexOf(\"--\")?e.setProperty(r,\"\"):\"float\"===r?e.cssFloat=\"\":e[r]=\"\");for(var o in n)r=n[o],n.hasOwnProperty(o)&&t[o]!==r&&nu(e,o,r)}else for(var a in n)n.hasOwnProperty(a)&&nu(e,a,n[a])}function nf(e){if(-1===e.indexOf(\"-\"))return!1;switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}var np=new Map([[\"acceptCharset\",\"accept-charset\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"],[\"crossOrigin\",\"crossorigin\"],[\"accentHeight\",\"accent-height\"],[\"alignmentBaseline\",\"alignment-baseline\"],[\"arabicForm\",\"arabic-form\"],[\"baselineShift\",\"baseline-shift\"],[\"capHeight\",\"cap-height\"],[\"clipPath\",\"clip-path\"],[\"clipRule\",\"clip-rule\"],[\"colorInterpolation\",\"color-interpolation\"],[\"colorInterpolationFilters\",\"color-interpolation-filters\"],[\"colorProfile\",\"color-profile\"],[\"colorRendering\",\"color-rendering\"],[\"dominantBaseline\",\"dominant-baseline\"],[\"enableBackground\",\"enable-background\"],[\"fillOpacity\",\"fill-opacity\"],[\"fillRule\",\"fill-rule\"],[\"floodColor\",\"flood-color\"],[\"floodOpacity\",\"flood-opacity\"],[\"fontFamily\",\"font-family\"],[\"fontSize\",\"font-size\"],[\"fontSizeAdjust\",\"font-size-adjust\"],[\"fontStretch\",\"font-stretch\"],[\"fontStyle\",\"font-style\"],[\"fontVariant\",\"font-variant\"],[\"fontWeight\",\"font-weight\"],[\"glyphName\",\"glyph-name\"],[\"glyphOrientationHorizontal\",\"glyph-orientation-horizontal\"],[\"glyphOrientationVertical\",\"glyph-orientation-vertical\"],[\"horizAdvX\",\"horiz-adv-x\"],[\"horizOriginX\",\"horiz-origin-x\"],[\"imageRendering\",\"image-rendering\"],[\"letterSpacing\",\"letter-spacing\"],[\"lightingColor\",\"lighting-color\"],[\"markerEnd\",\"marker-end\"],[\"markerMid\",\"marker-mid\"],[\"markerStart\",\"marker-start\"],[\"overlinePosition\",\"overline-position\"],[\"overlineThickness\",\"overline-thickness\"],[\"paintOrder\",\"paint-order\"],[\"panose-1\",\"panose-1\"],[\"pointerEvents\",\"pointer-events\"],[\"renderingIntent\",\"rendering-intent\"],[\"shapeRendering\",\"shape-rendering\"],[\"stopColor\",\"stop-color\"],[\"stopOpacity\",\"stop-opacity\"],[\"strikethroughPosition\",\"strikethrough-position\"],[\"strikethroughThickness\",\"strikethrough-thickness\"],[\"strokeDasharray\",\"stroke-dasharray\"],[\"strokeDashoffset\",\"stroke-dashoffset\"],[\"strokeLinecap\",\"stroke-linecap\"],[\"strokeLinejoin\",\"stroke-linejoin\"],[\"strokeMiterlimit\",\"stroke-miterlimit\"],[\"strokeOpacity\",\"stroke-opacity\"],[\"strokeWidth\",\"stroke-width\"],[\"textAnchor\",\"text-anchor\"],[\"textDecoration\",\"text-decoration\"],[\"textRendering\",\"text-rendering\"],[\"transformOrigin\",\"transform-origin\"],[\"underlinePosition\",\"underline-position\"],[\"underlineThickness\",\"underline-thickness\"],[\"unicodeBidi\",\"unicode-bidi\"],[\"unicodeRange\",\"unicode-range\"],[\"unitsPerEm\",\"units-per-em\"],[\"vAlphabetic\",\"v-alphabetic\"],[\"vHanging\",\"v-hanging\"],[\"vIdeographic\",\"v-ideographic\"],[\"vMathematical\",\"v-mathematical\"],[\"vectorEffect\",\"vector-effect\"],[\"vertAdvY\",\"vert-adv-y\"],[\"vertOriginX\",\"vert-origin-x\"],[\"vertOriginY\",\"vert-origin-y\"],[\"wordSpacing\",\"word-spacing\"],[\"writingMode\",\"writing-mode\"],[\"xmlnsXlink\",\"xmlns:xlink\"],[\"xHeight\",\"x-height\"]]),nh=/^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;function ng(e){return nh.test(\"\"+e)?\"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\":e}function nm(){}var nv=null;function nb(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ny=null,nx=null;function nw(e){var n=eW(e);if(n&&(e=n.stateNode)){var t=e[eD]||null;switch(e=n.stateNode,n.type){case\"input\":if(nt(e,t.value,t.defaultValue,t.defaultValue,t.checked,t.defaultChecked,t.type,t.name),n=t.name,\"radio\"===t.type&&null!=n){for(t=e;t.parentNode;)t=t.parentNode;for(t=t.querySelectorAll('input[name=\"'+nn(\"\"+n)+'\"][type=\"radio\"]'),n=0;n<t.length;n++){var r=t[n];if(r!==e&&r.form===e.form){var o=r[eD]||null;if(!o)throw Error(l(90));nt(r,o.value,o.defaultValue,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name)}}for(n=0;n<t.length;n++)(r=t[n]).form===e.form&&e8(r)}break;case\"textarea\":ni(e,t.value,t.defaultValue);break;case\"select\":null!=(n=t.value)&&na(e,!!t.multiple,n,!1)}}}var nj=!1;function nk(e,n,t){if(nj)return e(n,t);nj=!0;try{return e(n)}finally{if(nj=!1,(null!==ny||null!==nx)&&(ss(),ny&&(n=ny,e=nx,nx=ny=null,nw(n),e)))for(n=0;n<e.length;n++)nw(e[n])}}function nA(e,n){var t=e.stateNode;if(null===t)return null;var r=t[eD]||null;if(null===r)return null;switch(t=r[n],n){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":case\"onMouseEnter\":(r=!r.disabled)||(r=\"button\"!==(e=e.type)&&\"input\"!==e&&\"select\"!==e&&\"textarea\"!==e),e=!r;break;default:e=!1}if(e)return null;if(t&&\"function\"!=typeof t)throw Error(l(231,n,typeof t));return t}var nO=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,nC=!1;if(nO)try{var nS={};Object.defineProperty(nS,\"passive\",{get:function(){nC=!0}}),window.addEventListener(\"test\",nS,nS),window.removeEventListener(\"test\",nS,nS)}catch(e){nC=!1}var nE=null,n_=null,nP=null;function nz(){if(nP)return nP;var e,n,t=n_,r=t.length,o=\"value\"in nE?nE.value:nE.textContent,a=o.length;for(e=0;e<r&&t[e]===o[e];e++);var i=r-e;for(n=1;n<=i&&t[r-n]===o[a-n];n++);return nP=o.slice(e,1<n?1-n:void 0)}function nL(e){var n=e.keyCode;return\"charCode\"in e?0===(e=e.charCode)&&13===n&&(e=13):e=n,10===e&&(e=13),32<=e||13===e?e:0}function nT(){return!0}function nR(){return!1}function nN(e){function n(n,t,r,o,a){for(var i in this._reactName=n,this._targetInst=r,this.type=t,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(n=e[i],this[i]=n?n(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nT:nR,this.isPropagationStopped=nR,this}return f(n.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nT)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nT)},persist:function(){},isPersistent:nT}),n}var nD,nB,nM,nI,nH,nF={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},nU=nN(nF),nV=f({},nF,{view:0,detail:0}),nq=nN(nV),nW=f({},nV,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:n2,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return\"movementX\"in e?e.movementX:(e!==nH&&(nH&&\"mousemove\"===e.type?(nM=e.screenX-nH.screenX,nI=e.screenY-nH.screenY):nI=nM=0,nH=e),nM)},movementY:function(e){return\"movementY\"in e?e.movementY:nI}}),n$=nN(nW),nZ=nN(f({},nW,{dataTransfer:0})),nY=nN(f({},nV,{relatedTarget:0})),nX=nN(f({},nF,{animationName:0,elapsedTime:0,pseudoElement:0})),nK=nN(f({},nF,{clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}})),nQ=nN(f({},nF,{data:0})),nG={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},nJ={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},n0={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function n1(e){var n=this.nativeEvent;return n.getModifierState?n.getModifierState(e):!!(e=n0[e])&&!!n[e]}function n2(){return n1}var n4=nN(f({},nV,{key:function(e){if(e.key){var n=nG[e.key]||e.key;if(\"Unidentified\"!==n)return n}return\"keypress\"===e.type?13===(e=nL(e))?\"Enter\":String.fromCharCode(e):\"keydown\"===e.type||\"keyup\"===e.type?nJ[e.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:n2,charCode:function(e){return\"keypress\"===e.type?nL(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?nL(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}})),n5=nN(f({},nW,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),n3=nN(f({},nV,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:n2})),n6=nN(f({},nF,{propertyName:0,elapsedTime:0,pseudoElement:0})),n9=nN(f({},nW,{deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),n8=nN(f({},nF,{newState:0,oldState:0})),n7=[9,13,27,32],te=nO&&\"CompositionEvent\"in window,tn=null;nO&&\"documentMode\"in document&&(tn=document.documentMode);var tt=nO&&\"TextEvent\"in window&&!tn,tr=nO&&(!te||tn&&8<tn&&11>=tn),to=!1;function ta(e,n){switch(e){case\"keyup\":return -1!==n7.indexOf(n.keyCode);case\"keydown\":return 229!==n.keyCode;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function ti(e){return\"object\"==typeof(e=e.detail)&&\"data\"in e?e.data:null}var tl=!1,ts={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function tc(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===n?!!ts[e.type]:\"textarea\"===n}function tu(e,n,t,r){ny?nx?nx.push(r):nx=[r]:ny=r,0<(n=ce(n,\"onChange\")).length&&(t=new nU(\"onChange\",\"change\",null,t,r),e.push({event:t,listeners:n}))}var td=null,tf=null;function tp(e){s2(e,0)}function th(e){if(e8(e$(e)))return e}function tg(e,n){if(\"change\"===e)return n}var tm=!1;if(nO){if(nO){var tv=\"oninput\"in document;if(!tv){var tb=document.createElement(\"div\");tb.setAttribute(\"oninput\",\"return;\"),tv=\"function\"==typeof tb.oninput}r=tv}else r=!1;tm=r&&(!document.documentMode||9<document.documentMode)}function ty(){td&&(td.detachEvent(\"onpropertychange\",tx),tf=td=null)}function tx(e){if(\"value\"===e.propertyName&&th(tf)){var n=[];tu(n,tf,e,nb(e)),nk(tp,n)}}function tw(e,n,t){\"focusin\"===e?(ty(),td=n,tf=t,td.attachEvent(\"onpropertychange\",tx)):\"focusout\"===e&&ty()}function tj(e){if(\"selectionchange\"===e||\"keyup\"===e||\"keydown\"===e)return th(tf)}function tk(e,n){if(\"click\"===e)return th(n)}function tA(e,n){if(\"input\"===e||\"change\"===e)return th(n)}var tO=\"function\"==typeof Object.is?Object.is:function(e,n){return e===n&&(0!==e||1/e==1/n)||e!=e&&n!=n};function tC(e,n){if(tO(e,n))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof n||null===n)return!1;var t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(r=0;r<t.length;r++){var o=t[r];if(!G.call(n,o)||!tO(e[o],n[o]))return!1}return!0}function tS(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function tE(e,n){var t,r=tS(e);for(e=0;r;){if(3===r.nodeType){if(t=e+r.textContent.length,e<=n&&t>=n)return{node:r,offset:n-e};e=t}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=tS(r)}}function t_(e){e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window;for(var n=e7(e.document);n instanceof e.HTMLIFrameElement;){try{var t=\"string\"==typeof n.contentWindow.location.href}catch(e){t=!1}if(t)e=n.contentWindow;else break;n=e7(e.document)}return n}function tP(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(\"input\"===n&&(\"text\"===e.type||\"search\"===e.type||\"tel\"===e.type||\"url\"===e.type||\"password\"===e.type)||\"textarea\"===n||\"true\"===e.contentEditable)}var tz=nO&&\"documentMode\"in document&&11>=document.documentMode,tL=null,tT=null,tR=null,tN=!1;function tD(e,n,t){var r=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;tN||null==tL||tL!==e7(r)||(r=\"selectionStart\"in(r=tL)&&tP(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},tR&&tC(tR,r)||(tR=r,0<(r=ce(tT,\"onSelect\")).length&&(n=new nU(\"onSelect\",\"select\",null,n,t),e.push({event:n,listeners:r}),n.target=tL)))}function tB(e,n){var t={};return t[e.toLowerCase()]=n.toLowerCase(),t[\"Webkit\"+e]=\"webkit\"+n,t[\"Moz\"+e]=\"moz\"+n,t}var tM={animationend:tB(\"Animation\",\"AnimationEnd\"),animationiteration:tB(\"Animation\",\"AnimationIteration\"),animationstart:tB(\"Animation\",\"AnimationStart\"),transitionrun:tB(\"Transition\",\"TransitionRun\"),transitionstart:tB(\"Transition\",\"TransitionStart\"),transitioncancel:tB(\"Transition\",\"TransitionCancel\"),transitionend:tB(\"Transition\",\"TransitionEnd\")},tI={},tH={};function tF(e){if(tI[e])return tI[e];if(!tM[e])return e;var n,t=tM[e];for(n in t)if(t.hasOwnProperty(n)&&n in tH)return tI[e]=t[n];return e}nO&&(tH=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete tM.animationend.animation,delete tM.animationiteration.animation,delete tM.animationstart.animation),\"TransitionEvent\"in window||delete tM.transitionend.transition);var tU=tF(\"animationend\"),tV=tF(\"animationiteration\"),tq=tF(\"animationstart\"),tW=tF(\"transitionrun\"),t$=tF(\"transitionstart\"),tZ=tF(\"transitioncancel\"),tY=tF(\"transitionend\"),tX=new Map,tK=\"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");function tQ(e,n){tX.set(e,n),eQ(n,[e])}tK.push(\"scrollEnd\");var tG=\"function\"==typeof reportError?reportError:function(e){if(\"object\"==typeof window&&\"function\"==typeof window.ErrorEvent){var n=new window.ErrorEvent(\"error\",{bubbles:!0,cancelable:!0,message:\"object\"==typeof e&&null!==e&&\"string\"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(n))return}else if(\"object\"==typeof process&&\"function\"==typeof process.emit)return void process.emit(\"uncaughtException\",e);console.error(e)},tJ=[],t0=0,t1=0;function t2(){for(var e=t0,n=t1=t0=0;n<e;){var t=tJ[n];tJ[n++]=null;var r=tJ[n];tJ[n++]=null;var o=tJ[n];tJ[n++]=null;var a=tJ[n];if(tJ[n++]=null,null!==r&&null!==o){var i=r.pending;null===i?o.next=o:(o.next=i.next,i.next=o),r.pending=o}0!==a&&t6(t,o,a)}}function t4(e,n,t,r){tJ[t0++]=e,tJ[t0++]=n,tJ[t0++]=t,tJ[t0++]=r,t1|=r,e.lanes|=r,null!==(e=e.alternate)&&(e.lanes|=r)}function t5(e,n,t,r){return t4(e,n,t,r),t9(e)}function t3(e,n){return t4(e,null,null,n),t9(e)}function t6(e,n,t){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t);for(var o=!1,a=e.return;null!==a;)a.childLanes|=t,null!==(r=a.alternate)&&(r.childLanes|=t),22===a.tag&&(null===(e=a.stateNode)||1&e._visibility||(o=!0)),e=a,a=a.return;return 3===e.tag?(a=e.stateNode,o&&null!==n&&(o=31-eg(t),null===(r=(e=a.hiddenUpdates)[o])?e[o]=[n]:r.push(n),n.lane=0x20000000|t),a):null}function t9(e){if(50<se)throw se=0,sn=null,Error(l(185));for(var n=e.return;null!==n;)n=(e=n).return;return 3===e.tag?e.stateNode:null}var t8={};function t7(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function re(e,n,t,r){return new t7(e,n,t,r)}function rn(e){return!(!(e=e.prototype)||!e.isReactComponent)}function rt(e,n){var t=e.alternate;return null===t?((t=re(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=0x3e00000&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t.refCleanup=e.refCleanup,t}function rr(e,n){e.flags&=0x3e00002;var t=e.alternate;return null===t?(e.childLanes=0,e.lanes=n,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=t.childLanes,e.lanes=t.lanes,e.child=t.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=t.memoizedProps,e.memoizedState=t.memoizedState,e.updateQueue=t.updateQueue,e.type=t.type,e.dependencies=null===(n=t.dependencies)?null:{lanes:n.lanes,firstContext:n.firstContext}),e}function ro(e,n,t,r,o,a){var i=0;if(r=e,\"function\"==typeof e)rn(e)&&(i=1);else if(\"string\"==typeof e)i=!function(e,n,t){if(1===t||null!=n.itemProp)return!1;switch(e){case\"meta\":case\"title\":return!0;case\"style\":if(\"string\"!=typeof n.precedence||\"string\"!=typeof n.href||\"\"===n.href)break;return!0;case\"link\":if(\"string\"!=typeof n.rel||\"string\"!=typeof n.href||\"\"===n.href||n.onLoad||n.onError)break;if(\"stylesheet\"===n.rel)return e=n.disabled,\"string\"==typeof n.precedence&&null==e;return!0;case\"script\":if(n.async&&\"function\"!=typeof n.async&&\"symbol\"!=typeof n.async&&!n.onLoad&&!n.onError&&n.src&&\"string\"==typeof n.src)return!0}return!1}(e,t,H.current)?\"html\"===e||\"head\"===e||\"body\"===e?27:5:26;else e:switch(e){case C:return(e=re(31,t,n,o)).elementType=C,e.lanes=a,e;case m:return ra(t.children,o,a,n);case v:i=8,o|=24;break;case b:return(e=re(12,t,n,2|o)).elementType=b,e.lanes=a,e;case j:return(e=re(13,t,n,o)).elementType=j,e.lanes=a,e;case k:return(e=re(19,t,n,o)).elementType=k,e.lanes=a,e;default:if(\"object\"==typeof e&&null!==e)switch(e.$$typeof){case x:i=10;break e;case y:i=9;break e;case w:i=11;break e;case A:i=14;break e;case O:i=16,r=null;break e}i=29,t=Error(l(130,null===e?\"null\":typeof e,\"\")),r=null}return(n=re(i,t,n,o)).elementType=e,n.type=r,n.lanes=a,n}function ra(e,n,t,r){return(e=re(7,e,r,n)).lanes=t,e}function ri(e,n,t){return(e=re(6,e,null,n)).lanes=t,e}function rl(e){var n=re(18,null,null,0);return n.stateNode=e,n}function rs(e,n,t){return(n=re(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}var rc=new WeakMap;function ru(e,n){if(\"object\"==typeof e&&null!==e){var t=rc.get(e);return void 0!==t?t:(n={value:e,source:n,stack:Q(n)},rc.set(e,n),n)}return{value:e,source:n,stack:Q(n)}}var rd=[],rf=0,rp=null,rh=0,rg=[],rm=0,rv=null,rb=1,ry=\"\";function rx(e,n){rd[rf++]=rh,rd[rf++]=rp,rp=e,rh=n}function rw(e,n,t){rg[rm++]=rb,rg[rm++]=ry,rg[rm++]=rv,rv=e;var r=rb;e=ry;var o=32-eg(r)-1;r&=~(1<<o),t+=1;var a=32-eg(n)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,rb=1<<32-eg(n)+o|t<<o|r,ry=a+e}else rb=1<<a|t<<o|r,ry=e}function rj(e){null!==e.return&&(rx(e,1),rw(e,1,0))}function rk(e){for(;e===rp;)rp=rd[--rf],rd[rf]=null,rh=rd[--rf],rd[rf]=null;for(;e===rv;)rv=rg[--rm],rg[rm]=null,ry=rg[--rm],rg[rm]=null,rb=rg[--rm],rg[rm]=null}function rA(e,n){rg[rm++]=rb,rg[rm++]=ry,rg[rm++]=rv,rb=n.id,ry=n.overflow,rv=e}var rO=null,rC=null,rS=!1,rE=null,r_=!1,rP=Error(l(519));function rz(e){var n=Error(l(418,1<arguments.length&&void 0!==arguments[1]&&arguments[1]?\"text\":\"HTML\",\"\"));throw rB(ru(n,e)),rP}function rL(e){var n=e.stateNode,t=e.type,r=e.memoizedProps;switch(n[eN]=e,n[eD]=r,t){case\"dialog\":s4(\"cancel\",n),s4(\"close\",n);break;case\"iframe\":case\"object\":case\"embed\":s4(\"load\",n);break;case\"video\":case\"audio\":for(t=0;t<s0.length;t++)s4(s0[t],n);break;case\"source\":s4(\"error\",n);break;case\"img\":case\"image\":case\"link\":s4(\"error\",n),s4(\"load\",n);break;case\"details\":s4(\"toggle\",n);break;case\"input\":s4(\"invalid\",n),nr(n,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0);break;case\"select\":s4(\"invalid\",n);break;case\"textarea\":s4(\"invalid\",n),nl(n,r.value,r.defaultValue,r.children)}\"string\"!=typeof(t=r.children)&&\"number\"!=typeof t&&\"bigint\"!=typeof t||n.textContent===\"\"+t||!0===r.suppressHydrationWarning||ci(n.textContent,t)?(null!=r.popover&&(s4(\"beforetoggle\",n),s4(\"toggle\",n)),null!=r.onScroll&&s4(\"scroll\",n),null!=r.onScrollEnd&&s4(\"scrollend\",n),null!=r.onClick&&(n.onclick=nm),n=!0):n=!1,n||rz(e,!0)}function rT(e){for(rO=e.return;rO;)switch(rO.tag){case 5:case 31:case 13:r_=!1;return;case 27:case 3:r_=!0;return;default:rO=rO.return}}function rR(e){if(e!==rO)return!1;if(!rS)return rT(e),rS=!0,!1;var n,t=e.tag;if((n=3!==t&&27!==t)&&((n=5===t)&&(n=\"form\"===(n=e.type)||\"button\"===n||cg(e.type,e.memoizedProps)),n=!n),n&&rC&&rz(e),rT(e),13===t){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(l(317));rC=cz(e)}else if(31===t){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(l(317));rC=cz(e)}else 27===t?(t=rC,cj(e.type)?(e=cP,cP=null,rC=e):rC=t):rC=rO?c_(e.stateNode.nextSibling):null;return!0}function rN(){rC=rO=null,rS=!1}function rD(){var e=rE;return null!==e&&(null===lQ?lQ=e:lQ.push.apply(lQ,e),rE=null),e}function rB(e){null===rE?rE=[e]:rE.push(e)}var rM=B(null),rI=null,rH=null;function rF(e,n,t){I(rM,n._currentValue),n._currentValue=t}function rU(e){e._currentValue=rM.current,M(rM)}function rV(e,n,t){for(;null!==e;){var r=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,null!==r&&(r.childLanes|=n)):null!==r&&(r.childLanes&n)!==n&&(r.childLanes|=n),e===t)break;e=e.return}}function rq(e,n,t,r){var o=e.child;for(null!==o&&(o.return=e);null!==o;){var a=o.dependencies;if(null!==a){var i=o.child;a=a.firstContext;e:for(;null!==a;){var s=a;a=o;for(var c=0;c<n.length;c++)if(s.context===n[c]){a.lanes|=t,null!==(s=a.alternate)&&(s.lanes|=t),rV(a.return,t,e),r||(i=null);break e}a=s.next}}else if(18===o.tag){if(null===(i=o.return))throw Error(l(341));i.lanes|=t,null!==(a=i.alternate)&&(a.lanes|=t),rV(i,t,e),i=null}else i=o.child;if(null!==i)i.return=o;else for(i=o;null!==i;){if(i===e){i=null;break}if(null!==(o=i.sibling)){o.return=i.return,i=o;break}i=i.return}o=i}}function rW(e,n,t,r){e=null;for(var o=n,a=!1;null!==o;){if(!a){if(0!=(524288&o.flags))a=!0;else if(0!=(262144&o.flags))break}if(10===o.tag){var i=o.alternate;if(null===i)throw Error(l(387));if(null!==(i=i.memoizedProps)){var s=o.type;tO(o.pendingProps.value,i.value)||(null!==e?e.push(s):e=[s])}}else if(o===V.current){if(null===(i=o.alternate))throw Error(l(387));i.memoizedState.memoizedState!==o.memoizedState.memoizedState&&(null!==e?e.push(c6):e=[c6])}o=o.return}null!==e&&rq(n,e,t,r),n.flags|=262144}function r$(e){for(e=e.firstContext;null!==e;){if(!tO(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function rZ(e){rI=e,rH=null,null!==(e=e.dependencies)&&(e.firstContext=null)}function rY(e){return rK(rI,e)}function rX(e,n){return null===rI&&rZ(e),rK(e,n)}function rK(e,n){var t=n._currentValue;if(n={context:n,memoizedValue:t,next:null},null===rH){if(null===e)throw Error(l(308));rH=n,e.dependencies={lanes:0,firstContext:n},e.flags|=524288}else rH=rH.next=n;return t}var rQ=\"undefined\"!=typeof AbortController?AbortController:function(){var e=[],n=this.signal={aborted:!1,addEventListener:function(n,t){e.push(t)}};this.abort=function(){n.aborted=!0,e.forEach(function(e){return e()})}},rG=o.unstable_scheduleCallback,rJ=o.unstable_NormalPriority,r0={$$typeof:x,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function r1(){return{controller:new rQ,data:new Map,refCount:0}}function r2(e){e.refCount--,0===e.refCount&&rG(rJ,function(){e.controller.abort()})}var r4=null,r5=0,r3=0,r6=null;function r9(){if(0==--r5&&null!==r4){null!==r6&&(r6.status=\"fulfilled\");var e=r4;r4=null,r3=0,r6=null;for(var n=0;n<e.length;n++)(0,e[n])()}}var r8=L.S;L.S=function(e,n){\"object\"==typeof n&&null!==n&&\"function\"==typeof n.then&&function(e,n){if(null===r4){var t=r4=[];r5=0,r3=sX(),r6={status:\"pending\",value:void 0,then:function(e){t.push(e)}}}r5++,n.then(r9,r9)}(0,n),null!==r8&&r8(e,n)};var r7=B(null);function oe(){var e=r7.current;return null!==e?e:lN.pooledCache}function on(e,n){null===n?I(r7,r7.current):I(r7,n.pool)}function ot(){var e=oe();return null===e?null:{parent:r0._currentValue,pool:e}}var or=Error(l(460)),oo=Error(l(474)),oa=Error(l(542)),oi={then:function(){}};function ol(e){return\"fulfilled\"===(e=e.status)||\"rejected\"===e}function os(e,n,t){switch(void 0===(t=e[t])?e.push(n):t!==n&&(n.then(nm,nm),n=t),n.status){case\"fulfilled\":return n.value;case\"rejected\":throw od(e=n.reason),e;default:if(\"string\"==typeof n.status)n.then(nm,nm);else{if(null!==(e=lN)&&100<e.shellSuspendCounter)throw Error(l(482));(e=n).status=\"pending\",e.then(function(e){if(\"pending\"===n.status){var t=n;t.status=\"fulfilled\",t.value=e}},function(e){if(\"pending\"===n.status){var t=n;t.status=\"rejected\",t.reason=e}})}switch(n.status){case\"fulfilled\":return n.value;case\"rejected\":throw od(e=n.reason),e}throw oc=n,or}}var oc=null;function ou(){if(null===oc)throw Error(l(459));var e=oc;return oc=null,e}function od(e){if(e===or||e===oa)throw Error(l(483))}var of=null,op=0;function oh(e){var n=op;return op+=1,null===of&&(of=[]),os(of,e,n)}function og(e,n){e.ref=void 0!==(n=n.props.ref)?n:null}function om(e,n){if(n.$$typeof===p)throw Error(l(525));throw Error(l(31,\"[object Object]\"===(e=Object.prototype.toString.call(n))?\"object with keys {\"+Object.keys(n).join(\", \")+\"}\":e))}function ov(e){return(0,e._init)(e._payload)}function ob(e){function n(n,t){if(e){var r=n.deletions;null===r?(n.deletions=[t],n.flags|=16):r.push(t)}}function t(t,r){if(!e)return null;for(;null!==r;)n(t,r),r=r.sibling;return null}function r(e){for(var n=new Map;null!==e;)null!==e.key?n.set(e.key,e):n.set(e.index,e),e=e.sibling;return n}function o(e,n){return(e=rt(e,n)).index=0,e.sibling=null,e}function a(n,t,r){return(n.index=r,e)?null!==(r=n.alternate)?(r=r.index)<t?(n.flags|=0x4000002,t):r:(n.flags|=0x4000002,t):(n.flags|=1048576,t)}function i(n){return e&&null===n.alternate&&(n.flags|=0x4000002),n}function s(e,n,t,r){return null===n||6!==n.tag?(n=ri(t,e.mode,r)).return=e:(n=o(n,t)).return=e,n}function c(e,n,t,r){var a=t.type;return a===m?d(e,n,t.props.children,r,t.key):(null!==n&&(n.elementType===a||\"object\"==typeof a&&null!==a&&a.$$typeof===O&&ov(a)===n.type)?og(n=o(n,t.props),t):og(n=ro(t.type,t.key,t.props,null,e.mode,r),t),n.return=e,n)}function u(e,n,t,r){return null===n||4!==n.tag||n.stateNode.containerInfo!==t.containerInfo||n.stateNode.implementation!==t.implementation?(n=rs(t,e.mode,r)).return=e:(n=o(n,t.children||[])).return=e,n}function d(e,n,t,r,a){return null===n||7!==n.tag?(n=ra(t,e.mode,r,a)).return=e:(n=o(n,t)).return=e,n}function f(e,n,t){if(\"string\"==typeof n&&\"\"!==n||\"number\"==typeof n||\"bigint\"==typeof n)return(n=ri(\"\"+n,e.mode,t)).return=e,n;if(\"object\"==typeof n&&null!==n){switch(n.$$typeof){case h:return og(t=ro(n.type,n.key,n.props,null,e.mode,t),n),t.return=e,t;case g:return(n=rs(n,e.mode,t)).return=e,n;case O:return f(e,n=(0,n._init)(n._payload),t)}if(z(n)||_(n))return(n=ra(n,e.mode,t,null)).return=e,n;if(\"function\"==typeof n.then)return f(e,oh(n),t);if(n.$$typeof===x)return f(e,rX(e,n),t);om(e,n)}return null}function p(e,n,t,r){var o=null!==n?n.key:null;if(\"string\"==typeof t&&\"\"!==t||\"number\"==typeof t||\"bigint\"==typeof t)return null!==o?null:s(e,n,\"\"+t,r);if(\"object\"==typeof t&&null!==t){switch(t.$$typeof){case h:return t.key===o?c(e,n,t,r):null;case g:return t.key===o?u(e,n,t,r):null;case O:return p(e,n,t=(o=t._init)(t._payload),r)}if(z(t)||_(t))return null!==o?null:d(e,n,t,r,null);if(\"function\"==typeof t.then)return p(e,n,oh(t),r);if(t.$$typeof===x)return p(e,n,rX(e,t),r);om(e,t)}return null}function v(e,n,t,r,o){if(\"string\"==typeof r&&\"\"!==r||\"number\"==typeof r||\"bigint\"==typeof r)return s(n,e=e.get(t)||null,\"\"+r,o);if(\"object\"==typeof r&&null!==r){switch(r.$$typeof){case h:return c(n,e=e.get(null===r.key?t:r.key)||null,r,o);case g:return u(n,e=e.get(null===r.key?t:r.key)||null,r,o);case O:return v(e,n,t,r=(0,r._init)(r._payload),o)}if(z(r)||_(r))return d(n,e=e.get(t)||null,r,o,null);if(\"function\"==typeof r.then)return v(e,n,t,oh(r),o);if(r.$$typeof===x)return v(e,n,t,rX(n,r),o);om(n,r)}return null}return function(s,c,u,d){try{op=0;var b=function s(c,u,d,b){if(\"object\"==typeof d&&null!==d&&d.type===m&&null===d.key&&(d=d.props.children),\"object\"==typeof d&&null!==d){switch(d.$$typeof){case h:e:{for(var y=d.key;null!==u;){if(u.key===y){if((y=d.type)===m){if(7===u.tag){t(c,u.sibling),(b=o(u,d.props.children)).return=c,c=b;break e}}else if(u.elementType===y||\"object\"==typeof y&&null!==y&&y.$$typeof===O&&ov(y)===u.type){t(c,u.sibling),og(b=o(u,d.props),d),b.return=c,c=b;break e}t(c,u);break}n(c,u),u=u.sibling}d.type===m?(b=ra(d.props.children,c.mode,b,d.key)).return=c:(og(b=ro(d.type,d.key,d.props,null,c.mode,b),d),b.return=c),c=b}return i(c);case g:e:{for(y=d.key;null!==u;){if(u.key===y)if(4===u.tag&&u.stateNode.containerInfo===d.containerInfo&&u.stateNode.implementation===d.implementation){t(c,u.sibling),(b=o(u,d.children||[])).return=c,c=b;break e}else{t(c,u);break}n(c,u),u=u.sibling}(b=rs(d,c.mode,b)).return=c,c=b}return i(c);case O:return s(c,u,d=(y=d._init)(d._payload),b)}if(z(d))return function(o,i,l,s){for(var c=null,u=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var m=p(o,d,l[h],s);if(null===m){null===d&&(d=g);break}e&&d&&null===m.alternate&&n(o,d),i=a(m,i,h),null===u?c=m:u.sibling=m,u=m,d=g}if(h===l.length)return t(o,d),rS&&rx(o,h),c;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===u?c=d:u.sibling=d,u=d);return rS&&rx(o,h),c}for(d=r(d);h<l.length;h++)null!==(g=v(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach(function(e){return n(o,e)}),rS&&rx(o,h),c}(c,u,d,b);if(_(d)){if(\"function\"!=typeof(y=_(d)))throw Error(l(150));return function(o,i,s,c){if(null==s)throw Error(l(151));for(var u=null,d=null,h=i,g=i=0,m=null,b=s.next();null!==h&&!b.done;g++,b=s.next()){h.index>g?(m=h,h=null):m=h.sibling;var y=p(o,h,b.value,c);if(null===y){null===h&&(h=m);break}e&&h&&null===y.alternate&&n(o,h),i=a(y,i,g),null===d?u=y:d.sibling=y,d=y,h=m}if(b.done)return t(o,h),rS&&rx(o,g),u;if(null===h){for(;!b.done;g++,b=s.next())null!==(b=f(o,b.value,c))&&(i=a(b,i,g),null===d?u=b:d.sibling=b,d=b);return rS&&rx(o,g),u}for(h=r(h);!b.done;g++,b=s.next())null!==(b=v(h,o,g,b.value,c))&&(e&&null!==b.alternate&&h.delete(null===b.key?g:b.key),i=a(b,i,g),null===d?u=b:d.sibling=b,d=b);return e&&h.forEach(function(e){return n(o,e)}),rS&&rx(o,g),u}(c,u,d=y.call(d),b)}if(\"function\"==typeof d.then)return s(c,u,oh(d),b);if(d.$$typeof===x)return s(c,u,rX(c,d),b);om(c,d)}return\"string\"==typeof d&&\"\"!==d||\"number\"==typeof d||\"bigint\"==typeof d?(d=\"\"+d,null!==u&&6===u.tag?(t(c,u.sibling),(b=o(u,d)).return=c):(t(c,u),(b=ri(d,c.mode,b)).return=c),i(c=b)):t(c,u)}(s,c,u,d);return of=null,b}catch(e){if(e===or||e===oa)throw e;var y=re(29,e,null,s.mode);return y.lanes=d,y.return=s,y}finally{}}}var oy=ob(!0),ox=ob(!1),ow=!1;function oj(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function ok(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function oA(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function oO(e,n,t){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&lR)){var o=r.pending;return null===o?n.next=n:(n.next=o.next,o.next=n),r.pending=n,n=t9(e),t6(e,null,t),n}return t4(e,r,n,t),t9(e)}function oC(e,n,t){if(null!==(n=n.updateQueue)&&(n=n.shared,0!=(4194048&t))){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,eE(e,t)}}function oS(e,n){var t=e.updateQueue,r=e.alternate;if(null!==r&&t===(r=r.updateQueue)){var o=null,a=null;if(null!==(t=t.firstBaseUpdate)){do{var i={lane:t.lane,tag:t.tag,payload:t.payload,callback:null,next:null};null===a?o=a=i:a=a.next=i,t=t.next}while(null!==t);null===a?o=a=n:a=a.next=n}else o=a=n;t={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=t;return}null===(e=t.lastBaseUpdate)?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}var oE=!1;function o_(){if(oE){var e=r6;if(null!==e)throw e}}function oP(e,n,t,r){oE=!1;var o=e.updateQueue;ow=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var s=l,c=s.next;s.next=null,null===i?a=c:i.next=c,i=s;var u=e.alternate;null!==u&&(l=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===l?u.firstBaseUpdate=c:l.next=c,u.lastBaseUpdate=s)}if(null!==a){var d=o.baseState;for(i=0,u=c=s=null,l=a;;){var p=-0x20000001&l.lane,h=p!==l.lane;if(h?(lB&p)===p:(r&p)===p){0!==p&&p===r3&&(oE=!0),null!==u&&(u=u.next={lane:0,tag:l.tag,payload:l.payload,callback:null,next:null});e:{var g=e,m=l;switch(p=n,m.tag){case 1:if(\"function\"==typeof(g=m.payload)){d=g.call(t,d,p);break e}d=g;break e;case 3:g.flags=-65537&g.flags|128;case 0:if(null==(p=\"function\"==typeof(g=m.payload)?g.call(t,d,p):g))break e;d=f({},d,p);break e;case 2:ow=!0}}null!==(p=l.callback)&&(e.flags|=64,h&&(e.flags|=8192),null===(h=o.callbacks)?o.callbacks=[p]:h.push(p))}else h={lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},null===u?(c=u=h,s=d):u=u.next=h,i|=p;if(null===(l=l.next))if(null===(l=o.shared.pending))break;else l=(h=l).next,h.next=null,o.lastBaseUpdate=h,o.shared.pending=null}null===u&&(s=d),o.baseState=s,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null===a&&(o.shared.lanes=0),lW|=i,e.lanes=i,e.memoizedState=d}}function oz(e,n){if(\"function\"!=typeof e)throw Error(l(191,e));e.call(n)}function oL(e,n){var t=e.callbacks;if(null!==t)for(e.callbacks=null,e=0;e<t.length;e++)oz(t[e],n)}var oT=B(null),oR=B(0);function oN(e,n){I(oR,e=lV),I(oT,n),lV=e|n.baseLanes}function oD(){I(oR,lV),I(oT,oT.current)}function oB(){lV=oR.current,M(oT),M(oR)}var oM=B(null),oI=null;function oH(e){var n=e.alternate;I(oW,1&oW.current),I(oM,e),null===oI&&(null===n||null!==oT.current?oI=e:null!==n.memoizedState&&(oI=e))}function oF(e){I(oW,oW.current),I(oM,e),null===oI&&(oI=e)}function oU(e){22===e.tag?(I(oW,oW.current),I(oM,e),null===oI&&(oI=e)):oV(e)}function oV(){I(oW,oW.current),I(oM,oM.current)}function oq(e){M(oM),oI===e&&(oI=null),M(oW)}var oW=B(0);function o$(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===(t=t.dehydrated)||cS(t)||cE(t)))return n}else if(19===n.tag&&(\"forwards\"===n.memoizedProps.revealOrder||\"backwards\"===n.memoizedProps.revealOrder||\"unstable_legacy-backwards\"===n.memoizedProps.revealOrder||\"together\"===n.memoizedProps.revealOrder)){if(0!=(128&n.flags))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var oZ=0,oY=null,oX=null,oK=null,oQ=!1,oG=!1,oJ=!1,o0=0,o1=0,o2=null,o4=0;function o5(){throw Error(l(321))}function o3(e,n){if(null===n)return!1;for(var t=0;t<n.length&&t<e.length;t++)if(!tO(e[t],n[t]))return!1;return!0}function o6(e,n,t,r,o,a){return oZ=a,oY=n,n.memoizedState=null,n.updateQueue=null,n.lanes=0,L.H=null===e||null===e.memoizedState?it:ir,oJ=!1,a=t(r,o),oJ=!1,oG&&(a=o8(n,t,r,o)),o9(e),a}function o9(e){L.H=ie;var n=null!==oX&&null!==oX.next;if(oZ=0,oK=oX=oY=null,oQ=!1,o1=0,o2=null,n)throw Error(l(300));null===e||ix||null!==(e=e.dependencies)&&r$(e)&&(ix=!0)}function o8(e,n,t,r){oY=e;var o=0;do{if(oG&&(o2=null),o1=0,oG=!1,25<=o)throw Error(l(301));if(o+=1,oK=oX=null,null!=e.updateQueue){var a=e.updateQueue;a.lastEffect=null,a.events=null,a.stores=null,null!=a.memoCache&&(a.memoCache.index=0)}L.H=io,a=n(t,r)}while(oG);return a}function o7(){var e=L.H,n=e.useState()[0];return n=\"function\"==typeof n.then?ai(n):n,e=e.useState()[0],(null!==oX?oX.memoizedState:null)!==e&&(oY.flags|=1024),n}function ae(){var e=0!==o0;return o0=0,e}function an(e,n,t){n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~t}function at(e){if(oQ){for(e=e.memoizedState;null!==e;){var n=e.queue;null!==n&&(n.pending=null),e=e.next}oQ=!1}oZ=0,oK=oX=oY=null,oG=!1,o1=o0=0,o2=null}function ar(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===oK?oY.memoizedState=oK=e:oK=oK.next=e,oK}function ao(){if(null===oX){var e=oY.alternate;e=null!==e?e.memoizedState:null}else e=oX.next;var n=null===oK?oY.memoizedState:oK.next;if(null!==n)oK=n,oX=e;else{if(null===e){if(null===oY.alternate)throw Error(l(467));throw Error(l(310))}e={memoizedState:(oX=e).memoizedState,baseState:oX.baseState,baseQueue:oX.baseQueue,queue:oX.queue,next:null},null===oK?oY.memoizedState=oK=e:oK=oK.next=e}return oK}function aa(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function ai(e){var n=o1;return o1+=1,null===o2&&(o2=[]),e=os(o2,e,n),n=oY,null===(null===oK?n.memoizedState:oK.next)&&(L.H=null===(n=n.alternate)||null===n.memoizedState?it:ir),e}function al(e){if(null!==e&&\"object\"==typeof e){if(\"function\"==typeof e.then)return ai(e);if(e.$$typeof===x)return rY(e)}throw Error(l(438,String(e)))}function as(e){var n=null,t=oY.updateQueue;if(null!==t&&(n=t.memoCache),null==n){var r=oY.alternate;null!==r&&null!==(r=r.updateQueue)&&null!=(r=r.memoCache)&&(n={data:r.data.map(function(e){return e.slice()}),index:0})}if(null==n&&(n={data:[],index:0}),null===t&&(t=aa(),oY.updateQueue=t),t.memoCache=n,void 0===(t=n.data[n.index]))for(t=n.data[n.index]=Array(e),r=0;r<e;r++)t[r]=S;return n.index++,t}function ac(e,n){return\"function\"==typeof n?n(e):n}function au(e){return ad(ao(),oX,e)}function ad(e,n,t){var r=e.queue;if(null===r)throw Error(l(311));r.lastRenderedReducer=t;var o=e.baseQueue,a=r.pending;if(null!==a){if(null!==o){var i=o.next;o.next=a.next,a.next=i}n.baseQueue=o=a,r.pending=null}if(a=e.baseState,null===o)e.memoizedState=a;else{n=o.next;var s=i=null,c=null,u=n,d=!1;do{var f=-0x20000001&u.lane;if(f!==u.lane?(lB&f)===f:(oZ&f)===f){var p=u.revertLane;if(0===p)null!==c&&(c=c.next={lane:0,revertLane:0,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===r3&&(d=!0);else if((oZ&p)===p){u=u.next,p===r3&&(d=!0);continue}else f={lane:0,revertLane:u.revertLane,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=f,i=a):c=c.next=f,oY.lanes|=p,lW|=p;f=u.action,oJ&&t(a,f),a=u.hasEagerState?u.eagerState:t(a,f)}else p={lane:f,revertLane:u.revertLane,gesture:u.gesture,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=p,i=a):c=c.next=p,oY.lanes|=f,lW|=f;u=u.next}while(null!==u&&u!==n);if(null===c?i=a:c.next=s,!tO(a,e.memoizedState)&&(ix=!0,d&&null!==(t=r6)))throw t;e.memoizedState=a,e.baseState=i,e.baseQueue=c,r.lastRenderedState=a}return null===o&&(r.lanes=0),[e.memoizedState,r.dispatch]}function af(e){var n=ao(),t=n.queue;if(null===t)throw Error(l(311));t.lastRenderedReducer=e;var r=t.dispatch,o=t.pending,a=n.memoizedState;if(null!==o){t.pending=null;var i=o=o.next;do a=e(a,i.action),i=i.next;while(i!==o);tO(a,n.memoizedState)||(ix=!0),n.memoizedState=a,null===n.baseQueue&&(n.baseState=a),t.lastRenderedState=a}return[a,r]}function ap(e,n,t){var r=oY,o=ao(),a=rS;if(a){if(void 0===t)throw Error(l(407));t=t()}else t=n();var i=!tO((oX||o).memoizedState,t);if(i&&(o.memoizedState=t,ix=!0),o=o.queue,aM(am.bind(null,r,o,e),[e]),o.getSnapshot!==n||i||null!==oK&&1&oK.memoizedState.tag){if(r.flags|=2048,aT(9,{destroy:void 0},ag.bind(null,r,o,t,n),null),null===lN)throw Error(l(349));a||0!=(124&oZ)||ah(r,n,t)}return t}function ah(e,n,t){e.flags|=16384,e={getSnapshot:n,value:t},null===(n=oY.updateQueue)?(n=aa(),oY.updateQueue=n,n.stores=[e]):null===(t=n.stores)?n.stores=[e]:t.push(e)}function ag(e,n,t,r){n.value=t,n.getSnapshot=r,av(n)&&ab(e)}function am(e,n,t){return t(function(){av(n)&&ab(e)})}function av(e){var n=e.getSnapshot;e=e.value;try{var t=n();return!tO(e,t)}catch(e){return!0}}function ab(e){var n=t3(e,2);null!==n&&so(n,e,2)}function ay(e){var n=ar();if(\"function\"==typeof e){var t=e;if(e=t(),oJ){eh(!0);try{t()}finally{eh(!1)}}}return n.memoizedState=n.baseState=e,n.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:e},n}function ax(e,n,t,r){return e.baseState=t,ad(e,oX,\"function\"==typeof r?r:ac)}function aw(e,n,t,r,o){if(a9(e))throw Error(l(485));if(null!==(e=n.action)){var a={payload:o,action:e,next:null,isTransition:!0,status:\"pending\",value:null,reason:null,listeners:[],then:function(e){a.listeners.push(e)}};null!==L.T?t(!0):a.isTransition=!1,r(a),null===(t=n.pending)?(a.next=n.pending=a,aj(n,a)):(a.next=t.next,n.pending=t.next=a)}}function aj(e,n){var t=n.action,r=n.payload,o=e.state;if(n.isTransition){var a=L.T,i={};L.T=i;try{var l=t(o,r),s=L.S;null!==s&&s(i,l),ak(e,n,l)}catch(t){aO(e,n,t)}finally{null!==a&&null!==i.types&&(a.types=i.types),L.T=a}}else try{a=t(o,r),ak(e,n,a)}catch(t){aO(e,n,t)}}function ak(e,n,t){null!==t&&\"object\"==typeof t&&\"function\"==typeof t.then?t.then(function(t){aA(e,n,t)},function(t){return aO(e,n,t)}):aA(e,n,t)}function aA(e,n,t){n.status=\"fulfilled\",n.value=t,aC(n),e.state=t,null!==(n=e.pending)&&((t=n.next)===n?e.pending=null:(t=t.next,n.next=t,aj(e,t)))}function aO(e,n,t){var r=e.pending;if(e.pending=null,null!==r){r=r.next;do n.status=\"rejected\",n.reason=t,aC(n),n=n.next;while(n!==r)}e.action=null}function aC(e){e=e.listeners;for(var n=0;n<e.length;n++)(0,e[n])()}function aS(e,n){return n}function aE(e,n){if(rS){var t=lN.formState;if(null!==t){e:{var r=oY;if(rS){if(rC){n:{for(var o=rC,a=r_;8!==o.nodeType;)if(!a||null===(o=c_(o.nextSibling))){o=null;break n}o=\"F!\"===(a=o.data)||\"F\"===a?o:null}if(o){rC=c_(o.nextSibling),r=\"F!\"===o.data;break e}}rz(r)}r=!1}r&&(n=t[0])}}return(t=ar()).memoizedState=t.baseState=n,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:aS,lastRenderedState:n},t.queue=r,t=a5.bind(null,oY,r),r.dispatch=t,r=ay(!1),a=a6.bind(null,oY,!1,r.queue),r=ar(),o={state:n,dispatch:null,action:e,pending:null},r.queue=o,t=aw.bind(null,oY,o,a,t),o.dispatch=t,r.memoizedState=e,[n,t,!1]}function a_(e){return aP(ao(),oX,e)}function aP(e,n,t){if(n=ad(e,n,aS)[0],e=au(ac)[0],\"object\"==typeof n&&null!==n&&\"function\"==typeof n.then)try{var r=ai(n)}catch(e){if(e===or)throw oa;throw e}else r=n;var o=(n=ao()).queue,a=o.dispatch;return t!==n.memoizedState&&(oY.flags|=2048,aT(9,{destroy:void 0},az.bind(null,o,t),null)),[r,a,e]}function az(e,n){e.action=n}function aL(e){var n=ao(),t=oX;if(null!==t)return aP(n,t,e);ao(),n=n.memoizedState;var r=(t=ao()).queue.dispatch;return t.memoizedState=e,[n,r,!1]}function aT(e,n,t,r){return e={tag:e,create:t,deps:r,inst:n,next:null},null===(n=oY.updateQueue)&&(n=aa(),oY.updateQueue=n),null===(t=n.lastEffect)?n.lastEffect=e.next=e:(r=t.next,t.next=e,e.next=r,n.lastEffect=e),e}function aR(){return ao().memoizedState}function aN(e,n,t,r){var o=ar();oY.flags|=e,o.memoizedState=aT(1|n,{destroy:void 0},t,void 0===r?null:r)}function aD(e,n,t,r){var o=ao();r=void 0===r?null:r;var a=o.memoizedState.inst;null!==oX&&null!==r&&o3(r,oX.memoizedState.deps)?o.memoizedState=aT(n,a,t,r):(oY.flags|=e,o.memoizedState=aT(1|n,a,t,r))}function aB(e,n){aN(8390656,8,e,n)}function aM(e,n){aD(2048,8,e,n)}function aI(e,n){return aD(4,2,e,n)}function aH(e,n){return aD(4,4,e,n)}function aF(e,n){if(\"function\"==typeof n){var t=n(e=e());return function(){\"function\"==typeof t?t():n(null)}}if(null!=n)return n.current=e=e(),function(){n.current=null}}function aU(e,n,t){t=null!=t?t.concat([e]):null,aD(4,4,aF.bind(null,n,e),t)}function aV(){}function aq(e,n){var t=ao();n=void 0===n?null:n;var r=t.memoizedState;return null!==n&&o3(n,r[1])?r[0]:(t.memoizedState=[e,n],e)}function aW(e,n){var t=ao();n=void 0===n?null:n;var r=t.memoizedState;if(null!==n&&o3(n,r[1]))return r[0];if(r=e(),oJ){eh(!0);try{e()}finally{eh(!1)}}return t.memoizedState=[r,n],r}function a$(e,n,t){return void 0===t||0!=(0x40000000&oZ)?e.memoizedState=n:(e.memoizedState=t,e=sr(),oY.lanes|=e,lW|=e,t)}function aZ(e,n,t,r){return tO(t,n)?t:null!==oT.current?(tO(e=a$(e,t,r),n)||(ix=!0),e):0==(42&oZ)||0!=(0x40000000&oZ)?(ix=!0,e.memoizedState=t):(e=sr(),oY.lanes|=e,lW|=e,n)}function aY(e,n,t,r,o){var a=T.p;T.p=0!==a&&8>a?a:8;var i=L.T,l={};L.T=l,a6(e,!1,n,t);try{var s=o(),c=L.S;if(null!==c&&c(l,s),null!==s&&\"object\"==typeof s&&\"function\"==typeof s.then){var u,d,f=(u=[],d={status:\"pending\",value:null,reason:null,then:function(e){u.push(e)}},s.then(function(){d.status=\"fulfilled\",d.value=r;for(var e=0;e<u.length;e++)(0,u[e])(r)},function(e){for(d.status=\"rejected\",d.reason=e,e=0;e<u.length;e++)(0,u[e])(void 0)}),d);a3(e,n,f,st(e))}else a3(e,n,r,st(e))}catch(t){a3(e,n,{then:function(){},status:\"rejected\",reason:t},st())}finally{T.p=a,null!==i&&null!==l.types&&(i.types=l.types),L.T=i}}function aX(){}function aK(e,n,t,r){if(5!==e.tag)throw Error(l(476));var o=aQ(e).queue;aY(e,o,n,R,null===t?aX:function(){return aG(e),t(r)})}function aQ(e){var n=e.memoizedState;if(null!==n)return n;var t={};return(n={memoizedState:R,baseState:R,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:R},next:null}).next={memoizedState:t,baseState:t,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:t},next:null},e.memoizedState=n,null!==(e=e.alternate)&&(e.memoizedState=n),n}function aG(e){var n=aQ(e);null===n.next&&(n=e.alternate.memoizedState),a3(e,n.next.queue,{},st())}function aJ(){return rY(c6)}function a0(){return ao().memoizedState}function a1(){return ao().memoizedState}function a2(e){for(var n=e.return;null!==n;){switch(n.tag){case 24:case 3:var t=st(),r=oO(n,e=oA(t),t);null!==r&&(so(r,n,t),oC(r,n,t)),n={cache:r1()},e.payload=n;return}n=n.return}}function a4(e,n,t){var r=st();t={lane:r,revertLane:0,gesture:null,action:t,hasEagerState:!1,eagerState:null,next:null},a9(e)?a8(n,t):null!==(t=t5(e,n,t,r))&&(so(t,e,r),a7(t,n,r))}function a5(e,n,t){a3(e,n,t,st())}function a3(e,n,t,r){var o={lane:r,revertLane:0,gesture:null,action:t,hasEagerState:!1,eagerState:null,next:null};if(a9(e))a8(n,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=n.lastRenderedReducer))try{var i=n.lastRenderedState,l=a(i,t);if(o.hasEagerState=!0,o.eagerState=l,tO(l,i))return t4(e,n,o,0),null===lN&&t2(),!1}catch(e){}finally{}if(null!==(t=t5(e,n,o,r)))return so(t,e,r),a7(t,n,r),!0}return!1}function a6(e,n,t,r){if(r={lane:2,revertLane:sX(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},a9(e)){if(n)throw Error(l(479))}else null!==(n=t5(e,t,r,2))&&so(n,e,2)}function a9(e){var n=e.alternate;return e===oY||null!==n&&n===oY}function a8(e,n){oG=oQ=!0;var t=e.pending;null===t?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function a7(e,n,t){if(0!=(4194048&t)){var r=n.lanes;r&=e.pendingLanes,n.lanes=t|=r,eE(e,t)}}var ie={readContext:rY,use:al,useCallback:o5,useContext:o5,useEffect:o5,useImperativeHandle:o5,useLayoutEffect:o5,useInsertionEffect:o5,useMemo:o5,useReducer:o5,useRef:o5,useState:o5,useDebugValue:o5,useDeferredValue:o5,useTransition:o5,useSyncExternalStore:o5,useId:o5,useHostTransitionStatus:o5,useFormState:o5,useActionState:o5,useOptimistic:o5,useMemoCache:o5,useCacheRefresh:o5},it={readContext:rY,use:al,useCallback:function(e,n){return ar().memoizedState=[e,void 0===n?null:n],e},useContext:rY,useEffect:aB,useImperativeHandle:function(e,n,t){t=null!=t?t.concat([e]):null,aN(4194308,4,aF.bind(null,n,e),t)},useLayoutEffect:function(e,n){return aN(4194308,4,e,n)},useInsertionEffect:function(e,n){aN(4,2,e,n)},useMemo:function(e,n){var t=ar();n=void 0===n?null:n;var r=e();if(oJ){eh(!0);try{e()}finally{eh(!1)}}return t.memoizedState=[r,n],r},useReducer:function(e,n,t){var r=ar();if(void 0!==t){var o=t(n);if(oJ){eh(!0);try{t(n)}finally{eh(!1)}}}else o=n;return r.memoizedState=r.baseState=o,r.queue=e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},e=e.dispatch=a4.bind(null,oY,e),[r.memoizedState,e]},useRef:function(e){return ar().memoizedState=e={current:e}},useState:function(e){var n=(e=ay(e)).queue,t=a5.bind(null,oY,n);return n.dispatch=t,[e.memoizedState,t]},useDebugValue:aV,useDeferredValue:function(e,n){return a$(ar(),e,n)},useTransition:function(){var e=ay(!1);return e=aY.bind(null,oY,e.queue,!0,!1),ar().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,n,t){var r=oY,o=ar();if(rS){if(void 0===t)throw Error(l(407));t=t()}else{if(t=n(),null===lN)throw Error(l(349));0!=(124&lB)||ah(r,n,t)}o.memoizedState=t;var a={value:t,getSnapshot:n};return o.queue=a,aB(am.bind(null,r,a,e),[e]),r.flags|=2048,aT(9,{destroy:void 0},ag.bind(null,r,a,t,n),null),t},useId:function(){var e=ar(),n=lN.identifierPrefix;if(rS){var t=ry,r=rb;n=\"_\"+n+\"R_\"+(t=(r&~(1<<32-eg(r)-1)).toString(32)+t),0<(t=o0++)&&(n+=\"H\"+t.toString(32)),n+=\"_\"}else n=\"_\"+n+\"r_\"+(t=o4++).toString(32)+\"_\";return e.memoizedState=n},useHostTransitionStatus:aJ,useFormState:aE,useActionState:aE,useOptimistic:function(e){var n=ar();n.memoizedState=n.baseState=e;var t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return n.queue=t,n=a6.bind(null,oY,!0,t),t.dispatch=n,[e,n]},useMemoCache:as,useCacheRefresh:function(){return ar().memoizedState=a2.bind(null,oY)}},ir={readContext:rY,use:al,useCallback:aq,useContext:rY,useEffect:aM,useImperativeHandle:aU,useInsertionEffect:aI,useLayoutEffect:aH,useMemo:aW,useReducer:au,useRef:aR,useState:function(){return au(ac)},useDebugValue:aV,useDeferredValue:function(e,n){return aZ(ao(),oX.memoizedState,e,n)},useTransition:function(){var e=au(ac)[0],n=ao().memoizedState;return[\"boolean\"==typeof e?e:ai(e),n]},useSyncExternalStore:ap,useId:a0,useHostTransitionStatus:aJ,useFormState:a_,useActionState:a_,useOptimistic:function(e,n){return ax(ao(),oX,e,n)},useMemoCache:as,useCacheRefresh:a1},io={readContext:rY,use:al,useCallback:aq,useContext:rY,useEffect:aM,useImperativeHandle:aU,useInsertionEffect:aI,useLayoutEffect:aH,useMemo:aW,useReducer:af,useRef:aR,useState:function(){return af(ac)},useDebugValue:aV,useDeferredValue:function(e,n){var t=ao();return null===oX?a$(t,e,n):aZ(t,oX.memoizedState,e,n)},useTransition:function(){var e=af(ac)[0],n=ao().memoizedState;return[\"boolean\"==typeof e?e:ai(e),n]},useSyncExternalStore:ap,useId:a0,useHostTransitionStatus:aJ,useFormState:aL,useActionState:aL,useOptimistic:function(e,n){var t=ao();return null!==oX?ax(t,oX,e,n):(t.baseState=e,[e,t.queue.dispatch])},useMemoCache:as,useCacheRefresh:a1};function ia(e,n,t,r){t=null==(t=t(r,n=e.memoizedState))?n:f({},n,t),e.memoizedState=t,0===e.lanes&&(e.updateQueue.baseState=t)}var ii={enqueueSetState:function(e,n,t){e=e._reactInternals;var r=st(),o=oA(r);o.payload=n,null!=t&&(o.callback=t),null!==(n=oO(e,o,r))&&(so(n,e,r),oC(n,e,r))},enqueueReplaceState:function(e,n,t){e=e._reactInternals;var r=st(),o=oA(r);o.tag=1,o.payload=n,null!=t&&(o.callback=t),null!==(n=oO(e,o,r))&&(so(n,e,r),oC(n,e,r))},enqueueForceUpdate:function(e,n){e=e._reactInternals;var t=st(),r=oA(t);r.tag=2,null!=n&&(r.callback=n),null!==(n=oO(e,r,t))&&(so(n,e,t),oC(n,e,t))}};function il(e,n,t,r,o,a,i){return\"function\"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!n.prototype||!n.prototype.isPureReactComponent||!tC(t,r)||!tC(o,a)}function is(e,n,t,r){e=n.state,\"function\"==typeof n.componentWillReceiveProps&&n.componentWillReceiveProps(t,r),\"function\"==typeof n.UNSAFE_componentWillReceiveProps&&n.UNSAFE_componentWillReceiveProps(t,r),n.state!==e&&ii.enqueueReplaceState(n,n.state,null)}function ic(e,n){var t=n;if(\"ref\"in n)for(var r in t={},n)\"ref\"!==r&&(t[r]=n[r]);if(e=e.defaultProps)for(var o in t===n&&(t=f({},t)),e)void 0===t[o]&&(t[o]=e[o]);return t}function iu(e){tG(e)}function id(e){console.error(e)}function ip(e){tG(e)}function ih(e,n){try{(0,e.onUncaughtError)(n.value,{componentStack:n.stack})}catch(e){setTimeout(function(){throw e})}}function ig(e,n,t){try{(0,e.onCaughtError)(t.value,{componentStack:t.stack,errorBoundary:1===n.tag?n.stateNode:null})}catch(e){setTimeout(function(){throw e})}}function im(e,n,t){return(t=oA(t)).tag=3,t.payload={element:null},t.callback=function(){ih(e,n)},t}function iv(e){return(e=oA(e)).tag=3,e}function ib(e,n,t,r){var o=t.type.getDerivedStateFromError;if(\"function\"==typeof o){var a=r.value;e.payload=function(){return o(a)},e.callback=function(){ig(n,t,r)}}var i=t.stateNode;null!==i&&\"function\"==typeof i.componentDidCatch&&(e.callback=function(){ig(n,t,r),\"function\"!=typeof o&&(null===l2?l2=new Set([this]):l2.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:null!==e?e:\"\"})})}var iy=Error(l(461)),ix=!1;function iw(e,n,t,r){n.child=null===e?ox(n,null,t,r):oy(n,e.child,t,r)}function ij(e,n,t,r,o){t=t.render;var a=n.ref;if(\"ref\"in r){var i={};for(var l in r)\"ref\"!==l&&(i[l]=r[l])}else i=r;return(rZ(n),r=o6(e,n,t,i,a,o),l=ae(),null===e||ix)?(rS&&l&&rj(n),n.flags|=1,iw(e,n,r,o),n.child):(an(e,n,o),iq(e,n,o))}function ik(e,n,t,r,o){if(null===e){var a=t.type;return\"function\"!=typeof a||rn(a)||void 0!==a.defaultProps||null!==t.compare?((e=ro(t.type,null,r,n,n.mode,o)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=a,iA(e,n,a,r,o))}if(a=e.child,!iW(e,o)){var i=a.memoizedProps;if((t=null!==(t=t.compare)?t:tC)(i,r)&&e.ref===n.ref)return iq(e,n,o)}return n.flags|=1,(e=rt(a,r)).ref=n.ref,e.return=n,n.child=e}function iA(e,n,t,r,o){if(null!==e){var a=e.memoizedProps;if(tC(a,r)&&e.ref===n.ref)if(ix=!1,n.pendingProps=r=a,!iW(e,o))return n.lanes=e.lanes,iq(e,n,o);else 0!=(131072&e.flags)&&(ix=!0)}return iP(e,n,t,r,o)}function iO(e,n,t,r){var o=r.children,a=null!==e?e.memoizedState:null;if(\"hidden\"===r.mode){if(0!=(128&n.flags)){if(r=null!==a?a.baseLanes|t:t,null!==e){for(a=0,o=n.child=e.child;null!==o;)a=a|o.lanes|o.childLanes,o=o.sibling;n.childLanes=a&~r}else n.childLanes=0,n.child=null;return iC(e,n,r,t)}if(0==(0x20000000&t))return n.lanes=n.childLanes=0x20000000,iC(e,n,null!==a?a.baseLanes|t:t,t);n.memoizedState={baseLanes:0,cachePool:null},null!==e&&on(n,null!==a?a.cachePool:null),null!==a?oN(n,a):oD(),oU(n)}else null!==a?(on(n,a.cachePool),oN(n,a),oV(n),n.memoizedState=null):(null!==e&&on(n,null),oD(),oV(n));return iw(e,n,o,t),n.child}function iC(e,n,t,r){var o=oe();return n.memoizedState={baseLanes:t,cachePool:o=null===o?null:{parent:r0._currentValue,pool:o}},null!==e&&on(n,null),oD(),oU(n),null!==e&&rW(e,n,r,!0),null}function iS(e,n){return(n=iI({mode:n.mode,children:n.children},e.mode)).ref=e.ref,e.child=n,n.return=e,n}function iE(e,n,t){return oy(n,e.child,null,t),e=iS(n,n.pendingProps),e.flags|=2,oq(n),n.memoizedState=null,e}function i_(e,n){var t=n.ref;if(null===t)null!==e&&null!==e.ref&&(n.flags|=4194816);else{if(\"function\"!=typeof t&&\"object\"!=typeof t)throw Error(l(284));(null===e||e.ref!==t)&&(n.flags|=4194816)}}function iP(e,n,t,r,o){return(rZ(n),t=o6(e,n,t,r,void 0,o),r=ae(),null===e||ix)?(rS&&r&&rj(n),n.flags|=1,iw(e,n,t,o),n.child):(an(e,n,o),iq(e,n,o))}function iz(e,n,t,r,o,a){return(rZ(n),n.updateQueue=null,t=o8(n,r,t,o),o9(e),r=ae(),null===e||ix)?(rS&&r&&rj(n),n.flags|=1,iw(e,n,t,a),n.child):(an(e,n,a),iq(e,n,a))}function iL(e,n,t,r,o){if(rZ(n),null===n.stateNode){var a=t8,i=t.contextType;\"object\"==typeof i&&null!==i&&(a=rY(i)),n.memoizedState=null!==(a=new t(r,a)).state&&void 0!==a.state?a.state:null,a.updater=ii,n.stateNode=a,a._reactInternals=n,(a=n.stateNode).props=r,a.state=n.memoizedState,a.refs={},oj(n),i=t.contextType,a.context=\"object\"==typeof i&&null!==i?rY(i):t8,a.state=n.memoizedState,\"function\"==typeof(i=t.getDerivedStateFromProps)&&(ia(n,t,i,r),a.state=n.memoizedState),\"function\"==typeof t.getDerivedStateFromProps||\"function\"==typeof a.getSnapshotBeforeUpdate||\"function\"!=typeof a.UNSAFE_componentWillMount&&\"function\"!=typeof a.componentWillMount||(i=a.state,\"function\"==typeof a.componentWillMount&&a.componentWillMount(),\"function\"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),i!==a.state&&ii.enqueueReplaceState(a,a.state,null),oP(n,r,a,o),o_(),a.state=n.memoizedState),\"function\"==typeof a.componentDidMount&&(n.flags|=4194308),r=!0}else if(null===e){a=n.stateNode;var l=n.memoizedProps,s=ic(t,l);a.props=s;var c=a.context,u=t.contextType;i=t8,\"object\"==typeof u&&null!==u&&(i=rY(u));var d=t.getDerivedStateFromProps;u=\"function\"==typeof d||\"function\"==typeof a.getSnapshotBeforeUpdate,l=n.pendingProps!==l,u||\"function\"!=typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof a.componentWillReceiveProps||(l||c!==i)&&is(n,a,r,i),ow=!1;var f=n.memoizedState;a.state=f,oP(n,r,a,o),o_(),c=n.memoizedState,l||f!==c||ow?(\"function\"==typeof d&&(ia(n,t,d,r),c=n.memoizedState),(s=ow||il(n,t,s,r,f,c,i))?(u||\"function\"!=typeof a.UNSAFE_componentWillMount&&\"function\"!=typeof a.componentWillMount||(\"function\"==typeof a.componentWillMount&&a.componentWillMount(),\"function\"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),\"function\"==typeof a.componentDidMount&&(n.flags|=4194308)):(\"function\"==typeof a.componentDidMount&&(n.flags|=4194308),n.memoizedProps=r,n.memoizedState=c),a.props=r,a.state=c,a.context=i,r=s):(\"function\"==typeof a.componentDidMount&&(n.flags|=4194308),r=!1)}else{a=n.stateNode,ok(e,n),u=ic(t,i=n.memoizedProps),a.props=u,d=n.pendingProps,f=a.context,c=t.contextType,s=t8,\"object\"==typeof c&&null!==c&&(s=rY(c)),(c=\"function\"==typeof(l=t.getDerivedStateFromProps)||\"function\"==typeof a.getSnapshotBeforeUpdate)||\"function\"!=typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof a.componentWillReceiveProps||(i!==d||f!==s)&&is(n,a,r,s),ow=!1,f=n.memoizedState,a.state=f,oP(n,r,a,o),o_();var p=n.memoizedState;i!==d||f!==p||ow||null!==e&&null!==e.dependencies&&r$(e.dependencies)?(\"function\"==typeof l&&(ia(n,t,l,r),p=n.memoizedState),(u=ow||il(n,t,u,r,f,p,s)||null!==e&&null!==e.dependencies&&r$(e.dependencies))?(c||\"function\"!=typeof a.UNSAFE_componentWillUpdate&&\"function\"!=typeof a.componentWillUpdate||(\"function\"==typeof a.componentWillUpdate&&a.componentWillUpdate(r,p,s),\"function\"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,p,s)),\"function\"==typeof a.componentDidUpdate&&(n.flags|=4),\"function\"==typeof a.getSnapshotBeforeUpdate&&(n.flags|=1024)):(\"function\"!=typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),\"function\"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=1024),n.memoizedProps=r,n.memoizedState=p),a.props=r,a.state=p,a.context=s,r=u):(\"function\"!=typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),\"function\"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=1024),r=!1)}return a=r,i_(e,n),r=0!=(128&n.flags),a||r?(a=n.stateNode,t=r&&\"function\"!=typeof t.getDerivedStateFromError?null:a.render(),n.flags|=1,null!==e&&r?(n.child=oy(n,e.child,null,o),n.child=oy(n,null,t,o)):iw(e,n,t,o),n.memoizedState=a.state,e=n.child):e=iq(e,n,o),e}function iT(e,n,t,r){return rN(),n.flags|=256,iw(e,n,t,r),n.child}var iR={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function iN(e){return{baseLanes:e,cachePool:ot()}}function iD(e,n,t){return e=null!==e?e.childLanes&~t:0,n&&(e|=lY),e}function iB(e,n,t){var r,o=n.pendingProps,a=!1,i=0!=(128&n.flags);if((r=i)||(r=(null===e||null!==e.memoizedState)&&0!=(2&oW.current)),r&&(a=!0,n.flags&=-129),r=0!=(32&n.flags),n.flags&=-33,null===e){if(rS){if(a?oH(n):oV(n),(e=rC)?null!==(e=null!==(e=cC(e,r_))&&\"&\"!==e.data?e:null)&&(n.memoizedState={dehydrated:e,treeContext:null!==rv?{id:rb,overflow:ry}:null,retryLane:0x20000000,hydrationErrors:null},(t=rl(e)).return=n,n.child=t,rO=n,rC=null):e=null,null===e)throw rz(n);return cE(e)?n.lanes=32:n.lanes=0x20000000,null}var s=o.children;return(o=o.fallback,a)?(oV(n),s=iI({mode:\"hidden\",children:s},a=n.mode),o=ra(o,a,t,null),s.return=n,o.return=n,s.sibling=o,n.child=s,(s=n.child).memoizedState=iN(t),s.childLanes=iD(e,r,t),n.memoizedState=iR,o):(oH(n),iM(n,s))}var c=e.memoizedState;if(null!==c&&null!==(s=c.dehydrated)){if(i)256&n.flags?(oH(n),n.flags&=-257,n=iH(e,n,t)):null!==n.memoizedState?(oV(n),n.child=e.child,n.flags|=128,n=null):(oV(n),s=o.fallback,a=n.mode,o=iI({mode:\"visible\",children:o.children},a),s=ra(s,a,t,null),s.flags|=2,o.return=n,s.return=n,o.sibling=s,n.child=o,oy(n,e.child,null,t),(o=n.child).memoizedState=iN(t),o.childLanes=iD(e,r,t),n.memoizedState=iR,n=s);else if(oH(n),cE(s)){if(r=s.nextSibling&&s.nextSibling.dataset)var u=r.dgst;r=u,(o=Error(l(419))).stack=\"\",o.digest=r,rB({value:o,source:null,stack:null}),n=iH(e,n,t)}else if(ix||rW(e,n,t,!1),r=0!=(t&e.childLanes),ix||r){if(null!==(r=lN)&&0!==(o=e_(r,t))&&o!==c.retryLane)throw c.retryLane=o,t3(e,o),so(r,e,o),iy;cS(s)||sg(),n=iH(e,n,t)}else cS(s)?(n.flags|=192,n.child=e.child,n=null):(e=c.treeContext,rC=c_(s.nextSibling),rO=n,rS=!0,rE=null,r_=!1,null!==e&&rA(n,e),n=iM(n,o.children),n.flags|=4096);return n}return a?(oV(n),s=o.fallback,a=n.mode,u=(c=e.child).sibling,(o=rt(c,{mode:\"hidden\",children:o.children})).subtreeFlags=0x3e00000&c.subtreeFlags,null!==u?s=rt(u,s):(s=ra(s,a,t,null),s.flags|=2),s.return=n,o.return=n,o.sibling=s,n.child=o,o=s,s=n.child,null===(a=e.child.memoizedState)?a=iN(t):(null!==(c=a.cachePool)?(u=r0._currentValue,c=c.parent!==u?{parent:u,pool:u}:c):c=ot(),a={baseLanes:a.baseLanes|t,cachePool:c}),s.memoizedState=a,s.childLanes=iD(e,r,t),n.memoizedState=iR,o):(oH(n),e=(t=e.child).sibling,(t=rt(t,{mode:\"visible\",children:o.children})).return=n,t.sibling=null,null!==e&&(null===(r=n.deletions)?(n.deletions=[e],n.flags|=16):r.push(e)),n.child=t,n.memoizedState=null,t)}function iM(e,n){return(n=iI({mode:\"visible\",children:n},e.mode)).return=e,e.child=n}function iI(e,n){return(e=re(22,e,null,n)).lanes=0,e.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},e}function iH(e,n,t){return oy(n,e.child,null,t),e=iM(n,n.pendingProps.children),e.flags|=2,n.memoizedState=null,e}function iF(e,n,t){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n),rV(e.return,n,t)}function iU(e,n,t,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:o,treeForkCount:a}:(i.isBackwards=n,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=t,i.tailMode=o,i.treeForkCount=a)}function iV(e,n,t){var r=n.pendingProps,o=r.revealOrder,a=r.tail;r=r.children;var i=oW.current,l=0!=(2&i);if(l?(i=1&i|2,n.flags|=128):i&=1,I(oW,i),iw(e,n,r,t),r=rS?rh:0,!l&&null!==e&&0!=(128&e.flags))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&iF(e,t,n);else if(19===e.tag)iF(e,t,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(o){case\"forwards\":for(o=null,t=n.child;null!==t;)null!==(e=t.alternate)&&null===o$(e)&&(o=t),t=t.sibling;null===(t=o)?(o=n.child,n.child=null):(o=t.sibling,t.sibling=null),iU(n,!1,o,t,a,r);break;case\"backwards\":case\"unstable_legacy-backwards\":for(t=null,o=n.child,n.child=null;null!==o;){if(null!==(e=o.alternate)&&null===o$(e)){n.child=o;break}e=o.sibling,o.sibling=t,t=o,o=e}iU(n,!0,t,null,a,r);break;case\"together\":iU(n,!1,null,null,void 0,r);break;default:n.memoizedState=null}return n.child}function iq(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),lW|=n.lanes,0==(t&n.childLanes)){if(null===e)return null;else if(rW(e,n,t,!1),0==(t&n.childLanes))return null}if(null!==e&&n.child!==e.child)throw Error(l(153));if(null!==n.child){for(t=rt(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=rt(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function iW(e,n){return 0!=(e.lanes&n)||!!(null!==(e=e.dependencies)&&r$(e))}function i$(e,n,t){if(null!==e)if(e.memoizedProps!==n.pendingProps)ix=!0;else{if(!iW(e,t)&&0==(128&n.flags))return ix=!1,function(e,n,t){switch(n.tag){case 3:q(n,n.stateNode.containerInfo),rF(n,r0,e.memoizedState.cache),rN();break;case 27:case 5:$(n);break;case 4:q(n,n.stateNode.containerInfo);break;case 10:rF(n,n.type,n.memoizedProps.value);break;case 31:if(null!==n.memoizedState)return n.flags|=128,oF(n),null;break;case 13:var r=n.memoizedState;if(null!==r){if(null!==r.dehydrated)return oH(n),n.flags|=128,null;if(0!=(t&n.child.childLanes))return iB(e,n,t);return oH(n),null!==(e=iq(e,n,t))?e.sibling:null}oH(n);break;case 19:var o=0!=(128&e.flags);if((r=0!=(t&n.childLanes))||(rW(e,n,t,!1),r=0!=(t&n.childLanes)),o){if(r)return iV(e,n,t);n.flags|=128}if(null!==(o=n.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),I(oW,oW.current),!r)return null;break;case 22:return n.lanes=0,iO(e,n,t,n.pendingProps);case 24:rF(n,r0,e.memoizedState.cache)}return iq(e,n,t)}(e,n,t);ix=0!=(131072&e.flags)}else ix=!1,rS&&0!=(1048576&n.flags)&&rw(n,rh,n.index);switch(n.lanes=0,n.tag){case 16:e:{e=n.pendingProps;var r=n.elementType,o=r._init;if(r=o(r._payload),n.type=r,\"function\"==typeof r)rn(r)?(e=ic(r,e),n.tag=1,n=iL(null,n,r,e,t)):(n.tag=0,n=iP(null,n,r,e,t));else{if(null!=r){if((o=r.$$typeof)===w){n.tag=11,n=ij(null,n,r,e,t);break e}else if(o===A){n.tag=14,n=ik(null,n,r,e,t);break e}}throw Error(l(306,n=function e(n){if(null==n)return null;if(\"function\"==typeof n)return n.$$typeof===P?null:n.displayName||n.name||null;if(\"string\"==typeof n)return n;switch(n){case m:return\"Fragment\";case b:return\"Profiler\";case v:return\"StrictMode\";case j:return\"Suspense\";case k:return\"SuspenseList\";case C:return\"Activity\"}if(\"object\"==typeof n)switch(n.$$typeof){case g:return\"Portal\";case x:return n.displayName||\"Context\";case y:return(n._context.displayName||\"Context\")+\".Consumer\";case w:var t=n.render;return(n=n.displayName)||(n=\"\"!==(n=t.displayName||t.name||\"\")?\"ForwardRef(\"+n+\")\":\"ForwardRef\"),n;case A:return null!==(t=n.displayName||null)?t:e(n.type)||\"Memo\";case O:t=n._payload,n=n._init;try{return e(n(t))}catch(e){}}return null}(r)||r,\"\"))}}return n;case 0:return iP(e,n,n.type,n.pendingProps,t);case 1:return o=ic(r=n.type,n.pendingProps),iL(e,n,r,o,t);case 3:e:{if(q(n,n.stateNode.containerInfo),null===e)throw Error(l(387));r=n.pendingProps;var a=n.memoizedState;o=a.element,ok(e,n),oP(n,r,null,t);var i=n.memoizedState;if(rF(n,r0,r=i.cache),r!==a.cache&&rq(n,[r0],t,!0),o_(),r=i.element,a.isDehydrated)if(a={element:r,isDehydrated:!1,cache:i.cache},n.updateQueue.baseState=a,n.memoizedState=a,256&n.flags){n=iT(e,n,r,t);break e}else if(r!==o){rB(o=ru(Error(l(424)),n)),n=iT(e,n,r,t);break e}else for(rC=c_((e=9===(e=n.stateNode.containerInfo).nodeType?e.body:\"HTML\"===e.nodeName?e.ownerDocument.body:e).firstChild),rO=n,rS=!0,rE=null,r_=!0,t=ox(n,null,r,t),n.child=t;t;)t.flags=-3&t.flags|4096,t=t.sibling;else{if(rN(),r===o){n=iq(e,n,t);break e}iw(e,n,r,t)}n=n.child}return n;case 26:return i_(e,n),null===e?(t=cF(n.type,null,n.pendingProps,null))?n.memoizedState=t:rS||(t=n.type,e=n.pendingProps,(r=cf(U.current).createElement(t))[eN]=n,r[eD]=e,cc(r,t,e),eY(r),n.stateNode=r):n.memoizedState=cF(n.type,e.memoizedProps,n.pendingProps,e.memoizedState),null;case 27:return $(n),null===e&&rS&&(r=n.stateNode=cT(n.type,n.pendingProps,U.current),rO=n,r_=!0,o=rC,cj(n.type)?(cP=o,rC=c_(r.firstChild)):rC=o),iw(e,n,n.pendingProps.children,t),i_(e,n),null===e&&(n.flags|=4194304),n.child;case 5:return null===e&&rS&&((o=r=rC)&&(null!==(r=function(e,n,t,r){for(;1===e.nodeType;){if(e.nodeName.toLowerCase()!==n.toLowerCase()){if(!r&&(\"INPUT\"!==e.nodeName||\"hidden\"!==e.type))break}else if(r){if(!e[eU])switch(n){case\"meta\":if(!e.hasAttribute(\"itemprop\"))break;return e;case\"link\":if(\"stylesheet\"===(o=e.getAttribute(\"rel\"))&&e.hasAttribute(\"data-precedence\")||o!==t.rel||e.getAttribute(\"href\")!==(null==t.href||\"\"===t.href?null:t.href)||e.getAttribute(\"crossorigin\")!==(null==t.crossOrigin?null:t.crossOrigin)||e.getAttribute(\"title\")!==(null==t.title?null:t.title))break;return e;case\"style\":if(e.hasAttribute(\"data-precedence\"))break;return e;case\"script\":if(((o=e.getAttribute(\"src\"))!==(null==t.src?null:t.src)||e.getAttribute(\"type\")!==(null==t.type?null:t.type)||e.getAttribute(\"crossorigin\")!==(null==t.crossOrigin?null:t.crossOrigin))&&o&&e.hasAttribute(\"async\")&&!e.hasAttribute(\"itemprop\"))break;return e;default:return e}}else{if(\"input\"!==n||\"hidden\"!==e.type)return e;var o=null==t.name?null:\"\"+t.name;if(\"hidden\"===t.type&&e.getAttribute(\"name\")===o)return e}if(null===(e=c_(e.nextSibling)))break}return null}(r,n.type,n.pendingProps,r_))?(n.stateNode=r,rO=n,rC=c_(r.firstChild),r_=!1,o=!0):o=!1),o||rz(n)),$(n),o=n.type,a=n.pendingProps,i=null!==e?e.memoizedProps:null,r=a.children,cg(o,a)?r=null:null!==i&&cg(o,i)&&(n.flags|=32),null!==n.memoizedState&&(c6._currentValue=o=o6(e,n,o7,null,null,t)),i_(e,n),iw(e,n,r,t),n.child;case 6:return null===e&&rS&&((e=t=rC)&&(null!==(t=function(e,n,t){if(\"\"===n)return null;for(;3!==e.nodeType;)if((1!==e.nodeType||\"INPUT\"!==e.nodeName||\"hidden\"!==e.type)&&!t||null===(e=c_(e.nextSibling)))return null;return e}(t,n.pendingProps,r_))?(n.stateNode=t,rO=n,rC=null,e=!0):e=!1),e||rz(n)),null;case 13:return iB(e,n,t);case 4:return q(n,n.stateNode.containerInfo),r=n.pendingProps,null===e?n.child=oy(n,null,r,t):iw(e,n,r,t),n.child;case 11:return ij(e,n,n.type,n.pendingProps,t);case 7:return iw(e,n,n.pendingProps,t),n.child;case 8:case 12:return iw(e,n,n.pendingProps.children,t),n.child;case 10:return r=n.pendingProps,rF(n,n.type,r.value),iw(e,n,r.children,t),n.child;case 9:return o=n.type._context,r=n.pendingProps.children,rZ(n),r=r(o=rY(o)),n.flags|=1,iw(e,n,r,t),n.child;case 14:return ik(e,n,n.type,n.pendingProps,t);case 15:return iA(e,n,n.type,n.pendingProps,t);case 19:return iV(e,n,t);case 31:if(o=n.pendingProps,i=0!=(128&n.flags),n.flags&=-129,null===e)if(rS){if(\"hidden\"===o.mode)iS(n,o);else if(oF(n),(t=rC)?null!==(t=null!==(t=cC(t,r_))&&\"&\"===t.data?t:null)&&(n.memoizedState={dehydrated:t,treeContext:null!==rv?{id:rb,overflow:ry}:null,retryLane:0x20000000,hydrationErrors:null},(e=rl(t)).return=n,n.child=e,rO=n,rC=null):t=null,null===t)throw rz(n);n.lanes=0x20000000,n=null}else n=iS(n,o);else if(null!==(r=e.memoizedState))if(a=r.dehydrated,oF(n),i)if(256&n.flags)n.flags&=-257,n=iE(e,n,t);else if(null!==n.memoizedState)n.child=e.child,n.flags|=128,n=null;else throw Error(l(558));else if(ix||rW(e,n,t,!1),i=0!=(t&e.childLanes),ix||i){if(null!==(o=lN)&&0!==(a=e_(o,t))&&a!==r.retryLane)throw r.retryLane=a,t3(e,a),so(o,e,a),iy;sg(),n=iE(e,n,t)}else t=r.treeContext,rC=c_(a.nextSibling),rO=n,rS=!0,rE=null,r_=!1,null!==t&&rA(n,t),n=iS(n,o),n.flags|=4096;else(t=rt(e.child,{mode:o.mode,children:o.children})).ref=n.ref,n.child=t,t.return=n,n=t;return n;case 22:return iO(e,n,t,n.pendingProps);case 24:return rZ(n),r=rY(r0),null===e?(null===(o=oe())&&(o=lN,a=r1(),o.pooledCache=a,a.refCount++,null!==a&&(o.pooledCacheLanes|=t),o=a),n.memoizedState={parent:r,cache:o},oj(n),rF(n,r0,o)):(0!=(e.lanes&t)&&(ok(e,n),oP(n,null,null,t),o_()),o=e.memoizedState,a=n.memoizedState,o.parent!==r?(o={parent:r,cache:r},n.memoizedState=o,0===n.lanes&&(n.memoizedState=n.updateQueue.baseState=o),rF(n,r0,r)):(rF(n,r0,r=a.cache),r!==o.cache&&rq(n,[r0],t,!0))),iw(e,n,n.pendingProps.children,t),n.child;case 29:throw n.pendingProps}throw Error(l(156,n.tag))}function iZ(e){e.flags|=4}function iY(e,n,t,r,o){if((n=0!=(32&e.mode))&&(n=!1),n){if(e.flags|=0x1000000,(0x13ffff40&o)===o)if(e.stateNode.complete)e.flags|=8192;else if(sf())e.flags|=8192;else throw oc=oi,oo}else e.flags&=-0x1000001}function iX(e,n){if(\"stylesheet\"!==n.type||0!=(4&n.state.loading))e.flags&=-0x1000001;else if(e.flags|=0x1000000,!c0(n))if(sf())e.flags|=8192;else throw oc=oi,oo}function iK(e,n){null!==n&&(e.flags|=4),16384&e.flags&&(n=22!==e.tag?eA():0x20000000,e.lanes|=n,lX|=n)}function iQ(e,n){if(!rS)switch(e.tailMode){case\"hidden\":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case\"collapsed\":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function iG(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,r=0;if(n)for(var o=e.child;null!==o;)t|=o.lanes|o.childLanes,r|=0x3e00000&o.subtreeFlags,r|=0x3e00000&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)t|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=t,n}function iJ(e,n){switch(rk(n),n.tag){case 3:rU(r0),W();break;case 26:case 27:case 5:Z(n);break;case 4:W();break;case 31:null!==n.memoizedState&&oq(n);break;case 13:oq(n);break;case 19:M(oW);break;case 10:rU(n.type);break;case 22:case 23:oq(n),oB(),null!==e&&M(r7);break;case 24:rU(r0)}}function i0(e,n){try{var t=n.updateQueue,r=null!==t?t.lastEffect:null;if(null!==r){var o=r.next;t=o;do{if((t.tag&e)===e){r=void 0;var a=t.create;t.inst.destroy=r=a()}t=t.next}while(t!==o)}}catch(e){sP(n,n.return,e)}}function i1(e,n,t){try{var r=n.updateQueue,o=null!==r?r.lastEffect:null;if(null!==o){var a=o.next;r=a;do{if((r.tag&e)===e){var i=r.inst,l=i.destroy;if(void 0!==l){i.destroy=void 0,o=n;try{l()}catch(e){sP(o,t,e)}}}r=r.next}while(r!==a)}}catch(e){sP(n,n.return,e)}}function i2(e){var n=e.updateQueue;if(null!==n){var t=e.stateNode;try{oL(n,t)}catch(n){sP(e,e.return,n)}}}function i4(e,n,t){t.props=ic(e.type,e.memoizedProps),t.state=e.memoizedState;try{t.componentWillUnmount()}catch(t){sP(e,n,t)}}function i5(e,n){try{var t=e.ref;if(null!==t){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;default:r=e.stateNode}\"function\"==typeof t?e.refCleanup=t(r):t.current=r}}catch(t){sP(e,n,t)}}function i3(e,n){var t=e.ref,r=e.refCleanup;if(null!==t)if(\"function\"==typeof r)try{r()}catch(t){sP(e,n,t)}finally{e.refCleanup=null,null!=(e=e.alternate)&&(e.refCleanup=null)}else if(\"function\"==typeof t)try{t(null)}catch(t){sP(e,n,t)}else t.current=null}function i6(e){var n=e.type,t=e.memoizedProps,r=e.stateNode;try{switch(n){case\"button\":case\"input\":case\"select\":case\"textarea\":t.autoFocus&&r.focus();break;case\"img\":t.src?r.src=t.src:t.srcSet&&(r.srcset=t.srcSet)}}catch(n){sP(e,e.return,n)}}function i9(e,n,t){try{var r=e.stateNode;(function(e,n,t,r){switch(n){case\"div\":case\"span\":case\"svg\":case\"path\":case\"a\":case\"g\":case\"p\":case\"li\":break;case\"input\":var o=null,a=null,i=null,s=null,c=null,u=null,d=null;for(h in t){var f=t[h];if(t.hasOwnProperty(h)&&null!=f)switch(h){case\"checked\":case\"value\":break;case\"defaultValue\":c=f;default:r.hasOwnProperty(h)||cl(e,n,h,null,r,f)}}for(var p in r){var h=r[p];if(f=t[p],r.hasOwnProperty(p)&&(null!=h||null!=f))switch(p){case\"type\":a=h;break;case\"name\":o=h;break;case\"checked\":u=h;break;case\"defaultChecked\":d=h;break;case\"value\":i=h;break;case\"defaultValue\":s=h;break;case\"children\":case\"dangerouslySetInnerHTML\":if(null!=h)throw Error(l(137,n));break;default:h!==f&&cl(e,n,p,h,r,f)}}nt(e,i,s,c,u,d,a,o);return;case\"select\":for(a in h=i=s=p=null,t)if(c=t[a],t.hasOwnProperty(a)&&null!=c)switch(a){case\"value\":break;case\"multiple\":h=c;default:r.hasOwnProperty(a)||cl(e,n,a,null,r,c)}for(o in r)if(a=r[o],c=t[o],r.hasOwnProperty(o)&&(null!=a||null!=c))switch(o){case\"value\":p=a;break;case\"defaultValue\":s=a;break;case\"multiple\":i=a;default:a!==c&&cl(e,n,o,a,r,c)}n=s,t=i,r=h,null!=p?na(e,!!t,p,!1):!!r!=!!t&&(null!=n?na(e,!!t,n,!0):na(e,!!t,t?[]:\"\",!1));return;case\"textarea\":for(s in h=p=null,t)if(o=t[s],t.hasOwnProperty(s)&&null!=o&&!r.hasOwnProperty(s))switch(s){case\"value\":case\"children\":break;default:cl(e,n,s,null,r,o)}for(i in r)if(o=r[i],a=t[i],r.hasOwnProperty(i)&&(null!=o||null!=a))switch(i){case\"value\":p=o;break;case\"defaultValue\":h=o;break;case\"children\":break;case\"dangerouslySetInnerHTML\":if(null!=o)throw Error(l(91));break;default:o!==a&&cl(e,n,i,o,r,a)}ni(e,p,h);return;case\"option\":for(var g in t)p=t[g],t.hasOwnProperty(g)&&null!=p&&!r.hasOwnProperty(g)&&(\"selected\"===g?e.selected=!1:cl(e,n,g,null,r,p));for(c in r)p=r[c],h=t[c],r.hasOwnProperty(c)&&p!==h&&(null!=p||null!=h)&&(\"selected\"===c?e.selected=p&&\"function\"!=typeof p&&\"symbol\"!=typeof p:cl(e,n,c,p,r,h));return;case\"img\":case\"link\":case\"area\":case\"base\":case\"br\":case\"col\":case\"embed\":case\"hr\":case\"keygen\":case\"meta\":case\"param\":case\"source\":case\"track\":case\"wbr\":case\"menuitem\":for(var m in t)p=t[m],t.hasOwnProperty(m)&&null!=p&&!r.hasOwnProperty(m)&&cl(e,n,m,null,r,p);for(u in r)if(p=r[u],h=t[u],r.hasOwnProperty(u)&&p!==h&&(null!=p||null!=h))switch(u){case\"children\":case\"dangerouslySetInnerHTML\":if(null!=p)throw Error(l(137,n));break;default:cl(e,n,u,p,r,h)}return;default:if(nf(n)){for(var v in t)p=t[v],t.hasOwnProperty(v)&&void 0!==p&&!r.hasOwnProperty(v)&&cs(e,n,v,void 0,r,p);for(d in r)p=r[d],h=t[d],r.hasOwnProperty(d)&&p!==h&&(void 0!==p||void 0!==h)&&cs(e,n,d,p,r,h);return}}for(var b in t)p=t[b],t.hasOwnProperty(b)&&null!=p&&!r.hasOwnProperty(b)&&cl(e,n,b,null,r,p);for(f in r)p=r[f],h=t[f],r.hasOwnProperty(f)&&p!==h&&(null!=p||null!=h)&&cl(e,n,f,p,r,h)})(r,e.type,t,n),r[eD]=n}catch(n){sP(e,e.return,n)}}function i8(e){return 5===e.tag||3===e.tag||26===e.tag||27===e.tag&&cj(e.type)||4===e.tag}function i7(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||i8(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(27===e.tag&&cj(e.type)||2&e.flags||null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function le(e,n,t){var r=e.tag;if(5===r||6===r)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(4!==r&&(27===r&&cj(e.type)&&(t=e.stateNode),null!==(e=e.child)))for(le(e,n,t),e=e.sibling;null!==e;)le(e,n,t),e=e.sibling}function ln(e){var n=e.stateNode,t=e.memoizedProps;try{for(var r=e.type,o=n.attributes;o.length;)n.removeAttributeNode(o[0]);cc(n,r,t),n[eN]=e,n[eD]=t}catch(n){sP(e,e.return,n)}}var lt=!1,lr=!1,lo=!1,la=\"function\"==typeof WeakSet?WeakSet:Set,li=null;function ll(e,n,t){var r=t.flags;switch(t.tag){case 0:case 11:case 15:ly(e,t),4&r&&i0(5,t);break;case 1:if(ly(e,t),4&r)if(e=t.stateNode,null===n)try{e.componentDidMount()}catch(e){sP(t,t.return,e)}else{var o=ic(t.type,n.memoizedProps);n=n.memoizedState;try{e.componentDidUpdate(o,n,e.__reactInternalSnapshotBeforeUpdate)}catch(e){sP(t,t.return,e)}}64&r&&i2(t),512&r&&i5(t,t.return);break;case 3:if(ly(e,t),64&r&&null!==(e=t.updateQueue)){if(n=null,null!==t.child)switch(t.child.tag){case 27:case 5:case 1:n=t.child.stateNode}try{oL(e,n)}catch(e){sP(t,t.return,e)}}break;case 27:null===n&&4&r&&ln(t);case 26:case 5:ly(e,t),null===n&&4&r&&i6(t),512&r&&i5(t,t.return);break;case 12:default:ly(e,t);break;case 31:ly(e,t),4&r&&lf(e,t);break;case 13:ly(e,t),4&r&&lp(e,t),64&r&&null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)&&function(e,n){var t=e.ownerDocument;if(\"$~\"===e.data)e._reactRetry=n;else if(\"$?\"!==e.data||\"loading\"!==t.readyState)n();else{var r=function(){n(),t.removeEventListener(\"DOMContentLoaded\",r)};t.addEventListener(\"DOMContentLoaded\",r),e._reactRetry=r}}(e,t=sR.bind(null,t));break;case 22:if(!(r=null!==t.memoizedState||lt)){n=null!==n&&null!==n.memoizedState||lr,o=lt;var a=lr;lt=r,(lr=n)&&!a?function e(n,t,r){for(r=r&&0!=(8772&t.subtreeFlags),t=t.child;null!==t;){var o=t.alternate,a=n,i=t,l=i.flags;switch(i.tag){case 0:case 11:case 15:e(a,i,r),i0(4,i);break;case 1:if(e(a,i,r),\"function\"==typeof(a=(o=i).stateNode).componentDidMount)try{a.componentDidMount()}catch(e){sP(o,o.return,e)}if(null!==(a=(o=i).updateQueue)){var s=o.stateNode;try{var c=a.shared.hiddenCallbacks;if(null!==c)for(a.shared.hiddenCallbacks=null,a=0;a<c.length;a++)oz(c[a],s)}catch(e){sP(o,o.return,e)}}r&&64&l&&i2(i),i5(i,i.return);break;case 27:ln(i);case 26:case 5:e(a,i,r),r&&null===o&&4&l&&i6(i),i5(i,i.return);break;case 12:default:e(a,i,r);break;case 31:e(a,i,r),r&&4&l&&lf(a,i);break;case 13:e(a,i,r),r&&4&l&&lp(a,i);break;case 22:null===i.memoizedState&&e(a,i,r),i5(i,i.return);case 30:}t=t.sibling}}(e,t,0!=(8772&t.subtreeFlags)):ly(e,t),lt=o,lr=a}case 30:}}var ls=null,lc=!1;function lu(e,n,t){for(t=t.child;null!==t;)ld(e,n,t),t=t.sibling}function ld(e,n,t){if(ep&&\"function\"==typeof ep.onCommitFiberUnmount)try{ep.onCommitFiberUnmount(ef,t)}catch(e){}switch(t.tag){case 26:lr||i3(t,n),lu(e,n,t),t.memoizedState?t.memoizedState.count--:t.stateNode&&(t=t.stateNode).parentNode.removeChild(t);break;case 27:lr||i3(t,n);var r=ls,o=lc;cj(t.type)&&(ls=t.stateNode,lc=!1),lu(e,n,t),cR(t.stateNode),ls=r,lc=o;break;case 5:lr||i3(t,n);case 6:if(r=ls,o=lc,ls=null,lu(e,n,t),ls=r,lc=o,null!==ls)if(lc)try{(9===ls.nodeType?ls.body:\"HTML\"===ls.nodeName?ls.ownerDocument.body:ls).removeChild(t.stateNode)}catch(e){sP(t,n,e)}else try{ls.removeChild(t.stateNode)}catch(e){sP(t,n,e)}break;case 18:null!==ls&&(lc?(ck(9===(e=ls).nodeType?e.body:\"HTML\"===e.nodeName?e.ownerDocument.body:e,t.stateNode),uE(e)):ck(ls,t.stateNode));break;case 4:r=ls,o=lc,ls=t.stateNode.containerInfo,lc=!0,lu(e,n,t),ls=r,lc=o;break;case 0:case 11:case 14:case 15:lr||i1(2,t,n),lr||i1(4,t,n),lu(e,n,t);break;case 1:lr||(i3(t,n),\"function\"==typeof(r=t.stateNode).componentWillUnmount&&i4(t,n,r)),lu(e,n,t);break;case 21:default:lu(e,n,t);break;case 22:lr=(r=lr)||null!==t.memoizedState,lu(e,n,t),lr=r}}function lf(e,n){if(null===n.memoizedState&&null!==(e=n.alternate)&&null!==(e=e.memoizedState)){e=e.dehydrated;try{uE(e)}catch(e){sP(n,n.return,e)}}}function lp(e,n){if(null===n.memoizedState&&null!==(e=n.alternate)&&null!==(e=e.memoizedState)&&null!==(e=e.dehydrated))try{uE(e)}catch(e){sP(n,n.return,e)}}function lh(e,n){var t=function(e){switch(e.tag){case 31:case 13:case 19:var n=e.stateNode;return null===n&&(n=e.stateNode=new la),n;case 22:return null===(n=(e=e.stateNode)._retryCache)&&(n=e._retryCache=new la),n;default:throw Error(l(435,e.tag))}}(e);n.forEach(function(n){var r=sN.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))})}function lg(e,n){var t=n.deletions;if(null!==t)for(var r=0;r<t.length;r++){var o=t[r],a=e,i=n,s=i;e:for(;null!==s;){switch(s.tag){case 27:if(cj(s.type)){ls=s.stateNode,lc=!1;break e}break;case 5:ls=s.stateNode,lc=!1;break e;case 3:case 4:ls=s.stateNode.containerInfo,lc=!0;break e}s=s.return}if(null===ls)throw Error(l(160));ld(a,i,o),ls=null,lc=!1,null!==(a=o.alternate)&&(a.return=null),o.return=null}if(13878&n.subtreeFlags)for(n=n.child;null!==n;)lv(n,e),n=n.sibling}var lm=null;function lv(e,n){var t=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:lg(n,e),lb(e),4&r&&(i1(3,e,e.return),i0(3,e),i1(5,e,e.return));break;case 1:lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),64&r&<&&null!==(e=e.updateQueue)&&null!==(r=e.callbacks)&&(t=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=null===t?r:t.concat(r));break;case 26:var o=lm;if(lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),4&r){var a=null!==t?t.memoizedState:null;if(r=e.memoizedState,null===t)if(null===r)if(null===e.stateNode){e:{r=e.type,t=e.memoizedProps,o=o.ownerDocument||o;n:switch(r){case\"title\":(!(a=o.getElementsByTagName(\"title\")[0])||a[eU]||a[eN]||\"http://www.w3.org/2000/svg\"===a.namespaceURI||a.hasAttribute(\"itemprop\"))&&(a=o.createElement(r),o.head.insertBefore(a,o.querySelector(\"head > title\"))),cc(a,r,t),a[eN]=e,eY(a),r=a;break e;case\"link\":var i=cG(\"link\",\"href\",o).get(r+(t.href||\"\"));if(i){for(var s=0;s<i.length;s++)if((a=i[s]).getAttribute(\"href\")===(null==t.href||\"\"===t.href?null:t.href)&&a.getAttribute(\"rel\")===(null==t.rel?null:t.rel)&&a.getAttribute(\"title\")===(null==t.title?null:t.title)&&a.getAttribute(\"crossorigin\")===(null==t.crossOrigin?null:t.crossOrigin)){i.splice(s,1);break n}}cc(a=o.createElement(r),r,t),o.head.appendChild(a);break;case\"meta\":if(i=cG(\"meta\",\"content\",o).get(r+(t.content||\"\"))){for(s=0;s<i.length;s++)if((a=i[s]).getAttribute(\"content\")===(null==t.content?null:\"\"+t.content)&&a.getAttribute(\"name\")===(null==t.name?null:t.name)&&a.getAttribute(\"property\")===(null==t.property?null:t.property)&&a.getAttribute(\"http-equiv\")===(null==t.httpEquiv?null:t.httpEquiv)&&a.getAttribute(\"charset\")===(null==t.charSet?null:t.charSet)){i.splice(s,1);break n}}cc(a=o.createElement(r),r,t),o.head.appendChild(a);break;default:throw Error(l(468,r))}a[eN]=e,eY(a),r=a}e.stateNode=r}else cJ(o,e.type,e.stateNode);else e.stateNode=cZ(o,r,e.memoizedProps);else a!==r?(null===a?null!==t.stateNode&&(t=t.stateNode).parentNode.removeChild(t):a.count--,null===r?cJ(o,e.type,e.stateNode):cZ(o,r,e.memoizedProps)):null===r&&null!==e.stateNode&&i9(e,e.memoizedProps,t.memoizedProps)}break;case 27:lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),null!==t&&4&r&&i9(e,e.memoizedProps,t.memoizedProps);break;case 5:if(lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),32&e.flags){o=e.stateNode;try{ns(o,\"\")}catch(n){sP(e,e.return,n)}}4&r&&null!=e.stateNode&&(o=e.memoizedProps,i9(e,o,null!==t?t.memoizedProps:o)),1024&r&&(lo=!0);break;case 6:if(lg(n,e),lb(e),4&r){if(null===e.stateNode)throw Error(l(162));r=e.memoizedProps,t=e.stateNode;try{t.nodeValue=r}catch(n){sP(e,e.return,n)}}break;case 3:if(cQ=null,o=lm,lm=cB(n.containerInfo),lg(n,e),lm=o,lb(e),4&r&&null!==t&&t.memoizedState.isDehydrated)try{uE(n.containerInfo)}catch(n){sP(e,e.return,n)}lo&&(lo=!1,function e(n){if(1024&n.subtreeFlags)for(n=n.child;null!==n;){var t=n;e(t),5===t.tag&&1024&t.flags&&t.stateNode.reset(),n=n.sibling}}(e));break;case 4:r=lm,lm=cB(e.stateNode.containerInfo),lg(n,e),lb(e),lm=r;break;case 12:default:lg(n,e),lb(e);break;case 31:case 19:lg(n,e),lb(e),4&r&&null!==(r=e.updateQueue)&&(e.updateQueue=null,lh(e,r));break;case 13:lg(n,e),lb(e),8192&e.child.flags&&null!==e.memoizedState!=(null!==t&&null!==t.memoizedState)&&(lJ=er()),4&r&&null!==(r=e.updateQueue)&&(e.updateQueue=null,lh(e,r));break;case 22:o=null!==e.memoizedState;var c=null!==t&&null!==t.memoizedState,u=lt,d=lr;if(lt=u||o,lr=d||c,lg(n,e),lr=d,lt=u,lb(e),8192&r)e:for((n=e.stateNode)._visibility=o?-2&n._visibility:1|n._visibility,o&&(null===t||c||lt||lr||function e(n){for(n=n.child;null!==n;){var t=n;switch(t.tag){case 0:case 11:case 14:case 15:i1(4,t,t.return),e(t);break;case 1:i3(t,t.return);var r=t.stateNode;\"function\"==typeof r.componentWillUnmount&&i4(t,t.return,r),e(t);break;case 27:cR(t.stateNode);case 26:case 5:i3(t,t.return),e(t);break;case 22:null===t.memoizedState&&e(t);break;default:e(t)}n=n.sibling}}(e)),t=null,n=e;;){if(5===n.tag||26===n.tag){if(null===t){c=t=n;try{if(a=c.stateNode,o)i=a.style,\"function\"==typeof i.setProperty?i.setProperty(\"display\",\"none\",\"important\"):i.display=\"none\";else{s=c.stateNode;var f=c.memoizedProps.style,p=null!=f&&f.hasOwnProperty(\"display\")?f.display:null;s.style.display=null==p||\"boolean\"==typeof p?\"\":(\"\"+p).trim()}}catch(e){sP(c,c.return,e)}}}else if(6===n.tag){if(null===t){c=n;try{c.stateNode.nodeValue=o?\"\":c.memoizedProps}catch(e){sP(c,c.return,e)}}}else if(18===n.tag){if(null===t){c=n;try{var h=c.stateNode;o?cA(h,!0):cA(c.stateNode,!1)}catch(e){sP(c,c.return,e)}}}else if((22!==n.tag&&23!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)break e;t===n&&(t=null),n=n.return}t===n&&(t=null),n.sibling.return=n.return,n=n.sibling}4&r&&null!==(r=e.updateQueue)&&null!==(t=r.retryQueue)&&(r.retryQueue=null,lh(e,t));case 30:case 21:}}function lb(e){var n=e.flags;if(2&n){try{for(var t,r=e.return;null!==r;){if(i8(r)){t=r;break}r=r.return}if(null==t)throw Error(l(160));switch(t.tag){case 27:var o=t.stateNode,a=i7(e);le(e,a,o);break;case 5:var i=t.stateNode;32&t.flags&&(ns(i,\"\"),t.flags&=-33);var s=i7(e);le(e,s,i);break;case 3:case 4:var c=t.stateNode.containerInfo,u=i7(e);!function e(n,t,r){var o=n.tag;if(5===o||6===o)n=n.stateNode,t?(9===r.nodeType?r.body:\"HTML\"===r.nodeName?r.ownerDocument.body:r).insertBefore(n,t):((t=9===r.nodeType?r.body:\"HTML\"===r.nodeName?r.ownerDocument.body:r).appendChild(n),null!=(r=r._reactRootContainer)||null!==t.onclick||(t.onclick=nm));else if(4!==o&&(27===o&&cj(n.type)&&(r=n.stateNode,t=null),null!==(n=n.child)))for(e(n,t,r),n=n.sibling;null!==n;)e(n,t,r),n=n.sibling}(e,u,c);break;default:throw Error(l(161))}}catch(n){sP(e,e.return,n)}e.flags&=-3}4096&n&&(e.flags&=-4097)}function ly(e,n){if(8772&n.subtreeFlags)for(n=n.child;null!==n;)ll(e,n.alternate,n),n=n.sibling}function lx(e,n){var t=null;null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(t=e.memoizedState.cachePool.pool),e=null,null!==n.memoizedState&&null!==n.memoizedState.cachePool&&(e=n.memoizedState.cachePool.pool),e!==t&&(null!=e&&e.refCount++,null!=t&&r2(t))}function lw(e,n){e=null,null!==n.alternate&&(e=n.alternate.memoizedState.cache),(n=n.memoizedState.cache)!==e&&(n.refCount++,null!=e&&r2(e))}function lj(e,n,t,r){if(10256&n.subtreeFlags)for(n=n.child;null!==n;)lk(e,n,t,r),n=n.sibling}function lk(e,n,t,r){var o=n.flags;switch(n.tag){case 0:case 11:case 15:lj(e,n,t,r),2048&o&&i0(9,n);break;case 1:case 31:case 13:default:lj(e,n,t,r);break;case 3:lj(e,n,t,r),2048&o&&(e=null,null!==n.alternate&&(e=n.alternate.memoizedState.cache),(n=n.memoizedState.cache)!==e&&(n.refCount++,null!=e&&r2(e)));break;case 12:if(2048&o){lj(e,n,t,r),e=n.stateNode;try{var a=n.memoizedProps,i=a.id,l=a.onPostCommit;\"function\"==typeof l&&l(i,null===n.alternate?\"mount\":\"update\",e.passiveEffectDuration,-0)}catch(e){sP(n,n.return,e)}}else lj(e,n,t,r);break;case 23:break;case 22:a=n.stateNode,i=n.alternate,null!==n.memoizedState?2&a._visibility?lj(e,n,t,r):lA(e,n):2&a._visibility?lj(e,n,t,r):(a._visibility|=2,function e(n,t,r,o,a){for(a=a&&0!=(10256&t.subtreeFlags),t=t.child;null!==t;){var i=t,l=i.flags;switch(i.tag){case 0:case 11:case 15:e(n,i,r,o,a),i0(8,i);break;case 23:break;case 22:var s=i.stateNode;null!==i.memoizedState?2&s._visibility?e(n,i,r,o,a):lA(n,i):(s._visibility|=2,e(n,i,r,o,a)),a&&2048&l&&lx(i.alternate,i);break;case 24:e(n,i,r,o,a),a&&2048&l&&lw(i.alternate,i);break;default:e(n,i,r,o,a)}t=t.sibling}}(e,n,t,r,0!=(10256&n.subtreeFlags))),2048&o&&lx(i,n);break;case 24:lj(e,n,t,r),2048&o&&lw(n.alternate,n)}}function lA(e,n){if(10256&n.subtreeFlags)for(n=n.child;null!==n;){var t=n,r=t.flags;switch(t.tag){case 22:lA(e,t),2048&r&&lx(t.alternate,t);break;case 24:lA(e,t),2048&r&&lw(t.alternate,t);break;default:lA(e,t)}n=n.sibling}}var lO=8192;function lC(e){if(e.subtreeFlags&lO)for(e=e.child;null!==e;)lS(e),e=e.sibling}function lS(e){switch(e.tag){case 26:lC(e),e.flags&lO&&null!==e.memoizedState&&function(e,n,t){if(null===c1)throw Error(l(475));var r=c1;if(\"stylesheet\"===n.type&&(\"string\"!=typeof t.media||!1!==matchMedia(t.media).matches)&&0==(4&n.state.loading)){if(null===n.instance){var o=cU(t.href),a=e.querySelector(cV(o));if(a){null!==(e=a._p)&&\"object\"==typeof e&&\"function\"==typeof e.then&&(r.count++,r=c2.bind(r),e.then(r,r)),n.state.loading|=4,n.instance=a,eY(a);return}a=e.ownerDocument||e,t=cq(t),(o=cN.get(o))&&cX(t,o),eY(a=a.createElement(\"link\"));var i=a;i._p=new Promise(function(e,n){i.onload=e,i.onerror=n}),cc(a,\"link\",t),n.instance=a}null===r.stylesheets&&(r.stylesheets=new Map),r.stylesheets.set(n,e),(e=n.state.preload)&&0==(3&n.state.loading)&&(r.count++,n=c2.bind(r),e.addEventListener(\"load\",n),e.addEventListener(\"error\",n))}}(lm,e.memoizedState,e.memoizedProps);break;case 5:default:lC(e);break;case 3:case 4:var n=lm;lm=cB(e.stateNode.containerInfo),lC(e),lm=n;break;case 22:null===e.memoizedState&&(null!==(n=e.alternate)&&null!==n.memoizedState?(n=lO,lO=0x1000000,lC(e),lO=n):lC(e))}}function lE(e){var n=e.alternate;if(null!==n&&null!==(e=n.child)){n.child=null;do n=e.sibling,e.sibling=null,e=n;while(null!==e)}}function l_(e){var n=e.deletions;if(0!=(16&e.flags)){if(null!==n)for(var t=0;t<n.length;t++){var r=n[t];li=r,lz(r,e)}lE(e)}if(10256&e.subtreeFlags)for(e=e.child;null!==e;)lP(e),e=e.sibling}function lP(e){switch(e.tag){case 0:case 11:case 15:l_(e),2048&e.flags&&i1(9,e,e.return);break;case 3:case 12:default:l_(e);break;case 22:var n=e.stateNode;null!==e.memoizedState&&2&n._visibility&&(null===e.return||13!==e.return.tag)?(n._visibility&=-3,function e(n){var t=n.deletions;if(0!=(16&n.flags)){if(null!==t)for(var r=0;r<t.length;r++){var o=t[r];li=o,lz(o,n)}lE(n)}for(n=n.child;null!==n;){switch((t=n).tag){case 0:case 11:case 15:i1(8,t,t.return),e(t);break;case 22:2&(r=t.stateNode)._visibility&&(r._visibility&=-3,e(t));break;default:e(t)}n=n.sibling}}(e)):l_(e)}}function lz(e,n){for(;null!==li;){var t=li;switch(t.tag){case 0:case 11:case 15:i1(8,t,n);break;case 23:case 22:if(null!==t.memoizedState&&null!==t.memoizedState.cachePool){var r=t.memoizedState.cachePool.pool;null!=r&&r.refCount++}break;case 24:r2(t.memoizedState.cache)}if(null!==(r=t.child))r.return=t,li=r;else for(t=e;null!==li;){var o=(r=li).sibling,a=r.return;if(!function e(n){var t=n.alternate;null!==t&&(n.alternate=null,e(t)),n.child=null,n.deletions=null,n.sibling=null,5===n.tag&&null!==(t=n.stateNode)&&eV(t),n.stateNode=null,n.return=null,n.dependencies=null,n.memoizedProps=null,n.memoizedState=null,n.pendingProps=null,n.stateNode=null,n.updateQueue=null}(r),r===t){li=null;break}if(null!==o){o.return=a,li=o;break}li=a}}}var lL={getCacheForType:function(e){var n=rY(r0),t=n.data.get(e);return void 0===t&&(t=e(),n.data.set(e,t)),t},cacheSignal:function(){return rY(r0).controller.signal}},lT=\"function\"==typeof WeakMap?WeakMap:Map,lR=0,lN=null,lD=null,lB=0,lM=0,lI=null,lH=!1,lF=!1,lU=!1,lV=0,lq=0,lW=0,l$=0,lZ=0,lY=0,lX=0,lK=null,lQ=null,lG=!1,lJ=0,l0=1/0,l1=null,l2=null,l4=0,l5=null,l3=null,l6=0,l9=0,l8=null,l7=null,se=0,sn=null;function st(){return 0!=(2&lR)&&0!==lB?lB&-lB:null!==L.T?sX():eL()}function sr(){0===lY&&(lY=0==(0x20000000&lB)||rS?ek():0x20000000);var e=oM.current;return null!==e&&(e.flags|=32),lY}function so(e,n,t){(e===lN&&(2===lM||9===lM)||null!==e.cancelPendingCommit)&&(su(e,0),sl(e,lB,lY,!1)),eC(e,t),(0==(2&lR)||e!==lN)&&(e===lN&&(0==(2&lR)&&(l$|=t),4===lq&&sl(e,lB,lY,!1)),sU(e))}function sa(e,n,t){if(0!=(6&lR))throw Error(l(327));for(var r=!t&&0==(124&n)&&0==(n&e.expiredLanes)||ej(e,n),o=r?function(e,n){var t=lR;lR|=2;var r=sp(),o=sh();lN!==e||lB!==n?(l1=null,l0=er()+500,su(e,n)):lF=ej(e,n);e:for(;;)try{if(0!==lM&&null!==lD){n=lD;var a=lI;n:switch(lM){case 1:lM=0,lI=null,sy(e,n,a,1);break;case 2:case 9:if(ol(a)){lM=0,lI=null,sb(n);break}n=function(){2!==lM&&9!==lM||lN!==e||(lM=7),sU(e)},a.then(n,n);break e;case 3:lM=7;break e;case 4:lM=5;break e;case 7:ol(a)?(lM=0,lI=null,sb(n)):(lM=0,lI=null,sy(e,n,a,7));break;case 5:var i=null;switch(lD.tag){case 26:i=lD.memoizedState;case 5:case 27:var s=lD;if(i?c0(i):s.stateNode.complete){lM=0,lI=null;var c=s.sibling;if(null!==c)lD=c;else{var u=s.return;null!==u?(lD=u,sx(u)):lD=null}break n}}lM=0,lI=null,sy(e,n,a,5);break;case 6:lM=0,lI=null,sy(e,n,a,6);break;case 8:sc(),lq=6;break e;default:throw Error(l(462))}}for(;null!==lD&&!en();)sv(lD);break}catch(n){sd(e,n)}return(rH=rI=null,L.H=r,L.A=o,lR=t,null!==lD)?0:(lN=null,lB=0,t2(),lq)}(e,n):sm(e,n,!0),a=r;;){if(0===o)lF&&!r&&sl(e,n,0,!1);else{if(t=e.current.alternate,a&&!function(e){for(var n=e;;){var t=n.tag;if((0===t||11===t||15===t)&&16384&n.flags&&null!==(t=n.updateQueue)&&null!==(t=t.stores))for(var r=0;r<t.length;r++){var o=t[r],a=o.getSnapshot;o=o.value;try{if(!tO(a(),o))return!1}catch(e){return!1}}if(t=n.child,16384&n.subtreeFlags&&null!==t)t.return=n,n=t;else{if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return!0;n=n.return}n.sibling.return=n.return,n=n.sibling}}return!0}(t)){o=sm(e,n,!1),a=!1;continue}if(2===o){if(a=n,e.errorRecoveryDisabledLanes&a)var i=0;else i=0!=(i=-0x20000001&e.pendingLanes)?i:0x20000000&i?0x20000000:0;if(0!==i){n=i;e:{o=lK;var s=e.current.memoizedState.isDehydrated;if(s&&(su(e,i).flags|=256),2!==(i=sm(e,i,!1))){if(lU&&!s){e.errorRecoveryDisabledLanes|=a,l$|=a,o=4;break e}a=lQ,lQ=o,null!==a&&(null===lQ?lQ=a:lQ.push.apply(lQ,a))}o=i}if(a=!1,2!==o)continue}}if(1===o){su(e,0),sl(e,n,0,!0);break}e:{switch(r=e,a=o){case 0:case 1:throw Error(l(345));case 4:if((4194048&n)!==n)break;case 6:sl(r,n,lY,!lH);break e;case 2:lQ=null;break;case 3:case 5:break;default:throw Error(l(329))}if((0x3c00000&n)===n&&10<(o=lJ+300-er())){if(sl(r,n,lY,!lH),0!==ew(r,0,!0))break e;r.timeoutHandle=cv(si.bind(null,r,t,lQ,l1,lG,n,lY,l$,lX,lH,a,2,-0,0),o);break e}si(r,t,lQ,l1,lG,n,lY,l$,lX,lH,a,0,-0,0)}}break}sU(e)}function si(e,n,t,r,o,a,i,s,c,u,d,f,p,h){if(e.timeoutHandle=-1,(8192&(f=n.subtreeFlags)||0x1002000==(0x1002000&f))&&(c1={stylesheets:null,count:0,unsuspend:nm},lS(n),null!==(f=function(){if(null===c1)throw Error(l(475));var e=c1;return e.stylesheets&&0===e.count&&c5(e,e.stylesheets),0<e.count?function(n){var t=setTimeout(function(){if(e.stylesheets&&c5(e,e.stylesheets),e.unsuspend){var n=e.unsuspend;e.unsuspend=null,n()}},6e4);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(t)}}:null}()))){e.cancelPendingCommit=f(sj.bind(null,e,n,a,t,r,o,i,s,c,d,1,p,h)),sl(e,a,i,!u);return}sj(e,n,a,t,r,o,i,s,c)}function sl(e,n,t,r){n&=~lZ,n&=~l$,e.suspendedLanes|=n,e.pingedLanes&=~n,r&&(e.warmLanes|=n),r=e.expirationTimes;for(var o=n;0<o;){var a=31-eg(o),i=1<<a;r[a]=-1,o&=~i}0!==t&&eS(e,t,n)}function ss(){return 0!=(6&lR)||(sV(0,!1),!1)}function sc(){if(null!==lD){if(0===lM)var e=lD.return;else e=lD,rH=rI=null,at(e),of=null,op=0,e=lD;for(;null!==e;)iJ(e.alternate,e),e=e.return;lD=null}}function su(e,n){var t=e.timeoutHandle;-1!==t&&(e.timeoutHandle=-1,cb(t)),null!==(t=e.cancelPendingCommit)&&(e.cancelPendingCommit=null,t()),sc(),lN=e,lD=t=rt(e.current,null),lB=n,lM=0,lI=null,lH=!1,lF=ej(e,n),lU=!1,lX=lY=lZ=l$=lW=lq=0,lQ=lK=null,lG=!1,0!=(8&n)&&(n|=32&n);var r=e.entangledLanes;if(0!==r)for(e=e.entanglements,r&=n;0<r;){var o=31-eg(r),a=1<<o;n|=e[o],r&=~a}return lV=n,t2(),t}function sd(e,n){oY=null,L.H=ie,n===or||n===oa?(n=ou(),lM=3):n===oo?(n=ou(),lM=4):lM=n===iy?8:null!==n&&\"object\"==typeof n&&\"function\"==typeof n.then?6:1,lI=n,null===lD&&(lq=1,ih(e,ru(n,e.current)))}function sf(){var e=oM.current;return null===e||((4194048&lB)===lB?null===oI:((0x3c00000&lB)===lB||0!=(0x20000000&lB))&&e===oI)}function sp(){var e=L.H;return L.H=ie,null===e?ie:e}function sh(){var e=L.A;return L.A=lL,e}function sg(){lq=4,lH||(4194048&lB)!==lB&&null!==oM.current||(lF=!0),0==(0x7ffffff&lW)&&0==(0x7ffffff&l$)||null===lN||sl(lN,lB,lY,!1)}function sm(e,n,t){var r=lR;lR|=2;var o=sp(),a=sh();(lN!==e||lB!==n)&&(l1=null,su(e,n)),n=!1;var i=lq;e:for(;;)try{if(0!==lM&&null!==lD){var l=lD,s=lI;switch(lM){case 8:sc(),i=6;break e;case 3:case 2:case 9:case 6:null===oM.current&&(n=!0);var c=lM;if(lM=0,lI=null,sy(e,l,s,c),t&&lF){i=0;break e}break;default:c=lM,lM=0,lI=null,sy(e,l,s,c)}}(function(){for(;null!==lD;)sv(lD)})(),i=lq;break}catch(n){sd(e,n)}return n&&e.shellSuspendCounter++,rH=rI=null,lR=r,L.H=o,L.A=a,null===lD&&(lN=null,lB=0,t2()),i}function sv(e){var n=i$(e.alternate,e,lV);e.memoizedProps=e.pendingProps,null===n?sx(e):lD=n}function sb(e){var n=e,t=n.alternate;switch(n.tag){case 15:case 0:n=iz(t,n,n.pendingProps,n.type,void 0,lB);break;case 11:n=iz(t,n,n.pendingProps,n.type.render,n.ref,lB);break;case 5:at(n);default:iJ(t,n),n=i$(t,n=lD=rr(n,lV),lV)}e.memoizedProps=e.pendingProps,null===n?sx(e):lD=n}function sy(e,n,t,r){rH=rI=null,at(n),of=null,op=0;var o=n.return;try{if(function(e,n,t,r,o){if(t.flags|=32768,null!==r&&\"object\"==typeof r&&\"function\"==typeof r.then){if(null!==(n=t.alternate)&&rW(n,t,o,!0),null!==(t=oM.current)){switch(t.tag){case 31:case 13:return null===oI?sg():null===t.alternate&&0===lq&&(lq=3),t.flags&=-257,t.flags|=65536,t.lanes=o,r===oi?t.flags|=16384:(null===(n=t.updateQueue)?t.updateQueue=new Set([r]):n.add(r),sz(e,r,o)),!1;case 22:return t.flags|=65536,r===oi?t.flags|=16384:(null===(n=t.updateQueue)?(n={transitions:null,markerInstances:null,retryQueue:new Set([r])},t.updateQueue=n):null===(t=n.retryQueue)?n.retryQueue=new Set([r]):t.add(r),sz(e,r,o)),!1}throw Error(l(435,t.tag))}return sz(e,r,o),sg(),!1}if(rS)return null!==(n=oM.current)?(0==(65536&n.flags)&&(n.flags|=256),n.flags|=65536,n.lanes=o,r!==rP&&rB(ru(e=Error(l(422),{cause:r}),t))):(r!==rP&&rB(ru(n=Error(l(423),{cause:r}),t)),e=e.current.alternate,e.flags|=65536,o&=-o,e.lanes|=o,r=ru(r,t),o=im(e.stateNode,r,o),oS(e,o),4!==lq&&(lq=2)),!1;var a=Error(l(520),{cause:r});if(a=ru(a,t),null===lK?lK=[a]:lK.push(a),4!==lq&&(lq=2),null===n)return!0;r=ru(r,t),t=n;do{switch(t.tag){case 3:return t.flags|=65536,e=o&-o,t.lanes|=e,e=im(t.stateNode,r,e),oS(t,e),!1;case 1:if(n=t.type,a=t.stateNode,0==(128&t.flags)&&(\"function\"==typeof n.getDerivedStateFromError||null!==a&&\"function\"==typeof a.componentDidCatch&&(null===l2||!l2.has(a))))return t.flags|=65536,o&=-o,t.lanes|=o,ib(o=iv(o),e,t,r),oS(t,o),!1}t=t.return}while(null!==t);return!1}(e,o,n,t,lB)){lq=1,ih(e,ru(t,e.current)),lD=null;return}}catch(n){if(null!==o)throw lD=o,n;lq=1,ih(e,ru(t,e.current)),lD=null;return}32768&n.flags?(rS||1===r?e=!0:lF||0!=(0x20000000&lB)?e=!1:(lH=e=!0,(2===r||9===r||3===r||6===r)&&null!==(r=oM.current)&&13===r.tag&&(r.flags|=16384)),sw(n,e)):sx(n)}function sx(e){var n=e;do{if(0!=(32768&n.flags))return void sw(n,lH);e=n.return;var t=function(e,n,t){var r=n.pendingProps;switch(rk(n),n.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:case 1:return iG(n),null;case 3:return t=n.stateNode,r=null,null!==e&&(r=e.memoizedState.cache),n.memoizedState.cache!==r&&(n.flags|=2048),rU(r0),W(),t.pendingContext&&(t.context=t.pendingContext,t.pendingContext=null),(null===e||null===e.child)&&(rR(n)?iZ(n):null===e||e.memoizedState.isDehydrated&&0==(256&n.flags)||(n.flags|=1024,rD())),iG(n),null;case 26:var o=n.type,a=n.memoizedState;return null===e?(iZ(n),null!==a?(iG(n),iX(n,a)):(iG(n),iY(n,o,null,r,t))):a?a!==e.memoizedState?(iZ(n),iG(n),iX(n,a)):(iG(n),n.flags&=-0x1000001):((e=e.memoizedProps)!==r&&iZ(n),iG(n),iY(n,o,e,r,t)),null;case 27:if(Z(n),t=U.current,o=n.type,null!==e&&null!=n.stateNode)e.memoizedProps!==r&&iZ(n);else{if(!r){if(null===n.stateNode)throw Error(l(166));return iG(n),null}e=H.current,rR(n)?rL(n,e):(n.stateNode=e=cT(o,r,t),iZ(n))}return iG(n),null;case 5:if(Z(n),o=n.type,null!==e&&null!=n.stateNode)e.memoizedProps!==r&&iZ(n);else{if(!r){if(null===n.stateNode)throw Error(l(166));return iG(n),null}if(a=H.current,rR(n))rL(n,a);else{var i=cf(U.current);switch(a){case 1:a=i.createElementNS(\"http://www.w3.org/2000/svg\",o);break;case 2:a=i.createElementNS(\"http://www.w3.org/1998/Math/MathML\",o);break;default:switch(o){case\"svg\":a=i.createElementNS(\"http://www.w3.org/2000/svg\",o);break;case\"math\":a=i.createElementNS(\"http://www.w3.org/1998/Math/MathML\",o);break;case\"script\":(a=i.createElement(\"div\")).innerHTML=\"<script><\\/script>\",a=a.removeChild(a.firstChild);break;case\"select\":a=\"string\"==typeof r.is?i.createElement(\"select\",{is:r.is}):i.createElement(\"select\"),r.multiple?a.multiple=!0:r.size&&(a.size=r.size);break;default:a=\"string\"==typeof r.is?i.createElement(o,{is:r.is}):i.createElement(o)}}a[eN]=n,a[eD]=r;e:for(i=n.child;null!==i;){if(5===i.tag||6===i.tag)a.appendChild(i.stateNode);else if(4!==i.tag&&27!==i.tag&&null!==i.child){i.child.return=i,i=i.child;continue}if(i===n)break;for(;null===i.sibling;){if(null===i.return||i.return===n)break e;i=i.return}i.sibling.return=i.return,i=i.sibling}switch(n.stateNode=a,cc(a,o,r),o){case\"button\":case\"input\":case\"select\":case\"textarea\":r=!!r.autoFocus;break;case\"img\":r=!0;break;default:r=!1}r&&iZ(n)}}return iG(n),iY(n,n.type,null===e?null:e.memoizedProps,n.pendingProps,t),null;case 6:if(e&&null!=n.stateNode)e.memoizedProps!==r&&iZ(n);else{if(\"string\"!=typeof r&&null===n.stateNode)throw Error(l(166));if(e=U.current,rR(n)){if(e=n.stateNode,t=n.memoizedProps,r=null,null!==(o=rO))switch(o.tag){case 27:case 5:r=o.memoizedProps}e[eN]=n,(e=!!(e.nodeValue===t||null!==r&&!0===r.suppressHydrationWarning||ci(e.nodeValue,t)))||rz(n,!0)}else(e=cf(e).createTextNode(r))[eN]=n,n.stateNode=e}return iG(n),null;case 31:if(t=n.memoizedState,null===e||null!==e.memoizedState){if(r=rR(n),null!==t){if(null===e){if(!r)throw Error(l(318));if(!(e=null!==(e=n.memoizedState)?e.dehydrated:null))throw Error(l(557));e[eN]=n}else rN(),0==(128&n.flags)&&(n.memoizedState=null),n.flags|=4;iG(n),e=!1}else t=rD(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=t),e=!0;if(!e){if(256&n.flags)return oq(n),n;return oq(n),null}if(0!=(128&n.flags))throw Error(l(558))}return iG(n),null;case 13:if(r=n.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(o=rR(n),null!==r&&null!==r.dehydrated){if(null===e){if(!o)throw Error(l(318));if(!(o=null!==(o=n.memoizedState)?o.dehydrated:null))throw Error(l(317));o[eN]=n}else rN(),0==(128&n.flags)&&(n.memoizedState=null),n.flags|=4;iG(n),o=!1}else o=rD(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o){if(256&n.flags)return oq(n),n;return oq(n),null}}if(oq(n),0!=(128&n.flags))return n.lanes=t,n;return t=null!==r,e=null!==e&&null!==e.memoizedState,t&&(r=n.child,o=null,null!==r.alternate&&null!==r.alternate.memoizedState&&null!==r.alternate.memoizedState.cachePool&&(o=r.alternate.memoizedState.cachePool.pool),a=null,null!==r.memoizedState&&null!==r.memoizedState.cachePool&&(a=r.memoizedState.cachePool.pool),a!==o&&(r.flags|=2048)),t!==e&&t&&(n.child.flags|=8192),iK(n,n.updateQueue),iG(n),null;case 4:return W(),null===e&&s6(n.stateNode.containerInfo),iG(n),null;case 10:return rU(n.type),iG(n),null;case 19:if(M(oW),null===(r=n.memoizedState))return iG(n),null;if(o=0!=(128&n.flags),null===(a=r.rendering))if(o)iQ(r,!1);else{if(0!==lq||null!==e&&0!=(128&e.flags))for(e=n.child;null!==e;){if(null!==(a=o$(e))){for(n.flags|=128,iQ(r,!1),n.updateQueue=e=a.updateQueue,iK(n,e),n.subtreeFlags=0,e=t,t=n.child;null!==t;)rr(t,e),t=t.sibling;return I(oW,1&oW.current|2),rS&&rx(n,r.treeForkCount),n.child}e=e.sibling}null!==r.tail&&er()>l0&&(n.flags|=128,o=!0,iQ(r,!1),n.lanes=4194304)}else{if(!o)if(null!==(e=o$(a))){if(n.flags|=128,o=!0,n.updateQueue=e=e.updateQueue,iK(n,e),iQ(r,!0),null===r.tail&&\"hidden\"===r.tailMode&&!a.alternate&&!rS)return iG(n),null}else 2*er()-r.renderingStartTime>l0&&0x20000000!==t&&(n.flags|=128,o=!0,iQ(r,!1),n.lanes=4194304);r.isBackwards?(a.sibling=n.child,n.child=a):(null!==(e=r.last)?e.sibling=a:n.child=a,r.last=a)}if(null!==r.tail)return e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=er(),e.sibling=null,t=oW.current,I(oW,o?1&t|2:1&t),rS&&rx(n,r.treeForkCount),e;return iG(n),null;case 22:case 23:return oq(n),oB(),r=null!==n.memoizedState,null!==e?null!==e.memoizedState!==r&&(n.flags|=8192):r&&(n.flags|=8192),r?0!=(0x20000000&t)&&0==(128&n.flags)&&(iG(n),6&n.subtreeFlags&&(n.flags|=8192)):iG(n),null!==(t=n.updateQueue)&&iK(n,t.retryQueue),t=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(t=e.memoizedState.cachePool.pool),r=null,null!==n.memoizedState&&null!==n.memoizedState.cachePool&&(r=n.memoizedState.cachePool.pool),r!==t&&(n.flags|=2048),null!==e&&M(r7),null;case 24:return t=null,null!==e&&(t=e.memoizedState.cache),n.memoizedState.cache!==t&&(n.flags|=2048),rU(r0),iG(n),null;case 25:case 30:return null}throw Error(l(156,n.tag))}(n.alternate,n,lV);if(null!==t){lD=t;return}if(null!==(n=n.sibling)){lD=n;return}lD=n=e}while(null!==n);0===lq&&(lq=5)}function sw(e,n){do{var t=function(e,n){switch(rk(n),n.tag){case 1:return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 3:return rU(r0),W(),0!=(65536&(e=n.flags))&&0==(128&e)?(n.flags=-65537&e|128,n):null;case 26:case 27:case 5:return Z(n),null;case 31:if(null!==n.memoizedState){if(oq(n),null===n.alternate)throw Error(l(340));rN()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 13:if(oq(n),null!==(e=n.memoizedState)&&null!==e.dehydrated){if(null===n.alternate)throw Error(l(340));rN()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 19:return M(oW),null;case 4:return W(),null;case 10:return rU(n.type),null;case 22:case 23:return oq(n),oB(),null!==e&&M(r7),65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 24:return rU(r0),null;default:return null}}(e.alternate,e);if(null!==t){t.flags&=32767,lD=t;return}if(null!==(t=e.return)&&(t.flags|=32768,t.subtreeFlags=0,t.deletions=null),!n&&null!==(e=e.sibling)){lD=e;return}lD=e=t}while(null!==e);lq=6,lD=null}function sj(e,n,t,r,o,a,i,s,c){e.cancelPendingCommit=null;do sS();while(0!==l4);if(0!=(6&lR))throw Error(l(327));if(null!==n){if(n===e.current)throw Error(l(177));if(!function(e,n,t,r,o,a){var i=e.pendingLanes;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=t,e.entangledLanes&=t,e.errorRecoveryDisabledLanes&=t,e.shellSuspendCounter=0;var l=e.entanglements,s=e.expirationTimes,c=e.hiddenUpdates;for(t=i&~t;0<t;){var u=31-eg(t),d=1<<u;l[u]=0,s[u]=-1;var f=c[u];if(null!==f)for(c[u]=null,u=0;u<f.length;u++){var p=f[u];null!==p&&(p.lane&=-0x20000001)}t&=~d}0!==r&&eS(e,r,0),0!==a&&0===o&&0!==e.tag&&(e.suspendedLanes|=a&~(i&~n))}(e,t,a=n.lanes|n.childLanes|t1,i,s,c),e===lN&&(lD=lN=null,lB=0),l3=n,l5=e,l6=t,l9=a,l8=o,l7=r,0!=(10256&n.subtreeFlags)||0!=(10256&n.flags)?(e.callbackNode=null,e.callbackPriority=0,J(el,function(){return sE(!0),null})):(e.callbackNode=null,e.callbackPriority=0),r=0!=(13878&n.flags),0!=(13878&n.subtreeFlags)||r){r=L.T,L.T=null,o=T.p,T.p=2,i=lR,lR|=4;try{!function(e,n){if(e=e.containerInfo,cu=ur,tP(e=t_(e))){if(\"selectionStart\"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(t=(t=e.ownerDocument)&&t.defaultView||window).getSelection&&t.getSelection();if(r&&0!==r.rangeCount){t=r.anchorNode;var o,a=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{t.nodeType,i.nodeType}catch(e){t=null;break e}var s=0,c=-1,u=-1,d=0,f=0,p=e,h=null;n:for(;;){for(;p!==t||0!==a&&3!==p.nodeType||(c=s+a),p!==i||0!==r&&3!==p.nodeType||(u=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(o=p.firstChild);)h=p,p=o;for(;;){if(p===e)break n;if(h===t&&++d===a&&(c=s),h===i&&++f===r&&(u=s),null!==(o=p.nextSibling))break;h=(p=h).parentNode}p=o}t=-1===c||-1===u?null:{start:c,end:u}}else t=null}t=t||{start:0,end:0}}else t=null;for(cd={focusedElem:e,selectionRange:t},ur=!1,li=n;null!==li;)if(e=(n=li).child,0!=(1024&n.subtreeFlags)&&null!==e)e.return=n,li=e;else for(;null!==li;){switch(i=(n=li).alternate,e=n.flags,n.tag){case 0:case 11:case 15:case 5:case 26:case 27:case 6:case 4:case 17:break;case 1:if(0!=(1024&e)&&null!==i){e=void 0,t=n,a=i.memoizedProps,i=i.memoizedState,r=t.stateNode;try{var g=ic(t.type,a);e=r.getSnapshotBeforeUpdate(g,i),r.__reactInternalSnapshotBeforeUpdate=e}catch(e){sP(t,t.return,e)}}break;case 3:if(0!=(1024&e)){if(9===(t=(e=n.stateNode.containerInfo).nodeType))cO(e);else if(1===t)switch(e.nodeName){case\"HEAD\":case\"HTML\":case\"BODY\":cO(e);break;default:e.textContent=\"\"}}break;default:if(0!=(1024&e))throw Error(l(163))}if(null!==(e=n.sibling)){e.return=n.return,li=e;break}li=n.return}}(e,n,t)}finally{lR=i,T.p=o,L.T=r}}l4=1,sk(),sA(),sO()}}function sk(){if(1===l4){l4=0;var e=l5,n=l3,t=0!=(13878&n.flags);if(0!=(13878&n.subtreeFlags)||t){t=L.T,L.T=null;var r=T.p;T.p=2;var o=lR;lR|=4;try{lv(n,e);var a=cd,i=t_(e.containerInfo),l=a.focusedElem,s=a.selectionRange;if(i!==l&&l&&l.ownerDocument&&function e(n,t){return!!n&&!!t&&(n===t||(!n||3!==n.nodeType)&&(t&&3===t.nodeType?e(n,t.parentNode):\"contains\"in n?n.contains(t):!!n.compareDocumentPosition&&!!(16&n.compareDocumentPosition(t))))}(l.ownerDocument.documentElement,l)){if(null!==s&&tP(l)){var c=s.start,u=s.end;if(void 0===u&&(u=c),\"selectionStart\"in l)l.selectionStart=c,l.selectionEnd=Math.min(u,l.value.length);else{var d=l.ownerDocument||document,f=d&&d.defaultView||window;if(f.getSelection){var p=f.getSelection(),h=l.textContent.length,g=Math.min(s.start,h),m=void 0===s.end?g:Math.min(s.end,h);!p.extend&&g>m&&(i=m,m=g,g=i);var v=tE(l,g),b=tE(l,m);if(v&&b&&(1!==p.rangeCount||p.anchorNode!==v.node||p.anchorOffset!==v.offset||p.focusNode!==b.node||p.focusOffset!==b.offset)){var y=d.createRange();y.setStart(v.node,v.offset),p.removeAllRanges(),g>m?(p.addRange(y),p.extend(b.node,b.offset)):(y.setEnd(b.node,b.offset),p.addRange(y))}}}}for(d=[],p=l;p=p.parentNode;)1===p.nodeType&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(\"function\"==typeof l.focus&&l.focus(),l=0;l<d.length;l++){var x=d[l];x.element.scrollLeft=x.left,x.element.scrollTop=x.top}}ur=!!cu,cd=cu=null}finally{lR=o,T.p=r,L.T=t}}e.current=n,l4=2}}function sA(){if(2===l4){l4=0;var e=l5,n=l3,t=0!=(8772&n.flags);if(0!=(8772&n.subtreeFlags)||t){t=L.T,L.T=null;var r=T.p;T.p=2;var o=lR;lR|=4;try{ll(e,n.alternate,n)}finally{lR=o,T.p=r,L.T=t}}l4=3}}function sO(){if(4===l4||3===l4){l4=0,et();var e=l5,n=l3,t=l6,r=l7;0!=(10256&n.subtreeFlags)||0!=(10256&n.flags)?l4=5:(l4=0,l3=l5=null,sC(e,e.pendingLanes));var o=e.pendingLanes;if(0===o&&(l2=null),ez(t),n=n.stateNode,ep&&\"function\"==typeof ep.onCommitFiberRoot)try{ep.onCommitFiberRoot(ef,n,void 0,128==(128&n.current.flags))}catch(e){}if(null!==r){n=L.T,o=T.p,T.p=2,L.T=null;try{for(var a=e.onRecoverableError,i=0;i<r.length;i++){var l=r[i];a(l.value,{componentStack:l.stack})}}finally{L.T=n,T.p=o}}0!=(3&l6)&&sS(),sU(e),o=e.pendingLanes,0!=(4194090&t)&&0!=(42&o)?e===sn?se++:(se=0,sn=e):se=0,sV(0,!1)}}function sC(e,n){0==(e.pooledCacheLanes&=n)&&null!=(n=e.pooledCache)&&(e.pooledCache=null,r2(n))}function sS(e){return sk(),sA(),sO(),sE(e)}function sE(){if(5!==l4)return!1;var e=l5,n=l9;l9=0;var t=ez(l6),r=L.T,o=T.p;try{T.p=32>t?32:t,L.T=null,t=l8,l8=null;var a=l5,i=l6;if(l4=0,l3=l5=null,l6=0,0!=(6&lR))throw Error(l(331));var s=lR;if(lR|=4,lP(a.current),lk(a,a.current,i,t),lR=s,sV(0,!1),ep&&\"function\"==typeof ep.onPostCommitFiberRoot)try{ep.onPostCommitFiberRoot(ef,a)}catch(e){}return!0}finally{T.p=o,L.T=r,sC(e,n)}}function s_(e,n,t){n=ru(t,n),n=im(e.stateNode,n,2),null!==(e=oO(e,n,2))&&(eC(e,2),sU(e))}function sP(e,n,t){if(3===e.tag)s_(e,e,t);else for(;null!==n;){if(3===n.tag){s_(n,e,t);break}if(1===n.tag){var r=n.stateNode;if(\"function\"==typeof n.type.getDerivedStateFromError||\"function\"==typeof r.componentDidCatch&&(null===l2||!l2.has(r))){e=ru(t,e),null!==(r=oO(n,t=iv(2),2))&&(ib(t,r,n,e),eC(r,2),sU(r));break}}n=n.return}}function sz(e,n,t){var r=e.pingCache;if(null===r){r=e.pingCache=new lT;var o=new Set;r.set(n,o)}else void 0===(o=r.get(n))&&(o=new Set,r.set(n,o));o.has(t)||(lU=!0,o.add(t),e=sL.bind(null,e,n,t),n.then(e,e))}function sL(e,n,t){var r=e.pingCache;null!==r&&r.delete(n),e.pingedLanes|=e.suspendedLanes&t,e.warmLanes&=~t,lN===e&&(lB&t)===t&&(4===lq||3===lq&&(0x3c00000&lB)===lB&&300>er()-lJ?0==(2&lR)&&su(e,0):lZ|=t,lX===lB&&(lX=0)),sU(e)}function sT(e,n){0===n&&(n=eA()),null!==(e=t3(e,n))&&(eC(e,n),sU(e))}function sR(e){var n=e.memoizedState,t=0;null!==n&&(t=n.retryLane),sT(e,t)}function sN(e,n){var t=0;switch(e.tag){case 31:case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(t=o.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(l(314))}null!==r&&r.delete(n),sT(e,t)}var sD=null,sB=null,sM=!1,sI=!1,sH=!1,sF=0;function sU(e){e!==sB&&null===e.next&&(null===sB?sD=sB=e:sB=sB.next=e),sI=!0,sM||(sM=!0,cx(function(){0!=(6&lR)?J(ea,sq):sW()}))}function sV(e,n){if(!sH&&sI){sH=!0;do for(var t=!1,r=sD;null!==r;){if(!n)if(0!==e){var o=r.pendingLanes;if(0===o)var a=0;else{var i=r.suspendedLanes,l=r.pingedLanes;a=0xc000095&(a=(1<<31-eg(42|e)+1)-1&(o&~(i&~l)))?0xc000095&a|1:a?2|a:0}0!==a&&(t=!0,sY(r,a))}else a=lB,0==(3&(a=ew(r,r===lN?a:0,null!==r.cancelPendingCommit||-1!==r.timeoutHandle)))||ej(r,a)||(t=!0,sY(r,a));r=r.next}while(t);sH=!1}}function sq(){sW()}function sW(){sI=sM=!1;var e,n=0;0===sF||((e=window.event)&&\"popstate\"===e.type?e===cm||(cm=e,0):(cm=null,1))||(n=sF);for(var t=er(),r=null,o=sD;null!==o;){var a=o.next,i=s$(o,t);0===i?(o.next=null,null===r?sD=a:r.next=a,null===a&&(sB=r)):(r=o,(0!==n||0!=(3&i))&&(sI=!0)),o=a}0!==l4&&5!==l4||sV(n,!1),0!==sF&&(sF=0)}function s$(e,n){for(var t=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=-0x3c00001&e.pendingLanes;0<a;){var i=31-eg(a),l=1<<i,s=o[i];-1===s?(0==(l&t)||0!=(l&r))&&(o[i]=function(e,n){switch(e){case 1:case 2:case 4:case 8:case 64:return n+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return n+5e3;default:return -1}}(l,n)):s<=n&&(e.expiredLanes|=l),a&=~l}if(n=lN,t=lB,t=ew(e,e===n?t:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle),r=e.callbackNode,0===t||e===n&&(2===lM||9===lM)||null!==e.cancelPendingCommit)return null!==r&&null!==r&&ee(r),e.callbackNode=null,e.callbackPriority=0;if(0==(3&t)||ej(e,t)){if((n=t&-t)===e.callbackPriority)return n;switch(null!==r&&ee(r),ez(t)){case 2:case 8:t=ei;break;case 32:default:t=el;break;case 0x10000000:t=ec}return t=J(t,r=sZ.bind(null,e)),e.callbackPriority=n,e.callbackNode=t,n}return null!==r&&null!==r&&ee(r),e.callbackPriority=2,e.callbackNode=null,2}function sZ(e,n){if(0!==l4&&5!==l4)return e.callbackNode=null,e.callbackPriority=0,null;var t=e.callbackNode;if(sS(!0)&&e.callbackNode!==t)return null;var r=lB;return 0===(r=ew(e,e===lN?r:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle))?null:(sa(e,r,n),s$(e,er()),null!=e.callbackNode&&e.callbackNode===t?sZ.bind(null,e):null)}function sY(e,n){if(sS())return null;sa(e,n,!0)}function sX(){if(0===sF){var e=r3;sF=0!==e?e:ek()}return sF}function sK(e){return null==e||\"symbol\"==typeof e||\"boolean\"==typeof e?null:\"function\"==typeof e?e:ng(\"\"+e)}function sQ(e,n){var t=n.ownerDocument.createElement(\"input\");return t.name=n.name,t.value=n.value,e.id&&t.setAttribute(\"form\",e.id),n.parentNode.insertBefore(t,n),e=new FormData(e),t.parentNode.removeChild(t),e}for(var sG=0;sG<tK.length;sG++){var sJ=tK[sG];tQ(sJ.toLowerCase(),\"on\"+(sJ[0].toUpperCase()+sJ.slice(1)))}tQ(tU,\"onAnimationEnd\"),tQ(tV,\"onAnimationIteration\"),tQ(tq,\"onAnimationStart\"),tQ(\"dblclick\",\"onDoubleClick\"),tQ(\"focusin\",\"onFocus\"),tQ(\"focusout\",\"onBlur\"),tQ(tW,\"onTransitionRun\"),tQ(t$,\"onTransitionStart\"),tQ(tZ,\"onTransitionCancel\"),tQ(tY,\"onTransitionEnd\"),eG(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]),eG(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]),eG(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]),eG(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]),eQ(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \")),eQ(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \")),eQ(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]),eQ(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \")),eQ(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")),eQ(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var s0=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),s1=new Set(\"beforetoggle cancel close invalid load scroll scrollend toggle\".split(\" \").concat(s0));function s2(e,n){n=0!=(4&n);for(var t=0;t<e.length;t++){var r=e[t],o=r.event;r=r.listeners;e:{var a=void 0;if(n)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,c=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(e){tG(e)}o.currentTarget=null,a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,c=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(e){tG(e)}o.currentTarget=null,a=s}}}}function s4(e,n){var t=n[eM];void 0===t&&(t=n[eM]=new Set);var r=e+\"__bubble\";t.has(r)||(s9(n,e,2,!1),t.add(r))}function s5(e,n,t){var r=0;n&&(r|=4),s9(t,e,r,n)}var s3=\"_reactListening\"+Math.random().toString(36).slice(2);function s6(e){if(!e[s3]){e[s3]=!0,eX.forEach(function(n){\"selectionchange\"!==n&&(s1.has(n)||s5(n,!1,e),s5(n,!0,e))});var n=9===e.nodeType?e:e.ownerDocument;null===n||n[s3]||(n[s3]=!0,s5(\"selectionchange\",!1,n))}}function s9(e,n,t,r){switch(uu(n)){case 2:var o=uo;break;case 8:o=ua;break;default:o=ui}t=o.bind(null,n,t,e),o=void 0,nC&&(\"touchstart\"===n||\"touchmove\"===n||\"wheel\"===n)&&(o=!0),r?void 0!==o?e.addEventListener(n,t,{capture:!0,passive:o}):e.addEventListener(n,t,!0):void 0!==o?e.addEventListener(n,t,{passive:o}):e.addEventListener(n,t,!1)}function s8(e,n,t,r,o){var a=r;if(0==(1&n)&&0==(2&n)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o)break;if(4===i)for(i=r.return;null!==i;){var c=i.tag;if((3===c||4===c)&&i.stateNode.containerInfo===o)return;i=i.return}for(;null!==l;){if(null===(i=eq(l)))return;if(5===(c=i.tag)||6===c||26===c||27===c){r=a=i;continue e}l=l.parentNode}}r=r.return}nk(function(){var r=a,o=nb(t),i=[];e:{var l=tX.get(e);if(void 0!==l){var c=nU,u=e;switch(e){case\"keypress\":if(0===nL(t))break e;case\"keydown\":case\"keyup\":c=n4;break;case\"focusin\":u=\"focus\",c=nY;break;case\"focusout\":u=\"blur\",c=nY;break;case\"beforeblur\":case\"afterblur\":c=nY;break;case\"click\":if(2===t.button)break e;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":c=n$;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":c=nZ;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":c=n3;break;case tU:case tV:case tq:c=nX;break;case tY:c=n6;break;case\"scroll\":case\"scrollend\":c=nq;break;case\"wheel\":c=n9;break;case\"copy\":case\"cut\":case\"paste\":c=nK;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":c=n5;break;case\"toggle\":case\"beforetoggle\":c=n8}var d=0!=(4&n),f=!d&&(\"scroll\"===e||\"scrollend\"===e),p=d?null!==l?l+\"Capture\":null:l;d=[];for(var h,g=r;null!==g;){var m=g;if(h=m.stateNode,5!==(m=m.tag)&&26!==m&&27!==m||null===h||null===p||null!=(m=nA(g,p))&&d.push(s7(g,m,h)),f)break;g=g.return}0<d.length&&(l=new c(l,u,null,t,o),i.push({event:l,listeners:d}))}}if(0==(7&n)){if((l=\"mouseover\"===e||\"pointerover\"===e,c=\"mouseout\"===e||\"pointerout\"===e,!(l&&t!==nv&&(u=t.relatedTarget||t.fromElement)&&(eq(u)||u[eB])))&&(c||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,c?(u=t.relatedTarget||t.toElement,c=r,null!==(u=u?eq(u):null)&&(f=s(u),d=u.tag,u!==f||5!==d&&27!==d&&6!==d)&&(u=null)):(c=null,u=r),c!==u)){if(d=n$,m=\"onMouseLeave\",p=\"onMouseEnter\",g=\"mouse\",(\"pointerout\"===e||\"pointerover\"===e)&&(d=n5,m=\"onPointerLeave\",p=\"onPointerEnter\",g=\"pointer\"),f=null==c?l:e$(c),h=null==u?l:e$(u),(l=new d(m,g+\"leave\",c,t,o)).target=f,l.relatedTarget=h,m=null,eq(o)===r&&((d=new d(p,g+\"enter\",u,t,o)).target=h,d.relatedTarget=f,m=d),f=m,c&&u)n:{for(d=cn,p=c,g=u,h=0,m=p;m;m=d(m))h++;m=0;for(var v,b=g;b;b=d(b))m++;for(;0<h-m;)p=d(p),h--;for(;0<m-h;)g=d(g),m--;for(;h--;){if(p===g||null!==g&&p===g.alternate){d=p;break n}p=d(p),g=d(g)}d=null}else d=null;null!==c&&ct(i,l,c,d,!1),null!==u&&null!==f&&ct(i,f,u,d,!0)}e:{if(\"select\"===(c=(l=r?e$(r):window).nodeName&&l.nodeName.toLowerCase())||\"input\"===c&&\"file\"===l.type)var y=tg;else if(tc(l))if(tm)y=tA;else{y=tj;var x=tw}else(c=l.nodeName)&&\"input\"===c.toLowerCase()&&(\"checkbox\"===l.type||\"radio\"===l.type)?y=tk:r&&nf(r.elementType)&&(y=tg);if(y&&(y=y(e,r))){tu(i,y,t,o);break e}x&&x(e,l,r),\"focusout\"===e&&r&&\"number\"===l.type&&null!=r.memoizedProps.value&&no(l,\"number\",l.value)}switch(x=r?e$(r):window,e){case\"focusin\":(tc(x)||\"true\"===x.contentEditable)&&(tL=x,tT=r,tR=null);break;case\"focusout\":tR=tT=tL=null;break;case\"mousedown\":tN=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":tN=!1,tD(i,t,o);break;case\"selectionchange\":if(tz)break;case\"keydown\":case\"keyup\":tD(i,t,o)}if(te)n:{switch(e){case\"compositionstart\":var w=\"onCompositionStart\";break n;case\"compositionend\":w=\"onCompositionEnd\";break n;case\"compositionupdate\":w=\"onCompositionUpdate\";break n}w=void 0}else tl?ta(e,t)&&(w=\"onCompositionEnd\"):\"keydown\"===e&&229===t.keyCode&&(w=\"onCompositionStart\");w&&(tr&&\"ko\"!==t.locale&&(tl||\"onCompositionStart\"!==w?\"onCompositionEnd\"===w&&tl&&(v=nz()):(n_=\"value\"in(nE=o)?nE.value:nE.textContent,tl=!0)),0<(x=ce(r,w)).length&&(w=new nQ(w,e,null,t,o),i.push({event:w,listeners:x}),v?w.data=v:null!==(v=ti(t))&&(w.data=v))),(v=tt?function(e,n){switch(e){case\"compositionend\":return ti(n);case\"keypress\":if(32!==n.which)return null;return to=!0,\" \";case\"textInput\":return\" \"===(e=n.data)&&to?null:e;default:return null}}(e,t):function(e,n){if(tl)return\"compositionend\"===e||!te&&ta(e,n)?(e=nz(),nP=n_=nE=null,tl=!1,e):null;switch(e){case\"paste\":default:return null;case\"keypress\":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1<n.char.length)return n.char;if(n.which)return String.fromCharCode(n.which)}return null;case\"compositionend\":return tr&&\"ko\"!==n.locale?null:n.data}}(e,t))&&0<(w=ce(r,\"onBeforeInput\")).length&&(x=new nQ(\"onBeforeInput\",\"beforeinput\",null,t,o),i.push({event:x,listeners:w}),x.data=v);var j=e;if(\"submit\"===j&&r&&r.stateNode===o){var k=sK((o[eD]||null).action),A=t.submitter;A&&null!==(j=(j=A[eD]||null)?sK(j.formAction):A.getAttribute(\"formAction\"))&&(k=j,A=null);var O=new nU(\"action\",\"action\",null,t,o);i.push({event:O,listeners:[{instance:null,listener:function(){if(t.defaultPrevented){if(0!==sF){var e=A?sQ(o,A):new FormData(o);aK(r,{pending:!0,data:e,method:o.method,action:k},null,e)}}else\"function\"==typeof k&&(O.preventDefault(),aK(r,{pending:!0,data:e=A?sQ(o,A):new FormData(o),method:o.method,action:k},k,e))},currentTarget:o}]})}}s2(i,n)})}function s7(e,n,t){return{instance:e,listener:n,currentTarget:t}}function ce(e,n){for(var t=n+\"Capture\",r=[];null!==e;){var o=e,a=o.stateNode;if(5!==(o=o.tag)&&26!==o&&27!==o||null===a||(null!=(o=nA(e,t))&&r.unshift(s7(e,o,a)),null!=(o=nA(e,n))&&r.push(s7(e,o,a))),3===e.tag)return r;e=e.return}return[]}function cn(e){if(null===e)return null;do e=e.return;while(e&&5!==e.tag&&27!==e.tag);return e||null}function ct(e,n,t,r,o){for(var a=n._reactName,i=[];null!==t&&t!==r;){var l=t,s=l.alternate,c=l.stateNode;if(l=l.tag,null!==s&&s===r)break;5!==l&&26!==l&&27!==l||null===c||(s=c,o?null!=(c=nA(t,a))&&i.unshift(s7(t,c,s)):o||null!=(c=nA(t,a))&&i.push(s7(t,c,s))),t=t.return}0!==i.length&&e.push({event:n,listeners:i})}var cr=/\\r\\n?/g,co=/\\u0000|\\uFFFD/g;function ca(e){return(\"string\"==typeof e?e:\"\"+e).replace(cr,\"\\n\").replace(co,\"\")}function ci(e,n){return n=ca(n),ca(e)===n}function cl(e,n,t,r,o,a){switch(t){case\"children\":\"string\"==typeof r?\"body\"===n||\"textarea\"===n&&\"\"===r||ns(e,r):(\"number\"==typeof r||\"bigint\"==typeof r)&&\"body\"!==n&&ns(e,\"\"+r);break;case\"className\":e4(e,\"class\",r);break;case\"tabIndex\":e4(e,\"tabindex\",r);break;case\"dir\":case\"role\":case\"viewBox\":case\"width\":case\"height\":e4(e,t,r);break;case\"style\":nd(e,r,a);break;case\"data\":if(\"object\"!==n){e4(e,\"data\",r);break}case\"src\":case\"href\":if(\"\"===r&&(\"a\"!==n||\"href\"!==t)||null==r||\"function\"==typeof r||\"symbol\"==typeof r||\"boolean\"==typeof r){e.removeAttribute(t);break}r=ng(\"\"+r),e.setAttribute(t,r);break;case\"action\":case\"formAction\":if(\"function\"==typeof r){e.setAttribute(t,\"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\");break}if(\"function\"==typeof a&&(\"formAction\"===t?(\"input\"!==n&&cl(e,n,\"name\",o.name,o,null),cl(e,n,\"formEncType\",o.formEncType,o,null),cl(e,n,\"formMethod\",o.formMethod,o,null),cl(e,n,\"formTarget\",o.formTarget,o,null)):(cl(e,n,\"encType\",o.encType,o,null),cl(e,n,\"method\",o.method,o,null),cl(e,n,\"target\",o.target,o,null))),null==r||\"symbol\"==typeof r||\"boolean\"==typeof r){e.removeAttribute(t);break}r=ng(\"\"+r),e.setAttribute(t,r);break;case\"onClick\":null!=r&&(e.onclick=nm);break;case\"onScroll\":null!=r&&s4(\"scroll\",e);break;case\"onScrollEnd\":null!=r&&s4(\"scrollend\",e);break;case\"dangerouslySetInnerHTML\":if(null!=r){if(\"object\"!=typeof r||!(\"__html\"in r))throw Error(l(61));if(null!=(t=r.__html)){if(null!=o.children)throw Error(l(60));e.innerHTML=t}}break;case\"multiple\":e.multiple=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r;break;case\"muted\":e.muted=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r;break;case\"suppressContentEditableWarning\":case\"suppressHydrationWarning\":case\"defaultValue\":case\"defaultChecked\":case\"innerHTML\":case\"ref\":case\"autoFocus\":case\"innerText\":case\"textContent\":break;case\"xlinkHref\":if(null==r||\"function\"==typeof r||\"boolean\"==typeof r||\"symbol\"==typeof r){e.removeAttribute(\"xlink:href\");break}t=ng(\"\"+r),e.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",t);break;case\"contentEditable\":case\"spellCheck\":case\"draggable\":case\"value\":case\"autoReverse\":case\"externalResourcesRequired\":case\"focusable\":case\"preserveAlpha\":null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(t,\"\"+r):e.removeAttribute(t);break;case\"inert\":case\"allowFullScreen\":case\"async\":case\"autoPlay\":case\"controls\":case\"default\":case\"defer\":case\"disabled\":case\"disablePictureInPicture\":case\"disableRemotePlayback\":case\"formNoValidate\":case\"hidden\":case\"loop\":case\"noModule\":case\"noValidate\":case\"open\":case\"playsInline\":case\"readOnly\":case\"required\":case\"reversed\":case\"scoped\":case\"seamless\":case\"itemScope\":r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(t,\"\"):e.removeAttribute(t);break;case\"capture\":case\"download\":!0===r?e.setAttribute(t,\"\"):!1!==r&&null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(t,r):e.removeAttribute(t);break;case\"cols\":case\"rows\":case\"size\":case\"span\":null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r&&!isNaN(r)&&1<=r?e.setAttribute(t,r):e.removeAttribute(t);break;case\"rowSpan\":case\"start\":null==r||\"function\"==typeof r||\"symbol\"==typeof r||isNaN(r)?e.removeAttribute(t):e.setAttribute(t,r);break;case\"popover\":s4(\"beforetoggle\",e),s4(\"toggle\",e),e2(e,\"popover\",r);break;case\"xlinkActuate\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:actuate\",r);break;case\"xlinkArcrole\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:arcrole\",r);break;case\"xlinkRole\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:role\",r);break;case\"xlinkShow\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:show\",r);break;case\"xlinkTitle\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:title\",r);break;case\"xlinkType\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:type\",r);break;case\"xmlBase\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:base\",r);break;case\"xmlLang\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:lang\",r);break;case\"xmlSpace\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:space\",r);break;case\"is\":e2(e,\"is\",r);break;default:2<t.length&&(\"o\"===t[0]||\"O\"===t[0])&&(\"n\"===t[1]||\"N\"===t[1])||e2(e,t=np.get(t)||t,r)}}function cs(e,n,t,r,o,a){switch(t){case\"style\":nd(e,r,a);break;case\"dangerouslySetInnerHTML\":if(null!=r){if(\"object\"!=typeof r||!(\"__html\"in r))throw Error(l(61));if(null!=(t=r.__html)){if(null!=o.children)throw Error(l(60));e.innerHTML=t}}break;case\"children\":\"string\"==typeof r?ns(e,r):(\"number\"==typeof r||\"bigint\"==typeof r)&&ns(e,\"\"+r);break;case\"onScroll\":null!=r&&s4(\"scroll\",e);break;case\"onScrollEnd\":null!=r&&s4(\"scrollend\",e);break;case\"onClick\":null!=r&&(e.onclick=nm);break;case\"suppressContentEditableWarning\":case\"suppressHydrationWarning\":case\"innerHTML\":case\"ref\":case\"innerText\":case\"textContent\":break;default:if(!eK.hasOwnProperty(t))e:{if(\"o\"===t[0]&&\"n\"===t[1]&&(o=t.endsWith(\"Capture\"),n=t.slice(2,o?t.length-7:void 0),\"function\"==typeof(a=null!=(a=e[eD]||null)?a[t]:null)&&e.removeEventListener(n,a,o),\"function\"==typeof r)){\"function\"!=typeof a&&null!==a&&(t in e?e[t]=null:e.hasAttribute(t)&&e.removeAttribute(t)),e.addEventListener(n,r,o);break e}t in e?e[t]=r:!0===r?e.setAttribute(t,\"\"):e2(e,t,r)}}}function cc(e,n,t){switch(n){case\"div\":case\"span\":case\"svg\":case\"path\":case\"a\":case\"g\":case\"p\":case\"li\":break;case\"img\":s4(\"error\",e),s4(\"load\",e);var r,o=!1,a=!1;for(r in t)if(t.hasOwnProperty(r)){var i=t[r];if(null!=i)switch(r){case\"src\":o=!0;break;case\"srcSet\":a=!0;break;case\"children\":case\"dangerouslySetInnerHTML\":throw Error(l(137,n));default:cl(e,n,r,i,t,null)}}a&&cl(e,n,\"srcSet\",t.srcSet,t,null),o&&cl(e,n,\"src\",t.src,t,null);return;case\"input\":s4(\"invalid\",e);var s=r=i=a=null,c=null,u=null;for(o in t)if(t.hasOwnProperty(o)){var d=t[o];if(null!=d)switch(o){case\"name\":a=d;break;case\"type\":i=d;break;case\"checked\":c=d;break;case\"defaultChecked\":u=d;break;case\"value\":r=d;break;case\"defaultValue\":s=d;break;case\"children\":case\"dangerouslySetInnerHTML\":if(null!=d)throw Error(l(137,n));break;default:cl(e,n,o,d,t,null)}}nr(e,r,s,c,u,i,a,!1);return;case\"select\":for(a in s4(\"invalid\",e),o=i=r=null,t)if(t.hasOwnProperty(a)&&null!=(s=t[a]))switch(a){case\"value\":r=s;break;case\"defaultValue\":i=s;break;case\"multiple\":o=s;default:cl(e,n,a,s,t,null)}n=r,t=i,e.multiple=!!o,null!=n?na(e,!!o,n,!1):null!=t&&na(e,!!o,t,!0);return;case\"textarea\":for(i in s4(\"invalid\",e),r=a=o=null,t)if(t.hasOwnProperty(i)&&null!=(s=t[i]))switch(i){case\"value\":o=s;break;case\"defaultValue\":a=s;break;case\"children\":r=s;break;case\"dangerouslySetInnerHTML\":if(null!=s)throw Error(l(91));break;default:cl(e,n,i,s,t,null)}nl(e,o,a,r);return;case\"option\":for(c in t)t.hasOwnProperty(c)&&null!=(o=t[c])&&(\"selected\"===c?e.selected=o&&\"function\"!=typeof o&&\"symbol\"!=typeof o:cl(e,n,c,o,t,null));return;case\"dialog\":s4(\"beforetoggle\",e),s4(\"toggle\",e),s4(\"cancel\",e),s4(\"close\",e);break;case\"iframe\":case\"object\":s4(\"load\",e);break;case\"video\":case\"audio\":for(o=0;o<s0.length;o++)s4(s0[o],e);break;case\"image\":s4(\"error\",e),s4(\"load\",e);break;case\"details\":s4(\"toggle\",e);break;case\"embed\":case\"source\":case\"link\":s4(\"error\",e),s4(\"load\",e);case\"area\":case\"base\":case\"br\":case\"col\":case\"hr\":case\"keygen\":case\"meta\":case\"param\":case\"track\":case\"wbr\":case\"menuitem\":for(u in t)if(t.hasOwnProperty(u)&&null!=(o=t[u]))switch(u){case\"children\":case\"dangerouslySetInnerHTML\":throw Error(l(137,n));default:cl(e,n,u,o,t,null)}return;default:if(nf(n)){for(d in t)t.hasOwnProperty(d)&&void 0!==(o=t[d])&&cs(e,n,d,o,t,void 0);return}}for(s in t)t.hasOwnProperty(s)&&null!=(o=t[s])&&cl(e,n,s,o,t,null)}var cu=null,cd=null;function cf(e){return 9===e.nodeType?e:e.ownerDocument}function cp(e){switch(e){case\"http://www.w3.org/2000/svg\":return 1;case\"http://www.w3.org/1998/Math/MathML\":return 2;default:return 0}}function ch(e,n){if(0===e)switch(n){case\"svg\":return 1;case\"math\":return 2;default:return 0}return 1===e&&\"foreignObject\"===n?0:e}function cg(e,n){return\"textarea\"===e||\"noscript\"===e||\"string\"==typeof n.children||\"number\"==typeof n.children||\"bigint\"==typeof n.children||\"object\"==typeof n.dangerouslySetInnerHTML&&null!==n.dangerouslySetInnerHTML&&null!=n.dangerouslySetInnerHTML.__html}var cm=null,cv=\"function\"==typeof setTimeout?setTimeout:void 0,cb=\"function\"==typeof clearTimeout?clearTimeout:void 0,cy=\"function\"==typeof Promise?Promise:void 0,cx=\"function\"==typeof queueMicrotask?queueMicrotask:void 0!==cy?function(e){return cy.resolve(null).then(e).catch(cw)}:cv;function cw(e){setTimeout(function(){throw e})}function cj(e){return\"head\"===e}function ck(e,n){var t=n,r=0;do{var o=t.nextSibling;if(e.removeChild(t),o&&8===o.nodeType)if(\"/$\"===(t=o.data)||\"/&\"===t){if(0===r){e.removeChild(o),uE(n);return}r--}else if(\"$\"===t||\"$?\"===t||\"$~\"===t||\"$!\"===t||\"&\"===t)r++;else if(\"html\"===t)cR(e.ownerDocument.documentElement);else if(\"head\"===t){cR(t=e.ownerDocument.head);for(var a=t.firstChild;a;){var i=a.nextSibling,l=a.nodeName;a[eU]||\"SCRIPT\"===l||\"STYLE\"===l||\"LINK\"===l&&\"stylesheet\"===a.rel.toLowerCase()||t.removeChild(a),a=i}}else\"body\"===t&&cR(e.ownerDocument.body);t=o}while(t);uE(n)}function cA(e,n){var t=e;e=0;do{var r=t.nextSibling;if(1===t.nodeType?n?(t._stashedDisplay=t.style.display,t.style.display=\"none\"):(t.style.display=t._stashedDisplay||\"\",\"\"===t.getAttribute(\"style\")&&t.removeAttribute(\"style\")):3===t.nodeType&&(n?(t._stashedText=t.nodeValue,t.nodeValue=\"\"):t.nodeValue=t._stashedText||\"\"),r&&8===r.nodeType)if(\"/$\"===(t=r.data))if(0===e)break;else e--;else\"$\"!==t&&\"$?\"!==t&&\"$~\"!==t&&\"$!\"!==t||e++;t=r}while(t)}function cO(e){var n=e.firstChild;for(n&&10===n.nodeType&&(n=n.nextSibling);n;){var t=n;switch(n=n.nextSibling,t.nodeName){case\"HTML\":case\"HEAD\":case\"BODY\":cO(t),eV(t);continue;case\"SCRIPT\":case\"STYLE\":continue;case\"LINK\":if(\"stylesheet\"===t.rel.toLowerCase())continue}e.removeChild(t)}}function cC(e,n){for(;8!==e.nodeType;)if(!n||null===(e=c_(e.nextSibling)))return null;return e}function cS(e){return\"$?\"===e.data||\"$~\"===e.data}function cE(e){return\"$!\"===e.data||\"$?\"===e.data&&\"loading\"!==e.ownerDocument.readyState}function c_(e){for(;null!=e;e=e.nextSibling){var n=e.nodeType;if(1===n||3===n)break;if(8===n){if(\"$\"===(n=e.data)||\"$!\"===n||\"$?\"===n||\"$~\"===n||\"&\"===n||\"F!\"===n||\"F\"===n)break;if(\"/$\"===n||\"/&\"===n)return null}}return e}var cP=null;function cz(e){e=e.nextSibling;for(var n=0;e;){if(8===e.nodeType){var t=e.data;if(\"/$\"===t||\"/&\"===t){if(0===n)return c_(e.nextSibling);n--}else\"$\"!==t&&\"$!\"!==t&&\"$?\"!==t&&\"$~\"!==t&&\"&\"!==t||n++}e=e.nextSibling}return null}function cL(e){e=e.previousSibling;for(var n=0;e;){if(8===e.nodeType){var t=e.data;if(\"$\"===t||\"$!\"===t||\"$?\"===t||\"$~\"===t||\"&\"===t){if(0===n)return e;n--}else\"/$\"!==t&&\"/&\"!==t||n++}e=e.previousSibling}return null}function cT(e,n,t){switch(n=cf(t),e){case\"html\":if(!(e=n.documentElement))throw Error(l(452));return e;case\"head\":if(!(e=n.head))throw Error(l(453));return e;case\"body\":if(!(e=n.body))throw Error(l(454));return e;default:throw Error(l(451))}}function cR(e){for(var n=e.attributes;n.length;)e.removeAttributeNode(n[0]);eV(e)}var cN=new Map,cD=new Set;function cB(e){return\"function\"==typeof e.getRootNode?e.getRootNode():9===e.nodeType?e:e.ownerDocument}var cM=T.d;T.d={f:function(){var e=cM.f(),n=ss();return e||n},r:function(e){var n=eW(e);null!==n&&5===n.tag&&\"form\"===n.type?aG(n):cM.r(e)},D:function(e){cM.D(e),cH(\"dns-prefetch\",e,null)},C:function(e,n){cM.C(e,n),cH(\"preconnect\",e,n)},L:function(e,n,t){if(cM.L(e,n,t),cI&&e&&n){var r='link[rel=\"preload\"][as=\"'+nn(n)+'\"]';\"image\"===n&&t&&t.imageSrcSet?(r+='[imagesrcset=\"'+nn(t.imageSrcSet)+'\"]',\"string\"==typeof t.imageSizes&&(r+='[imagesizes=\"'+nn(t.imageSizes)+'\"]')):r+='[href=\"'+nn(e)+'\"]';var o=r;switch(n){case\"style\":o=cU(e);break;case\"script\":o=cW(e)}cN.has(o)||(e=f({rel:\"preload\",href:\"image\"===n&&t&&t.imageSrcSet?void 0:e,as:n},t),cN.set(o,e),null!==cI.querySelector(r)||\"style\"===n&&cI.querySelector(cV(o))||\"script\"===n&&cI.querySelector(c$(o))||(cc(n=cI.createElement(\"link\"),\"link\",e),eY(n),cI.head.appendChild(n)))}},m:function(e,n){if(cM.m(e,n),cI&&e){var t=n&&\"string\"==typeof n.as?n.as:\"script\",r='link[rel=\"modulepreload\"][as=\"'+nn(t)+'\"][href=\"'+nn(e)+'\"]',o=r;switch(t){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":o=cW(e)}if(!cN.has(o)&&(e=f({rel:\"modulepreload\",href:e},n),cN.set(o,e),null===cI.querySelector(r))){switch(t){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":if(cI.querySelector(c$(o)))return}cc(t=cI.createElement(\"link\"),\"link\",e),eY(t),cI.head.appendChild(t)}}},X:function(e,n){if(cM.X(e,n),cI&&e){var t=eZ(cI).hoistableScripts,r=cW(e),o=t.get(r);o||((o=cI.querySelector(c$(r)))||(e=f({src:e,async:!0},n),(n=cN.get(r))&&cK(e,n),eY(o=cI.createElement(\"script\")),cc(o,\"link\",e),cI.head.appendChild(o)),o={type:\"script\",instance:o,count:1,state:null},t.set(r,o))}},S:function(e,n,t){if(cM.S(e,n,t),cI&&e){var r=eZ(cI).hoistableStyles,o=cU(e);n=n||\"default\";var a=r.get(o);if(!a){var i={loading:0,preload:null};if(a=cI.querySelector(cV(o)))i.loading=5;else{e=f({rel:\"stylesheet\",href:e,\"data-precedence\":n},t),(t=cN.get(o))&&cX(e,t);var l=a=cI.createElement(\"link\");eY(l),cc(l,\"link\",e),l._p=new Promise(function(e,n){l.onload=e,l.onerror=n}),l.addEventListener(\"load\",function(){i.loading|=1}),l.addEventListener(\"error\",function(){i.loading|=2}),i.loading|=4,cY(a,n,cI)}a={type:\"stylesheet\",instance:a,count:1,state:i},r.set(o,a)}}},M:function(e,n){if(cM.M(e,n),cI&&e){var t=eZ(cI).hoistableScripts,r=cW(e),o=t.get(r);o||((o=cI.querySelector(c$(r)))||(e=f({src:e,async:!0,type:\"module\"},n),(n=cN.get(r))&&cK(e,n),eY(o=cI.createElement(\"script\")),cc(o,\"link\",e),cI.head.appendChild(o)),o={type:\"script\",instance:o,count:1,state:null},t.set(r,o))}}};var cI=\"undefined\"==typeof document?null:document;function cH(e,n,t){if(cI&&\"string\"==typeof n&&n){var r=nn(n);r='link[rel=\"'+e+'\"][href=\"'+r+'\"]',\"string\"==typeof t&&(r+='[crossorigin=\"'+t+'\"]'),cD.has(r)||(cD.add(r),e={rel:e,crossOrigin:t,href:n},null===cI.querySelector(r)&&(cc(n=cI.createElement(\"link\"),\"link\",e),eY(n),cI.head.appendChild(n)))}}function cF(e,n,t,r){var o=(o=U.current)?cB(o):null;if(!o)throw Error(l(446));switch(e){case\"meta\":case\"title\":return null;case\"style\":return\"string\"==typeof t.precedence&&\"string\"==typeof t.href?(n=cU(t.href),(r=(t=eZ(o).hoistableStyles).get(n))||(r={type:\"style\",instance:null,count:0,state:null},t.set(n,r)),r):{type:\"void\",instance:null,count:0,state:null};case\"link\":if(\"stylesheet\"===t.rel&&\"string\"==typeof t.href&&\"string\"==typeof t.precedence){e=cU(t.href);var a,i,s,c,u=eZ(o).hoistableStyles,d=u.get(e);if(d||(o=o.ownerDocument||o,d={type:\"stylesheet\",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,d),(u=o.querySelector(cV(e)))&&!u._p&&(d.instance=u,d.state.loading=5),cN.has(e)||(t={rel:\"preload\",as:\"style\",href:t.href,crossOrigin:t.crossOrigin,integrity:t.integrity,media:t.media,hrefLang:t.hrefLang,referrerPolicy:t.referrerPolicy},cN.set(e,t),u||(a=o,i=e,s=t,c=d.state,a.querySelector('link[rel=\"preload\"][as=\"style\"]['+i+\"]\")?c.loading=1:(c.preload=i=a.createElement(\"link\"),i.addEventListener(\"load\",function(){return c.loading|=1}),i.addEventListener(\"error\",function(){return c.loading|=2}),cc(i,\"link\",s),eY(i),a.head.appendChild(i))))),n&&null===r)throw Error(l(528,\"\"));return d}if(n&&null!==r)throw Error(l(529,\"\"));return null;case\"script\":return n=t.async,\"string\"==typeof(t=t.src)&&n&&\"function\"!=typeof n&&\"symbol\"!=typeof n?(n=cW(t),(r=(t=eZ(o).hoistableScripts).get(n))||(r={type:\"script\",instance:null,count:0,state:null},t.set(n,r)),r):{type:\"void\",instance:null,count:0,state:null};default:throw Error(l(444,e))}}function cU(e){return'href=\"'+nn(e)+'\"'}function cV(e){return'link[rel=\"stylesheet\"]['+e+\"]\"}function cq(e){return f({},e,{\"data-precedence\":e.precedence,precedence:null})}function cW(e){return'[src=\"'+nn(e)+'\"]'}function c$(e){return\"script[async]\"+e}function cZ(e,n,t){if(n.count++,null===n.instance)switch(n.type){case\"style\":var r=e.querySelector('style[data-href~=\"'+nn(t.href)+'\"]');if(r)return n.instance=r,eY(r),r;var o=f({},t,{\"data-href\":t.href,\"data-precedence\":t.precedence,href:null,precedence:null});return eY(r=(e.ownerDocument||e).createElement(\"style\")),cc(r,\"style\",o),cY(r,t.precedence,e),n.instance=r;case\"stylesheet\":o=cU(t.href);var a=e.querySelector(cV(o));if(a)return n.state.loading|=4,n.instance=a,eY(a),a;r=cq(t),(o=cN.get(o))&&cX(r,o),eY(a=(e.ownerDocument||e).createElement(\"link\"));var i=a;return i._p=new Promise(function(e,n){i.onload=e,i.onerror=n}),cc(a,\"link\",r),n.state.loading|=4,cY(a,t.precedence,e),n.instance=a;case\"script\":if(a=cW(t.src),o=e.querySelector(c$(a)))return n.instance=o,eY(o),o;return r=t,(o=cN.get(a))&&cK(r=f({},t),o),eY(o=(e=e.ownerDocument||e).createElement(\"script\")),cc(o,\"link\",r),e.head.appendChild(o),n.instance=o;case\"void\":return null;default:throw Error(l(443,n.type))}return\"stylesheet\"===n.type&&0==(4&n.state.loading)&&(r=n.instance,n.state.loading|=4,cY(r,t.precedence,e)),n.instance}function cY(e,n,t){for(var r=t.querySelectorAll('link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'),o=r.length?r[r.length-1]:null,a=o,i=0;i<r.length;i++){var l=r[i];if(l.dataset.precedence===n)a=l;else if(a!==o)break}a?a.parentNode.insertBefore(e,a.nextSibling):(n=9===t.nodeType?t.head:t).insertBefore(e,n.firstChild)}function cX(e,n){null==e.crossOrigin&&(e.crossOrigin=n.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=n.referrerPolicy),null==e.title&&(e.title=n.title)}function cK(e,n){null==e.crossOrigin&&(e.crossOrigin=n.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=n.referrerPolicy),null==e.integrity&&(e.integrity=n.integrity)}var cQ=null;function cG(e,n,t){if(null===cQ){var r=new Map,o=cQ=new Map;o.set(t,r)}else(r=(o=cQ).get(t))||(r=new Map,o.set(t,r));if(r.has(e))return r;for(r.set(e,null),t=t.getElementsByTagName(e),o=0;o<t.length;o++){var a=t[o];if(!(a[eU]||a[eN]||\"link\"===e&&\"stylesheet\"===a.getAttribute(\"rel\"))&&\"http://www.w3.org/2000/svg\"!==a.namespaceURI){var i=a.getAttribute(n)||\"\";i=e+i;var l=r.get(i);l?l.push(a):r.set(i,[a])}}return r}function cJ(e,n,t){(e=e.ownerDocument||e).head.insertBefore(t,\"title\"===n?e.querySelector(\"head > title\"):null)}function c0(e){return\"stylesheet\"!==e.type||0!=(3&e.state.loading)}var c1=null;function c2(){if(this.count--,0===this.count){if(this.stylesheets)c5(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var c4=null;function c5(e,n){e.stylesheets=null,null!==e.unsuspend&&(e.count++,c4=new Map,n.forEach(c3,e),c4=null,c2.call(e))}function c3(e,n){if(!(4&n.state.loading)){var t=c4.get(e);if(t)var r=t.get(null);else{t=new Map,c4.set(e,t);for(var o=e.querySelectorAll(\"link[data-precedence],style[data-precedence]\"),a=0;a<o.length;a++){var i=o[a];(\"LINK\"===i.nodeName||\"not all\"!==i.getAttribute(\"media\"))&&(t.set(i.dataset.precedence,i),r=i)}r&&t.set(null,r)}i=(o=n.instance).getAttribute(\"data-precedence\"),(a=t.get(i)||r)===r&&t.set(null,o),t.set(i,o),this.count++,r=c2.bind(this),o.addEventListener(\"load\",r),o.addEventListener(\"error\",r),a?a.parentNode.insertBefore(o,a.nextSibling):(e=9===e.nodeType?e.head:e).insertBefore(o,e.firstChild),n.state.loading|=4}}var c6={$$typeof:x,Provider:null,Consumer:null,_currentValue:R,_currentValue2:R,_threadCount:0};function c9(e,n,t,r,o,a,i,l,s){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=eO(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=eO(0),this.hiddenUpdates=eO(null),this.identifierPrefix=r,this.onUncaughtError=o,this.onCaughtError=a,this.onRecoverableError=i,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=s,this.incompleteTransitions=new Map}function c8(e,n,t,r,o,a){o=o?t8:t8,null===r.context?r.context=o:r.pendingContext=o,(r=oA(n)).payload={element:t},null!==(a=void 0===a?null:a)&&(r.callback=a),null!==(t=oO(e,r,n))&&(so(t,e,n),oC(t,e,n))}function c7(e,n){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var t=e.retryLane;e.retryLane=0!==t&&t<n?t:n}}function ue(e,n){c7(e,n),(e=e.alternate)&&c7(e,n)}function un(e){if(13===e.tag||31===e.tag){var n=t3(e,0x4000000);null!==n&&so(n,e,0x4000000),ue(e,0x4000000)}}function ut(e){if(13===e.tag||31===e.tag){var n=st(),t=t3(e,n=eP(n));null!==t&&so(t,e,n),ue(e,n)}}var ur=!0;function uo(e,n,t,r){var o=L.T;L.T=null;var a=T.p;try{T.p=2,ui(e,n,t,r)}finally{T.p=a,L.T=o}}function ua(e,n,t,r){var o=L.T;L.T=null;var a=T.p;try{T.p=8,ui(e,n,t,r)}finally{T.p=a,L.T=o}}function ui(e,n,t,r){if(ur){var o=ul(r);if(null===o)s8(e,n,r,us,t),uy(e,r);else if(function(e,n,t,r,o){switch(n){case\"focusin\":return uf=ux(uf,e,n,t,r,o),!0;case\"dragenter\":return up=ux(up,e,n,t,r,o),!0;case\"mouseover\":return uh=ux(uh,e,n,t,r,o),!0;case\"pointerover\":var a=o.pointerId;return ug.set(a,ux(ug.get(a)||null,e,n,t,r,o)),!0;case\"gotpointercapture\":return a=o.pointerId,um.set(a,ux(um.get(a)||null,e,n,t,r,o)),!0}return!1}(o,e,n,t,r))r.stopPropagation();else if(uy(e,r),4&n&&-1<ub.indexOf(e)){for(;null!==o;){var a=eW(o);if(null!==a)switch(a.tag){case 3:if((a=a.stateNode).current.memoizedState.isDehydrated){var i=ex(a.pendingLanes);if(0!==i){var l=a;for(l.pendingLanes|=2,l.entangledLanes|=2;i;){var s=1<<31-eg(i);l.entanglements[1]|=s,i&=~s}sU(a),0==(6&lR)&&(l0=er()+500,sV(0,!1))}}break;case 31:case 13:null!==(l=t3(a,2))&&so(l,a,2),ss(),ue(a,2)}if(null===(a=ul(r))&&s8(e,n,r,us,t),a===o)break;o=a}null!==o&&r.stopPropagation()}else s8(e,n,r,null,t)}}function ul(e){return uc(e=nb(e))}var us=null;function uc(e){if(us=null,null!==(e=eq(e))){var n=s(e);if(null===n)e=null;else{var t=n.tag;if(13===t){if(null!==(e=c(n)))return e;e=null}else if(31===t){if(null!==(e=u(n)))return e;e=null}else if(3===t){if(n.stateNode.current.memoizedState.isDehydrated)return 3===n.tag?n.stateNode.containerInfo:null;e=null}else n!==e&&(e=null)}}return us=e,null}function uu(e){switch(e){case\"beforetoggle\":case\"cancel\":case\"click\":case\"close\":case\"contextmenu\":case\"copy\":case\"cut\":case\"auxclick\":case\"dblclick\":case\"dragend\":case\"dragstart\":case\"drop\":case\"focusin\":case\"focusout\":case\"input\":case\"invalid\":case\"keydown\":case\"keypress\":case\"keyup\":case\"mousedown\":case\"mouseup\":case\"paste\":case\"pause\":case\"play\":case\"pointercancel\":case\"pointerdown\":case\"pointerup\":case\"ratechange\":case\"reset\":case\"resize\":case\"seeked\":case\"submit\":case\"toggle\":case\"touchcancel\":case\"touchend\":case\"touchstart\":case\"volumechange\":case\"change\":case\"selectionchange\":case\"textInput\":case\"compositionstart\":case\"compositionend\":case\"compositionupdate\":case\"beforeblur\":case\"afterblur\":case\"beforeinput\":case\"blur\":case\"fullscreenchange\":case\"focus\":case\"hashchange\":case\"popstate\":case\"select\":case\"selectstart\":return 2;case\"drag\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"mousemove\":case\"mouseout\":case\"mouseover\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"scroll\":case\"touchmove\":case\"wheel\":case\"mouseenter\":case\"mouseleave\":case\"pointerenter\":case\"pointerleave\":return 8;case\"message\":switch(eo()){case ea:return 2;case ei:return 8;case el:case es:return 32;case ec:return 0x10000000;default:return 32}default:return 32}}var ud=!1,uf=null,up=null,uh=null,ug=new Map,um=new Map,uv=[],ub=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\" \");function uy(e,n){switch(e){case\"focusin\":case\"focusout\":uf=null;break;case\"dragenter\":case\"dragleave\":up=null;break;case\"mouseover\":case\"mouseout\":uh=null;break;case\"pointerover\":case\"pointerout\":ug.delete(n.pointerId);break;case\"gotpointercapture\":case\"lostpointercapture\":um.delete(n.pointerId)}}function ux(e,n,t,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:n,domEventName:t,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==n&&null!==(n=eW(n))&&un(n)):(e.eventSystemFlags|=r,n=e.targetContainers,null!==o&&-1===n.indexOf(o)&&n.push(o)),e}function uw(e){var n=eq(e.target);if(null!==n){var t=s(n);if(null!==t){if(13===(n=t.tag)){if(null!==(n=c(t))){e.blockedOn=n,eT(e.priority,function(){ut(t)});return}}else if(31===n){if(null!==(n=u(t))){e.blockedOn=n,eT(e.priority,function(){ut(t)});return}}else if(3===n&&t.stateNode.current.memoizedState.isDehydrated){e.blockedOn=3===t.tag?t.stateNode.containerInfo:null;return}}}e.blockedOn=null}function uj(e){if(null!==e.blockedOn)return!1;for(var n=e.targetContainers;0<n.length;){var t=ul(e.nativeEvent);if(null!==t)return null!==(n=eW(t))&&un(n),e.blockedOn=t,!1;var r=new(t=e.nativeEvent).constructor(t.type,t);nv=r,t.target.dispatchEvent(r),nv=null,n.shift()}return!0}function uk(e,n,t){uj(e)&&t.delete(n)}function uA(){ud=!1,null!==uf&&uj(uf)&&(uf=null),null!==up&&uj(up)&&(up=null),null!==uh&&uj(uh)&&(uh=null),ug.forEach(uk),um.forEach(uk)}function uO(e,n){e.blockedOn===n&&(e.blockedOn=null,ud||(ud=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,uA)))}var uC=null;function uS(e){uC!==e&&(uC=e,o.unstable_scheduleCallback(o.unstable_NormalPriority,function(){uC===e&&(uC=null);for(var n=0;n<e.length;n+=3){var t=e[n],r=e[n+1],o=e[n+2];if(\"function\"!=typeof r)if(null===uc(r||t))continue;else break;var a=eW(t);null!==a&&(e.splice(n,3),n-=3,aK(a,{pending:!0,data:o,method:t.method,action:r},r,o))}}))}function uE(e){function n(n){return uO(n,e)}null!==uf&&uO(uf,e),null!==up&&uO(up,e),null!==uh&&uO(uh,e),ug.forEach(n),um.forEach(n);for(var t=0;t<uv.length;t++){var r=uv[t];r.blockedOn===e&&(r.blockedOn=null)}for(;0<uv.length&&null===(t=uv[0]).blockedOn;)uw(t),null===t.blockedOn&&uv.shift();if(null!=(t=(e.ownerDocument||e).$$reactFormReplay))for(r=0;r<t.length;r+=3){var o=t[r],a=t[r+1],i=o[eD]||null;if(\"function\"==typeof a)i||uS(t);else if(i){var l=null;if(a&&a.hasAttribute(\"formAction\")){if(o=a,i=a[eD]||null)l=i.formAction;else if(null!==uc(o))continue}else l=i.action;\"function\"==typeof l?t[r+1]=l:(t.splice(r,3),r-=3),uS(t)}}}function u_(){function e(e){e.canIntercept&&\"react-transition\"===e.info&&e.intercept({handler:function(){return new Promise(function(e){return o=e})},focusReset:\"manual\",scroll:\"manual\"})}function n(){null!==o&&(o(),o=null),r||setTimeout(t,20)}function t(){if(!r&&!navigation.transition){var e=navigation.currentEntry;e&&null!=e.url&&navigation.navigate(e.url,{state:e.getState(),info:\"react-transition\",history:\"replace\"})}}if(\"object\"==typeof navigation){var r=!1,o=null;return navigation.addEventListener(\"navigate\",e),navigation.addEventListener(\"navigatesuccess\",n),navigation.addEventListener(\"navigateerror\",n),setTimeout(t,100),function(){r=!0,navigation.removeEventListener(\"navigate\",e),navigation.removeEventListener(\"navigatesuccess\",n),navigation.removeEventListener(\"navigateerror\",n),null!==o&&(o(),o=null)}}}function uP(e){this._internalRoot=e}function uz(e){this._internalRoot=e}uz.prototype.render=uP.prototype.render=function(e){var n=this._internalRoot;if(null===n)throw Error(l(409));c8(n.current,st(),e,n,null,null)},uz.prototype.unmount=uP.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var n=e.containerInfo;c8(e.current,2,null,e,null,null),ss(),n[eB]=null}},uz.prototype.unstable_scheduleHydration=function(e){if(e){var n=eL();e={blockedOn:null,target:e,priority:n};for(var t=0;t<uv.length&&0!==n&&n<uv[t].priority;t++);uv.splice(t,0,e),0===t&&uw(e)}};var uL=a.version;if(\"19.2.0-canary-97cdd5d3-20250710\"!==uL)throw Error(l(527,uL,\"19.2.0-canary-97cdd5d3-20250710\"));if(T.findDOMNode=function(e){var n=e._reactInternals;if(void 0===n){if(\"function\"==typeof e.render)throw Error(l(188));throw Error(l(268,e=Object.keys(e).join(\",\")))}return e=null===(e=null!==(e=function(e){var n=e.alternate;if(!n){if(null===(n=s(e)))throw Error(l(188));return n!==e?null:e}for(var t=e,r=n;;){var o=t.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){t=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===t)return d(o),e;if(a===r)return d(o),n;a=a.sibling}throw Error(l(188))}if(t.return!==r.return)t=o,r=a;else{for(var i=!1,c=o.child;c;){if(c===t){i=!0,t=o,r=a;break}if(c===r){i=!0,r=o,t=a;break}c=c.sibling}if(!i){for(c=a.child;c;){if(c===t){i=!0,t=a,r=o;break}if(c===r){i=!0,r=a,t=o;break}c=c.sibling}if(!i)throw Error(l(189))}}if(t.alternate!==r)throw Error(l(190))}if(3!==t.tag)throw Error(l(188));return t.stateNode.current===t?e:n}(n))?function e(n){var t=n.tag;if(5===t||26===t||27===t||6===t)return n;for(n=n.child;null!==n;){if(null!==(t=e(n)))return t;n=n.sibling}return null}(e):null)?null:e.stateNode},\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var uT=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!uT.isDisabled&&uT.supportsFiber)try{ef=uT.inject({bundleType:0,version:\"19.2.0-canary-97cdd5d3-20250710\",rendererPackageName:\"react-dom\",currentDispatcherRef:L,reconcilerVersion:\"19.2.0-canary-97cdd5d3-20250710\"}),ep=uT}catch(e){}}n.createRoot=function(e,n){if(!(t=e)||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType)throw Error(l(299));var t,r,o,a,i,s,c,u,d=!1,f=\"\",p=iu,h=id,g=ip;return null!=n&&(!0===n.unstable_strictMode&&(d=!0),void 0!==n.identifierPrefix&&(f=n.identifierPrefix),void 0!==n.onUncaughtError&&(p=n.onUncaughtError),void 0!==n.onCaughtError&&(h=n.onCaughtError),void 0!==n.onRecoverableError&&(g=n.onRecoverableError)),r=e,o=1,a=!1,i=null,s=0,c=d,u=null,r=new c9(r,o,a,f,p,h,g,u_,null),o=1,!0===c&&(o|=24),c=re(3,null,null,o),r.current=c,c.stateNode=r,o=r1(),o.refCount++,r.pooledCache=o,o.refCount++,c.memoizedState={element:null,isDehydrated:a,cache:o},oj(c),n=r,e[eB]=n.current,s6(e),new uP(n)}},\"./dist/compiled/react-dom/cjs/react-dom.production.js\":function(e,n,t){\"use strict\";var r=t(\"./dist/compiled/react/index.js\");function o(e){var n=\"https://react.dev/errors/\"+e;if(1<arguments.length){n+=\"?args[]=\"+encodeURIComponent(arguments[1]);for(var t=2;t<arguments.length;t++)n+=\"&args[]=\"+encodeURIComponent(arguments[t])}return\"Minified React error #\"+e+\"; visit \"+n+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}function a(){}var i={d:{f:a,r:function(){throw Error(o(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},l=Symbol.for(\"react.portal\"),s=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(e,n){return\"font\"===e?\"\":\"string\"==typeof n?\"use-credentials\"===n?n:\"\":void 0}n.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,n.createPortal=function(e,n){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!n||1!==n.nodeType&&9!==n.nodeType&&11!==n.nodeType)throw Error(o(299));return function(e,n,t){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:l,key:null==r?null:\"\"+r,children:e,containerInfo:n,implementation:t}}(e,n,null,t)},n.flushSync=function(e){var n=s.T,t=i.p;try{if(s.T=null,i.p=2,e)return e()}finally{s.T=n,i.p=t,i.d.f()}},n.preconnect=function(e,n){\"string\"==typeof e&&(n=n?\"string\"==typeof(n=n.crossOrigin)?\"use-credentials\"===n?n:\"\":void 0:null,i.d.C(e,n))},n.prefetchDNS=function(e){\"string\"==typeof e&&i.d.D(e)},n.preinit=function(e,n){if(\"string\"==typeof e&&n&&\"string\"==typeof n.as){var t=n.as,r=c(t,n.crossOrigin),o=\"string\"==typeof n.integrity?n.integrity:void 0,a=\"string\"==typeof n.fetchPriority?n.fetchPriority:void 0;\"style\"===t?i.d.S(e,\"string\"==typeof n.precedence?n.precedence:void 0,{crossOrigin:r,integrity:o,fetchPriority:a}):\"script\"===t&&i.d.X(e,{crossOrigin:r,integrity:o,fetchPriority:a,nonce:\"string\"==typeof n.nonce?n.nonce:void 0})}},n.preinitModule=function(e,n){if(\"string\"==typeof e)if(\"object\"==typeof n&&null!==n){if(null==n.as||\"script\"===n.as){var t=c(n.as,n.crossOrigin);i.d.M(e,{crossOrigin:t,integrity:\"string\"==typeof n.integrity?n.integrity:void 0,nonce:\"string\"==typeof n.nonce?n.nonce:void 0})}}else null==n&&i.d.M(e)},n.preload=function(e,n){if(\"string\"==typeof e&&\"object\"==typeof n&&null!==n&&\"string\"==typeof n.as){var t=n.as,r=c(t,n.crossOrigin);i.d.L(e,t,{crossOrigin:r,integrity:\"string\"==typeof n.integrity?n.integrity:void 0,nonce:\"string\"==typeof n.nonce?n.nonce:void 0,type:\"string\"==typeof n.type?n.type:void 0,fetchPriority:\"string\"==typeof n.fetchPriority?n.fetchPriority:void 0,referrerPolicy:\"string\"==typeof n.referrerPolicy?n.referrerPolicy:void 0,imageSrcSet:\"string\"==typeof n.imageSrcSet?n.imageSrcSet:void 0,imageSizes:\"string\"==typeof n.imageSizes?n.imageSizes:void 0,media:\"string\"==typeof n.media?n.media:void 0})}},n.preloadModule=function(e,n){if(\"string\"==typeof e)if(n){var t=c(n.as,n.crossOrigin);i.d.m(e,{as:\"string\"==typeof n.as&&\"script\"!==n.as?n.as:void 0,crossOrigin:t,integrity:\"string\"==typeof n.integrity?n.integrity:void 0})}else i.d.m(e)},n.requestFormReset=function(e){i.d.r(e)},n.unstable_batchedUpdates=function(e,n){return e(n)},n.useFormState=function(e,n,t){return s.H.useFormState(e,n,t)},n.useFormStatus=function(){return s.H.useHostTransitionStatus()},n.version=\"19.2.0-canary-97cdd5d3-20250710\"},\"./dist/compiled/react-dom/client.js\":function(e,n,t){\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=t(\"./dist/compiled/react-dom/cjs/react-dom-client.production.js\")},\"./dist/compiled/react-dom/index.js\":function(e,n,t){\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=t(\"./dist/compiled/react-dom/cjs/react-dom.production.js\")},\"./dist/compiled/react/cjs/react-jsx-runtime.production.js\":function(e,n){\"use strict\";var t=Symbol.for(\"react.transitional.element\");function r(e,n,r){var o=null;if(void 0!==r&&(o=\"\"+r),void 0!==n.key&&(o=\"\"+n.key),\"key\"in n)for(var a in r={},n)\"key\"!==a&&(r[a]=n[a]);else r=n;return{$$typeof:t,type:e,key:o,ref:void 0!==(n=r.ref)?n:null,props:r}}n.Fragment=Symbol.for(\"react.fragment\"),n.jsx=r,n.jsxs=r},\"./dist/compiled/react/cjs/react.production.js\":function(e,n){\"use strict\";var t=Symbol.for(\"react.transitional.element\"),r=Symbol.for(\"react.portal\"),o=Symbol.for(\"react.fragment\"),a=Symbol.for(\"react.strict_mode\"),i=Symbol.for(\"react.profiler\"),l=Symbol.for(\"react.consumer\"),s=Symbol.for(\"react.context\"),c=Symbol.for(\"react.forward_ref\"),u=Symbol.for(\"react.suspense\"),d=Symbol.for(\"react.memo\"),f=Symbol.for(\"react.lazy\"),p=Symbol.iterator,h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,m={};function v(e,n,t){this.props=e,this.context=n,this.refs=m,this.updater=t||h}function b(){}function y(e,n,t){this.props=e,this.context=n,this.refs=m,this.updater=t||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,n){if(\"object\"!=typeof e&&\"function\"!=typeof e&&null!=e)throw Error(\"takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,e,n,\"setState\")},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},b.prototype=v.prototype;var x=y.prototype=new b;x.constructor=y,g(x,v.prototype),x.isPureReactComponent=!0;var w=Array.isArray;function j(){}var k={H:null,A:null,T:null,S:null},A=Object.prototype.hasOwnProperty;function O(e,n,r,o,a,i){return{$$typeof:t,type:e,key:n,ref:void 0!==(r=i.ref)?r:null,props:i}}function C(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===t}var S=/\\/+/g;function E(e,n){var t,r;return\"object\"==typeof e&&null!==e&&null!=e.key?(t=\"\"+e.key,r={\"=\":\"=0\",\":\":\"=2\"},\"$\"+t.replace(/[=:]/g,function(e){return r[e]})):n.toString(36)}function _(e,n,o){if(null==e)return e;var a=[],i=0;return!function e(n,o,a,i,l){var s,c,u,d=typeof n;(\"undefined\"===d||\"boolean\"===d)&&(n=null);var h=!1;if(null===n)h=!0;else switch(d){case\"bigint\":case\"string\":case\"number\":h=!0;break;case\"object\":switch(n.$$typeof){case t:case r:h=!0;break;case f:return e((h=n._init)(n._payload),o,a,i,l)}}if(h)return l=l(n),h=\"\"===i?\".\"+E(n,0):i,w(l)?(a=\"\",null!=h&&(a=h.replace(S,\"$&/\")+\"/\"),e(l,o,a,\"\",function(e){return e})):null!=l&&(C(l)&&(s=l,c=a+(null==l.key||n&&n.key===l.key?\"\":(\"\"+l.key).replace(S,\"$&/\")+\"/\")+h,l=O(s.type,c,void 0,void 0,void 0,s.props)),o.push(l)),1;h=0;var g=\"\"===i?\".\":i+\":\";if(w(n))for(var m=0;m<n.length;m++)d=g+E(i=n[m],m),h+=e(i,o,a,d,l);else if(\"function\"==typeof(m=null===(u=n)||\"object\"!=typeof u?null:\"function\"==typeof(u=p&&u[p]||u[\"@@iterator\"])?u:null))for(n=m.call(n),m=0;!(i=n.next()).done;)d=g+E(i=i.value,m++),h+=e(i,o,a,d,l);else if(\"object\"===d){if(\"function\"==typeof n.then)return e(function(e){switch(e.status){case\"fulfilled\":return e.value;case\"rejected\":throw e.reason;default:switch(\"string\"==typeof e.status?e.then(j,j):(e.status=\"pending\",e.then(function(n){\"pending\"===e.status&&(e.status=\"fulfilled\",e.value=n)},function(n){\"pending\"===e.status&&(e.status=\"rejected\",e.reason=n)})),e.status){case\"fulfilled\":return e.value;case\"rejected\":throw e.reason}}throw e}(n),o,a,i,l);throw Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===(o=String(n))?\"object with keys {\"+Object.keys(n).join(\", \")+\"}\":o)+\"). If you meant to render a collection of children, use an array instead.\")}return h}(e,a,\"\",\"\",function(e){return n.call(o,e,i++)}),a}function P(e){if(-1===e._status){var n=e._result;(n=n()).then(function(n){(0===e._status||-1===e._status)&&(e._status=1,e._result=n)},function(n){(0===e._status||-1===e._status)&&(e._status=2,e._result=n)}),-1===e._status&&(e._status=0,e._result=n)}if(1===e._status)return e._result.default;throw e._result}var z=\"function\"==typeof reportError?reportError:function(e){if(\"object\"==typeof window&&\"function\"==typeof window.ErrorEvent){var n=new window.ErrorEvent(\"error\",{bubbles:!0,cancelable:!0,message:\"object\"==typeof e&&null!==e&&\"string\"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(n))return}else if(\"object\"==typeof process&&\"function\"==typeof process.emit)return void process.emit(\"uncaughtException\",e);console.error(e)};n.Children={map:_,forEach:function(e,n,t){_(e,function(){n.apply(this,arguments)},t)},count:function(e){var n=0;return _(e,function(){n++}),n},toArray:function(e){return _(e,function(e){return e})||[]},only:function(e){if(!C(e))throw Error(\"React.Children.only expected to receive a single React element child.\");return e}},n.Component=v,n.Fragment=o,n.Profiler=i,n.PureComponent=y,n.StrictMode=a,n.Suspense=u,n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=k,n.__COMPILER_RUNTIME={__proto__:null,c:function(e){return k.H.useMemoCache(e)}},n.cache=function(e){return function(){return e.apply(null,arguments)}},n.cacheSignal=function(){return null},n.cloneElement=function(e,n,t){if(null==e)throw Error(\"The argument must be a React element, but you passed \"+e+\".\");var r=g({},e.props),o=e.key,a=void 0;if(null!=n)for(i in void 0!==n.ref&&(a=void 0),void 0!==n.key&&(o=\"\"+n.key),n)A.call(n,i)&&\"key\"!==i&&\"__self\"!==i&&\"__source\"!==i&&(\"ref\"!==i||void 0!==n.ref)&&(r[i]=n[i]);var i=arguments.length-2;if(1===i)r.children=t;else if(1<i){for(var l=Array(i),s=0;s<i;s++)l[s]=arguments[s+2];r.children=l}return O(e.type,o,void 0,void 0,a,r)},n.createContext=function(e){return(e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:l,_context:e},e},n.createElement=function(e,n,t){var r,o={},a=null;if(null!=n)for(r in void 0!==n.key&&(a=\"\"+n.key),n)A.call(n,r)&&\"key\"!==r&&\"__self\"!==r&&\"__source\"!==r&&(o[r]=n[r]);var i=arguments.length-2;if(1===i)o.children=t;else if(1<i){for(var l=Array(i),s=0;s<i;s++)l[s]=arguments[s+2];o.children=l}if(e&&e.defaultProps)for(r in i=e.defaultProps)void 0===o[r]&&(o[r]=i[r]);return O(e,a,void 0,void 0,null,o)},n.createRef=function(){return{current:null}},n.forwardRef=function(e){return{$$typeof:c,render:e}},n.isValidElement=C,n.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:P}},n.memo=function(e,n){return{$$typeof:d,type:e,compare:void 0===n?null:n}},n.startTransition=function(e){var n=k.T,t={};k.T=t;try{var r=e(),o=k.S;null!==o&&o(t,r),\"object\"==typeof r&&null!==r&&\"function\"==typeof r.then&&r.then(j,z)}catch(e){z(e)}finally{null!==n&&null!==t.types&&(n.types=t.types),k.T=n}},n.unstable_useCacheRefresh=function(){return k.H.useCacheRefresh()},n.use=function(e){return k.H.use(e)},n.useActionState=function(e,n,t){return k.H.useActionState(e,n,t)},n.useCallback=function(e,n){return k.H.useCallback(e,n)},n.useContext=function(e){return k.H.useContext(e)},n.useDebugValue=function(){},n.useDeferredValue=function(e,n){return k.H.useDeferredValue(e,n)},n.useEffect=function(e,n){return k.H.useEffect(e,n)},n.useId=function(){return k.H.useId()},n.useImperativeHandle=function(e,n,t){return k.H.useImperativeHandle(e,n,t)},n.useInsertionEffect=function(e,n){return k.H.useInsertionEffect(e,n)},n.useLayoutEffect=function(e,n){return k.H.useLayoutEffect(e,n)},n.useMemo=function(e,n){return k.H.useMemo(e,n)},n.useOptimistic=function(e,n){return k.H.useOptimistic(e,n)},n.useReducer=function(e,n,t){return k.H.useReducer(e,n,t)},n.useRef=function(e){return k.H.useRef(e)},n.useState=function(e){return k.H.useState(e)},n.useSyncExternalStore=function(e,n,t){return k.H.useSyncExternalStore(e,n,t)},n.useTransition=function(){return k.H.useTransition()},n.version=\"19.2.0-canary-97cdd5d3-20250710\"},\"./dist/compiled/react/index.js\":function(e,n,t){\"use strict\";e.exports=t(\"./dist/compiled/react/cjs/react.production.js\")},\"./dist/compiled/react/jsx-runtime.js\":function(e,n,t){\"use strict\";e.exports=t(\"./dist/compiled/react/cjs/react-jsx-runtime.production.js\")},\"./dist/compiled/scheduler/cjs/scheduler.production.js\":function(e,n){\"use strict\";function t(e,n){var t=e.length;for(e.push(n);0<t;){var r=t-1>>>1,o=e[r];if(0<a(o,n))e[r]=n,e[t]=o,t=r;else break}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var n=e[0],t=e.pop();if(t!==n){e[0]=t;for(var r=0,o=e.length,i=o>>>1;r<i;){var l=2*(r+1)-1,s=e[l],c=l+1,u=e[c];if(0>a(s,t))c<o&&0>a(u,s)?(e[r]=u,e[c]=t,r=c):(e[r]=s,e[l]=t,r=l);else if(c<o&&0>a(u,t))e[r]=u,e[c]=t,r=c;else break}}return n}function a(e,n){var t=e.sortIndex-n.sortIndex;return 0!==t?t:e.id-n.id}if(n.unstable_now=void 0,\"object\"==typeof performance&&\"function\"==typeof performance.now){var i,l=performance;n.unstable_now=function(){return l.now()}}else{var s=Date,c=s.now();n.unstable_now=function(){return s.now()-c}}var u=[],d=[],f=1,p=null,h=3,g=!1,m=!1,v=!1,b=!1,y=\"function\"==typeof setTimeout?setTimeout:null,x=\"function\"==typeof clearTimeout?clearTimeout:null,w=\"undefined\"!=typeof setImmediate?setImmediate:null;function j(e){for(var n=r(d);null!==n;){if(null===n.callback)o(d);else if(n.startTime<=e)o(d),n.sortIndex=n.expirationTime,t(u,n);else break;n=r(d)}}function k(e){if(v=!1,j(e),!m)if(null!==r(u))m=!0,A||(A=!0,i());else{var n=r(d);null!==n&&L(k,n.startTime-e)}}var A=!1,O=-1,C=5,S=-1;function E(){return!!b||!(n.unstable_now()-S<C)}function _(){if(b=!1,A){var e=n.unstable_now();S=e;var t=!0;try{e:{m=!1,v&&(v=!1,x(O),O=-1),g=!0;var a=h;try{n:{for(j(e),p=r(u);null!==p&&!(p.expirationTime>e&&E());){var l=p.callback;if(\"function\"==typeof l){p.callback=null,h=p.priorityLevel;var s=l(p.expirationTime<=e);if(e=n.unstable_now(),\"function\"==typeof s){p.callback=s,j(e),t=!0;break n}p===r(u)&&o(u),j(e)}else o(u);p=r(u)}if(null!==p)t=!0;else{var c=r(d);null!==c&&L(k,c.startTime-e),t=!1}}break e}finally{p=null,h=a,g=!1}}}finally{t?i():A=!1}}}if(\"function\"==typeof w)i=function(){w(_)};else if(\"undefined\"!=typeof MessageChannel){var P=new MessageChannel,z=P.port2;P.port1.onmessage=_,i=function(){z.postMessage(null)}}else i=function(){y(_,0)};function L(e,t){O=y(function(){e(n.unstable_now())},t)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(e){e.callback=null},n.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):C=0<e?Math.floor(1e3/e):5},n.unstable_getCurrentPriorityLevel=function(){return h},n.unstable_next=function(e){switch(h){case 1:case 2:case 3:var n=3;break;default:n=h}var t=h;h=n;try{return e()}finally{h=t}},n.unstable_requestPaint=function(){b=!0},n.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var t=h;h=e;try{return n()}finally{h=t}},n.unstable_scheduleCallback=function(e,o,a){var l=n.unstable_now();switch(a=\"object\"==typeof a&&null!==a&&\"number\"==typeof(a=a.delay)&&0<a?l+a:l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=0x3fffffff;break;case 4:s=1e4;break;default:s=5e3}return s=a+s,e={id:f++,callback:o,priorityLevel:e,startTime:a,expirationTime:s,sortIndex:-1},a>l?(e.sortIndex=a,t(d,e),null===r(u)&&e===r(d)&&(v?(x(O),O=-1):v=!0,L(k,a-l))):(e.sortIndex=s,t(u,e),m||g||(m=!0,A||(A=!0,i()))),e},n.unstable_shouldYield=E,n.unstable_wrapCallback=function(e){var n=h;return function(){var t=h;h=n;try{return e.apply(this,arguments)}finally{h=t}}}},\"./dist/compiled/scheduler/index.js\":function(e,n,t){\"use strict\";e.exports=t(\"./dist/compiled/scheduler/cjs/scheduler.production.js\")},\"./dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\":function(e){(()=>{\"use strict\";\"undefined\"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=\"//\");var n,t,r,o,a,i,l,s,c={};Object.defineProperty(c,\"__esModule\",{value:!0}),n=\"<unknown>\",t=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|webpack-internal|rsc|turbopack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,r=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,o=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|webpack-internal|rsc|turbopack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,a=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|webpack-internal|rsc|turbopack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,i=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,l=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i,s=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,c.parse=function(e){return e.split(\"\\n\").reduce(function(e,c){var u,d,f,p,h,g,m=function(e){var o=t.exec(e);if(!o)return null;var a=o[2]&&0===o[2].indexOf(\"native\"),i=o[2]&&0===o[2].indexOf(\"eval\"),l=r.exec(o[2]);return i&&null!=l&&(o[2]=l[1],o[3]=l[2],o[4]=l[3]),{file:a?null:o[2],methodName:o[1]||n,arguments:a?[o[2]]:[],lineNumber:o[3]?+o[3]:null,column:o[4]?+o[4]:null}}(c)||(u=c,(d=o.exec(u))?{file:d[2],methodName:d[1]||n,arguments:[],lineNumber:+d[3],column:d[4]?+d[4]:null}:null)||function(e){var t=a.exec(e);if(!t)return null;var r=t[3]&&t[3].indexOf(\" > eval\")>-1,o=i.exec(t[3]);return r&&null!=o&&(t[3]=o[1],t[4]=o[2],t[5]=null),{file:t[3],methodName:t[1]||n,arguments:t[2]?t[2].split(\",\"):[],lineNumber:t[4]?+t[4]:null,column:t[5]?+t[5]:null}}(c)||(f=c,(p=s.exec(f))?{file:p[2],methodName:p[1]||n,arguments:[],lineNumber:+p[3],column:p[4]?+p[4]:null}:null)||(h=c,(g=l.exec(h))?{file:g[3],methodName:g[1]||n,arguments:[],lineNumber:+g[4],column:g[5]?+g[5]:null}:null);return m&&e.push(m),e},[])},e.exports=c})()},\"./dist/compiled/strip-ansi/index.js\":function(e){(()=>{\"use strict\";var n={511:e=>{e.exports=({onlyFirst:e=!1}={})=>RegExp(\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)|(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\",e?void 0:\"g\")},532:(e,n,t)=>{let r=t(511);e.exports=e=>\"string\"==typeof e?e.replace(r(),\"\"):e}},t={};function r(e){var o=t[e];if(void 0!==o)return o.exports;var a=t[e]={exports:{}},i=!0;try{n[e](a,a.exports,r),i=!1}finally{i&&delete t[e]}return a.exports}r.ab=\"//\",e.exports=r(532)})()},\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\":function(e){function n(){let e=window._nextjsDevtoolsStyleCache;if(e.cachedShadowRoot)return e.cachedShadowRoot;let n=document.querySelector(\"nextjs-portal\"),t=n?.shadowRoot||null;return t&&(e.cachedShadowRoot=t),t}function t(e,n){let t=window._nextjsDevtoolsStyleCache;t.lastInsertedElement?t.lastInsertedElement.nextSibling?n.insertBefore(e,t.lastInsertedElement.nextSibling):n.appendChild(e):n.insertBefore(e,n.firstChild),t.lastInsertedElement=e}function r(){let e=window._nextjsDevtoolsStyleCache,r=n();r&&(e.pendingElements.forEach(e=>{t(e,r)}),e.pendingElements=[])}\"undefined\"!=typeof window&&(window._nextjsDevtoolsStyleCache=window._nextjsDevtoolsStyleCache||{pendingElements:[],isObserving:!1,lastInsertedElement:null,cachedShadowRoot:null}),e.exports=function(e){e.setAttribute(\"data-nextjs-dev-tool-style\",\"true\");let o=n();o?t(e,o):(window._nextjsDevtoolsStyleCache.pendingElements.push(e),function(){let e=window._nextjsDevtoolsStyleCache;if(e.isObserving)return;if(e.isObserving=!0,n())return r();let t=new MutationObserver(o=>{if(0===o.length||0===o[0].addedNodes.length)return;let a=o[0].addedNodes[0],i=null;if(\"SCRIPT\"===a.tagName&&a.getAttribute(\"data-nextjs-dev-overlay\")?i=a.firstChild:\"NEXTJS-PORTAL\"===a.tagName&&(i=a),!i)return;let l=()=>{n()?(r(),t.disconnect(),e.isObserving=!1):setTimeout(l,20)};l()});t.observe(document.body,{childList:!0,subtree:!0})}())}},\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/dev-tools-info.tsx\":function(e,n,t){\"use strict\";t.d(n,{g:()=>s,x:()=>l});var r=t(\"./dist/compiled/react/jsx-runtime.js\"),o=t(\"./dist/compiled/react/index.js\"),a=t(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\"),i=t(\"./src/next-devtools/dev-overlay/hooks/use-delayed-render.ts\");function l(e){var n,t,l=e.title,s=e.children,u=e.learnMoreLink,d=e.isOpen,f=e.triggerRef,p=e.close,h=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"title\",\"children\",\"learnMoreLink\",\"isOpen\",\"triggerRef\",\"close\"]),g=(0,o.useRef)(null),m=(0,o.useRef)(null),v=(0,i.N)(d,{enterDelay:0,exitDelay:a.K7}),b=v.mounted,y=v.rendered;return((0,a.P5)(g,f,d,function(){var e;null==(e=m.current)||e.focus()}),(0,a.O8)(g,f,b,p),b)?(0,r.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}({tabIndex:-1,role:\"dialog\",ref:g,\"data-info-popover\":!0},h),t=t={\"data-rendered\":y,children:(0,r.jsxs)(\"div\",{className:\"dev-tools-info-container\",children:[(0,r.jsxs)(\"div\",{className:\"dev-tools-info-header\",children:[(0,r.jsx)(\"button\",{ref:m,className:\"dev-tools-info-close-button\",onClick:p,\"aria-label\":\"Close dialog\",children:(0,r.jsx)(c,{})}),(0,r.jsx)(\"h3\",{className:\"dev-tools-info-title\",children:l})]}),(0,r.jsxs)(\"div\",{className:\"dev-tools-info-body\",children:[s,u&&(0,r.jsx)(\"div\",{className:\"dev-tools-info-button-container\",children:(0,r.jsx)(\"a\",{className:\"dev-tools-info-learn-more-button\",href:u,target:\"_blank\",rel:\"noreferrer noopener\",children:\"Learn More\"})})]})]})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)):null}var s=\"\\n [data-info-popover] {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n background-clip: padding-box;\\n box-shadow: var(--shadow-menu);\\n border-radius: var(--rounded-xl);\\n position: absolute;\\n font-family: var(--font-stack-sans);\\n z-index: 3;\\n overflow: hidden;\\n opacity: 0;\\n outline: 0;\\n min-width: 350px;\\n transition: opacity var(--animate-out-duration-ms)\\n var(--animate-out-timing-function);\\n\\n &[data-rendered='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n\\n button:focus-visible {\\n outline: var(--focus-ring);\\n }\\n }\\n\\n .dev-tools-info-container {\\n width: 100%;\\n }\\n\\n .dev-tools-info-body {\\n padding: 16px;\\n }\\n\\n .dev-tools-info-header {\\n height: 48px;\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n padding: 6px 8px;\\n border-bottom: 1px solid var(--color-gray-alpha-400);\\n }\\n\\n .dev-tools-info-close-button {\\n all: unset;\\n width: 20px;\\n height: 20px; \\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: var(--color-gray-900);\\n transition: color 150ms ease;\\n translate: 0 1px;\\n border-radius: 3px;\\n\\n &:hover {\\n color: var(--color-gray-1000);\\n }\\n }\\n\\n .dev-tools-info-title {\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-20);\\n margin: 0;\\n }\\n\\n .dev-tools-info-section-title {\\n padding: 8px 0px;\\n color: var(--color-gray-1000);\\n font-size: var(--size-16);\\n font-weight: 600;\\n line-height: var(--size-20);\\n margin: 0;\\n }\\n\\n .dev-tools-info-article {\\n padding: 8px 6px;\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n margin: 0;\\n }\\n .dev-tools-info-paragraph {\\n &:last-child {\\n margin-bottom: 0;\\n }\\n }\\n\\n .dev-tools-info-button-container {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n }\\n\\n .dev-tools-info-learn-more-button {\\n align-content: center;\\n padding: 0 8px;\\n height: var(--size-28);\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-20);\\n transition: background var(--duration-short) ease;\\n color: var(--color-background-100);\\n border-radius: var(--rounded-md-2);\\n background: var(--color-gray-1000);\\n margin-left: auto;\\n }\\n\\n .dev-tools-info-learn-more-button:hover {\\n text-decoration: none;\\n color: var(--color-background-100);\\n opacity: 0.9;\\n }\\n\";function c(){return(0,r.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,r.jsx)(\"path\",{d:\"M5.14645 8.70703C4.75595 8.31651 4.75595 7.68349 5.14645 7.29297L10.5 1.93945L11.5605 3L6.56051 8L11.5605 13L10.5 14.0605L5.14645 8.70703Z\",fill:\"currentColor\"})})}},\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/segments-explorer.tsx\":function(e,n,t){\"use strict\";t.d(n,{W:()=>i});var r=t(\"./dist/compiled/react/jsx-runtime.js\"),o=t(\"./src/next-devtools/dev-overlay/components/overview/segment-explorer.tsx\"),a=t(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/dev-tools-info.tsx\");function i(e){var n,t,i=e.routerType,l=e.page,s=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"routerType\",\"page\"]);return(0,r.jsx)(a.x,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}({title:\"Route Info\"},s),t=t={children:(0,r.jsx)(\"div\",{\"data-nextjs-segments-explorer\":!0,style:{margin:\"-16px\"},children:(0,r.jsx)(o.u,{isAppRouter:\"app\"===i,page:l})})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}},\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\":function(e,n,t){\"use strict\";t.d(n,{K7:()=>s,O8:()=>l,P5:()=>a,uD:()=>c,vY:()=>i});var r=t(\"./dist/compiled/react/index.js\");function o(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function a(e,n,t,a){(0,r.useEffect)(function(){var r=function(e){if(\"Tab\"===e.key&&null!==l){var n,t,r=(t=(n=l.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'))?[n[0],n[n.length-1]]:[],function(e){if(Array.isArray(e))return e}(t)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,n){if(e){if(\"string\"==typeof e)return o(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o(e,n)}}(t,2)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=r[0],s=r[1],c=i(l);e.shiftKey?c===a&&(null==s||s.focus(),e.preventDefault()):c===s&&(null==a||a.focus(),e.preventDefault())}},l=null,s=setTimeout(function(){if(l=e.current,t)a?a():null==l||l.focus(),null==l||l.addEventListener(\"keydown\",r);else{var o,s=i(l);n&&(null==l?void 0:l.contains(s))&&(null==(o=n.current)||o.focus())}});return function(){clearTimeout(s),null==l||l.removeEventListener(\"keydown\",r)}},[t])}function i(e){var n,t=null==e?void 0:e.getRootNode();return(null!=(n=ShadowRoot)&&\"undefined\"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](t):t instanceof n)?null==t?void 0:t.activeElement:null}function l(e,n,t,o,a){(0,r.useEffect)(function(){var r,i=function(t){var r,a,i=t.target;!(e.current&&e.current.contains(i))&&(null!=(r=e.current)&&r.getBoundingClientRect()&&t.clientX>=e.current.getBoundingClientRect().left&&t.clientX<=e.current.getBoundingClientRect().right&&t.clientY>=e.current.getBoundingClientRect().top&&t.clientY<=e.current.getBoundingClientRect().bottom||null!=(a=n.current)&&a.getBoundingClientRect()&&t.clientX>=n.current.getBoundingClientRect().left&&t.clientX<=n.current.getBoundingClientRect().right&&t.clientY>=n.current.getBoundingClientRect().top&&t.clientY<=n.current.getBoundingClientRect().bottom||o())},l=function(e){\"Escape\"===e.key&&o()};if(t){var s=a||(null==(r=e.current)?void 0:r.ownerDocument);return null==s||s.addEventListener(\"mousedown\",i),null==s||s.addEventListener(\"keydown\",l),function(){null==s||s.removeEventListener(\"mousedown\",i),null==s||s.removeEventListener(\"keydown\",l)}}},[t,e,n])}var s=200,c=\"cubic-bezier(0.175, 0.885, 0.32, 1.1)\"},\"./src/next-devtools/dev-overlay/components/overview/segment-explorer.tsx\":function(e,n,t){\"use strict\";t.d(n,{u:()=>at});var r,o,a,i,l=t(\"./dist/compiled/react/jsx-runtime.js\"),s=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\"),c=t.n(s),u=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\"),d=t.n(u),f=t(\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\"),p=t.n(f),h=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\"),g=t.n(h),m=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\"),v=t.n(m),b=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\"),y=t.n(b),x=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\"),w={};w.styleTagTransform=y(),w.setAttributes=g(),w.insert=p(),w.domAPI=d(),w.insertStyleElement=v(),c()(x.Z,w),x.Z&&x.Z.locals&&x.Z.locals;var j=t(\"./src/next-devtools/dev-overlay/segment-explorer-trie.ts\"),k=t(\"./src/next-devtools/dev-overlay/utils/cx.ts\"),A=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\"),O={};O.styleTagTransform=y(),O.setAttributes=g(),O.insert=p(),O.domAPI=d(),O.insertStyleElement=v(),c()(A.Z,O),A.Z&&A.Z.locals&&A.Z.locals;var C=t(\"./dist/compiled/react/index.js\"),S=t.t(C,2),E=t(\"./dist/compiled/react-dom/index.js\");let _={};function P(e,n){let t=C.useRef(_);return t.current===_&&(t.current=e(n)),t}let z=S[`useInsertionEffect${Math.random().toFixed(1)}`.slice(0,-3)],L=z&&z!==C.useLayoutEffect?z:e=>e();function T(e){let n=P(R).current;return n.next=e,L(n.effect),n.trampoline}function R(){let e={next:void 0,callback:N,trampoline:(...n)=>e.callback?.(...n),effect:()=>{e.callback=e.next}};return e}function N(){}function D(){let e=new Map;return{emit(n,t){e.get(n)?.forEach(e=>e(t))},on(n,t){e.has(n)||e.set(n,new Set),e.get(n).add(t)},off(n,t){e.get(n)?.delete(t)}}}let B={...S},M=0,I=B.useId;function H(e,n){if(void 0!==I){let t=I();return e??(n?`${n}-${t}`:t)}return function(e,n=\"mui\"){let[t,r]=C.useState(e),o=e||t;return C.useEffect(()=>{null==t&&(M+=1,r(`${n}-${M}`))},[t,n]),o}(e,n)}let F=\"undefined\"!=typeof document?C.useLayoutEffect:()=>{},U=C.createContext(null),V=C.createContext(null),q=()=>C.useContext(U)?.id||null,W=()=>C.useContext(V);function $(e){let{children:n,id:t}=e,r=q();return(0,l.jsx)(U.Provider,{value:C.useMemo(()=>({id:t,parentId:r}),[t,r]),children:n})}function Z(e){let{children:n}=e,t=C.useRef([]),r=C.useCallback(e=>{t.current=[...t.current,e]},[]),o=C.useCallback(e=>{t.current=t.current.filter(n=>n!==e)},[]),[a]=C.useState(()=>D());return(0,l.jsx)(V.Provider,{value:C.useMemo(()=>({nodesRef:t,addNode:r,removeNode:o,events:a}),[r,o,a]),children:n})}function Y(e){let{open:n=!1,onOpenChange:t,elements:r}=e,o=H(),a=C.useRef({}),[i]=C.useState(()=>D()),l=null!=q(),[s,c]=C.useState(r.reference),u=T((e,n,r)=>{a.current.openEvent=e?n:void 0,i.emit(\"openchange\",{open:e,event:n,reason:r,nested:l}),t?.(e,n,r)}),d=C.useMemo(()=>({setPositionReference:c}),[]),f=C.useMemo(()=>({reference:s||r.reference||null,floating:r.floating||null,domReference:r.reference}),[s,r.reference,r.floating]);return C.useMemo(()=>({dataRef:a,open:n,onOpenChange:u,elements:f,events:i,floatingId:o,refs:d}),[n,u,f,i,o,d])}function X(){return\"undefined\"!=typeof window}function K(e){return J(e)?(e.nodeName||\"\").toLowerCase():\"#document\"}function Q(e){var n;return(null==e||null==(n=e.ownerDocument)?void 0:n.defaultView)||window}function G(e){var n;return null==(n=(J(e)?e.ownerDocument:e.document)||window.document)?void 0:n.documentElement}function J(e){return!!X()&&(e instanceof Node||e instanceof Q(e).Node)}function ee(e){return!!X()&&(e instanceof Element||e instanceof Q(e).Element)}function en(e){return!!X()&&(e instanceof HTMLElement||e instanceof Q(e).HTMLElement)}function et(e){return!!X()&&\"undefined\"!=typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof Q(e).ShadowRoot)}let er=new Set([\"inline\",\"contents\"]);function eo(e){let{overflow:n,overflowX:t,overflowY:r,display:o}=eg(e);return/auto|scroll|overlay|hidden|clip/.test(n+r+t)&&!er.has(o)}let ea=new Set([\"table\",\"td\",\"th\"]),ei=[\":popover-open\",\":modal\"];function el(e){return ei.some(n=>{try{return e.matches(n)}catch(e){return!1}})}let es=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\"],ec=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\",\"filter\"],eu=[\"paint\",\"layout\",\"strict\",\"content\"];function ed(e){let n=ef(),t=ee(e)?eg(e):e;return es.some(e=>!!t[e]&&\"none\"!==t[e])||!!t.containerType&&\"normal\"!==t.containerType||!n&&!!t.backdropFilter&&\"none\"!==t.backdropFilter||!n&&!!t.filter&&\"none\"!==t.filter||ec.some(e=>(t.willChange||\"\").includes(e))||eu.some(e=>(t.contain||\"\").includes(e))}function ef(){return\"undefined\"!=typeof CSS&&!!CSS.supports&&CSS.supports(\"-webkit-backdrop-filter\",\"none\")}let ep=new Set([\"html\",\"body\",\"#document\"]);function eh(e){return ep.has(K(e))}function eg(e){return Q(e).getComputedStyle(e)}function em(e){return ee(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function ev(e){if(\"html\"===K(e))return e;let n=e.assignedSlot||e.parentNode||et(e)&&e.host||G(e);return et(n)?n.host:n}function eb(e,n,t){var r;void 0===n&&(n=[]),void 0===t&&(t=!0);let o=function e(n){let t=ev(n);return eh(t)?n.ownerDocument?n.ownerDocument.body:n.body:en(t)&&eo(t)?t:e(t)}(e),a=o===(null==(r=e.ownerDocument)?void 0:r.body),i=Q(o);if(a){let e=ey(i);return n.concat(i,i.visualViewport||[],eo(o)?o:[],e&&t?eb(e):[])}return n.concat(o,eb(o,[],t))}function ey(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}let ex=[];function ew(e){C.useEffect(e,ex)}class ej{static create(){return new ej}currentId=0;start(e,n){this.clear(),this.currentId=setTimeout(()=>{this.currentId=0,n()},e)}isStarted(){return 0!==this.currentId}clear=()=>{0!==this.currentId&&(clearTimeout(this.currentId),this.currentId=0)};disposeEffect=()=>this.clear}function ek(){let e=P(ej.create).current;return ew(e.disposeEffect),e}function eA(e){let n=P(eO,e).current;return n.next=e,F(n.effect),n}function eO(e){let n={current:e,next:e,effect:()=>{n.current=n.next}};return n}let eC=\"undefined\"!=typeof navigator,eS=function(){if(\"undefined\"==typeof navigator)return{platform:\"\",maxTouchPoints:-1};let e=navigator.userAgentData;return e?.platform?{platform:e.platform,maxTouchPoints:navigator.maxTouchPoints}:{platform:navigator.platform??\"\",maxTouchPoints:navigator.maxTouchPoints??-1}}(),eE=function(){if(!eC)return\"\";let e=navigator.userAgentData;return e?.platform?e.platform:navigator.platform??\"\"}(),e_=function(){if(!eC)return\"\";let e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(({brand:e,version:n})=>`${e}/${n}`).join(\" \"):navigator.userAgent}(),eP=\"undefined\"!=typeof CSS&&!!CSS.supports&&CSS.supports(\"-webkit-backdrop-filter:none\"),ez=\"MacIntel\"===eS.platform&&eS.maxTouchPoints>1||/iP(hone|ad|od)|iOS/.test(eS.platform);eC&&/firefox/i.test(e_);let eL=eC&&/apple/i.test(navigator.vendor),eT=eC&&/android/i.test(eE)||/android/i.test(e_),eR=eC&&eE.toLowerCase().startsWith(\"mac\")&&!navigator.maxTouchPoints,eN=e_.includes(\"jsdom/\");function eD(e){e.preventDefault(),e.stopPropagation()}function eB(e){return 0===e.mozInputSource&&!!e.isTrusted||(eT&&e.pointerType?\"click\"===e.type&&1===e.buttons:0===e.detail&&!e.pointerType)}function eM(e){return!eN&&(!eT&&0===e.width&&0===e.height||eT&&1===e.width&&1===e.height&&0===e.pressure&&0===e.detail&&\"mouse\"===e.pointerType||e.width<1&&e.height<1&&0===e.pressure&&0===e.detail&&\"touch\"===e.pointerType)}function eI(e,n){let t=[\"mouse\",\"pen\"];return n||t.push(\"\",void 0),t.includes(e)}let eH=\"data-base-ui-focusable\",eF=\"active\",eU=\"selected\",eV=\"ArrowLeft\",eq=\"ArrowRight\",eW=\"ArrowUp\",e$=\"ArrowDown\";function eZ(e){let n=e.activeElement;for(;n?.shadowRoot?.activeElement!=null;)n=n.shadowRoot.activeElement;return n}function eY(e,n){if(!e||!n)return!1;let t=n.getRootNode?.();if(e.contains(n))return!0;if(t&&et(t)){let t=n;for(;t;){if(e===t)return!0;t=t.parentNode||t.host}}return!1}function eX(e){return\"composedPath\"in e?e.composedPath()[0]:e.target}function eK(e,n){return null!=n&&(\"composedPath\"in e?e.composedPath().includes(n):null!=e.target&&n.contains(e.target))}function eQ(e){return e?.ownerDocument||document}function eG(e){return en(e)&&e.matches(\"input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\")}function eJ(e){return!!e&&\"combobox\"===e.getAttribute(\"role\")&&eG(e)}function e0(e){return e?e.hasAttribute(eH)?e:e.querySelector(`[${eH}]`)||e:null}function e1(e){return`data-base-ui-${e}`}let e2=e1(\"safe-polygon\");function e4(e,n,t){if(t&&!eI(t))return 0;if(\"number\"==typeof e)return e;if(\"function\"==typeof e){let t=e();return\"number\"==typeof t?t:t?.[n]}return e?.[n]}function e5(e){return\"function\"==typeof e?e():e}function e3(e,n={}){let{open:t,onOpenChange:r,dataRef:o,events:a,elements:i}=e,{enabled:l=!0,delay:s=0,handleClose:c=null,mouseOnly:u=!1,restMs:d=0,move:f=!0}=n,p=W(),h=q(),g=eA(c),m=eA(s),v=eA(t),b=eA(d),y=C.useRef(void 0),x=ek(),w=C.useRef(void 0),j=ek(),k=C.useRef(!0),A=C.useRef(!1),O=C.useRef(()=>{}),S=C.useRef(!1),E=T(()=>{let e=o.current.openEvent?.type;return e?.includes(\"mouse\")&&\"mousedown\"!==e});C.useEffect(()=>{if(l)return a.on(\"openchange\",e),()=>{a.off(\"openchange\",e)};function e({open:e}){e||(x.clear(),j.clear(),k.current=!0,S.current=!1)}},[l,a,x,j]),C.useEffect(()=>{if(!l||!g.current||!t)return;function e(e){E()&&r(!1,e,\"hover\")}let n=eQ(i.floating).documentElement;return n.addEventListener(\"mouseleave\",e),()=>{n.removeEventListener(\"mouseleave\",e)}},[i.floating,t,r,l,g,E]);let _=C.useCallback((e,n=!0,t=\"hover\")=>{let o=e4(m.current,\"close\",y.current);o&&!w.current?x.start(o,()=>r(!1,e,t)):n&&(x.clear(),r(!1,e,t))},[m,r,x]),P=T(()=>{O.current(),w.current=void 0}),z=T(()=>{if(A.current){let e=eQ(i.floating).body;e.style.pointerEvents=\"\",e.removeAttribute(e2),A.current=!1}}),L=T(()=>!!o.current.openEvent&&[\"click\",\"mousedown\"].includes(o.current.openEvent.type));C.useEffect(()=>{if(l&&ee(i.domReference)){let r=i.domReference,o=i.floating;return t&&r.addEventListener(\"mouseleave\",a),f&&r.addEventListener(\"mousemove\",e,{once:!0}),r.addEventListener(\"mouseenter\",e),r.addEventListener(\"mouseleave\",n),o&&(o.addEventListener(\"mouseleave\",a),o.addEventListener(\"mouseenter\",s),o.addEventListener(\"mouseleave\",c)),()=>{t&&r.removeEventListener(\"mouseleave\",a),f&&r.removeEventListener(\"mousemove\",e),r.removeEventListener(\"mouseenter\",e),r.removeEventListener(\"mouseleave\",n),o&&(o.removeEventListener(\"mouseleave\",a),o.removeEventListener(\"mouseenter\",s),o.removeEventListener(\"mouseleave\",c))}}function e(e){if(x.clear(),k.current=!1,u&&!eI(y.current)||e5(b.current)>0&&!e4(m.current,\"open\"))return;let n=e4(m.current,\"open\",y.current);n?x.start(n,()=>{v.current||r(!0,e,\"hover\")}):t||r(!0,e,\"hover\")}function n(e){if(L())return void z();O.current();let n=eQ(i.floating);if(j.clear(),S.current=!1,g.current&&o.current.floatingContext){t||x.clear(),w.current=g.current({...o.current.floatingContext,tree:p,x:e.clientX,y:e.clientY,onClose(){z(),P(),L()||_(e,!0,\"safe-polygon\")}});let r=w.current;n.addEventListener(\"mousemove\",r),O.current=()=>{n.removeEventListener(\"mousemove\",r)};return}\"touch\"===y.current&&eY(i.floating,e.relatedTarget)||_(e)}function a(e){!L()&&o.current.floatingContext&&g.current?.({...o.current.floatingContext,tree:p,x:e.clientX,y:e.clientY,onClose(){z(),P(),L()||_(e)}})(e)}function s(){x.clear()}function c(e){L()||_(e,!1)}},[i,l,e,u,f,_,P,z,r,t,v,p,m,g,o,L,b,x,j]),F(()=>{if(l&&t&&g.current?.__options?.blockPointerEvents&&E()){A.current=!0;let e=i.floating;if(ee(i.domReference)&&e){let n=eQ(i.floating).body;n.setAttribute(e2,\"\");let t=i.domReference,r=p?.nodesRef.current.find(e=>e.id===h)?.context?.elements.floating;return r&&(r.style.pointerEvents=\"\"),n.style.pointerEvents=\"none\",t.style.pointerEvents=\"auto\",e.style.pointerEvents=\"auto\",()=>{n.style.pointerEvents=\"\",t.style.pointerEvents=\"\",e.style.pointerEvents=\"\"}}}},[l,t,h,i,p,g,E]),F(()=>{t||(y.current=void 0,S.current=!1,P(),z())},[t,P,z]),C.useEffect(()=>()=>{P(),x.clear(),j.clear(),z()},[l,i.domReference,P,z,x,j]);let R=C.useMemo(()=>{function e(e){y.current=e.pointerType}return{onPointerDown:e,onPointerEnter:e,onMouseMove(e){let{nativeEvent:n}=e;function o(){k.current||v.current||r(!0,n,\"hover\")}(!u||eI(y.current))&&!t&&0!==e5(b.current)&&(S.current&&e.movementX**2+e.movementY**2<2||(j.clear(),\"touch\"===y.current?o():(S.current=!0,j.start(e5(b.current),o))))}}},[u,r,t,v,b,j]);return C.useMemo(()=>l?{reference:R}:{},[l,R])}function e6(e,n,t=!0){return e.filter(e=>e.parentId===n&&(!t||e.context?.open)).flatMap(n=>[n,...e6(e,n.id,t)])}function e9(e,n){let t=[],r=e.find(e=>e.id===n)?.parentId;for(;r;){let n=e.find(e=>e.id===r);r=n?.parentId,n&&(t=t.concat(n))}return t}function e8(e,n){let[t,r]=e,o=!1,a=n.length;for(let e=0,i=a-1;e<a;i=e++){let[a,l]=n[e]||[0,0],[s,c]=n[i]||[0,0];l>=r!=c>=r&&t<=(s-a)*(r-l)/(c-l)+a&&(o=!o)}return o}function e7(e={}){let{buffer:n=.5,blockPointerEvents:t=!1,requireIntent:r=!0}=e,o=new ej,a=!1,i=null,l=null,s=performance.now(),c=({x:e,y:t,placement:c,elements:u,onClose:d,nodeId:f,tree:p})=>function(h){function g(){o.clear(),d()}if(o.clear(),!u.domReference||!u.floating||null==c||null==e||null==t)return;let{clientX:m,clientY:v}=h,b=[m,v],y=eX(h),x=\"mouseleave\"===h.type,w=eY(u.floating,y),j=eY(u.domReference,y),k=u.domReference.getBoundingClientRect(),A=u.floating.getBoundingClientRect(),O=c.split(\"-\")[0],C=e>A.right-A.width/2,S=t>A.bottom-A.height/2,E=b[0]>=k.x&&b[0]<=k.x+k.width&&b[1]>=k.y&&b[1]<=k.y+k.height,_=A.width>k.width,P=A.height>k.height,z=(_?k:A).left,L=(_?k:A).right,T=(P?k:A).top,R=(P?k:A).bottom;if(w&&(a=!0,!x))return;if(j&&(a=!1),j&&!x){a=!0;return}if(x&&ee(h.relatedTarget)&&eY(u.floating,h.relatedTarget)||p&&e6(p.nodesRef.current,f).some(({context:e})=>e?.open))return;if(\"top\"===O&&t>=k.bottom-1||\"bottom\"===O&&t<=k.top+1||\"left\"===O&&e>=k.right-1||\"right\"===O&&e<=k.left+1)return g();let N=[];switch(O){case\"top\":N=[[z,k.top+1],[z,A.bottom-1],[L,A.bottom-1],[L,k.top+1]];break;case\"bottom\":N=[[z,A.top+1],[z,k.bottom-1],[L,k.bottom-1],[L,A.top+1]];break;case\"left\":N=[[A.right-1,R],[A.right-1,T],[k.left+1,T],[k.left+1,R]];break;case\"right\":N=[[k.right-1,R],[k.right-1,T],[A.left+1,T],[A.left+1,R]]}if(!e8([m,v],N)){if(a&&!E)return g();if(!x&&r){let e=function(e,n){let t=performance.now(),r=t-s;if(null===i||null===l||0===r)return i=e,l=n,s=t,null;let o=e-i,a=n-l,c=Math.sqrt(o*o+a*a);return i=e,l=n,s=t,c/r}(h.clientX,h.clientY);if(null!==e&&e<.1)return g()}e8([m,v],function([e,t]){switch(O){case\"top\":{let r=[[A.left,C||_?A.bottom-n:A.top],[A.right,C?_?A.bottom-n:A.top:A.bottom-n]];return[[_?e+n/2:C?e+4*n:e-4*n,t+n+1],[_?e-n/2:C?e+4*n:e-4*n,t+n+1],...r]}case\"bottom\":{let r=[[A.left,C||_?A.top+n:A.bottom],[A.right,C?_?A.top+n:A.bottom:A.top+n]];return[[_?e+n/2:C?e+4*n:e-4*n,t-n],[_?e-n/2:C?e+4*n:e-4*n,t-n],...r]}case\"left\":return[[S||P?A.right-n:A.left,A.top],[S?P?A.right-n:A.left:A.right-n,A.bottom],[e+n+1,P?t+n/2:S?t+4*n:t-4*n],[e+n+1,P?t-n/2:S?t+4*n:t-4*n]];case\"right\":{let r=[[S||P?A.left+n:A.right,A.top],[S?P?A.left+n:A.right:A.left+n,A.bottom]];return[[e-n,P?t+n/2:S?t+4*n:t-4*n],[e-n,P?t-n/2:S?t+4*n:t-4*n],...r]}default:return[]}}([e,t]))?!a&&r&&o.start(40,g):g()}};return c.__options={blockPointerEvents:t},c}let ne=eR&&eL;function nn(e,n={}){let{open:t,onOpenChange:r,events:o,dataRef:a,elements:i}=e,{enabled:l=!0,visibleOnly:s=!0}=n,c=C.useRef(!1),u=ek(),d=C.useRef(!0);C.useEffect(()=>{if(!l)return;let e=Q(i.domReference);function n(){!t&&en(i.domReference)&&i.domReference===eZ(eQ(i.domReference))&&(c.current=!0)}function r(){d.current=!0}function o(){d.current=!1}return e.addEventListener(\"blur\",n),ne&&(e.addEventListener(\"keydown\",r,!0),e.addEventListener(\"pointerdown\",o,!0)),()=>{e.removeEventListener(\"blur\",n),ne&&(e.removeEventListener(\"keydown\",r,!0),e.removeEventListener(\"pointerdown\",o,!0))}},[i.domReference,t,l]),C.useEffect(()=>{if(l)return o.on(\"openchange\",e),()=>{o.off(\"openchange\",e)};function e({reason:e}){(\"reference-press\"===e||\"escape-key\"===e)&&(c.current=!0)}},[o,l]);let f=C.useMemo(()=>({onMouseLeave(){c.current=!1},onFocus(e){if(c.current)return;let n=eX(e.nativeEvent);if(s&&ee(n)){if(ne&&!e.relatedTarget){if(!d.current&&!eG(n))return}else if(!function(e){if(!e||eN)return!0;try{return e.matches(\":focus-visible\")}catch(e){return!0}}(n))return}r(!0,e.nativeEvent,\"focus\")},onBlur(e){c.current=!1;let n=e.relatedTarget,t=e.nativeEvent,o=ee(n)&&n.hasAttribute(e1(\"focus-guard\"))&&\"outside\"===n.getAttribute(\"data-type\");u.start(0,()=>{let e=eZ(i.domReference?i.domReference.ownerDocument:document);(n||e!==i.domReference)&&(eY(a.current.floatingContext?.refs.floating.current,e)||eY(i.domReference,e)||o||r(!1,t,\"focus\"))})}}),[a,i.domReference,r,s,u]);return C.useMemo(()=>l?{reference:f}:{},[l,f])}let nt={style:{transition:\"none\"}},nr={},no={fallbackAxisSide:\"none\"},na={fallbackAxisSide:\"end\"},ni=new class{callbacks=[];callbacksCount=0;nextId=1;startId=1;isScheduled=!1;tick=e=>{this.isScheduled=!1;let n=this.callbacks,t=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,t>0)for(let t=0;t<n.length;t+=1)n[t]?.(e)};request(e){let n=this.nextId;return this.nextId+=1,this.callbacks.push(e),this.callbacksCount+=1,this.isScheduled||(requestAnimationFrame(this.tick),this.isScheduled=!0),n}cancel(e){let n=e-this.startId;n<0||n>=this.callbacks.length||(this.callbacks[n]=null,this.callbacksCount-=1)}};class nl{static create(){return new nl}static request(e){return ni.request(e)}static cancel(e){return ni.cancel(e)}currentId=null;request(e){this.cancel(),this.currentId=ni.request(()=>{this.currentId=null,e()})}cancel=()=>{null!==this.currentId&&(ni.cancel(this.currentId),this.currentId=null)};disposeEffect=()=>this.cancel}function ns(){let e=P(nl.create).current;return ew(e.disposeEffect),e}let nc={pointerdown:\"onPointerDown\",mousedown:\"onMouseDown\",click:\"onClick\"},nu={pointerdown:\"onPointerDownCapture\",mousedown:\"onMouseDownCapture\",click:\"onClickCapture\"},nd=e=>({escapeKey:\"boolean\"==typeof e?e:e?.escapeKey??!1,outsidePress:\"boolean\"==typeof e?e:e?.outsidePress??!0});function nf(e,n={}){let{open:t,onOpenChange:r,elements:o,dataRef:a}=e,{enabled:i=!0,escapeKey:l=!0,outsidePress:s=!0,outsidePressEvent:c=\"pointerdown\",referencePress:u=!1,referencePressEvent:d=\"pointerdown\",ancestorScroll:f=!1,bubbles:p,capture:h}=n,g=W(),m=T(\"function\"==typeof s?s:()=>!1),v=\"function\"==typeof s?m:s,b=C.useRef(!1),{escapeKey:y,outsidePress:x}=nd(p),{escapeKey:w,outsidePress:j}=nd(h),k=C.useRef(!1),A=ek(),O=T(e=>{if(!t||!i||!l||\"Escape\"!==e.key||k.current)return;let n=a.current.floatingContext?.nodeId,o=g?e6(g.nodesRef.current,n):[];if(!y&&(e.stopPropagation(),o.length>0)){let e=!0;if(o.forEach(n=>{n.context?.open&&!n.context.dataRef.current.__escapeKeyBubbles&&(e=!1)}),!e)return}r(!1,\"nativeEvent\"in e?e.nativeEvent:e,\"escape-key\")}),S=T(e=>{let n=()=>{O(e),eX(e)?.removeEventListener(\"keydown\",n)};eX(e)?.addEventListener(\"keydown\",n)}),E=T(e=>{let n=a.current.insideReactTree;a.current.insideReactTree=!1;let t=b.current;if(b.current=!1,\"click\"===c&&t||n||\"function\"==typeof v&&!v(e))return;let i=eX(e),l=`[${e1(\"inert\")}]`,s=eQ(o.floating).querySelectorAll(l),u=ee(i)?i:null;for(;u&&!eh(u);){let e=ev(u);if(eh(e)||!ee(e))break;u=e}if(s.length&&ee(i)&&!i.matches(\"html,body\")&&!eY(i,o.floating)&&Array.from(s).every(e=>!eY(u,e)))return;if(en(i)){let n=eh(i),t=eg(i),r=/auto|scroll/,o=n||r.test(t.overflowX),a=n||r.test(t.overflowY),l=o&&i.clientWidth>0&&i.scrollWidth>i.clientWidth,s=a&&i.clientHeight>0&&i.scrollHeight>i.clientHeight,c=\"rtl\"===t.direction,u=s&&(c?e.offsetX<=i.offsetWidth-i.clientWidth:e.offsetX>i.clientWidth),d=l&&e.offsetY>i.clientHeight;if(u||d)return}let d=a.current.floatingContext?.nodeId,f=g&&e6(g.nodesRef.current,d).some(n=>eK(e,n.context?.elements.floating));if(eK(e,o.floating)||eK(e,o.domReference)||f)return;let p=g?e6(g.nodesRef.current,d):[];if(p.length>0){let e=!0;if(p.forEach(n=>{n.context?.open&&!n.context.dataRef.current.__outsidePressBubbles&&(e=!1)}),!e)return}r(!1,e,\"outside-press\")}),_=T(e=>{let n=()=>{E(e),eX(e)?.removeEventListener(c,n)};eX(e)?.addEventListener(c,n)});C.useEffect(()=>{if(!t||!i)return;a.current.__escapeKeyBubbles=y,a.current.__outsidePressBubbles=x;let e=new ej;function n(e){r(!1,e,\"ancestor-scroll\")}function s(){e.clear(),k.current=!0}function u(){e.start(5*!!ef(),()=>{k.current=!1})}let d=eQ(o.floating);l&&(d.addEventListener(\"keydown\",w?S:O,w),d.addEventListener(\"compositionstart\",s),d.addEventListener(\"compositionend\",u)),v&&d.addEventListener(c,j?_:E,j);let p=[];return f&&(ee(o.domReference)&&(p=eb(o.domReference)),ee(o.floating)&&(p=p.concat(eb(o.floating))),!ee(o.reference)&&o.reference&&o.reference.contextElement&&(p=p.concat(eb(o.reference.contextElement)))),(p=p.filter(e=>e!==d.defaultView?.visualViewport)).forEach(e=>{e.addEventListener(\"scroll\",n,{passive:!0})}),()=>{l&&(d.removeEventListener(\"keydown\",w?S:O,w),d.removeEventListener(\"compositionstart\",s),d.removeEventListener(\"compositionend\",u)),v&&d.removeEventListener(c,j?_:E,j),p.forEach(e=>{e.removeEventListener(\"scroll\",n)}),e.clear()}},[a,o,l,v,c,t,r,f,i,y,x,O,w,S,E,j,_]),C.useEffect(()=>{a.current.insideReactTree=!1},[a,v,c]);let P=C.useMemo(()=>({onKeyDown:O,...u&&{[nc[d]]:e=>{r(!1,e.nativeEvent,\"reference-press\")},...\"click\"!==d&&{onClick(e){r(!1,e.nativeEvent,\"reference-press\")}}}}),[O,r,u,d]),z=C.useMemo(()=>({onKeyDown:O,onMouseDown(){b.current=!0},onMouseUp(){b.current=!0},[nu[c]]:()=>{a.current.insideReactTree=!0},onBlurCapture(){g||(a.current.insideReactTree=!0,A.start(0,()=>{a.current.insideReactTree=!1}))}}),[O,c,a,g,A]);return C.useMemo(()=>i?{reference:P,floating:z}:{},[i,P,z])}let np=new Map([[\"select\",\"listbox\"],[\"combobox\",\"listbox\"],[\"label\",!1]]),nh=[\"top\",\"right\",\"bottom\",\"left\"],ng=Math.min,nm=Math.max,nv=Math.round,nb=Math.floor,ny=e=>({x:e,y:e}),nx={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"},nw={start:\"end\",end:\"start\"};function nj(e,n){return\"function\"==typeof e?e(n):e}function nk(e){return e.split(\"-\")[0]}function nA(e){return e.split(\"-\")[1]}function nO(e){return\"x\"===e?\"y\":\"x\"}function nC(e){return\"y\"===e?\"height\":\"width\"}let nS=new Set([\"top\",\"bottom\"]);function nE(e){return nS.has(nk(e))?\"y\":\"x\"}function n_(e){return e.replace(/start|end/g,e=>nw[e])}let nP=[\"left\",\"right\"],nz=[\"right\",\"left\"],nL=[\"top\",\"bottom\"],nT=[\"bottom\",\"top\"];function nR(e){return e.replace(/left|right|bottom|top/g,e=>nx[e])}function nN(e){return\"number\"!=typeof e?{top:0,right:0,bottom:0,left:0,...e}:{top:e,right:e,bottom:e,left:e}}function nD(e){let{x:n,y:t,width:r,height:o}=e;return{width:r,height:o,top:t,left:n,right:n+r,bottom:t+o,x:n,y:t}}function nB(e,n,t){return Math.floor(e/n)!==t}function nM(e,n){return n<0||n>=e.current.length}function nI(e,n){return nF(e,{disabledIndices:n})}function nH(e,n){return nF(e,{decrement:!0,startingIndex:e.current.length,disabledIndices:n})}function nF(e,{startingIndex:n=-1,decrement:t=!1,disabledIndices:r,amount:o=1}={}){let a=n;do a+=t?-o:o;while(a>=0&&a<=e.current.length-1&&nU(e,a,r));return a}function nU(e,n,t){if(\"function\"==typeof t)return t(n);if(t)return t.includes(n);let r=e.current[n];return null==r||r.hasAttribute(\"disabled\")||\"true\"===r.getAttribute(\"aria-disabled\")}let nV=0;function nq(e,n={}){let{preventScroll:t=!1,cancelPrevious:r=!0,sync:o=!1}=n;r&&cancelAnimationFrame(nV);let a=()=>e?.focus({preventScroll:t});o?a():nV=requestAnimationFrame(a)}function nW(e,n,t){switch(e){case\"vertical\":return n;case\"horizontal\":return t;default:return n||t}}function n$(e,n){return nW(n,e===eW||e===e$,e===eV||e===eq)}function nZ(e,n,t){return nW(n,e===e$,t?e===eV:e===eq)||\"Enter\"===e||\" \"===e||\"\"===e}function nY(e,n,t){return nW(n,t?e===eV:e===eq,e===e$)}function nX(e,n,t,r){return\"both\"===n||\"horizontal\"===n&&r&&r>1?\"Escape\"===e:nW(n,t?e===eq:e===eV,e===eW)}function nK(e=[]){let n=e.map(e=>e?.reference),t=e.map(e=>e?.floating),r=e.map(e=>e?.item),o=C.useCallback(n=>nQ(n,e,\"reference\"),n),a=C.useCallback(n=>nQ(n,e,\"floating\"),t),i=C.useCallback(n=>nQ(n,e,\"item\"),r);return C.useMemo(()=>({getReferenceProps:o,getFloatingProps:a,getItemProps:i}),[o,a,i])}function nQ(e,n,t){let r=new Map,o=\"item\"===t,a={};for(let n in\"floating\"===t&&(a.tabIndex=-1,a[eH]=\"\"),e)o&&e&&(n===eF||n===eU)||(a[n]=e[n]);for(let i=0;i<n.length;i+=1){let l,s=n[i]?.[t];(l=\"function\"==typeof s?e?s(e):null:s)&&nG(a,l,o,r)}return nG(a,e,o,r),a}function nG(e,n,t,r){for(let o in n){let a=n[o];t&&(o===eF||o===eU)||(o.startsWith(\"on\")?(r.has(o)||r.set(o,[]),\"function\"==typeof a&&(r.get(o)?.push(a),e[o]=(...e)=>r.get(o)?.map(n=>n(...e)).find(e=>void 0!==e))):e[o]=a)}}let nJ=C.createContext(void 0);function n0(e){let n=C.useContext(nJ);if(void 0===n&&!e)throw Error(\"Base UI: MenuRootContext is missing. Menu parts must be placed within <Menu.Root>.\");return n}let n1=C.createContext(null);function n2(e,n=!1,t=!1){let[r,o]=C.useState(e&&n?\"idle\":void 0),[a,i]=C.useState(e);return e&&!a&&(i(!0),o(\"starting\")),e||!a||\"ending\"===r||t||o(\"ending\"),e||a||\"ending\"!==r||o(void 0),F(()=>{if(!e&&a&&\"ending\"!==r&&t){let e=nl.request(()=>{o(\"ending\")});return()=>{nl.cancel(e)}}},[e,a,r,t]),F(()=>{if(!e||n)return;let t=nl.request(()=>{E.flushSync(()=>{o(void 0)})});return()=>{nl.cancel(t)}},[n,e]),F(()=>{if(!e||!n)return;e&&a&&\"idle\"!==r&&o(\"starting\");let t=nl.request(()=>{o(\"idle\")});return()=>{nl.cancel(t)}},[n,e,a,o,r]),C.useMemo(()=>({mounted:a,setMounted:i,transitionStatus:r}),[a,r])}function n4({controlled:e,default:n,name:t,state:r=\"value\"}){let{current:o}=C.useRef(void 0!==e),[a,i]=C.useState(n),l=C.useCallback(e=>{o||i(e)},[]);return[o?e:a,l]}function n5(e){let{enabled:n=!0,open:t,ref:r,onComplete:o}=e,a=eA(t),i=T(o),l=function(e,n=!1){let t=ns(),r=ek();return T((o,a=null)=>{t.cancel(),r.clear();let i=e.current;i&&(\"function\"!=typeof i.getAnimations||globalThis.BASE_UI_ANIMATIONS_DISABLED?o():t.request(()=>{function e(){i&&Promise.allSettled(i.getAnimations().map(e=>e.finished)).then(()=>{null!=a&&a.aborted||E.flushSync(o)})}n?r.start(0,e):e()}))})}(r,t);C.useEffect(()=>{n&&l(()=>{t===a.current&&i()})},[n,t,i,l,a])}let n3=C.createContext(void 0);function n6(e=!0){let n=C.useContext(n3);if(void 0===n&&!e)throw Error(\"Base UI: DirectionContext is missing.\");return n?.direction??\"ltr\"}let n9=()=>{},n8={},n7={},te=\"\";class tn{lockCount=0;restore=null;timeoutLock=ej.create();timeoutUnlock=ej.create();acquire(e){return this.lockCount+=1,1===this.lockCount&&null===this.restore&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}release=()=>{this.lockCount-=1,0===this.lockCount&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{0===this.lockCount&&this.restore&&(this.restore?.(),this.restore=null)};lock(e){if(0===this.lockCount||null!==this.restore)return;let n=eQ(e).documentElement,t=Q(n).getComputedStyle(n).overflowY;if(\"hidden\"===t||\"clip\"===t){this.restore=n9;return}let r=ez||!function(e){if(\"undefined\"==typeof document)return!1;let n=eQ(e);return Q(n).innerWidth-n.documentElement.clientWidth>0}(e);this.restore=r?function(e){let n=eQ(e).documentElement,t=n.style.overflow;return n.style.overflow=\"hidden\",()=>{n.style.overflow=t}}(e):function(e){let n=eQ(e),t=n.documentElement,r=n.body,o=Q(t),a=0,i=0,l=nl.create();if(eP&&(o.visualViewport?.scale??1)!==1)return()=>{};function s(){let e=o.getComputedStyle(t),n=o.getComputedStyle(r);a=t.scrollTop,i=t.scrollLeft,n8={scrollbarGutter:t.style.scrollbarGutter,overflowY:t.style.overflowY,overflowX:t.style.overflowX},te=t.style.scrollBehavior,n7={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};let l=\"undefined\"!=typeof CSS&&CSS.supports?.(\"scrollbar-gutter\",\"stable\"),s=t.scrollHeight>t.clientHeight,c=t.scrollWidth>t.clientWidth,u=\"scroll\"===e.overflowY||\"scroll\"===n.overflowY,d=\"scroll\"===e.overflowX||\"scroll\"===n.overflowX,f=Math.max(0,o.innerWidth-t.clientWidth),p=Math.max(0,o.innerHeight-t.clientHeight),h=parseFloat(n.marginTop)+parseFloat(n.marginBottom),g=parseFloat(n.marginLeft)+parseFloat(n.marginRight);Object.assign(t.style,{scrollbarGutter:\"stable\",overflowY:!l&&(s||u)?\"scroll\":\"hidden\",overflowX:!l&&(c||d)?\"scroll\":\"hidden\"}),Object.assign(r.style,{position:\"relative\",height:h||p?`calc(100dvh - ${h+p}px)`:\"100dvh\",width:g||f?`calc(100vw - ${g+f}px)`:\"100vw\",boxSizing:\"border-box\",overflow:\"hidden\",scrollBehavior:\"unset\"}),r.scrollTop=a,r.scrollLeft=i,t.setAttribute(\"data-base-ui-scroll-locked\",\"\"),t.style.scrollBehavior=\"unset\"}function c(){Object.assign(t.style,n8),Object.assign(r.style,n7),t.scrollTop=a,t.scrollLeft=i,t.removeAttribute(\"data-base-ui-scroll-locked\"),t.style.scrollBehavior=te}function u(){c(),l.request(s)}return s(),o.addEventListener(\"resize\",u),()=>{l.cancel(),c(),o.removeEventListener(\"resize\",u)}}(e)}}let tt=new tn;function tr(e){if(e)return({\"focus-out\":\"focus-out\",\"escape-key\":\"escape-key\",\"outside-press\":\"outside-press\",\"list-navigation\":\"list-navigation\",click:\"trigger-press\",hover:\"trigger-hover\",focus:\"trigger-focus\",\"reference-press\":\"trigger-press\",\"safe-polygon\":\"trigger-hover\",\"ancestor-scroll\":void 0})[e]}let to=C.createContext(void 0);function ta(e=!0){let n=C.useContext(to);if(void 0===n&&!e)throw Error(\"Base UI: ContextMenuRootContext is missing. ContextMenu parts must be placed within <ContextMenu.Root>.\");return n}let ti=C.createContext(!1);function tl(e,n){return e&&!n?e:!e&&n?n:e||n?{...e,...n}:void 0}let ts={};function tc(e,n,t,r,o){let a={...tf(e,ts)};return n&&(a=tu(a,n)),t&&(a=tu(a,t)),r&&(a=tu(a,r)),o&&(a=tu(a,o)),a}function tu(e,n){return td(n)?n(e):function(e,n){if(!n)return e;for(let t in n){let r=n[t];switch(t){case\"style\":e[t]=tl(e.style,r);break;case\"className\":e[t]=th(e.className,r);break;default:!function(e,n){let t=e.charCodeAt(0),r=e.charCodeAt(1),o=e.charCodeAt(2);return 111===t&&110===r&&o>=65&&o<=90&&(\"function\"==typeof n||void 0===n)}(t,r)?e[t]=r:e[t]=function(e,n){return n?e?t=>{var r;if(null!=(r=t)&&\"object\"==typeof r&&\"nativeEvent\"in r){tp(t);let r=n(t);return t.baseUIHandlerPrevented||e?.(t),r}let o=n(t);return e?.(t),o}:n:e}(e[t],r)}}return e}(e,n)}function td(e){return\"function\"==typeof e}function tf(e,n){return td(e)?e(n):e??ts}function tp(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function th(e,n){return n?e?n+\" \"+e:n:e}let tg=[],tm={current:!1},tv=function(e){let n,t,{children:r,open:o,onOpenChange:a,onOpenChangeComplete:i,defaultOpen:s=!1,disabled:c=!1,modal:u,loop:d=!0,orientation:f=\"vertical\",actionsRef:p,openOnHover:h,delay:g=100,closeDelay:m=0,closeParentOnEsc:v=!0}=e,[b,y]=C.useState(null),[x,w]=C.useState(null),[j,k]=C.useState(),[A,O]=C.useState(!0),[S,_]=C.useState(null),[P,z]=C.useState(null),[L,R]=C.useState(!0),[N,D]=C.useState(!1),B=C.useRef(null),M=C.useRef(null),I=C.useRef(null),U=ek(),V=ta(!0),$=C.useContext(ti);{let e=n0(!0),t=function(e){let n=C.useContext(n1);if(null===n&&!e)throw Error(\"Base UI: MenubarContext is missing. Menubar parts must be placed within <Menubar>.\");return n}(!0);n=$&&e?{type:\"menu\",context:e}:t?{type:\"menubar\",context:t}:V?{type:\"context-menu\",context:V}:{type:void 0}}let X=H();void 0!==n.type&&(X=n.context.rootId);let K=(void 0===n.type||\"context-menu\"===n.type)&&(u??!0),Q=\"menu\"===n.type?n.context.allowMouseEnter:N,G=\"menu\"===n.type?n.context.setAllowMouseEnter:D,J=h??(\"menu\"===n.type||\"menubar\"===n.type&&n.context.hasSubmenuOpen),[ee,et]=n4({controlled:o,default:s,name:\"MenuRoot\",state:\"open\"}),er=C.useRef(\"context-menu\"!==n.type),eo=ek();C.useEffect(()=>{if(ee||(B.current=null),\"context-menu\"===n.type){if(!ee){eo.clear(),er.current=!1;return}eo.start(500,()=>{er.current=!0})}},[eo,ee,n.type]);let ea=C.useCallback(e=>{I.current=e,w(e)},[]),{mounted:ei,setMounted:el,transitionStatus:es}=n2(ee),{enabled:ec=!0,mounted:eu,open:ed,referenceElement:ef=null}={enabled:ee&&K&&\"trigger-hover\"!==P,mounted:ei,open:ee,referenceElement:x};F(()=>{if(eP&&eu&&!ed){let e=eQ(ef),n=e.body.style.userSelect,t=e.body.style.webkitUserSelect;return e.body.style.userSelect=\"none\",e.body.style.webkitUserSelect=\"none\",()=>{e.body.style.userSelect=n,e.body.style.webkitUserSelect=t}}},[eu,ed,ef]),F(()=>{if(ec)return tt.acquire(ef)},[ec,ef]),ee||A||O(!0);let ep=T(()=>{el(!1),R(!0),G(!1),i?.(!1)});n5({enabled:!p,open:ee,ref:M,onComplete(){ee||ep()}});let eh=C.useRef(!0),eg=ek(),em=T((e,t,r)=>{if(ee===e||!1===e&&t?.type===\"click\"&&\"touch\"===t.pointerType&&!eh.current)return;e&&\"trigger-focus\"===r?(eh.current=!1,eg.start(300,()=>{eh.current=!0})):(eh.current=!0,eg.clear());let o=(\"trigger-press\"===r||\"item-press\"===r)&&0===t.detail&&t?.isTrusted,i=!e&&(\"escape-key\"===r||null==r);function l(){a?.(e,t,r),et(e),z(r??null),B.current=t??null}\"trigger-hover\"===r?(R(!0),U.start(500,()=>{R(!1)}),E.flushSync(l)):l(),\"menubar\"===n.type&&(\"trigger-focus\"===r||\"focus-out\"===r||\"trigger-hover\"===r||\"list-navigation\"===r||\"sibling-open\"===r)?k(\"group\"):o||i?k(o?\"click\":\"dismiss\"):k(void 0)});C.useImperativeHandle(p,()=>({unmount:ep}),[ep]),\"context-menu\"===n.type&&(t=n.context),C.useImperativeHandle(t?.positionerRef,()=>x,[x]),C.useImperativeHandle(t?.actionsRef,()=>({setOpen:em}),[em]),C.useEffect(()=>{ee||U.clear()},[U,ee]);let ev=Y({elements:{reference:b,floating:x},open:ee,onOpenChange(e,n,t){em(e,n,tr(t))}}),eb=e3(ev,{enabled:A&&J&&!c&&\"context-menu\"!==n.type&&(\"menubar\"!==n.type||n.context.hasSubmenuOpen&&!ee),handleClose:e7({blockPointerEvents:!0}),mouseOnly:!0,move:\"menu\"===n.type,restMs:void 0===n.type||\"menu\"===n.type&&Q?g:void 0,delay:\"menu\"===n.type?{open:Q?g:1e10,close:m}:{close:m}}),ey=nn(ev,{enabled:!c&&!ee&&\"menubar\"===n.type&&n.context.hasSubmenuOpen&&!V}),ex=function(e,n={}){let{open:t,onOpenChange:r,dataRef:o}=e,{enabled:a=!0,event:i=\"click\",toggle:l=!0,ignoreMouse:s=!1,stickIfOpen:c=!0}=n,u=C.useRef(void 0),d=ns(),f=C.useMemo(()=>({onPointerDown(e){u.current=e.pointerType},onMouseDown(e){let n=u.current,a=e.nativeEvent;if(0!==e.button||\"click\"===i||eI(n,!0)&&s)return;let f=o.current.openEvent,p=f?.type,h=!(t&&l&&(!f||!c||\"click\"===p||\"mousedown\"===p));d.request(()=>{r(h,a,\"click\")})},onClick(e){let n=u.current;if(\"mousedown\"===i&&n){u.current=void 0;return}if(eI(n,!0)&&s)return;let a=o.current.openEvent,d=a?.type;r(!(t&&l&&(!a||!c||\"click\"===d||\"mousedown\"===d||\"keydown\"===d||\"keyup\"===d)),e.nativeEvent,\"click\")},onKeyDown(){u.current=void 0}}),[o,i,s,r,t,c,l,d]);return C.useMemo(()=>a?{reference:f}:nr,[a,f])}(ev,{enabled:!c&&\"context-menu\"!==n.type,event:ee&&\"menubar\"===n.type?\"click\":\"mousedown\",toggle:!J||\"menu\"!==n.type,ignoreMouse:J&&\"menu\"===n.type,stickIfOpen:void 0===n.type&&L}),ew=nf(ev,{enabled:!c,bubbles:v&&\"menu\"===n.type,outsidePressEvent:\"mousedown\",outsidePress:()=>\"context-menu\"!==n.type||B.current?.type===\"contextmenu\"||er.current}),ej=function(e,n={}){let{open:t,elements:r,floatingId:o}=e,{enabled:a=!0,role:i=\"dialog\"}=n,l=H(),s=r.domReference?.id||l,c=C.useMemo(()=>e0(r.floating)?.id||o,[r.floating,o]),u=np.get(i)??i,d=null!=q(),f=C.useMemo(()=>\"tooltip\"===u||\"label\"===i?{[`aria-${\"label\"===i?\"labelledby\":\"describedby\"}`]:t?c:void 0}:{\"aria-expanded\":t?\"true\":\"false\",\"aria-haspopup\":\"alertdialog\"===u?\"dialog\":u,\"aria-controls\":t?c:void 0,...\"listbox\"===u&&{role:\"combobox\"},...\"menu\"===u&&{id:s},...\"menu\"===u&&d&&{role:\"menuitem\"},...\"select\"===i&&{\"aria-autocomplete\":\"none\"},...\"combobox\"===i&&{\"aria-autocomplete\":\"list\"}},[u,c,d,t,s,i]),p=C.useMemo(()=>{let e={id:c,...u&&{role:u}};return\"tooltip\"===u||\"label\"===i?e:{...e,...\"menu\"===u&&{\"aria-labelledby\":s}}},[u,c,s,i]),h=C.useCallback(({active:e,selected:n})=>{let t={role:\"option\",...e&&{id:`${c}-fui-option`}};switch(i){case\"select\":return{...t,\"aria-selected\":e&&n};case\"combobox\":return{...t,\"aria-selected\":n}}return{}},[c,i]);return C.useMemo(()=>a?{reference:f,floating:p,item:h}:{},[a,f,p,h])}(ev,{role:\"menu\"}),eO=C.useRef([]),eC=C.useRef([]),eS=n6(),eE=function(e,n){let{open:t,onOpenChange:r,elements:o,floatingId:a}=e,{listRef:i,activeIndex:l,onNavigate:s=()=>{},enabled:c=!0,selectedIndex:u=null,allowEscape:d=!1,loop:f=!1,nested:p=!1,rtl:h=!1,virtual:g=!1,focusItemOnOpen:m=\"auto\",focusItemOnHover:v=!0,openOnArrowKeyDown:b=!0,disabledIndices:y,orientation:x=\"vertical\",parentOrientation:w,cols:j=1,scrollItemIntoView:k=!0,virtualItemRef:A,itemSizes:O,dense:S=!1}=n,E=eA(e0(o.floating)),_=q(),P=W();F(()=>{e.dataRef.current.orientation=x},[e,x]);let z=eJ(o.domReference),L=C.useRef(m),R=C.useRef(u??-1),N=C.useRef(null),D=C.useRef(!0),B=T(()=>{s(-1===R.current?null:R.current)}),M=C.useRef(B),I=C.useRef(!!o.floating),H=C.useRef(t),U=C.useRef(!1),V=C.useRef(!1),$=eA(y),Z=eA(t),Y=eA(k),X=eA(u),[K,Q]=C.useState(),[G,J]=C.useState(),ee=T(()=>{function e(e){g?(e.id?.endsWith(\"-fui-option\")&&(e.id=`${a}-${Math.random().toString(16).slice(2,10)}`),Q(e.id),P?.events.emit(\"virtualfocus\",e),A&&(A.current=e)):nq(e,{sync:U.current,preventScroll:!0})}let n=i.current[R.current],t=V.current;n&&e(n),(U.current?e=>e():requestAnimationFrame)(()=>{let r=i.current[R.current]||n;if(!r)return;n||e(r);let o=Y.current;o&&er&&(t||!D.current)&&r.scrollIntoView?.(\"boolean\"==typeof o?{block:\"nearest\",inline:\"nearest\"}:o)})});F(()=>{c&&(t&&o.floating?L.current&&null!=u&&(V.current=!0,R.current=u,B()):I.current&&(R.current=-1,M.current()))},[c,t,o.floating,u,B]),F(()=>{if(c&&t&&o.floating)if(null==l){if(U.current=!1,null!=X.current)return;if(I.current&&(R.current=-1,ee()),(!H.current||!I.current)&&L.current&&(null!=N.current||!0===L.current&&null==N.current)){let e=0,n=()=>{null==i.current[0]?(e<2&&(e?requestAnimationFrame:queueMicrotask)(n),e+=1):(R.current=null==N.current||nZ(N.current,x,h)||p?nI(i,$.current):nH(i,$.current),N.current=null,B())};n()}}else nM(i,l)||(R.current=l,ee(),V.current=!1)},[c,t,o.floating,l,X,p,i,x,h,B,ee,$]),F(()=>{if(!c||o.floating||!P||g||!I.current)return;let e=P.nodesRef.current,n=e.find(e=>e.id===_)?.context?.elements.floating,t=eZ(eQ(o.floating)),r=e.some(e=>e.context&&eY(e.context.elements.floating,t));n&&!r&&D.current&&n.focus({preventScroll:!0})},[c,o.floating,P,_,g]),F(()=>{if(c&&P&&g&&!_)return P.events.on(\"virtualfocus\",e),()=>{P.events.off(\"virtualfocus\",e)};function e(e){J(e.id),A&&(A.current=e)}},[c,P,g,_,A]),F(()=>{M.current=B,H.current=t,I.current=!!o.floating}),F(()=>{t||(N.current=null,L.current=m)},[t,m]);let et=null!=l,er=C.useMemo(()=>{function e(e){if(!Z.current)return;let n=i.current.indexOf(e);-1!==n&&R.current!==n&&(R.current=n,B())}return{onFocus({currentTarget:n}){U.current=!0,e(n)},onClick:({currentTarget:e})=>e.focus({preventScroll:!0}),onMouseMove({currentTarget:n}){U.current=!0,V.current=!1,v&&e(n)},onPointerLeave({pointerType:e}){D.current&&\"touch\"!==e&&(U.current=!0,v&&(R.current=-1,B(),g||E.current?.focus({preventScroll:!0})))}}},[Z,E,v,i,B,g]),eo=C.useCallback(()=>w??P?.nodesRef.current.find(e=>e.id===_)?.context?.dataRef?.current.orientation,[_,P,w]),ea=T(e=>{if(D.current=!1,U.current=!0,229===e.which||!Z.current&&e.currentTarget===E.current)return;if(p&&nX(e.key,x,h,j)){n$(e.key,eo())||eD(e),r(!1,e.nativeEvent,\"list-navigation\"),en(o.domReference)&&(g?P?.events.emit(\"virtualfocus\",o.domReference):o.domReference.focus());return}let n=R.current,a=nI(i,y),l=nH(i,y);if(z||(\"Home\"===e.key&&(eD(e),R.current=a,B()),\"End\"===e.key&&(eD(e),R.current=l,B())),j>1){var s;let n=O||Array.from({length:i.current.length},()=>({width:1,height:1})),t=function(e,n,t){let r=[],o=0;return e.forEach(({width:e,height:a},i)=>{let l=!1;for(t&&(o=0);!l;){let t=[];for(let r=0;r<e;r+=1)for(let e=0;e<a;e+=1)t.push(o+r+e*n);o%n+e<=n&&t.every(e=>null==r[e])?(t.forEach(e=>{r[e]=i}),l=!0):o+=1}}),[...r]}(n,j,S),r=t.findIndex(e=>null!=e&&!nU(i,e,y)),o=t.reduce((e,n,t)=>null==n||nU(i,n,y)?e:t,-1),c=t[function(e,{event:n,orientation:t,loop:r,rtl:o,cols:a,disabledIndices:i,minIndex:l,maxIndex:s,prevIndex:c,stopEvent:u=!1}){let d=c;if(n.key===eW){if(u&&eD(n),-1===c)d=s;else if(d=nF(e,{startingIndex:d,amount:a,decrement:!0,disabledIndices:i}),r&&(c-a<l||d<0)){let e=c%a,n=s%a,t=s-(n-e);d=n===e?s:n>e?t:t-a}nM(e,d)&&(d=c)}if(n.key===e$&&(u&&eD(n),-1===c?d=l:(d=nF(e,{startingIndex:c,amount:a,disabledIndices:i}),r&&c+a>s&&(d=nF(e,{startingIndex:c%a-a,amount:a,disabledIndices:i}))),nM(e,d)&&(d=c)),\"both\"===t){let t=nb(c/a);n.key===(o?eV:eq)&&(u&&eD(n),c%a!=a-1?(d=nF(e,{startingIndex:c,disabledIndices:i}),r&&nB(d,a,t)&&(d=nF(e,{startingIndex:c-c%a-1,disabledIndices:i}))):r&&(d=nF(e,{startingIndex:c-c%a-1,disabledIndices:i})),nB(d,a,t)&&(d=c)),n.key===(o?eq:eV)&&(u&&eD(n),c%a!=0?(d=nF(e,{startingIndex:c,decrement:!0,disabledIndices:i}),r&&nB(d,a,t)&&(d=nF(e,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i}))):r&&(d=nF(e,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i})),nB(d,a,t)&&(d=c));let l=nb(s/a)===t;nM(e,d)&&(d=r&&l?n.key===(o?eq:eV)?s:nF(e,{startingIndex:c-c%a-1,disabledIndices:i}):c)}return d}({current:t.map(e=>null!=e?i.current[e]:null)},{event:e,orientation:x,loop:f,rtl:h,cols:j,disabledIndices:(s=[...(\"function\"!=typeof y?y:null)||i.current.map((e,n)=>nU(i,n,y)?n:void 0),void 0],t.flatMap((e,n)=>s.includes(e)?[n]:[])),minIndex:r,maxIndex:o,prevIndex:function(e,n,t,r,o){if(-1===e)return -1;let a=t.indexOf(e),i=n[e];switch(o){case\"tl\":return a;case\"tr\":if(!i)return a;return a+i.width-1;case\"bl\":if(!i)return a;return a+(i.height-1)*r;case\"br\":return t.lastIndexOf(e);default:return -1}}(R.current>l?a:R.current,n,t,j,e.key===e$?\"bl\":e.key===(h?eV:eq)?\"tr\":\"tl\"),stopEvent:!0})];if(null!=c&&(R.current=c,B()),\"both\"===x)return}if(n$(e.key,x)){if(eD(e),t&&!g&&eZ(e.currentTarget.ownerDocument)===e.currentTarget){R.current=nZ(e.key,x,h)?a:l,B();return}nZ(e.key,x,h)?f?R.current=n>=l?d&&n!==i.current.length?-1:a:nF(i,{startingIndex:n,disabledIndices:y}):R.current=Math.min(l,nF(i,{startingIndex:n,disabledIndices:y})):f?R.current=n<=a?d&&-1!==n?i.current.length:l:nF(i,{startingIndex:n,decrement:!0,disabledIndices:y}):R.current=Math.max(a,nF(i,{startingIndex:n,decrement:!0,disabledIndices:y})),nM(i,R.current)&&(R.current=-1),B()}}),ei=C.useMemo(()=>g&&t&&et&&{\"aria-activedescendant\":G||K},[g,t,et,G,K]),el=C.useMemo(()=>({\"aria-orientation\":\"both\"===x?void 0:x,...!z?ei:{},onKeyDown:ea,onPointerMove(){D.current=!0}}),[ei,ea,x,z]),es=C.useMemo(()=>{function e(e){\"auto\"===m&&eB(e.nativeEvent)&&(L.current=!0)}function n(e){L.current=m,\"auto\"===m&&eM(e.nativeEvent)&&(L.current=!0)}return{...ei,onKeyDown(e){D.current=!1;let n=e.key.startsWith(\"Arrow\"),o=[\"Home\",\"End\"].includes(e.key),a=nY(e.key,x,h),l=nX(e.key,x,h,j),s=nY(e.key,eo(),h),c=n$(e.key,x),d=(p?s:c)||\"Enter\"===e.key||\"\"===e.key.trim();if(g&&t){var f,m;let t,r,s=P?.nodesRef.current.find(e=>null==e.parentId),u=P&&s?(f=P.nodesRef.current,m=s.id,r=-1,!function e(n,o){o>r&&(t=n,r=o),e6(f,n).forEach(n=>{e(n.id,o+1)})}(m,0),f.find(e=>e.id===t)):null;if((n||o)&&u&&A){let n=new KeyboardEvent(\"keydown\",{key:e.key,bubbles:!0});if(a||l){let t=u.context?.elements.domReference===e.currentTarget,r=l&&!t?u.context?.elements.domReference:a?i.current.find(e=>e?.id===K):null;r&&(eD(e),r.dispatchEvent(n),J(void 0))}if((c||o)&&u.context&&u.context.open&&u.parentId&&e.currentTarget!==u.context.elements.domReference){eD(e),u.context.elements.domReference?.dispatchEvent(n);return}}return ea(e)}if(t||b||!n){if(d){let n=n$(e.key,eo());N.current=p&&n?null:e.key}if(p){s&&(eD(e),t?(R.current=nI(i,$.current),B()):r(!0,e.nativeEvent,\"list-navigation\"));return}c&&(null!=u&&(R.current=u),eD(e),!t&&b?r(!0,e.nativeEvent,\"list-navigation\"):ea(e),t&&B())}},onFocus(){t&&!g&&(R.current=-1,B())},onPointerDown:n,onPointerEnter:n,onMouseDown:e,onClick:e}},[K,ei,j,ea,$,m,i,p,B,r,t,b,x,eo,h,u,P,g,A]);return C.useMemo(()=>c?{reference:es,floating:el,item:er}:{},[c,es,el,er])}(ev,{enabled:!c,listRef:eO,activeIndex:S,nested:void 0!==n.type,loop:d,orientation:f,parentOrientation:\"menubar\"===n.type?n.context.orientation:void 0,rtl:\"rtl\"===eS,disabledIndices:tg,onNavigate:_,openOnArrowKeyDown:\"context-menu\"!==n.type}),e_=C.useRef(!1),ez=function(e,n){let{open:t,dataRef:r}=e,{listRef:o,activeIndex:a,onMatch:i,onTypingChange:l,enabled:s=!0,findMatch:c=null,resetMs:u=750,ignoreKeys:d=[],selectedIndex:f=null}=n,p=ek(),h=C.useRef(\"\"),g=C.useRef(f??a??-1),m=C.useRef(null),v=T(i),b=T(l),y=eA(c),x=eA(d);F(()=>{t&&(p.clear(),m.current=null,h.current=\"\")},[t,p]),F(()=>{t&&\"\"===h.current&&(g.current=f??a??-1)},[t,f,a]);let w=T(e=>{e?r.current.typing||(r.current.typing=e,b(e)):r.current.typing&&(r.current.typing=e,b(e))}),j=T(e=>{function n(e,n,t){let r=y.current?y.current(n,t):n.find(e=>e?.toLocaleLowerCase().indexOf(t.toLocaleLowerCase())===0);return r?e.indexOf(r):-1}let r=o.current;if(h.current.length>0&&\" \"!==h.current[0]&&(-1===n(r,r,h.current)?w(!1):\" \"===e.key&&eD(e)),null==r||x.current.includes(e.key)||1!==e.key.length||e.ctrlKey||e.metaKey||e.altKey)return;t&&\" \"!==e.key&&(eD(e),w(!0)),r.every(e=>!e||e[0]?.toLocaleLowerCase()!==e[1]?.toLocaleLowerCase())&&h.current===e.key&&(h.current=\"\",g.current=m.current),h.current+=e.key,p.start(u,()=>{h.current=\"\",g.current=m.current,w(!1)});let a=g.current,i=n(r,[...r.slice((a||0)+1),...r.slice(0,(a||0)+1)],h.current);-1!==i?(v(i),m.current=i):\" \"!==e.key&&(h.current=\"\",w(!1))}),k=C.useMemo(()=>({onKeyDown:j}),[j]),A=C.useMemo(()=>({onKeyDown:j,onKeyUp(e){\" \"===e.key&&w(!1)}}),[j,w]);return C.useMemo(()=>s?{reference:k,floating:A}:{},[s,k,A])}(ev,{listRef:eC,activeIndex:S,resetMs:500,onMatch:e=>{ee&&e!==S&&_(e)},onTypingChange:C.useCallback(e=>{e_.current=e},[])}),{getReferenceProps:eL,getFloatingProps:eT,getItemProps:eR}=nK([eb,ex,ew,ey,ej,eE,ez]),eN=function(e){let{enabled:n=!0,mouseDownAction:t,open:r}=e,o=C.useRef(!1);return C.useMemo(()=>n?{onMouseDown:e=>{(\"open\"===t&&!r||\"close\"===t&&r)&&(o.current=!0,eQ(e.currentTarget).addEventListener(\"click\",()=>{o.current=!1},{once:!0}))},onClick:e=>{o.current&&(o.current=!1,e.preventBaseUIHandler())}}:nr,[n,t,r])}({open:ee,enabled:\"menubar\"===n.type,mouseDownAction:\"open\"}),eH=C.useMemo(()=>{let e=tc(eL(),{onMouseEnter(){O(!0)},onMouseMove(){G(!0)}},eN);return delete e.role,e},[eL,eN,G]),eF=C.useMemo(()=>eT({onMouseEnter(){J&&\"menu\"!==n.type||O(!1)},onMouseMove(){G(!0)},onClick(){J&&O(!1)}}),[eT,J,n.type,G]),eU=C.useMemo(()=>eR(),[eR]),eX=C.useMemo(()=>({activeIndex:S,setActiveIndex:_,allowMouseUpTriggerRef:n.type?n.context.allowMouseUpTriggerRef:tm,floatingRootContext:ev,itemProps:eU,popupProps:eF,triggerProps:eH,itemDomElements:eO,itemLabels:eC,mounted:ei,open:ee,popupRef:M,positionerRef:I,setOpen:em,setPositionerElement:ea,triggerElement:b,setTriggerElement:y,transitionStatus:es,lastOpenChangeReason:P,instantType:j,onOpenChangeComplete:i,setHoverEnabled:O,typingRef:e_,modal:K,disabled:c,parent:n,rootId:X,allowMouseEnter:Q,setAllowMouseEnter:G}),[S,ev,eU,eF,eH,eO,eC,ei,ee,I,em,es,b,ea,P,j,i,K,c,n,X,Q,G]),eK=(0,l.jsx)(nJ.Provider,{value:eX,children:r});return void 0===n.type||\"context-menu\"===n.type?(0,l.jsx)(Z,{children:eK}):eK};function tb(e,n,t,r){var o,a,i,l,s;let c=P(ty).current;return o=c,a=e,i=n,l=t,s=r,(o.refs[0]!==a||o.refs[1]!==i||o.refs[2]!==l||o.refs[3]!==s)&&tx(c,[e,n,t,r]),c.callback}function ty(){return{callback:null,cleanup:null,refs:[]}}function tx(e,n){if(e.refs=n,n.every(e=>null==e)){e.callback=null;return}e.callback=t=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),null!=t){let r=Array(n.length).fill(null);for(let e=0;e<n.length;e+=1){let o=n[e];if(null!=o)switch(typeof o){case\"function\":{let n=o(t);\"function\"==typeof n&&(r[e]=n);break}case\"object\":o.current=t}}e.cleanup=()=>{for(let e=0;e<n.length;e+=1){let t=n[e];if(null!=t)switch(typeof t){case\"function\":{let n=r[e];\"function\"==typeof n?n():t(null);break}case\"object\":t.current=null}}}}}}let tw=parseInt(C.version,10);function tj(e,n,t={}){let r=n.render,o=function(e,n={}){let t,{className:r,render:o}=e,{state:a=nr,ref:i,props:l,disableStyleHooks:s,customStyleHookMapping:c,enabled:u=!0}=n,d=u?\"function\"==typeof r?r(a):r:void 0;!0!==s&&(t=C.useMemo(()=>u?function(e,n){let t={};for(let r in e){let o=e[r];if(n?.hasOwnProperty(r)){let e=n[r](o);null!=e&&Object.assign(t,e);continue}!0===o?t[`data-${r.toLowerCase()}`]=\"\":o&&(t[`data-${r.toLowerCase()}`]=o.toString())}return t}(a,c):nr,[a,c,u]));let f=u?tl(t,Array.isArray(l)?function(e){if(0===e.length)return ts;if(1===e.length)return tf(e[0],ts);let n={...tf(e[0],ts)};for(let t=1;t<e.length;t+=1)n=tu(n,e[t]);return n}(l):l)??nr:nr;return(\"undefined\"!=typeof document&&(u?Array.isArray(i)?f.ref=function(e){var n,t;let r=P(ty).current;return n=r,t=e,(n.refs.length!==t.length||n.refs.some((e,n)=>e!==t[n]))&&tx(r,e),r.callback}([f.ref,tk(o),...i]):f.ref=tb(f.ref,tk(o),i):tb(null,null)),u)?(void 0!==d&&(f.className=th(f.className,d)),f):nr}(n,t);return!1===t.enabled?null:function(e,n,t,r){if(n){if(\"function\"==typeof n)return n(t,r);let e=tc(t,n.props);return e.ref=t.ref,C.cloneElement(n,e)}if(e&&\"string\"==typeof e){var o,a;return o=e,a=t,\"button\"===o?(0,l.jsx)(\"button\",{type:\"button\",...a}):\"img\"===o?(0,l.jsx)(\"img\",{alt:\"\",...a}):C.createElement(o,a)}throw Error(\"Base UI: Render element or function are not defined.\")}(e,r,o,t.state??nr)}function tk(e){return e&&\"function\"!=typeof e?tw>=19?e.props.ref:e.ref:null}let tA=C.createContext(void 0);function tO(e=!1){let n=C.useContext(tA);if(void 0===n&&!e)throw Error(\"Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>.\");return n}let tC=C.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},elementsRef:{current:[]},nextIndexRef:{current:0}}),tS=((r={})[r.None=0]=\"None\",r[r.GuessFromOrder=1]=\"GuessFromOrder\",r);function tE(e={}){let{label:n,metadata:t,textRef:r,indexGuessBehavior:o}=e,{register:a,unregister:i,subscribeMapChange:l,elementsRef:s,labelsRef:c,nextIndexRef:u}=C.useContext(tC),d=C.useRef(-1),[f,p]=C.useState(o===tS.GuessFromOrder?()=>{if(-1===d.current){let e=u.current;u.current+=1,d.current=e}return d.current}:-1),h=C.useRef(null),g=C.useCallback(e=>{if(h.current=e,-1!==f&&null!==e&&(s.current[f]=e,c)){let t=void 0!==n;c.current[f]=t?n:r?.current?.textContent??e.textContent}},[f,s,c,n,r]);return F(()=>{let e=h.current;if(e)return a(e,t),()=>{i(e)}},[a,i,t]),F(()=>l(e=>{let n=h.current?e.get(h.current)?.index:null;null!=n&&p(n)}),[l,p]),C.useMemo(()=>({ref:g,index:f}),[f,g])}function t_(e){let{render:n,className:t,itemRef:r=null,metadata:o,...a}=e,{props:i,ref:l}=function(e={}){let{highlightedIndex:n,onHighlightedIndexChange:t,highlightItemOnHover:r}=tO(),{ref:o,index:a}=tE(e),i=n===a,l=C.useRef(null),s=tb(o,l),c=C.useMemo(()=>({tabIndex:i?0:-1,onFocus(){t(a)},onMouseMove(){let e=l.current;if(!r||!e)return;let n=e.hasAttribute(\"disabled\")||\"true\"===e.ariaDisabled;i||n||e.focus()}}),[a,i,t,r]);return C.useMemo(()=>({props:c,ref:s,index:a}),[c,a,s])}({metadata:o});return tj(\"div\",e,{ref:[r,l],props:[i,a]})}let tP=((o={}).startingStyle=\"data-starting-style\",o.endingStyle=\"data-ending-style\",o),tz={[tP.startingStyle]:\"\"},tL={[tP.endingStyle]:\"\"},tT={transitionStatus:e=>\"starting\"===e?tz:\"ending\"===e?tL:null},tR=((a={}).open=\"data-open\",a.closed=\"data-closed\",a[a.startingStyle=tP.startingStyle]=\"startingStyle\",a[a.endingStyle=tP.endingStyle]=\"endingStyle\",a.anchorHidden=\"data-anchor-hidden\",a),tN=((i={}).popupOpen=\"data-popup-open\",i.pressed=\"data-pressed\",i),tD={[tN.popupOpen]:\"\"},tB={[tN.popupOpen]:\"\",[tN.pressed]:\"\"},tM={[tR.open]:\"\"},tI={[tR.closed]:\"\"},tH={[tR.anchorHidden]:\"\"},tF={open:e=>e?tD:null},tU={open:e=>e?tB:null},tV={open:e=>e?tM:tI,anchorHidden:e=>e?tH:null};function tq(e={}){let{disabled:n=!1,focusableWhenDisabled:t,tabIndex:r=0,native:o=!0}=e,a=C.useRef(null),i=void 0!==tO(!0),l=T(()=>{let e=a.current;return!!(e?.tagName===\"A\"&&e?.href)}),{props:s}=function(e){let{focusableWhenDisabled:n,disabled:t,composite:r=!1,tabIndex:o=0,isNativeButton:a}=e,i=r&&!1!==n,l=r&&!1===n;return{props:C.useMemo(()=>{let e={onKeyDown(e){t&&n&&\"Tab\"!==e.key&&e.preventDefault()}};return r||(e.tabIndex=o,!a&&t&&(e.tabIndex=n?o:-1)),(a&&(n||i)||!a&&t)&&(e[\"aria-disabled\"]=t),a&&(!n||l)&&(e.disabled=t),e},[r,t,n,i,l,a,o])}}({focusableWhenDisabled:t,disabled:n,composite:i,tabIndex:r,isNativeButton:o});return F(()=>{let e=a.current;e instanceof HTMLButtonElement&&i&&n&&void 0===s.disabled&&e.disabled&&(e.disabled=!1)},[n,s.disabled,i]),{getButtonProps:C.useCallback((e={})=>{let{onClick:t,onMouseDown:r,onKeyUp:a,onKeyDown:i,onPointerDown:c,...u}=e;return tc({type:o?\"button\":void 0,onClick(e){if(n)return void e.preventDefault();t?.(e)},onMouseDown(e){n||r?.(e)},onKeyDown(e){n||(tp(e),i?.(e)),!e.baseUIHandlerPrevented&&(e.target!==e.currentTarget||o||l()||\"Enter\"!==e.key||n||(t?.(e),e.preventDefault()))},onKeyUp(e){n||(tp(e),a?.(e)),!e.baseUIHandlerPrevented&&(e.target!==e.currentTarget||o||n||\" \"!==e.key||t?.(e))},onPointerDown(e){if(n)return void e.preventDefault();c?.(e)}},o?void 0:{role:\"button\"},s,u)},[n,s,o,l]),buttonRef:a}}let tW=C.forwardRef(function(e,n){let{render:t,className:r,disabled:o=!1,nativeButton:a=!0,...i}=e,{triggerProps:s,disabled:c,setTriggerElement:u,open:d,allowMouseUpTriggerRef:f,positionerRef:p,parent:h,lastOpenChangeReason:g,rootId:m}=n0(),v=o||c,b=C.useRef(null),y=ek(),{getButtonProps:x,buttonRef:w}=tq({disabled:v,native:a}),j=tb(w,u),{events:k}=W();C.useEffect(()=>{d||void 0!==h.type||(f.current=!1)},[f,d,h.type]);let A=T(e=>{if(!b.current)return;y.clear(),f.current=!1;let n=e.target;if(eY(b.current,n)||eY(p.current,n)||n===b.current||null!=n&&function e(n){return en(n)&&n.hasAttribute(\"data-rootownerid\")?n.getAttribute(\"data-rootownerid\")??void 0:eh(n)?void 0:e(ev(n))}(n)===m)return;let t=function(e){let n=e.getBoundingClientRect(),t=window.getComputedStyle(e,\"::before\"),r=window.getComputedStyle(e,\"::after\");if(\"none\"===t.content&&\"none\"===r.content)return n;let o=parseFloat(t.width)||0,a=parseFloat(t.height)||0,i=parseFloat(r.width)||0,l=parseFloat(r.height)||0,s=Math.max(n.width,o,i),c=Math.max(n.height,a,l),u=s-n.width,d=c-n.height;return{left:n.left-u/2,right:n.right+u/2,top:n.top-d/2,bottom:n.bottom+d/2}}(b.current);e.clientX>=t.left-2&&e.clientX<=t.right+2&&e.clientY>=t.top-2&&e.clientY<=t.bottom+2||k.emit(\"close\",{domEvent:e,reason:\"cancel-open\"})});C.useEffect(()=>{d&&\"trigger-hover\"===g&&eQ(b.current).addEventListener(\"mouseup\",A,{once:!0})},[d,A,g]);let O=C.useCallback(e=>tc({\"aria-haspopup\":\"menu\",ref:j,onMouseDown:e=>{d||(y.start(200,()=>{f.current=!0}),eQ(e.currentTarget).addEventListener(\"mouseup\",A,{once:!0}))}},e,x),[x,j,d,f,y,A]),S=tj(\"button\",e,{state:C.useMemo(()=>({disabled:v,open:d}),[v,d]),customStyleHookMapping:tU,ref:[b,n,w],props:[s,i,O]});return\"menubar\"===h.type?(0,l.jsx)(t_,{render:S}):S}),t$={clip:\"rect(0 0 0 0)\",overflow:\"hidden\",whiteSpace:\"nowrap\",position:\"fixed\",top:0,left:0,border:0,padding:0,width:1,height:1,margin:-1},tZ=C.forwardRef(function(e,n){let[t,r]=C.useState();return F(()=>{eL&&r(\"button\")},[]),(0,l.jsx)(\"span\",{...e,ref:n,tabIndex:0,role:t,\"aria-hidden\":!t||void 0,style:t$,\"data-base-ui-focus-guard\":\"\"})});var tY='input:not([inert]),select:not([inert]),textarea:not([inert]),a[href]:not([inert]),button:not([inert]),[tabindex]:not(slot):not([inert]),audio[controls]:not([inert]),video[controls]:not([inert]),[contenteditable]:not([contenteditable=\"false\"]):not([inert]),details>summary:first-of-type:not([inert]),details:not([inert])',tX=\"undefined\"==typeof Element,tK=tX?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,tQ=!tX&&Element.prototype.getRootNode?function(e){var n;return null==e||null==(n=e.getRootNode)?void 0:n.call(e)}:function(e){return null==e?void 0:e.ownerDocument},tG=function e(n,t){void 0===t&&(t=!0);var r,o=null==n||null==(r=n.getAttribute)?void 0:r.call(n,\"inert\");return\"\"===o||\"true\"===o||t&&n&&e(n.parentNode)},tJ=function(e){var n,t=null==e||null==(n=e.getAttribute)?void 0:n.call(e,\"contenteditable\");return\"\"===t||\"true\"===t},t0=function(e,n,t){if(tG(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(tY));return n&&tK.call(e,tY)&&r.unshift(e),r=r.filter(t)},t1=function e(n,t,r){for(var o=[],a=Array.from(n);a.length;){var i=a.shift();if(!tG(i,!1))if(\"SLOT\"===i.tagName){var l=i.assignedElements(),s=e(l.length?l:i.children,!0,r);r.flatten?o.push.apply(o,s):o.push({scopeParent:i,candidates:s})}else{tK.call(i,tY)&&r.filter(i)&&(t||!n.includes(i))&&o.push(i);var c=i.shadowRoot||\"function\"==typeof r.getShadowRoot&&r.getShadowRoot(i),u=!tG(c,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(c&&u){var d=e(!0===c?i.children:c.children,!0,r);r.flatten?o.push.apply(o,d):o.push({scopeParent:i,candidates:d})}else a.unshift.apply(a,i.children)}}return o},t2=function(e){return!isNaN(parseInt(e.getAttribute(\"tabindex\"),10))},t4=function(e){if(!e)throw Error(\"No node provided\");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||tJ(e))&&!t2(e)?0:e.tabIndex},t5=function(e,n){var t=t4(e);return t<0&&n&&!t2(e)?0:t},t3=function(e,n){return e.tabIndex===n.tabIndex?e.documentOrder-n.documentOrder:e.tabIndex-n.tabIndex},t6=function(e){return\"INPUT\"===e.tagName},t9=function(e,n){for(var t=0;t<e.length;t++)if(e[t].checked&&e[t].form===n)return e[t]},t8=function(e){if(!e.name)return!0;var n,t=e.form||tQ(e),r=function(e){return t.querySelectorAll('input[type=\"radio\"][name=\"'+e+'\"]')};if(\"undefined\"!=typeof window&&void 0!==window.CSS&&\"function\"==typeof window.CSS.escape)n=r(window.CSS.escape(e.name));else try{n=r(e.name)}catch(e){return console.error(\"Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s\",e.message),!1}var o=t9(n,e.form);return!o||o===e},t7=function(e){return t6(e)&&\"radio\"===e.type&&!t8(e)},re=function(e){var n,t,r,o,a,i,l,s=e&&tQ(e),c=null==(n=s)?void 0:n.host,u=!1;if(s&&s!==e)for(u=!!(null!=(t=c)&&null!=(r=t.ownerDocument)&&r.contains(c)||null!=e&&null!=(o=e.ownerDocument)&&o.contains(e));!u&&c;)u=!!(null!=(i=c=null==(a=s=tQ(c))?void 0:a.host)&&null!=(l=i.ownerDocument)&&l.contains(c));return u},rn=function(e){var n=e.getBoundingClientRect(),t=n.width,r=n.height;return 0===t&&0===r},rt=function(e,n){var t=n.displayCheck,r=n.getShadowRoot;if(\"hidden\"===getComputedStyle(e).visibility)return!0;var o=tK.call(e,\"details>summary:first-of-type\")?e.parentElement:e;if(tK.call(o,\"details:not([open]) *\"))return!0;if(t&&\"full\"!==t&&\"legacy-full\"!==t){if(\"non-zero-area\"===t)return rn(e)}else{if(\"function\"==typeof r){for(var a=e;e;){var i=e.parentElement,l=tQ(e);if(i&&!i.shadowRoot&&!0===r(i))return rn(e);e=e.assignedSlot?e.assignedSlot:i||l===e.ownerDocument?i:l.host}e=a}if(re(e))return!e.getClientRects().length;if(\"legacy-full\"!==t)return!0}return!1},rr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var n=e.parentElement;n;){if(\"FIELDSET\"===n.tagName&&n.disabled){for(var t=0;t<n.children.length;t++){var r=n.children.item(t);if(\"LEGEND\"===r.tagName)return!!tK.call(n,\"fieldset[disabled] *\")||!r.contains(e)}return!0}n=n.parentElement}return!1},ro=function(e,n){return!(n.disabled||tG(n)||t6(n)&&\"hidden\"===n.type||rt(n,e)||\"DETAILS\"===n.tagName&&Array.prototype.slice.apply(n.children).some(function(e){return\"SUMMARY\"===e.tagName})||rr(n))},ra=function(e,n){return!(t7(n)||0>t4(n))&&!!ro(e,n)},ri=function(e){var n=parseInt(e.getAttribute(\"tabindex\"),10);return!!isNaN(n)||!!(n>=0)},rl=function e(n){var t=[],r=[];return n.forEach(function(n,o){var a=!!n.scopeParent,i=a?n.scopeParent:n,l=t5(i,a),s=a?e(n.candidates):i;0===l?a?t.push.apply(t,s):t.push(i):r.push({documentOrder:o,tabIndex:l,item:n,isScope:a,content:s})}),r.sort(t3).reduce(function(e,n){return n.isScope?e.push.apply(e,n.content):e.push(n.content),e},[]).concat(t)},rs=function(e,n){return rl((n=n||{}).getShadowRoot?t1([e],n.includeContainer,{filter:ra.bind(null,n),flatten:!1,getShadowRoot:n.getShadowRoot,shadowRootFilter:ri}):t0(e,n.includeContainer,ra.bind(null,n)))},rc=function(e,n){return(n=n||{}).getShadowRoot?t1([e],n.includeContainer,{filter:ro.bind(null,n),flatten:!0,getShadowRoot:n.getShadowRoot}):t0(e,n.includeContainer,ro.bind(null,n))},ru=function(e,n){if(n=n||{},!e)throw Error(\"No node provided\");return!1!==tK.call(e,tY)&&ra(n,e)};let rd=()=>({getShadowRoot:!0,displayCheck:\"function\"==typeof ResizeObserver&&ResizeObserver.toString().includes(\"[native code]\")?\"full\":\"none\"});function rf(e,n){let t=rs(e,rd()),r=t.length;if(0===r)return;let o=eZ(eQ(e)),a=t.indexOf(o);return t[-1===a?1===n?0:r-1:a+n]}function rp(e){return rf(eQ(e).body,1)||e}function rh(e){return rf(eQ(e).body,-1)||e}function rg(e,n){let t=n||e.currentTarget,r=e.relatedTarget;return!r||!eY(t,r)}function rm(e){e.querySelectorAll(\"[data-tabindex]\").forEach(e=>{let n=e.dataset.tabindex;delete e.dataset.tabindex,n?e.setAttribute(\"tabindex\",n):e.removeAttribute(\"tabindex\")})}let rv=C.createContext(null),rb=()=>C.useContext(rv),ry=e1(\"portal\");function rx(e={}){let{id:n,root:t}=e,r=H(),o=rb(),[a,i]=C.useState(null),l=C.useRef(null);return F(()=>()=>{a?.remove(),queueMicrotask(()=>{l.current=null})},[a]),F(()=>{if(!r||l.current)return;let e=n?document.getElementById(n):null;if(!e)return;let t=document.createElement(\"div\");t.id=r,t.setAttribute(ry,\"\"),e.appendChild(t),l.current=t,i(t)},[n,r]),F(()=>{if(null===t||!r||l.current)return;let e=t||o?.portalNode;e&&!ee(e)&&(e=e.current),e=e||document.body;let a=null;n&&((a=document.createElement(\"div\")).id=n,e.appendChild(a));let s=document.createElement(\"div\");s.id=r,s.setAttribute(ry,\"\"),(e=a||e).appendChild(s),l.current=s,i(s)},[n,t,r,o]),a}function rw(e){let{children:n,id:t,root:r,preserveTabOrder:o=!0}=e,a=rx({id:t,root:r}),[i,s]=C.useState(null),c=C.useRef(null),u=C.useRef(null),d=C.useRef(null),f=C.useRef(null),p=i?.modal,h=i?.open,g=!!i&&!i.modal&&i.open&&o&&!!(r||a);return C.useEffect(()=>{if(a&&o&&!p)return a.addEventListener(\"focusin\",e,!0),a.addEventListener(\"focusout\",e,!0),()=>{a.removeEventListener(\"focusin\",e,!0),a.removeEventListener(\"focusout\",e,!0)};function e(e){a&&rg(e)&&(\"focusin\"===e.type?rm:function(e){rs(e,rd()).forEach(e=>{e.dataset.tabindex=e.getAttribute(\"tabindex\")||\"\",e.setAttribute(\"tabindex\",\"-1\")})})(a)}},[a,o,p]),C.useEffect(()=>{a&&(h||rm(a))},[h,a]),(0,l.jsxs)(rv.Provider,{value:C.useMemo(()=>({preserveTabOrder:o,beforeOutsideRef:c,afterOutsideRef:u,beforeInsideRef:d,afterInsideRef:f,portalNode:a,setFocusManagerState:s}),[o,a]),children:[g&&a&&(0,l.jsx)(tZ,{\"data-type\":\"outside\",ref:c,onFocus:e=>{if(rg(e,a))d.current?.focus();else{let e=rh(i?i.domReference:null);e?.focus()}}}),g&&a&&(0,l.jsx)(\"span\",{\"aria-owns\":a.id,style:t$}),a&&E.createPortal(n,a),g&&a&&(0,l.jsx)(tZ,{\"data-type\":\"outside\",ref:u,onFocus:e=>{if(rg(e,a))f.current?.focus();else{let n=rp(i?i.domReference:null);n?.focus(),i?.closeOnFocusOut&&i?.onOpenChange(!1,e.nativeEvent,\"focus-out\")}}})]})}let rj=C.createContext(void 0);function rk(e){let{children:n,keepMounted:t=!1,container:r}=e,{mounted:o}=n0();return o||t?(0,l.jsx)(rj.Provider,{value:t,children:(0,l.jsx)(rw,{root:r,children:n})}):null}let rA=C.createContext(void 0);function rO(e,n,t){let r,{reference:o,floating:a}=e,i=nE(n),l=nO(nE(n)),s=nC(l),c=nk(n),u=\"y\"===i,d=o.x+o.width/2-a.width/2,f=o.y+o.height/2-a.height/2,p=o[s]/2-a[s]/2;switch(c){case\"top\":r={x:d,y:o.y-a.height};break;case\"bottom\":r={x:d,y:o.y+o.height};break;case\"right\":r={x:o.x+o.width,y:f};break;case\"left\":r={x:o.x-a.width,y:f};break;default:r={x:o.x,y:o.y}}switch(nA(n)){case\"start\":r[l]-=p*(t&&u?-1:1);break;case\"end\":r[l]+=p*(t&&u?-1:1)}return r}let rC=async(e,n,t)=>{let{placement:r=\"bottom\",strategy:o=\"absolute\",middleware:a=[],platform:i}=t,l=a.filter(Boolean),s=await (null==i.isRTL?void 0:i.isRTL(n)),c=await i.getElementRects({reference:e,floating:n,strategy:o}),{x:u,y:d}=rO(c,r,s),f=r,p={},h=0;for(let t=0;t<l.length;t++){let{name:a,fn:g}=l[t],{x:m,y:v,data:b,reset:y}=await g({x:u,y:d,initialPlacement:r,placement:f,strategy:o,middlewareData:p,rects:c,platform:i,elements:{reference:e,floating:n}});u=null!=m?m:u,d=null!=v?v:d,p={...p,[a]:{...p[a],...b}},y&&h<=50&&(h++,\"object\"==typeof y&&(y.placement&&(f=y.placement),y.rects&&(c=!0===y.rects?await i.getElementRects({reference:e,floating:n,strategy:o}):y.rects),{x:u,y:d}=rO(c,f,s)),t=-1)}return{x:u,y:d,placement:f,strategy:o,middlewareData:p}};async function rS(e,n){var t;void 0===n&&(n={});let{x:r,y:o,platform:a,rects:i,elements:l,strategy:s}=e,{boundary:c=\"clippingAncestors\",rootBoundary:u=\"viewport\",elementContext:d=\"floating\",altBoundary:f=!1,padding:p=0}=nj(n,e),h=nN(p),g=l[f?\"floating\"===d?\"reference\":\"floating\":d],m=nD(await a.getClippingRect({element:null==(t=await (null==a.isElement?void 0:a.isElement(g)))||t?g:g.contextElement||await (null==a.getDocumentElement?void 0:a.getDocumentElement(l.floating)),boundary:c,rootBoundary:u,strategy:s})),v=\"floating\"===d?{x:r,y:o,width:i.floating.width,height:i.floating.height}:i.reference,b=await (null==a.getOffsetParent?void 0:a.getOffsetParent(l.floating)),y=await (null==a.isElement?void 0:a.isElement(b))&&await (null==a.getScale?void 0:a.getScale(b))||{x:1,y:1},x=nD(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:v,offsetParent:b,strategy:s}):v);return{top:(m.top-x.top+h.top)/y.y,bottom:(x.bottom-m.bottom+h.bottom)/y.y,left:(m.left-x.left+h.left)/y.x,right:(x.right-m.right+h.right)/y.x}}function rE(e,n){return{top:e.top-n.height,right:e.right-n.width,bottom:e.bottom-n.height,left:e.left-n.width}}function r_(e){return nh.some(n=>e[n]>=0)}let rP=new Set([\"left\",\"top\"]);async function rz(e,n){let{placement:t,platform:r,elements:o}=e,a=await (null==r.isRTL?void 0:r.isRTL(o.floating)),i=nk(t),l=nA(t),s=\"y\"===nE(t),c=rP.has(i)?-1:1,u=a&&s?-1:1,d=nj(n,e),{mainAxis:f,crossAxis:p,alignmentAxis:h}=\"number\"==typeof d?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return l&&\"number\"==typeof h&&(p=\"end\"===l?-1*h:h),s?{x:p*u,y:f*c}:{x:f*c,y:p*u}}function rL(e){let n=eg(e),t=parseFloat(n.width)||0,r=parseFloat(n.height)||0,o=en(e),a=o?e.offsetWidth:t,i=o?e.offsetHeight:r,l=nv(t)!==a||nv(r)!==i;return l&&(t=a,r=i),{width:t,height:r,$:l}}function rT(e){return ee(e)?e:e.contextElement}function rR(e){let n=rT(e);if(!en(n))return ny(1);let t=n.getBoundingClientRect(),{width:r,height:o,$:a}=rL(n),i=(a?nv(t.width):t.width)/r,l=(a?nv(t.height):t.height)/o;return i&&Number.isFinite(i)||(i=1),l&&Number.isFinite(l)||(l=1),{x:i,y:l}}let rN=ny(0);function rD(e){let n=Q(e);return ef()&&n.visualViewport?{x:n.visualViewport.offsetLeft,y:n.visualViewport.offsetTop}:rN}function rB(e,n,t,r){var o;void 0===n&&(n=!1),void 0===t&&(t=!1);let a=e.getBoundingClientRect(),i=rT(e),l=ny(1);n&&(r?ee(r)&&(l=rR(r)):l=rR(e));let s=(void 0===(o=t)&&(o=!1),r&&(!o||r===Q(i))&&o)?rD(i):ny(0),c=(a.left+s.x)/l.x,u=(a.top+s.y)/l.y,d=a.width/l.x,f=a.height/l.y;if(i){let e=Q(i),n=r&&ee(r)?Q(r):r,t=e,o=ey(t);for(;o&&r&&n!==t;){let e=rR(o),n=o.getBoundingClientRect(),r=eg(o),a=n.left+(o.clientLeft+parseFloat(r.paddingLeft))*e.x,i=n.top+(o.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,u*=e.y,d*=e.x,f*=e.y,c+=a,u+=i,o=ey(t=Q(o))}}return nD({width:d,height:f,x:c,y:u})}function rM(e,n){let t=em(e).scrollLeft;return n?n.left+t:rB(G(e)).left+t}function rI(e,n,t){void 0===t&&(t=!1);let r=e.getBoundingClientRect();return{x:r.left+n.scrollLeft-(t?0:rM(e,r)),y:r.top+n.scrollTop}}let rH=new Set([\"absolute\",\"fixed\"]);function rF(e,n,t){let r;if(\"viewport\"===n)r=function(e,n){let t=Q(e),r=G(e),o=t.visualViewport,a=r.clientWidth,i=r.clientHeight,l=0,s=0;if(o){a=o.width,i=o.height;let e=ef();(!e||e&&\"fixed\"===n)&&(l=o.offsetLeft,s=o.offsetTop)}return{width:a,height:i,x:l,y:s}}(e,t);else if(\"document\"===n)r=function(e){let n=G(e),t=em(e),r=e.ownerDocument.body,o=nm(n.scrollWidth,n.clientWidth,r.scrollWidth,r.clientWidth),a=nm(n.scrollHeight,n.clientHeight,r.scrollHeight,r.clientHeight),i=-t.scrollLeft+rM(e),l=-t.scrollTop;return\"rtl\"===eg(r).direction&&(i+=nm(n.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:l}}(G(e));else if(ee(n))r=function(e,n){let t=rB(e,!0,\"fixed\"===n),r=t.top+e.clientTop,o=t.left+e.clientLeft,a=en(e)?rR(e):ny(1),i=e.clientWidth*a.x,l=e.clientHeight*a.y;return{width:i,height:l,x:o*a.x,y:r*a.y}}(n,t);else{let t=rD(e);r={x:n.x-t.x,y:n.y-t.y,width:n.width,height:n.height}}return nD(r)}function rU(e){return\"static\"===eg(e).position}function rV(e,n){if(!en(e)||\"fixed\"===eg(e).position)return null;if(n)return n(e);let t=e.offsetParent;return G(e)===t&&(t=t.ownerDocument.body),t}function rq(e,n){var t;let r=Q(e);if(el(e))return r;if(!en(e)){let n=ev(e);for(;n&&!eh(n);){if(ee(n)&&!rU(n))return n;n=ev(n)}return r}let o=rV(e,n);for(;o&&(t=o,ea.has(K(t)))&&rU(o);)o=rV(o,n);return o&&eh(o)&&rU(o)&&!ed(o)?r:o||function(e){let n=ev(e);for(;en(n)&&!eh(n);){if(ed(n))return n;if(el(n))break;n=ev(n)}return null}(e)||r}let rW=async function(e){let n=this.getOffsetParent||rq,t=this.getDimensions,r=await t(e.floating);return{reference:function(e,n,t){let r=en(n),o=G(n),a=\"fixed\"===t,i=rB(e,!0,a,n),l={scrollLeft:0,scrollTop:0},s=ny(0);if(r||!r&&!a)if((\"body\"!==K(n)||eo(o))&&(l=em(n)),r){let e=rB(n,!0,a,n);s.x=e.x+n.clientLeft,s.y=e.y+n.clientTop}else o&&(s.x=rM(o));a&&!r&&o&&(s.x=rM(o));let c=!o||r||a?ny(0):rI(o,l);return{x:i.left+l.scrollLeft-s.x-c.x,y:i.top+l.scrollTop-s.y-c.y,width:i.width,height:i.height}}(e.reference,await n(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},r$={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:n,rect:t,offsetParent:r,strategy:o}=e,a=\"fixed\"===o,i=G(r),l=!!n&&el(n.floating);if(r===i||l&&a)return t;let s={scrollLeft:0,scrollTop:0},c=ny(1),u=ny(0),d=en(r);if((d||!d&&!a)&&((\"body\"!==K(r)||eo(i))&&(s=em(r)),en(r))){let e=rB(r);c=rR(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=!i||d||a?ny(0):rI(i,s,!0);return{width:t.width*c.x,height:t.height*c.y,x:t.x*c.x-s.scrollLeft*c.x+u.x+f.x,y:t.y*c.y-s.scrollTop*c.y+u.y+f.y}},getDocumentElement:G,getClippingRect:function(e){let{element:n,boundary:t,rootBoundary:r,strategy:o}=e,a=[...\"clippingAncestors\"===t?el(n)?[]:function(e,n){let t=n.get(e);if(t)return t;let r=eb(e,[],!1).filter(e=>ee(e)&&\"body\"!==K(e)),o=null,a=\"fixed\"===eg(e).position,i=a?ev(e):e;for(;ee(i)&&!eh(i);){let n=eg(i),t=ed(i);t||\"fixed\"!==n.position||(o=null),(a?!t&&!o:!t&&\"static\"===n.position&&!!o&&rH.has(o.position)||eo(i)&&!t&&function e(n,t){let r=ev(n);return!(r===t||!ee(r)||eh(r))&&(\"fixed\"===eg(r).position||e(r,t))}(e,i))?r=r.filter(e=>e!==i):o=n,i=ev(i)}return n.set(e,r),r}(n,this._c):[].concat(t),r],i=a[0],l=a.reduce((e,t)=>{let r=rF(n,t,o);return e.top=nm(r.top,e.top),e.right=ng(r.right,e.right),e.bottom=ng(r.bottom,e.bottom),e.left=nm(r.left,e.left),e},rF(n,i,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}},getOffsetParent:rq,getElementRects:rW,getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){let{width:n,height:t}=rL(e);return{width:n,height:t}},getScale:rR,isElement:ee,isRTL:function(e){return\"rtl\"===eg(e).direction}};function rZ(e,n){return e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height}function rY(e,n,t,r){let o;void 0===r&&(r={});let{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:l=\"function\"==typeof ResizeObserver,layoutShift:s=\"function\"==typeof IntersectionObserver,animationFrame:c=!1}=r,u=rT(e),d=a||i?[...u?eb(u):[],...eb(n)]:[];d.forEach(e=>{a&&e.addEventListener(\"scroll\",t,{passive:!0}),i&&e.addEventListener(\"resize\",t)});let f=u&&s?function(e,n){let t,r=null,o=G(e);function a(){var e;clearTimeout(t),null==(e=r)||e.disconnect(),r=null}return!function i(l,s){void 0===l&&(l=!1),void 0===s&&(s=1),a();let c=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=c;if(l||n(),!f||!p)return;let h=nb(d),g=nb(o.clientWidth-(u+f)),m={rootMargin:-h+\"px \"+-g+\"px \"+-nb(o.clientHeight-(d+p))+\"px \"+-nb(u)+\"px\",threshold:nm(0,ng(1,s))||1},v=!0;function b(n){let r=n[0].intersectionRatio;if(r!==s){if(!v)return i();r?i(!1,r):t=setTimeout(()=>{i(!1,1e-7)},1e3)}1!==r||rZ(c,e.getBoundingClientRect())||i(),v=!1}try{r=new IntersectionObserver(b,{...m,root:o.ownerDocument})}catch(e){r=new IntersectionObserver(b,m)}r.observe(e)}(!0),a}(u,t):null,p=-1,h=null;l&&(h=new ResizeObserver(e=>{let[r]=e;r&&r.target===u&&h&&(h.unobserve(n),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var e;null==(e=h)||e.observe(n)})),t()}),u&&!c&&h.observe(u),h.observe(n));let g=c?rB(e):null;return c&&function n(){let r=rB(e);g&&!rZ(g,r)&&t(),g=r,o=requestAnimationFrame(n)}(),t(),()=>{var e;d.forEach(e=>{a&&e.removeEventListener(\"scroll\",t),i&&e.removeEventListener(\"resize\",t)}),null==f||f(),null==(e=h)||e.disconnect(),h=null,c&&cancelAnimationFrame(o)}}let rX=e=>({name:\"arrow\",options:e,async fn(n){let{x:t,y:r,placement:o,rects:a,platform:i,elements:l,middlewareData:s}=n,{element:c,padding:u=0}=nj(e,n)||{};if(null==c)return{};let d=nN(u),f={x:t,y:r},p=nO(nE(o)),h=nC(p),g=await i.getDimensions(c),m=\"y\"===p,v=m?\"clientHeight\":\"clientWidth\",b=a.reference[h]+a.reference[p]-f[p]-a.floating[h],y=f[p]-a.reference[p],x=await (null==i.getOffsetParent?void 0:i.getOffsetParent(c)),w=x?x[v]:0;w&&await (null==i.isElement?void 0:i.isElement(x))||(w=l.floating[v]||a.floating[h]);let j=w/2-g[h]/2-1,k=ng(d[m?\"top\":\"left\"],j),A=ng(d[m?\"bottom\":\"right\"],j),O=w-g[h]-A,C=w/2-g[h]/2+(b/2-y/2),S=nm(k,ng(C,O)),E=!s.arrow&&null!=nA(o)&&C!==S&&a.reference[h]/2-(C<k?k:A)-g[h]/2<0,_=E?C<k?C-k:C-O:0;return{[p]:f[p]+_,data:{[p]:S,centerOffset:C-S-_,...E&&{alignmentOffset:_}},reset:E}}});var rK=\"undefined\"!=typeof document?C.useLayoutEffect:function(){};function rQ(e,n){let t,r,o;if(e===n)return!0;if(typeof e!=typeof n)return!1;if(\"function\"==typeof e&&e.toString()===n.toString())return!0;if(e&&n&&\"object\"==typeof e){if(Array.isArray(e)){if((t=e.length)!==n.length)return!1;for(r=t;0!=r--;)if(!rQ(e[r],n[r]))return!1;return!0}if((t=(o=Object.keys(e)).length)!==Object.keys(n).length)return!1;for(r=t;0!=r--;)if(!({}).hasOwnProperty.call(n,o[r]))return!1;for(r=t;0!=r--;){let t=o[r];if((\"_owner\"!==t||!e.$$typeof)&&!rQ(e[t],n[t]))return!1}return!0}return e!=e&&n!=n}function rG(e){return\"undefined\"==typeof window?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function rJ(e,n){let t=rG(e);return Math.round(n*t)/t}function r0(e){let n=C.useRef(e);return rK(()=>{n.current=e}),n}function r1(e,n,t){let r=\"inline-start\"===e||\"inline-end\"===e;return({top:\"top\",right:r?t?\"inline-start\":\"inline-end\":\"right\",bottom:\"bottom\",left:r?t?\"inline-end\":\"inline-start\":\"left\"})[n]}function r2(e,n,t){let{rects:r,placement:o}=e;return{side:r1(n,nk(o),t),align:nA(o)||\"center\",anchor:{width:r.reference.width,height:r.reference.height},positioner:{width:r.floating.width,height:r.floating.height}}}function r4(e){var n,t,r,o,a,i,l,s,c,u,d,f,p,h,g,m,v;let{anchor:b,positionMethod:y=\"absolute\",side:x=\"bottom\",sideOffset:w=0,align:j=\"center\",alignOffset:k=0,collisionBoundary:A,collisionPadding:O=5,sticky:S=!1,arrowPadding:_=5,trackAnchor:P=!0,keepMounted:z=!1,floatingRootContext:L,mounted:R,collisionAvoidance:N,shiftCrossAxis:D=!1,nodeId:B,adaptiveOrigin:M}=e,I=N.side||\"flip\",H=N.align||\"flip\",U=N.fallbackAxisSide||\"end\",V=\"function\"==typeof b?b:void 0,q=T(V),$=V?q:b,Z=eA(b),X=\"rtl\"===n6(),K={top:\"top\",right:\"right\",bottom:\"bottom\",left:\"left\",\"inline-end\":X?\"left\":\"right\",\"inline-start\":X?\"right\":\"left\"}[x],Q=\"center\"===j?K:`${K}-${j}`,G={boundary:\"clipping-ancestors\"===A?\"clippingAncestors\":A,padding:O},J=C.useRef(null),en=eA(w),et=eA(k),er=\"function\"!=typeof w?w:0,eo=[(n=e=>{let n=r2(e,x,X),t=\"function\"==typeof en.current?en.current(n):en.current,r=\"function\"==typeof et.current?et.current(n):et.current;return{mainAxis:t,crossAxis:r,alignmentAxis:r}},t=[er,\"function\"!=typeof k?k:0,X,x],{...(void 0===(r=n)&&(r=0),{name:\"offset\",options:r,async fn(e){var n,t;let{x:o,y:a,placement:i,middlewareData:l}=e,s=await rz(e,r);return i===(null==(n=l.offset)?void 0:n.placement)&&null!=(t=l.arrow)&&t.alignmentOffset?{}:{x:o+s.x,y:a+s.y,data:{...s,placement:i}}}}),options:[n,t]})],ea=\"none\"===H&&\"shift\"!==I,ei=!ea&&(S||D||\"shift\"===I),el=\"none\"===I?null:{...{name:\"flip\",options:i=o={...G,mainAxis:!D&&\"flip\"===I,crossAxis:\"flip\"===H&&\"alignment\",fallbackAxisSideDirection:U},async fn(e){var n,t,r,o,a;let{placement:l,middlewareData:s,rects:c,initialPlacement:u,platform:d,elements:f}=e,{mainAxis:p=!0,crossAxis:h=!0,fallbackPlacements:g,fallbackStrategy:m=\"bestFit\",fallbackAxisSideDirection:v=\"none\",flipAlignment:b=!0,...y}=nj(i,e);if(null!=(n=s.arrow)&&n.alignmentOffset)return{};let x=nk(l),w=nE(u),j=nk(u)===u,k=await (null==d.isRTL?void 0:d.isRTL(f.floating)),A=g||(j||!b?[nR(u)]:function(e){let n=nR(e);return[n_(e),n,n_(n)]}(u)),O=\"none\"!==v;!g&&O&&A.push(...function(e,n,t,r){let o=nA(e),a=function(e,n,t){switch(e){case\"top\":case\"bottom\":if(t)return n?nz:nP;return n?nP:nz;case\"left\":case\"right\":return n?nL:nT;default:return[]}}(nk(e),\"start\"===t,r);return o&&(a=a.map(e=>e+\"-\"+o),n&&(a=a.concat(a.map(n_)))),a}(u,b,v,k));let C=[u,...A],S=await rS(e,y),E=[],_=(null==(t=s.flip)?void 0:t.overflows)||[];if(p&&E.push(S[x]),h){let e=function(e,n,t){void 0===t&&(t=!1);let r=nA(e),o=nO(nE(e)),a=nC(o),i=\"x\"===o?r===(t?\"end\":\"start\")?\"right\":\"left\":\"start\"===r?\"bottom\":\"top\";return n.reference[a]>n.floating[a]&&(i=nR(i)),[i,nR(i)]}(l,c,k);E.push(S[e[0]],S[e[1]])}if(_=[..._,{placement:l,overflows:E}],!E.every(e=>e<=0)){let e=((null==(r=s.flip)?void 0:r.index)||0)+1,n=C[e];if(n&&(\"alignment\"!==h||w===nE(n)||_.every(e=>e.overflows[0]>0&&nE(e.placement)===w)))return{data:{index:e,overflows:_},reset:{placement:n}};let t=null==(o=_.filter(e=>e.overflows[0]<=0).sort((e,n)=>e.overflows[1]-n.overflows[1])[0])?void 0:o.placement;if(!t)switch(m){case\"bestFit\":{let e=null==(a=_.filter(e=>{if(O){let n=nE(e.placement);return n===w||\"y\"===n}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,n)=>e+n,0)]).sort((e,n)=>e[1]-n[1])[0])?void 0:a[0];e&&(t=e);break}case\"initialPlacement\":t=u}if(l!==t)return{reset:{placement:t}}}return{}}},options:[o,a]},es=ea?null:(l=e=>{var n,t,r;let o=eQ(e.elements.floating).documentElement;return{...G,rootBoundary:D?{x:0,y:0,width:o.clientWidth,height:o.clientHeight}:void 0,mainAxis:\"none\"!==H,crossAxis:ei,limiter:S||D?void 0:{...(void 0===(r=n=()=>{if(!J.current)return{};let{height:e}=J.current.getBoundingClientRect();return{offset:e/2+(\"number\"==typeof O?O:0)}})&&(r={}),{options:r,fn(e){let{x:n,y:t,placement:o,rects:a,middlewareData:i}=e,{offset:l=0,mainAxis:s=!0,crossAxis:c=!0}=nj(r,e),u={x:n,y:t},d=nE(o),f=nO(d),p=u[f],h=u[d],g=nj(l,e),m=\"number\"==typeof g?{mainAxis:g,crossAxis:0}:{mainAxis:0,crossAxis:0,...g};if(s){let e=\"y\"===f?\"height\":\"width\",n=a.reference[f]-a.floating[e]+m.mainAxis,t=a.reference[f]+a.reference[e]-m.mainAxis;p<n?p=n:p>t&&(p=t)}if(c){var v,b;let e=\"y\"===f?\"width\":\"height\",n=rP.has(nk(o)),t=a.reference[d]-a.floating[e]+(n&&(null==(v=i.offset)?void 0:v[d])||0)+(n?0:m.crossAxis),r=a.reference[d]+a.reference[e]+(n?0:(null==(b=i.offset)?void 0:b[d])||0)-(n?m.crossAxis:0);h<t?h=t:h>r&&(h=r)}return{[f]:p,[d]:h}}}),options:[n,t]}}},s=[G,S,D,O,H],{...(void 0===(c=l)&&(c={}),{name:\"shift\",options:c,async fn(e){let{x:n,y:t,placement:r}=e,{mainAxis:o=!0,crossAxis:a=!1,limiter:i={fn:e=>{let{x:n,y:t}=e;return{x:n,y:t}}},...l}=nj(c,e),s={x:n,y:t},u=await rS(e,l),d=nE(nk(r)),f=nO(d),p=s[f],h=s[d];if(o){let e=\"y\"===f?\"top\":\"left\",n=\"y\"===f?\"bottom\":\"right\",t=p+u[e],r=p-u[n];p=nm(t,ng(p,r))}if(a){let e=\"y\"===d?\"top\":\"left\",n=\"y\"===d?\"bottom\":\"right\",t=h+u[e],r=h-u[n];h=nm(t,ng(h,r))}let g=i.fn({...e,[f]:p,[d]:h});return{...g,data:{x:g.x-n,y:g.y-t,enabled:{[f]:o,[d]:a}}}}}),options:[l,s]});\"shift\"===I||\"shift\"===H||\"center\"===j?eo.push(es,el):eo.push(el,es),eo.push({...{name:\"size\",options:f=u={...G,apply({elements:{floating:e},rects:{reference:n},availableWidth:t,availableHeight:r}){Object.entries({\"--available-width\":`${t}px`,\"--available-height\":`${r}px`,\"--anchor-width\":`${n.width}px`,\"--anchor-height\":`${n.height}px`}).forEach(([n,t])=>{e.style.setProperty(n,t)})}},async fn(e){var n,t;let r,o,{placement:a,rects:i,platform:l,elements:s}=e,{apply:c=()=>{},...u}=nj(f,e),d=await rS(e,u),p=nk(a),h=nA(a),g=\"y\"===nE(a),{width:m,height:v}=i.floating;\"top\"===p||\"bottom\"===p?(r=p,o=h===(await (null==l.isRTL?void 0:l.isRTL(s.floating))?\"start\":\"end\")?\"left\":\"right\"):(o=p,r=\"end\"===h?\"top\":\"bottom\");let b=v-d.top-d.bottom,y=m-d.left-d.right,x=ng(v-d[r],b),w=ng(m-d[o],y),j=!e.middlewareData.shift,k=x,A=w;if(null!=(n=e.middlewareData.shift)&&n.enabled.x&&(A=y),null!=(t=e.middlewareData.shift)&&t.enabled.y&&(k=b),j&&!h){let e=nm(d.left,0),n=nm(d.right,0),t=nm(d.top,0),r=nm(d.bottom,0);g?A=m-2*(0!==e||0!==n?e+n:nm(d.left,d.right)):k=v-2*(0!==t||0!==r?t+r:nm(d.top,d.bottom))}await c({...e,availableWidth:A,availableHeight:k});let O=await l.getDimensions(s.floating);return m!==O.width||v!==O.height?{reset:{rects:!0}}:{}}},options:[u,d]},(p=()=>({element:J.current||document.createElement(\"div\"),padding:_}),h=[_],{name:\"arrow\",options:p,fn(e){let{element:n,padding:t}=p(e);return n&&({}).hasOwnProperty.call(n,\"current\")?null!=n.current?rX({element:n.current,padding:t}).fn(e):{}:n?rX({element:n,padding:t}).fn(e):{}},options:[p,h]}),{...(void 0===(v=g)&&(v={}),{name:\"hide\",options:v,async fn(e){let{rects:n}=e,{strategy:t=\"referenceHidden\",...r}=nj(v,e);switch(t){case\"referenceHidden\":{let t=rE(await rS(e,{...r,elementContext:\"reference\"}),n.reference);return{data:{referenceHiddenOffsets:t,referenceHidden:r_(t)}}}case\"escaped\":{let t=rE(await rS(e,{...r,altBoundary:!0}),n.floating);return{data:{escapedOffsets:t,escaped:r_(t)}}}default:return{}}}}),options:[g,m]},{name:\"transformOrigin\",fn(e){let{elements:n,middlewareData:t,placement:r,rects:o,y:a}=e,i=nk(r),l=nE(i),s=J.current,c=t.arrow?.x||0,u=t.arrow?.y||0,d=s?.clientWidth||0,f=s?.clientHeight||0,p=c+d/2,h=u+f/2,g=Math.abs(t.shift?.y||0),m=o.reference.height/2,v=g>(\"function\"==typeof w?w(r2(e,x,X)):w),b={top:`${p}px calc(100% + ${w}px)`,bottom:`${p}px ${-w}px`,left:`calc(100% + ${w}px) ${h}px`,right:`${-w}px ${h}px`}[i],y=`${p}px ${o.reference.y+m-a}px`;return n.floating.style.setProperty(\"--transform-origin\",ei&&\"y\"===l&&v?y:b),{}}},M);let ec=L;!R&&L&&(ec={...L,elements:{reference:null,floating:null,domReference:null}});let eu=C.useMemo(()=>({elementResize:P&&\"undefined\"!=typeof ResizeObserver,layoutShift:P&&\"undefined\"!=typeof IntersectionObserver}),[P]),{refs:ed,elements:ef,x:ep,y:eh,middlewareData:eg,update:em,placement:ev,context:eb,isPositioned:ey,floatingStyles:ex}=function(e={}){let{nodeId:n}=e,t=Y({...e,elements:{reference:null,floating:null,...e.elements}}),r=e.rootContext||t,o=r.elements,[a,i]=C.useState(null),[l,s]=C.useState(null),c=o?.domReference||a,u=C.useRef(null),d=W();F(()=>{c&&(u.current=c)},[c]);let f=function(e){void 0===e&&(e={});let{placement:n=\"bottom\",strategy:t=\"absolute\",middleware:r=[],platform:o,elements:{reference:a,floating:i}={},transform:l=!0,whileElementsMounted:s,open:c}=e,[u,d]=C.useState({x:0,y:0,strategy:t,placement:n,middlewareData:{},isPositioned:!1}),[f,p]=C.useState(r);rQ(f,r)||p(r);let[h,g]=C.useState(null),[m,v]=C.useState(null),b=C.useCallback(e=>{e!==j.current&&(j.current=e,g(e))},[]),y=C.useCallback(e=>{e!==k.current&&(k.current=e,v(e))},[]),x=a||h,w=i||m,j=C.useRef(null),k=C.useRef(null),A=C.useRef(u),O=null!=s,S=r0(s),_=r0(o),P=r0(c),z=C.useCallback(()=>{if(!j.current||!k.current)return;let e={placement:n,strategy:t,middleware:f};_.current&&(e.platform=_.current),((e,n,t)=>{let r=new Map,o={platform:r$,...t},a={...o.platform,_c:r};return rC(e,n,{...o,platform:a})})(j.current,k.current,e).then(e=>{let n={...e,isPositioned:!1!==P.current};L.current&&!rQ(A.current,n)&&(A.current=n,E.flushSync(()=>{d(n)}))})},[f,n,t,_,P]);rK(()=>{!1===c&&A.current.isPositioned&&(A.current.isPositioned=!1,d(e=>({...e,isPositioned:!1})))},[c]);let L=C.useRef(!1);rK(()=>(L.current=!0,()=>{L.current=!1}),[]),rK(()=>{if(x&&(j.current=x),w&&(k.current=w),x&&w){if(S.current)return S.current(x,w,z);z()}},[x,w,z,S,O]);let T=C.useMemo(()=>({reference:j,floating:k,setReference:b,setFloating:y}),[b,y]),R=C.useMemo(()=>({reference:x,floating:w}),[x,w]),N=C.useMemo(()=>{let e={position:t,left:0,top:0};if(!R.floating)return e;let n=rJ(R.floating,u.x),r=rJ(R.floating,u.y);return l?{...e,transform:\"translate(\"+n+\"px, \"+r+\"px)\",...rG(R.floating)>=1.5&&{willChange:\"transform\"}}:{position:t,left:n,top:r}},[t,l,R.floating,u.x,u.y]);return C.useMemo(()=>({...u,update:z,refs:T,elements:R,floatingStyles:N}),[u,z,T,R,N])}({...e,elements:{...o,...l&&{reference:l}}}),p=C.useCallback(e=>{let n=ee(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;s(n),f.refs.setReference(n)},[f.refs]),h=C.useCallback(e=>{(ee(e)||null===e)&&(u.current=e,i(e)),(ee(f.refs.reference.current)||null===f.refs.reference.current||null!==e&&!ee(e))&&f.refs.setReference(e)},[f.refs]),g=C.useMemo(()=>({...f.refs,setReference:h,setPositionReference:p,domReference:u}),[f.refs,h,p]),m=C.useMemo(()=>({...f.elements,domReference:c}),[f.elements,c]),v=C.useMemo(()=>({...f,...r,refs:g,elements:m,nodeId:n}),[f,g,m,n,r]);return F(()=>{r.dataRef.current.floatingContext=v;let e=d?.nodesRef.current.find(e=>e.id===n);e&&(e.context=v)}),C.useMemo(()=>({...f,context:v,refs:g,elements:m}),[f,g,m,v])}({rootContext:ec,placement:Q,middleware:eo,strategy:y,whileElementsMounted:z?void 0:(...e)=>rY(...e,eu),nodeId:B}),{sideX:ew,sideY:ej}=eg.adaptiveOrigin||{},ek=C.useMemo(()=>M?{position:y,[ew]:`${ep}px`,[ej]:`${eh}px`}:ex,[M,ew,ej,y,ep,eh,ex]),eO=C.useRef(null);F(()=>{if(!R)return;let e=Z.current,n=\"function\"==typeof e?e():e,t=(r5(n)?n.current:n)||null;t!==eO.current&&(ed.setPositionReference(t),eO.current=t)},[R,ed,$,Z]),C.useEffect(()=>{if(!R)return;let e=Z.current;\"function\"!=typeof e&&r5(e)&&e.current!==eO.current&&(ed.setPositionReference(e.current),eO.current=e.current)},[R,ed,$,Z]),C.useEffect(()=>{if(z&&R&&ef.domReference&&ef.floating)return rY(ef.domReference,ef.floating,em,eu)},[z,R,ef,em,eu]);let eC=r1(x,nk(ev),X),eS=nA(ev)||\"center\",eE=!!eg.hide?.referenceHidden,e_=C.useMemo(()=>({position:\"absolute\",top:eg.arrow?.y,left:eg.arrow?.x}),[eg.arrow]),eP=eg.arrow?.centerOffset!==0;return C.useMemo(()=>({positionerStyles:ek,arrowStyles:e_,arrowRef:J,arrowUncentered:eP,side:eC,align:eS,anchorHidden:eE,refs:ed,context:eb,isPositioned:ey,update:em}),[ek,e_,J,eP,eC,eS,eE,ed,eb,ey,em])}function r5(e){return null!=e&&\"current\"in e}function r3(e){let{children:n,elementsRef:t,labelsRef:r,onMapChange:o}=e,a=C.useRef(0),i=P(r9).current,s=P(r6).current,[c,u]=C.useState(0),d=C.useRef(c),f=T((e,n)=>{s.set(e,n??null),d.current+=1,u(d.current)}),p=T(e=>{s.delete(e),d.current+=1,u(d.current)}),h=C.useMemo(()=>{let e=new Map;return Array.from(s.keys()).sort(r8).forEach((n,t)=>{let r=s.get(n)??{};e.set(n,{...r,index:t})}),e},[s,c]);F(()=>{d.current===c&&(t.current.length!==h.size&&(t.current.length=h.size),r&&r.current.length!==h.size&&(r.current.length=h.size)),o?.(h)},[o,h,t,r,c,d]);let g=T(e=>(i.add(e),()=>{i.delete(e)}));F(()=>{i.forEach(e=>e(h))},[i,h]);let m=C.useMemo(()=>({register:f,unregister:p,subscribeMapChange:g,elementsRef:t,labelsRef:r,nextIndexRef:a}),[f,p,g,t,r,a]);return(0,l.jsx)(tC.Provider,{value:m,children:n})}function r6(){return new Map}function r9(){return new Set}function r8(e,n){let t=e.compareDocumentPosition(n);return t&Node.DOCUMENT_POSITION_FOLLOWING||t&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:t&Node.DOCUMENT_POSITION_PRECEDING||t&Node.DOCUMENT_POSITION_CONTAINS?1:0}let r7=C.forwardRef(function(e,n){let t,{cutout:r,...o}=e;if(r){let e=r?.getBoundingClientRect();t=`polygon(\n 0% 0%,\n 100% 0%,\n 100% 100%,\n 0% 100%,\n 0% 0%,\n ${e.left}px ${e.top}px,\n ${e.left}px ${e.bottom}px,\n ${e.right}px ${e.bottom}px,\n ${e.right}px ${e.top}px,\n ${e.left}px ${e.top}px\n )`}return(0,l.jsx)(\"div\",{ref:n,role:\"presentation\",\"data-base-ui-inert\":\"\",...o,style:{position:\"fixed\",inset:0,userSelect:\"none\",WebkitUserSelect:\"none\",clipPath:t}})}),oe=C.forwardRef(function(e,n){var t;let{anchor:r,positionMethod:o=\"absolute\",className:a,render:i,side:s,align:c,sideOffset:u=0,alignOffset:d=0,collisionBoundary:f=\"clipping-ancestors\",collisionPadding:p=5,arrowPadding:h=5,sticky:g=!1,trackAnchor:m=!0,collisionAvoidance:v=no,...b}=e,{open:y,setOpen:x,floatingRootContext:w,setPositionerElement:j,itemDomElements:k,itemLabels:A,mounted:O,modal:S,lastOpenChangeReason:E,parent:_,setHoverEnabled:P,triggerElement:z}=n0(),L=function(){let e=C.useContext(rj);if(void 0===e)throw Error(\"Base UI: <Menu.Portal> is missing.\");return e}(),T=function(e){let n=H(),t=W(),r=q();return F(()=>{if(!n)return;let e={id:n,parentId:r};return t?.addNode(e),()=>{t?.removeNode(e)}},[t,n,r]),n}(),R=q(),N=ta(!0),D=r,B=u,M=d,I=c;\"context-menu\"===_.type&&(D=_.context?.anchor??r,I=e.align??\"start\",M=e.alignOffset??2,B=e.sideOffset??-5);let U=s,V=I;\"menu\"===_.type?(U=U??\"inline-end\",V=V??\"start\"):\"menubar\"===_.type&&(U=U??\"bottom\",V=V??\"start\");let Z=\"context-menu\"===_.type,Y=r4({anchor:D,floatingRootContext:w,positionMethod:N?\"fixed\":o,mounted:O,side:U,sideOffset:B,align:V,alignOffset:M,arrowPadding:Z?0:h,collisionBoundary:f,collisionPadding:p,sticky:g,nodeId:T,keepMounted:L,trackAnchor:m,collisionAvoidance:v,shiftCrossAxis:Z}),{events:X}=W(),K=C.useMemo(()=>{let e={};return y||(e.pointerEvents=\"none\"),{role:\"presentation\",hidden:!O,style:{...Y.positionerStyles,...e}}},[y,O,Y.positionerStyles]);C.useEffect(()=>{function e(e){e.open?(e.parentNodeId===T&&P(!1),e.nodeId!==T&&e.parentNodeId===R&&x(!1,void 0,\"sibling-open\")):e.parentNodeId===T&&P(!0)}return X.on(\"openchange\",e),()=>{X.off(\"openchange\",e)}},[X,T,R,x,P]),C.useEffect(()=>{X.emit(\"openchange\",{open:y,nodeId:T,parentNodeId:R})},[X,y,T,R]);let Q=C.useMemo(()=>({open:y,side:Y.side,align:Y.align,anchorHidden:Y.anchorHidden,nested:\"menu\"===_.type}),[y,Y.side,Y.align,Y.anchorHidden,_.type]),G=C.useMemo(()=>({side:Y.side,align:Y.align,arrowRef:Y.arrowRef,arrowUncentered:Y.arrowUncentered,arrowStyles:Y.arrowStyles,floatingContext:Y.context}),[Y.side,Y.align,Y.arrowRef,Y.arrowUncentered,Y.arrowStyles,Y.context]),J=tj(\"div\",e,{state:Q,customStyleHookMapping:tV,ref:[n,j],props:{...K,...b}}),ee=O&&\"menu\"!==_.type&&(\"menubar\"!==_.type&&S&&\"trigger-hover\"!==E||\"menubar\"===_.type&&_.context.modal),en=null;return\"menubar\"===_.type?en=_.context.contentElement:void 0===_.type&&(en=z),(0,l.jsxs)(rA.Provider,{value:G,children:[ee&&(0,l.jsx)(r7,{ref:\"context-menu\"===_.type||\"nested-context-menu\"===_.type?_.context.internalBackdropRef:null,inert:(t=!y,tw>=19?t:t?\"true\":void 0),cutout:en}),(0,l.jsx)($,{id:T,children:(0,l.jsx)(r3,{elementsRef:k,labelsRef:A,children:J})})]})}),on={inert:new WeakMap,\"aria-hidden\":new WeakMap,none:new WeakMap};function ot(e){return\"inert\"===e?on.inert:\"aria-hidden\"===e?on[\"aria-hidden\"]:on.none}let or=new WeakSet,oo={},oa=0,oi=e=>e&&(e.host||oi(e.parentNode));function ol(e,n=!1,t=!1){let r=eQ(e[0]).body;return function(e,n,t,r){let o=\"data-base-ui-inert\",a=r?\"inert\":t?\"aria-hidden\":null,i=e.map(e=>{if(n.contains(e))return e;let t=oi(e);return n.contains(t)?t:null}).filter(e=>null!=e),l=new Set,s=new Set(i),c=[];oo[o]||(oo[o]=new WeakMap);let u=oo[o];return i.forEach(function e(n){!(!n||l.has(n))&&(l.add(n),n.parentNode&&e(n.parentNode))}),function e(n){!n||s.has(n)||[].forEach.call(n.children,n=>{if(\"script\"!==K(n))if(l.has(n))e(n);else{let e=a?n.getAttribute(a):null,t=null!==e&&\"false\"!==e,r=ot(a),i=(r.get(n)||0)+1,l=(u.get(n)||0)+1;r.set(n,i),u.set(n,l),c.push(n),1===i&&t&&or.add(n),1===l&&n.setAttribute(o,\"\"),!t&&a&&n.setAttribute(a,\"inert\"===a?\"\":\"true\")}})}(n),l.clear(),oa+=1,()=>{c.forEach(e=>{let n=ot(a),t=(n.get(e)||0)-1,r=(u.get(e)||0)-1;n.set(e,t),u.set(e,r),t||(!or.has(e)&&a&&e.removeAttribute(a),or.delete(e)),r||e.removeAttribute(o)}),(oa-=1)||(on.inert=new WeakMap,on[\"aria-hidden\"]=new WeakMap,on.none=new WeakMap,or=new WeakSet,oo={})}}(e.concat(Array.from(r.querySelectorAll(\"[aria-live]\"))),r,n,t)}let os=[];function oc(){return os.slice().reverse().find(e=>e.isConnected)}function ou(e,n){if(!n.current.includes(\"floating\")&&!e.getAttribute(\"role\")?.includes(\"dialog\"))return;let t=rd(),r=rc(e,t).filter(e=>{let n=e.getAttribute(\"data-tabindex\")||\"\";return ru(e,t)||e.hasAttribute(\"data-tabindex\")&&!n.startsWith(\"-\")}),o=e.getAttribute(\"tabindex\");n.current.includes(\"floating\")||0===r.length?\"0\"!==o&&e.setAttribute(\"tabindex\",\"0\"):(\"-1\"!==o||e.hasAttribute(\"data-tabindex\")&&\"-1\"!==e.getAttribute(\"data-tabindex\"))&&(e.setAttribute(\"tabindex\",\"-1\"),e.setAttribute(\"data-tabindex\",\"-1\"))}let od=C.forwardRef(function(e,n){return(0,l.jsx)(\"button\",{...e,type:\"button\",ref:n,tabIndex:-1,style:t$})});function of(e){let{context:n,children:t,disabled:r=!1,order:o=[\"content\"],guards:a=!0,initialFocus:i=0,returnFocus:s=!0,restoreFocus:c=!1,modal:u=!0,visuallyHiddenDismiss:d=!1,closeOnFocusOut:f=!0,outsideElementsInert:p=!1,getInsideElements:h=()=>[]}=e,{open:g,onOpenChange:m,events:v,dataRef:b,elements:{domReference:y,floating:x}}=n,w=T(()=>b.current.floatingContext?.nodeId),j=T(h),k=\"number\"==typeof i&&i<0,A=eJ(y)&&k,O=\"undefined\"!=typeof HTMLElement&&\"inert\"in HTMLElement.prototype,S=!O||a,E=!S||O&&p,_=eA(o),P=eA(i),z=eA(s),L=W(),R=rb(),N=C.useRef(null),D=C.useRef(null),B=C.useRef(!1),M=C.useRef(!1),I=C.useRef(-1),H=null!=R,U=e0(x),V=T((e=U)=>e?rs(e,rd()):[]),q=T(e=>{let n=V(e);return _.current.map(e=>y&&\"reference\"===e?y:U&&\"floating\"===e?U:n).filter(Boolean).flat()});C.useEffect(()=>{if(r||!u)return;function e(e){if(\"Tab\"===e.key){eY(U,eZ(eQ(U)))&&0===V().length&&!A&&eD(e);let n=q(),t=eX(e);\"reference\"===_.current[0]&&t===y&&(eD(e),e.shiftKey?nq(n[n.length-1]):nq(n[1])),\"floating\"===_.current[1]&&t===U&&e.shiftKey&&(eD(e),nq(n[0]))}}let n=eQ(U);return n.addEventListener(\"keydown\",e),()=>{n.removeEventListener(\"keydown\",e)}},[r,y,U,u,_,A,V,q]),C.useEffect(()=>{if(!r&&x)return x.addEventListener(\"focusin\",e),()=>{x.removeEventListener(\"focusin\",e)};function e(e){let n=eX(e),t=V().indexOf(n);-1!==t&&(I.current=t)}},[r,x,V]),C.useEffect(()=>{if(!r&&f&&x&&en(y))return y.addEventListener(\"focusout\",n),y.addEventListener(\"pointerdown\",e),x.addEventListener(\"focusout\",n),()=>{y.removeEventListener(\"focusout\",n),y.removeEventListener(\"pointerdown\",e),x.removeEventListener(\"focusout\",n)};function e(){M.current=!0,setTimeout(()=>{M.current=!1})}function n(e){let n=e.relatedTarget,t=e.currentTarget,r=eX(e);queueMicrotask(()=>{let o=w(),a=!(eY(y,n)||eY(x,n)||eY(n,x)||eY(R?.portalNode,n)||n?.hasAttribute(e1(\"focus-guard\"))||L&&(e6(L.nodesRef.current,o).find(e=>eY(e.context?.elements.floating,n)||eY(e.context?.elements.domReference,n))||e9(L.nodesRef.current,o).find(e=>[e.context?.elements.floating,e0(e.context?.elements.floating)].includes(n)||e.context?.elements.domReference===n)));if(t===y&&U&&ou(U,_),c&&t!==y&&!r?.isConnected&&eZ(eQ(U))===eQ(U).body){en(U)&&U.focus();let e=I.current,n=V(),t=n[e]||n[n.length-1]||U;en(t)&&t.focus()}if(b.current.insideReactTree){b.current.insideReactTree=!1;return}(A||!u)&&n&&a&&!M.current&&n!==oc()&&(B.current=!0,m(!1,e,\"focus-out\"))})}},[r,y,x,U,u,L,R,m,f,c,V,A,w,_,b]);let $=C.useRef(null),Z=C.useRef(null),Y=tb($,R?.beforeInsideRef),X=tb(Z,R?.afterInsideRef);function Q(e){return!r&&d&&u?(0,l.jsx)(od,{ref:\"start\"===e?N:D,onClick:e=>m(!1,e.nativeEvent),children:\"string\"==typeof d?d:\"Dismiss\"}):null}C.useEffect(()=>{if(r||!x)return;let e=Array.from(R?.portalNode?.querySelectorAll(`[${e1(\"portal\")}]`)||[]),n=L?e9(L.nodesRef.current,w()):[],t=L&&!u?n.map(e=>e.context?.elements.floating):[],o=[x,n.find(e=>eJ(e.context?.elements.domReference||null))?.context?.elements.domReference,...e,...t,...j(),N.current,D.current,$.current,Z.current,R?.beforeOutsideRef.current,R?.afterOutsideRef.current,_.current.includes(\"reference\")||A?y:null].filter(e=>null!=e),a=u||A?ol(o,!E,E):ol(o);return()=>{a()}},[r,y,x,u,_,R,A,S,E,L,w,j]),F(()=>{if(r||!en(U))return;let e=eZ(eQ(U));queueMicrotask(()=>{let n=q(U),t=P.current,r=(\"number\"==typeof t?n[t]:t.current)||U,o=eY(U,e);k||o||!g||nq(r,{preventScroll:r===U})})},[r,g,U,k,q,P]),F(()=>{var e;if(r||!U)return;let n=eQ(U);function t({reason:e,event:n,nested:t}){if([\"hover\",\"safe-polygon\"].includes(e)&&\"mouseleave\"===n.type&&(B.current=!0),\"outside-press\"===e)if(t)B.current=!1;else if(eB(n)||eM(n))B.current=!1;else{let e=!1;document.createElement(\"div\").focus({get preventScroll(){return e=!0,!1}}),e?B.current=!1:B.current=!0}}e=eZ(n),os=os.filter(e=>e.isConnected),e&&\"body\"!==K(e)&&(os.push(e),os.length>20&&(os=os.slice(-20))),v.on(\"openchange\",t);let o=n.createElement(\"span\");return o.setAttribute(\"tabindex\",\"-1\"),o.setAttribute(\"aria-hidden\",\"true\"),Object.assign(o.style,t$),H&&y&&y.insertAdjacentElement(\"afterend\",o),()=>{v.off(\"openchange\",t);let e=eZ(n),r=eY(x,e)||L&&e6(L.nodesRef.current,w(),!1).some(n=>eY(n.context?.elements.floating,e)),a=function(){if(\"boolean\"==typeof z.current){let e=y||oc();return e&&e.isConnected?e:o}return z.current.current||o}();queueMicrotask(()=>{let t=function(e){let n=rd();return ru(e,n)?e:rs(e,n)[0]||e}(a);z.current&&!B.current&&en(t)&&(t===e||e===n.body||r)&&t.focus({preventScroll:!0}),o.remove()})}},[r,x,U,z,b,v,L,H,y,w]),C.useEffect(()=>{queueMicrotask(()=>{B.current=!1})},[r]),F(()=>{if(!r&&R)return R.setFocusManagerState({modal:u,closeOnFocusOut:f,open:g,onOpenChange:m,domReference:y}),()=>{R.setFocusManagerState(null)}},[r,R,u,g,m,f,y]),F(()=>{!r&&U&&ou(U,_)},[r,U,_]);let G=!r&&S&&(!u||!A)&&(H||u);return(0,l.jsxs)(C.Fragment,{children:[G&&(0,l.jsx)(tZ,{\"data-type\":\"inside\",ref:Y,onFocus:e=>{if(u){let e=q();nq(\"reference\"===o[0]?e[0]:e[e.length-1])}else if(R?.preserveTabOrder&&R.portalNode)if(B.current=!1,rg(e,R.portalNode)){let e=rp(y);e?.focus()}else R.beforeOutsideRef.current?.focus()}}),!A&&Q(\"start\"),t,Q(\"end\"),G&&(0,l.jsx)(tZ,{\"data-type\":\"inside\",ref:X,onFocus:e=>{if(u)nq(q()[0]);else if(R?.preserveTabOrder&&R.portalNode)if(f&&(B.current=!0),rg(e,R.portalNode)){let e=rh(y);e?.focus()}else R.afterOutsideRef.current?.focus()}})]})}let op={...tV,...tT},oh=C.forwardRef(function(e,n){let{render:t,className:r,finalFocus:o,...a}=e,{open:i,setOpen:s,popupRef:c,transitionStatus:u,popupProps:d,mounted:f,instantType:p,onOpenChangeComplete:h,parent:g,lastOpenChangeReason:m,rootId:v}=n0(),{side:b,align:y,floatingContext:x}=function(){let e=C.useContext(rA);if(void 0===e)throw Error(\"Base UI: MenuPositionerContext is missing. MenuPositioner parts must be placed within <Menu.Positioner>.\");return e}();n5({open:i,ref:c,onComplete(){i&&h?.(!0)}});let{events:w}=W();C.useEffect(()=>{function e(e){s(!1,e.domEvent,e.reason)}return w.on(\"close\",e),()=>{w.off(\"close\",e)}},[w,s]);let j=tj(\"div\",e,{state:C.useMemo(()=>({transitionStatus:u,side:b,align:y,open:i,nested:\"menu\"===g.type,instant:p}),[u,b,y,i,g.type,p]),ref:[n,c],customStyleHookMapping:op,props:[d,\"starting\"===u?nt:nr,a,{\"data-rootownerid\":v}]}),k=void 0===g.type||\"context-menu\"===g.type;return\"menubar\"===g.type&&\"outside-press\"!==m&&(k=!0),(0,l.jsx)(of,{context:x,modal:!1,disabled:!f,returnFocus:o||k,initialFocus:\"menu\"===g.type?-1:0,restoreFocus:!0,children:j})}),og=C.createContext(void 0),om=C.forwardRef(function(e,n){let{render:t,className:r,...o}=e,[a,i]=C.useState(void 0),s=C.useMemo(()=>({setLabelId:i}),[i]),c=tj(\"div\",e,{ref:n,props:{role:\"group\",\"aria-labelledby\":a,...o}});return(0,l.jsx)(og.Provider,{value:s,children:c})});function ov(e){return H(e,\"base-ui\")}let ob=C.forwardRef(function(e,n){let{className:t,render:r,id:o,...a}=e,i=ov(o),{setLabelId:l}=function(){let e=C.useContext(og);if(void 0===e)throw Error(\"Base UI: MenuGroupRootContext is missing. Menu group parts must be used within <Menu.Group>.\");return e}();return F(()=>(l(i),()=>{l(void 0)}),[l,i]),tj(\"div\",e,{ref:n,props:{id:i,role:\"presentation\",...a}})}),oy={type:\"regular-item\"},ox=C.memo(C.forwardRef(function(e,n){let{className:t,closeOnClick:r=!0,disabled:o=!1,highlighted:a,id:i,menuEvents:l,itemProps:s,render:c,allowMouseUpTriggerRef:u,typingRef:d,nativeButton:f,...p}=e,{getItemProps:h,itemRef:g}=function(e){let{closeOnClick:n,disabled:t=!1,highlighted:r,id:o,menuEvents:a,allowMouseUpTriggerRef:i,typingRef:l,nativeButton:s,itemMetadata:c}=e,u=C.useRef(null),{getButtonProps:d,buttonRef:f}=tq({disabled:t,focusableWhenDisabled:!0,native:s}),p=C.useCallback(e=>tc({id:o,role:\"menuitem\",tabIndex:r?0:-1,onMouseEnter(){\"submenu-trigger\"===c.type&&c.setActive()},onKeyUp:e=>{\" \"===e.key&&l.current&&e.preventBaseUIHandler()},onClick:e=>{n&&a.emit(\"close\",{domEvent:e,reason:\"item-press\"})},onMouseUp:()=>{u.current&&i.current&&\"regular-item\"===c.type&&u.current.click()}},e,d),[o,r,d,l,n,a,i,c]),h=tb(u,f);return C.useMemo(()=>({getItemProps:p,itemRef:h}),[p,h])}({closeOnClick:r,disabled:o,highlighted:a,id:i,menuEvents:l,allowMouseUpTriggerRef:u,typingRef:d,nativeButton:f,itemMetadata:oy});return tj(\"div\",e,{state:C.useMemo(()=>({disabled:o,highlighted:a}),[o,a]),ref:[g,n],props:[s,p,h]})})),ow=C.forwardRef(function(e,n){let{id:t,label:r,nativeButton:o=!1,...a}=e,i=C.useRef(null),s=tE({label:r}),c=tb(n,s.ref,i),{itemProps:u,activeIndex:d,allowMouseUpTriggerRef:f,typingRef:p}=n0(),h=ov(t),g=s.index===d,{events:m}=W();return(0,l.jsx)(ox,{...a,id:h,ref:c,highlighted:g,menuEvents:m,itemProps:u,allowMouseUpTriggerRef:f,typingRef:p,nativeButton:o})});var oj=\"__next_builtin__\";function ok(e){return e.replace(new RegExp(\"^\".concat(oj)),\"\").replace(new RegExp(\"\".concat(\"@boundary\",\"$\")),\"\")}var oA=\"boundary:\";function oO(e){return e.startsWith(oA)}var oC=t(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\");function oS(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oE(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}function o_(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function oP(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return oS(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oS(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var oz=function(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];return function(e){n.forEach(function(n){\"function\"==typeof n?n(e):n&&(n.current=e)})}};function oL(e){var n,t,r=e.nodeState,o=e.boundaries,a=r.pagePath,i=r.boundaryType,s=r.setBoundaryType,c=oP((0,C.useState)(!1),2),u=c[0],d=c[1],f=oP((0,C.useState)(function(){return document.querySelector(\"nextjs-portal\").shadowRoot}),1)[0],p=(0,C.useRef)(f),h=(0,C.useRef)(null),g=(0,C.useRef)(null);(0,oC.O8)(g,h,u,function(){d(!1)},null==(n=h.current)?void 0:n.ownerDocument);var m=Object.values(o).find(function(e){return null!==e}),v=m?null==(t=m.split(\".\"))?void 0:t.pop():\"js\",b=(0,C.useMemo)(function(){return Object.fromEntries(Object.entries(o).map(function(e){var n=oP(e,2),t=n[0],r=ok((n[1]||\"\").split(\"/\").pop()||\"\".concat(t,\".\").concat(v));return[t,r]}))},[o,v]),y=(a||\"\").split(\"/\").pop()||\"\",x=ok(i?\"page.\".concat(v):y||\"page.\".concat(v)),w=[{label:b.loading,value:\"loading\",icon:(0,l.jsx)(oT,{}),disabled:!o.loading},{label:b.error,value:\"error\",icon:(0,l.jsx)(oR,{}),disabled:!o.error},{label:b[\"not-found\"],value:\"not-found\",icon:(0,l.jsx)(oN,{}),disabled:!o[\"not-found\"]}],j={label:i?\"Reset\":x,value:\"reset\",icon:(0,l.jsx)(oD,{}),disabled:null===i},k=(0,C.useCallback)(function(e){var n=new URLSearchParams({file:e.filePath,isAppRelativePath:\"1\"});fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(n.toString())).catch(console.warn)},[]),A=(0,C.useCallback)(function(e){switch(e){case\"not-found\":case\"loading\":case\"error\":s(e);break;case\"reset\":s(null);break;case\"open-editor\":a&&k({filePath:a})}},[s,a,k]),O=(0,C.useMemo)(function(){return\"layout\"!==r.type&&\"template\"!==r.type&&Object.values(o).some(function(e){return null!==e})},[r.type,o]);return(0,l.jsxs)(tv,{delay:0,modal:!1,open:u,onOpenChange:d,children:[(0,l.jsx)(tW,{className:\"segment-boundary-trigger\",\"data-nextjs-dev-overlay-segment-boundary-trigger-button\":!0,render:function(e){var n=oz(e.ref,h);return(0,l.jsx)(oM,o_(oE({},e),{ref:n}))},disabled:!O}),(0,l.jsx)(rk,{container:p,children:(0,l.jsx)(oe,{className:\"segment-boundary-dropdown-positioner\",side:\"bottom\",align:\"center\",sideOffset:6,arrowPadding:8,ref:g,children:(0,l.jsxs)(oh,{className:\"segment-boundary-dropdown\",children:[(0,l.jsxs)(om,{children:[(0,l.jsx)(ob,{className:\"segment-boundary-group-label\",children:\"Toggle Overrides\"}),w.map(function(e){return(0,l.jsxs)(ow,{className:\"segment-boundary-dropdown-item\",onClick:function(){return A(e.value)},disabled:e.disabled,children:[e.icon,e.label]},e.value)})]}),(0,l.jsx)(om,{children:(0,l.jsxs)(ow,{className:\"segment-boundary-dropdown-item\",onClick:function(){return A(j.value)},disabled:j.disabled,children:[j.icon,j.label]},j.value)})]})})})]})}function oT(){return(0,l.jsxs)(\"svg\",{width:\"20px\",height:\"20px\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,l.jsx)(\"g\",{clipPath:\"url(#clip0_2759_1866)\",children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M10 3.5C13.5899 3.5 16.5 6.41015 16.5 10C16.5 13.5899 13.5899 16.5 10 16.5C6.41015 16.5 3.5 13.5899 3.5 10C3.5 6.41015 6.41015 3.5 10 3.5ZM2 10C2 14.4183 5.58172 18 10 18C14.4183 18 18 14.4183 18 10C18 5.58172 14.4183 2 10 2C5.58172 2 2 5.58172 2 10ZM10.75 9.62402V6H9.25V9.875C9.25 10.1898 9.39858 10.486 9.65039 10.6748L11.5498 12.0996L12.1504 12.5498L13.0498 11.3496L12.4502 10.9004L10.75 9.62402Z\",fill:\"currentColor\"})}),(0,l.jsx)(\"defs\",{children:(0,l.jsx)(\"clipPath\",{id:\"clip0_2759_1866\",children:(0,l.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\",transform:\"translate(2 2)\"})})})]})}function oR(){return(0,l.jsxs)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,l.jsx)(\"g\",{clipPath:\"url(#clip0_2759_1881)\",children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.5 7.30762V12.6924L7.30762 16.5H12.6924L16.5 12.6924V7.30762L12.6924 3.5H7.30762L3.5 7.30762ZM18 12.8994L17.9951 12.998C17.9724 13.2271 17.8712 13.4423 17.707 13.6064L13.6064 17.707L13.5332 17.7734C13.3806 17.8985 13.1944 17.9757 12.998 17.9951L12.8994 18H7.10059L7.00195 17.9951C6.80562 17.9757 6.6194 17.8985 6.4668 17.7734L6.39355 17.707L2.29297 13.6064C2.12883 13.4423 2.02756 13.2271 2.00488 12.998L2 12.8994V7.10059C2 6.83539 2.10546 6.58109 2.29297 6.39355L6.39355 2.29297C6.55771 2.12883 6.77294 2.02756 7.00195 2.00488L7.10059 2H12.8994L12.998 2.00488C13.2271 2.02756 13.4423 2.12883 13.6064 2.29297L17.707 6.39355C17.8945 6.58109 18 6.83539 18 7.10059V12.8994ZM9.25 5.75H10.75L10.75 10.75H9.25L9.25 5.75ZM10 14C10.5523 14 11 13.5523 11 13C11 12.4477 10.5523 12 10 12C9.44772 12 9 12.4477 9 13C9 13.5523 9.44772 14 10 14Z\",fill:\"currentColor\"})}),(0,l.jsx)(\"defs\",{children:(0,l.jsx)(\"clipPath\",{id:\"clip0_2759_1881\",children:(0,l.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\",transform:\"translate(2 2)\"})})})]})}function oN(){return(0,l.jsx)(\"svg\",{width:\"20px\",height:\"20px\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M10.5586 2.5C11.1341 2.50004 11.6588 2.8294 11.9091 3.34766L17.8076 15.5654C18.1278 16.2292 17.6442 16.9997 16.9072 17H3.09274C2.35574 16.9997 1.8721 16.2292 2.19235 15.5654L8.09079 3.34766C8.34109 2.8294 8.86583 2.50004 9.44137 2.5H10.5586ZM3.89059 15.5H16.1093L10.5586 4H9.44137L3.89059 15.5ZM9.24997 6.75H10.75L10.75 10.75H9.24997L9.24997 6.75ZM9.99997 14C10.5523 14 11 13.5523 11 13C11 12.4477 10.5523 12 9.99997 12C9.44768 12 8.99997 12.4477 8.99997 13C8.99997 13.5523 9.44768 14 9.99997 14Z\",fill:\"currentColor\"})})}function oD(){return(0,l.jsx)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,l.jsx)(\"path\",{d:\"M9.96484 3C13.8463 3.00018 17 6.13012 17 10C17 13.8699 13.8463 16.9998 9.96484 17C7.62404 17 5.54877 15.8617 4.27051 14.1123L3.82812 13.5068L5.03906 12.6221L5.48145 13.2275C6.48815 14.6053 8.12092 15.5 9.96484 15.5C13.0259 15.4998 15.5 13.0335 15.5 10C15.5 6.96654 13.0259 4.50018 9.96484 4.5C7.42905 4.5 5.29544 6.19429 4.63867 8.5H8V10H2.75C2.33579 10 2 9.66421 2 9.25V4H3.5V7.2373C4.57781 4.74376 7.06749 3 9.96484 3Z\",fill:\"currentColor\"})})}function oB(e){return(0,l.jsx)(\"svg\",o_(oE({strokeLinejoin:\"round\",viewBox:\"0 0 16 16\"},e),{children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.7071 2.39644C8.31658 2.00592 7.68341 2.00592 7.29289 2.39644L4.46966 5.21966L3.93933 5.74999L4.99999 6.81065L5.53032 6.28032L7.99999 3.81065L10.4697 6.28032L11 6.81065L12.0607 5.74999L11.5303 5.21966L8.7071 2.39644ZM5.53032 9.71966L4.99999 9.18933L3.93933 10.25L4.46966 10.7803L7.29289 13.6035C7.68341 13.9941 8.31658 13.9941 8.7071 13.6035L11.5303 10.7803L12.0607 10.25L11 9.18933L10.4697 9.71966L7.99999 12.1893L5.53032 9.71966Z\",fill:\"currentColor\"})}))}function oM(e){return(0,l.jsx)(\"button\",o_(oE({},e),{children:(0,l.jsx)(\"span\",{className:\"segment-boundary-trigger-text\",children:(0,l.jsx)(oB,{className:\"plus-icon\"})})}))}let oI=C.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new ej,currentIdRef:{current:null},currentContextRef:{current:null}});function oH(e){let{children:n,delay:t,timeoutMs:r=0}=e,o=C.useRef(t),a=C.useRef(t),i=C.useRef(null),s=C.useRef(null),c=ek();return(0,l.jsx)(oI.Provider,{value:C.useMemo(()=>({hasProvider:!0,delayRef:o,initialDelayRef:a,currentIdRef:i,timeoutMs:r,currentContextRef:s,timeout:c}),[r,c]),children:n})}let oF=C.createContext(void 0),oU=function(e){let{delay:n,closeDelay:t,timeout:r=400}=e,o=C.useMemo(()=>({delay:n,closeDelay:t}),[n,t]);return(0,l.jsx)(oF.Provider,{value:o,children:(0,l.jsx)(oH,{delay:{open:n,close:t},timeoutMs:r,children:e.children})})},oV=C.createContext(void 0);function oq(){let e=C.useContext(oV);if(void 0===e)throw Error(\"Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>.\");return e}function oW(e){return null!=e&&null!=e.clientX}function o$(e){let{disabled:n=!1,defaultOpen:t=!1,onOpenChange:r,open:o,delay:a,closeDelay:i,hoverable:s=!0,trackCursorAxis:c=\"none\",actionsRef:u,onOpenChangeComplete:d}=e,f=a??600,p=i??0,[h,g]=C.useState(null),[m,v]=C.useState(null),[b,y]=C.useState(),x=C.useRef(null),[w,j]=n4({controlled:o,default:t,name:\"Tooltip\",state:\"open\"}),k=T(r),A=T((e,n,t)=>{let r=\"trigger-hover\"===t,o=e&&\"trigger-focus\"===t,a=!e&&(\"trigger-press\"===t||\"escape-key\"===t);function i(){k(e,n,t),j(e)}r?E.flushSync(i):i(),o||a?y(o?\"focus\":\"dismiss\"):\"trigger-hover\"===t&&y(void 0)});w&&n&&A(!1,void 0,\"disabled\");let{mounted:O,setMounted:S,transitionStatus:_}=n2(w),P=T(()=>{S(!1),d?.(!1)});n5({enabled:!u,open:w,ref:x,onComplete(){w||P()}}),C.useImperativeHandle(u,()=>({unmount:P}),[P]);let z=Y({elements:{reference:h,floating:m},open:w,onOpenChange(e,n,t){A(e,n,tr(t))}}),L=C.useContext(oF),{delayRef:R,isInstantPhase:N,hasProvider:D}=function(e,n={}){let{open:t,onOpenChange:r,floatingId:o}=e,{enabled:a=!0}=n,{currentIdRef:i,delayRef:l,timeoutMs:s,initialDelayRef:c,currentContextRef:u,hasProvider:d,timeout:f}=C.useContext(oI),[p,h]=C.useState(!1);return F(()=>{function e(){h(!1),u.current?.setIsInstantPhase(!1),i.current=null,u.current=null,l.current=c.current}if(a&&i.current&&!t&&i.current===o){if(h(!1),s)return f.start(s,e),()=>{f.clear()};e()}},[a,t,o,i,l,s,c,u,f]),F(()=>{if(!a||!t)return;let e=u.current,n=i.current;u.current={onOpenChange:r,setIsInstantPhase:h},i.current=o,l.current={open:0,close:e4(c.current,\"close\")},null!==n&&n!==o?(f.clear(),h(!0),e?.setIsInstantPhase(!0),e?.onOpenChange(!1)):(h(!1),e?.setIsInstantPhase(!1))},[a,t,o,r,i,l,s,c,u,f]),F(()=>()=>{u.current=null},[u]),C.useMemo(()=>({hasProvider:d,delayRef:l,isInstantPhase:p}),[d,l,p])}(z),B=N?\"delay\":b,M=e3(z,{enabled:!n,mouseOnly:!0,move:!1,handleClose:s&&\"both\"!==c?e7():null,restMs(){let e=L?.delay,n=\"object\"==typeof R.current?R.current.open:void 0,t=f;return D&&(t=0!==n?a??e??f:0),t},delay(){let e=\"object\"==typeof R.current?R.current.close:void 0,n=p;return null==i&&D&&(n=e),{close:n}}}),I=nn(z,{enabled:!n}),{getReferenceProps:H,getFloatingProps:U}=nK([M,I,nf(z,{enabled:!n,referencePress:!0}),function(e,n={}){let{open:t,dataRef:r,elements:{floating:o,domReference:a},refs:i}=e,{enabled:l=!0,axis:s=\"both\",x:c=null,y:u=null}=n,d=C.useRef(!1),f=C.useRef(null),[p,h]=C.useState(),[g,m]=C.useState([]),v=T((e,n)=>{if(!d.current&&(!r.current.openEvent||oW(r.current.openEvent))){var t;let o,l,c;i.setPositionReference((t={x:e,y:n,axis:s,dataRef:r,pointerType:p},o=null,l=null,c=!1,{contextElement:a||void 0,getBoundingClientRect(){let e=a?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},n=\"x\"===t.axis||\"both\"===t.axis,r=\"y\"===t.axis||\"both\"===t.axis,i=[\"mouseenter\",\"mousemove\"].includes(t.dataRef.current.openEvent?.type||\"\")&&\"touch\"!==t.pointerType,s=e.width,u=e.height,d=e.x,f=e.y;return null==o&&t.x&&n&&(o=e.x-t.x),null==l&&t.y&&r&&(l=e.y-t.y),d-=o||0,f-=l||0,s=0,u=0,!c||i?(s=\"y\"===t.axis?e.width:0,u=\"x\"===t.axis?e.height:0,d=n&&null!=t.x?t.x:d,f=r&&null!=t.y?t.y:f):c&&!i&&(u=\"x\"===t.axis?e.height:u,s=\"y\"===t.axis?e.width:s),c=!0,{width:s,height:u,x:d,y:f,top:f,right:d+s,bottom:f+u,left:d}}}))}}),b=T(e=>{null==c&&null==u&&(t?f.current||m([]):v(e.clientX,e.clientY))}),y=eI(p)?o:t,x=C.useCallback(()=>{if(!y||!l||null!=c||null!=u)return;let e=Q(o);function n(t){eY(o,eX(t))?(e.removeEventListener(\"mousemove\",n),f.current=null):v(t.clientX,t.clientY)}if(!r.current.openEvent||oW(r.current.openEvent)){e.addEventListener(\"mousemove\",n);let t=()=>{e.removeEventListener(\"mousemove\",n),f.current=null};return f.current=t,t}i.setPositionReference(a)},[y,l,c,u,o,r,i,a,v]);C.useEffect(()=>x(),[x,g]),C.useEffect(()=>{l&&!o&&(d.current=!1)},[l,o]),C.useEffect(()=>{!l&&t&&(d.current=!0)},[l,t]),F(()=>{l&&(null!=c||null!=u)&&(d.current=!1,v(c,u))},[l,c,u,v]);let w=C.useMemo(()=>{function e(e){h(e.pointerType)}return{onPointerDown:e,onPointerEnter:e,onMouseMove:b,onMouseEnter:b}},[b]);return C.useMemo(()=>l?{reference:w}:{},[l,w])}(z,{enabled:!n&&\"none\"!==c,axis:\"none\"===c?void 0:c})]),V=C.useMemo(()=>({open:w,setOpen:A,mounted:O,setMounted:S,setTriggerElement:g,positionerElement:m,setPositionerElement:v,popupRef:x,triggerProps:H(),popupProps:U(),floatingRootContext:z,instantType:B,transitionStatus:_,onOpenChangeComplete:d}),[w,A,O,S,g,m,v,x,H,U,z,B,_,d]),q=C.useMemo(()=>({...V,delay:f,closeDelay:p,trackCursorAxis:c,hoverable:s}),[V,f,p,c,s]);return(0,l.jsx)(oV.Provider,{value:q,children:e.children})}let oZ=C.forwardRef(function(e,n){let{className:t,render:r,...o}=e,{open:a,setTriggerElement:i,triggerProps:l}=oq();return tj(\"button\",e,{state:C.useMemo(()=>({open:a}),[a]),ref:[n,i],props:[l,o],customStyleHookMapping:tF})}),oY=C.createContext(void 0);function oX(e){let n=rx({root:e.root});return n&&E.createPortal(e.children,n)}function oK(e){let{children:n,keepMounted:t=!1,container:r}=e,{mounted:o}=oq();return o||t?(0,l.jsx)(oY.Provider,{value:t,children:(0,l.jsx)(oX,{root:r,children:n})}):null}let oQ=C.createContext(void 0);function oG(){let e=C.useContext(oQ);if(void 0===e)throw Error(\"Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>.\");return e}let oJ=C.forwardRef(function(e,n){let{render:t,className:r,anchor:o,positionMethod:a=\"absolute\",side:i=\"top\",align:s=\"center\",sideOffset:c=0,alignOffset:u=0,collisionBoundary:d=\"clipping-ancestors\",collisionPadding:f=5,arrowPadding:p=5,sticky:h=!1,trackAnchor:g=!0,collisionAvoidance:m=na,...v}=e,{open:b,setPositionerElement:y,mounted:x,floatingRootContext:w,trackCursorAxis:j,hoverable:k}=oq(),A=r4({anchor:o,positionMethod:a,floatingRootContext:w,mounted:x,side:i,sideOffset:c,align:s,alignOffset:u,collisionBoundary:d,collisionPadding:f,sticky:h,arrowPadding:p,trackAnchor:g,keepMounted:function(){let e=C.useContext(oY);if(void 0===e)throw Error(\"Base UI: <Tooltip.Portal> is missing.\");return e}(),collisionAvoidance:m}),O=C.useMemo(()=>{let e={};return b&&\"both\"!==j&&k||(e.pointerEvents=\"none\"),{role:\"presentation\",hidden:!x,style:{...A.positionerStyles,...e}}},[b,j,k,x,A.positionerStyles]),S=C.useMemo(()=>({props:O,...A}),[O,A]),E=C.useMemo(()=>({open:b,side:S.side,align:S.align,anchorHidden:S.anchorHidden}),[b,S.side,S.align,S.anchorHidden]),_=C.useMemo(()=>({...E,arrowRef:S.arrowRef,arrowStyles:S.arrowStyles,arrowUncentered:S.arrowUncentered}),[E,S.arrowRef,S.arrowStyles,S.arrowUncentered]),P=tj(\"div\",e,{state:E,props:[S.props,v],ref:[n,y],customStyleHookMapping:tV});return(0,l.jsx)(oQ.Provider,{value:_,children:P})}),o0={...tV,...tT},o1=C.forwardRef(function(e,n){let{className:t,render:r,...o}=e,{open:a,instantType:i,transitionStatus:l,popupProps:s,popupRef:c,onOpenChangeComplete:u}=oq(),{side:d,align:f}=oG();return n5({open:a,ref:c,onComplete(){a&&u?.(!0)}}),tj(\"div\",e,{state:C.useMemo(()=>({open:a,side:d,align:f,instant:i,transitionStatus:l}),[a,d,f,i,l]),ref:[n,c],props:[s,\"starting\"===l?nt:nr,o],customStyleHookMapping:o0})}),o2=C.forwardRef(function(e,n){let{className:t,render:r,...o}=e,{open:a,arrowRef:i,side:l,align:s,arrowUncentered:c,arrowStyles:u}=oG();return tj(\"div\",e,{state:C.useMemo(()=>({open:a,side:l,align:s,uncentered:c}),[a,l,s,c]),ref:[n,i],props:[{style:u,\"aria-hidden\":!0},o],customStyleHookMapping:tV})});var o4=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/components/tooltip.css\"),o5={};function o3(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}o5.styleTagTransform=y(),o5.setAttributes=g(),o5.insert=p(),o5.domAPI=d(),o5.insertStyleElement=v(),c()(o4.Z,o5),o4.Z&&o4.Z.locals&&o4.Z.locals;var o6=(0,C.forwardRef)(function(e,n){var t,r=e.className,o=e.children,a=e.title,i=e.direction,s=void 0===i?\"top\":i,c=e.arrowSize,u=void 0===c?6:c,d=e.offset,f=e.bgcolor,p=void 0===f?\"#000\":f,h=e.color,g=(t=(0,C.useState)(function(){return document.querySelector(\"nextjs-portal\").shadowRoot}),function(e){if(Array.isArray(e))return e}(t)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,1)||function(e,n){if(e){if(\"string\"==typeof e)return o3(e,1);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o3(e,n)}}(t,1)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())[0],m=(0,C.useRef)(g);return a?(0,l.jsx)(oU,{children:(0,l.jsxs)(o$,{delay:400,children:[(0,l.jsx)(oZ,{ref:n,render:function(e){var n,t;return(0,l.jsx)(\"span\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}({},e),t=t={children:o},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}}),(0,l.jsx)(oK,{container:m,children:(0,l.jsx)(oJ,{side:s,sideOffset:(void 0===d?8:d)+u,className:\"tooltip-positioner\",style:{\"--anchor-width\":\"\".concat(u,\"px\"),\"--anchor-height\":\"\".concat(u,\"px\")},children:(0,l.jsxs)(o1,{className:(0,k.cx)(\"tooltip\",r),style:{backgroundColor:p,color:void 0===h?\"#fff\":h,\"--tooltip-bg-color\":p,\"--arrow-size\":\"\".concat(u,\"px\")},children:[a,(0,l.jsx)(o2,{className:(0,k.cx)(\"tooltip-arrow\",\"tooltip-arrow--\".concat(s)),style:{\"--arrow-size\":\"\".concat(u,\"px\"),\"--tooltip-bg-color\":p}})]})})})]})}):o});function o9(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}function o8(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}var o7=function(e){var n,t;return!!(null==(n=e.value)?void 0:n.type)&&!!(null==(t=e.value)?void 0:t.pagePath)};function ae(e){var n=e.page;return(0,l.jsxs)(\"div\",{className:\"segment-explorer-page-route-bar\",children:[(0,l.jsx)(aa,{}),(0,l.jsx)(\"span\",{className:\"segment-explorer-page-route-bar-path\",children:n})]})}function an(e){var n=e.activeBoundariesCount,t=e.onGlobalReset,r=n>0;return(0,l.jsx)(\"div\",{className:\"segment-explorer-footer\",children:(0,l.jsxs)(\"button\",{className:\"segment-explorer-footer-button \".concat(r?\"\":\"segment-explorer-footer-button--disabled\"),onClick:r?t:void 0,disabled:!r,type:\"button\",children:[(0,l.jsx)(\"span\",{className:\"segment-explorer-footer-text\",children:\"Clear Segment Overrides\"}),r&&(0,l.jsx)(\"span\",{className:\"segment-explorer-footer-badge\",children:n})]})})}function at(e){var n=e.isAppRouter,t=e.page,r=(0,j.i8)(),o=(0,C.useMemo)(function(){return n?function e(n){var t,r=0;return(null==(t=n.value)?void 0:t.setBoundaryType)&&null!==n.value.boundaryType&&!oO(n.value.type)&&r++,Object.values(n.children).forEach(function(n){n&&(r+=e(n))}),r}(r):0},[r,n]),a=(0,C.useCallback)(function(){n&&function e(n){var t;(null==(t=n.value)?void 0:t.setBoundaryType)&&n.value.setBoundaryType(null),Object.values(n.children).forEach(function(n){n&&e(n)})}(r)},[r,n]);return(0,l.jsxs)(\"div\",{\"data-nextjs-devtools-panel-segments-explorer\":!0,children:[n&&(0,l.jsx)(ae,{page:t}),(0,l.jsx)(\"div\",{className:\"segment-explorer-content\",\"data-nextjs-devtool-segment-explorer\":!0,children:n?(0,l.jsx)(ar,{node:r,level:0,segment:\"\"}):(0,l.jsx)(\"p\",{children:\"Route Info currently is only available for the App Router.\"})}),n&&(0,l.jsx)(an,{activeBoundariesCount:o,onGlobalReset:a})]})}function ar(e){var n=e.segment,t=e.node,r=e.level,o=Object.keys(t.children).sort(function(e,n){var r=e.includes(\".\"),o=n.includes(\".\");if(r&&!o)return -1;if(!r&&o)return 1;if(r&&o){var a,i,l,s,c,u,d,f,p=null==(i=t.children[e])||null==(a=i.value)?void 0:a.type,h=null==(s=t.children[n])||null==(l=s.value)?void 0:l.type,g=function(e){return e?\"layout\"===e?1:\"template\"===e?2:\"page\"===e?3:oO(e)?4:5:5},m=g(p),v=g(h);if(m!==v)return m-v;var b=(null==(u=t.children[e])||null==(c=u.value)?void 0:c.pagePath)||\"\",y=(null==(f=t.children[n])||null==(d=f.value)?void 0:d.pagePath)||\"\";return b.localeCompare(y)}return e.localeCompare(n)}),a=0!==r||n?n:\"app\",i=[],s=[],c=!0,u=!1,d=void 0;try{for(var f,p=o[Symbol.iterator]();!(c=(f=p.next()).done);c=!0){var h=f.value,g=t.children[h];if(g){if(o7(g)){s.push(h);continue}i.push(h)}}}catch(e){u=!0,d=e}finally{try{c||null==p.return||p.return()}finally{if(u)throw d}}for(var m=null,v=o.length-1;v>=0;v--){var b=t.children[o[v]];if(b&&b.value){var y=oO(b.value.type);if(!m&&!y){m=b;break}}}var x=null,w=!0,j=!1,A=void 0;try{for(var O,C=o[Symbol.iterator]();!(w=(O=C.next()).done);w=!0){var S=O.value,E=t.children[S];if(E&&E.value&&oO(E.value.type)){x=E;break}}}catch(e){j=!0,A=e}finally{try{w||null==C.return||C.return()}finally{if(j)throw A}}m=m||x;var _=s.length>0,P={\"not-found\":null,loading:null,error:null};return s.forEach(function(e){var n=t.children[e];if(n&&n.value&&oO(n.value.type)){var r=n.value.type.replace(oA,\"\");r in P&&(P[r]=n.value.pagePath||null)}}),(0,l.jsxs)(l.Fragment,{children:[_&&(0,l.jsx)(\"div\",{className:\"segment-explorer-item\",\"data-nextjs-devtool-segment-explorer-segment\":n+\"-\"+r,children:(0,l.jsx)(\"div\",{className:\"segment-explorer-item-row\",style:o9({},{paddingLeft:\"\".concat((r+1)*8,\"px\")}),children:(0,l.jsxs)(\"div\",{className:\"segment-explorer-filename\",children:[a&&(0,l.jsxs)(\"span\",{className:\"segment-explorer-filename--path\",children:[a,(0,l.jsx)(\"small\",{children:\"/\"})]}),s.length>0&&(0,l.jsx)(\"span\",{className:\"segment-explorer-files\",children:s.map(function(e){var n=t.children[e];if(!n||!n.value||oO(n.value.type))return null;var r=n.value.pagePath,o=r.split(\"/\").pop()||\"\",a=r.startsWith(oj),i=ok(o),s=a?\"The default Next.js \".concat(n.value.type,\" is being shown. You can customize this page by adding your own \").concat(i,\" file to the app/ directory.\"):null,c=null!==n.value.boundaryType;return(0,l.jsx)(o6,{className:\"segment-explorer-file-label-tooltip--\"+(a?\"lg\":\"sm\"),direction:a?\"right\":\"top\",title:s,offset:12,bgcolor:\"var(--color-gray-1000)\",color:\"var(--color-gray-100)\",children:(0,l.jsxs)(\"span\",{className:(0,k.cx)(\"segment-explorer-file-label\",\"segment-explorer-file-label--\".concat(n.value.type),a&&\"segment-explorer-file-label--builtin\",c&&\"segment-explorer-file-label--overridden\"),onClick:function(){var e;e=new URLSearchParams({file:{filePath:r}.filePath,isAppRelativePath:\"1\"}),fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(e.toString()))},children:[(0,l.jsx)(\"span\",{className:\"segment-explorer-file-label-text\",children:i}),a?(0,l.jsx)(ao,{}):(0,l.jsx)(ai,{className:\"code-icon\"})]})},e)})}),m&&m.value&&(0,l.jsx)(oL,{nodeState:m.value,boundaries:P})]})})}),i.map(function(e){var o=t.children[e];if(!o)return null;var a=_?e:n+\" / \"+e;return(0,l.jsx)(ar,{segment:a,node:o,level:_?r+1:r},e)})]})}function ao(e){return(0,l.jsxs)(\"svg\",o8(o9({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[(0,l.jsx)(\"path\",{d:\"M14 8C14 11.3137 11.3137 14 8 14C4.68629 14 2 11.3137 2 8C2 4.68629 4.68629 2 8 2C11.3137 2 14 4.68629 14 8Z\",fill:\"var(--color-gray-400)\"}),(0,l.jsx)(\"path\",{d:\"M7.75 7C8.30228 7.00001 8.75 7.44772 8.75 8V11.25H7.25V8.5H6.25V7H7.75ZM8 4C8.55228 4 9 4.44772 9 5C9 5.55228 8.55228 6 8 6C7.44772 6 7 5.55228 7 5C7 4.44772 7.44772 4 8 4Z\",fill:\"var(--color-gray-900)\"})]}))}function aa(){return(0,l.jsx)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"var(--color-gray-600)\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,l.jsx)(\"path\",{d:\"M4.5 11.25C4.5 11.3881 4.61193 11.5 4.75 11.5H14.4395L11.9395 9L13 7.93945L16.7803 11.7197L16.832 11.7764C17.0723 12.0709 17.0549 12.5057 16.7803 12.7803L13 16.5605L11.9395 15.5L14.4395 13H4.75C3.7835 13 3 12.2165 3 11.25V4.25H4.5V11.25Z\"})})}function ai(e){return(0,l.jsx)(\"svg\",o8(o9({width:\"12\",height:\"12\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",fill:\"currentColor\"},e),{children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M7.22763 14.1819L10.2276 2.18193L10.4095 1.45432L8.95432 1.09052L8.77242 1.81812L5.77242 13.8181L5.59051 14.5457L7.04573 14.9095L7.22763 14.1819ZM3.75002 12.0607L3.21969 11.5304L0.39647 8.70713C0.00594559 8.31661 0.00594559 7.68344 0.39647 7.29292L3.21969 4.46969L3.75002 3.93936L4.81068 5.00002L4.28035 5.53035L1.81068 8.00003L4.28035 10.4697L4.81068 11L3.75002 12.0607ZM12.25 12.0607L12.7804 11.5304L15.6036 8.70713C15.9941 8.31661 15.9941 7.68344 15.6036 7.29292L12.7804 4.46969L12.25 3.93936L11.1894 5.00002L11.7197 5.53035L14.1894 8.00003L11.7197 10.4697L11.1894 11L12.25 12.0607Z\",fill:\"currentColor\"})}))}},\"./src/next-devtools/dev-overlay/hooks/use-delayed-render.ts\":function(e,n,t){\"use strict\";t.d(n,{N:()=>i});var r=t(\"./dist/compiled/react/index.js\");function o(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function a(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return o(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=a((0,r.useState)(e),2),o=t[0],i=t[1],l=a((0,r.useState)(!1),2),s=l[0],c=l[1],u=n.enterDelay,d=void 0===u?1:u,f=n.exitDelay,p=void 0===f?0:f;return(0,r.useEffect)(function(){var n,t;return e?(i(!0),d<=0?c(!0):n=setTimeout(function(){c(!0)},d)):(c(!1),p<=0?i(!1):t=setTimeout(function(){i(!1)},p)),function(){clearTimeout(n),clearTimeout(t)}},[e,d,p]),{mounted:o,rendered:s}}},\"./src/next-devtools/dev-overlay/segment-explorer-trie.ts\":function(e,n,t){\"use strict\";t.d(n,{_c:()=>d,i8:()=>f,th:()=>u});var r=t(\"./dist/compiled/react/index.js\");function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}var a=new Set,i=function(e){return a.add(e),function(){return a.delete(e)}},l=function(){return c.getRoot()},s=function(){return c.getRoot()},c=function(e){var n=e.getCharacters,t=void 0===n?function(e){return[e]}:n,r=e.compare,i=void 0===r?function(e,n){return e===n}:r,l={value:void 0,children:{}};function s(){var e=!0,n=!1,t=void 0;try{for(var r,o=a[Symbol.iterator]();!(e=(r=o.next()).done);e=!0)(0,r.value)()}catch(e){n=!0,t=e}finally{try{e||null==o.return||o.return()}finally{if(n)throw t}}}return{insert:function(e){var n=l,r=t(e),a=!0,i=!1,c=void 0;try{for(var u,d=r[Symbol.iterator]();!(a=(u=d.next()).done);a=!0){var f=u.value;n.children[f]||(n.children[f]={value:void 0,children:{}}),n=n.children[f]}}catch(e){i=!0,c=e}finally{try{a||null==d.return||d.return()}finally{if(i)throw c}}n.value=e,l=o({},l),s()},remove:function(e){var n=l,r=t(e),a=[],c=!0,u=!0,d=!1,f=void 0;try{for(var p,h=r[Symbol.iterator]();!(u=(p=h.next()).done);u=!0){var g=p.value;if(!n.children[g]){c=!1;break}a.push(n),n=n.children[g]}}catch(e){d=!0,f=e}finally{try{u||null==h.return||h.return()}finally{if(d)throw f}}if(c&&i(n.value,e)){n.value=void 0;for(var m=a.length-1;m>=0;m--){var v=a[m],b=r[m];0===Object.keys(v.children[b].children).length&&delete v.children[b]}l=o({},l),s()}},getRoot:function(){return l}}}({compare:function(e,n){return!!e&&!!n&&e.pagePath===n.pagePath&&e.type===n.type&&e.boundaryType===n.boundaryType},getCharacters:function(e){return e.pagePath.split(\"/\")}}),u=c.insert,d=c.remove;function f(){return(0,r.useSyncExternalStore)(i,l,s)}},\"./src/next-devtools/dev-overlay/utils/cx.ts\":function(e,n,t){\"use strict\";function r(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];return n.filter(Boolean).join(\" \")}t.d(n,{cx:()=>r})}},__webpack_module_cache__={};function __nested_webpack_require_381207__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={id:e,exports:{}};return __webpack_modules__[e](t,t.exports,__nested_webpack_require_381207__),t.exports}__nested_webpack_require_381207__.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return __nested_webpack_require_381207__.d(n,{a:n}),n},(()=>{var e,n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;__nested_webpack_require_381207__.t=function(t,r){if(1&r&&(t=this(t)),8&r||\"object\"==typeof t&&t&&(4&r&&t.__esModule||16&r&&\"function\"==typeof t.then))return t;var o=Object.create(null);__nested_webpack_require_381207__.r(o);var a={};e=e||[null,n({}),n([]),n(n)];for(var i=2&r&&t;\"object\"==typeof i&&!~e.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach(e=>{a[e]=()=>t[e]});return a.default=()=>t,__nested_webpack_require_381207__.d(o,a),o}})(),__nested_webpack_require_381207__.d=(e,n)=>{for(var t in n)__nested_webpack_require_381207__.o(n,t)&&!__nested_webpack_require_381207__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},__nested_webpack_require_381207__.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),__nested_webpack_require_381207__.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},__nested_webpack_require_381207__.nc=void 0;var __nested_webpack_exports__={};for(var __webpack_i__ in(()=>{\"use strict\";__nested_webpack_require_381207__.r(__nested_webpack_exports__),__nested_webpack_require_381207__.d(__nested_webpack_exports__,{dispatcher:()=>aH,renderAppDevOverlay:()=>aW,renderPagesDevOverlay:()=>a$});var e,n,t,r=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\"),o=__nested_webpack_require_381207__.n(r),a=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\"),i=__nested_webpack_require_381207__.n(a),l=__nested_webpack_require_381207__(\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\"),s=__nested_webpack_require_381207__.n(l),c=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\"),u=__nested_webpack_require_381207__.n(c),d=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\"),f=__nested_webpack_require_381207__.n(d),p=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\"),h=__nested_webpack_require_381207__.n(p),g=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/global.css\"),m={};m.styleTagTransform=h(),m.setAttributes=u(),m.insert=s(),m.domAPI=i(),m.insertStyleElement=f(),o()(g.Z,m),g.Z&&g.Z.locals&&g.Z.locals;var v=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/toast/style.css\"),b={};b.styleTagTransform=h(),b.setAttributes=u(),b.insert=s(),b.domAPI=i(),b.insertStyleElement=f(),o()(v.Z,b),v.Z&&v.Z.locals&&v.Z.locals;var y=__nested_webpack_require_381207__(\"./dist/compiled/react/jsx-runtime.js\"),x=__nested_webpack_require_381207__(\"./dist/compiled/react/index.js\");function w(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var j=__nested_webpack_require_381207__(\"./dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\"),k=/\\/_next(\\/static\\/.+)/,A=Symbol.for(\"next.console.error.digest\");function O(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function C(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}var S={Small:16/14,Medium:1,Large:16/18},E=\"static-indicator\",_=\"build-ok\",P=\"build-error\",z=\"before-fast-refresh\",L=\"fast-refresh\",T=\"version-info\",R=\"unhandled-error\",N=\"unhandled-rejection\",D=\"debug-info\",B=\"dev-indicator\",M=\"error-overlay-open\",I=\"error-overlay-close\",H=\"error-overlay-toggle\",F=\"building-indicator-show\",U=\"building-indicator-hide\",V=\"rendering-indicator-show\",q=\"rendering-indicator-hide\",W=\"devtools-panel-open\",$=\"devtools-panel-close\",Z=\"devtools-panel-toggle\",Y=\"devtools-position\",X=\"devtools-scale\",K=\"restart-server-button\",Q=\"__nextjs-dev-tools-theme\",G=\"__nextjs-dev-tools-position\",J=\"__nextjs-dev-tools-scale\",ee=\"segment-explorer-update-route-state\",en=/\\s+(at Object\\.react_stack_bottom_frame.*)|(react_stack_bottom_frame@.*)|(at react-stack-bottom-frame.*)|(react-stack-bottom-frame@.*)/;function et(e){return null==e?void 0:e.split(en)[0]}var er=(null==(e=true)?void 0:e.toString())===\"false\",eo={nextId:1,buildError:null,errors:[],notFound:!1,renderingIndicator:!1,staticIndicator:!1,showIndicator:!1,disableDevIndicator:!1,buildingIndicator:!1,refreshState:{type:\"idle\"},versionInfo:{installed:\"0.0.0\",staleness:\"unknown\"},debugInfo:{devtoolsFrontendUrl:void 0},isDevToolsPanelOpen:!1,showRestartServerButton:!1,devToolsPosition:\"bottom-left\",scale:S.Medium,page:\"\"},ea=__nested_webpack_require_381207__(\"./dist/compiled/react-dom/client.js\");function ei(e){for(var n=arguments.length,t=Array(n>1?n-1:0),r=1;r<n;r++)t[r-1]=arguments[r];var o=e.length-1;return(e.slice(0,o).reduce(function(e,n,r){return e+n+t[r]},\"\")+e[o]).replace(/\\/\\*[\\s\\S]*?\\*\\//g,\"\").replace(/\\s+/g,\" \").replace(/\\s*([:;,{}])\\s*/g,\"$1\").replace(/;+}/g,\"}\").trim()}function el(){var e,n,t=(e=[\"\\n /* latin-ext */\\n @font-face {\\n font-family: '__nextjs-Geist';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-latin-ext.woff2) format('woff2');\\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,\\n U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,\\n U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,\\n U+A720-A7FF;\\n }\\n /* latin-ext */\\n @font-face {\\n font-family: '__nextjs-Geist Mono';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-mono-latin-ext.woff2) format('woff2');\\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,\\n U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,\\n U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,\\n U+A720-A7FF;\\n }\\n /* latin */\\n @font-face {\\n font-family: '__nextjs-Geist';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-latin.woff2) format('woff2');\\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,\\n U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,\\n U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n }\\n /* latin */\\n @font-face {\\n font-family: '__nextjs-Geist Mono';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-mono-latin.woff2) format('woff2');\\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,\\n U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,\\n U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return el=function(){return t},t}var es=function(){return(0,x.useInsertionEffect)(function(){var e=document.createElement(\"style\");return e.textContent=ei(el()),document.head.appendChild(e),function(){document.head.removeChild(e)}},[]),null},ec=__nested_webpack_require_381207__(\"./dist/compiled/react-dom/index.js\");function eu(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ed(e){var n,t,r=e.children,o=x.useRef(null),a=x.useRef(null),i=(n=x.useState(),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return eu(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return eu(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())[1];return x.useEffect(function(){if(o.current=document.querySelector(\"nextjs-portal\"),\"undefined\"!=typeof localStorage){var e=localStorage.getItem(Q);\"dark\"===e?(o.current.classList.add(\"dark\"),o.current.classList.remove(\"light\")):\"light\"===e&&(o.current.classList.remove(\"dark\"),o.current.classList.add(\"light\"))}null===o.current.shadowRoot&&(a.current=o.current.attachShadow({mode:\"open\"})),i({})},[]),a.current?(0,ec.createPortal)(r,a.current):null}function ef(){var e,n,t=(e=[\"\\n :host {\\n /* \\n * Although the style applied to the shadow host is isolated,\\n * the element that attached the shadow host (i.e. \\\"nextjs-portal\\\")\\n * is still affected by the parent's style (e.g. \\\"body\\\"). This may\\n * occur style conflicts like \\\"display: flex\\\", with other children\\n * elements therefore give the shadow host an absolute position.\\n */\\n position: absolute;\\n\\n --color-font: #757575;\\n --color-backdrop: rgba(250, 250, 250, 0.8);\\n --color-border-shadow: rgba(0, 0, 0, 0.145);\\n\\n --color-title-color: #1f1f1f;\\n --color-stack-notes: #777;\\n\\n --color-accents-1: #808080;\\n --color-accents-2: #222222;\\n --color-accents-3: #404040;\\n\\n --font-stack-monospace: '__nextjs-Geist Mono', 'Geist Mono',\\n 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier,\\n monospace;\\n --font-stack-sans: '__nextjs-Geist', 'Geist', -apple-system,\\n 'Source Sans Pro', sans-serif;\\n\\n font-family: var(--font-stack-sans);\\n font-variant-ligatures: none;\\n\\n /* TODO: Remove replaced ones. */\\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1),\\n 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1),\\n 0 2px 4px -2px rgb(0 0 0 / 0.1);\\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),\\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1),\\n 0 8px 10px -6px rgb(0 0 0 / 0.1);\\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\\n --shadow-none: 0 0 #0000;\\n\\n --shadow-small: 0px 2px 2px rgba(0, 0, 0, 0.04);\\n --shadow-menu: 0px 1px 1px rgba(0, 0, 0, 0.02),\\n 0px 4px 8px -4px rgba(0, 0, 0, 0.04),\\n 0px 16px 24px -8px rgba(0, 0, 0, 0.06);\\n\\n --focus-color: var(--color-blue-800);\\n --focus-ring: 2px solid var(--focus-color);\\n\\n --timing-swift: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n --timing-overlay: cubic-bezier(0.175, 0.885, 0.32, 1.1);\\n /* prettier-ignore */\\n --timing-bounce: linear(0 0%, 0.005871 1%, 0.022058 2%, 0.046612 3%, 0.077823 4%, 0.114199 5%, 0.154441 6%, 0.197431 7.000000000000001%, 0.242208 8%, 0.287959 9%, 0.333995 10%, 0.379743 11%, 0.424732 12%, 0.46858 13%, 0.510982 14.000000000000002%, 0.551702 15%, 0.590564 16%, 0.627445 17%, 0.662261 18%, 0.694971 19%, 0.725561 20%, 0.754047 21%, 0.780462 22%, 0.804861 23%, 0.82731 24%, 0.847888 25%, 0.866679 26%, 0.883775 27%, 0.899272 28.000000000000004%, 0.913267 28.999999999999996%, 0.925856 30%, 0.937137 31%, 0.947205 32%, 0.956153 33%, 0.96407 34%, 0.971043 35%, 0.977153 36%, 0.982479 37%, 0.987094 38%, 0.991066 39%, 0.994462 40%, 0.997339 41%, 0.999755 42%, 1.001761 43%, 1.003404 44%, 1.004727 45%, 1.00577 46%, 1.006569 47%, 1.007157 48%, 1.007563 49%, 1.007813 50%, 1.007931 51%, 1.007939 52%, 1.007855 53%, 1.007697 54%, 1.007477 55.00000000000001%, 1.00721 56.00000000000001%, 1.006907 56.99999999999999%, 1.006576 57.99999999999999%, 1.006228 59%, 1.005868 60%, 1.005503 61%, 1.005137 62%, 1.004776 63%, 1.004422 64%, 1.004078 65%, 1.003746 66%, 1.003429 67%, 1.003127 68%, 1.00284 69%, 1.002571 70%, 1.002318 71%, 1.002082 72%, 1.001863 73%, 1.00166 74%, 1.001473 75%, 1.001301 76%, 1.001143 77%, 1.001 78%, 1.000869 79%, 1.000752 80%, 1.000645 81%, 1.00055 82%, 1.000464 83%, 1.000388 84%, 1.000321 85%, 1.000261 86%, 1.000209 87%, 1.000163 88%, 1.000123 89%, 1.000088 90%);\\n\\n --rounded-none: 0px;\\n --rounded-sm: 2px;\\n --rounded-md: 4px;\\n --rounded-md-2: 6px;\\n --rounded-lg: 8px;\\n --rounded-xl: 12px;\\n --rounded-2xl: 16px;\\n --rounded-3xl: 24px;\\n --rounded-4xl: 32px;\\n --rounded-full: 9999px;\\n\\n /* \\n This value gets set from the Dev Tools preferences,\\n and we use the following --size-* variables to \\n scale the relevant elements.\\n\\n The reason why we don't rely on rem values is because\\n if an app sets their root font size to something tiny, \\n it feels unexpected to have the app root size leak \\n into a Next.js surface.\\n\\n https://github.com/vercel/next.js/discussions/76812\\n */\\n --nextjs-dev-tools-scale: \",\";\\n --size-1: calc(1px / var(--nextjs-dev-tools-scale));\\n --size-2: calc(2px / var(--nextjs-dev-tools-scale));\\n --size-3: calc(3px / var(--nextjs-dev-tools-scale));\\n --size-4: calc(4px / var(--nextjs-dev-tools-scale));\\n --size-5: calc(5px / var(--nextjs-dev-tools-scale));\\n --size-6: calc(6px / var(--nextjs-dev-tools-scale));\\n --size-7: calc(7px / var(--nextjs-dev-tools-scale));\\n --size-8: calc(8px / var(--nextjs-dev-tools-scale));\\n --size-9: calc(9px / var(--nextjs-dev-tools-scale));\\n --size-10: calc(10px / var(--nextjs-dev-tools-scale));\\n --size-11: calc(11px / var(--nextjs-dev-tools-scale));\\n --size-12: calc(12px / var(--nextjs-dev-tools-scale));\\n --size-13: calc(13px / var(--nextjs-dev-tools-scale));\\n --size-14: calc(14px / var(--nextjs-dev-tools-scale));\\n --size-15: calc(15px / var(--nextjs-dev-tools-scale));\\n --size-16: calc(16px / var(--nextjs-dev-tools-scale));\\n --size-17: calc(17px / var(--nextjs-dev-tools-scale));\\n --size-18: calc(18px / var(--nextjs-dev-tools-scale));\\n --size-20: calc(20px / var(--nextjs-dev-tools-scale));\\n --size-22: calc(22px / var(--nextjs-dev-tools-scale));\\n --size-24: calc(24px / var(--nextjs-dev-tools-scale));\\n --size-26: calc(26px / var(--nextjs-dev-tools-scale));\\n --size-28: calc(28px / var(--nextjs-dev-tools-scale));\\n --size-30: calc(30px / var(--nextjs-dev-tools-scale));\\n --size-32: calc(32px / var(--nextjs-dev-tools-scale));\\n --size-34: calc(34px / var(--nextjs-dev-tools-scale));\\n --size-36: calc(36px / var(--nextjs-dev-tools-scale));\\n --size-38: calc(38px / var(--nextjs-dev-tools-scale));\\n --size-40: calc(40px / var(--nextjs-dev-tools-scale));\\n --size-42: calc(42px / var(--nextjs-dev-tools-scale));\\n --size-44: calc(44px / var(--nextjs-dev-tools-scale));\\n --size-46: calc(46px / var(--nextjs-dev-tools-scale));\\n --size-48: calc(48px / var(--nextjs-dev-tools-scale));\\n\\n @media print {\\n display: none;\\n }\\n }\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n margin-bottom: 8px;\\n font-weight: 500;\\n line-height: 1.5;\\n }\\n\\n a {\\n color: var(--color-blue-900);\\n &:hover {\\n color: var(--color-blue-900);\\n }\\n &:focus-visible {\\n outline: var(--focus-ring);\\n }\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ef=function(){return t},t}function ep(e){var n=e.scale;return(0,y.jsx)(\"style\",{children:ei(ef(),String(void 0===n?1:n))})}function eh(e){if(\"\"===e.trim())throw Error(\"can't decode empty hex\");var n=parseInt(e,16);if(isNaN(n))throw Error(\"invalid hex: `\".concat(e,\"`\"));return String.fromCodePoint(n)}var eg=/^__TURBOPACK__([a-zA-Z0-9_$]+)__$/,em=/https?:\\/\\/[^\\s/$.?#].[^\\s)'\"]*/i,ev=new RegExp(\"(\".concat(/__TURBOPACK__[a-zA-Z0-9_$]+__/g.source,\"|\\\\s+)\")),eb=function(e){var n=e.text,t=e.matcher,r=n.split(ev);return(0,y.jsx)(y.Fragment,{children:r.map(function(e,n){if(em.test(e)){var r=em.exec(e)[0];return\"function\"!=typeof t||t(r)?(0,y.jsx)(x.Fragment,{children:(0,y.jsx)(\"a\",{href:r,target:\"_blank\",rel:\"noreferrer noopener\",children:e})},\"link-\".concat(n)):e}try{var o=function(e){var n=e.match(eg);if(!n)return e;for(var t=n[1],r=\"\",o=0,a=\"\",i=0;i<t.length;i++){var l=t[i];if(0===o)\"_\"===l?o=1:\"$\"===l?o=2:r+=l;else if(1===o)\"_\"===l?(r+=\" \",o=0):\"$\"===l?(r+=\"_\",o=2):(r+=l,o=0);else if(2===o)if(2===a.length&&(r+=eh(a),a=\"\"),\"_\"===l){if(\"\"!==a)throw Error(\"invalid hex: `\".concat(a,\"`\"));o=3}else if(\"$\"===l){if(\"\"!==a)throw Error(\"invalid hex: `\".concat(a,\"`\"));o=0}else a+=l;else if(3===o)if(\"_\"===l)throw Error(\"invalid hex: `\".concat(a+l,\"`\"));else\"$\"===l?(r+=eh(a),a=\"\",o=0):a+=l}return r}(e);if(o!==e)return(0,y.jsxs)(\"i\",{children:[\"{\",o,\"}\"]},\"ident-\".concat(n))}catch(t){return(0,y.jsxs)(\"i\",{children:[\"{\",e,\" (decoding failed: \",\"\"+t,\")\",\"}\"]},\"ident-\".concat(n))}return(0,y.jsx)(x.Fragment,{children:e},\"text-\".concat(n))})})},ey=[/^webpack-internal:\\/\\/\\/(\\([\\w-]+\\)\\/)?/,/^(webpack:\\/\\/\\/|webpack:\\/\\/(_N_E\\/)?)(\\([\\w-]+\\)\\/)?/];function ex(e){var n=!0,t=!1,r=void 0;try{for(var o,a=ey[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var i=o.value;if(i.test(e))return!0;e=e.replace(i,\"\")}}catch(e){t=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(t)throw r}}return!1}function ew(e){var n=!0,t=!1,r=void 0;try{for(var o,a=ey[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var i=o.value;e=e.replace(i,\"\")}}catch(e){t=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(t)throw r}}return e}function ej(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function ek(e){return function(){var n=this,t=arguments;return new Promise(function(r,o){var a=e.apply(n,t);function i(e){ej(a,r,o,i,l,\"next\",e)}function l(e){ej(a,r,o,i,l,\"throw\",e)}i(void 0)})}}function eA(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function eO(e,n){var t;return\"file://\"===e.file||(null==(t=e.file)?void 0:t.match(/https?:\\/\\//))?Promise.resolve({error:!1,reason:null,external:!0,sourceStackFrame:e,originalStackFrame:null,originalCodeFrame:null,ignored:!0}):ek(function(){var t,r;return eA(this,function(o){if(\"rejected\"===n.status)throw Error(n.reason);return[2,{error:!1,reason:null,external:!1,sourceStackFrame:e,originalStackFrame:(r=n.value).originalStackFrame,originalCodeFrame:r.originalCodeFrame||null,ignored:(null==(t=r.originalStackFrame)?void 0:t.ignored)||!1}]})})().catch(function(n){var t,r;return{error:!0,reason:null!=(r=null!=(t=null==n?void 0:n.message)?t:null==n?void 0:n.toString())?r:\"Unknown Error\",external:!1,sourceStackFrame:e,originalStackFrame:null,originalCodeFrame:null,ignored:!1}})}function eC(e,n,t){return ek(function(){var r,o,a,i;return eA(this,function(l){switch(l.label){case 0:r={frames:e,isServer:\"server\"===n,isEdgeServer:\"edge-server\"===n,isAppDirectory:t},o=void 0,a=void 0,l.label=1;case 1:return l.trys.push([1,3,,4]),[4,fetch(\"/__nextjs_original-stack-frames\",{method:\"POST\",body:JSON.stringify(r)})];case 2:return o=l.sent(),[3,4];case 3:return a=l.sent()+\"\",[3,4];case 4:if(!(o&&o.ok&&204!==o.status))return[3,6];return[4,o.json()];case 5:return i=l.sent(),[2,Promise.all(e.map(function(e,n){return eO(e,i[n])}))];case 6:if(!o)return[3,8];return[4,o.text()];case 7:a=l.sent(),l.label=8;case 8:return[2,Promise.all(e.map(function(e){return eO(e,{status:\"rejected\",reason:\"Failed to fetch the original stack frames \".concat(a?\": \".concat(a):\"\")})}))]}})})()}function eS(e){if(!e.file)return\"\";var n=ex(e.file),t=\"\";if(n)t=ew(e.file);else try{var r,o=new URL(e.file),a=\"\";(null==(r=globalThis.location)?void 0:r.origin)!==o.origin&&(\"null\"===o.origin?a+=o.protocol:a+=o.origin),a+=o.pathname,t=ew(a)}catch(n){t=ew(e.file)}return!ex(e.file)&&null!=e.lineNumber&&t&&\"<anonymous>\"!==e.file&&(null!=e.column?t+=\" (\".concat(e.lineNumber,\":\").concat(e.column,\")\"):t+=\" (\".concat(e.lineNumber,\")\")),t}function eE(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.file,t=e.lineNumber,r=e.column;return(0,x.useCallback)(function(){if(null!=n&&null!=t&&null!=r){var e=new URLSearchParams;e.append(\"file\",n),e.append(\"lineNumber\",String(t)),e.append(\"column\",String(r)),self.fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(e.toString())).then(function(){},function(e){console.error('Failed to open file \"'.concat(n,\" (\").concat(t,\":\").concat(r,')\" in your editor. Cause:'),e)})}},[n,t,r])}function e_(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function eP(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function ez(e){return(0,y.jsx)(\"svg\",eP(e_({xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",fill:\"currentColor\",d:\"M11.5 9.75V11.25C11.5 11.3881 11.3881 11.5 11.25 11.5H4.75C4.61193 11.5 4.5 11.3881 4.5 11.25L4.5 4.75C4.5 4.61193 4.61193 4.5 4.75 4.5H6.25H7V3H6.25H4.75C3.7835 3 3 3.7835 3 4.75V11.25C3 12.2165 3.7835 13 4.75 13H11.25C12.2165 13 13 12.2165 13 11.25V9.75V9H11.5V9.75ZM8.5 3H9.25H12.2495C12.6637 3 12.9995 3.33579 12.9995 3.75V6.75V7.5H11.4995V6.75V5.56066L8.53033 8.52978L8 9.06011L6.93934 7.99945L7.46967 7.46912L10.4388 4.5H9.25H8.5V3Z\"})}))}function eL(e){return(0,y.jsx)(\"svg\",eP(e_({xmlns:\"http://www.w3.org/2000/svg\",height:\"16\",strokeLinejoin:\"round\",viewBox:\"-4 -4 24 24\",width:\"16\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.55846 2H7.44148L1.88975 13.5H14.1102L8.55846 2ZM9.90929 1.34788C9.65902 0.829456 9.13413 0.5 8.55846 0.5H7.44148C6.86581 0.5 6.34092 0.829454 6.09065 1.34787L0.192608 13.5653C-0.127943 14.2293 0.355835 15 1.09316 15H14.9068C15.6441 15 16.1279 14.2293 15.8073 13.5653L9.90929 1.34788ZM8.74997 4.75V5.5V8V8.75H7.24997V8V5.5V4.75H8.74997ZM7.99997 12C8.55226 12 8.99997 11.5523 8.99997 11C8.99997 10.4477 8.55226 10 7.99997 10C7.44769 10 6.99997 10.4477 6.99997 11C6.99997 11.5523 7.44769 12 7.99997 12Z\",fill:\"currentColor\"})}))}function eT(e){var n=e.lang;if(!n)return(0,y.jsx)(eB,{});switch(n.toLowerCase()){case\"jsx\":case\"tsx\":return(0,y.jsx)(eM,{});case\"ts\":case\"typescript\":return(0,y.jsx)(eD,{});case\"javascript\":case\"js\":case\"mjs\":return(0,y.jsx)(eN,{});case\"json\":return(0,y.jsx)(eR,{});default:return(0,y.jsx)(eB,{})}}function eR(){return(0,y.jsx)(\"svg\",{clipRule:\"evenodd\",fillRule:\"evenodd\",height:\"16\",viewBox:\"0 0 1321.45 1333.33\",width:\"16\",children:(0,y.jsx)(\"path\",{d:\"M221.37 618.44h757.94V405.15H755.14c-23.5 0-56.32-12.74-71.82-28.24-15.5-15.5-25-43.47-25-66.97V82.89H88.39c-1.99 0-3.49 1-4.49 2-1.5 1-2 2.5-2 4.5v1155.04c0 1.5 1 3.5 2 4.5 1 1.49 3 1.99 4.49 1.99H972.8c2 0 1.89-.99 2.89-1.99 1.5-1 3.61-3 3.61-4.5v-121.09H221.36c-44.96 0-82-36.9-82-81.99V700.44c0-45.1 36.9-82 82-82zm126.51 117.47h75.24v146.61c0 30.79-2.44 54.23-7.33 70.31-4.92 16.03-14.8 29.67-29.65 40.85-14.86 11.12-33.91 16.72-57.05 16.72-24.53 0-43.51-3.71-56.94-11.06-13.5-7.36-23.89-18.1-31.23-32.3-7.35-14.14-11.69-31.67-12.99-52.53l71.5-10.81c.11 11.81 1.07 20.61 2.81 26.33 1.76 5.78 4.75 10.37 9 13.95 2.87 2.33 6.94 3.46 12.25 3.46 8.4 0 14.58-3.46 18.53-10.37 3.9-6.92 5.87-18.6 5.87-35V735.92zm112.77 180.67l71.17-4.97c1.54 12.81 4.69 22.62 9.44 29.28 7.74 10.88 18.74 16.34 33.09 16.34 10.68 0 18.93-2.76 24.68-8.36 5.81-5.58 8.7-12.07 8.7-19.41 0-6.97-2.71-13.26-8.2-18.79-5.47-5.53-18.23-10.68-38.28-15.65-32.89-8.17-56.27-19.1-70.26-32.74-14.12-13.57-21.18-30.92-21.18-52.03 0-13.83 3.61-26.89 10.85-39.21 7.22-12.38 18.07-22.06 32.59-29.09 14.52-7.04 34.4-10.56 59.65-10.56 31 0 54.62 6.41 70.88 19.29 16.28 12.81 25.92 33.24 29.04 61.27l-70.5 4.65c-1.87-12.25-5.81-21.17-11.81-26.7-6.05-5.6-14.35-8.36-24.9-8.36-8.71 0-15.31 2.07-19.73 6.16-4.4 4.09-6.59 9.12-6.59 15.02 0 4.27 1.81 8.11 5.37 11.57 3.45 3.59 11.8 6.85 25.02 9.93 32.75 7.86 56.2 15.84 70.31 23.87 14.18 8.05 24.52 17.98 30.96 29.92 6.44 11.88 9.66 25.2 9.66 39.96 0 17.29-4.3 33.24-12.88 47.89-8.63 14.58-20.61 25.7-36.08 33.24-15.41 7.54-34.85 11.31-58.33 11.31-41.24 0-69.81-8.86-85.68-26.52-15.88-17.65-24.85-40.09-26.96-67.3zm248.74-45.5c0-44.05 11.02-78.36 33.09-102.87 22.09-24.57 52.82-36.82 92.24-36.82 40.38 0 71.5 12.07 93.34 36.13 21.86 24.13 32.77 57.94 32.77 101.37 0 31.54-4.75 57.36-14.3 77.54-9.54 20.18-23.37 35.89-41.4 47.13-18.07 11.24-40.55 16.84-67.48 16.84-27.33 0-49.99-4.83-67.94-14.52-17.92-9.74-32.49-25.07-43.62-46.06-11.13-20.92-16.72-47.19-16.72-78.74zm74.89.19c0 27.21 4.57 46.81 13.68 58.68 9.13 11.88 21.57 17.85 37.26 17.85 16.1 0 28.65-5.84 37.45-17.47 8.87-11.68 13.28-32.54 13.28-62.77 0-25.39-4.63-43.92-13.84-55.61-9.26-11.76-21.75-17.6-37.56-17.6-15.13 0-27.34 5.97-36.49 17.85-9.21 11.88-13.78 31.61-13.78 59.07zm209.08-135.36h69.99l90.98 149.05V735.91h70.83v269.96h-70.83l-90.48-148.24v148.24h-70.49V735.91zm67.71-117.47h178.37c45.1 0 82 37.04 82 82v340.91c0 44.96-37.03 81.99-82 81.99h-178.37v147c0 17.5-6.99 32.99-18.5 44.5-11.5 11.49-27 18.5-44.5 18.5H62.97c-17.5 0-32.99-7-44.5-18.5-11.49-11.5-18.5-27-18.5-44.5V63.49c0-17.5 7-33 18.5-44.5S45.97.49 62.97.49H700.1c1.5-.5 3-.5 4.5-.5 7 0 14 3 19 7.49h1c1 .5 1.5 1 2.5 2l325.46 329.47c5.5 5.5 9.5 13 9.5 21.5 0 2.5-.5 4.5-1 7v250.98zM732.61 303.47V96.99l232.48 235.47H761.6c-7.99 0-14.99-3.5-20.5-8.49-4.99-5-8.49-12.5-8.49-20.5z\",fill:\"currentColor\"})})}function eN(){return(0,y.jsx)(\"svg\",{height:\"16\",viewBox:\"0 0 50 50\",width:\"16\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{d:\"M 43.335938 4 L 6.667969 4 C 5.195313 4 4 5.195313 4 6.667969 L 4 43.332031 C 4 44.804688 5.195313 46 6.667969 46 L 43.332031 46 C 44.804688 46 46 44.804688 46 43.335938 L 46 6.667969 C 46 5.195313 44.804688 4 43.335938 4 Z M 27 36.183594 C 27 40.179688 24.65625 42 21.234375 42 C 18.140625 42 15.910156 39.925781 15 38 L 18.144531 36.097656 C 18.75 37.171875 19.671875 38 21 38 C 22.269531 38 23 37.503906 23 35.574219 L 23 23 L 27 23 Z M 35.675781 42 C 32.132813 42 30.121094 40.214844 29 38 L 32 36 C 32.816406 37.335938 33.707031 38.613281 35.589844 38.613281 C 37.171875 38.613281 38 37.824219 38 36.730469 C 38 35.425781 37.140625 34.960938 35.402344 34.199219 L 34.449219 33.789063 C 31.695313 32.617188 29.863281 31.148438 29.863281 28.039063 C 29.863281 25.179688 32.046875 23 35.453125 23 C 37.878906 23 39.621094 23.84375 40.878906 26.054688 L 37.910156 27.964844 C 37.253906 26.789063 36.550781 26.328125 35.453125 26.328125 C 34.335938 26.328125 33.628906 27.039063 33.628906 27.964844 C 33.628906 29.109375 34.335938 29.570313 35.972656 30.28125 L 36.925781 30.691406 C 40.171875 32.078125 42 33.496094 42 36.683594 C 42 40.117188 39.300781 42 35.675781 42 Z\",fill:\"currentColor\"})})}function eD(){return(0,y.jsxs)(\"svg\",{fill:\"none\",height:\"14\",viewBox:\"0 0 512 512\",width:\"14\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,y.jsx)(\"rect\",{fill:\"currentColor\",height:\"512\",rx:\"50\",width:\"512\"}),(0,y.jsx)(\"rect\",{fill:\"currentColor\",height:\"512\",rx:\"50\",width:\"512\"}),(0,y.jsx)(\"path\",{clipRule:\"evenodd\",d:\"m316.939 407.424v50.061c8.138 4.172 17.763 7.3 28.875 9.386s22.823 3.129 35.135 3.129c11.999 0 23.397-1.147 34.196-3.442 10.799-2.294 20.268-6.075 28.406-11.342 8.138-5.266 14.581-12.15 19.328-20.65s7.121-19.007 7.121-31.522c0-9.074-1.356-17.026-4.069-23.857s-6.625-12.906-11.738-18.225c-5.112-5.319-11.242-10.091-18.389-14.315s-15.207-8.213-24.18-11.967c-6.573-2.712-12.468-5.345-17.685-7.9-5.217-2.556-9.651-5.163-13.303-7.822-3.652-2.66-6.469-5.476-8.451-8.448-1.982-2.973-2.974-6.336-2.974-10.091 0-3.441.887-6.544 2.661-9.308s4.278-5.136 7.512-7.118c3.235-1.981 7.199-3.52 11.894-4.615 4.696-1.095 9.912-1.642 15.651-1.642 4.173 0 8.581.313 13.224.938 4.643.626 9.312 1.591 14.008 2.894 4.695 1.304 9.259 2.947 13.694 4.928 4.434 1.982 8.529 4.276 12.285 6.884v-46.776c-7.616-2.92-15.937-5.084-24.962-6.492s-19.381-2.112-31.066-2.112c-11.895 0-23.163 1.278-33.805 3.833s-20.006 6.544-28.093 11.967c-8.086 5.424-14.476 12.333-19.171 20.729-4.695 8.395-7.043 18.433-7.043 30.114 0 14.914 4.304 27.638 12.912 38.172 8.607 10.533 21.675 19.45 39.204 26.751 6.886 2.816 13.303 5.579 19.25 8.291s11.086 5.528 15.415 8.448c4.33 2.92 7.747 6.101 10.252 9.543 2.504 3.441 3.756 7.352 3.756 11.733 0 3.233-.783 6.231-2.348 8.995s-3.939 5.162-7.121 7.196-7.147 3.624-11.894 4.771c-4.748 1.148-10.303 1.721-16.668 1.721-10.851 0-21.597-1.903-32.24-5.71-10.642-3.806-20.502-9.516-29.579-17.13zm-84.159-123.342h64.22v-41.082h-179v41.082h63.906v182.918h50.874z\",fill:\"var(--color-background-100)\",fillRule:\"evenodd\"})]})}function eB(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"17\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.5 7v7a2.5 2.5 0 0 1-2.5 2.5H4A2.5 2.5 0 0 1 1.5 14V.5h7.586a1 1 0 0 1 .707.293l4.414 4.414a1 1 0 0 1 .293.707V7zM13 7v7a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2h5v5h5zM9.5 2.621V5.5h2.879L9.5 2.621z\",fill:\"currentColor\"})})}function eM(){return(0,y.jsxs)(\"svg\",{height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:[(0,y.jsx)(\"g\",{clipPath:\"url(#file_react_clip0_872_3183)\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M4.5 1.93782C4.70129 1.82161 4.99472 1.7858 5.41315 1.91053C5.83298 2.03567 6.33139 2.31073 6.87627 2.73948C7.01136 2.84578 7.14803 2.96052 7.28573 3.08331C6.86217 3.53446 6.44239 4.04358 6.03752 4.60092C5.35243 4.67288 4.70164 4.78186 4.09916 4.92309C4.06167 4.74244 4.03064 4.56671 4.00612 4.39656C3.90725 3.71031 3.91825 3.14114 4.01979 2.71499C4.12099 2.29025 4.29871 2.05404 4.5 1.93782ZM7.49466 1.95361C7.66225 2.08548 7.83092 2.22804 7.99999 2.38067C8.16906 2.22804 8.33773 2.08548 8.50532 1.95361C9.10921 1.47842 9.71982 1.12549 10.3012 0.952202C10.8839 0.778496 11.4838 0.7738 12 1.0718C12.5161 1.3698 12.812 1.89169 12.953 2.48322C13.0936 3.07333 13.0932 3.77858 12.9836 4.53917C12.9532 4.75024 12.9141 4.9676 12.8665 5.19034C13.0832 5.26044 13.291 5.33524 13.489 5.41444C14.2025 5.69983 14.8134 6.05217 15.2542 6.46899C15.696 6.8868 16 7.404 16 8C16 8.596 15.696 9.11319 15.2542 9.53101C14.8134 9.94783 14.2025 10.3002 13.489 10.5856C13.291 10.6648 13.0832 10.7396 12.8665 10.8097C12.9141 11.0324 12.9532 11.2498 12.9837 11.4608C13.0932 12.2214 13.0936 12.9267 12.953 13.5168C12.812 14.1083 12.5161 14.6302 12 14.9282C11.4839 15.2262 10.8839 15.2215 10.3012 15.0478C9.71984 14.8745 9.10923 14.5216 8.50534 14.0464C8.33775 13.9145 8.16906 13.7719 7.99999 13.6193C7.83091 13.7719 7.66223 13.9145 7.49464 14.0464C6.89075 14.5216 6.28014 14.8745 5.69879 15.0478C5.11605 15.2215 4.51613 15.2262 3.99998 14.9282C3.48383 14.6302 3.18794 14.1083 3.047 13.5168C2.9064 12.9267 2.90674 12.2214 3.01632 11.4608C3.04673 11.2498 3.08586 11.0324 3.13351 10.8097C2.91679 10.7395 2.709 10.6648 2.511 10.5856C1.79752 10.3002 1.18658 9.94783 0.745833 9.53101C0.304028 9.11319 0 8.596 0 8C0 7.404 0.304028 6.8868 0.745833 6.46899C1.18658 6.05217 1.79752 5.69983 2.511 5.41444C2.709 5.33524 2.9168 5.26044 3.13352 5.19034C3.08587 4.9676 3.04675 4.75024 3.01634 4.53917C2.90676 3.77858 2.90642 3.07332 3.04702 2.48321C3.18796 1.89169 3.48385 1.3698 4 1.0718C4.51615 0.773798 5.11607 0.778495 5.69881 0.952201C6.28016 1.12549 6.89077 1.47841 7.49466 1.95361ZM7.36747 4.51025C7.57735 4.25194 7.78881 4.00927 7.99999 3.78356C8.21117 4.00927 8.42263 4.25194 8.63251 4.51025C8.42369 4.50346 8.21274 4.5 8 4.5C7.78725 4.5 7.5763 4.50345 7.36747 4.51025ZM8.71425 3.08331C9.13781 3.53447 9.55759 4.04358 9.96246 4.60092C10.6475 4.67288 11.2983 4.78186 11.9008 4.92309C11.9383 4.74244 11.9693 4.56671 11.9939 4.39657C12.0927 3.71031 12.0817 3.14114 11.9802 2.71499C11.879 2.29025 11.7013 2.05404 11.5 1.93782C11.2987 1.82161 11.0053 1.7858 10.5868 1.91053C10.167 2.03568 9.66859 2.31073 9.12371 2.73948C8.98862 2.84578 8.85196 2.96052 8.71425 3.08331ZM8 5.5C8.48433 5.5 8.95638 5.51885 9.41188 5.55456C9.67056 5.93118 9.9229 6.33056 10.1651 6.75C10.4072 7.16944 10.6269 7.58766 10.8237 7.99998C10.6269 8.41232 10.4072 8.83055 10.165 9.25C9.92288 9.66944 9.67053 10.0688 9.41185 10.4454C8.95636 10.4812 8.48432 10.5 8 10.5C7.51567 10.5 7.04363 10.4812 6.58813 10.4454C6.32945 10.0688 6.0771 9.66944 5.83494 9.25C5.59277 8.83055 5.37306 8.41232 5.17624 7.99998C5.37306 7.58765 5.59275 7.16944 5.83492 6.75C6.07708 6.33056 6.32942 5.93118 6.5881 5.55456C7.04361 5.51884 7.51566 5.5 8 5.5ZM11.0311 6.25C11.1375 6.43423 11.2399 6.61864 11.3385 6.80287C11.4572 6.49197 11.5616 6.18752 11.6515 5.89178C11.3505 5.82175 11.0346 5.75996 10.706 5.70736C10.8163 5.8848 10.9247 6.06576 11.0311 6.25ZM11.0311 9.75C11.1374 9.56576 11.2399 9.38133 11.3385 9.19709C11.4572 9.50801 11.5617 9.81246 11.6515 10.1082C11.3505 10.1782 11.0346 10.24 10.7059 10.2926C10.8162 10.1152 10.9247 9.93424 11.0311 9.75ZM11.9249 7.99998C12.2051 8.62927 12.4362 9.24738 12.6151 9.83977C12.7903 9.78191 12.958 9.72092 13.1176 9.65708C13.7614 9.39958 14.2488 9.10547 14.5671 8.80446C14.8843 8.50445 15 8.23243 15 8C15 7.76757 14.8843 7.49555 14.5671 7.19554C14.2488 6.89453 13.7614 6.60042 13.1176 6.34292C12.958 6.27907 12.7903 6.21808 12.6151 6.16022C12.4362 6.7526 12.2051 7.37069 11.9249 7.99998ZM9.96244 11.3991C10.6475 11.3271 11.2983 11.2181 11.9008 11.0769C11.9383 11.2576 11.9694 11.4333 11.9939 11.6034C12.0928 12.2897 12.0817 12.8589 11.9802 13.285C11.879 13.7098 11.7013 13.946 11.5 14.0622C11.2987 14.1784 11.0053 14.2142 10.5868 14.0895C10.167 13.9643 9.66861 13.6893 9.12373 13.2605C8.98863 13.1542 8.85196 13.0395 8.71424 12.9167C9.1378 12.4655 9.55758 11.9564 9.96244 11.3991ZM8.63249 11.4898C8.42262 11.7481 8.21116 11.9907 7.99999 12.2164C7.78881 11.9907 7.57737 11.7481 7.36749 11.4897C7.57631 11.4965 7.78726 11.5 8 11.5C8.21273 11.5 8.42367 11.4965 8.63249 11.4898ZM4.96891 9.75C5.07528 9.93424 5.18375 10.1152 5.29404 10.2926C4.9654 10.24 4.64951 10.1782 4.34844 10.1082C4.43833 9.81246 4.54276 9.508 4.66152 9.19708C4.76005 9.38133 4.86254 9.56575 4.96891 9.75ZM6.03754 11.3991C5.35244 11.3271 4.70163 11.2181 4.09914 11.0769C4.06165 11.2576 4.03062 11.4333 4.0061 11.6034C3.90723 12.2897 3.91823 12.8589 4.01977 13.285C4.12097 13.7098 4.29869 13.946 4.49998 14.0622C4.70127 14.1784 4.9947 14.2142 5.41313 14.0895C5.83296 13.9643 6.33137 13.6893 6.87625 13.2605C7.01135 13.1542 7.14802 13.0395 7.28573 12.9167C6.86217 12.4655 6.4424 11.9564 6.03754 11.3991ZM4.07507 7.99998C3.79484 8.62927 3.56381 9.24737 3.38489 9.83977C3.20969 9.78191 3.042 9.72092 2.88239 9.65708C2.23864 9.39958 1.75123 9.10547 1.43294 8.80446C1.11571 8.50445 1 8.23243 1 8C1 7.76757 1.11571 7.49555 1.43294 7.19554C1.75123 6.89453 2.23864 6.60042 2.88239 6.34292C3.042 6.27907 3.2097 6.21808 3.3849 6.16022C3.56383 6.75261 3.79484 7.37069 4.07507 7.99998ZM4.66152 6.80287C4.54277 6.49197 4.43835 6.18752 4.34846 5.89178C4.64952 5.82175 4.96539 5.75996 5.29402 5.70736C5.18373 5.8848 5.07526 6.06576 4.96889 6.25C4.86253 6.43423 4.76005 6.61864 4.66152 6.80287ZM9.25 8C9.25 8.69036 8.69036 9.25 8 9.25C7.30964 9.25 6.75 8.69036 6.75 8C6.75 7.30965 7.30964 6.75 8 6.75C8.69036 6.75 9.25 7.30965 9.25 8Z\",fill:\"currentColor\"})}),(0,y.jsx)(\"defs\",{children:(0,y.jsx)(\"clipPath\",{id:\"file_react_clip0_872_3183\",children:(0,y.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\"})})})]})}var eI=__nested_webpack_require_381207__(\"./dist/compiled/anser/index.js\"),eH=__nested_webpack_require_381207__.n(eI),eF=__nested_webpack_require_381207__(\"./dist/compiled/strip-ansi/index.js\"),eU=__nested_webpack_require_381207__.n(eF);function eV(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function eq(e){var n,t=e.stackFrame,r=e.codeFrame,o=(0,x.useMemo)(function(){var e,n;return(function(e){var n=eH().ansiToJson(e,{json:!0,use_classes:!0,remove_empty:!0}),t=[],r=[],o=!0,a=!1,i=void 0;try{for(var l,s=n[Symbol.iterator]();!(o=(l=s.next()).done);o=!0){var c=l.value;if(\"string\"==typeof c.content&&c.content.includes(\"\\n\"))for(var u=c.content.split(\"\\n\"),d=0;d<u.length;d++){var f=u[d];f&&r.push(function(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},c),{content:f})),d<u.length-1&&(t.push(r),r=[])}else r.push(c)}}catch(e){a=!0,i=e}finally{try{o||null==s.return||s.return()}finally{if(a)throw i}}return r.length>0&&t.push(r),t})((n=(e=r.split(/\\r?\\n/g)).map(function(e){return null===/^>? +\\d+ +\\| [ ]+/.exec(eU()(e))?null:/^>? +\\d+ +\\| ( *)/.exec(eU()(e))}).filter(Boolean).map(function(e){return e.pop()}).reduce(function(e,n){return isNaN(e)?n.length:Math.min(e,n.length)},NaN))>1?e.map(function(e,t){return~(t=e.indexOf(\"|\"))?e.substring(0,t)+e.substring(t).replace(\"^\\\\ {\".concat(n,\"}\"),\"\"):e}).join(\"\\n\"):e.join(\"\\n\")).map(function(e){var n,r,o,a,i,l,s,c,u;return{line:e,parsedLine:(n=e,r=t,((null==(o=n[0])?void 0:o.content)===\">\"||(null==(a=n[0])?void 0:a.content)===\" \")&&(s=null==(l=n[1])||null==(u=l.content)||null==(c=u.replace(\"|\",\"\"))?void 0:c.trim()),{lineNumber:s,isErroredLine:s===(null==(i=r.lineNumber)?void 0:i.toString())})}})},[r,t]),a=eE({file:t.file,lineNumber:t.lineNumber,column:t.column}),i=null==t||null==(n=t.file)?void 0:n.split(\".\").pop();return(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe\":!0,children:[(0,y.jsx)(\"div\",{className:\"code-frame-header\",children:(0,y.jsxs)(\"p\",{className:\"code-frame-link\",children:[(0,y.jsx)(\"span\",{className:\"code-frame-icon\",children:(0,y.jsx)(eT,{lang:i})}),(0,y.jsxs)(\"span\",{\"data-text\":!0,children:[eS(t),\" @\",\" \",(0,y.jsx)(eb,{text:t.methodName})]}),(0,y.jsx)(\"button\",{\"aria-label\":\"Open in editor\",\"data-with-open-in-editor-link-source-file\":!0,onClick:a,children:(0,y.jsx)(\"span\",{className:\"code-frame-icon\",\"data-icon\":\"right\",children:(0,y.jsx)(ez,{width:16,height:16})})})]})}),(0,y.jsx)(\"pre\",{className:\"code-frame-pre\",children:(0,y.jsx)(\"div\",{className:\"code-frame-lines\",children:o.map(function(e,n){var t,r,o=e.line,a=e.parsedLine,i=a.lineNumber,l=a.isErroredLine,s={};return i&&(s[\"data-nextjs-codeframe-line\"]=i),l&&(s[\"data-nextjs-codeframe-line--errored\"]=!0),(0,y.jsx)(\"div\",(t=eV({},s),r=r={children:o.map(function(e,n){return(0,y.jsx)(\"span\",{style:eV({color:e.fg?\"var(--color-\".concat(e.fg,\")\"):void 0},\"bold\"===e.decoration?{fontWeight:500}:\"italic\"===e.decoration?{fontStyle:\"italic\"}:void 0),children:e.content},\"frame-\".concat(n))})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t),\"line-\".concat(n))})})})]})}function eW(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var e$=[\"[data-next-mark]\",\"[data-issues-open]\",\"#nextjs-dev-tools-menu\",\"[data-nextjs-error-overlay-nav]\",\"[data-info-popover]\",\"[data-nextjs-devtools-panel-overlay]\",\"[data-nextjs-devtools-panel-footer]\",\"[data-nextjs-error-overlay-footer]\"],eZ=function(e){var n,t,r,o,a,i,l,s=e.children,c=e.className,u=e.onClose,d=e[\"aria-labelledby\"],f=e[\"aria-describedby\"],p=(e.dialogResizerRef,function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"className\",\"onClose\",\"aria-labelledby\",\"aria-describedby\",\"dialogResizerRef\"])),h=x.useRef(null),g=(n=x.useState(\"undefined\"!=typeof document&&document.hasFocus()?\"dialog\":void 0),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return eW(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return eW(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),m=g[0],v=g[1];return r=h.current,o=e$,a=function(e){return e.preventDefault(),null==u?void 0:u()},x.useEffect(function(){if(null!=r&&null!=a){var e=function(e){!(!r||r.contains(e.target))&&(o.some(function(n){return e.target.closest(n)})||a(e))},n=r.getRootNode();return n.addEventListener(\"mouseup\",e),n.addEventListener(\"touchend\",e,{passive:!1}),function(){n.removeEventListener(\"mouseup\",e),n.removeEventListener(\"touchend\",e)}}},[a,r,o]),x.useEffect(function(){var e=function(){v(document.hasFocus()?\"dialog\":void 0)};if(null!=h.current)return window.addEventListener(\"focus\",e),window.addEventListener(\"blur\",e),function(){window.removeEventListener(\"focus\",e),window.removeEventListener(\"blur\",e)}},[]),x.useEffect(function(){var e,n,t=h.current,r=null==t?void 0:t.getRootNode(),o=(e=r,null!=(n=ShadowRoot)&&\"undefined\"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](e):e instanceof n)?null==r?void 0:r.activeElement:null;return null==t||t.focus(),function(){null==t||t.blur(),null==o||o.focus()}},[]),(0,y.jsx)(\"div\",(i=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({ref:h,tabIndex:-1,\"data-nextjs-dialog\":!0,role:m,\"aria-labelledby\":d,\"aria-describedby\":f,\"aria-modal\":\"true\",className:c,onKeyDown:function(e){\"Escape\"===e.key&&(null==u||u())}},p),l=l={children:s},Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(l)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(l)).forEach(function(e){Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(l,e))}),i))},eY=function(e){var n,t,r=e.children,o=e.className,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"className\"]);return(0,y.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-body\":!0,className:o},a),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))},eX=function(e){var n,t,r=e.children,o=e.className,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"className\"]);return(0,y.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-content\":!0,className:o},a),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))};function eK(e){var n,t;return(0,y.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-header\":!0},e),t=t={children:e.children},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function eQ(){var e,n,t=(e=[\"\\n [data-nextjs-dialog-root] {\\n --next-dialog-radius: var(--rounded-xl);\\n --next-dialog-max-width: 960px;\\n --next-dialog-row-padding: 16px;\\n --next-dialog-padding: 12px;\\n --next-dialog-notch-height: 42px;\\n --next-dialog-border-width: 1px;\\n\\n display: flex;\\n flex-direction: column;\\n width: 100%;\\n max-height: calc(100% - 56px);\\n max-width: var(--next-dialog-max-width);\\n margin-right: auto;\\n margin-left: auto;\\n scale: 0.97;\\n opacity: 0;\\n transition-property: scale, opacity;\\n transition-duration: var(--transition-duration);\\n transition-timing-function: var(--timing-overlay);\\n\\n &[data-rendered='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n\\n [data-nextjs-scroll-fader][data-side='top'] {\\n left: 1px;\\n top: calc(\\n var(--next-dialog-notch-height) + var(--next-dialog-border-width)\\n );\\n width: calc(100% - var(--next-dialog-padding));\\n opacity: 0;\\n }\\n }\\n\\n [data-nextjs-dialog] {\\n outline: 0;\\n }\\n\\n [data-nextjs-dialog],\\n [data-nextjs-dialog] * {\\n &::-webkit-scrollbar {\\n width: 6px;\\n height: 6px;\\n border-radius: 0 0 1rem 1rem;\\n margin-bottom: 1rem;\\n }\\n\\n &::-webkit-scrollbar-button {\\n display: none;\\n }\\n\\n &::-webkit-scrollbar-track {\\n border-radius: 0 0 1rem 1rem;\\n background-color: var(--color-background-100);\\n }\\n\\n &::-webkit-scrollbar-thumb {\\n border-radius: 1rem;\\n background-color: var(--color-gray-500);\\n }\\n }\\n\\n /* Place overflow: hidden on this so we can break out from [data-nextjs-dialog] */\\n [data-nextjs-dialog-sizer] {\\n overflow: hidden;\\n border-radius: inherit;\\n }\\n\\n [data-nextjs-dialog-backdrop] {\\n opacity: 0;\\n transition: opacity var(--transition-duration) var(--timing-overlay);\\n }\\n\\n [data-nextjs-dialog-overlay] {\\n margin: 8px;\\n }\\n\\n [data-nextjs-dialog-overlay][data-rendered='true']\\n [data-nextjs-dialog-backdrop] {\\n opacity: 1;\\n }\\n\\n [data-nextjs-dialog-content] {\\n border: none;\\n margin: 0;\\n display: flex;\\n flex-direction: column;\\n position: relative;\\n padding: var(--next-dialog-padding);\\n }\\n\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-header] {\\n flex-shrink: 0;\\n margin-bottom: 8px;\\n }\\n\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-body] {\\n position: relative;\\n flex: 1 1 auto;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n max-height: calc(100% - 15px);\\n }\\n }\\n\\n @media (min-width: 576px) {\\n [data-nextjs-dialog-root] {\\n --next-dialog-max-width: 540px;\\n }\\n }\\n\\n @media (min-width: 768px) {\\n [data-nextjs-dialog-root] {\\n --next-dialog-max-width: 720px;\\n }\\n }\\n\\n @media (min-width: 992px) {\\n [data-nextjs-dialog-root] {\\n --next-dialog-max-width: 960px;\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return eQ=function(){return t},t}var eG=ei(eQ()),eJ=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/utils/cx.ts\");function e0(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function e1(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function e2(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function e4(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return e0(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return e0(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var e5=\"function\"==typeof x.useActionState?function(e){var n=e4(x.useActionState(function(n,t){return\"reset\"===t?{state:\"initial\"}:\"copy\"===t?navigator.clipboard?navigator.clipboard.writeText(e).then(function(){return{state:\"success\"}},function(e){return{state:\"error\",error:e}}):{state:\"error\",error:\"Copy to clipboard is not supported in this browser\"}:n},{state:\"initial\"}),3),t=n[0],r=n[1],o=n[2];return[t,function(){x.startTransition(function(){r(\"copy\")})},x.useCallback(function(){r(\"reset\")},[r]),o]}:function(e){var n=e4(x.useReducer(function(e,n){return\"reset\"===n.type?{state:\"initial\"}:\"copied\"===n.type?{state:\"success\"}:\"copying\"===n.type?{state:\"pending\"}:\"error\"===n.type?{state:\"error\",error:n.error}:e},{state:\"initial\"}),2),t=n[0],r=n[1],o=x.useCallback(function(){r({type:\"reset\"})},[]),a=\"pending\"===t.state;return[t,function(){a||(navigator.clipboard?(r({type:\"copying\"}),navigator.clipboard.writeText(e).then(function(){r({type:\"copied\"})},function(e){r({type:\"error\",error:e})})):r({type:\"error\",error:\"Copy to clipboard is not supported in this browser\"}))},o,a]};function e3(e){var n=e.actionLabel,t=e.successLabel,r=e.content,o=e.icon,a=e.disabled,i=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"actionLabel\",\"successLabel\",\"content\",\"icon\",\"disabled\"]),l=e4(e5(r),4),s=l[0],c=l[1],u=l[2],d=l[3],f=\"error\"===s.state?s.error:null;x.useEffect(function(){null!==f&&console.warn(f)},[f]),x.useEffect(function(){if(\"success\"===s.state){var e=setTimeout(function(){u()},2e3);return function(){clearTimeout(e)}}},[d,s.state,u]);var p=!navigator.clipboard||d||a||!!f,h=\"success\"===s.state?t:n,g=\"success\"===s.state?(0,y.jsx)(e9,{}):o||(0,y.jsx)(e6,{width:14,height:14,className:\"error-overlay-toolbar-button-icon\"});return(0,y.jsxs)(\"button\",e2(e1({},i),{type:\"button\",title:h,\"aria-label\":h,\"aria-disabled\":p,disabled:p,\"data-nextjs-copy-button\":!0,className:(0,eJ.cx)(i.className,\"nextjs-data-copy-button\",\"nextjs-data-copy-button--\".concat(s.state)),onClick:function(){p||c()},children:[g,\"error\"===s.state?\" \".concat(s.error):null]}))}function e6(e){return(0,y.jsx)(\"svg\",e2(e1({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M2.406.438c-.845 0-1.531.685-1.531 1.53v6.563c0 .846.686 1.531 1.531 1.531H3.937V8.75H2.406a.219.219 0 0 1-.219-.219V1.97c0-.121.098-.219.22-.219h4.812c.12 0 .218.098.218.219v.656H8.75v-.656c0-.846-.686-1.532-1.531-1.532H2.406zm4.375 3.5c-.845 0-1.531.685-1.531 1.53v6.563c0 .846.686 1.531 1.531 1.531h4.813c.845 0 1.531-.685 1.531-1.53V5.468c0-.846-.686-1.532-1.531-1.532H6.78zm-.218 1.53c0-.12.097-.218.218-.218h4.813c.12 0 .219.098.219.219v6.562c0 .121-.098.219-.22.219H6.782a.219.219 0 0 1-.218-.219V5.47z\",fill:\"currentColor\"})}))}function e9(){return(0,y.jsx)(\"svg\",{height:\"16\",xlinkTitle:\"copied\",viewBox:\"0 0 16 16\",width:\"16\",stroke:\"currentColor\",fill:\"currentColor\",children:(0,y.jsx)(\"path\",{d:\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"})})}function e8(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function e7(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}var ne=function(){if(\"undefined\"==typeof window)return!1;var e=\"chrome\"in window&&window.chrome,n=window.navigator.vendor;return null!=e&&\"Google Inc.\"===n}();function nn(e){return(0,y.jsxs)(\"svg\",e7(e8({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_a\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"0\",width:\"14\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.67.089 1.205 3.256a.663.663 0 0 0-.33.573v6.339c0 .237.126.455.33.574l5.466 3.17a.66.66 0 0 0 .66 0l5.465-3.17a.664.664 0 0 0 .329-.574V3.829a.663.663 0 0 0-.33-.573L7.33.089a.663.663 0 0 0-.661 0\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_a)\",children:(0,y.jsx)(\"path\",{d:\"M18.648 2.717 3.248-4.86-4.648 11.31l15.4 7.58 7.896-16.174z\",fill:\"url(#nodejs_icon_linear_gradient_b)\"})}),(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_c\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"12\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M1.01 10.57a.663.663 0 0 0 .195.17l4.688 2.72.781.45a.66.66 0 0 0 .51.063l5.764-10.597a.653.653 0 0 0-.153-.122L9.216 1.18 7.325.087a.688.688 0 0 0-.171-.07L1.01 10.57z\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_c)\",children:(0,y.jsx)(\"path\",{d:\"M-5.647 4.958 5.226 19.734l14.38-10.667L8.734-5.71-5.647 4.958z\",fill:\"url(#nodejs_icon_linear_gradient_d)\"})}),(0,y.jsxs)(\"g\",{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_e\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"13\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.934.004A.665.665 0 0 0 6.67.09L1.22 3.247l5.877 10.746a.655.655 0 0 0 .235-.08l5.465-3.17a.665.665 0 0 0 .319-.453L7.126.015a.684.684 0 0 0-.189-.01\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_e)\",children:(0,y.jsx)(\"path\",{d:\"M1.22.002v13.992h11.894V.002H1.22z\",fill:\"url(#nodejs_icon_linear_gradient_f)\"})})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_b\",x1:\"10.943\",y1:\"-1.084\",x2:\"2.997\",y2:\"15.062\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".3\",stopColor:\"#3E863D\"}),(0,y.jsx)(\"stop\",{offset:\".5\",stopColor:\"#55934F\"}),(0,y.jsx)(\"stop\",{offset:\".8\",stopColor:\"#5AAD45\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_d\",x1:\"-.145\",y1:\"12.431\",x2:\"14.277\",y2:\"1.818\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".57\",stopColor:\"#3E863D\"}),(0,y.jsx)(\"stop\",{offset:\".72\",stopColor:\"#619857\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:\"#76AC64\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_f\",x1:\"1.225\",y1:\"6.998\",x2:\"13.116\",y2:\"6.998\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".16\",stopColor:\"#6BBF47\"}),(0,y.jsx)(\"stop\",{offset:\".38\",stopColor:\"#79B461\"}),(0,y.jsx)(\"stop\",{offset:\".47\",stopColor:\"#75AC64\"}),(0,y.jsx)(\"stop\",{offset:\".7\",stopColor:\"#659E5A\"}),(0,y.jsx)(\"stop\",{offset:\".9\",stopColor:\"#3E863D\"})]})]})]}))}function nt(e){return(0,y.jsxs)(\"svg\",e7(e8({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_a\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"0\",width:\"14\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.67.089 1.205 3.256a.663.663 0 0 0-.33.573v6.339c0 .237.126.455.33.574l5.466 3.17a.66.66 0 0 0 .66 0l5.465-3.17a.664.664 0 0 0 .329-.574V3.829a.663.663 0 0 0-.33-.573L7.33.089a.663.663 0 0 0-.661 0\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_a)\",children:(0,y.jsx)(\"path\",{d:\"M18.648 2.717 3.248-4.86-4.646 11.31l15.399 7.58 7.896-16.174z\",fill:\"url(#nodejs_icon_linear_gradient_b)\"})}),(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_c\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"12\",height:\"15\",children:(0,y.jsx)(\"path\",{d:\"M1.01 10.571a.66.66 0 0 0 .195.172l4.688 2.718.781.451a.66.66 0 0 0 .51.063l5.764-10.597a.653.653 0 0 0-.153-.122L9.216 1.181 7.325.09a.688.688 0 0 0-.171-.07L1.01 10.572z\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_c)\",children:(0,y.jsx)(\"path\",{d:\"M-5.647 4.96 5.226 19.736 19.606 9.07 8.734-5.707-5.647 4.96z\",fill:\"url(#nodejs_icon_linear_gradient_d)\"})}),(0,y.jsxs)(\"g\",{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_e\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"13\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.935.003a.665.665 0 0 0-.264.085l-5.45 3.158 5.877 10.747a.653.653 0 0 0 .235-.082l5.465-3.17a.665.665 0 0 0 .319-.452L7.127.014a.684.684 0 0 0-.189-.01\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_e)\",children:(0,y.jsx)(\"path\",{d:\"M1.222.001v13.992h11.893V0H1.222z\",fill:\"url(#nodejs_icon_linear_gradient_f)\"})})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_b\",x1:\"10.944\",y1:\"-1.084\",x2:\"2.997\",y2:\"15.062\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".3\",stopColor:\"#676767\"}),(0,y.jsx)(\"stop\",{offset:\".5\",stopColor:\"#858585\"}),(0,y.jsx)(\"stop\",{offset:\".8\",stopColor:\"#989A98\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_d\",x1:\"-.145\",y1:\"12.433\",x2:\"14.277\",y2:\"1.819\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".57\",stopColor:\"#747474\"}),(0,y.jsx)(\"stop\",{offset:\".72\",stopColor:\"#707070\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:\"#929292\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_f\",x1:\"1.226\",y1:\"6.997\",x2:\"13.117\",y2:\"6.997\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".16\",stopColor:\"#878787\"}),(0,y.jsx)(\"stop\",{offset:\".38\",stopColor:\"#A9A9A9\"}),(0,y.jsx)(\"stop\",{offset:\".47\",stopColor:\"#A5A5A5\"}),(0,y.jsx)(\"stop\",{offset:\".7\",stopColor:\"#8F8F8F\"}),(0,y.jsx)(\"stop\",{offset:\".9\",stopColor:\"#626262\"})]})]})]}))}var nr=\"Learn more about enabling Node.js inspector for server code with Chrome DevTools\";function no(e){var n=e.devtoolsFrontendUrl||\"\";return n&&ne?(0,y.jsx)(e3,{\"data-nextjs-data-runtime-error-copy-devtools-url\":!0,className:\"nodejs-inspector-button\",actionLabel:\"Copy Chrome DevTools URL\",successLabel:\"Copied\",content:n,icon:(0,y.jsx)(nn,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})}):(0,y.jsx)(\"a\",{title:nr,\"aria-label\":nr,className:\"nodejs-inspector-button\",href:\"https://nextjs.org/docs/app/building-your-application/configuring/debugging#server-side-code\",target:\"_blank\",rel:\"noopener noreferrer\",children:(0,y.jsx)(nt,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})})}function na(e){var n=e.error;return(0,y.jsx)(e3,{\"data-nextjs-data-runtime-error-copy-stack\":!0,className:\"copy-stack-trace-button\",actionLabel:\"Copy Stack Trace\",successLabel:\"Stack Trace Copied\",content:n.stack||\"\",disabled:!n.stack})}function ni(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nl(e){if(Array.isArray(e))return e}function ns(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function nc(e,n){return nl(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||nd(e,n)||ns()}function nu(e){return nl(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||nd(e)||ns()}function nd(e,n){if(e){if(\"string\"==typeof e)return ni(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ni(e,n)}}var nf=\"https://react.dev/link/hydration-mismatch\",np=\"https://nextjs.org/docs/messages/react-hydration-error\",nh=[/^In HTML, (.+?) cannot be a child of <(.+?)>\\.(.*)\\nThis will cause a hydration error\\.(.*)/,/^In HTML, (.+?) cannot be a descendant of <(.+?)>\\.\\nThis will cause a hydration error\\.(.*)/,/^In HTML, text nodes cannot be a child of <(.+?)>\\.\\nThis will cause a hydration error\\./,/^In HTML, whitespace text nodes cannot be a child of <(.+?)>\\. Make sure you don't have any extra whitespace between tags on each line of your source code\\.\\nThis will cause a hydration error\\./];function ng(e){return nh.some(function(n){return n.test(e)})}var nm=[\"https://nextjs.org\",\"https://react.dev\"];function nv(e){return nm.some(function(n){return e.startsWith(n)})}function nb(e){var n=function(e){var n,t,r,o=(n=e,t=nv,r=Array.from(n.matchAll(/https?:\\/\\/[^\\s/$.?#].[^\\s)'\"]*/gi),function(e){return e[0]}),t?r.filter(function(e){return t(e)}):r);if(0===o.length)return null;var a=o[0];return a===nf?np:a}(e.errorMessage);return n?(0,y.jsx)(\"a\",{title:\"Go to related documentation\",\"aria-label\":\"Go to related documentation\",className:\"docs-link-button\",href:n,target:\"_blank\",rel:\"noopener noreferrer\",children:(0,y.jsx)(ny,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})}):(0,y.jsx)(\"button\",{title:\"No related documentation found\",\"aria-label\":\"No related documentation found\",className:\"docs-link-button\",disabled:!0,children:(0,y.jsx)(ny,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})})}function ny(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M0 .875h4.375C5.448.875 6.401 1.39 7 2.187A3.276 3.276 0 0 1 9.625.875H14v11.156H9.4c-.522 0-1.023.208-1.392.577l-.544.543h-.928l-.544-.543c-.369-.37-.87-.577-1.392-.577H0V.875zm6.344 3.281a1.969 1.969 0 0 0-1.969-1.968H1.312v8.53H4.6c.622 0 1.225.177 1.744.502V4.156zm1.312 7.064V4.156c0-1.087.882-1.968 1.969-1.968h3.063v8.53H9.4c-.622 0-1.225.177-1.744.502z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nx(e){var n=e.error,t=e.debugInfo,r=e.feedbackButton;return(0,y.jsxs)(\"span\",{className:\"error-overlay-toolbar\",children:[r,(0,y.jsx)(na,{error:n}),(0,y.jsx)(nb,{errorMessage:n.message}),(0,y.jsx)(no,{devtoolsFrontendUrl:null==t?void 0:t.devtoolsFrontendUrl})]})}function nw(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"thumbs-up-icon\"},e),t=t={children:(0,y.jsx)(\"g\",{id:\"thumb-up-16\",children:(0,y.jsx)(\"path\",{id:\"Union\",fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M6.89531 2.23959C6.72984 2.1214 6.5 2.23968 6.5 2.44303V5.24989C6.5 6.21639 5.7165 6.99989 4.75 6.99989H2.5V13.4999H12.1884C12.762 13.4999 13.262 13.1095 13.4011 12.5531L14.4011 8.55306C14.5984 7.76412 14.0017 6.99989 13.1884 6.99989H9.25H8.5V6.24989V3.51446C8.5 3.43372 8.46101 3.35795 8.39531 3.31102L6.89531 2.23959ZM5 2.44303C5 1.01963 6.6089 0.191656 7.76717 1.01899L9.26717 2.09042C9.72706 2.41892 10 2.94929 10 3.51446V5.49989H13.1884C14.9775 5.49989 16.2903 7.18121 15.8563 8.91686L14.8563 12.9169C14.5503 14.1411 13.4503 14.9999 12.1884 14.9999H1.75H1V14.2499V6.24989V5.49989H1.75H4.75C4.88807 5.49989 5 5.38796 5 5.24989V2.44303Z\",fill:\"currentColor\"})})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nj(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"thumbs-down-icon\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M5.89531 12.7603C5.72984 12.8785 5.5 12.7602 5.5 12.5569V9.75C5.5 8.7835 4.7165 8 3.75 8H1.5V1.5H11.1884C11.762 1.5 12.262 1.89037 12.4011 2.44683L13.4011 6.44683C13.5984 7.23576 13.0017 8 12.1884 8H8.25H7.5V8.75V11.4854C7.5 11.5662 7.46101 11.6419 7.39531 11.6889L5.89531 12.7603ZM4 12.5569C4 13.9803 5.6089 14.8082 6.76717 13.9809L8.26717 12.9095C8.72706 12.581 9 12.0506 9 11.4854V9.5H12.1884C13.9775 9.5 15.2903 7.81868 14.8563 6.08303L13.8563 2.08303C13.5503 0.858816 12.4503 0 11.1884 0H0.75H0V0.75V8.75V9.5H0.75H3.75C3.88807 9.5 4 9.61193 4 9.75V12.5569Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nk(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nA(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function nO(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function nC(e){var n,t,r=e.errorCode,o=e.className,a=(n=(0,x.useState)({}),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return nk(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return nk(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),i=a[0],l=a[1],s=i[r],c=false,u=(0,x.useCallback)(function(e){var n;return(n=function(){return function(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:l(function(n){var t,o;return t=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){nO(e,n,t[n])})}return e}({},n),o=null!=(o=nO({},r,e))?o:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}),t}),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,fetch(\"\".concat( false||\"\",\"/__nextjs_error_feedback?\").concat(new URLSearchParams({errorCode:r,wasHelpful:e.toString()})))];case 2:return n.sent().ok||console.error(\"Failed to record feedback on the server.\"),[3,4];case 3:return console.error(\"Failed to record feedback:\",n.sent()),[3,4];case 4:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(r,o){var a=n.apply(e,t);function i(e){nA(a,r,o,i,l,\"next\",e)}function l(e){nA(a,r,o,i,l,\"throw\",e)}i(void 0)})})()},[r]);return(0,y.jsx)(\"div\",{className:(0,eJ.cx)(\"error-feedback\",o),role:\"region\",\"aria-label\":\"Error feedback\",children:void 0!==s?(0,y.jsx)(\"p\",{className:\"error-feedback-thanks\",role:\"status\",\"aria-live\":\"polite\",children:\"Thanks for your feedback!\"}):(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"p\",{children:(0,y.jsx)(\"a\",{href:\"https://nextjs.org/telemetry#error-feedback\",rel:\"noopener noreferrer\",target:\"_blank\",children:\"Was this helpful?\"})}),(0,y.jsx)(\"button\",{\"aria-disabled\":c?\"true\":void 0,\"aria-label\":\"Mark as helpful\",onClick:c?void 0:function(){return u(!0)},className:(0,eJ.cx)(\"feedback-button\",!0===s&&\"voted\"),title:c?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nw,{\"aria-hidden\":\"true\"})}),(0,y.jsx)(\"button\",{\"aria-disabled\":c?\"true\":void 0,\"aria-label\":\"Mark as not helpful\",onClick:c?void 0:function(){return u(!1)},className:(0,eJ.cx)(\"feedback-button\",!1===s&&\"voted\"),title:c?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nj,{\"aria-hidden\":\"true\",style:{translate:\"1px 1px\"}})})]})})}function nS(e){var n=e.errorCode;return(0,y.jsx)(\"footer\",{\"data-nextjs-error-overlay-footer\":!0,className:\"error-overlay-footer\",children:n?(0,y.jsx)(nC,{className:\"error-feedback\",errorCode:n}):null})}var nE=\"\\n .error-overlay-footer {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n\\n gap: 8px;\\n padding: 12px;\\n background: var(--color-background-200);\\n border-top: 1px solid var(--color-gray-400);\\n }\\n\\n .error-feedback {\\n margin-left: auto;\\n\\n p {\\n font-size: var(--size-14);\\n font-weight: 500;\\n margin: 0;\\n }\\n }\\n\\n \".concat(\"\\n .error-feedback {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n white-space: nowrap;\\n color: var(--color-gray-900);\\n }\\n\\n .error-feedback-thanks {\\n height: var(--size-24);\\n display: flex;\\n align-items: center;\\n padding-right: 4px; /* To match the 4px inner padding of the thumbs up and down icons */\\n }\\n\\n .feedback-button {\\n background: none;\\n border: none;\\n border-radius: var(--rounded-md);\\n width: var(--size-24);\\n height: var(--size-24);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n cursor: pointer;\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n\\n &:hover {\\n background: var(--color-gray-alpha-100);\\n }\\n\\n &:active {\\n background: var(--color-gray-alpha-200);\\n }\\n }\\n\\n .feedback-button[aria-disabled='true'] {\\n opacity: 0.7;\\n cursor: not-allowed;\\n }\\n\\n .feedback-button.voted {\\n background: var(--color-gray-alpha-200);\\n }\\n\\n .thumbs-up-icon,\\n .thumbs-down-icon {\\n color: var(--color-gray-900);\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\",\"\\n\");function n_(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nP(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return n_(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return n_(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function nz(e){var n=e.errorMessage,t=nP((0,x.useState)(!1),2),r=t[0],o=t[1],a=nP((0,x.useState)(!1),2),i=a[0],l=a[1],s=(0,x.useRef)(null);return(0,x.useLayoutEffect)(function(){s.current&&l(s.current.scrollHeight>200)},[n]),(0,y.jsxs)(\"div\",{className:\"nextjs__container_errors_wrapper\",children:[(0,y.jsx)(\"p\",{ref:s,id:\"nextjs__container_errors_desc\",className:\"nextjs__container_errors_desc \".concat(i&&!r?\"truncated\":\"\"),children:n}),i&&!r&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"div\",{className:\"nextjs__container_errors_gradient_overlay\"}),(0,y.jsx)(\"button\",{onClick:function(){return o(!0)},className:\"nextjs__container_errors_expand_button\",\"aria-expanded\":r,\"aria-controls\":\"nextjs__container_errors_desc\",children:\"Show More\"})]})]})}function nL(e){var n=e.errorType;return(0,y.jsx)(\"span\",{id:\"nextjs__container_errors_label\",className:\"nextjs__container_errors_label\",children:n})}function nT(e){var n=e.title,t=e.className;return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",\"aria-label\":n,className:t,children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M9.24996 12.0608L8.71963 11.5304L5.89641 8.70722C5.50588 8.3167 5.50588 7.68353 5.89641 7.29301L8.71963 4.46978L9.24996 3.93945L10.3106 5.00011L9.78029 5.53044L7.31062 8.00011L9.78029 10.4698L10.3106 11.0001L9.24996 12.0608Z\",fill:\"currentColor\"})})}function nR(e){var n=e.title,t=e.className;return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:t,\"aria-label\":n,children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M6.75011 3.93945L7.28044 4.46978L10.1037 7.29301C10.4942 7.68353 10.4942 8.3167 10.1037 8.70722L7.28044 11.5304L6.75011 12.0608L5.68945 11.0001L6.21978 10.4698L8.68945 8.00011L6.21978 5.53044L5.68945 5.00011L6.75011 3.93945Z\",fill:\"currentColor\"})})}function nN(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nD(e){var n,t,r=e.runtimeErrors,o=e.activeIdx,a=e.onActiveIndexChange,i=(0,x.useCallback)(function(){return(0,x.startTransition)(function(){o>0&&a(Math.max(0,o-1))})},[o,a]),l=(0,x.useCallback)(function(){return(0,x.startTransition)(function(){o<r.length-1&&a(Math.max(0,Math.min(r.length-1,o+1)))})},[o,r.length,a]),s=(0,x.useRef)(null),c=(0,x.useRef)(null),u=(n=(0,x.useState)(null),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return nN(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return nN(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),d=u[0],f=u[1],p=(0,x.useCallback)(function(e){f(e)},[]);return(0,x.useEffect)(function(){var e=function(e){\"ArrowLeft\"===e.key?(e.preventDefault(),e.stopPropagation(),i&&i()):\"ArrowRight\"===e.key&&(e.preventDefault(),e.stopPropagation(),l&&l())};if(null!=d){var n=d.getRootNode(),t=self.document;return n.addEventListener(\"keydown\",e),n!==t&&t.addEventListener(\"keydown\",e),function(){n.removeEventListener(\"keydown\",e),n!==t&&t.removeEventListener(\"keydown\",e)}}},[d,l,i]),(0,x.useEffect)(function(){if(null!=d){var e,n,t=d.getRootNode();if(e=t,null!=(n=ShadowRoot)&&\"undefined\"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](e):e instanceof n){var a=t.activeElement;0===o?s.current&&a===s.current&&s.current.blur():o===r.length-1&&c.current&&a===c.current&&c.current.blur()}}},[d,o,r.length]),(0,y.jsxs)(\"nav\",{className:\"error-overlay-pagination dialog-exclude-closing-from-outside-click\",ref:p,children:[(0,y.jsx)(\"button\",{ref:s,type:\"button\",disabled:0===o,\"aria-disabled\":0===o,onClick:i,\"data-nextjs-dialog-error-previous\":!0,className:\"error-overlay-pagination-button\",children:(0,y.jsx)(nT,{title:\"previous\",className:\"error-overlay-pagination-button-icon\"})}),(0,y.jsxs)(\"div\",{className:\"error-overlay-pagination-count\",children:[(0,y.jsxs)(\"span\",{\"data-nextjs-dialog-error-index\":o,children:[o+1,\"/\"]}),(0,y.jsx)(\"span\",{\"data-nextjs-dialog-header-total-count\":!0,children:r.length||1})]}),(0,y.jsx)(\"button\",{ref:c,type:\"button\",disabled:o>=r.length-1,\"aria-disabled\":o>=r.length-1,onClick:l,\"data-nextjs-dialog-error-next\":!0,className:\"error-overlay-pagination-button\",children:(0,y.jsx)(nR,{title:\"next\",className:\"error-overlay-pagination-button-icon\"})})]})}function nB(e){var n=e.installed,t=e.staleness,r=e.expected,o=\"\",a=\"\",i=\"\",l=\"Next.js \".concat(n);switch(t){case\"newer-than-npm\":case\"fresh\":o=l,a=\"Latest available version is detected (\".concat(n,\").\"),i=\"fresh\";break;case\"stale-patch\":case\"stale-minor\":o=\"\".concat(l,\" (stale)\"),a=\"There is a newer version (\".concat(r,\") available, upgrade recommended! \"),i=\"stale\";break;case\"stale-major\":o=\"\".concat(l,\" (outdated)\"),a=\"An outdated version detected (latest is \".concat(r,\"), upgrade is highly recommended!\"),i=\"outdated\";break;case\"stale-prerelease\":o=\"\".concat(l,\" (stale)\"),a=\"There is a newer canary version (\".concat(r,\") available, please upgrade! \"),i=\"stale\";break;case\"unknown\":o=\"\".concat(l,\" (unknown)\"),a=\"No Next.js version data was found.\",i=\"unknown\"}return{text:o,indicatorClass:i,title:a}}function nM(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"circle\",{cx:\"7\",cy:\"7\",r:\"5.5\",strokeWidth:\"3\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nI(e){var n=e.versionInfo,t=e.bundlerName,r=n.staleness,o=nB(n),a=o.text,i=o.indicatorClass,l=o.title,s=\"Turbopack\"===t;return r.startsWith(\"stale\")?(0,y.jsxs)(\"a\",{className:\"nextjs-container-build-error-version-status dialog-exclude-closing-from-outside-click\",target:\"_blank\",rel:\"noopener noreferrer\",href:\"https://nextjs.org/docs/messages/version-staleness\",children:[(0,y.jsx)(nM,{className:(0,eJ.cx)(\"version-staleness-indicator\",i)}),(0,y.jsx)(\"span\",{\"data-nextjs-version-checker\":!0,title:l,children:a}),(0,y.jsx)(\"span\",{className:(0,eJ.cx)(s&&\"turbopack-text\"),children:t})]}):(0,y.jsxs)(\"span\",{className:\"nextjs-container-build-error-version-status dialog-exclude-closing-from-outside-click\",children:[(0,y.jsx)(nM,{className:(0,eJ.cx)(\"version-staleness-indicator\",i)}),(0,y.jsx)(\"span\",{\"data-nextjs-version-checker\":!0,title:l,children:a}),(0,y.jsx)(\"span\",{className:(0,eJ.cx)(s&&\"turbopack-text\"),children:t})]})}function nH(e){var n=e.runtimeErrors,t=e.activeIdx,r=e.setActiveIndex,o=e.versionInfo,a=\"Webpack\"||0;return(0,y.jsxs)(\"div\",{\"data-nextjs-error-overlay-nav\":!0,children:[(0,y.jsx)(nF,{side:\"left\",children:(0,y.jsx)(nD,{runtimeErrors:null!=n?n:[],activeIdx:null!=t?t:0,onActiveIndexChange:null!=r?r:function(){}})}),o&&(0,y.jsx)(nF,{side:\"right\",children:(0,y.jsx)(nI,{versionInfo:o,bundlerName:a})})]})}function nF(e){var n=e.children,t=e.side;return(0,y.jsxs)(\"div\",{className:\"error-overlay-notch\",\"data-side\":void 0===t?\"left\":t,children:[n,(0,y.jsx)(nU,{})]})}function nU(){return(0,y.jsxs)(\"svg\",{width:\"60\",height:\"42\",viewBox:\"0 0 60 42\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"error-overlay-notch-tail\",preserveAspectRatio:\"none\",children:[(0,y.jsxs)(\"mask\",{id:\"error_overlay_nav_mask0_2667_14687\",style:{maskType:\"alpha\"},maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"-1\",width:\"60\",height:\"43\",children:[(0,y.jsxs)(\"mask\",{id:\"error_overlay_nav_path_1_outside_1_2667_14687\",maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"-1\",width:\"60\",height:\"43\",fill:\"black\",children:[(0,y.jsx)(\"rect\",{fill:\"white\",y:\"-1\",width:\"60\",height:\"43\"}),(0,y.jsx)(\"path\",{d:\"M1 0L8.0783 0C15.772 0 22.7836 4.41324 26.111 11.3501L34.8889 29.6498C38.2164 36.5868 45.228 41 52.9217 41H60H1L1 0Z\"})]}),(0,y.jsx)(\"path\",{d:\"M1 0L8.0783 0C15.772 0 22.7836 4.41324 26.111 11.3501L34.8889 29.6498C38.2164 36.5868 45.228 41 52.9217 41H60H1L1 0Z\",fill:\"white\"}),(0,y.jsx)(\"path\",{d:\"M1 0V-1H0V0L1 0ZM1 41H0V42H1V41ZM34.8889 29.6498L33.9873 30.0823L34.8889 29.6498ZM26.111 11.3501L27.0127 10.9177L26.111 11.3501ZM1 1H8.0783V-1H1V1ZM60 40H1V42H60V40ZM2 41V0L0 0L0 41H2ZM25.2094 11.7826L33.9873 30.0823L35.7906 29.2174L27.0127 10.9177L25.2094 11.7826ZM52.9217 42H60V40H52.9217V42ZM33.9873 30.0823C37.4811 37.3661 44.8433 42 52.9217 42V40C45.6127 40 38.9517 35.8074 35.7906 29.2174L33.9873 30.0823ZM8.0783 1C15.3873 1 22.0483 5.19257 25.2094 11.7826L27.0127 10.9177C23.5188 3.6339 16.1567 -1 8.0783 -1V1Z\",fill:\"black\",mask:\"url(#error_overlay_nav_path_1_outside_1_2667_14687)\"})]}),(0,y.jsxs)(\"g\",{mask:\"url(#error_overlay_nav_mask0_2667_14687)\",children:[(0,y.jsxs)(\"mask\",{id:\"error_overlay_nav_path_3_outside_2_2667_14687\",maskUnits:\"userSpaceOnUse\",x:\"-1\",y:\"0.0244141\",width:\"60\",height:\"43\",fill:\"black\",children:[(0,y.jsx)(\"rect\",{fill:\"white\",x:\"-1\",y:\"0.0244141\",width:\"60\",height:\"43\"}),(0,y.jsx)(\"path\",{d:\"M0 1.02441H7.0783C14.772 1.02441 21.7836 5.43765 25.111 12.3746L33.8889 30.6743C37.2164 37.6112 44.228 42.0244 51.9217 42.0244H59H0L0 1.02441Z\"})]}),(0,y.jsx)(\"path\",{d:\"M0 1.02441H7.0783C14.772 1.02441 21.7836 5.43765 25.111 12.3746L33.8889 30.6743C37.2164 37.6112 44.228 42.0244 51.9217 42.0244H59H0L0 1.02441Z\",fill:\"var(--background-color)\"}),(0,y.jsx)(\"path\",{d:\"M0 1.02441L0 0.0244141H-1V1.02441H0ZM0 42.0244H-1V43.0244H0L0 42.0244ZM33.8889 30.6743L32.9873 31.1068L33.8889 30.6743ZM25.111 12.3746L26.0127 11.9421L25.111 12.3746ZM0 2.02441H7.0783V0.0244141H0L0 2.02441ZM59 41.0244H0L0 43.0244H59V41.0244ZM1 42.0244L1 1.02441H-1L-1 42.0244H1ZM24.2094 12.8071L32.9873 31.1068L34.7906 30.2418L26.0127 11.9421L24.2094 12.8071ZM51.9217 43.0244H59V41.0244H51.9217V43.0244ZM32.9873 31.1068C36.4811 38.3905 43.8433 43.0244 51.9217 43.0244V41.0244C44.6127 41.0244 37.9517 36.8318 34.7906 30.2418L32.9873 31.1068ZM7.0783 2.02441C14.3873 2.02441 21.0483 6.21699 24.2094 12.8071L26.0127 11.9421C22.5188 4.65831 15.1567 0.0244141 7.0783 0.0244141V2.02441Z\",fill:\"var(--stroke-color)\",mask:\"url(#error_overlay_nav_path_3_outside_2_2667_14687)\"})]})]})}function nV(e){var n,t,r=e.children,o=e.onClose,a=e.footer,i=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"onClose\",\"footer\"]);return(0,y.jsxs)(\"div\",{className:\"error-overlay-dialog-container\",children:[(0,y.jsx)(eZ,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"aria-labelledby\":\"nextjs__container_errors_label\",\"aria-describedby\":\"nextjs__container_errors_desc\",className:\"error-overlay-dialog-scroll\",onClose:o},i),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)),a]})}function nq(e){var n=e.children;return(0,y.jsx)(eK,{className:\"nextjs-container-errors-header\",children:n})}function nW(e){var n=e.children;return(0,y.jsx)(eY,{className:\"nextjs-container-errors-body\",children:n})}var n$=0,nZ=function(e){var r,o,a=e.className,i=e.children,l=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"className\",\"children\"]);return x.useEffect(function(){return setTimeout(function(){if(!(n$++>0)){var e=window.innerWidth-document.documentElement.clientWidth;e>0&&(n=document.body.style.paddingRight,document.body.style.paddingRight=\"\".concat(e,\"px\")),t=document.body.style.overflow,document.body.style.overflow=\"hidden\"}}),function(){setTimeout(function(){0!==n$&&0==--n$&&(void 0!==n&&(document.body.style.paddingRight=n,n=void 0),void 0!==t&&(document.body.style.overflow=t,t=void 0))})}},[]),(0,y.jsx)(\"div\",(r=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-overlay\":!0,className:a},l),o=o={children:i},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))}),r))};function nY(e){var n,t,r=e.children,o=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\"]);return(0,y.jsx)(nZ,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},o),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nX(e){var n=Math.min(e.errorCount-e.activeIdx-1,2);return(0,y.jsx)(\"div\",{\"aria-hidden\":!0,className:\"error-overlay-bottom-stack\",children:(0,y.jsxs)(\"div\",{className:\"error-overlay-bottom-stack-stack\",\"data-stack-count\":n,children:[(0,y.jsx)(\"div\",{className:\"error-overlay-bottom-stack-layer error-overlay-bottom-stack-layer-1\",children:\"1\"}),(0,y.jsx)(\"div\",{className:\"error-overlay-bottom-stack-layer error-overlay-bottom-stack-layer-2\",children:\"2\"})]})})}function nK(e){var n=e.environmentName;return(0,y.jsx)(\"span\",{\"data-nextjs-environment-name-label\":!0,children:n})}var nQ=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\"),nG=(0,x.forwardRef)(function(e,n){var t=e.stop,r=e.blur,o=e.side,a=e.style,i=e.height;return(0,y.jsx)(\"div\",{ref:n,\"aria-hidden\":!0,\"data-nextjs-scroll-fader\":!0,className:\"nextjs-scroll-fader\",\"data-side\":o,style:function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"--stop\":t,\"--blur\":r,\"--height\":\"\".concat(i,\"px\")},a)})});function nJ(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function n0(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return nJ(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return nJ(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var n1=(0,x.forwardRef)(function(e,n){var t,r,o,a,i,l,s,c,u,d,f=e.children,p=e.measure,h=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"measure\"]),g=(0,x.useRef)(null),m=n0((t=g,r=p,a=(o=n0((0,x.useState)(0),2))[0],i=o[1],s=(l=n0((0,x.useState)(!0),2))[0],c=l[1],(0,x.useEffect)(function(){if(r){var e,n=t.current;if(n){var o=new ResizeObserver(function(n){var t=n0(n,1)[0].contentRect;clearTimeout(e),e=window.setTimeout(function(){c(!1)},100),i(t.height)});return o.observe(n),function(){return o.disconnect()}}}},[r]),[a,s]),2),v=m[0],b=m[1];return(0,y.jsx)(\"div\",(u=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},h),d=d={ref:n,style:{height:b?\"auto\":v,transition:\"height 250ms var(--timing-swift)\"},children:(0,y.jsx)(\"div\",{ref:g,children:f})},Object.getOwnPropertyDescriptors?Object.defineProperties(u,Object.getOwnPropertyDescriptors(d)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(d)).forEach(function(e){Object.defineProperty(u,e,Object.getOwnPropertyDescriptor(d,e))}),u))});function n2(e){var n=e.fixed,t=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"fixed\"]);return(0,y.jsx)(\"div\",function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-backdrop\":!0,\"data-nextjs-dialog-backdrop-fixed\":!!n||void 0},t))}function n4(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function n5(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function n3(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function n6(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return n4(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return n4(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function n9(e){var n=e.errorMessage,t=e.errorType,r=e.children,o=e.errorCode,a=e.errorCount,i=e.error,l=e.debugInfo,s=e.isBuildError,c=e.onClose,u=e.versionInfo,d=e.runtimeErrors,f=e.activeIdx,p=e.setActiveIndex,h=e.isTurbopack,g=e.dialogResizerRef,m=e.rendered,v=void 0===m||m,b=e.transitionDurationMs,w={\"data-rendered\":v,style:{\"--transition-duration\":\"\".concat(b,\"ms\")}},j=n6(x.useState(!!b),2),k=j[0],A=j[1],O=x.useRef(null),C=!!o,S=x.useRef(null);return(0,nQ.P5)(S,null,v),(0,y.jsxs)(nY,n3(n5({},w),{children:[(0,y.jsx)(n2,{fixed:s}),(0,y.jsxs)(\"div\",n3(n5({\"data-nextjs-dialog-root\":!0,onTransitionEnd:function(e){var n=e.propertyName,t=e.target;\"scale\"===n&&t===S.current&&A(!1)},ref:S},w),{children:[(0,y.jsx)(nH,{runtimeErrors:d,activeIdx:f,setActiveIndex:p,versionInfo:u,isTurbopack:h}),(0,y.jsxs)(nV,{onClose:c,dialogResizerRef:g,\"data-has-footer\":C,onScroll:function(e){if(O.current){var n,t,r=(n=e.currentTarget.scrollTop/17,Math.min(Math.max(n,(t=n6([0,1],2))[0]),t[1]));O.current.style.opacity=String(r)}},footer:C&&(0,y.jsx)(nS,{errorCode:o}),children:[(0,y.jsx)(n1,{ref:g,measure:!k,\"data-nextjs-dialog-sizer\":!0,children:(0,y.jsxs)(eX,{children:[(0,y.jsxs)(nq,{children:[(0,y.jsxs)(\"div\",{className:\"nextjs__container_errors__error_title\",\"data-nextjs-error-code\":o,children:[(0,y.jsxs)(\"span\",{\"data-nextjs-error-label-group\":!0,children:[(0,y.jsx)(nL,{errorType:t}),i.environmentName&&(0,y.jsx)(nK,{environmentName:i.environmentName})]}),(0,y.jsx)(nx,{error:i,debugInfo:l})]}),(0,y.jsx)(nz,{errorMessage:n})]}),(0,y.jsx)(nW,{children:r})]})}),(0,y.jsx)(nX,{errorCount:a,activeIdx:null!=f?f:0})]}),(0,y.jsx)(nG,{ref:O,side:\"top\",stop:\"50%\",blur:\"4px\",height:48})]}))]}))}var n8=\"\\n \".concat(\"\\n [data-nextjs-dialog-overlay] {\\n padding: initial;\\n top: 10vh;\\n }\\n\",\"\\n \").concat(\"\\n .error-overlay-dialog-container {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n flex-direction: column;\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: var(--next-dialog-border-width) solid var(--color-gray-400);\\n border-radius: 0 0 var(--next-dialog-radius) var(--next-dialog-radius);\\n box-shadow: var(--shadow-menu);\\n position: relative;\\n overflow: hidden;\\n }\\n\\n .error-overlay-dialog-scroll {\\n overflow-y: auto;\\n height: 100%;\\n }\\n\",\"\\n \").concat(\"\\n .nextjs-container-errors-header {\\n position: relative;\\n }\\n .nextjs-container-errors-header > h1 {\\n font-size: var(--size-20);\\n line-height: var(--size-24);\\n font-weight: bold;\\n margin: calc(16px * 1.5) 0;\\n color: var(--color-title-h1);\\n }\\n .nextjs-container-errors-header small {\\n font-size: var(--size-14);\\n color: var(--color-accents-1);\\n margin-left: 16px;\\n }\\n .nextjs-container-errors-header small > span {\\n font-family: var(--font-stack-monospace);\\n }\\n .nextjs-container-errors-header > div > small {\\n margin: 0;\\n margin-top: 4px;\\n }\\n .nextjs-container-errors-header > p > a {\\n color: inherit;\\n font-weight: bold;\\n }\\n .nextjs-container-errors-header\\n > .nextjs-container-build-error-version-status {\\n position: absolute;\\n top: 16px;\\n right: 16px;\\n }\\n\",\"\\n \").concat(\"\",\"\\n\\n \").concat(\"\\n [data-nextjs-error-overlay-nav] {\\n --stroke-color: var(--color-gray-400);\\n --background-color: var(--color-background-100);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n\\n width: 100%;\\n\\n position: relative;\\n z-index: 2;\\n outline: none;\\n translate: var(--next-dialog-border-width) var(--next-dialog-border-width);\\n max-width: var(--next-dialog-max-width);\\n\\n .error-overlay-notch {\\n translate: calc(var(--next-dialog-border-width) * -1);\\n width: auto;\\n height: var(--next-dialog-notch-height);\\n padding: 12px;\\n background: var(--background-color);\\n border: var(--next-dialog-border-width) solid var(--stroke-color);\\n border-bottom: none;\\n position: relative;\\n\\n &[data-side='left'] {\\n padding-right: 0;\\n border-radius: var(--next-dialog-radius) 0 0 0;\\n\\n .error-overlay-notch-tail {\\n right: -54px;\\n }\\n\\n > *:not(.error-overlay-notch-tail) {\\n margin-right: -10px;\\n }\\n }\\n\\n &[data-side='right'] {\\n padding-left: 0;\\n border-radius: 0 var(--next-dialog-radius) 0 0;\\n\\n .error-overlay-notch-tail {\\n left: -54px;\\n transform: rotateY(180deg);\\n }\\n\\n > *:not(.error-overlay-notch-tail) {\\n margin-left: -12px;\\n }\\n }\\n\\n .error-overlay-notch-tail {\\n position: absolute;\\n top: calc(var(--next-dialog-border-width) * -1);\\n pointer-events: none;\\n z-index: -1;\\n height: calc(100% + var(--next-dialog-border-width));\\n }\\n }\\n }\\n\\n @media (max-width: 600px) {\\n [data-nextjs-error-overlay-nav] {\\n background: var(--background-color);\\n border-radius: var(--next-dialog-radius) var(--next-dialog-radius) 0 0;\\n border: var(--next-dialog-border-width) solid var(--stroke-color);\\n border-bottom: none;\\n overflow: hidden;\\n translate: 0 var(--next-dialog-border-width);\\n \\n .error-overlay-notch {\\n border-radius: 0;\\n border: 0;\\n\\n &[data-side=\\\"left\\\"], &[data-side=\\\"right\\\"] {\\n border-radius: 0;\\n }\\n\\n .error-overlay-notch-tail {\\n display: none;\\n }\\n }\\n }\\n }\\n\",\"\\n \").concat(\"\\n .nextjs__container_errors_label {\\n padding: 2px 6px;\\n margin: 0;\\n border-radius: var(--rounded-md-2);\\n background: var(--color-red-100);\\n font-weight: 600;\\n font-size: var(--size-12);\\n color: var(--color-red-900);\\n font-family: var(--font-stack-monospace);\\n line-height: var(--size-20);\\n }\\n\",\"\\n \").concat(\"\\n .nextjs__container_errors_wrapper {\\n position: relative;\\n }\\n\\n .nextjs__container_errors_desc {\\n margin: 0;\\n margin-left: 4px;\\n color: var(--color-red-900);\\n font-weight: 500;\\n font-size: var(--size-16);\\n letter-spacing: -0.32px;\\n line-height: var(--size-24);\\n overflow-wrap: break-word;\\n white-space: pre-wrap;\\n }\\n\\n .nextjs__container_errors_desc.truncated {\\n max-height: 200px;\\n overflow: hidden;\\n }\\n\\n .nextjs__container_errors_gradient_overlay {\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n height: 85px;\\n background: linear-gradient(\\n 180deg,\\n rgba(250, 250, 250, 0) 0%,\\n var(--color-background-100) 100%\\n );\\n }\\n\\n .nextjs__container_errors_expand_button {\\n position: absolute;\\n bottom: 10px;\\n left: 50%;\\n transform: translateX(-50%);\\n display: flex;\\n align-items: center;\\n padding: 6px 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n border-radius: 999px;\\n box-shadow:\\n 0px 2px 2px var(--color-gray-alpha-100),\\n 0px 8px 8px -8px var(--color-gray-alpha-100);\\n font-size: var(--size-13);\\n cursor: pointer;\\n color: var(--color-gray-900);\\n font-weight: 500;\\n transition: background-color 0.2s ease;\\n }\\n\\n .nextjs__container_errors_expand_button:hover {\\n background: var(--color-gray-100);\\n }\\n\",\"\\n \").concat(\"\\n .error-overlay-toolbar {\\n display: flex;\\n gap: 6px;\\n }\\n\\n .nodejs-inspector-button,\\n .copy-stack-trace-button,\\n .docs-link-button {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n\\n width: var(--size-28);\\n height: var(--size-28);\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: 1px solid var(--color-gray-alpha-400);\\n box-shadow: var(--shadow-small);\\n border-radius: var(--rounded-full);\\n\\n svg {\\n width: var(--size-14);\\n height: var(--size-14);\\n }\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n\\n &:not(:disabled):hover {\\n background: var(--color-gray-alpha-100);\\n }\\n\\n &:not(:disabled):active {\\n background: var(--color-gray-alpha-200);\\n }\\n\\n &:disabled {\\n background-color: var(--color-gray-100);\\n cursor: not-allowed;\\n }\\n }\\n\\n .error-overlay-toolbar-button-icon {\\n color: var(--color-gray-900);\\n }\\n\",\"\\n\\n [data-nextjs-error-label-group] {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n }\\n\");function n7(e){var n,t,r=e.file,o=e.location,a=eE({file:r,lineNumber:null!=(n=null==o?void 0:o.line)?n:1,column:null!=(t=null==o?void 0:o.column)?t:0});return(0,y.jsxs)(\"div\",{\"data-with-open-in-editor-link\":!0,\"data-with-open-in-editor-link-import-trace\":!0,role:\"link\",onClick:a,title:\"Click to open in your editor\",children:[r,o?\":\".concat(o.line,\":\").concat(o.column):null,(0,y.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[(0,y.jsx)(\"path\",{d:\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}),(0,y.jsx)(\"polyline\",{points:\"15 3 21 3 21 9\"}),(0,y.jsx)(\"line\",{x1:\"10\",y1:\"14\",x2:\"21\",y2:\"3\"})]})]})}function te(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var tn=function(e){var n,t,r,o,a,i,l,s,c,u,d=e.content,f=x.useMemo(function(){var e,n,t;return n=function(e){var n,t,r=e.shift();if(!r)return null;var o=(n=r.split(\":\",3),t=3,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,3)||function(e,n){if(e){if(\"string\"==typeof e)return te(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return te(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=o[2],s=Number(i),c=Number(l),u=!Number.isNaN(s)&&!Number.isNaN(c);return{fileName:u?a:r,location:u?{line:s,column:c}:void 0}}(e=d.split(\"\\n\")),t=function(e){if(e.some(function(e){return/ReactServerComponentsError:/.test(e)})||e.some(function(e){return/Import trace for requested module:/.test(e)})){for(var n=[];/.+\\..+/.test(e[e.length-1])&&!e[e.length-1].includes(\":\");){var t=e.pop().trim();n.unshift(t)}return n}return[]}(e),{file:n,source:e.join(\"\\n\"),importTraceFiles:t}},[d]),p=f.file,h=f.source,g=f.importTraceFiles,m=x.useMemo(function(){return eH().ansiToJson(h,{json:!0,use_classes:!0,remove_empty:!0})},[h]),v=eE({file:null==p?void 0:p.fileName,lineNumber:null!=(i=null==p||null==(n=p.location)?void 0:n.line)?i:1,column:null!=(l=null==p||null==(t=p.location)?void 0:t.column)?l:0}),b={file:null!=(s=null==p?void 0:p.fileName)?s:null,methodName:\"\",arguments:[],lineNumber:null!=(c=null==p||null==(r=p.location)?void 0:r.line)?c:null,column:null!=(u=null==p||null==(o=p.location)?void 0:o.column)?u:null},w=null==b||null==(a=b.file)?void 0:a.split(\".\").pop();return(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe\":!0,children:[(0,y.jsx)(\"div\",{className:\"code-frame-header\",children:(0,y.jsxs)(\"div\",{className:\"code-frame-link\",children:[(0,y.jsx)(\"span\",{className:\"code-frame-icon\",children:(0,y.jsx)(eT,{lang:w})}),(0,y.jsx)(\"span\",{\"data-text\":!0,children:eS(b)}),(0,y.jsx)(\"button\",{\"aria-label\":\"Open in editor\",\"data-with-open-in-editor-link-source-file\":!0,onClick:v,children:(0,y.jsx)(\"span\",{className:\"code-frame-icon\",\"data-icon\":\"right\",children:(0,y.jsx)(ez,{width:16,height:16})})})]})}),(0,y.jsx)(\"pre\",{className:\"code-frame-pre\",children:(0,y.jsxs)(\"div\",{className:\"code-frame-lines\",children:[m.map(function(e,n){return(0,y.jsx)(\"span\",{style:function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({color:e.fg?\"var(--color-\".concat(e.fg,\")\"):void 0},\"bold\"===e.decoration?{fontWeight:500}:\"italic\"===e.decoration?{fontStyle:\"italic\"}:void 0),children:(0,y.jsx)(eb,{text:e.content})},\"terminal-entry-\".concat(n))}),g.map(function(e){return(0,y.jsx)(n7,{isSourceFile:!1,file:e},e)})]})})]})},tt=function(e){var n=e.split(\"\\n\");return eU()(n[1]||\"\").replace(/^Error: /,\"\")},tr=function(e){var n,t,r=e.message,o=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"message\"]),a=(0,x.useCallback)(function(){},[]),i=Error(r),l=(0,x.useMemo)(function(){return tt(r)||\"Failed to compile\"},[r]);return(0,y.jsx)(n9,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({errorType:\"Build Error\",errorMessage:l,onClose:a,error:i},o),t=t={children:(0,y.jsx)(tn,{content:r})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))},to=function(e){var n,t=e.frame,r=null!=(n=t.originalStackFrame)?n:t.sourceStackFrame,o=!!t.originalCodeFrame,a=eE(o?{file:r.file,lineNumber:r.lineNumber,column:r.column}:void 0),i=eS(r);return i?(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-frame\":!0,\"data-nextjs-call-stack-frame-no-source\":!o,\"data-nextjs-call-stack-frame-ignored\":t.ignored,children:[(0,y.jsxs)(\"div\",{className:\"call-stack-frame-method-name\",children:[(0,y.jsx)(eb,{text:r.methodName}),o&&(0,y.jsx)(\"button\",{onClick:a,className:\"open-in-editor-button\",\"aria-label\":\"Open \".concat(r.methodName,\" in editor\"),children:(0,y.jsx)(ez,{width:16,height:16})}),t.error?(0,y.jsx)(\"button\",{className:\"source-mapping-error-button\",onClick:function(){return console.error(t.reason)},title:\"Sourcemapping failed. Click to log cause of error.\",children:(0,y.jsx)(eL,{width:16,height:16})}):null]}),(0,y.jsx)(\"span\",{className:\"call-stack-frame-file-source\",\"data-has-source\":o,children:i})]}):null};function ta(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.70722 2.39641C8.3167 2.00588 7.68353 2.00588 7.29301 2.39641L4.46978 5.21963L3.93945 5.74996L5.00011 6.81062L5.53044 6.28029L8.00011 3.81062L10.4698 6.28029L11.0001 6.81062L12.0608 5.74996L11.5304 5.21963L8.70722 2.39641ZM5.53044 9.71963L5.00011 9.1893L3.93945 10.25L4.46978 10.7803L7.29301 13.6035C7.68353 13.994 8.3167 13.994 8.70722 13.6035L11.5304 10.7803L12.0608 10.25L11.0001 9.1893L10.4698 9.71963L8.00011 12.1893L5.53044 9.71963Z\",fill:\"currentColor\"})})}function ti(){var e,n,t=(e=[\"\\n [data-nextjs-call-stack-container] {\\n position: relative;\\n margin-top: 8px;\\n }\\n\\n [data-nextjs-call-stack-header] {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n min-height: var(--size-28);\\n padding: 8px 8px 12px 4px;\\n width: 100%;\\n }\\n\\n [data-nextjs-call-stack-title] {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n gap: 8px;\\n\\n margin: 0;\\n\\n color: var(--color-gray-1000);\\n font-size: var(--size-16);\\n font-weight: 500;\\n }\\n\\n [data-nextjs-call-stack-count] {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n\\n width: var(--size-20);\\n height: var(--size-20);\\n gap: 4px;\\n\\n color: var(--color-gray-1000);\\n text-align: center;\\n font-size: var(--size-11);\\n font-weight: 500;\\n line-height: var(--size-16);\\n\\n border-radius: var(--rounded-full);\\n background: var(--color-gray-300);\\n }\\n\\n [data-nextjs-call-stack-ignored-list-toggle-button] {\\n all: unset;\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n border-radius: 6px;\\n padding: 4px 6px;\\n margin-right: -6px;\\n transition: background 150ms ease;\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ti=function(){return t},t}function tl(e){var n=e.frames,t=e.isIgnoreListOpen,r=e.ignoredFramesTally,o=e.onToggleIgnoreList;return(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-container\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-header\":!0,children:[(0,y.jsxs)(\"p\",{\"data-nextjs-call-stack-title\":!0,children:[\"Call Stack \",(0,y.jsx)(\"span\",{\"data-nextjs-call-stack-count\":!0,children:n.length})]}),r>0&&(0,y.jsxs)(\"button\",{\"data-nextjs-call-stack-ignored-list-toggle-button\":t,onClick:o,children:[\"\".concat(t?\"Hide\":\"Show\",\" \").concat(r,\" ignore-listed frame(s)\"),(0,y.jsx)(ta,{})]})]}),n.map(function(e,n){return!e.ignored||t?(0,y.jsx)(to,{frame:e},n):null})]})}var ts=ei(ti());function tc(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tu(e){var n,t,r=e.frames,o=e.dialogResizerRef,a=(0,x.useRef)(NaN),i=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return tc(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tc(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),l=i[0],s=i[1],c=(0,x.useMemo)(function(){return r.reduce(function(e,n){return e+ +!!n.ignored},0)},[r]);return(0,y.jsx)(tl,{frames:r,isIgnoreListOpen:l,onToggleIgnoreList:function(){var e=null==o?void 0:o.current;if(e){var n=(null==e?void 0:e.getBoundingClientRect()).height;a.current||(a.current=n),l?(e.style.height=\"\".concat(a.current,\"px\"),e.addEventListener(\"transitionend\",function n(){e.removeEventListener(\"transitionend\",n),s(!1)})):s(!0)}},ignoredFramesTally:c})}function td(){var e,n,t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).collapsed;return(0,y.jsx)(\"svg\",(e=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-call-stack-chevron-icon\":!0,\"data-collapsed\":t,width:\"16\",height:\"16\",fill:\"none\"},\"boolean\"==typeof t?{style:{transform:t?void 0:\"rotate(90deg)\"}}:{}),n=n={children:(0,y.jsx)(\"path\",{style:{fill:\"var(--color-font)\"},fillRule:\"evenodd\",d:\"m6.75 3.94.53.53 2.824 2.823a1 1 0 0 1 0 1.414L7.28 11.53l-.53.53L5.69 11l.53-.53L8.69 8 6.22 5.53 5.69 5l1.06-1.06Z\",clipRule:\"evenodd\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e))}function tf(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tp(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return tf(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tf(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function th(e){var n=e.reactOutputComponentDiff,t=tp((0,x.useState)(!0),2),r=t[0],o=t[1],a=(0,x.useMemo)(function(){var e=[];return n.split(\"\\n\").forEach(function(n,t){var r,o,a=\"+\"===n[0]||\"-\"===n[0],i=\">\"===n[0],l=a||i,s=l?n[0]:\"\",c=l?n.indexOf(s):-1,u=tp(l?[n.slice(0,c),n.slice(c+1)]:[n,\"\"],2),d=u[0],f=u[1];a?e.push((0,y.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line\":!0,\"data-nextjs-container-errors-pseudo-html--diff\":\"+\"===s?\"add\":\"remove\",children:(0,y.jsxs)(\"span\",{children:[d,(0,y.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line-sign\":!0,children:s}),f,\"\\n\"]})},\"comp-diff\"+t)):e.push((0,y.jsxs)(\"span\",(r=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-container-errors-pseudo-html-line\":!0},i?{\"data-nextjs-container-errors-pseudo-html--diff\":\"error\"}:void 0),o=o={children:[d,(0,y.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line-sign\":!0,children:s}),f,\"\\n\"]},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))}),r),\"comp-diff\"+t))}),e},[n]);return(0,y.jsxs)(\"div\",{\"data-nextjs-container-errors-pseudo-html\":!0,\"data-nextjs-container-errors-pseudo-html-collapse\":r,children:[(0,y.jsx)(\"button\",{\"aria-expanded\":!r,\"aria-label\":\"complete Component Stack\",\"data-nextjs-container-errors-pseudo-html-collapse-button\":!0,onClick:function(){return o(!r)},children:(0,y.jsx)(td,{collapsed:r})}),(0,y.jsx)(\"pre\",{className:\"nextjs__container_errors__component-stack\",children:(0,y.jsx)(\"code\",{children:a})})]})}var tg=Symbol.for(\"NextjsError\");function tm(e){return e[tg]||null}function tv(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function tb(e){return function(){var n=this,t=arguments;return new Promise(function(r,o){var a=e.apply(n,t);function i(e){tv(a,r,o,i,l,\"next\",e)}function l(e){tv(a,r,o,i,l,\"throw\",e)}i(void 0)})}}function ty(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function tx(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function tw(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var tj=function(e){if(\"use\"in x){var n=e.frames;if(\"function\"!=typeof n)throw Error(\"Invariant: frames must be a function when the React version has React.use. This is a bug in Next.js.\");return x.use(n())}if(!Array.isArray(e.frames))throw Error(\"Invariant: frames must be an array when the React version does not have React.use. This is a bug in Next.js.\");return e.frames};function tk(e){var n=e.error,t=e.dialogResizerRef,r=tj(n),o=(0,x.useMemo)(function(){var e,n=r.findIndex(function(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame});return null!=(e=r[n])?e:null},[r]);return(0,y.jsxs)(y.Fragment,{children:[o&&(0,y.jsx)(eq,{stackFrame:o.originalStackFrame,codeFrame:o.originalCodeFrame}),r.length>0&&(0,y.jsx)(tu,{dialogResizerRef:t,frames:r})]})}var tA=\"\\n \".concat(\"\\n [data-nextjs-container-errors-pseudo-html] {\\n padding: 8px 0;\\n margin: 8px 0;\\n border: 1px solid var(--color-gray-400);\\n background: var(--color-background-200);\\n color: var(--color-syntax-constant);\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-12);\\n line-height: 1.33em; /* 16px in 12px font size */\\n border-radius: var(--rounded-md-2);\\n }\\n [data-nextjs-container-errors-pseudo-html-line] {\\n display: inline-block;\\n width: 100%;\\n padding-left: 40px;\\n line-height: calc(5 / 3);\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='error'] {\\n background: var(--color-amber-100);\\n box-shadow: 2px 0 0 0 var(--color-amber-900) inset;\\n font-weight: bold;\\n }\\n [data-nextjs-container-errors-pseudo-html-collapse-button] {\\n all: unset;\\n margin-left: 12px;\\n &:focus {\\n outline: none;\\n }\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='add'] {\\n background: var(--color-green-300);\\n }\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n margin-left: calc(24px * -1);\\n margin-right: 24px;\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='add']\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n color: var(--color-green-900);\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='remove'] {\\n background: var(--color-red-300);\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='remove']\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n color: var(--color-red-900);\\n margin-left: calc(24px * -1);\\n margin-right: 24px;\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='error']\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n color: var(--color-amber-900);\\n }\\n \\n [data-nextjs-container-errors-pseudo-html--hint] {\\n display: inline-block;\\n font-size: 0;\\n height: 0;\\n }\\n [data-nextjs-container-errors-pseudo-html--tag-adjacent='false'] {\\n color: var(--color-accents-1);\\n }\\n .nextjs__container_errors__component-stack {\\n margin: 0;\\n }\\n [data-nextjs-container-errors-pseudo-html-collapse='true']\\n .nextjs__container_errors__component-stack\\n code {\\n max-height: 120px;\\n mask-image: linear-gradient(to bottom,rgba(0,0,0,0) 0%,black 10%);\\n padding-bottom: 40px;\\n }\\n .nextjs__container_errors__component-stack code {\\n display: block;\\n width: 100%;\\n white-space: pre-wrap;\\n scroll-snap-type: y mandatory;\\n overflow-y: hidden;\\n }\\n [data-nextjs-container-errors-pseudo-html--diff] {\\n scroll-snap-align: center;\\n }\\n .error-overlay-hydration-error-diff-plus-icon {\\n color: var(--color-green-900);\\n }\\n .error-overlay-hydration-error-diff-minus-icon {\\n color: var(--color-red-900);\\n }\\n\",\"\\n\");function tO(e){return e&&\"undefined\"!=typeof Symbol&&e.constructor===Symbol?\"symbol\":typeof e}function tC(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tS(e){var n,t,r,o,a,i=e.runtimeErrors,l=e.getSquashedHydrationErrorDetails,s=(r=(0,x.useState)(0),o=2,function(e){if(Array.isArray(e))return e}(r)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(r,2)||function(e,n){if(e){if(\"string\"==typeof e)return tC(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tC(e,n)}}(r,o)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),c=s[0],u=s[1],d=(0,x.useMemo)(function(){return 0===i.length},[i.length]),f=(0,x.useMemo)(function(){var e;return null!=(e=i[c])?e:null},[c,i]),p=(n=null==f?void 0:f.error,t=l,(0,x.useMemo)(function(){if(void 0===n)return tL;var e,r,o,a=t(n);if(null!==a)return{hydrationWarning:null!=(r=a.warning)?r:null,notes:null,reactOutputComponentDiff:null!=(o=a.reactOutputComponentDiff)?o:null};if(!(ng((e=n).message)||/Hydration failed because the server rendered (text|HTML) didn't match the client\\./.test(e.message)||/A tree hydrated but some attributes of the server rendered HTML didn't match the client properties./.test(e.message)))return tL;var i=function(e){var n=e.message;if(ng(n)){var t=nc(n.split(\"\\n\\n\"),2),r=t[0],o=t[1],a=(void 0===o?\"\":o).trim();return{message:\"\"===a?n.trim():r.trim(),diff:a,notes:null}}var i=nc(n.split(\"\".concat(nf)),2),l=i[0],s=i[1],c=l.trim();if(void 0!==s&&s.length>1){var u=[];s.split(\"\\n\").forEach(function(e){\"\"!==e.trim()&&(e.trim().startsWith(\"at \")||u.push(e))});var d=nu(c.split(\"\\n\\n\")),f=d[0],p=d.slice(1);return{message:f,diff:u.join(\"\\n\"),notes:p.join(\"\\n\\n\")||null}}var h=nu(c.split(\"\\n\\n\"));return{message:h[0],diff:null,notes:h.slice(1).join(\"\\n\\n\")}}(n),l=i.message,s=i.notes,c=i.diff;return null===l?tL:{hydrationWarning:l,notes:s,reactOutputComponentDiff:c}},[n,t]));if(d||!f)return{isLoading:d,activeIdx:c,setActiveIndex:u,activeError:null,errorDetails:null,errorCode:null,errorType:null,notes:null,hydrationWarning:null};var h=f.error,g=(void 0===(a=h)?\"undefined\":tO(a))===\"object\"&&null!==a&&\"__NEXT_ERROR_CODE\"in a&&\"string\"==typeof a.__NEXT_ERROR_CODE?a.__NEXT_ERROR_CODE:(void 0===a?\"undefined\":tO(a))===\"object\"&&null!==a&&\"digest\"in a&&\"string\"==typeof a.digest?a.digest.split(\"@\").find(function(e){return e.startsWith(\"E\")}):void 0,m=tz(h,f.type),v=p.notes,b=p.hydrationWarning;return{isLoading:d,activeIdx:c,setActiveIndex:u,activeError:f,errorDetails:p,errorCode:g,errorType:m,notes:v,hydrationWarning:b}}function tE(e){return e.startsWith(\"https://nextjs.org\")}function t_(e){var n=e.message;return(0,y.jsx)(eb,{text:n,matcher:tE})}function tP(e){var n=e.error,t=\"environmentName\"in n?n.environmentName:\"\",r=t?\"[ \".concat(t,\" ] \"):\"\",o=n.message;return o.startsWith(r)&&(o=o.slice(r.length)),(0,y.jsx)(y.Fragment,{children:(0,y.jsx)(eb,{text:o,matcher:tE})})}function tz(e,n){return\"recoverable\"===n?\"Recoverable \".concat(e.name):\"console\"===n?\"Console \".concat(e.name):\"Runtime \".concat(e.name)}var tL={hydrationWarning:null,notes:null,reactOutputComponentDiff:null};function tT(e){var n,t,r=e.getSquashedHydrationErrorDetails,o=e.runtimeErrors,a=e.debugInfo,i=e.onClose,l=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"getSquashedHydrationErrorDetails\",\"runtimeErrors\",\"debugInfo\",\"onClose\"]),s=(0,x.useRef)(null),c=tS({runtimeErrors:o,getSquashedHydrationErrorDetails:r}),u=c.isLoading,d=c.errorCode,f=c.errorType,p=c.notes,h=c.hydrationWarning,g=c.activeIdx,m=c.errorDetails,v=c.activeError,b=c.setActiveIndex;if(u)return(0,y.jsx)(nZ,{children:(0,y.jsx)(n2,{})});if(!v)return null;var w=v.error,j=[\"server\",\"edge-server\"].includes(tm(w)||\"\");return(0,y.jsxs)(n9,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({errorCode:d,errorType:f,errorMessage:h?(0,y.jsx)(t_,{message:h}):(0,y.jsx)(tP,{error:w}),onClose:j?void 0:i,debugInfo:a,error:w,runtimeErrors:o,activeIdx:g,setActiveIndex:b,dialogResizerRef:s},l),t=t={children:[(0,y.jsxs)(\"div\",{className:\"error-overlay-notes-container\",children:[p?(0,y.jsx)(y.Fragment,{children:(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__notes\",className:\"nextjs__container_errors__notes\",children:p})}):null,h?(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__link\",className:\"nextjs__container_errors__link\",children:(0,y.jsx)(eb,{text:\"See more info here: \".concat(np)})}):null]}),m.reactOutputComponentDiff?(0,y.jsx)(th,{reactOutputComponentDiff:m.reactOutputComponentDiff||\"\"}):null,(0,y.jsx)(x.Suspense,{fallback:(0,y.jsx)(\"div\",{\"data-nextjs-error-suspended\":!0}),children:(0,y.jsx)(tk,{error:v,dialogResizerRef:s},v.id.toString())})]},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}var tR=x.forwardRef(function(e,n){var t,r,o=e.onClick,a=e.children,i=e.className,l=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"onClick\",\"children\",\"className\"]);return(0,y.jsx)(\"div\",(t=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},l),r=r={ref:n,onClick:function(e){return e.target.closest(\"a\")||e.preventDefault(),null==o?void 0:o()},className:(0,eJ.cx)(\"nextjs-toast\",i),children:a},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))});function tN(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tD(e){var n,t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:750,o=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return tN(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tN(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=(0,x.useRef)(null),s=(0,x.useRef)(null);return(0,x.useEffect)(function(){if(s.current&&(clearTimeout(s.current),s.current=null),e)null===l.current&&(l.current=Date.now()),i(!0);else if(null===l.current)i(!1);else{var n=Date.now()-l.current,t=r*Math.ceil(n/r)-n;t>0?s.current=setTimeout(function(){i(!1),l.current=null},t):(i(!1),l.current=null)}return function(){s.current&&clearTimeout(s.current)}},[e,r]),a}function tB(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tM(e){var n,t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=(0,x.useRef)(null),a=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return tB(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tB(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),i=a[0],l=a[1];return(0,x.useEffect)(function(){if(e>0){var n=o.current?Date.now()-o.current:-1;if(o.current=Date.now(),!(n<=r)){l(!0);var t=window.setTimeout(function(){l(!1)},r);return function(){clearTimeout(t)}}}},[e,r]),i}function tI(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tH(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return tI(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tI(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function tF(e){var n=tH((0,x.useState)(0),2),t=n[0],r=n[1];return(0,x.useEffect)(function(){var n=e.current;if(n){var t=new ResizeObserver(function(e){r(tH(e,1)[0].contentRect.width)});return t.observe(n),function(){return t.disconnect()}}},[e]),t}function tU(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tV(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function tq(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function tW(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function t$(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return tU(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tU(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function tZ(){var e,n,t=(e=[\"\\n [data-next-badge-root] {\\n --timing: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n --duration-long: 250ms;\\n --color-outer-border: #171717;\\n --color-inner-border: hsla(0, 0%, 100%, 0.14);\\n --color-hover-alpha-subtle: hsla(0, 0%, 100%, 0.13);\\n --color-hover-alpha-error: hsla(0, 0%, 100%, 0.2);\\n --color-hover-alpha-error-2: hsla(0, 0%, 100%, 0.25);\\n --mark-size: calc(var(--size) - var(--size-2) * 2);\\n\\n --focus-color: var(--color-blue-800);\\n --focus-ring: 2px solid var(--focus-color);\\n\\n &:has([data-next-badge][data-error='true']) {\\n --focus-color: #fff;\\n }\\n }\\n\\n [data-disabled-icon] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding-right: 4px;\\n }\\n\\n [data-next-badge] {\\n -webkit-font-smoothing: antialiased;\\n width: var(--size);\\n height: var(--size);\\n display: flex;\\n align-items: center;\\n position: relative;\\n background: rgba(0, 0, 0, 0.8);\\n box-shadow:\\n 0 0 0 1px var(--color-outer-border),\\n inset 0 0 0 1px var(--color-inner-border),\\n 0px 16px 32px -8px rgba(0, 0, 0, 0.24);\\n backdrop-filter: blur(48px);\\n border-radius: var(--rounded-full);\\n user-select: none;\\n cursor: pointer;\\n scale: 1;\\n overflow: hidden;\\n will-change: scale, box-shadow, width, background;\\n transition:\\n scale var(--duration-short) var(--timing),\\n width var(--duration-long) var(--timing),\\n box-shadow var(--duration-long) var(--timing),\\n background var(--duration-short) ease;\\n\\n &:active[data-error='false'] {\\n scale: 0.95;\\n }\\n\\n &[data-animate='true']:not(:hover) {\\n scale: 1.02;\\n }\\n\\n &[data-error='false']:has([data-next-mark]:focus-visible) {\\n outline: var(--focus-ring);\\n outline-offset: 3px;\\n }\\n\\n &[data-error='true'] {\\n background: #ca2a30;\\n --color-inner-border: #e5484d;\\n\\n [data-next-mark] {\\n background: var(--color-hover-alpha-error);\\n outline-offset: 0px;\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n &:hover {\\n background: var(--color-hover-alpha-error-2);\\n }\\n }\\n }\\n\\n &[data-error-expanded='false'][data-error='true'] ~ [data-dot] {\\n scale: 1;\\n }\\n\\n > div {\\n display: flex;\\n }\\n }\\n\\n [data-issues-collapse]:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n [data-issues]:has([data-issues-open]:focus-visible) {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n [data-dot] {\\n content: '';\\n width: var(--size-8);\\n height: var(--size-8);\\n background: #fff;\\n box-shadow: 0 0 0 1px var(--color-outer-border);\\n border-radius: 50%;\\n position: absolute;\\n top: 2px;\\n right: 0px;\\n scale: 0;\\n pointer-events: none;\\n transition: scale 200ms var(--timing);\\n transition-delay: var(--duration-short);\\n }\\n\\n [data-issues] {\\n --padding-left: 8px;\\n display: flex;\\n gap: 2px;\\n align-items: center;\\n padding-left: 8px;\\n padding-right: 8px;\\n height: var(--size-32);\\n margin-right: 2px;\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-short) ease;\\n\\n &:has([data-issues-open]:hover) {\\n background: var(--color-hover-alpha-error);\\n }\\n\\n &:has([data-issues-collapse]) {\\n padding-right: calc(var(--padding-left) / 2);\\n }\\n\\n [data-cross] {\\n translate: 0px -1px;\\n }\\n }\\n\\n [data-issues-open] {\\n font-size: var(--size-13);\\n color: white;\\n width: fit-content;\\n height: 100%;\\n display: flex;\\n gap: 2px;\\n align-items: center;\\n margin: 0;\\n line-height: var(--size-36);\\n font-weight: 500;\\n z-index: 2;\\n white-space: nowrap;\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n }\\n\\n [data-issues-collapse] {\\n width: var(--size-24);\\n height: var(--size-24);\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-short) ease;\\n\\n &:hover {\\n background: var(--color-hover-alpha-error);\\n }\\n }\\n\\n [data-cross] {\\n color: #fff;\\n width: var(--size-12);\\n height: var(--size-12);\\n }\\n\\n [data-next-mark] {\\n width: var(--mark-size);\\n height: var(--mark-size);\\n margin: 0 2px;\\n display: flex;\\n align-items: center;\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-long) var(--timing);\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n\\n &:hover {\\n background: var(--color-hover-alpha-subtle);\\n }\\n\\n svg {\\n flex-shrink: 0;\\n width: var(--size-40);\\n height: var(--size-40);\\n }\\n }\\n\\n [data-issues-count-animation] {\\n display: grid;\\n place-items: center center;\\n font-variant-numeric: tabular-nums;\\n\\n &[data-animate='false'] {\\n [data-issues-count-exit],\\n [data-issues-count-enter] {\\n animation-duration: 0ms;\\n }\\n }\\n\\n > * {\\n grid-area: 1 / 1;\\n }\\n\\n [data-issues-count-exit] {\\n animation: fadeOut 300ms var(--timing) forwards;\\n }\\n\\n [data-issues-count-enter] {\\n animation: fadeIn 300ms var(--timing) forwards;\\n }\\n }\\n\\n [data-issues-count-plural] {\\n display: inline-block;\\n &[data-animate='true'] {\\n animation: fadeIn 300ms var(--timing) forwards;\\n }\\n }\\n\\n .path0 {\\n animation: draw0 1.5s ease-in-out infinite;\\n }\\n\\n .path1 {\\n animation: draw1 1.5s ease-out infinite;\\n animation-delay: 0.3s;\\n }\\n\\n .paused {\\n stroke-dashoffset: 0;\\n }\\n\\n @keyframes fadeIn {\\n 0% {\\n opacity: 0;\\n filter: blur(2px);\\n transform: translateY(8px);\\n }\\n 100% {\\n opacity: 1;\\n filter: blur(0px);\\n transform: translateY(0);\\n }\\n }\\n\\n @keyframes fadeOut {\\n 0% {\\n opacity: 1;\\n filter: blur(0px);\\n transform: translateY(0);\\n }\\n 100% {\\n opacity: 0;\\n transform: translateY(-12px);\\n filter: blur(2px);\\n }\\n }\\n\\n @keyframes draw0 {\\n 0%,\\n 25% {\\n stroke-dashoffset: -29.6;\\n }\\n 25%,\\n 50% {\\n stroke-dashoffset: 0;\\n }\\n 50%,\\n 75% {\\n stroke-dashoffset: 0;\\n }\\n 75%,\\n 100% {\\n stroke-dashoffset: 29.6;\\n }\\n }\\n\\n @keyframes draw1 {\\n 0%,\\n 20% {\\n stroke-dashoffset: -11.6;\\n }\\n 20%,\\n 50% {\\n stroke-dashoffset: 0;\\n }\\n 50%,\\n 75% {\\n stroke-dashoffset: 0;\\n }\\n 75%,\\n 100% {\\n stroke-dashoffset: 11.6;\\n }\\n }\\n\\n @media (prefers-reduced-motion) {\\n [data-issues-count-exit],\\n [data-issues-count-enter],\\n [data-issues-count-plural] {\\n animation-duration: 0ms !important;\\n }\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return tZ=function(){return t},t}var tY=(0,x.forwardRef)(function(e,n){var t=e.disabled,r=e.issueCount,o=e.isDevBuilding,a=e.isDevRendering,i=e.isBuildError,l=e.onTriggerClick,s=e.toggleErrorOverlay,c=e.scale,u=tW(e,[\"disabled\",\"issueCount\",\"isDevBuilding\",\"isDevRendering\",\"isBuildError\",\"onTriggerClick\",\"toggleErrorOverlay\",\"scale\"]),d=r>0,f=t$((0,x.useState)(d),2),p=f[0],h=f[1],g=t$((0,x.useState)(!1),2),m=g[0],v=g[1],b=tM(r,150),w=(0,x.useRef)(null),j=(0,x.useRef)(null),k=tF(j),A=tD(o||a),O=p||t;return(0,x.useEffect)(function(){h(d)},[d]),(0,y.jsxs)(\"div\",{\"data-next-badge-root\":!0,style:{\"--size\":\"\".concat(36/(void 0===c?1:c),\"px\"),\"--duration-short\":\"\".concat(150,\"ms\"),display:t&&(!d||m)?\"none\":\"block\"},children:[(0,y.jsx)(\"style\",{children:ei(tZ())}),(0,y.jsx)(\"div\",{\"data-next-badge\":!0,\"data-error\":d,\"data-error-expanded\":O,\"data-animate\":b,style:{width:0===k?\"auto\":k},children:(0,y.jsxs)(\"div\",{ref:j,children:[!t&&(0,y.jsx)(\"button\",tq(tV({ref:function(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];var r=n.filter(Boolean);return r.length<=1?r[0]||null:function(e){var n=!0,t=!1,o=void 0;try{for(var a,i=r[Symbol.iterator]();!(n=(a=i.next()).done);n=!0){var l=a.value;\"function\"==typeof l?l(e):l&&(l.current=e)}}catch(e){t=!0,o=e}finally{try{n||null==i.return||i.return()}finally{if(t)throw o}}}}(w,n),\"data-next-mark\":!0,\"data-next-mark-loading\":A,onClick:l},u),{children:(0,y.jsx)(tK,{isLoading:A,isDevBuilding:o})})),O&&(0,y.jsxs)(\"div\",{\"data-issues\":!0,children:[(0,y.jsxs)(\"button\",{\"data-issues-open\":!0,\"aria-label\":\"Open issues overlay\",onClick:s,children:[t&&(0,y.jsx)(\"div\",{\"data-disabled-icon\":!0,children:(0,y.jsx)(tQ,{})}),(0,y.jsx)(tX,{animate:b,\"data-issues-count-animation\":!0,children:r},r),\" \",(0,y.jsxs)(\"div\",{children:[\"Issue\",r>1&&(0,y.jsx)(\"span\",{\"aria-hidden\":!0,\"data-issues-count-plural\":!0,\"data-animate\":b&&2===r,children:\"s\"})]})]}),!i&&(0,y.jsx)(\"button\",{\"data-issues-collapse\":!0,\"aria-label\":\"Collapse issues badge\",onClick:function(){var e;t?v(!0):h(!1),null==(e=w.current)||e.focus()},children:(0,y.jsx)(tG,{\"data-cross\":!0})})]})]})}),(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-dot\":!0})]})});function tX(e){var n=e.children,t=e.animate,r=tW(e,[\"children\",\"animate\"]);return(0,y.jsxs)(\"div\",tq(tV({},r),{\"data-animate\":void 0===t||t,children:[(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-issues-count-exit\":!0,children:n-1}),(0,y.jsx)(\"div\",{\"data-issues-count\":!0,\"data-issues-count-enter\":!0,children:n})]}))}function tK(e){var n=e.isLoading,t=e.isDevBuilding?\"rgba(255,255,255,0.7)\":\"white\";return(0,y.jsxs)(\"svg\",{width:\"40\",height:\"40\",viewBox:\"0 0 40 40\",fill:\"none\",\"data-next-mark-loading\":n,children:[(0,y.jsxs)(\"g\",{transform:\"translate(8.5, 13)\",children:[(0,y.jsx)(\"path\",{className:n?\"path0\":\"paused\",d:\"M13.3 15.2 L2.34 1 V12.6\",fill:\"none\",stroke:\"url(#next_logo_paint0_linear_1357_10853)\",strokeWidth:\"1.86\",mask:\"url(#next_logo_mask0)\",strokeDasharray:\"29.6\",strokeDashoffset:\"29.6\"}),(0,y.jsx)(\"path\",{className:n?\"path1\":\"paused\",d:\"M11.825 1.5 V13.1\",strokeWidth:\"1.86\",stroke:\"url(#next_logo_paint1_linear_1357_10853)\",strokeDasharray:\"11.6\",strokeDashoffset:\"11.6\"})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint0_linear_1357_10853\",x1:\"9.95555\",y1:\"11.1226\",x2:\"15.4778\",y2:\"17.9671\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"0.604072\",stopColor:t,stopOpacity:\"0\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint1_linear_1357_10853\",x1:\"11.8222\",y1:\"1.40039\",x2:\"11.791\",y2:\"9.62542\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"mask\",{id:\"next_logo_mask0\",children:[(0,y.jsx)(\"rect\",{width:\"100%\",height:\"100%\",fill:\"white\"}),(0,y.jsx)(\"rect\",{width:\"5\",height:\"1.5\",fill:\"black\"})]})]})]})}function tQ(){return(0,y.jsx)(\"svg\",{width:\"12\",height:\"12\",viewBox:\"0 0 12 12\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.98071 1.125L1.125 3.98071L1.125 8.01929L3.98071 10.875H8.01929L10.875 8.01929V3.98071L8.01929 1.125H3.98071ZM3.82538 0C3.62647 0 3.4357 0.0790176 3.29505 0.21967L0.21967 3.29505C0.0790176 3.4357 0 3.62647 0 3.82538V8.17462C0 8.37353 0.0790178 8.5643 0.21967 8.70495L3.29505 11.7803C3.4357 11.921 3.62647 12 3.82538 12H8.17462C8.37353 12 8.5643 11.921 8.70495 11.7803L11.7803 8.70495C11.921 8.5643 12 8.37353 12 8.17462V3.82538C12 3.62647 11.921 3.4357 11.7803 3.29505L8.70495 0.21967C8.5643 0.0790177 8.37353 0 8.17462 0H3.82538ZM6.5625 2.8125V3.375V6V6.5625H5.4375V6V3.375V2.8125H6.5625ZM6 9C6.41421 9 6.75 8.66421 6.75 8.25C6.75 7.83579 6.41421 7.5 6 7.5C5.58579 7.5 5.25 7.83579 5.25 8.25C5.25 8.66421 5.58579 9 6 9Z\",fill:\"#EAEAEA\"})})}function tG(e){return(0,y.jsx)(\"svg\",tq(tV({width:\"12\",height:\"12\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.08889 11.8384L2.62486 12.3024L1.69678 11.3744L2.16082 10.9103L6.07178 6.99937L2.16082 3.08841L1.69678 2.62437L2.62486 1.69629L3.08889 2.16033L6.99986 6.07129L10.9108 2.16033L11.3749 1.69629L12.3029 2.62437L11.8389 3.08841L7.92793 6.99937L11.8389 10.9103L12.3029 11.3744L11.3749 12.3024L10.9108 11.8384L6.99986 7.92744L3.08889 11.8384Z\",fill:\"currentColor\"})}))}var tJ=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/hooks/use-delayed-render.ts\"),t0=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/dev-tools-info.tsx\");function t1(e){var n,t;return(0,y.jsxs)(t0.x,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({title:\"Turbopack\",learnMoreLink:\"https://nextjs.org/docs/app/api-reference/turbopack\"},e),t=t={children:[(0,y.jsxs)(\"article\",{className:\"dev-tools-info-article\",children:[(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"Turbopack is an incremental bundler optimized for JavaScript and TypeScript, written in Rust, and built into Next.js. Turbopack can be used in Next.js in both the\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"pages\"}),\" and\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"app\"}),\" directories for faster local development.\"]}),(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"To enable Turbopack, use the\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"--turbopack\"}),\" flag when running the Next.js development server.\"]})]}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-container\",children:(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block\",children:[(0,y.jsx)(e3,{actionLabel:\"Copy Next.js Turbopack Command\",successLabel:\"Next.js Turbopack Command Copied\",content:\"--turbopack\",className:\"dev-tools-info-copy-button\"}),(0,y.jsx)(\"pre\",{className:\"dev-tools-info-code-block-pre\",children:(0,y.jsxs)(\"code\",{children:[(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\" \"}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"{\"}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"scripts\"'}),\": \",\"{\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line dev-tools-info-highlight\",children:[\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"dev\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next dev --turbopack\"'}),\",\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"build\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next build\"'}),\",\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"start\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next start\"'}),\",\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"lint\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next lint\"'})]}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\" }\"}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"}\"}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\" \"})]})})]})})]},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function t2(e){var n=e.routerType;return(0,y.jsxs)(\"article\",{className:\"dev-tools-info-article\",children:[(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"The path\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:window.location.pathname}),\" \",'is marked as \"static\" since it will be prerendered during the build time.']}),(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"With Static Rendering, routes are rendered at build time, or in the background after\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"pages\"===n?\"https://nextjs.org/docs/pages/building-your-application/data-fetching/incremental-static-regeneration\":\"https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"data revalidation\"}),\".\"]}),(0,y.jsx)(\"p\",{className:\"dev-tools-info-paragraph\",children:\"Static rendering is useful when a route has data that is not personalized to the user and can be known at build time, such as a static blog post or a product page.\"})]})}function t4(e){var n=e.routerType;return(0,y.jsxs)(\"article\",{className:\"dev-tools-info-article\",children:[(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"The path\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:window.location.pathname}),\" \",'is marked as \"dynamic\" since it will be rendered for each user at',\" \",(0,y.jsx)(\"strong\",{children:\"request time\"}),\".\"]}),(0,y.jsx)(\"p\",{className:\"dev-tools-info-paragraph\",children:\"Dynamic rendering is useful when a route has data that is personalized to the user or has information that can only be known at request time, such as cookies or the URL's search params.\"}),\"pages\"===n?(0,y.jsxs)(\"p\",{className:\"dev-tools-info-pagraph\",children:[\"Exporting the\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"getServerSideProps\"}),\" \",\"function will opt the route into dynamic rendering. This function will be called by the server on every request.\"]}):(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"During rendering, if a\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-apis\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"Dynamic API\"}),\" \",\"or a\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/app/api-reference/functions/fetch\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"fetch\"}),\" \",\"option of\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"{ cache: 'no-store' }\"}),\" \",\"is discovered, Next.js will switch to dynamically rendering the whole route.\"]})]})}var t5={pages:{static:\"https://nextjs.org/docs/pages/building-your-application/rendering/static-site-generation\",dynamic:\"https://nextjs.org/docs/pages/building-your-application/rendering/server-side-rendering\"},app:{static:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#static-rendering-default\",dynamic:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering\"}};function t3(e){var n,t,r=e.routeType,o=e.routerType,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"routeType\",\"routerType\"]),i=\"Static\"===r,l=i?t5[o].static:t5[o].dynamic;return(0,y.jsx)(t0.x,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({title:\"\".concat(r,\" Route\"),learnMoreLink:l},a),t=t={children:i?(0,y.jsx)(t2,{routerType:o}):(0,y.jsx)(t4,{routerType:o})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function t6(){return(0,y.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 20 20\",fill:\"none\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"m9.7 3.736.045-.236h.51l.044.236a2.024 2.024 0 0 0 1.334 1.536c.19.066.375.143.554.23.618.301 1.398.29 2.03-.143l.199-.136.36.361-.135.199a2.024 2.024 0 0 0-.143 2.03c.087.179.164.364.23.554.224.65.783 1.192 1.536 1.334l.236.044v.51l-.236.044a2.024 2.024 0 0 0-1.536 1.334 4.95 4.95 0 0 1-.23.554 2.024 2.024 0 0 0 .143 2.03l.136.199-.361.36-.199-.135a2.024 2.024 0 0 0-2.03-.143c-.179.087-.364.164-.554.23a2.024 2.024 0 0 0-1.334 1.536l-.044.236h-.51l-.044-.236a2.024 2.024 0 0 0-1.334-1.536 4.952 4.952 0 0 1-.554-.23 2.024 2.024 0 0 0-2.03.143l-.199.136-.36-.361.135-.199a2.024 2.024 0 0 0 .143-2.03 4.958 4.958 0 0 1-.23-.554 2.024 2.024 0 0 0-1.536-1.334l-.236-.044v-.51l.236-.044a2.024 2.024 0 0 0 1.536-1.334 4.96 4.96 0 0 1 .23-.554 2.024 2.024 0 0 0-.143-2.03l-.136-.199.361-.36.199.135a2.024 2.024 0 0 0 2.03.143c.179-.087.364-.164.554-.23a2.024 2.024 0 0 0 1.334-1.536ZM8.5 2h3l.274 1.46c.034.185.17.333.348.394.248.086.49.186.722.3.17.082.37.074.526-.033l1.226-.839 2.122 2.122-.84 1.226a.524.524 0 0 0-.032.526c.114.233.214.474.3.722.061.177.21.314.394.348L18 8.5v3l-1.46.274a.524.524 0 0 0-.394.348 6.47 6.47 0 0 1-.3.722.524.524 0 0 0 .033.526l.839 1.226-2.122 2.122-1.226-.84a.524.524 0 0 0-.526-.032 6.477 6.477 0 0 1-.722.3.524.524 0 0 0-.348.394L11.5 18h-3l-.274-1.46a.524.524 0 0 0-.348-.394 6.477 6.477 0 0 1-.722-.3.524.524 0 0 0-.526.033l-1.226.839-2.122-2.122.84-1.226a.524.524 0 0 0 .032-.526 6.453 6.453 0 0 1-.3-.722.524.524 0 0 0-.394-.348L2 11.5v-3l1.46-.274a.524.524 0 0 0 .394-.348c.086-.248.186-.49.3-.722a.524.524 0 0 0-.033-.526l-.839-1.226 2.122-2.122 1.226.84a.524.524 0 0 0 .526.032 6.46 6.46 0 0 1 .722-.3.524.524 0 0 0 .348-.394L8.5 2Zm3 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Zm1.5 0a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\",clipRule:\"evenodd\"})})}function t9(){return(0,y.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",fill:\"none\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"m.191 2.063.56.498 13.5 12 .561.498.997-1.121-.56-.498-1.81-1.608 2.88-3.342v-.98l-3.204-3.72C10.645.923 6.365.686 3.594 3.08L1.748 1.44 1.188.94.19 2.063ZM14.761 8l-2.442 2.836-1.65-1.466a3.001 3.001 0 0 0-4.342-3.86l-1.6-1.422a5.253 5.253 0 0 1 7.251.682L14.76 8ZM7.526 6.576l1.942 1.727a1.499 1.499 0 0 0-1.942-1.727Zm-7.845.935 1.722-2 1.137.979L1.24 8l2.782 3.23A5.25 5.25 0 0 0 9.9 12.703l.54 1.4a6.751 6.751 0 0 1-7.555-1.892L-.318 8.49v-.98Z\",clipRule:\"evenodd\"})})}function t8(){return(0,y.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"20\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",children:[(0,y.jsx)(\"g\",{clipPath:\"url(#light_icon_clip_path)\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"M8.75.75V0h-1.5v2h1.5V.75ZM3.26 4.32l-.53-.53-.354-.353-.53-.53 1.06-1.061.53.53.354.354.53.53-1.06 1.06Zm8.42-1.06.53-.53.353-.354.53-.53 1.061 1.06-.53.53-.354.354-.53.53-1.06-1.06ZM8 11.25a3.25 3.25 0 1 0 0-6.5 3.25 3.25 0 0 0 0 6.5Zm0 1.5a4.75 4.75 0 1 0 0-9.5 4.75 4.75 0 0 0 0 9.5Zm6-5.5h2v1.5h-2v-1.5Zm-13.25 0H0v1.5h2v-1.5H.75Zm1.62 5.32-.53.53 1.06 1.06.53-.53.354-.353.53-.53-1.06-1.061-.53.53-.354.354Zm10.2 1.06.53.53 1.06-1.06-.53-.53-.354-.354-.53-.53-1.06 1.06.53.53.353.354ZM8.75 14v2h-1.5v-2h1.5Z\",clipRule:\"evenodd\"})}),(0,y.jsx)(\"defs\",{children:(0,y.jsx)(\"clipPath\",{id:\"light_icon_clip_path\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",d:\"M0 0h16v16H0z\"})})})]})}function t7(){return(0,y.jsx)(\"svg\",{\"data-testid\":\"geist-icon\",height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M1.5 8.00005C1.5 5.53089 2.99198 3.40932 5.12349 2.48889C4.88136 3.19858 4.75 3.95936 4.75 4.7501C4.75 8.61609 7.88401 11.7501 11.75 11.7501C11.8995 11.7501 12.048 11.7454 12.1953 11.7361C11.0955 13.1164 9.40047 14.0001 7.5 14.0001C4.18629 14.0001 1.5 11.3138 1.5 8.00005ZM6.41706 0.577759C2.78784 1.1031 0 4.22536 0 8.00005C0 12.1422 3.35786 15.5001 7.5 15.5001C10.5798 15.5001 13.2244 13.6438 14.3792 10.9921L13.4588 9.9797C12.9218 10.155 12.3478 10.2501 11.75 10.2501C8.71243 10.2501 6.25 7.78767 6.25 4.7501C6.25 3.63431 6.58146 2.59823 7.15111 1.73217L6.41706 0.577759ZM13.25 1V1.75V2.75L14.25 2.75H15V4.25H14.25H13.25V5.25V6H11.75V5.25V4.25H10.75L10 4.25V2.75H10.75L11.75 2.75V1.75V1H13.25Z\",fill:\"currentColor\"})})}function re(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",strokeLinejoin:\"round\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"M0 2a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v8.5a1 1 0 0 1-1 1H8.75v3h1.75V16h-5v-1.5h1.75v-3H1a1 1 0 0 1-1-1V2Zm1.5.5V10h13V2.5h-13Z\",clipRule:\"evenodd\"})})}function rn(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function rt(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return rn(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return rn(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var rr=\"bottom-left\"||0,ro=\"__nextjs_hide_shortcut\";function ra(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ri(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||rs(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rl(e){return function(e){if(Array.isArray(e))return ra(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||rs(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rs(e,n){if(e){if(\"string\"==typeof e)return ra(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ra(e,n)}}function rc(){var e,n,t=(e=[\"\\n .shortcut-recorder {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n position: relative;\\n font-family: var(--font-stack-sans);\\n\\n .shortcut-recorder-button {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n background: transparent;\\n border: 1px dashed var(--color-gray-500);\\n border-radius: var(--rounded-lg);\\n padding: 6px 8px;\\n font-weight: 400;\\n font-size: var(--size-14);\\n color: var(--color-gray-1000);\\n transition: border-color 150ms var(--timing-swift);\\n\\n &[data-has-shortcut='true'] {\\n border: 1px solid var(--color-gray-alpha-400);\\n\\n &:hover {\\n border-color: var(--color-gray-500);\\n }\\n }\\n\\n &:hover {\\n border-color: var(--color-gray-600);\\n }\\n\\n &::placeholder {\\n color: var(--color-gray-900);\\n }\\n\\n &[data-pristine='false']::placeholder {\\n color: transparent;\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n }\\n\\n kbd {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n font-family: var(--font-stack-sans);\\n background: var(--color-gray-200);\\n min-width: 20px;\\n height: 20px;\\n font-size: 14px;\\n border-radius: 4px;\\n color: var(--color-gray-1000);\\n\\n &[data-symbol='false'] {\\n padding: 0 4px;\\n }\\n }\\n\\n .shortcut-recorder-clear-button {\\n cursor: pointer;\\n color: var(--color-gray-1000);\\n width: 20px;\\n height: 20px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: 4px;\\n transition: background 150ms var(--timing-swift);\\n\\n &:hover {\\n background: var(--color-gray-300);\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n svg {\\n width: 14px;\\n height: 14px;\\n }\\n }\\n }\\n\\n .shortcut-recorder-keys {\\n pointer-events: none;\\n user-select: none;\\n display: flex;\\n align-items: center;\\n gap: 2px;\\n }\\n\\n .shortcut-recorder-tooltip {\\n --gap: 8px;\\n --background: var(--color-gray-1000);\\n background: var(--background);\\n color: var(--color-background-100);\\n font-size: var(--size-14);\\n padding: 4px 8px;\\n border-radius: 8px;\\n position: absolute;\\n bottom: calc(100% + var(--gap));\\n text-align: center;\\n opacity: 0;\\n scale: 0.96;\\n white-space: nowrap;\\n user-select: none;\\n transition:\\n opacity 150ms var(--timing-swift),\\n scale 150ms var(--timing-swift);\\n\\n &[data-show='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n\\n svg {\\n position: absolute;\\n transform: translateX(-50%);\\n bottom: -6px;\\n left: 50%;\\n }\\n\\n .shortcut-recorder-status {\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n }\\n\\n .shortcut-recorder-status-icon {\\n width: 7px;\\n height: 7px;\\n border-radius: 50%;\\n flex-shrink: 0;\\n background: var(--color-red-700);\\n\\n &[data-success='true'] {\\n background: var(--color-green-700);\\n }\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return rc=function(){return t},t}var ru=[\"Meta\",\"Control\",\"Ctrl\",\"Alt\",\"Option\",\"Shift\"];function rd(e){var n=e.value,t=e.onChange,r=ri((0,x.useState)(!1),2),o=r[0],a=r[1],i=ri((0,x.useState)(null!=n?n:[]),2),l=i[0],s=i[1],c=ri((0,x.useState)(!1),2),u=c[0],d=c[1],f=(0,x.useRef)(null),p=(0,x.useRef)(null),h=!!n||l.length>0;function g(){var e;null==(e=p.current)||e.focus(),s([]),d(!1),setTimeout(function(){a(!0)}),t(null)}function m(){var e;f.current&&clearTimeout(f.current),a(!0),null==(e=p.current)||e.focus()}return(0,y.jsxs)(\"div\",{className:\"shortcut-recorder\",children:[(0,y.jsxs)(\"button\",{className:\"shortcut-recorder-button\",ref:p,onClick:m,onFocus:m,onBlur:function(){d(!1),a(!1)},onKeyDown:function(e){e.target===p.current&&\"Tab\"!==e.key&&(f.current&&clearTimeout(f.current),o||a(!0),3!==l.length&&(e.preventDefault(),e.stopPropagation(),s(function(t){if(t.includes(e.key))return t;if(!ru.includes(e.key)){var r=t.findIndex(function(e){return!ru.includes(e)});if(-1!==r){var o=rl(t);return o[r]=e.key,n(o),o}var a=rl(t).concat([e.key]);return n(a),a}for(var i=rl(t),l=ru.indexOf(e.key),s=0,c=0;c<i.length;c++)if(ru.includes(i[c])){if(l<ru.indexOf(i[c])){s=c;break}s=c+1}else break;return i.splice(s,0,e.key),n(i),i})));function n(e){f.current=window.setTimeout(function(){d(!0),t(e.join(\"+\")),f.current=window.setTimeout(function(){a(!1)},1e3)},180)}},\"data-has-shortcut\":h,\"data-shortcut-recorder\":\"true\",children:[h?(0,y.jsx)(\"div\",{className:\"shortcut-recorder-keys\",children:l.map(function(e){return(0,y.jsx)(rp,{children:e},e)})}):\"Record Shortcut\",h&&(0,y.jsx)(\"div\",{className:\"shortcut-recorder-clear-button\",role:\"button\",onClick:g,onFocus:function(e){return e.stopPropagation()},onKeyDown:function(e){(\"Enter\"===e.key||\" \"===e.key)&&(g(),e.stopPropagation())},\"aria-label\":\"Clear shortcut\",tabIndex:0,children:(0,y.jsx)(rg,{})})]}),(0,y.jsxs)(\"div\",{className:\"shortcut-recorder-tooltip\",\"data-show\":o,children:[(0,y.jsxs)(\"div\",{className:\"shortcut-recorder-status\",children:[(0,y.jsx)(\"div\",{className:\"shortcut-recorder-status-icon\",\"data-success\":u}),u?\"Shortcut set\":\"Recording\"]}),(0,y.jsx)(rf,{})]})]})}function rf(){return(0,y.jsx)(\"svg\",{fill:\"none\",height:\"6\",viewBox:\"0 0 14 6\",width:\"14\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{d:\"M13.8284 0H0.17157C0.702003 0 1.21071 0.210714 1.58578 0.585787L5.58578 4.58579C6.36683 5.36684 7.63316 5.36683 8.41421 4.58579L12.4142 0.585786C12.7893 0.210714 13.298 0 13.8284 0Z\",fill:\"var(--background)\"})})}function rp(e){var n=e.children,t=function(e){switch(e){case\"Meta\":return(0,y.jsx)(rh,{});case\"Alt\":case\"Option\":return\"⌥\";case\"Control\":case\"Ctrl\":return\"Ctrl\";case\"Shift\":return\"⇧\";case\"Enter\":return\"⏎\";case\"Escape\":case\"Esc\":return\"Esc\";case\" \":case\"Space\":case\"Spacebar\":return\"Space\";case\"ArrowUp\":return\"↑\";case\"ArrowDown\":return\"↓\";case\"ArrowLeft\":return\"←\";case\"ArrowRight\":return\"→\";case\"Tab\":return\"Tab\";case\"Backspace\":return\"⌫\";case\"Delete\":return\"⌦\";default:if(1===n.length)return n.toUpperCase();return n}}(n),r=\"string\"==typeof t&&1===t.length;return(0,y.jsx)(\"kbd\",{\"data-symbol\":r,children:t})}function rh(){var e=ri((0,x.useState)(\"\\xa0\"),2),n=e[0],t=e[1],r=rv(/^Mac/)||rv(/^iPhone/)||rv(/^iPad/)||rv(/^Mac/)&&navigator.maxTouchPoints>1;return(0,x.useEffect)(function(){!0===r&&t(\"⌘\"),!1===r&&t(\"Ctrl\")},[r]),(0,y.jsx)(\"span\",{style:{minWidth:\"1em\",display:\"inline-block\"},children:n})}function rg(){return(0,y.jsx)(\"svg\",{height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M12.4697 13.5303L13 14.0607L14.0607 13L13.5303 12.4697L9.06065 7.99999L13.5303 3.53032L14.0607 2.99999L13 1.93933L12.4697 2.46966L7.99999 6.93933L3.53032 2.46966L2.99999 1.93933L1.93933 2.99999L2.46966 3.53032L6.93933 7.99999L2.46966 12.4697L1.93933 13L2.99999 14.0607L3.53032 13.5303L7.99999 9.06065L12.4697 13.5303Z\",fill:\"currentColor\"})})}var rm=ei(rc());function rv(e){return\"undefined\"!=typeof window&&null!=window.navigator?e.test(window.navigator.platform):void 0}function rb(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ry(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function rx(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function rw(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function rj(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return rb(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return rb(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rk(){var e,n,t=(e=[\"\\n .preferences-container {\\n width: 100%;\\n }\\n\\n @media (min-width: 576px) {\\n .preferences-container {\\n width: 480px;\\n }\\n }\\n\\n .preference-section:first-child {\\n padding-top: 0;\\n }\\n\\n .preference-section {\\n padding: 12px 0;\\n border-bottom: 1px solid var(--color-gray-400);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n gap: 24px;\\n }\\n\\n .preference-section:last-child {\\n border-bottom: none;\\n }\\n\\n .preference-header {\\n margin-bottom: 0;\\n flex: 1;\\n }\\n\\n .preference-header label {\\n font-size: var(--size-14);\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n margin: 0;\\n }\\n\\n .preference-description {\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n margin: 0;\\n }\\n\\n .select-button,\\n .action-button {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-lg);\\n font-weight: 400;\\n font-size: var(--size-14);\\n color: var(--color-gray-1000);\\n padding: 6px 8px;\\n transition: border-color 150ms var(--timing-swift);\\n\\n &:hover {\\n border-color: var(--color-gray-500);\\n }\\n\\n svg {\\n width: 14px;\\n height: 14px;\\n overflow: visible;\\n }\\n }\\n\\n .select-button {\\n &:focus-within {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n select {\\n all: unset;\\n }\\n\\n option {\\n color: var(--color-gray-1000);\\n background: var(--color-background-100);\\n }\\n }\\n\\n :global(.icon) {\\n width: 18px;\\n height: 18px;\\n color: #666;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return rk=function(){return t},t}function rA(e){var n,t=e.setPosition,r=e.position,o=e.hide,a=e.scale,i=e.setScale,l=e.hideShortcut,s=e.setHideShortcut,c=rw(e,[\"setPosition\",\"position\",\"hide\",\"scale\",\"setScale\",\"hideShortcut\",\"setHideShortcut\"]),u=rj((0,x.useState)(function(){if(\"undefined\"==typeof localStorage)return\"system\";var e=localStorage.getItem(Q);return\"dark\"===e||\"light\"===e?e:\"system\"}()),2),d=u[0],f=u[1];function p(e){var n=\"/__nextjs_restart_dev\";e&&(n=\"/__nextjs_restart_dev?invalidatePersistentCache\"),fetch(n,{method:\"POST\"}).then(function(){})}return(0,y.jsxs)(t0.x,rx(ry({title:\"Preferences\"},c),{children:[(0,y.jsx)(\"h2\",{className:\"dev-tools-info-section-title\",children:\"General\"}),(0,y.jsxs)(\"div\",{className:\"preferences-container\",children:[(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{htmlFor:\"theme\",children:\"Theme\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Select your theme preference.\"})]}),(0,y.jsxs)(rO,{id:\"theme\",name:\"theme\",prefix:(0,y.jsx)(rC,{theme:d}),value:d,onChange:function(e){var n=document.querySelector(\"nextjs-portal\");if(n){if(f(e.target.value),\"system\"===e.target.value){n.classList.remove(\"dark\"),n.classList.remove(\"light\"),localStorage.removeItem(Q);return}\"dark\"===e.target.value?(n.classList.add(\"dark\"),n.classList.remove(\"light\"),localStorage.setItem(Q,\"dark\")):(n.classList.remove(\"dark\"),n.classList.add(\"light\"),localStorage.setItem(Q,\"light\"))}},children:[(0,y.jsx)(\"option\",{value:\"system\",children:\"System\"}),(0,y.jsx)(\"option\",{value:\"light\",children:\"Light\"}),(0,y.jsx)(\"option\",{value:\"dark\",children:\"Dark\"})]})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{htmlFor:\"position\",children:\"Position\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Adjust the placement of your dev tools.\"})]}),(0,y.jsxs)(rO,{id:\"position\",name:\"position\",value:r,onChange:function(e){t(e.target.value),localStorage.setItem(G,e.target.value)},children:[(0,y.jsx)(\"option\",{value:\"bottom-left\",children:\"Bottom Left\"}),(0,y.jsx)(\"option\",{value:\"bottom-right\",children:\"Bottom Right\"}),(0,y.jsx)(\"option\",{value:\"top-left\",children:\"Top Left\"}),(0,y.jsx)(\"option\",{value:\"top-right\",children:\"Top Right\"})]})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{htmlFor:\"size\",children:\"Size\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Adjust the size of your dev tools.\"})]}),(0,y.jsx)(rO,{id:\"size\",name:\"size\",value:a,onChange:function(e){i(Number(e.target.value))},children:Object.entries(S).map(function(e){var n=rj(e,2),t=n[0],r=n[1];return(0,y.jsx)(\"option\",{value:r,children:t},t)})})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools for this session\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Hide Dev Tools until you restart your dev server, or 1 day.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsxs)(\"button\",{\"aria-describedby\":\"hide-dev-tools\",name:\"hide-dev-tools\",\"data-hide-dev-tools\":!0,className:\"action-button\",onClick:o,children:[(0,y.jsx)(t9,{}),(0,y.jsx)(\"span\",{children:\"Hide\"})]})})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools shortcut\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Set a custom keyboard shortcut to toggle visibility.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsx)(rd,{value:null!=(n=null==l?void 0:l.split(\"+\"))?n:null,onChange:s})})]}),(0,y.jsx)(\"div\",{className:\"preference-section\",children:(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{children:\"Disable Dev Tools for this project\"}),(0,y.jsxs)(\"p\",{className:\"preference-description\",children:[\"To disable this UI completely, set\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"devIndicators: false\"}),\" \",\"in your \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"next.config\"}),\" \",\"file.\"]})]})})]}),(0,y.jsx)(\"h2\",{className:\"dev-tools-info-section-title\",children:\"Development Server\"}),(0,y.jsx)(\"div\",{className:\"preferences-container\",children:(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"restart-dev-server\",children:\"Restart Dev Server\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Restarts the development server without needing to leave the browser.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"restart-dev-server\",title:\"Restarts the development server without needing to leave the browser.\",name:\"restart-dev-server\",\"data-restart-dev-server\":!0,className:\"action-button\",onClick:function(){return p(!1)},children:(0,y.jsx)(\"span\",{children:\"Restart\"})})})]})}), true?(0,y.jsx)(\"div\",{className:\"preferences-container\",children:(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"reset-bundler-cache\",children:\"Reset Bundler Cache\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"reset-bundler-cache\",title:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\",name:\"reset-bundler-cache\",\"data-reset-bundler-cache\":!0,className:\"action-button\",onClick:function(){return p(!0)},children:(0,y.jsx)(\"span\",{children:\"Reset Cache\"})})})]})}):0]}))}function rO(e){var n=e.children,t=e.prefix,r=rw(e,[\"children\",\"prefix\"]);return(0,y.jsxs)(\"div\",{className:\"select-button\",children:[t,(0,y.jsx)(\"select\",rx(ry({},r),{children:n})),(0,y.jsx)(rE,{})]})}function rC(e){switch(e.theme){case\"system\":return(0,y.jsx)(re,{});case\"dark\":return(0,y.jsx)(t7,{});case\"light\":return(0,y.jsx)(t8,{});default:return null}}var rS=ei(rk());function rE(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",\"aria-hidden\":!0,children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.0607 5.49999L13.5303 6.03032L8.7071 10.8535C8.31658 11.2441 7.68341 11.2441 7.29289 10.8535L2.46966 6.03032L1.93933 5.49999L2.99999 4.43933L3.53032 4.96966L7.99999 9.43933L12.4697 4.96966L13 4.43933L14.0607 5.49999Z\",fill:\"currentColor\"})})}function r_(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function rP(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function rz(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function rL(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function rT(e){return function(e){if(Array.isArray(e))return r_(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||rR(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rR(e,n){if(e){if(\"string\"==typeof e)return r_(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return r_(e,n)}}function rN(e){var n=e.children,t=e.padding,r=e.position,o=e.setPosition,a=e.onDragStart,i=e.dragHandleSelector,l=e.disableDrag,s=rL(e,[\"children\",\"padding\",\"position\",\"setPosition\",\"onDragStart\",\"dragHandleSelector\",\"disableDrag\"]),c=function(e){var n=(0,x.useRef)(null),t=(0,x.useRef)({state:\"idle\"}),r=(0,x.useRef)(null),o=(0,x.useRef)({x:0,y:0}),a=(0,x.useRef)({x:0,y:0}),i=(0,x.useRef)(0),l=(0,x.useRef)([]),s=(0,x.useCallback)(function(){var e,o;\"drag\"===t.current.state&&(null==(o=n.current)||o.releasePointerCapture(t.current.pointerId)),t.current=\"drag\"===t.current.state?{state:\"drag-end\"}:{state:\"idle\"},null!==r.current&&(r.current(),r.current=null),l.current=[],null==(e=n.current)||e.classList.remove(\"dev-tools-grabbing\")},[]);function c(e){n.current&&(a.current=e,n.current.style.translate=\"\".concat(e.x,\"px \").concat(e.y,\"px\"))}function u(e){if(\"drag-end\"===t.current.state){var r;e.preventDefault(),e.stopPropagation(),t.current={state:\"idle\"},null==(r=n.current)||r.removeEventListener(\"click\",u)}}function d(r){if(\"press\"===t.current.state){var s,u,d,f,p=r.clientX-o.current.x,h=r.clientY-o.current.y;Math.sqrt(p*p+h*h)>=e.threshold&&(t.current={state:\"drag\",pointerId:r.pointerId},null==(u=n.current)||u.setPointerCapture(r.pointerId),null==(d=n.current)||d.classList.add(\"dev-tools-grabbing\"),null==(f=e.onDragStart)||f.call(e))}if(\"drag\"===t.current.state){var g={x:r.clientX,y:r.clientY},m=g.x-o.current.x,v=g.y-o.current.y;o.current=g,c({x:a.current.x+m,y:a.current.y+v});var b=Date.now();b-i.current>=10&&(l.current=rT(l.current.slice(-5)).concat([{position:g,timestamp:b}])),i.current=b,null==(s=e.onDrag)||s.call(e,a.current)}}function f(){var n,t=function(e){if(e.length<2)return{x:0,y:0};var n=e[0],t=e[e.length-1],r=t.timestamp-n.timestamp;return 0===r?{x:0,y:0}:{x:1e3*((t.position.x-n.position.x)/r),y:1e3*((t.position.y-n.position.y)/r)}}(l.current);s(),null==(n=e.onDragEnd)||n.call(e,a.current,t)}return(0,x.useLayoutEffect)(function(){e.disabled&&s()},[s,e.disabled]),{ref:n,onPointerDown:function(a){var i,l;0===a.button&&(l=a.target,(!e.dragHandleSelector||!n.current||!l||l.matches&&l.matches(e.dragHandleSelector))&&(o.current={x:a.clientX,y:a.clientY},t.current={state:\"press\"},window.addEventListener(\"pointermove\",d),window.addEventListener(\"pointerup\",f),null!==r.current&&(r.current(),r.current=null),r.current=function(){window.removeEventListener(\"pointermove\",d),window.removeEventListener(\"pointerup\",f)},null==(i=n.current)||i.addEventListener(\"click\",u)))},animate:function(t){var r=n.current;null!==r&&(r.style.transition=\"translate 491.22ms var(--timing-bounce)\",r.addEventListener(\"transitionend\",function n(o){if(\"translate\"===o.propertyName){var i;null==(i=e.onAnimationEnd)||i.call(e,t),a.current={x:0,y:0},r.style.transition=\"\",r.removeEventListener(\"transitionend\",n)}}),c(t.translation))}}}({disabled:void 0!==l&&l,threshold:5,onDragStart:a,onDragEnd:function(e,n){var o,a,i,l,s,c,f,p,h,g,m,v,b,y,x,w,j,k,A;if(0===Math.sqrt(e.x*e.x+e.y*e.y)){null==(o=u.current)||o.style.removeProperty(\"translate\");return}d((y=(a={x:e.x+rD(n.x),y:e.y+rD(n.y)}).x,x=a.y,j=Object.entries(w=(p=2*t,h=(null==(c=u.current)?void 0:c.offsetWidth)||0,g=(null==(f=u.current)?void 0:f.offsetHeight)||0,m=window.innerWidth-document.documentElement.clientWidth,{\"top-left\":{x:0-(v=(l=(i=r).includes(\"right\"),s=i.includes(\"bottom\"),{x:l?window.innerWidth-m-p-h:0,y:s?window.innerHeight-p-g:0})).x,y:0-v.y},\"top-right\":{x:window.innerWidth-m-p-h-v.x,y:0-v.y},\"bottom-left\":{x:0-v.x,y:window.innerHeight-p-g-v.y},\"bottom-right\":{x:window.innerWidth-m-p-h-v.x,y:window.innerHeight-p-g-v.y}})).map(function(e){var n,t,r=(t=2,function(e){if(Array.isArray(e))return e}(n=e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||rR(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),o=r[0],a=r[1];return{key:o,distance:Math.sqrt(Math.pow(y-a.x,2)+Math.pow(x-a.y,2))}}),k=(b=Math).min.apply(b,rT(j.map(function(e){return e.distance}))),(A=j.find(function(e){return e.distance===k}))?{translation:w[A.key],corner:A.key}:{corner:r,translation:w[r]}))},onAnimationEnd:function(e){var n=e.corner;setTimeout(function(){var e;null==(e=u.current)||e.style.removeProperty(\"translate\"),o(n)})},dragHandleSelector:i}),u=c.ref,d=c.animate,f=rL(c,[\"ref\",\"animate\"]);return(0,y.jsx)(\"div\",rz(rP(rz(rP({},s),{ref:u}),f),{style:{touchAction:\"none\"},children:n}))}function rD(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.999;return e/1e3*n/(1-n)}function rB(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function rM(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function rI(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){rM(e,n,t[n])})}return e}function rH(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function rF(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return rB(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return rB(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rU(e){var n=e.state,t=e.errorCount,r=e.isBuildError,o=rH(e,[\"state\",\"errorCount\",\"isBuildError\"]),a=rF((0,x.useState)(!0),2),i=a[0],l=a[1];return(0,y.jsx)(r$,rI({routerType:n.routerType,semver:n.versionInfo.installed,issueCount:t,isDevBuilding:n.buildingIndicator,isDevRendering:n.renderingIndicator,isStaticRoute:n.staticIndicator,hide:function(){l(!1),fetch(\"/__nextjs_disable_dev_indicator\",{method:\"POST\"})},toggleVisibility:function(){l(!i)},isTurbopack:!!false,disabled:n.disableDevIndicator||!i,isBuildError:r,page:n.page},o))}var rV=(0,x.createContext)({}),rq={Root:\"root\",Turbo:\"turbo\",Route:\"route\",Preferences:\"preferences\",SegmentExplorer:\"segment-explorer\"},rW= false?0:function(){return null};function r$(e){var n,t,r,o,a,i,l,s=e.routerType,c=e.disabled,u=e.issueCount,d=e.isDevBuilding,f=e.isDevRendering,p=e.isStaticRoute,h=e.isTurbopack,g=e.isBuildError,m=e.hide,v=e.toggleVisibility,b=e.dispatch,w=e.scale,j=e.setScale,k=e.page,A=(0,x.useRef)(null),O=(0,x.useRef)(null),C=(0,x.useRef)(null),S=rF((0,x.useState)(null),2),E=S[0],_=S[1],P=rF((0,x.useState)(\"undefined\"!=typeof localStorage&&localStorage.getItem(G)?localStorage.getItem(G):rr),2),z=P[0],L=P[1],T=rF((0,x.useState)(-1),2),R=T[0],N=T[1],D=rF((t=(n=rt((0,x.useState)(function(){if(\"undefined\"==typeof localStorage)return null;var e=localStorage.getItem(ro);return e||null}()),2))[0],r=n[1],[t,function(e){r(e),null===e?localStorage.removeItem(ro):localStorage.setItem(ro,e)}]),2),B=D[0],I=D[1],F=E===rq.Root,U=E===rq.Turbo,V=E===rq.Route,q=E===rq.Preferences,W=E===rq.SegmentExplorer,$=(0,tJ.N)(F,{enterDelay:0,exitDelay:nQ.K7}),Z=$.mounted,Y=$.rendered;function X(e){if(\"first\"===e)return void setTimeout(function(){var e,n=null==(e=O.current)?void 0:e.querySelectorAll('[role=\"menuitem\"]');n&&X(Number(n[0].getAttribute(\"data-index\")))});if(\"last\"===e)return void setTimeout(function(){var e,n=null==(e=O.current)?void 0:e.querySelectorAll('[role=\"menuitem\"]');n&&X(n.length-1)});var n,t=null==(n=O.current)?void 0:n.querySelector('[data-index=\"'.concat(e,'\"]'));t&&(N(e),null==t||t.focus())}function K(){_(rq.Root),setTimeout(function(){X(R)},nQ.K7)}function Q(){_(function(e){return e===rq.Root?null:e})}(0,nQ.P5)(O,C,F),(0,nQ.O8)(O,C,Z,Q),o=B?rM({},B,function(){v();var e=A.current;e&&(e.dataset.hidden=\"true\"===e.dataset.hidden?\"false\":\"true\")}):{},a=C,(0,x.useEffect)(function(){var e=function(e){if(n=a,!(t=(0,nQ.vY)(n.current))||\"true\"!==t.contentEditable&&\"INPUT\"!==t.tagName&&\"TEXTAREA\"!==t.tagName&&\"SELECT\"!==t.tagName&&\"true\"!==t.dataset[\"shortcut-recorder\"]||t.hasAttribute(\"readonly\")){var n,t,r=[];e.metaKey&&r.push(\"Meta\"),e.ctrlKey&&r.push(\"Control\"),e.altKey&&r.push(\"Alt\"),e.shiftKey&&r.push(\"Shift\"),\"Meta\"!==e.key&&\"Control\"!==e.key&&\"Alt\"!==e.key&&\"Shift\"!==e.key&&r.push(e.key);var i=r.join(\"+\");o[i]&&(e.preventDefault(),o[i]())}};return window.addEventListener(\"keydown\",e),function(){return window.removeEventListener(\"keydown\",e)}},[o]),(0,x.useEffect)(function(){if(null===E){var e=setTimeout(function(){N(-1)},nQ.K7);return function(){return clearTimeout(e)}}},[E]);var J=rF(z.split(\"-\",2),2),ee=J[0],en=J[1],et=(rM(i={},ee,\"calc(100% + 8px)\"),rM(i,en,0),i);return(0,y.jsxs)(tR,{ref:A,\"data-nextjs-toast\":!0,style:(rM(l={\"--animate-out-duration-ms\":\"\".concat(nQ.K7,\"ms\"),\"--animate-out-timing-function\":nQ.uD,boxShadow:\"none\"},ee,\"\".concat(20,\"px\")),rM(l,en,\"\".concat(20,\"px\")),l),children:[(0,y.jsx)(rN,{padding:20,onDragStart:function(){return _(null)},position:z,setPosition:function(e){localStorage.setItem(G,e),L(e)},children:(0,y.jsx)(tY,{ref:C,\"aria-haspopup\":\"menu\",\"aria-expanded\":F,\"aria-controls\":\"nextjs-dev-tools-menu\",\"aria-label\":\"\".concat(F?\"Close\":\"Open\",\" Next.js Dev Tools\"),\"data-nextjs-dev-tools-button\":!0,disabled:c,issueCount:u,onTriggerClick:function(){E===rq.Root?_(null):(_(rq.Root),setTimeout(function(){X(\"first\")}))},toggleErrorOverlay:function(){b({type:H})},isDevBuilding:d,isDevRendering:f,isBuildError:g,scale:w})}),(0,y.jsx)(t3,{isOpen:V,close:K,triggerRef:C,style:et,routerType:s,routeType:p?\"Static\":\"Dynamic\"}),(0,y.jsx)(t1,{isOpen:U,close:K,triggerRef:C,style:et}),(0,y.jsx)(rA,{isOpen:q,close:K,triggerRef:C,style:et,hide:function(){_(null),m()},setPosition:L,position:z,scale:w,setScale:j,hideShortcut:B,setHideShortcut:I}), false?0:null,Z&&(0,y.jsx)(\"div\",{ref:O,id:\"nextjs-dev-tools-menu\",role:\"menu\",dir:\"ltr\",\"aria-orientation\":\"vertical\",\"aria-label\":\"Next.js Dev Tools Items\",tabIndex:-1,className:\"dev-tools-indicator-menu\",onKeyDown:function(e){switch(e.preventDefault(),e.key){case\"ArrowDown\":X(R+1);break;case\"ArrowUp\":X(R-1);break;case\"Home\":X(\"first\");break;case\"End\":X(\"last\")}},\"data-rendered\":Y,style:et,children:(0,y.jsxs)(rV.Provider,{value:{closeMenu:Q,selectedIndex:R,setSelectedIndex:N},children:[(0,y.jsxs)(\"div\",{className:\"dev-tools-indicator-inner\",children:[u>0&&(0,y.jsx)(rY,{title:\"\".concat(u,\" \").concat(1===u?\"issue\":\"issues\",\" found. Click to view details in the dev overlay.\"),index:0,label:\"Issues\",value:(0,y.jsx)(rX,{children:u}),onClick:function(){_(null),u>0&&b({type:M})}}),(0,y.jsx)(rY,{title:\"Current route is \".concat(p?\"static\":\"dynamic\",\".\"),label:\"Route\",index:1,value:p?\"Static\":\"Dynamic\",onClick:function(){return _(rq.Route)},\"data-nextjs-route-type\":p?\"static\":\"dynamic\"}),h?(0,y.jsx)(rY,{title:\"Turbopack is enabled.\",label:\"Turbopack\",value:\"Enabled\"}):(0,y.jsx)(rY,{index:2,title:\"Learn about Turbopack and how to enable it in your application.\",label:\"Try Turbopack\",value:(0,y.jsx)(rZ,{}),onClick:function(){return _(rq.Turbo)}})]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-indicator-footer\",children:[(0,y.jsx)(rY,{\"data-preferences\":!0,label:\"Preferences\",value:(0,y.jsx)(t6,{}),onClick:function(){return _(rq.Preferences)},index:h?2:3}), false?0:null]})]})})]})}function rZ(){return(0,y.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",children:(0,y.jsx)(\"path\",{fill:\"#666\",fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M5.50011 1.93945L6.03044 2.46978L10.8537 7.293C11.2442 7.68353 11.2442 8.31669 10.8537 8.70722L6.03044 13.5304L5.50011 14.0608L4.43945 13.0001L4.96978 12.4698L9.43945 8.00011L4.96978 3.53044L4.43945 3.00011L5.50011 1.93945Z\"})})}function rY(e){var n,t,r=e.index,o=e.label,a=e.value,i=e.onClick,l=e.href,s=rH(e,[\"index\",\"label\",\"value\",\"onClick\",\"href\"]),c=\"function\"==typeof i||\"string\"==typeof l,u=(0,x.useContext)(rV),d=u.closeMenu,f=u.selectedIndex,p=u.setSelectedIndex,h=f===r;function g(){c&&(null==i||i(),d(),l&&window.open(l,\"_blank\",\"noopener, noreferrer\"))}return(0,y.jsxs)(\"div\",(n=rI({className:\"dev-tools-indicator-item\",\"data-index\":r,\"data-selected\":h,onClick:g,onMouseMove:function(){c&&void 0!==r&&f!==r&&p(r)},onMouseLeave:function(){return p(-1)},onKeyDown:function(e){(\"Enter\"===e.key||\" \"===e.key)&&g()},role:c?\"menuitem\":void 0,tabIndex:h?0:-1},s),t=t={children:[(0,y.jsx)(\"span\",{className:\"dev-tools-indicator-label\",children:o}),(0,y.jsx)(\"span\",{className:\"dev-tools-indicator-value\",children:a})]},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function rX(e){var n=e.children;return(0,y.jsxs)(\"span\",{className:\"dev-tools-indicator-issue-count\",\"data-has-issues\":n>0,children:[(0,y.jsx)(\"span\",{className:\"dev-tools-indicator-issue-count-indicator\"}),n]})}function rK(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({xmlns:\"http://www.w3.org/2000/svg\",fill:\"currentColor\"},e),t=t={children:(0,y.jsx)(\"path\",{d:\"M4.30969 8.37891H2.38782C2.9805 10.3647 4.82188 11.8124 7.00012 11.8125C8.81977 11.8124 10.4043 10.8024 11.2228 9.30957L11.5382 8.73438L12.6896 9.36523L12.3741 9.94043L12.1681 10.2891C11.0815 11.993 9.17324 13.1249 7.00012 13.125C4.42207 13.1249 2.21747 11.5322 1.3136 9.27734V11.375H0.00109863V7.72266L0.0147705 7.58984C0.0760304 7.29089 0.340278 7.06641 0.657349 7.06641H4.30969V8.37891ZM7.00012 0.875C9.57685 0.875118 11.7819 2.46569 12.6866 4.71875V2.625H13.9991V6.27734C13.9991 6.63974 13.7053 6.93354 13.3429 6.93359H9.68958V5.62109H11.6115C11.0186 3.6356 9.17813 2.18763 7.00012 2.1875C5.17131 2.18757 3.57959 3.20771 2.76477 4.71289L2.45227 5.29004L1.29797 4.66504L1.61047 4.08789C2.64547 2.17605 4.67052 0.875068 7.00012 0.875Z\",fill:\"#A35200\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function rQ(e){return e.showButton?(0,y.jsxs)(\"button\",{className:\"restart-dev-server-button\",onClick:function(){fetch(\"/__nextjs_restart_dev?invalidatePersistentCache\",{method:\"POST\"}).then(function(){})},title:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\",children:[(0,y.jsx)(rK,{width:14,height:14}),\"Clear Bundler Cache & Restart\"]}):null}function rG(){var e,n,t=(e=[\"\\n [data-nextjs-version-staleness-indicator='fresh'] {\\n fill: var(--color-green-800);\\n stroke: var(--color-green-300);\\n }\\n [data-nextjs-version-staleness-indicator='stale'] {\\n fill: var(--color-amber-800);\\n stroke: var(--color-amber-300);\\n }\\n [data-nextjs-version-staleness-indicator='outdated'] {\\n fill: var(--color-red-800);\\n stroke: var(--color-red-300);\\n }\\n [data-nextjs-version-staleness-indicator='unknown'] {\\n fill: var(--color-gray-800);\\n stroke: var(--color-gray-300);\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return rG=function(){return t},t}function rJ(e){var n=e.versionInfo,t=n.staleness,r=nB(n),o=r.text,a=r.indicatorClass,i=r.title;return t.startsWith(\"stale\")?(0,y.jsxs)(\"a\",{\"data-nextjs-devtools-panel-footer-tab\":!0,target:\"_blank\",rel:\"noopener noreferrer\",href:\"https://nextjs.org/docs/messages/version-staleness\",title:i,children:[(0,y.jsx)(nM,{\"data-nextjs-version-staleness-indicator\":a}),(0,y.jsx)(\"span\",{children:o})]}):(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer-tab\":!0,title:i,children:[(0,y.jsx)(nM,{\"data-nextjs-version-staleness-indicator\":a}),(0,y.jsx)(\"span\",{children:o})]})}var r0=ei(rG());function r1(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-footer] {\\n background-color: var(--color-background-200);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n border-top: 1px solid var(--color-gray-400);\\n border-radius: 0 0 var(--rounded-xl) var(--rounded-xl);\\n height: auto;\\n }\\n\\n [data-nextjs-devtools-panel-footer-tab-group] {\\n display: flex;\\n align-items: center;\\n }\\n\\n [data-nextjs-devtools-panel-footer-tab] {\\n display: flex;\\n align-items: center;\\n padding: 12px;\\n gap: 8px;\\n align-self: stretch;\\n border-right: 1px solid var(--color-gray-400);\\n\\n color: var(--color-gray-900);\\n font-size: 12px;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-devtools-panel-footer-tab-bundler-name='TURBOPACK'] {\\n background: linear-gradient(\\n to right,\\n var(--color-turbopack-text-red) 0%,\\n var(--color-turbopack-text-blue) 100%\\n );\\n background-clip: text;\\n -webkit-background-clip: text;\\n -webkit-text-fill-color: transparent;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return r1=function(){return t},t}function r2(e){var n=e.versionInfo,t=e.isDraggable,r=e.showRestartServerButton,o=(\"Webpack\"||0).toUpperCase();return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer\":!0,\"data-nextjs-devtools-panel-draggable\":t,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer-tab-group\":!0,children:[(0,y.jsx)(rJ,{versionInfo:n}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer-tab\":!0,children:[(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-footer-tab-bundler-name\":o,children:o}),(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-footer-tab-bundler-status\":!0,children:\"enabled\"})]})]}),r&&(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-footer-tab-group\":!0,children:(0,y.jsx)(rQ,{showButton:!0})})]})}var r4=ei(r1());function r5(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",\"aria-hidden\":!0},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.0607 5.49999L13.5303 6.03032L8.7071 10.8535C8.31658 11.2441 7.68341 11.2441 7.29289 10.8535L2.46966 6.03032L1.93933 5.49999L2.99999 4.43933L3.53032 4.96966L7.99999 9.43933L12.4697 4.96966L13 4.43933L14.0607 5.49999Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function r3(e){var n,t,r=e.children,o=e.prefix,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"prefix\"]);return(0,y.jsxs)(\"div\",{\"data-nextjs-select\":!0,children:[o,(0,y.jsx)(\"select\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},a),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)),(0,y.jsx)(r5,{width:16,height:16})]})}function r6(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function r9(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return r6(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return r6(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function r8(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-settings] {\\n padding: 16px;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section]:first-child {\\n padding-top: 0;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section] {\\n padding: 12px 0;\\n border-bottom: 1px solid var(--color-gray-400);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n gap: 24px;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section]:last-child {\\n padding-bottom: 0;\\n border-bottom: none;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section-header] {\\n margin-bottom: 0;\\n flex: 1;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section-header] label {\\n font-size: var(--size-14);\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n margin: 0;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section-description] {\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n margin: 0;\\n }\\n\\n [data-nextjs-select],\\n [data-nextjs-devtools-panel-settings-section-action-button] {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-lg);\\n font-weight: 400;\\n font-size: var(--size-14);\\n color: var(--color-gray-1000);\\n padding: 6px 8px;\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n }\\n\\n [data-nextjs-select] {\\n &:focus-within {\\n outline: var(--focus-ring);\\n }\\n\\n select {\\n all: unset;\\n }\\n\\n option {\\n color: var(--color-gray-1000);\\n background: var(--color-background-100);\\n }\\n }\\n\\n :global(.icon) {\\n width: 18px;\\n height: 18px;\\n color: #666;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return r8=function(){return t},t}function r7(e){switch(e.theme){case\"system\":return(0,y.jsx)(re,{});case\"dark\":return(0,y.jsx)(t7,{});case\"light\":return(0,y.jsx)(t8,{});default:return null}}function oe(e){var n=e.devToolsPosition,t=e.scale,r=e.handlePositionChange,o=e.handleScaleChange,a=r9((0,x.useState)(function(){if(\"undefined\"==typeof localStorage)return\"system\";var e=localStorage.getItem(Q);return\"dark\"===e||\"light\"===e?e:\"system\"}()),2),i=a[0],l=a[1];function s(e){var n=\"/__nextjs_restart_dev\";e&&(n=\"/__nextjs_restart_dev?invalidatePersistentCache\"),fetch(n,{method:\"POST\"}).then(function(){})}return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{htmlFor:\"theme\",children:\"Theme\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Select your theme preference.\"})]}),(0,y.jsxs)(r3,{id:\"theme\",name:\"theme\",prefix:(0,y.jsx)(r7,{theme:i}),value:i,onChange:function(e){var n=document.querySelector(\"nextjs-portal\");if(n){if(l(e.target.value),\"system\"===e.target.value){n.classList.remove(\"dark\"),n.classList.remove(\"light\"),localStorage.removeItem(Q);return}\"dark\"===e.target.value?(n.classList.add(\"dark\"),n.classList.remove(\"light\"),localStorage.setItem(Q,\"dark\")):(n.classList.remove(\"dark\"),n.classList.add(\"light\"),localStorage.setItem(Q,\"light\"))}},children:[(0,y.jsx)(\"option\",{value:\"system\",children:\"System\"}),(0,y.jsx)(\"option\",{value:\"light\",children:\"Light\"}),(0,y.jsx)(\"option\",{value:\"dark\",children:\"Dark\"})]})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{htmlFor:\"position\",children:\"Position\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Adjust the placement of your dev tools.\"})]}),(0,y.jsxs)(r3,{id:\"position\",name:\"position\",value:n,onChange:r,children:[(0,y.jsx)(\"option\",{value:\"bottom-left\",children:\"Bottom Left\"}),(0,y.jsx)(\"option\",{value:\"bottom-right\",children:\"Bottom Right\"}),(0,y.jsx)(\"option\",{value:\"top-left\",children:\"Top Left\"}),(0,y.jsx)(\"option\",{value:\"top-right\",children:\"Top Right\"})]})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{htmlFor:\"size\",children:\"Size\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Adjust the size of your dev tools.\"})]}),(0,y.jsx)(r3,{id:\"size\",name:\"size\",value:t,onChange:o,children:Object.entries(S).map(function(e){var n=r9(e,2),t=n[0],r=n[1];return(0,y.jsx)(\"option\",{value:r,children:t},t)})})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools for this session\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Hide Dev Tools until you restart your dev server, or 1 day.\"})]}),(0,y.jsx)(\"div\",{children:(0,y.jsxs)(\"button\",{\"aria-describedby\":\"hide-dev-tools\",name:\"hide-dev-tools\",\"data-hide-dev-tools\":!0,\"data-nextjs-devtools-panel-settings-section-action-button\":!0,onClick:function(){fetch(\"/__nextjs_disable_dev_indicator\",{method:\"POST\"})},children:[(0,y.jsx)(t9,{}),(0,y.jsx)(\"span\",{children:\"Hide\"})]})})]}),(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{children:\"Disable Dev Tools for this project\"}),(0,y.jsxs)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:[\"To disable this UI completely, set\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"devIndicators: false\"}),\" in your \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"next.config\"}),\" file.\"]})]})}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{id:\"restart-dev-server\",children:\"Restart Dev Server\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Restarts the development server without needing to leave the browser.\"})]}),(0,y.jsx)(\"div\",{children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"restart-dev-server\",title:\"Restarts the development server without needing to leave the browser.\",name:\"restart-dev-server\",\"data-restart-dev-server\":!0,\"data-nextjs-devtools-panel-settings-section-action-button\":!0,onClick:function(){return s(!1)},children:(0,y.jsx)(\"span\",{children:\"Restart\"})})})]}),process.env.__NEXT_TURBOPACK_PERSISTENT_CACHE?(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{id:\"reset-bundler-cache\",children:\"Reset Bundler Cache\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\"})]}),(0,y.jsx)(\"div\",{children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"reset-bundler-cache\",title:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\",name:\"reset-bundler-cache\",\"data-reset-bundler-cache\":!0,\"data-nextjs-devtools-panel-settings-section-action-button\":!0,onClick:function(){return s(!0)},children:(0,y.jsx)(\"span\",{children:\"Reset Cache\"})})})]}):null]})}var on=ei(r8());function ot(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar] {\\n height: var(--size-12);\\n border-radius: 100px;\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='1'] {\\n width: 75%;\\n margin-bottom: 8px;\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='2'] {\\n width: 36.5%;\\n }\\n\\n @keyframes skeleton-shimmer {\\n 0% {\\n background-position: -200% 0;\\n }\\n 100% {\\n background-position: 200% 0;\\n }\\n }\\n\\n /* Respect user's motion preferences */\\n @media (prefers-reduced-motion: reduce) {\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='1'],\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='2'] {\\n animation: none;\\n background: var(--color-gray-200);\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ot=function(){return t},t}function or(){return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar\":\"1\"}),(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar\":\"2\"})]})}var oo=ei(ot());function oa(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-tab-issues-sidebar] {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n padding: 8px;\\n border-right: 1px solid var(--color-gray-400);\\n overflow-y: auto;\\n min-height: 0;\\n\\n @media (max-width: 575px) {\\n max-width: 112px;\\n }\\n\\n @media (min-width: 576px) {\\n max-width: 138px;\\n width: 100%;\\n }\\n\\n @media (min-width: 768px) {\\n max-width: 172.5px;\\n width: 100%;\\n }\\n\\n @media (min-width: 992px) {\\n max-width: 230px;\\n width: 100%;\\n }\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame] {\\n display: flex;\\n flex-direction: column;\\n padding: 10px 8px;\\n border-radius: var(--rounded-lg);\\n transition: background-color 0.2s ease-in-out;\\n\\n &:hover {\\n background-color: var(--color-gray-200);\\n }\\n\\n &:active {\\n background-color: var(--color-gray-300);\\n }\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-active='true'] {\\n background-color: var(--color-gray-100);\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-error-type] {\\n display: inline-block;\\n align-self: flex-start;\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-20);\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-source] {\\n display: inline-block;\\n align-self: flex-start;\\n color: var(--color-gray-900);\\n font-size: var(--size-13);\\n line-height: var(--size-18);\\n }\\n\\n /* Ellipsis for long stack frame source or small devices. */\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-error-type],\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-source] {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n max-width: 100%;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oa=function(){return t},t}function oi(e){var n=e.runtimeErrors,t=e.activeIdx,r=e.setActiveIndex;return 0===n.length?null:(0,y.jsx)(\"aside\",{\"data-nextjs-devtools-panel-tab-issues-sidebar\":!0,children:n.map(function(e,n){var o=n===t;return(0,y.jsx)(os,{runtimeError:e,idx:n,isActive:o,setActiveIndex:r},n)})})}var ol=(0,x.memo)(function(e){var n=e.runtimeError,t=tj(n),r=(0,x.useMemo)(function(){var e,n=t.findIndex(function(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame});return null!=(e=t[n])?e:null},[t]);if(!(null==r?void 0:r.originalStackFrame))return null;var o=tz(n.error,n.type),a=eS(r.originalStackFrame);return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-error-type\":!0,children:o}),(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-source\":!0,children:a})]})}),os=(0,x.memo)(function(e){var n=e.runtimeError,t=e.idx,r=e.isActive,o=e.setActiveIndex;return(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame\":!0,\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-active\":r,onClick:function(){return o(t)},children:(0,y.jsx)(x.Suspense,{fallback:(0,y.jsx)(or,{}),children:(0,y.jsx)(ol,{runtimeError:n})})})}),oc=ei(oa());function ou(){var e,n,t=(e=[\"\\n [data-nextjs-codeframe-skeleton] {\\n margin: 8px 0;\\n border-radius: 8px;\\n background-color: var(--color-background-200);\\n border: 1px solid var(--color-gray-400);\\n overflow: hidden;\\n }\\n\\n [data-nextjs-codeframe-skeleton-header] {\\n display: flex;\\n align-items: center;\\n padding: 12px;\\n border-bottom: 1px solid var(--color-gray-400);\\n border-radius: 8px 8px 0 0;\\n gap: 6px;\\n }\\n\\n [data-nextjs-codeframe-skeleton-icon] {\\n width: var(--size-16);\\n height: var(--size-16);\\n border-radius: 4px;\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n flex-shrink: 0;\\n }\\n\\n [data-nextjs-codeframe-skeleton-header-bar] {\\n width: 42.9%;\\n }\\n\\n [data-nextjs-codeframe-skeleton-button] {\\n width: var(--size-16);\\n height: var(--size-16);\\n border-radius: var(--rounded-full);\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n flex-shrink: 0;\\n }\\n\\n [data-nextjs-codeframe-skeleton-content] {\\n padding: 12px;\\n }\\n\\n [data-nextjs-codeframe-skeleton-line] {\\n height: var(--size-16);\\n border-radius: 100px;\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n margin-bottom: 8px;\\n }\\n\\n [data-nextjs-codeframe-skeleton-line]:last-child {\\n margin-bottom: 0;\\n }\\n\\n [data-nextjs-codeframe-skeleton-line-1] {\\n width: 32.5%;\\n }\\n\\n [data-nextjs-codeframe-skeleton-line-2] {\\n width: 56.8%;\\n }\\n\\n [data-nextjs-codeframe-skeleton-line-3] {\\n width: 29.6%;\\n }\\n\\n [data-nextjs-call-stack-container] {\\n position: relative;\\n margin-top: 8px;\\n }\\n\\n [data-nextjs-call-stack-count-skeleton] {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n width: var(--size-20);\\n height: var(--size-20);\\n border-radius: var(--rounded-full);\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n }\\n\\n [data-nextjs-call-stack-ignored-list-toggle-button-skeleton] {\\n all: unset;\\n display: flex;\\n align-items: center;\\n border-radius: 6px;\\n padding: 4px 6px;\\n margin-right: -6px;\\n }\\n\\n [data-nextjs-call-stack-skeleton-bar] {\\n height: var(--size-12);\\n width: 148px;\\n border-radius: 100px;\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n }\\n\\n @keyframes skeleton-shimmer {\\n 0% {\\n background-position: -200% 0;\\n }\\n 100% {\\n background-position: 200% 0;\\n }\\n }\\n\\n /* Respect user's motion preferences */\\n @media (prefers-reduced-motion: reduce) {\\n [data-nextjs-codeframe-skeleton-icon],\\n [data-nextjs-codeframe-skeleton-header-bar],\\n [data-nextjs-codeframe-skeleton-button],\\n [data-nextjs-codeframe-skeleton-line],\\n [data-nextjs-call-stack-count-skeleton],\\n [data-nextjs-call-stack-skeleton-bar] {\\n animation: none;\\n background: var(--color-gray-200);\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ou=function(){return t},t}function od(){return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe-skeleton\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe-skeleton-header\":!0,children:[(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-icon\":!0}),(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-header-bar\":!0})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe-skeleton-content\":!0,children:[(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-line-1\":!0}),(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-line-2\":!0}),(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-line-3\":!0})]})]}),(0,y.jsx)(\"div\",{\"data-nextjs-call-stack-container\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-header\":!0,children:[(0,y.jsxs)(\"p\",{\"data-nextjs-call-stack-title\":!0,children:[\"Call Stack\",\" \",(0,y.jsx)(\"span\",{\"data-nextjs-call-stack-count\":!0,\"data-nextjs-call-stack-count-skeleton\":!0})]}),(0,y.jsx)(\"button\",{\"data-nextjs-call-stack-ignored-list-toggle-button\":!0,\"data-nextjs-call-stack-ignored-list-toggle-button-skeleton\":!0,\"aria-hidden\":\"true\",children:(0,y.jsx)(\"div\",{\"data-nextjs-call-stack-skeleton-bar\":!0})})]})})]})}var of=ei(ou());function op(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oh(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function og(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function om(){var e,n,t=(e=[\"\\n [data-nextjs-issue-feedback-button-group] {\\n display: flex;\\n align-items: center;\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-full);\\n background: var(--color-background-100);\\n box-shadow: var(--shadow-small);\\n }\\n\\n [data-nextjs-issue-feedback-button-group] button {\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n }\\n\\n [data-nextjs-issue-feedback-button-group] button:first-child {\\n padding: 4px 3px 4px 5px;\\n border-radius: var(--rounded-full) 0 0 var(--rounded-full);\\n }\\n\\n [data-nextjs-issue-feedback-button-group] button:last-child {\\n padding: 4px 5px 4px 3px;\\n border-radius: 0 var(--rounded-full) var(--rounded-full) 0;\\n }\\n\\n [data-nextjs-issue-feedback-separator] {\\n width: 1px;\\n height: 100%;\\n background: var(--color-gray-400);\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return om=function(){return t},t}function ov(e){var n,t,r=e.errorCode,o=(n=(0,x.useState)({}),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return op(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return op(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=a[r],s=false,c=(0,x.useCallback)(function(e){var n;return(n=function(){return function(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:i(function(n){var t,o;return t=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){og(e,n,t[n])})}return e}({},n),o=null!=(o=og({},r,e))?o:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}),t}),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,fetch(\"\".concat( false||\"\",\"/__nextjs_error_feedback?\").concat(new URLSearchParams({errorCode:r,wasHelpful:e.toString()})))];case 2:return n.sent().ok||console.error(\"Failed to record feedback on the server.\"),[3,4];case 3:return console.error(\"Failed to record feedback:\",n.sent()),[3,4];case 4:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(r,o){var a=n.apply(e,t);function i(e){oh(a,r,o,i,l,\"next\",e)}function l(e){oh(a,r,o,i,l,\"throw\",e)}i(void 0)})})()},[r]);return(0,y.jsxs)(\"div\",{\"data-nextjs-issue-feedback-button-group\":!0,children:[(0,y.jsx)(\"button\",{\"aria-disabled\":s?\"true\":void 0,\"aria-label\":\"Mark as helpful\",onClick:s?void 0:function(){return c(!0)},className:(0,eJ.cx)(\"feedback-button\",!0===l&&\"voted\"),title:s?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nw,{\"aria-hidden\":\"true\"})}),(0,y.jsx)(\"div\",{\"data-nextjs-issue-feedback-separator\":!0}),(0,y.jsx)(\"button\",{\"aria-disabled\":s?\"true\":void 0,\"aria-label\":\"Mark as not helpful\",onClick:s?void 0:function(){return c(!1)},className:(0,eJ.cx)(\"feedback-button\",!1===l&&\"voted\"),title:s?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nj,{\"aria-hidden\":\"true\",style:{translate:\"1px 1px\"}})})]})}var ob=ei(om());function oy(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-tab-issues-content-layout] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n overflow-y: auto;\\n min-height: 0;\\n padding: 14px;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oy=function(){return t},t}function ox(e){var n=e.error,t=e.errorType,r=e.message,o=e.debugInfo,a=e.children,i=e.errorCode,l=e.environmentName;return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-content-layout\":!0,children:[(0,y.jsxs)(\"div\",{className:\"nextjs-container-errors-header\",children:[(0,y.jsxs)(\"div\",{className:\"nextjs__container_errors__error_title\",\"data-nextjs-error-code\":i,children:[(0,y.jsxs)(\"span\",{\"data-nextjs-error-label-group\":!0,children:[(0,y.jsx)(nL,{errorType:t}),l&&(0,y.jsx)(nK,{environmentName:l})]}),(0,y.jsx)(nx,{error:n,debugInfo:o,feedbackButton:i&&(0,y.jsx)(ov,{errorCode:i})})]}),(0,y.jsx)(nz,{errorMessage:r})]}),a]})}var ow=ei(oy());function oj(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"12\",height:\"12\",viewBox:\"0 0 12 12\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.98071 1.125L1.125 3.98071L1.125 8.01929L3.98071 10.875H8.01929L10.875 8.01929V3.98071L8.01929 1.125H3.98071ZM3.82538 0C3.62647 0 3.4357 0.0790176 3.29505 0.21967L0.21967 3.29505C0.0790176 3.4357 0 3.62647 0 3.82538V8.17462C0 8.37353 0.0790178 8.5643 0.21967 8.70495L3.29505 11.7803C3.4357 11.921 3.62647 12 3.82538 12H8.17462C8.37353 12 8.5643 11.921 8.70495 11.7803L11.7803 8.70495C11.921 8.5643 12 8.37353 12 8.17462V3.82538C12 3.62647 11.921 3.4357 11.7803 3.29505L8.70495 0.21967C8.5643 0.0790177 8.37353 0 8.17462 0H3.82538ZM6.5625 2.8125V3.375V6V6.5625H5.4375V6V3.375V2.8125H6.5625ZM6 9C6.41421 9 6.75 8.66421 6.75 8.25C6.75 7.83579 6.41421 7.5 6 7.5C5.58579 7.5 5.25 7.83579 5.25 8.25C5.25 8.66421 5.58579 9 6 9Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function ok(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-tab-issues-empty] {\\n display: flex;\\n flex: 1;\\n padding: 12px;\\n min-height: 0;\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-empty-content] {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n flex: 1;\\n border: 1px dashed var(--color-gray-alpha-500);\\n border-radius: 4px;\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-empty-icon] {\\n margin-bottom: 16px;\\n padding: 8px;\\n border: 1px solid var(--color-gray-alpha-400);\\n border-radius: 6px;\\n\\n background-color: var(--color-background-100);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-empty-title] {\\n color: var(--color-gray-1000);\\n font-size: 16px;\\n font-weight: 500;\\n line-height: var(--line-height-20);\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-empty-subtitle] {\\n color: var(--color-gray-900);\\n font-size: 14px;\\n line-height: var(--line-height-21);\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ok=function(){return t},t}function oA(){return(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-empty\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-empty-content\":!0,children:[(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-empty-icon\":!0,children:(0,y.jsx)(oj,{width:16,height:16})}),(0,y.jsx)(\"h3\",{\"data-nextjs-devtools-panel-tab-issues-empty-title\":!0,children:\"No Issues Found\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-tab-issues-empty-subtitle\":!0,children:\"Issues will appear here when they occur.\"})]})})}var oO=ei(ok());function oC(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oS(){var e,n,t=(e=[\"\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oS=function(){return t},t}function oE(e){var n=e.notes,t=e.buildError,r=e.hydrationWarning,o=e.errorDetails,a=e.activeError,i=e.errorType,l=e.debugInfo,s=e.errorCode;return t?(0,y.jsx)(oz,{message:t,debugInfo:l}):(0,y.jsx)(o_,{notes:n,hydrationWarning:r,errorDetails:o,activeError:a,errorType:i,debugInfo:l,errorCode:s})}function o_(e){var n=e.notes,t=e.hydrationWarning,r=e.errorDetails,o=e.activeError,a=e.errorType,i=e.debugInfo,l=e.errorCode;return o&&a?(0,y.jsxs)(ox,{error:o.error,errorType:a,message:o.error.message,debugInfo:i,errorCode:l,environmentName:o.error.environmentName,children:[(0,y.jsxs)(\"div\",{className:\"error-overlay-notes-container\",children:[n?(0,y.jsx)(y.Fragment,{children:(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__notes\",className:\"nextjs__container_errors__notes\",children:n})}):null,t?(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__link\",className:\"nextjs__container_errors__link\",children:(0,y.jsx)(eb,{text:\"See more info here: \".concat(np)})}):null]}),(null==r?void 0:r.reactOutputComponentDiff)?(0,y.jsx)(th,{reactOutputComponentDiff:r.reactOutputComponentDiff||\"\"}):null,(0,y.jsx)(x.Suspense,{fallback:(0,y.jsx)(od,{}),children:(0,y.jsx)(oP,{error:o},o.id.toString())})]}):(0,y.jsx)(oA,{})}function oP(e){var n,t,r=e.error,o=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return oC(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oC(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=tj(r),s=(0,x.useMemo)(function(){return l.reduce(function(e,n){return e+ +!!n.ignored},0)},[l]),c=(0,x.useMemo)(function(){var e,n=l.findIndex(function(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame});return null!=(e=l[n])?e:null},[l]);return(0,y.jsxs)(y.Fragment,{children:[c&&c.originalStackFrame&&c.originalCodeFrame&&(0,y.jsx)(eq,{stackFrame:c.originalStackFrame,codeFrame:c.originalCodeFrame}),l.length>0&&(0,y.jsx)(tl,{frames:l,isIgnoreListOpen:a,onToggleIgnoreList:function(){return i(!a)},ignoredFramesTally:s})]})}function oz(e){var n=e.message,t=e.debugInfo,r=Error(n),o=(0,x.useMemo)(function(){return tt(n)||\"Failed to compile\"},[n]);return(0,y.jsx)(ox,{errorType:\"Build Error\",error:r,message:o,debugInfo:t,children:(0,y.jsx)(tn,{content:n})})}var oL=ei(oS());function oT(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-tab-issues] {\\n display: flex;\\n flex: 1;\\n min-height: 0;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oT=function(){return t},t}function oR(e){var n=e.debugInfo,t=e.runtimeErrors,r=e.getSquashedHydrationErrorDetails,o=e.buildError,a=tS({runtimeErrors:t,getSquashedHydrationErrorDetails:r}),i=a.errorCode,l=a.errorType,s=a.hydrationWarning,c=a.activeError,u=a.activeIdx,d=a.setActiveIndex,f=a.notes,p=a.errorDetails;return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-tab-issues\":!0,children:[o?null:(0,y.jsx)(oi,{runtimeErrors:t,errorType:l,activeIdx:u,setActiveIndex:d}),(0,y.jsx)(oE,{buildError:o,notes:f,hydrationWarning:s,errorDetails:p,activeError:c,errorType:l,debugInfo:n,errorCode:i})]})}var oN=ei(oT()),oD= false?0:function(){return null};function oB(e){var n=e.routerType,t=e.page;return(0,y.jsx)(oD,{isAppRouter:\"app\"===n,page:t})}function oM(e){var n=e.routerType,t=e.page;return(0,y.jsx)(oB,{routerType:n,page:t})}function oI(e){var n=e.activeTab,t=e.devToolsPosition,r=e.scale,o=e.routerType,a=e.handlePositionChange,i=e.handleScaleChange,l=e.debugInfo,s=e.runtimeErrors,c=e.getSquashedHydrationErrorDetails,u=e.buildError,d=e.page;switch(n){case\"settings\":return(0,y.jsx)(oe,{devToolsPosition:t,scale:r,handlePositionChange:a,handleScaleChange:i});case\"route\":return(0,y.jsx)(oM,{routerType:o,page:d});case\"issues\":return(0,y.jsx)(oR,{debugInfo:l,runtimeErrors:s,getSquashedHydrationErrorDetails:c,buildError:u});default:return null}}function oH(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"12\",height:\"12\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.08889 11.8384L2.62486 12.3024L1.69678 11.3744L2.16082 10.9103L6.07178 6.99937L2.16082 3.08841L1.69678 2.62437L2.62486 1.69629L3.08889 2.16033L6.99986 6.07129L10.9108 2.16033L11.3749 1.69629L12.3029 2.62437L11.8389 3.08841L7.92793 6.99937L11.8389 10.9103L12.3029 11.3744L11.3749 12.3024L10.9108 11.8384L6.99986 7.92744L3.08889 11.8384Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function oF(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oU(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function oV(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function oq(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function oW(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return oF(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oF(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function o$(){var e,n,t=(e=[\"\\n [data-next-badge-root] {\\n --timing: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n --duration-long: 250ms;\\n --color-outer-border: #171717;\\n --color-inner-border: hsla(0, 0%, 100%, 0.14);\\n --color-hover-alpha-subtle: hsla(0, 0%, 100%, 0.13);\\n --color-hover-alpha-error: hsla(0, 0%, 100%, 0.2);\\n --color-hover-alpha-error-2: hsla(0, 0%, 100%, 0.25);\\n --mark-size: calc(var(--size) - var(--size-2) * 2);\\n\\n --focus-color: var(--color-blue-800);\\n --focus-ring: 2px solid var(--focus-color);\\n\\n &:has([data-next-badge][data-error='true']) {\\n --focus-color: #fff;\\n }\\n }\\n\\n [data-disabled-icon] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding-right: 4px;\\n }\\n\\n [data-next-badge] {\\n -webkit-font-smoothing: antialiased;\\n width: var(--size);\\n height: var(--size);\\n display: flex;\\n align-items: center;\\n position: relative;\\n background: rgba(0, 0, 0, 0.8);\\n box-shadow:\\n 0 0 0 1px var(--color-outer-border),\\n inset 0 0 0 1px var(--color-inner-border),\\n 0px 16px 32px -8px rgba(0, 0, 0, 0.24);\\n backdrop-filter: blur(48px);\\n border-radius: var(--rounded-full);\\n user-select: none;\\n cursor: pointer;\\n scale: 1;\\n overflow: hidden;\\n will-change: scale, box-shadow, width, background;\\n transition:\\n scale var(--duration-short) var(--timing),\\n width var(--duration-long) var(--timing),\\n box-shadow var(--duration-long) var(--timing),\\n background var(--duration-short) ease;\\n\\n &:active[data-error='false'] {\\n scale: 0.95;\\n }\\n\\n &[data-animate='true']:not(:hover) {\\n scale: 1.02;\\n }\\n\\n &[data-error='false']:has([data-next-mark]:focus-visible) {\\n outline: var(--focus-ring);\\n outline-offset: 3px;\\n }\\n\\n &[data-error='true'] {\\n background: #ca2a30;\\n --color-inner-border: #e5484d;\\n\\n [data-next-mark] {\\n background: var(--color-hover-alpha-error);\\n outline-offset: 0px;\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n &:hover {\\n background: var(--color-hover-alpha-error-2);\\n }\\n }\\n }\\n\\n &[data-error-expanded='false'][data-error='true'] ~ [data-dot] {\\n scale: 1;\\n }\\n\\n > div {\\n display: flex;\\n }\\n }\\n\\n [data-issues-collapse]:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n [data-issues]:has([data-issues-open]:focus-visible) {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n [data-dot] {\\n content: '';\\n width: var(--size-8);\\n height: var(--size-8);\\n background: #fff;\\n box-shadow: 0 0 0 1px var(--color-outer-border);\\n border-radius: 50%;\\n position: absolute;\\n top: 2px;\\n right: 0px;\\n scale: 0;\\n pointer-events: none;\\n transition: scale 200ms var(--timing);\\n transition-delay: var(--duration-short);\\n }\\n\\n [data-issues] {\\n --padding-left: 8px;\\n display: flex;\\n gap: 2px;\\n align-items: center;\\n padding-left: 8px;\\n padding-right: 8px;\\n height: var(--size-32);\\n margin-right: 2px;\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-short) ease;\\n\\n &:has([data-issues-open]:hover) {\\n background: var(--color-hover-alpha-error);\\n }\\n\\n &:has([data-issues-collapse]) {\\n padding-right: calc(var(--padding-left) / 2);\\n }\\n\\n [data-cross] {\\n translate: 0px -1px;\\n }\\n }\\n\\n [data-issues-open] {\\n font-size: var(--size-13);\\n color: white;\\n width: fit-content;\\n height: 100%;\\n display: flex;\\n gap: 2px;\\n align-items: center;\\n margin: 0;\\n line-height: var(--size-36);\\n font-weight: 500;\\n z-index: 2;\\n white-space: nowrap;\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n }\\n\\n [data-issues-collapse] {\\n width: var(--size-24);\\n height: var(--size-24);\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-short) ease;\\n\\n &:hover {\\n background: var(--color-hover-alpha-error);\\n }\\n }\\n\\n [data-cross] {\\n color: #fff;\\n width: var(--size-12);\\n height: var(--size-12);\\n }\\n\\n [data-next-mark] {\\n width: var(--mark-size);\\n height: var(--mark-size);\\n margin: 0 2px;\\n display: flex;\\n align-items: center;\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-long) var(--timing);\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n\\n &:hover {\\n background: var(--color-hover-alpha-subtle);\\n }\\n\\n svg {\\n flex-shrink: 0;\\n width: var(--size-40);\\n height: var(--size-40);\\n }\\n }\\n\\n [data-issues-count-animation] {\\n display: grid;\\n place-items: center center;\\n font-variant-numeric: tabular-nums;\\n\\n &[data-animate='false'] {\\n [data-issues-count-exit],\\n [data-issues-count-enter] {\\n animation-duration: 0ms;\\n }\\n }\\n\\n > * {\\n grid-area: 1 / 1;\\n }\\n\\n [data-issues-count-exit] {\\n animation: fadeOut 300ms var(--timing) forwards;\\n }\\n\\n [data-issues-count-enter] {\\n animation: fadeIn 300ms var(--timing) forwards;\\n }\\n }\\n\\n [data-issues-count-plural] {\\n display: inline-block;\\n &[data-animate='true'] {\\n animation: fadeIn 300ms var(--timing) forwards;\\n }\\n }\\n\\n .path0 {\\n animation: draw0 1.5s ease-in-out infinite;\\n }\\n\\n .path1 {\\n animation: draw1 1.5s ease-out infinite;\\n animation-delay: 0.3s;\\n }\\n\\n .paused {\\n stroke-dashoffset: 0;\\n }\\n\\n @keyframes fadeIn {\\n 0% {\\n opacity: 0;\\n filter: blur(2px);\\n transform: translateY(8px);\\n }\\n 100% {\\n opacity: 1;\\n filter: blur(0px);\\n transform: translateY(0);\\n }\\n }\\n\\n @keyframes fadeOut {\\n 0% {\\n opacity: 1;\\n filter: blur(0px);\\n transform: translateY(0);\\n }\\n 100% {\\n opacity: 0;\\n transform: translateY(-12px);\\n filter: blur(2px);\\n }\\n }\\n\\n @keyframes draw0 {\\n 0%,\\n 25% {\\n stroke-dashoffset: -29.6;\\n }\\n 25%,\\n 50% {\\n stroke-dashoffset: 0;\\n }\\n 50%,\\n 75% {\\n stroke-dashoffset: 0;\\n }\\n 75%,\\n 100% {\\n stroke-dashoffset: 29.6;\\n }\\n }\\n\\n @keyframes draw1 {\\n 0%,\\n 20% {\\n stroke-dashoffset: -11.6;\\n }\\n 20%,\\n 50% {\\n stroke-dashoffset: 0;\\n }\\n 50%,\\n 75% {\\n stroke-dashoffset: 0;\\n }\\n 75%,\\n 100% {\\n stroke-dashoffset: 11.6;\\n }\\n }\\n\\n @media (prefers-reduced-motion) {\\n [data-issues-count-exit],\\n [data-issues-count-enter],\\n [data-issues-count-plural] {\\n animation-duration: 0ms !important;\\n }\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return o$=function(){return t},t}function oZ(e){var n=e.disabled,t=e.issueCount,r=e.isDevBuilding,o=e.isDevRendering,a=e.isBuildError,i=e.onTriggerClick,l=e.toggleErrorOverlay,s=e.scale,c=oq(e,[\"disabled\",\"issueCount\",\"isDevBuilding\",\"isDevRendering\",\"isBuildError\",\"onTriggerClick\",\"toggleErrorOverlay\",\"scale\"]),u=t>0,d=oW((0,x.useState)(u),2),f=d[0],p=d[1],h=oW((0,x.useState)(!1),2),g=h[0],m=h[1],v=tM(t,150),b=(0,x.useRef)(null),w=(0,x.useRef)(null),j=tF(w),k=tD(r||o),A=f||n;return(0,x.useEffect)(function(){p(u)},[u]),(0,y.jsxs)(\"div\",{\"data-next-badge-root\":!0,style:{\"--size\":\"\".concat(36/(void 0===s?1:s),\"px\"),\"--duration-short\":\"\".concat(150,\"ms\"),display:n&&(!u||g)?\"none\":\"block\"},children:[(0,y.jsx)(\"style\",{children:ei(o$())}),(0,y.jsx)(\"div\",{\"data-next-badge\":!0,\"data-error\":u,\"data-error-expanded\":A,\"data-animate\":v,style:{width:0===j?\"auto\":j},children:(0,y.jsxs)(\"div\",{ref:w,children:[!n&&(0,y.jsx)(\"button\",oV(oU({ref:b,\"data-next-mark\":!0,\"data-next-mark-loading\":k,onClick:i},c),{children:(0,y.jsx)(oX,{isLoading:k,isDevBuilding:r})})),A&&(0,y.jsxs)(\"div\",{\"data-issues\":!0,children:[(0,y.jsxs)(\"button\",{\"data-issues-open\":!0,\"aria-label\":\"Open issues overlay\",onClick:l,children:[n&&(0,y.jsx)(\"div\",{\"data-disabled-icon\":!0,children:(0,y.jsx)(oj,{})}),(0,y.jsx)(oY,{animate:v,\"data-issues-count-animation\":!0,children:t},t),\" \",(0,y.jsxs)(\"div\",{children:[\"Issue\",t>1&&(0,y.jsx)(\"span\",{\"aria-hidden\":!0,\"data-issues-count-plural\":!0,\"data-animate\":v&&2===t,children:\"s\"})]})]}),!a&&(0,y.jsx)(\"button\",{\"data-issues-collapse\":!0,\"aria-label\":\"Collapse issues badge\",onClick:function(){var e;n?m(!0):p(!1),null==(e=b.current)||e.focus()},children:(0,y.jsx)(oH,{\"data-cross\":!0})})]})]})}),(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-dot\":!0})]})}function oY(e){var n=e.children,t=e.animate,r=oq(e,[\"children\",\"animate\"]);return(0,y.jsxs)(\"div\",oV(oU({},r),{\"data-animate\":void 0===t||t,children:[(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-issues-count-exit\":!0,children:n-1}),(0,y.jsx)(\"div\",{\"data-issues-count\":!0,\"data-issues-count-enter\":!0,children:n})]}))}function oX(e){var n=e.isLoading,t=e.isDevBuilding?\"rgba(255,255,255,0.7)\":\"white\";return(0,y.jsxs)(\"svg\",{width:\"40\",height:\"40\",viewBox:\"0 0 40 40\",fill:\"none\",\"data-next-mark-loading\":n,children:[(0,y.jsxs)(\"g\",{transform:\"translate(8.5, 13)\",children:[(0,y.jsx)(\"path\",{className:n?\"path0\":\"paused\",d:\"M13.3 15.2 L2.34 1 V12.6\",fill:\"none\",stroke:\"url(#next_logo_paint0_linear_1357_10853)\",strokeWidth:\"1.86\",mask:\"url(#next_logo_mask0)\",strokeDasharray:\"29.6\",strokeDashoffset:\"29.6\"}),(0,y.jsx)(\"path\",{className:n?\"path1\":\"paused\",d:\"M11.825 1.5 V13.1\",strokeWidth:\"1.86\",stroke:\"url(#next_logo_paint1_linear_1357_10853)\",strokeDasharray:\"11.6\",strokeDashoffset:\"11.6\"})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint0_linear_1357_10853\",x1:\"9.95555\",y1:\"11.1226\",x2:\"15.4778\",y2:\"17.9671\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"0.604072\",stopColor:t,stopOpacity:\"0\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint1_linear_1357_10853\",x1:\"11.8222\",y1:\"1.40039\",x2:\"11.791\",y2:\"9.62542\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"mask\",{id:\"next_logo_mask0\",children:[(0,y.jsx)(\"rect\",{width:\"100%\",height:\"100%\",fill:\"white\"}),(0,y.jsx)(\"rect\",{width:\"5\",height:\"1.5\",fill:\"black\"})]})]})]})}function oK(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oQ(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function oG(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return oK(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oK(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function oJ(e){var n,t=e.state,r=e.dispatch,o=e.errorCount,a=e.isBuildError,i=oG((0,x.useState)(!1),2),l=i[0],s=i[1],c=oG(t.devToolsPosition.split(\"-\",2),2),u=c[0],d=c[1];return(0,y.jsx)(tR,{\"data-nextjs-toast\":!0,style:(oQ(n={\"--animate-out-duration-ms\":\"\".concat(nQ.K7,\"ms\"),\"--animate-out-timing-function\":nQ.uD,boxShadow:\"none\"},u,\"\".concat(20,\"px\")),oQ(n,d,\"\".concat(20,\"px\")),oQ(n,\"visibility\",t.isDevToolsPanelOpen||t.isErrorOverlayOpen?\"hidden\":\"visible\"),n),children:(0,y.jsx)(rN,{padding:20,onDragStart:function(){return s(!1)},position:t.devToolsPosition,setPosition:function(e){r({type:Y,devToolsPosition:e}),localStorage.setItem(G,e)},children:(0,y.jsx)(oZ,{\"aria-haspopup\":\"menu\",\"aria-expanded\":l,\"aria-controls\":\"nextjs-dev-tools-menu\",\"aria-label\":\"\".concat(l?\"Close\":\"Open\",\" Next.js Dev Tools\"),\"data-nextjs-dev-tools-button\":!0,disabled:t.disableDevIndicator,issueCount:o,onTriggerClick:function(){r({type:Z})},toggleErrorOverlay:function(){r({type:M}),r({type:W})},isDevBuilding:t.buildingIndicator,isDevRendering:t.renderingIndicator,isBuildError:a,scale:t.scale})})})}function o0(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\"},e),t=t={children:(0,y.jsx)(\"path\",{d:\"M15 14C15 14.5523 14.5523 15 14 15H10V13.5H13.5V10H15V14ZM2.5 13.499H6V14.999H2C1.44772 14.999 1 14.5513 1 13.999V9.99902H2.5V13.499ZM6 2.5H2.5V6H1V2C1 1.44772 1.44772 1 2 1H6V2.5ZM14 1C14.5523 1 15 1.44772 15 2V6H13.5V2.5H10V1H14Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function o1(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M1 6V4.5H4.5V1H6V5C6 5.55228 5.55228 6 5 6H1ZM11.5 1H10V5C10 5.55228 10.4477 6 11 6H15V4.5H11.5V1ZM15.04 11.5V10H11C10.4477 10 10 10.4477 10 11V15H11.5V11.5H15.04ZM4.5 15H6V11C6 10.4477 5.55228 10 5 10H1V11.5H4.5V15Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function o2(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var o4=\"nextjs-devtools-dimensions\",o5=(0,x.createContext)(null),o3=function(e){var n=.95*window.innerWidth,t=.95*window.innerHeight;return{width:Math.min(n,Math.max(e.minWidth,e.width)),height:Math.min(t,Math.max(e.minHeight,e.height))}},o6=function(){var e=localStorage.getItem(o4);if(!e)return null;try{var n,t=JSON.parse(e);if((void 0===t?\"undefined\":(n=t)&&\"undefined\"!=typeof Symbol&&n.constructor===Symbol?\"symbol\":typeof n)==\"object\"&&null!==t&&\"number\"==typeof t.width&&\"number\"==typeof t.height)return{width:t.width,height:t.height};return null}catch(e){return localStorage.removeItem(o4),null}},o9=function(e){var n,t,r,o,a=e.value,i=e.children,l=null!=(r=a.minWidth)?r:100,s=null!=(o=a.minHeight)?o:80,c=(n=(0,x.useState)(null),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return o2(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o2(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),u=c[0],d=c[1];return(0,x.useLayoutEffect)(function(){var e=function(){if(a.resizeRef.current){var e=o6();if(e){var n,t,r=o3((n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},e),t=t={minWidth:null!=l?l:100,minHeight:null!=s?s:80},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)),o=r.height,i=r.width;a.resizeRef.current.style.width=\"\".concat(i,\"px\"),a.resizeRef.current.style.height=\"\".concat(o,\"px\")}}};return e(),window.addEventListener(\"resize\",e),function(){return window.removeEventListener(\"resize\",e)}},[a.resizeRef,l,s]),(0,y.jsx)(o5.Provider,{value:{resizeRef:a.resizeRef,minWidth:l,minHeight:s,devToolsPosition:a.devToolsPosition,draggingDirection:u,setDraggingDirection:d},children:i})},o8=function(){var e=(0,x.useContext)(o5);if(!e)throw Error(\"useResize must be used within a Resize provider\");return e},o7=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\"),ae={};function an(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}ae.styleTagTransform=h(),ae.setAttributes=u(),ae.insert=s(),ae.domAPI=i(),ae.insertStyleElement=f(),o()(o7.Z,ae),o7.Z&&o7.Z.locals&&o7.Z.locals;var at=function(e){var n,t,r=e.direction,o=o8(),a=o.resizeRef,i=o.minWidth,l=o.minHeight,s=o.devToolsPosition,c=o.draggingDirection,u=o.setDraggingDirection,d=(n=(0,x.useState)({top:0,right:0,bottom:0,left:0}),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return an(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return an(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),f=d[0],p=d[1];if((0,x.useLayoutEffect)(function(){if(a.current){var e=a.current,n=window.getComputedStyle(e);p({top:parseFloat(n.borderTopWidth)||0,right:parseFloat(n.borderRightWidth)||0,bottom:parseFloat(n.borderBottomWidth)||0,left:parseFloat(n.borderLeftWidth)||0})}},[a]),!(!s.split(\"-\").includes(r)&&(!r.includes(\"-\")||r===function(e){switch(e){case\"top-left\":return\"bottom-right\";case\"top-right\":return\"bottom-left\";case\"bottom-left\":return\"top-right\";case\"bottom-right\":return\"top-left\";default:return null}}(s))))return null;var h=f.left+f.right,g=f.top+f.bottom,m=r.includes(\"-\");return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"div\",{className:\"resize-container \".concat(r,\" \").concat(c&&c!==r?\"no-hover\":\"\"),onMouseDown:function(e){if(e.preventDefault(),a.current){u(r);var n=a.current,t=n.getBoundingClientRect(),o=n.offsetLeft,s=n.offsetTop,c=e.clientX,d=e.clientY,f=function(e){var a=ar(r,e.clientX-c,e.clientY-d,t,o,s,i,l),u=a.newWidth,f=a.newHeight,p=a.newLeft,h=a.newTop;n.style.width=\"\".concat(u,\"px\"),n.style.height=\"\".concat(f,\"px\"),(r.includes(\"left\")||\"left\"===r)&&(n.style.left=\"\".concat(p,\"px\")),(r.includes(\"top\")||\"top\"===r)&&(n.style.top=\"\".concat(h,\"px\"))},p=function(){u(null),document.removeEventListener(\"mousemove\",f),document.removeEventListener(\"mouseup\",p);var e=a.current.getBoundingClientRect(),n=e.width,t=e.height;localStorage.setItem(\"nextjs-devtools-dimensions\",JSON.stringify({width:n,height:t}))};document.addEventListener(\"mousemove\",f),document.addEventListener(\"mouseup\",p)}}}),!m&&(0,y.jsx)(\"div\",{className:\"resize-line \".concat(r,\" \").concat(c===r?\"dragging\":\"\"),style:{\"--border-horizontal\":\"\".concat(h,\"px\"),\"--border-vertical\":\"\".concat(g,\"px\"),\"--border-top\":\"\".concat(f.top,\"px\"),\"--border-right\":\"\".concat(f.right,\"px\"),\"--border-bottom\":\"\".concat(f.bottom,\"px\"),\"--border-left\":\"\".concat(f.left,\"px\")}})]})},ar=function(e,n,t,r,o,a,i,l){var s=.95*window.innerWidth,c=.95*window.innerHeight;switch(e){case\"right\":return{newWidth:Math.min(s,Math.max(i,r.width+n)),newHeight:r.height,newLeft:o,newTop:a};case\"left\":var u=Math.min(s,Math.max(i,r.width-n)),d=u-r.width;return{newWidth:u,newHeight:r.height,newLeft:o-d,newTop:a};case\"bottom\":return{newWidth:r.width,newHeight:Math.min(c,Math.max(l,r.height+t)),newLeft:o,newTop:a};case\"top\":var f=Math.min(c,Math.max(l,r.height-t)),p=f-r.height;return{newWidth:r.width,newHeight:f,newLeft:o,newTop:a-p};case\"top-left\":var h=Math.min(s,Math.max(i,r.width-n)),g=Math.min(c,Math.max(l,r.height-t)),m=h-r.width,v=g-r.height;return{newWidth:h,newHeight:g,newLeft:o-m,newTop:a-v};case\"top-right\":var b=Math.min(c,Math.max(l,r.height-t)),y=b-r.height;return{newWidth:Math.min(s,Math.max(i,r.width+n)),newHeight:b,newLeft:o,newTop:a-y};case\"bottom-left\":var x=Math.min(s,Math.max(i,r.width-n)),w=x-r.width;return{newWidth:x,newHeight:Math.min(c,Math.max(l,r.height+t)),newLeft:o-w,newTop:a};case\"bottom-right\":return{newWidth:Math.min(s,Math.max(i,r.width+n)),newHeight:Math.min(c,Math.max(l,r.height+t)),newLeft:o,newTop:a};default:return null}};function ao(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function aa(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ai(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return ao(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ao(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function al(){var e,n,t=(e=[\"\\n /* TODO: Better override dialog header style. This conflicts with issues tab content. */\\n [data-nextjs-devtools-panel-dialog-header] {\\n flex-shrink: 0;\\n margin-bottom: 0 !important;\\n }\\n\\n [data-nextjs-devtools-panel-dialog-content] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n min-height: 0; // what allows content to overflow\\n }\\n\\n [data-nextjs-devtools-panel-dialog-body] {\\n flex: 1;\\n overflow: auto;\\n }\\n\\n [data-nextjs-devtools-panel-overlay] {\\n margin: auto;\\n width: 525px;\\n height: 375px;\\n }\\n\\n [data-nextjs-devtools-panel-overlay-backdrop] {\\n opacity: 0;\\n visibility: hidden;\\n }\\n\\n [data-nextjs-devtools-panel-overlay-backdrop='true'] {\\n opacity: 1;\\n visibility: visible;\\n }\\n\\n [data-nextjs-devtools-panel-draggable] {\\n /* For responsiveness */\\n width: 100%;\\n height: 100%;\\n }\\n\\n [data-nextjs-devtools-panel-dialog] {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n flex-direction: column;\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-xl);\\n box-shadow: var(--shadow-lg);\\n position: relative;\\n width: 100%;\\n height: 100%;\\n min-width: 400px;\\n min-height: 350px;\\n }\\n\\n [data-nextjs-devtools-panel-header] {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n border-bottom: 1px solid var(--color-gray-400);\\n }\\n\\n [data-nextjs-devtools-panel-header-tab-group] {\\n display: flex;\\n align-items: center;\\n padding: 8px;\\n gap: 6px;\\n }\\n\\n [data-nextjs-devtools-panel-header-tab] {\\n display: flex;\\n align-items: center;\\n color: var(--color-gray-900);\\n border-radius: var(--rounded-md-2);\\n padding: 4px 12px;\\n font-size: 14px;\\n font-weight: 500;\\n transition: background-color 200ms ease;\\n\\n &:hover {\\n background-color: var(--color-gray-200);\\n }\\n\\n &:active {\\n background-color: var(--color-gray-300);\\n }\\n }\\n\\n [data-nextjs-devtools-panel-header-tab='true'] {\\n color: var(--color-gray-1000);\\n background-color: var(--color-gray-100);\\n }\\n\\n [data-nextjs-devtools-panel-header-tab-issues-badge] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n margin-left: 8px;\\n background-color: var(--color-red-400);\\n color: var(--color-red-900);\\n font-size: 11px;\\n border-radius: var(--rounded-full);\\n padding: 2px 6px;\\n width: 20px;\\n height: 20px;\\n font-weight: 500;\\n }\\n\\n [data-nextjs-devtools-panel-header-action-button-group] {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n padding-right: 8px;\\n }\\n\\n [data-nextjs-devtools-panel-header-action-button] {\\n background: transparent;\\n border: none;\\n cursor: pointer;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 6px;\\n color: var(--color-gray-1000);\\n border-radius: 4px;\\n transition-property: background-color, color;\\n transition-duration: 200ms;\\n transition-timing-function: ease;\\n\\n &:hover {\\n background-color: var(--color-gray-200);\\n color: var(--color-gray-900);\\n }\\n\\n &:active {\\n background-color: var(--color-gray-300);\\n }\\n }\\n\\n [data-nextjs-devtools-panel-draggable='true'] {\\n cursor: move;\\n user-select: none;\\n & > * {\\n cursor: auto;\\n /* user-select: auto; follows the parent (parent none -> child none), so reset the direct child to text */\\n user-select: text;\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return al=function(){return t},t}function as(e){var n,t,r,o,a,i,l=e.state,s=e.dispatch,c=e.issueCount,u=e.runtimeErrors,d=e.getSquashedHydrationErrorDetails,f=ai((n=\"__nextjs-devtools-active-tab\",t=\"issues\",o=(r=ai((0,x.useState)(function(){if(\"undefined\"!=typeof window&&\"undefined\"!=typeof sessionStorage){var e=sessionStorage.getItem(n);return null!=e?e:t}return t}),2))[0],a=r[1],(0,x.useEffect)(function(){\"undefined\"!=typeof window&&\"undefined\"!=typeof sessionStorage&&sessionStorage.setItem(n,o)},[n,o]),[o,a]),2),p=f[0],h=f[1],g=ai((0,x.useState)(!1),2),m=g[0],v=g[1],b=ai((0,x.useState)(!1),2),w=b[0],j=b[1],k=(0,x.useRef)(null);l.isErrorOverlayOpen!==w&&(l.isErrorOverlayOpen&&(v(!0),h(\"issues\")),j(l.isErrorOverlayOpen));var A=ai(l.devToolsPosition.split(\"-\",2),2),O=A[0],C=A[1],S=function(){s({type:$}),s({type:I})};return(0,y.jsx)(o9,{value:{resizeRef:k,minWidth:400,minHeight:350,devToolsPosition:l.devToolsPosition},children:(0,y.jsxs)(nZ,{ref:k,\"data-nextjs-devtools-panel-overlay\":!0,style:m?{}:(aa(i={},O,\"\".concat(20,\"px\")),aa(i,C,\"\".concat(20,\"px\")),aa(i,\"top\"===O?\"bottom\":\"top\",\"auto\"),aa(i,\"left\"===C?\"right\":\"left\",\"auto\"),i),children:[(0,y.jsx)(n2,{\"data-nextjs-devtools-panel-overlay-backdrop\":m,onClick:S}),(0,y.jsx)(rN,{\"data-nextjs-devtools-panel-draggable\":!0,padding:20,onDragStart:function(){},position:l.devToolsPosition,setPosition:function(e){localStorage.setItem(G,e),s({type:Y,devToolsPosition:e})},dragHandleSelector:\"[data-nextjs-devtools-panel-header], [data-nextjs-devtools-panel-footer]\",disableDrag:m,children:(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(eZ,{\"data-nextjs-devtools-panel-dialog\":!0,\"aria-labelledby\":\"nextjs__container_dev_tools_panel_label\",\"aria-describedby\":\"nextjs__container_dev_tools_panel_desc\",onClose:S,children:[(0,y.jsxs)(eX,{\"data-nextjs-devtools-panel-dialog-content\":!0,children:[(0,y.jsx)(eK,{\"data-nextjs-devtools-panel-dialog-header\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-header\":!0,\"data-nextjs-devtools-panel-draggable\":!m,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-header-tab-group\":!0,children:[(0,y.jsxs)(\"button\",{\"data-nextjs-devtools-panel-header-tab\":\"issues\"===p,onClick:function(){return h(\"issues\")},children:[\"Issues\",c>0?(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-header-tab-issues-badge\":!0,children:c}):null]}),(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-tab\":\"route\"===p,onClick:function(){return h(\"route\")},children:\"Route Info\"}),(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-tab\":\"settings\"===p,onClick:function(){return h(\"settings\")},children:\"Settings\"})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-header-action-button-group\":!0,children:[(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-action-button\":!0,onClick:function(){v(function(e){return!e}),s({type:I})},children:m?(0,y.jsx)(o1,{width:16,height:16}):(0,y.jsx)(o0,{width:16,height:16})}),(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-action-button\":!0,onClick:S,children:(0,y.jsx)(oH,{width:16,height:16})})]})]})}),(0,y.jsx)(eY,{\"data-nextjs-devtools-panel-dialog-body\":!0,children:(0,y.jsx)(oI,{page:l.page,activeTab:p,devToolsPosition:l.devToolsPosition,scale:l.scale,routerType:l.routerType,handlePositionChange:function(e){s({type:Y,devToolsPosition:e.target.value}),localStorage.setItem(G,e.target.value)},handleScaleChange:function(e){s({type:X,scale:Number(e.target.value)}),localStorage.setItem(J,e.target.value)},debugInfo:l.debugInfo,runtimeErrors:u,getSquashedHydrationErrorDetails:d,buildError:l.buildError})})]}),(0,y.jsx)(r2,{versionInfo:l.versionInfo,isDraggable:!m,showRestartServerButton:l.showRestartServerButton})]}),!m&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(at,{direction:\"top\"}),(0,y.jsx)(at,{direction:\"right\"}),(0,y.jsx)(at,{direction:\"bottom\"}),(0,y.jsx)(at,{direction:\"left\"}),(0,y.jsx)(at,{direction:\"top-left\"}),(0,y.jsx)(at,{direction:\"top-right\"}),(0,y.jsx)(at,{direction:\"bottom-left\"}),(0,y.jsx)(at,{direction:\"bottom-right\"})]})]})})]})})}var ac=ei(al());function au(){var e,n,t=(e=[\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return au=function(){return t},t}function ad(){return(0,y.jsx)(\"style\",{children:ei(au(),\"\\n .nextjs-data-copy-button {\\n color: inherit;\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n }\\n .nextjs-data-copy-button:disabled {\\n background-color: var(--color-gray-100);\\n cursor: not-allowed;\\n }\\n .nextjs-data-copy-button--initial:hover:not(:disabled) {\\n cursor: pointer;\\n }\\n .nextjs-data-copy-button--error:not(:disabled),\\n .nextjs-data-copy-button--error:hover:not(:disabled) {\\n color: var(--color-ansi-red);\\n }\\n .nextjs-data-copy-button--success:not(:disabled) {\\n color: var(--color-ansi-green);\\n }\\n\",'\\n [data-nextjs-call-stack-frame-no-source] {\\n padding: 6px 8px;\\n margin-bottom: 4px;\\n\\n border-radius: var(--rounded-lg);\\n }\\n\\n [data-nextjs-call-stack-frame-no-source]:last-child {\\n margin-bottom: 0;\\n }\\n\\n [data-nextjs-call-stack-frame-ignored=\"true\"] {\\n opacity: 0.6;\\n }\\n\\n [data-nextjs-call-stack-frame] {\\n user-select: text;\\n display: block;\\n box-sizing: border-box;\\n\\n user-select: text;\\n -webkit-user-select: text;\\n -moz-user-select: text;\\n -ms-user-select: text;\\n\\n padding: 6px 8px;\\n\\n border-radius: var(--rounded-lg);\\n }\\n\\n .call-stack-frame-method-name {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n\\n margin-bottom: 4px;\\n font-family: var(--font-stack-monospace);\\n\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-20);\\n\\n svg {\\n width: var(--size-16px);\\n height: var(--size-16px);\\n }\\n }\\n\\n .open-in-editor-button, .source-mapping-error-button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--rounded-full);\\n padding: 4px;\\n color: var(--color-font);\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -2px;\\n }\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n }\\n\\n .call-stack-frame-file-source {\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n }\\n',ts,\"\\n [data-nextjs-environment-name-label] {\\n padding: 2px 6px;\\n margin: 0;\\n border-radius: var(--rounded-md-2);\\n background: var(--color-gray-100);\\n font-weight: 600;\\n font-size: var(--size-12);\\n color: var(--color-gray-900);\\n font-family: var(--font-stack-monospace);\\n line-height: var(--size-20);\\n }\\n\",\"\\n [data-nextjs-dialog-overlay] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n /* secondary z-index, -1 than toast z-index */\\n z-index: 2147483646;\\n\\n display: flex;\\n align-content: center;\\n align-items: center;\\n flex-direction: column;\\n padding: 10vh 15px 0;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n padding: 15px 15px 0;\\n }\\n }\\n\\n [data-nextjs-dialog-backdrop] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n background-color: var(--color-backdrop);\\n backdrop-filter: blur(10px);\\n pointer-events: all;\\n z-index: -1;\\n }\\n\\n [data-nextjs-dialog-backdrop-fixed] {\\n cursor: not-allowed;\\n -webkit-backdrop-filter: blur(8px);\\n backdrop-filter: blur(8px);\\n }\\n\",eG,n8,nE,\"\\n .error-overlay-bottom-stack-layer {\\n width: 100%;\\n height: var(--stack-layer-height);\\n position: relative;\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-xl);\\n background: var(--color-background-200);\\n transition:\\n translate 350ms var(--timing-swift),\\n box-shadow 350ms var(--timing-swift);\\n }\\n\\n .error-overlay-bottom-stack-layer-1 {\\n width: calc(100% - var(--size-24));\\n }\\n\\n .error-overlay-bottom-stack-layer-2 {\\n width: calc(100% - var(--size-48));\\n z-index: -1;\\n }\\n\\n .error-overlay-bottom-stack {\\n width: 100%;\\n position: absolute;\\n bottom: -1px;\\n height: 0;\\n overflow: visible;\\n }\\n\\n .error-overlay-bottom-stack-stack {\\n --stack-layer-height: 44px;\\n --stack-layer-height-half: calc(var(--stack-layer-height) / 2);\\n --stack-layer-trim: 13px;\\n --shadow: 0px 0.925px 0.925px 0px rgba(0, 0, 0, 0.02),\\n 0px 3.7px 7.4px -3.7px rgba(0, 0, 0, 0.04),\\n 0px 14.8px 22.2px -7.4px rgba(0, 0, 0, 0.06);\\n\\n display: grid;\\n place-items: center center;\\n width: 100%;\\n position: fixed;\\n overflow: hidden;\\n z-index: -1;\\n max-width: var(--next-dialog-max-width);\\n\\n .error-overlay-bottom-stack-layer {\\n grid-area: 1 / 1;\\n /* Hide */\\n translate: 0 calc(var(--stack-layer-height) * -1);\\n }\\n\\n &[data-stack-count='1'],\\n &[data-stack-count='2'] {\\n .error-overlay-bottom-stack-layer-1 {\\n translate: 0\\n calc(var(--stack-layer-height-half) * -1 - var(--stack-layer-trim));\\n }\\n }\\n\\n &[data-stack-count='2'] {\\n .error-overlay-bottom-stack-layer-2 {\\n translate: 0 calc(var(--stack-layer-trim) * -1 * 2);\\n }\\n }\\n\\n /* Only the bottom stack should have the shadow */\\n &[data-stack-count='1'] .error-overlay-bottom-stack-layer-1 {\\n box-shadow: var(--shadow);\\n }\\n\\n &[data-stack-count='2'] {\\n .error-overlay-bottom-stack-layer-2 {\\n box-shadow: var(--shadow);\\n }\\n }\\n }\\n\",\"\\n .error-overlay-pagination {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n gap: 8px;\\n width: fit-content;\\n }\\n\\n .error-overlay-pagination-count {\\n color: var(--color-gray-900);\\n text-align: center;\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-16);\\n font-variant-numeric: tabular-nums;\\n }\\n\\n .error-overlay-pagination-button {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n\\n width: var(--size-24);\\n height: var(--size-24);\\n background: var(--color-gray-300);\\n flex-shrink: 0;\\n\\n border: none;\\n border-radius: var(--rounded-full);\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n &:not(:disabled):active {\\n background: var(--color-gray-500);\\n }\\n\\n &:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n }\\n }\\n\\n .error-overlay-pagination-button-icon {\\n color: var(--color-gray-1000);\\n }\\n\",'\\n [data-nextjs-codeframe] {\\n --code-frame-padding: 12px;\\n --code-frame-line-height: var(--size-16);\\n background-color: var(--color-background-200);\\n color: var(--color-gray-1000);\\n text-overflow: ellipsis;\\n border: 1px solid var(--color-gray-400);\\n border-radius: 8px;\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-12);\\n line-height: var(--code-frame-line-height);\\n margin: 8px 0;\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n }\\n\\n .code-frame-link,\\n .code-frame-pre {\\n padding: var(--code-frame-padding);\\n }\\n\\n .code-frame-link svg {\\n flex-shrink: 0;\\n }\\n\\n .code-frame-lines {\\n min-width: max-content;\\n }\\n\\n .code-frame-link [data-text] {\\n display: inline-flex;\\n text-align: left;\\n margin: auto 6px;\\n }\\n\\n .code-frame-header {\\n width: 100%;\\n transition: background 100ms ease-out;\\n border-radius: 8px 8px 0 0;\\n border-bottom: 1px solid var(--color-gray-400);\\n }\\n\\n [data-with-open-in-editor-link-source-file] {\\n padding: 4px;\\n margin: -4px 0 -4px auto;\\n border-radius: var(--rounded-full);\\n margin-left: auto;\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -2px;\\n }\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n }\\n\\n [data-nextjs-codeframe]::selection,\\n [data-nextjs-codeframe] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n\\n [data-nextjs-codeframe] *:not(a) {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-codeframe-line][data-nextjs-codeframe-line--errored=\"true\"] {\\n position: relative;\\n isolation: isolate;\\n\\n > span { \\n position: relative;\\n z-index: 1;\\n }\\n\\n &::after {\\n content: \"\";\\n width: calc(100% + var(--code-frame-padding) * 2);\\n height: var(--code-frame-line-height);\\n left: calc(-1 * var(--code-frame-padding));\\n background: var(--color-red-200);\\n box-shadow: 2px 0 0 0 var(--color-red-900) inset;\\n position: absolute;\\n }\\n }\\n\\n\\n [data-nextjs-codeframe] > * {\\n margin: 0;\\n }\\n\\n .code-frame-link {\\n display: flex;\\n margin: 0;\\n outline: 0;\\n }\\n .code-frame-link [data-icon=\\'right\\'] {\\n margin-left: auto;\\n }\\n\\n [data-nextjs-codeframe] div > pre {\\n overflow: hidden;\\n display: inline-block;\\n }\\n\\n [data-nextjs-codeframe] svg {\\n color: var(--color-gray-900);\\n }\\n',\"\\n [data-nextjs-terminal]::selection,\\n [data-nextjs-terminal] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n\\n [data-nextjs-terminal] * {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-terminal] > div > p {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n cursor: pointer;\\n margin: 0;\\n }\\n [data-nextjs-terminal] > div > p:hover {\\n text-decoration: underline dotted;\\n }\\n [data-nextjs-terminal] div > pre {\\n overflow: hidden;\\n display: inline-block;\\n }\\n\",\"\\n [data-with-open-in-editor-link] svg {\\n width: auto;\\n height: var(--size-14);\\n margin-left: 8px;\\n }\\n [data-with-open-in-editor-link] {\\n cursor: pointer;\\n }\\n [data-with-open-in-editor-link]:hover {\\n text-decoration: underline dotted;\\n }\\n [data-with-open-in-editor-link-import-trace] {\\n margin-left: 16px;\\n }\\n\",\"\",\"\\n .nextjs-error-with-static {\\n bottom: calc(16px * 4.5);\\n }\\n p.nextjs__container_errors__link {\\n font-size: var(--size-14);\\n }\\n p.nextjs__container_errors__notes {\\n color: var(--color-stack-notes);\\n font-size: var(--size-14);\\n line-height: 1.5;\\n }\\n .nextjs-container-errors-body > h2:not(:first-child) {\\n margin-top: calc(16px + 8px);\\n }\\n .nextjs-container-errors-body > h2 {\\n color: var(--color-title-color);\\n margin-bottom: 8px;\\n font-size: var(--size-20);\\n }\\n .nextjs-toast-errors-parent {\\n cursor: pointer;\\n transition: transform 0.2s ease;\\n }\\n .nextjs-toast-errors-parent:hover {\\n transform: scale(1.1);\\n }\\n .nextjs-toast-errors {\\n display: flex;\\n align-items: center;\\n justify-content: flex-start;\\n }\\n .nextjs-toast-errors > svg {\\n margin-right: 8px;\\n }\\n .nextjs-toast-hide-button {\\n margin-left: 24px;\\n border: none;\\n background: none;\\n color: var(--color-ansi-bright-white);\\n padding: 0;\\n transition: opacity 0.25s ease;\\n opacity: 0.7;\\n }\\n .nextjs-toast-hide-button:hover {\\n opacity: 1;\\n }\\n .nextjs__container_errors__error_title {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-bottom: 14px;\\n }\\n .error-overlay-notes-container {\\n margin: 8px 2px;\\n }\\n .error-overlay-notes-container p {\\n white-space: pre-wrap;\\n }\\n\",tA,\"\\n .nextjs-container-build-error-version-status {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n gap: 4px;\\n\\n height: var(--size-26);\\n padding: 6px 8px 6px 6px;\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: 1px solid var(--color-gray-alpha-400);\\n box-shadow: var(--shadow-small);\\n border-radius: var(--rounded-full);\\n\\n color: var(--color-gray-900);\\n font-size: var(--size-12);\\n font-weight: 500;\\n line-height: var(--size-16);\\n }\\n\\n a.nextjs-container-build-error-version-status {\\n text-decoration: none;\\n color: var(--color-gray-900);\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n }\\n\\n .version-staleness-indicator.fresh {\\n fill: var(--color-green-800);\\n stroke: var(--color-green-300);\\n }\\n .version-staleness-indicator.stale {\\n fill: var(--color-amber-800);\\n stroke: var(--color-amber-300);\\n }\\n .version-staleness-indicator.outdated {\\n fill: var(--color-red-800);\\n stroke: var(--color-red-300);\\n }\\n .version-staleness-indicator.unknown {\\n fill: var(--color-gray-800);\\n stroke: var(--color-gray-300);\\n }\\n\\n .nextjs-container-build-error-version-status > .turbopack-text {\\n background: linear-gradient(\\n to right,\\n var(--color-turbopack-text-red) 0%,\\n var(--color-turbopack-text-blue) 100%\\n );\\n background-clip: text;\\n -webkit-background-clip: text;\\n -webkit-text-fill-color: transparent;\\n }\\n\",\"\\n .restart-dev-server-button {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n gap: 4px;\\n margin: 0 12px;\\n\\n height: var(--size-26);\\n padding: 6px 8px 6px 6px;\\n background: var(--color-amber-100);\\n background-clip: padding-box;\\n border: 1px solid var(--color-gray-alpha-400);\\n box-shadow: var(--shadow-small);\\n border-radius: var(--rounded-full);\\n\\n color: var(--color-amber-900);\\n font-size: var(--size-12);\\n font-weight: 500;\\n line-height: var(--size-16);\\n }\\n\",\"\\n [data-nextjs-toast] {\\n &[data-hidden='true'] {\\n display: none;\\n }\\n }\\n\\n .dev-tools-indicator-menu {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n background-clip: padding-box;\\n box-shadow: var(--shadow-menu);\\n border-radius: var(--rounded-xl);\\n position: absolute;\\n font-family: var(--font-stack-sans);\\n z-index: 3;\\n overflow: hidden;\\n opacity: 0;\\n outline: 0;\\n min-width: 248px;\\n transition: opacity var(--animate-out-duration-ms)\\n var(--animate-out-timing-function);\\n\\n &[data-rendered='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n }\\n\\n .dev-tools-indicator-inner {\\n padding: 6px;\\n width: 100%;\\n }\\n\\n .dev-tools-indicator-item {\\n display: flex;\\n align-items: center;\\n padding: 8px 6px;\\n height: var(--size-36);\\n border-radius: 6px;\\n text-decoration: none !important;\\n user-select: none;\\n white-space: nowrap;\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n }\\n\\n .dev-tools-indicator-footer {\\n background: var(--color-background-200);\\n padding: 6px;\\n border-top: 1px solid var(--color-gray-400);\\n width: 100%;\\n }\\n\\n .dev-tools-indicator-item[data-selected='true'] {\\n cursor: pointer;\\n background-color: var(--color-gray-200);\\n }\\n\\n .dev-tools-indicator-label {\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n color: var(--color-gray-1000);\\n }\\n\\n .dev-tools-indicator-value {\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n color: var(--color-gray-900);\\n margin-left: auto;\\n }\\n\\n .dev-tools-indicator-issue-count {\\n --color-primary: var(--color-gray-800);\\n --color-secondary: var(--color-gray-100);\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n min-width: var(--size-40);\\n height: var(--size-24);\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n background-clip: padding-box;\\n box-shadow: var(--shadow-small);\\n padding: 2px;\\n color: var(--color-gray-1000);\\n border-radius: 128px;\\n font-weight: 500;\\n font-size: var(--size-13);\\n font-variant-numeric: tabular-nums;\\n\\n &[data-has-issues='true'] {\\n --color-primary: var(--color-red-800);\\n --color-secondary: var(--color-red-100);\\n }\\n\\n .dev-tools-indicator-issue-count-indicator {\\n width: var(--size-8);\\n height: var(--size-8);\\n background: var(--color-primary);\\n box-shadow: 0 0 0 2px var(--color-secondary);\\n border-radius: 50%;\\n }\\n }\\n\\n .dev-tools-indicator-shortcut {\\n display: flex;\\n gap: 4px;\\n\\n kbd {\\n width: var(--size-20);\\n height: var(--size-20);\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n border-radius: var(--rounded-md);\\n border: 1px solid var(--color-gray-400);\\n font-family: var(--font-stack-sans);\\n background: var(--color-background-100);\\n color: var(--color-gray-1000);\\n text-align: center;\\n font-size: var(--size-12);\\n line-height: var(--size-16);\\n }\\n }\\n\\n .dev-tools-grabbing {\\n cursor: grabbing;\\n\\n > * {\\n pointer-events: none;\\n }\\n }\\n\",t0.g,\"\\n .dev-tools-info-code {\\n background: var(--color-gray-400);\\n color: var(--color-gray-1000);\\n font-family: var(--font-stack-monospace);\\n padding: 2px 4px;\\n margin: 0;\\n font-size: var(--size-13);\\n white-space: break-spaces;\\n border-radius: var(--rounded-md-2);\\n }\\n\\n .dev-tools-info-code-block-container {\\n padding: 6px;\\n }\\n\\n .dev-tools-info-code-block {\\n position: relative;\\n background: var(--color-background-200);\\n border: 1px solid var(--color-gray-alpha-400);\\n border-radius: var(--rounded-md-2);\\n min-width: 326px;\\n }\\n\\n .dev-tools-info-code-block-pre {\\n margin: 0;\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-12);\\n }\\n\\n .dev-tools-info-copy-button {\\n position: absolute;\\n\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n right: 8px;\\n top: 8px;\\n padding: 4px;\\n height: var(--size-24);\\n width: var(--size-24);\\n border-radius: var(--rounded-md-2);\\n border: 1px solid var(--color-gray-alpha-400);\\n background: var(--color-background-100);\\n }\\n\\n .dev-tools-info-code-block-line {\\n display: block;\\n line-height: 1.5;\\n padding: 0 16px;\\n }\\n\\n .dev-tools-info-code-block-line.dev-tools-info-highlight {\\n border-left: 2px solid var(--color-blue-900);\\n background: var(--color-blue-400);\\n }\\n\\n .dev-tools-info-code-block-json-key {\\n color: var(--color-syntax-keyword);\\n }\\n\\n .dev-tools-info-code-block-json-value {\\n color: var(--color-syntax-link);\\n }\\n\",\"\",rS,'\\n .nextjs-scroll-fader {\\n --blur: 1px;\\n --stop: 25%;\\n --height: 150px;\\n --color-bg: var(--color-background-100);\\n position: absolute;\\n pointer-events: none;\\n user-select: none;\\n width: 100%;\\n height: var(--height);\\n left: 0;\\n backdrop-filter: blur(var(--blur));\\n\\n &[data-side=\"top\"] {\\n top: 0;\\n background: linear-gradient(to top, transparent, var(--color-bg));\\n mask-image: linear-gradient(to bottom, var(--color-bg) var(--stop), transparent);\\n }\\n }\\n',ac,r4,r0,on,oN,oO,oc,oo,oL,ow,ob,of,rm)})}function af(){var e,n,t=(e=[\"\\n :host {\\n all: initial;\\n\\n /* the direction property is not reset by 'all' */\\n direction: ltr;\\n }\\n\\n /*!\\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\\n * Copyright 2011-2019 The Bootstrap Authors\\n * Copyright 2011-2019 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\\n */\\n *,\\n *::before,\\n *::after {\\n box-sizing: border-box;\\n }\\n\\n :host {\\n font-family: sans-serif;\\n line-height: 1.15;\\n -webkit-text-size-adjust: 100%;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n }\\n\\n article,\\n aside,\\n figcaption,\\n figure,\\n footer,\\n header,\\n hgroup,\\n main,\\n nav,\\n section {\\n display: block;\\n }\\n\\n :host {\\n margin: 0;\\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\\n 'Helvetica Neue', Arial, 'Noto Sans', sans-serif,\\n 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\\n 'Noto Color Emoji';\\n font-size: 16px;\\n font-weight: 400;\\n line-height: 1.5;\\n color: var(--color-font);\\n text-align: left;\\n }\\n\\n :host:not(button) {\\n background-color: #fff;\\n }\\n\\n [tabindex='-1']:focus:not(:focus-visible) {\\n outline: 0 !important;\\n }\\n\\n hr {\\n box-sizing: content-box;\\n height: 0;\\n overflow: visible;\\n }\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n margin-top: 0;\\n margin-bottom: 8px;\\n }\\n\\n p {\\n margin-top: 0;\\n margin-bottom: 16px;\\n }\\n\\n abbr[title],\\n abbr[data-original-title] {\\n text-decoration: underline;\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n cursor: help;\\n border-bottom: 0;\\n -webkit-text-decoration-skip-ink: none;\\n text-decoration-skip-ink: none;\\n }\\n\\n address {\\n margin-bottom: 16px;\\n font-style: normal;\\n line-height: inherit;\\n }\\n\\n ol,\\n ul,\\n dl {\\n margin-top: 0;\\n margin-bottom: 16px;\\n }\\n\\n ol ol,\\n ul ul,\\n ol ul,\\n ul ol {\\n margin-bottom: 0;\\n }\\n\\n dt {\\n font-weight: 700;\\n }\\n\\n dd {\\n margin-bottom: 8px;\\n margin-left: 0;\\n }\\n\\n blockquote {\\n margin: 0 0 16px;\\n }\\n\\n b,\\n strong {\\n font-weight: bolder;\\n }\\n\\n small {\\n font-size: 80%;\\n }\\n\\n sub,\\n sup {\\n position: relative;\\n font-size: 75%;\\n line-height: 0;\\n vertical-align: baseline;\\n }\\n\\n sub {\\n bottom: -0.25em;\\n }\\n\\n sup {\\n top: -0.5em;\\n }\\n\\n a {\\n color: #007bff;\\n text-decoration: none;\\n background-color: transparent;\\n }\\n\\n a:hover {\\n color: #0056b3;\\n text-decoration: underline;\\n }\\n\\n a:not([href]) {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n a:not([href]):hover {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n pre,\\n code,\\n kbd,\\n samp {\\n font-family: SFMono-Regular, Menlo, Monaco, Consolas,\\n 'Liberation Mono', 'Courier New', monospace;\\n font-size: 1em;\\n }\\n\\n pre {\\n margin-top: 0;\\n margin-bottom: 16px;\\n overflow: auto;\\n }\\n\\n figure {\\n margin: 0 0 16px;\\n }\\n\\n img {\\n vertical-align: middle;\\n border-style: none;\\n }\\n\\n svg {\\n overflow: hidden;\\n vertical-align: middle;\\n }\\n\\n table {\\n border-collapse: collapse;\\n }\\n\\n caption {\\n padding-top: 12px;\\n padding-bottom: 12px;\\n color: #6c757d;\\n text-align: left;\\n caption-side: bottom;\\n }\\n\\n th {\\n text-align: inherit;\\n }\\n\\n label {\\n display: inline-block;\\n margin-bottom: 8px;\\n }\\n\\n button {\\n border-radius: 0;\\n border: 0;\\n padding: 0;\\n margin: 0;\\n background: none;\\n appearance: none;\\n -webkit-appearance: none;\\n }\\n\\n button:focus {\\n outline: 1px dotted;\\n outline: 5px auto -webkit-focus-ring-color;\\n }\\n\\n button:focus:not(:focus-visible) {\\n outline: none;\\n }\\n\\n input,\\n button,\\n select,\\n optgroup,\\n textarea {\\n margin: 0;\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n }\\n\\n button,\\n input {\\n overflow: visible;\\n }\\n\\n button,\\n select {\\n text-transform: none;\\n }\\n\\n select {\\n word-wrap: normal;\\n }\\n\\n button,\\n [type='button'],\\n [type='reset'],\\n [type='submit'] {\\n -webkit-appearance: button;\\n }\\n\\n button:not(:disabled),\\n [type='button']:not(:disabled),\\n [type='reset']:not(:disabled),\\n [type='submit']:not(:disabled) {\\n cursor: pointer;\\n }\\n\\n button::-moz-focus-inner,\\n [type='button']::-moz-focus-inner,\\n [type='reset']::-moz-focus-inner,\\n [type='submit']::-moz-focus-inner {\\n padding: 0;\\n border-style: none;\\n }\\n\\n input[type='radio'],\\n input[type='checkbox'] {\\n box-sizing: border-box;\\n padding: 0;\\n }\\n\\n input[type='date'],\\n input[type='time'],\\n input[type='datetime-local'],\\n input[type='month'] {\\n -webkit-appearance: listbox;\\n }\\n\\n textarea {\\n overflow: auto;\\n resize: vertical;\\n }\\n\\n fieldset {\\n min-width: 0;\\n padding: 0;\\n margin: 0;\\n border: 0;\\n }\\n\\n legend {\\n display: block;\\n width: 100%;\\n max-width: 100%;\\n padding: 0;\\n margin-bottom: 8px;\\n font-size: 24px;\\n line-height: inherit;\\n color: inherit;\\n white-space: normal;\\n }\\n\\n progress {\\n vertical-align: baseline;\\n }\\n\\n [type='number']::-webkit-inner-spin-button,\\n [type='number']::-webkit-outer-spin-button {\\n height: auto;\\n }\\n\\n [type='search'] {\\n outline-offset: -2px;\\n -webkit-appearance: none;\\n }\\n\\n [type='search']::-webkit-search-decoration {\\n -webkit-appearance: none;\\n }\\n\\n ::-webkit-file-upload-button {\\n font: inherit;\\n -webkit-appearance: button;\\n }\\n\\n output {\\n display: inline-block;\\n }\\n\\n summary {\\n display: list-item;\\n cursor: pointer;\\n }\\n\\n template {\\n display: none;\\n }\\n\\n [hidden] {\\n display: none !important;\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return af=function(){return t},t}function ap(){return(0,y.jsx)(\"style\",{children:ei(af())})}function ah(){var e,n,t=(e=['\\n :host {\\n /* \\n * CAUTION: THIS IS A WORKAROUND!\\n * For now, we use @babel/code-frame to parse the code frame which does not support option to change the color.\\n * x-ref: https://github.com/babel/babel/blob/efa52324ff835b794c48080f14877b6caf32cd15/packages/babel-code-frame/src/defs.ts#L40-L54\\n * So, we do a workaround mapping to change the color matching the theme.\\n *\\n * For example, in @babel/code-frame, the \"keyword\" is mapped to ANSI \"cyan\".\\n * We want the \"keyword\" to use the \"syntax-keyword\" color in the theme.\\n * So, we map the \"cyan\" to the \"syntax-keyword\" in the theme.\\n */\\n /* cyan: keyword */\\n --color-ansi-cyan: var(--color-syntax-keyword);\\n /* yellow: capitalized, jsxIdentifier, punctuation */\\n --color-ansi-yellow: var(--color-syntax-function);\\n /* magenta: number, regex */\\n --color-ansi-magenta: var(--color-syntax-keyword);\\n /* green: string */\\n --color-ansi-green: var(--color-syntax-string);\\n /* gray (bright black): comment, gutter */\\n --color-ansi-bright-black: var(--color-syntax-comment);\\n\\n /* Ansi - Temporary */\\n --color-ansi-selection: var(--color-gray-alpha-300);\\n --color-ansi-bg: var(--color-background-200);\\n --color-ansi-fg: var(--color-gray-1000);\\n\\n --color-ansi-white: var(--color-gray-700);\\n --color-ansi-black: var(--color-gray-200);\\n --color-ansi-blue: var(--color-blue-700);\\n --color-ansi-red: var(--color-red-700);\\n --color-ansi-bright-white: var(--color-gray-1000);\\n --color-ansi-bright-blue: var(--color-blue-800);\\n --color-ansi-bright-cyan: var(--color-blue-800);\\n --color-ansi-bright-green: var(--color-green-800);\\n --color-ansi-bright-magenta: var(--color-blue-800);\\n --color-ansi-bright-red: var(--color-red-800);\\n --color-ansi-bright-yellow: var(--color-amber-900);\\n\\n /* Background Light */\\n --color-background-100: #ffffff;\\n --color-background-200: #fafafa;\\n\\n /* Syntax Light */\\n --color-syntax-comment: #545454;\\n --color-syntax-constant: #171717;\\n --color-syntax-function: #0054ad;\\n --color-syntax-keyword: #a51850;\\n --color-syntax-link: #066056;\\n --color-syntax-parameter: #8f3e00;\\n --color-syntax-punctuation: #171717;\\n --color-syntax-string: #036157;\\n --color-syntax-string-expression: #066056;\\n\\n /* Gray Scale Light */\\n --color-gray-100: #f2f2f2;\\n --color-gray-200: #ebebeb;\\n --color-gray-300: #e6e6e6;\\n --color-gray-400: #eaeaea;\\n --color-gray-500: #c9c9c9;\\n --color-gray-600: #a8a8a8;\\n --color-gray-700: #8f8f8f;\\n --color-gray-800: #7d7d7d;\\n --color-gray-900: #666666;\\n --color-gray-1000: #171717;\\n\\n /* Gray Alpha Scale Light */\\n --color-gray-alpha-100: rgba(0, 0, 0, 0.05);\\n --color-gray-alpha-200: rgba(0, 0, 0, 0.081);\\n --color-gray-alpha-300: rgba(0, 0, 0, 0.1);\\n --color-gray-alpha-400: rgba(0, 0, 0, 0.08);\\n --color-gray-alpha-500: rgba(0, 0, 0, 0.21);\\n --color-gray-alpha-600: rgba(0, 0, 0, 0.34);\\n --color-gray-alpha-700: rgba(0, 0, 0, 0.44);\\n --color-gray-alpha-800: rgba(0, 0, 0, 0.51);\\n --color-gray-alpha-900: rgba(0, 0, 0, 0.605);\\n --color-gray-alpha-1000: rgba(0, 0, 0, 0.91);\\n\\n /* Blue Scale Light */\\n --color-blue-100: #f0f7ff;\\n --color-blue-200: #edf6ff;\\n --color-blue-300: #e1f0ff;\\n --color-blue-400: #cde7ff;\\n --color-blue-500: #99ceff;\\n --color-blue-600: #52aeff;\\n --color-blue-700: #0070f3;\\n --color-blue-800: #0060d1;\\n --color-blue-900: #0067d6;\\n --color-blue-1000: #0025ad;\\n\\n /* Red Scale Light */\\n --color-red-100: #fff0f0;\\n --color-red-200: #ffebeb;\\n --color-red-300: #ffe5e5;\\n --color-red-400: #fdd8d8;\\n --color-red-500: #f8baba;\\n --color-red-600: #f87274;\\n --color-red-700: #e5484d;\\n --color-red-800: #da3036;\\n --color-red-900: #ca2a30;\\n --color-red-1000: #381316;\\n\\n /* Amber Scale Light */\\n --color-amber-100: #fff6e5;\\n --color-amber-200: #fff4d5;\\n --color-amber-300: #fef0cd;\\n --color-amber-400: #ffddbf;\\n --color-amber-500: #ffc96b;\\n --color-amber-600: #f5b047;\\n --color-amber-700: #ffb224;\\n --color-amber-800: #ff990a;\\n --color-amber-900: #a35200;\\n --color-amber-1000: #4e2009;\\n\\n /* Green Scale Light */\\n --color-green-100: #effbef;\\n --color-green-200: #eafaea;\\n --color-green-300: #dcf6dc;\\n --color-green-400: #c8f1c9;\\n --color-green-500: #99e59f;\\n --color-green-600: #6cda76;\\n --color-green-700: #46a758;\\n --color-green-800: #388e4a;\\n --color-green-900: #297c3b;\\n --color-green-1000: #18311e;\\n\\n /* Turbopack Light - Temporary */\\n --color-turbopack-text-red: #ff1e56;\\n --color-turbopack-text-blue: #0096ff;\\n --color-turbopack-border-red: #f0adbe;\\n --color-turbopack-border-blue: #adccea;\\n --color-turbopack-background-red: #fff7f9;\\n --color-turbopack-background-blue: #f6fbff;\\n }\\n '],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ah=function(){return t},t}function ag(){return(0,y.jsx)(\"style\",{children:ei(ah())})}function am(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function av(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function ab(e){var n=e.state,t=e.dispatch,r=e.getSquashedHydrationErrorDetails,o=e.runtimeErrors,a=e.errorCount,i=!!false,l=(0,tJ.N)(n.isErrorOverlayOpen,{exitDelay:200}),s=l.mounted,c={rendered:l.rendered,transitionDurationMs:200,isTurbopack:i,versionInfo:n.versionInfo,errorCount:a};return null!==n.buildError?(0,y.jsx)(tr,av(am({},c),{message:n.buildError,rendered:!0})):o.length&&s?(0,y.jsx)(tT,av(am({},c),{debugInfo:n.debugInfo,getSquashedHydrationErrorDetails:r,runtimeErrors:o,onClose:function(){t({type:I})}})):(0,y.jsx)(x.Suspense,{})}function ay(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ax(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function aw(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){ax(e,n,t[n])})}return e}function aj(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return ay(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ay(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var ak=function(e){return e.state.buildError?(0,y.jsx)(aO,aw({},e)):(0,y.jsx)(aA,aw({},e))},aA=function(e){var n,t,r,o=e.children,a=e.state,i=e.isAppDir,l=e.dispatch,s=a.errors,c=aj((0,x.useState)({}),2),u=c[0],d=c[1],f=aj((0,x.useMemo)(function(){for(var e=[],n=null,t=0;t<s.length;++t){var r=s[t],o=r.id;if(o in u){e.push(u[o]);continue}n=r;break}return[e,n]},[s,u]),2),p=f[0],h=f[1];return t=(n={errors:s,dispatch:l}).errors,r=n.dispatch,(0,x.useEffect)(function(){var e,n,o=(null==(e=\"Webpack\")?void 0:e.toUpperCase())===\"TURBOPACK\"&&true,a=null==(n=t[0])?void 0:n.error;if(o&&a){var i=\"__next_error_overlay:\".concat(window.location.pathname,\":\").concat(a.message);r({type:K,showRestartServerButton:\"1\"===sessionStorage.getItem(i)});var l=function(){sessionStorage.setItem(i,\"1\")};return window.addEventListener(\"beforeunload\",l),function(){window.removeEventListener(\"beforeunload\",l)}}r({type:K,showRestartServerButton:!1})},[t,r]),(0,x.useEffect)(function(){if(null!=h){var e,n,t=!0;return(e=h,n=i,tb(function(){var t,r,o,a,i;return tw(this,function(l){switch(l.label){case 0:var s,c;if(t={id:e.id,runtime:!0,error:e.error,type:e.type},!(\"use\"in x))return[3,1];return r=tx(ty({},t),{frames:(c=(s=function(){return tb(function(){return tw(this,function(t){switch(t.label){case 0:return[4,eC(e.frames,tm(e.error),n)];case 1:return[2,t.sent()]}})})()})(),function(){return c})}),void 0!==e.componentStackFrames&&(r.componentStackFrames=e.componentStackFrames),[2,r];case 1:return a=[ty({},t)],i={},[4,eC(e.frames,tm(e.error),n)];case 2:return o=tx.apply(void 0,a.concat([(i.frames=l.sent(),i)])),void 0!==e.componentStackFrames&&(o.componentStackFrames=e.componentStackFrames),[2,o];case 3:return[2]}})})()).then(function(e){t&&d(function(n){var t,r;return t=aw({},n),r=null!=(r=ax({},e.id,e))?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t})}),function(){t=!1}}},[h,i]),o({runtimeErrors:p,totalErrorCount:s.length})},aO=function(e){return(0,e.children)({runtimeErrors:[],totalErrorCount:1})};function aC(){var e,n,t=(e=[\"\\n :host(.dark) {\\n \",\"\\n \",\"\\n }\\n\\n @media (prefers-color-scheme: dark) {\\n :host(:not(.light)) {\\n \",\"\\n \",\"\\n }\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return aC=function(){return t},t}var aS=\"\\n /* Background Dark */\\n --color-background-100: #0a0a0a;\\n --color-background-200: #000000;\\n\\n /* Syntax Dark */\\n --color-syntax-comment: #a0a0a0;\\n --color-syntax-constant: #ededed;\\n --color-syntax-function: #52a9ff;\\n --color-syntax-keyword: #f76e99;\\n --color-syntax-link: #0ac5b2;\\n --color-syntax-parameter: #f1a10d;\\n --color-syntax-punctuation: #ededed;\\n --color-syntax-string: #0ac5b2;\\n --color-syntax-string-expression: #0ac5b2;\\n\\n /* Gray Scale Dark */\\n --color-gray-100: #1a1a1a;\\n --color-gray-200: #1f1f1f;\\n --color-gray-300: #292929;\\n --color-gray-400: #2e2e2e;\\n --color-gray-500: #454545;\\n --color-gray-600: #878787;\\n --color-gray-700: #8f8f8f;\\n --color-gray-800: #7d7d7d;\\n --color-gray-900: #a0a0a0;\\n --color-gray-1000: #ededed;\\n\\n /* Gray Alpha Scale Dark */\\n --color-gray-alpha-100: rgba(255, 255, 255, 0.066);\\n --color-gray-alpha-200: rgba(255, 255, 255, 0.087);\\n --color-gray-alpha-300: rgba(255, 255, 255, 0.125);\\n --color-gray-alpha-400: rgba(255, 255, 255, 0.145);\\n --color-gray-alpha-500: rgba(255, 255, 255, 0.239);\\n --color-gray-alpha-600: rgba(255, 255, 255, 0.506);\\n --color-gray-alpha-700: rgba(255, 255, 255, 0.54);\\n --color-gray-alpha-800: rgba(255, 255, 255, 0.47);\\n --color-gray-alpha-900: rgba(255, 255, 255, 0.61);\\n --color-gray-alpha-1000: rgba(255, 255, 255, 0.923);\\n\\n /* Blue Scale Dark */\\n --color-blue-100: #0f1b2d;\\n --color-blue-200: #10243e;\\n --color-blue-300: #0f3058;\\n --color-blue-400: #0d3868;\\n --color-blue-500: #0a4481;\\n --color-blue-600: #0091ff;\\n --color-blue-700: #0070f3;\\n --color-blue-800: #0060d1;\\n --color-blue-900: #52a9ff;\\n --color-blue-1000: #eaf6ff;\\n\\n /* Red Scale Dark */\\n --color-red-100: #2a1314;\\n --color-red-200: #3d1719;\\n --color-red-300: #551a1e;\\n --color-red-400: #671e22;\\n --color-red-500: #822025;\\n --color-red-600: #e5484d;\\n --color-red-700: #e5484d;\\n --color-red-800: #da3036;\\n --color-red-900: #ff6369;\\n --color-red-1000: #ffecee;\\n\\n /* Amber Scale Dark */\\n --color-amber-100: #271700;\\n --color-amber-200: #341c00;\\n --color-amber-300: #4a2900;\\n --color-amber-400: #573300;\\n --color-amber-500: #693f05;\\n --color-amber-600: #e79c13;\\n --color-amber-700: #ffb224;\\n --color-amber-800: #ff990a;\\n --color-amber-900: #f1a10d;\\n --color-amber-1000: #fef3dd;\\n\\n /* Green Scale Dark */\\n --color-green-100: #0b2211;\\n --color-green-200: #0f2c17;\\n --color-green-300: #11351b;\\n --color-green-400: #0c461b;\\n --color-green-500: #126427;\\n --color-green-600: #1a9338;\\n --color-green-700: #46a758;\\n --color-green-800: #388e4a;\\n --color-green-900: #63c174;\\n --color-green-1000: #e5fbeb;\\n\\n /* Turbopack Dark - Temporary */\\n --color-turbopack-text-red: #ff6d92;\\n --color-turbopack-text-blue: #45b2ff;\\n --color-turbopack-border-red: #6e293b;\\n --color-turbopack-border-blue: #284f80;\\n --color-turbopack-background-red: #250d12;\\n --color-turbopack-background-blue: #0a1723;\\n\",aE=\"\\n --color-font: white;\\n --color-backdrop: rgba(0, 0, 0, 0.8);\\n --color-border-shadow: rgba(255, 255, 255, 0.145);\\n\\n --color-title-color: #fafafa;\\n --color-stack-notes: #a9a9a9;\\n\";function a_(){return(0,y.jsx)(\"style\",{children:ei(aC(),aE,aS,aE,aS)})}function aP(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function az(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return aP(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return aP(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function aL(e){var n,t,r,o=e.state,a=e.dispatch,i=e.getSquashedHydrationErrorDetails,l=az((t=(n=rt((0,x.useState)(\"undefined\"!=typeof localStorage&&localStorage.getItem(J)?Number(localStorage.getItem(J)):S.Medium),2))[0],r=n[1],[t,function(e){r(e),localStorage.setItem(J,String(e))}]),2),s=l[0],c=l[1],u=az((0,x.useState)(!1),2),d=u[0],f=u[1],p=null!==o.buildError;return false&&(0),(0,y.jsxs)(ed,{children:[(0,y.jsx)(ap,{}),(0,y.jsx)(ep,{scale: false?0:s}),(0,y.jsx)(ag,{}),(0,y.jsx)(ad,{}),(0,y.jsx)(a_,{}),(0,y.jsx)(ak,{state:o,dispatch:a,isAppDir:!0,children:function(e){var n=e.runtimeErrors,t=e.totalErrorCount;return(0,y.jsx)(y.Fragment,{children:o.showIndicator&&( false?0:(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(rU,{scale:s,setScale:c,state:o,dispatch:a,errorCount:t,isBuildError:p}),(0,y.jsx)(ab,{state:o,dispatch:a,getSquashedHydrationErrorDetails:i,runtimeErrors:n,errorCount:t})]}))})}})]})}var aT=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/segment-explorer-trie.ts\");function aR(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function aN(e){return function(e){if(Array.isArray(e))return aR(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||aD(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function aD(e,n){if(e){if(\"string\"==typeof e)return aR(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return aR(e,n)}}var aB=null,aM=[];function aI(e){return function(){for(var n=arguments.length,t=Array(n),r=0;r<n;r++)t[r]=arguments[r];aB?e.apply(void 0,[aB].concat(aN(t))):aM.push(function(n){e.apply(void 0,[n].concat(aN(t)))})}}var aH={onBuildOk:aI(function(e){e({type:_})}),onBuildError:aI(function(e,n){e({type:P,message:n})}),onBeforeRefresh:aI(function(e){e({type:z})}),onRefresh:aI(function(e){e({type:L})}),onVersionInfo:aI(function(e,n){e({type:T,versionInfo:n})}),onStaticIndicator:aI(function(e,n){e({type:E,staticIndicator:n})}),onDebugInfo:aI(function(e,n){e({type:D,debugInfo:n})}),onDevIndicator:aI(function(e,n){e({type:B,devIndicator:n})}),onUnhandledError:aI(function(e,n){e({type:R,reason:n})}),onUnhandledRejection:aI(function(e,n){e({type:N,reason:n})}),openErrorOverlay:aI(function(e){e({type:M})}),closeErrorOverlay:aI(function(e){e({type:I})}),toggleErrorOverlay:aI(function(e){e({type:H})}),buildingIndicatorHide:aI(function(e){e({type:U})}),buildingIndicatorShow:aI(function(e){e({type:F})}),renderingIndicatorHide:aI(function(e){e({type:q})}),renderingIndicatorShow:aI(function(e){e({type:V})}),segmentExplorerNodeAdd:aI(function(e,n){(0,aT.th)(n)}),segmentExplorerNodeRemove:aI(function(e,n){(0,aT._c)(n)}),segmentExplorerUpdateRouteState:aI(function(e,n){e({type:ee,page:n})})};function aF(e){var n,t,r=e.getComponentStack,o=e.getOwnerStack,a=e.getSquashedHydrationErrorDetails,i=e.isRecoverableError,l=(n=function(e,n,t,r){var o;function a(e,o,a){var i,l=n(a),s=void 0===l?void 0:function(e){var n=[],t=!0,r=!1,o=void 0;try{for(var a,i=e.trim().split(\"\\n\")[Symbol.iterator]();!(t=(a=i.next()).done);t=!0){var l=a.value,s=/at ([^ ]+)( \\((.*)\\))?/.exec(l);if(null==s?void 0:s[1]){var c=s[1],u=s[3];if(!u){n.push({canOpenInEditor:!1,component:c});continue}if(null==u?void 0:u.includes(\"next/dist\"))break;var d=function(e){var n,t,r,o,a=(r=e).startsWith(\"file://\")?\"file\":r.includes(\"webpack-internal://\")?\"webpack-internal\":r.startsWith(\"http://\")||r.startsWith(\"https://\")?\"http\":r.startsWith(\"//\")?\"protocol-relative\":\"unknown\",i=null==e?void 0:e.replace(/^(webpack-internal:\\/\\/\\/|file:\\/\\/)(\\(.*\\)\\/)?/,\"\"),l=(n=null!=(o=null==i?void 0:i.match(/^(.+):(\\d+):(\\d+)/))?o:[],t=4,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,4)||function(e,n){if(e){if(\"string\"==typeof e)return w(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return w(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),s=l[1],c=l[2],u=l[3];switch(a){case\"file\":case\"webpack-internal\":return{canOpenInEditor:!0,file:s,lineNumber:c?Number(c):void 0,column:u?Number(u):void 0};default:return{canOpenInEditor:!1}}}(u);n.push(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({component:c},d))}}}catch(e){r=!0,o=e}finally{try{t||null==i.return||i.return()}finally{if(r)throw o}}return n}(l),c=t(a),u=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"D:\\\\dongyun-projects\\\\two\\\\build\";return e?(e=e.split(\"\\n\").map(function(e){return e.includes(\"(eval \")&&(e=e.replace(/eval code/g,\"eval\").replace(/\\(eval at [^()]* \\(/,\"(file://\").replace(/\\),.*$/g,\")\")),e}).join(\"\\n\"),(0,j.parse)(e).map(function(e){try{var t=new URL(e.file),r=k.exec(t.pathname);if(r){var o,a=null==n||null==(o=n.replace(/\\\\/g,\"/\"))?void 0:o.replace(/\\/$/,\"\");a&&(e.file=\"file://\"+a.concat(r.pop())+t.search)}}catch(e){}return e})):[]}((a.stack||\"\")+(c||\"\")),d={id:o,error:a,frames:u,componentStackFrames:s,type:r(a)?\"recoverable\":(i=a)&&\"NEXT_CONSOLE_ERROR\"===i[A]?\"console\":\"runtime\"},f=e.filter(function(e){return e.error.stack!==d.error.stack&&et(e.error.stack)!==et(d.error.stack)||t(e.error)!==t(d.error)});return f.length===e.length?(f.push(d),f):e}return(0,x.useReducer)(function(e,n){switch(n.type){case D:return C(O({},e),{debugInfo:n.debugInfo});case E:return C(O({},e),{staticIndicator:n.staticIndicator});case _:return C(O({},e),{buildError:null});case P:return C(O({},e),{buildError:n.message});case z:return C(O({},e),{refreshState:{type:\"pending\",errors:[]}});case L:return C(O({},e),{buildError:null,errors:\"pending\"===e.refreshState.type?e.refreshState.errors:[],refreshState:{type:\"idle\"}});case R:case N:switch(e.refreshState.type){case\"idle\":return C(O({},e),{nextId:e.nextId+1,errors:a(e.errors,e.nextId,n.reason)});case\"pending\":return C(O({},e),{nextId:e.nextId+1,refreshState:C(O({},e.refreshState),{errors:a(e.errors,e.nextId,n.reason)})});default:return e}case T:return C(O({},e),{versionInfo:n.versionInfo});case B:return C(O({},e),{showIndicator:!0,disableDevIndicator:er||!!n.devIndicator.disabledUntil});case M:return C(O({},e),{isErrorOverlayOpen:!0});case I:return C(O({},e),{isErrorOverlayOpen:!1});case H:return C(O({},e),{isErrorOverlayOpen:!e.isErrorOverlayOpen});case F:return C(O({},e),{buildingIndicator:!0});case U:return C(O({},e),{buildingIndicator:!1});case V:return C(O({},e),{renderingIndicator:!0});case q:return C(O({},e),{renderingIndicator:!1});case W:return C(O({},e),{isDevToolsPanelOpen:!0});case $:return C(O({},e),{isDevToolsPanelOpen:!1});case Z:return C(O({},e),{isDevToolsPanelOpen:!e.isDevToolsPanelOpen});case Y:return C(O({},e),{devToolsPosition:n.devToolsPosition});case X:return C(O({},e),{scale:n.scale});case ee:return C(O({},e),{page:n.page});case K:return C(O({},e),{showRestartServerButton:n.showRestartServerButton});default:return e}},(o=e,C(O({},eo),{isErrorOverlayOpen:\"pages\"===o,routerType:o})))}(e.routerType,r,o,i),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||aD(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),s=l[0],c=l[1];return(0,x.useInsertionEffect)(function(){aB=c;var e=setTimeout(function(){!function(e){try{var n=!0,t=!1,r=void 0;try{for(var o,a=aM[Symbol.iterator]();!(n=(o=a.next()).done);n=!0)(0,o.value)(e)}catch(e){t=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(t)throw r}}}finally{aM.length=0}}(c)});return function(){aB=null,clearTimeout(e)}},[]),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(es,{}),(0,y.jsx)(aL,{state:s,dispatch:c,getSquashedHydrationErrorDetails:a})]})}var aU=!1,aV=!1;function aq(){return null}function aW(e,n,t){if(aU)throw Error(\"Next DevTools: Pages Dev Overlay is already mounted. This is a bug in Next.js\");if(!aV){var r=document.createElement(\"script\");r.style.display=\"block\",r.style.position=\"absolute\",r.setAttribute(\"data-nextjs-dev-overlay\",\"true\");var o=document.createElement(\"nextjs-portal\");r.appendChild(o),document.body.appendChild(r);var a=(0,ea.createRoot)(o,{identifierPrefix:\"ndt-\"});(0,x.startTransition)(function(){a.render((0,y.jsx)(aF,{getComponentStack:e,getOwnerStack:n,getSquashedHydrationErrorDetails:aq,isRecoverableError:t,routerType:\"app\"}))}),aV=!0}}function a$(e,n,t,r){if(aV)throw Error(\"Next DevTools: App Dev Overlay is already mounted. This is a bug in Next.js\");if(!aU){var o=document.createElement(\"nextjs-portal\");o.style.position=\"absolute\",new MutationObserver(function(e){var n=!0,t=!1,r=void 0;try{for(var a,i=e[Symbol.iterator]();!(n=(a=i.next()).done);n=!0){var l=a.value;if(\"childList\"===l.type){var s=!0,c=!1,u=void 0;try{for(var d,f=l.removedNodes[Symbol.iterator]();!(s=(d=f.next()).done);s=!0)d.value===o&&document.body.appendChild(o)}catch(e){c=!0,u=e}finally{try{s||null==f.return||f.return()}finally{if(c)throw u}}}}}catch(e){t=!0,r=e}finally{try{n||null==i.return||i.return()}finally{if(t)throw r}}}).observe(document.body,{childList:!0}),document.body.appendChild(o);var a=(0,ea.createRoot)(o);(0,x.startTransition)(function(){a.render((0,y.jsx)(aF,{getComponentStack:e,getOwnerStack:n,getSquashedHydrationErrorDetails:t,isRecoverableError:r,routerType:\"pages\"}))}),aU=!0}}})(),exports.dispatcher=__nested_webpack_exports__.dispatcher,exports.renderAppDevOverlay=__nested_webpack_exports__.renderAppDevOverlay,exports.renderPagesDevOverlay=__nested_webpack_exports__.renderPagesDevOverlay,__nested_webpack_exports__)-1===[\"dispatcher\",\"renderAppDevOverlay\",\"renderPagesDevOverlay\"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__nested_webpack_exports__[__webpack_i__]);Object.defineProperty(exports, \"__esModule\", ({value:!0}));\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1kZXZ0b29scy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiO0FBQUEseUJBQXlCLG1QQUFtUCxhQUFhLE9BQU8sUUFBUSxFQUFFLDhhQUE4YTtBQUN4dEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sbUdBQW1HLFlBQVksYUFBYSxXQUFXLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLEtBQUssT0FBTyxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssS0FBSyxPQUFPLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxLQUFLLE9BQU8sYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLEtBQUssT0FBTyxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSwwQ0FBMEMsdUJBQXVCLDBCQUEwQixtQkFBbUIsR0FBRyxjQUFjLHVCQUF1QixzQkFBc0IsdUJBQXVCLG9CQUFvQixxQkFBcUIseUJBQXlCLEdBQUcsb0JBQW9CLHVCQUF1QixhQUFhLGNBQWMsd0JBQXdCLHlDQUF5Qyw4QkFBOEIsR0FBRyx5QkFBeUIsOEZBQThGLDhDQUE4QyxjQUFjLGdDQUFnQyxHQUFHLDRCQUE0Qiw4RkFBOEYsaURBQWlELFdBQVcsaUNBQWlDLEdBQUcs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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0saUlBQWlJLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLFdBQVcsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksV0FBVyxVQUFVLEtBQUssS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlB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Q0FBMEMsS0FBSyw0QkFBNEIsYUFBYSxJQUFJLHVCQUF1QixJQUFJLGtDQUFrQyx1QkFBdUIsb0JBQW9CLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsZUFBZSxRQUFRLGFBQWEsSUFBSSxFQUFFLGtCQUFrQix5QkFBeUIsNEJBQTRCLHlCQUF5QixnQkFBZ0Isc0RBQXNELEdBQUcsRUFBRSxnQkFBZ0IsY0FBYyxZQUFZLG1CQUFtQixtR0FBbUcsUUFBUSx1Q0FBdUMscUdBQXFHLDhDQUE4Qyw4Q0FBOEMsMkJBQTJCLHdCQUF3QixFQUFFLGlDQUFpQyx1QkFBdUIsOEdBQThHLEdBQUcsU0FBUyxxQkFBcUIsaUdBQWlHLFFBQVEsOENBQThDLDZEQUE2RCx1QkFBdUIsSUFBSSxpQ0FBaUMsdUJBQXVCLE1BQU0sY0FBYyx5QkFBeUIsdUJBQXVCLElBQUksOENBQThDLHVCQUF1QiwrQ0FBK0MsU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxpQkFBaUIsU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxlQUFlLHlCQUF5QixhQUFhLCtCQUErQiwyQkFBMkIsaUNBQWlDLHVCQUF1QiwrR0FBK0csR0FBRyxVQUFVLElBQUksa0JBQWtCLENBQUMsMEJBQW1CLFlBQVksMkJBQTJCLENBQUMsMEJBQW1CLHFCQUFxQiw2QkFBNkIsQ0FBQywwQkFBbUIsdUJBQXVCLDBCQUFtQixtSEFBbUgsMEJBQW1CLGlCQUFpQiw4Q0FBMkMsQ0FBQyxTQUFTLEVBQUM7QUFDMTdpWSIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxjb21waWxlZFxcbmV4dC1kZXZ0b29sc1xcaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fd2VicGFja19tb2R1bGVzX189e1wiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2NvbXBvbmVudHMvdG9vbHRpcC5jc3NcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se1o6KCk9Pmx9KTt2YXIgcj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPXQubihyKSxhPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT10Lm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLnRvb2x0aXAtd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLnRvb2x0aXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi50b29sdGlwLWFycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCk7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi50b29sdGlwLWFycm93LS10b3Age1xuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCkgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSAwXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KTtcbiAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tdG9vbHRpcC1iZy1jb2xvcik7XG4gIGJvdHRvbTogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xufVxuXG4udG9vbHRpcC1hcnJvdy0tYm90dG9tIHtcbiAgYm9yZGVyLXdpZHRoOiAwIHZhcigtLWFycm93LXNpemUsIDZweCkgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KVxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCk7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xuICB0b3A6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG59XG5cbi50b29sdGlwLWFycm93LS1sZWZ0IHtcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KVxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCk7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS10b29sdGlwLWJnLWNvbG9yKTtcbiAgcmlnaHQ6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbn1cblxuLnRvb2x0aXAtYXJyb3ctLXJpZ2h0IHtcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIHZhcigtLWFycm93LXNpemUsIDZweClcbiAgICB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDA7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tdG9vbHRpcC1iZy1jb2xvcik7XG4gIGxlZnQ6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG59XG5cbi50b29sdGlwLXBvc2l0aW9uZXIge1xuICB6LWluZGV4OiB2YXIoLS10b3Atei1pbmRleCk7XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2NvbXBvbmVudHMvdG9vbHRpcC5jc3NcIl0sbmFtZXM6W10sbWFwcGluZ3M6XCJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLHFCQUFxQjtFQUNyQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsZUFBZTtFQUNmLGdCQUFnQjtFQUNoQixvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsUUFBUTtFQUNSLFNBQVM7RUFDVCxtQkFBbUI7RUFDbkIsb0NBQW9DO0VBQ3BDLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFOzBCQUN3QjtFQUN4Qix5Q0FBeUM7RUFDekMsU0FBUztFQUNULDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFOzBCQUN3QjtFQUN4Qiw0Q0FBNEM7RUFDNUMsTUFBTTtFQUNOLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFOzBCQUN3QjtFQUN4QiwwQ0FBMEM7RUFDMUMsUUFBUTtFQUNSLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFOzRCQUMwQjtFQUMxQiwyQ0FBMkM7RUFDM0MsT0FBTztFQUNQLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLDJCQUEyQjtBQUM3QlwiLHNvdXJjZXNDb250ZW50OltcIi50b29sdGlwLXdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxufVxcblxcbi50b29sdGlwIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmc6IDZweCAxMnB4O1xcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuNDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4udG9vbHRpcC1hcnJvdyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCk7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udG9vbHRpcC1hcnJvdy0tdG9wIHtcXG4gIGJvcmRlci13aWR0aDogdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDBcXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KTtcXG4gIGJvcmRlci10b3AtY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xcbiAgYm90dG9tOiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xcbn1cXG5cXG4udG9vbHRpcC1hcnJvdy0tYm90dG9tIHtcXG4gIGJvcmRlci13aWR0aDogMCB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIHZhcigtLWFycm93LXNpemUsIDZweClcXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KTtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xcbiAgdG9wOiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDAlKTtcXG59XFxuXFxuLnRvb2x0aXAtYXJyb3ctLWxlZnQge1xcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KVxcbiAgICB2YXIoLS1hcnJvdy1zaXplLCA2cHgpO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xcbiAgcmlnaHQ6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxufVxcblxcbi50b29sdGlwLWFycm93LS1yaWdodCB7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCkgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KVxcbiAgICB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDA7XFxuICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xcbiAgbGVmdDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XFxufVxcblxcbi50b29sdGlwLXBvc2l0aW9uZXIge1xcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZGV2dG9vbHMtcGFuZWwvcmVzaXplL3Jlc2l6ZS1oYW5kbGUuY3NzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtaOigpPT5sfSk7dmFyIHI9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIiksbz10Lm4ociksYT10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpLGk9dC5uKGEpKCkobygpKTtpLnB1c2goW2UuaWQsYC5yZXNpemUtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICAvKiB0b2RvOiBiZXR0ZXIgeiBpbmRleCAqL1xuICB6LWluZGV4OiAxMDtcbiAgLyogdG9kbzogaXMgdGhpcyBuZWVkZWQgKi9cbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5yZXNpemUtbGluZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgLyogdG9kbyBzbWFydGVyIHogaW5kZXggKi9cbiAgei1pbmRleDogLTE7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAvKiBhIG5vcm1hbCBleGl0IGFuaW1hdGlvbiBjdXJ2ZS0gYXQgdGhpcyBwb2ludCB0aGUgZXhpdCBhbmltYXRpb24gaXMgKi9cbiAgLyogaW1tZWRpYXRlbHkgcmVzcG9uc2l2ZSBzbyB3ZSBkb24ndCBuZWVkIGEgYmVzcG9rZSBjdXJ2ZSAqL1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xuICAvKiB0b2RvOiBiZXR0ZXIgdmFyPyAqL1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XG59XG5cbi8qIHN0YXJ0IHJlYWxseSBmYXN0IGJlY2F1c2Ugd2Ugc3RhcnQgc3VwZXIgaGlkZGVuIGluaXRpYWxseSBiZWhpbmQgdGhlIHBhbmVsLCBvdGhlcndpc2UgZmVlbHMgbGlrZSBhbiB1bmludGVuZGVkIGFuaW1hdGlvbiBkZWxheSAqL1xuLnJlc2l6ZS1jb250YWluZXI6aG92ZXIgfiAucmVzaXplLWxpbmUge1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4wNSwgMC45LCAwLjIsIDEpOyAvKiBGYXN0IHN0YXJ0IGZvciBhbmltYXRlIGluICovXG59XG5cbi5yZXNpemUtY29udGFpbmVyLnJpZ2h0LFxuLnJlc2l6ZS1jb250YWluZXIubGVmdCB7XG4gIHRvcDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMjVweDtcbiAgY3Vyc29yOiBldy1yZXNpemU7XG59XG5cbi8qIHRvZG86IGRvbid0IGhhcmQgY29kZSBhbGwgdGhlc2UgdmFsdWVzL3VzZSB2YXJzICovXG5cbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbSxcbi5yZXNpemUtY29udGFpbmVyLnRvcCB7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI1cHg7XG4gIGN1cnNvcjogbnMtcmVzaXplO1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci50b3Age1xuICB0b3A6IC0xMnB4O1xufVxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tIHtcbiAgYm90dG9tOiAtMTJweDtcbn1cbi5yZXNpemUtY29udGFpbmVyLmxlZnQge1xuICBsZWZ0OiAtMTJweDtcbn1cbi5yZXNpemUtY29udGFpbmVyLnJpZ2h0IHtcbiAgcmlnaHQ6IC0xMnB4O1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci50b3AtbGVmdCxcbi5yZXNpemUtY29udGFpbmVyLnRvcC1yaWdodCxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbS1sZWZ0LFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLXJpZ2h0IHtcbiAgd2lkdGg6IDMycHg7XG4gIGhlaWdodDogMzJweDtcbiAgei1pbmRleDogMTU7XG59XG5cbi5yZXNpemUtY29udGFpbmVyLnRvcC1sZWZ0IHtcbiAgdG9wOiAtMTZweDtcbiAgbGVmdDogLTE2cHg7XG4gIGN1cnNvcjogbndzZS1yZXNpemU7XG59XG4ucmVzaXplLWNvbnRhaW5lci50b3AtcmlnaHQge1xuICB0b3A6IC0xNnB4O1xuICByaWdodDogLTE2cHg7XG4gIGN1cnNvcjogbmVzdy1yZXNpemU7XG59XG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20tbGVmdCB7XG4gIGJvdHRvbTogLTE2cHg7XG4gIGxlZnQ6IC0xNnB4O1xuICBjdXJzb3I6IG5lc3ctcmVzaXplO1xufVxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLXJpZ2h0IHtcbiAgYm90dG9tOiAtMTZweDtcbiAgcmlnaHQ6IC0xNnB4O1xuICBjdXJzb3I6IG53c2UtcmVzaXplO1xufVxuXG4ucmVzaXplLWxpbmUudG9wLFxuLnJlc2l6ZS1saW5lLmJvdHRvbSB7XG4gIGhlaWdodDogMjhweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcbn1cblxuLnJlc2l6ZS1saW5lLmxlZnQsXG4ucmVzaXplLWxpbmUucmlnaHQge1xuICB3aWR0aDogMjhweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XG59XG5cbi5yZXNpemUtbGluZS50b3Age1xuICB0b3A6IC0xMnB4O1xuICBsZWZ0OiBjYWxjKC0xICogdmFyKC0tYm9yZGVyLWxlZnQsIDJweCkpO1xuICB3aWR0aDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLWhvcml6b250YWwsIDRweCkpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKSAwIDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyOHB4KTtcbn1cblxuLnJlc2l6ZS1saW5lLmJvdHRvbSB7XG4gIGJvdHRvbTogLTEycHg7XG4gIGxlZnQ6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItbGVmdCwgMnB4KSk7XG4gIHdpZHRoOiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItaG9yaXpvbnRhbCwgNHB4KSk7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yOHB4KTtcbn1cblxuLnJlc2l6ZS1saW5lLmxlZnQge1xuICB0b3A6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItdG9wLCAycHgpKTtcbiAgbGVmdDogLTEycHg7XG4gIGhlaWdodDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLXZlcnRpY2FsLCA0cHgpKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZCkgMCAwIHZhcigtLXJvdW5kZWQtbWQpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjhweCk7XG59XG5cbi5yZXNpemUtbGluZS5yaWdodCB7XG4gIHRvcDogY2FsYygtMSAqIHZhcigtLWJvcmRlci10b3AsIDJweCkpO1xuICByaWdodDogLTEycHg7XG4gIGhlaWdodDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLXZlcnRpY2FsLCA0cHgpKTtcbiAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKSAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTI4cHgpO1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci5yaWdodDpob3ZlciB+IC5yZXNpemUtbGluZS5yaWdodCxcbi5yZXNpemUtY29udGFpbmVyLmxlZnQ6aG92ZXIgfiAucmVzaXplLWxpbmUubGVmdCxcbi5yZXNpemUtbGluZS5yaWdodC5kcmFnZ2luZyxcbi5yZXNpemUtbGluZS5sZWZ0LmRyYWdnaW5nIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b206aG92ZXIgfiAucmVzaXplLWxpbmUuYm90dG9tLFxuLnJlc2l6ZS1jb250YWluZXIudG9wOmhvdmVyIH4gLnJlc2l6ZS1saW5lLnRvcCxcbi5yZXNpemUtbGluZS5ib3R0b20uZHJhZ2dpbmcsXG4ucmVzaXplLWxpbmUudG9wLmRyYWdnaW5nIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuXG4vKiBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBzaG93IG11bHRpcGxlIGhhbmRsZXMgYXQgb25jZVxuICogd2Ugc2hvdWxkIG9ubHkgZXZlciBzaG93IHRoZSBjdXJyZW50bHkgcmVzaXppbmcgaGFuZGxlXG4gKiByZWdhcmRsZXNzIG9mIGhvdmVyIHN0YXRlIFxuICovXG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci5yaWdodDpob3ZlciB+IC5yZXNpemUtbGluZS5yaWdodCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjhweCk7XG59XG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci5sZWZ0OmhvdmVyIH4gLnJlc2l6ZS1saW5lLmxlZnQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjhweCk7XG59XG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci5ib3R0b206aG92ZXIgfiAucmVzaXplLWxpbmUuYm90dG9tIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yOHB4KTtcbn1cbi5yZXNpemUtY29udGFpbmVyLm5vLWhvdmVyLnRvcDpob3ZlciB+IC5yZXNpemUtbGluZS50b3Age1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjhweCk7XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZGV2dG9vbHMtcGFuZWwvcmVzaXplL3Jlc2l6ZS1oYW5kbGUuY3NzXCJdLG5hbWVzOltdLG1hcHBpbmdzOlwiQUFBQTtFQUNFLGtCQUFrQjtFQUNsQix5QkFBeUI7RUFDekIsV0FBVztFQUNYLHlCQUF5QjtFQUN6Qix1QkFBdUI7QUFDekI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIseUJBQXlCO0VBQ3pCLFdBQVc7RUFDWCxvQkFBb0I7RUFDcEIsdUVBQXVFO0VBQ3ZFLDREQUE0RDtFQUM1RCx1REFBdUQ7RUFDdkQsc0JBQXNCO0VBQ3RCLHVDQUF1QztBQUN6Qzs7QUFFQSxtSUFBbUk7QUFDbkk7RUFDRSwwREFBMEQsRUFBRSw4QkFBOEI7QUFDNUY7O0FBRUE7O0VBRUUsTUFBTTtFQUNOLFlBQVk7RUFDWixXQUFXO0VBQ1gsaUJBQWlCO0FBQ25COztBQUVBLG9EQUFvRDs7QUFFcEQ7O0VBRUUsT0FBTztFQUNQLFdBQVc7RUFDWCxZQUFZO0VBQ1osaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsVUFBVTtBQUNaO0FBQ0E7RUFDRSxhQUFhO0FBQ2Y7QUFDQTtFQUNFLFdBQVc7QUFDYjtBQUNBO0VBQ0UsWUFBWTtBQUNkOztBQUVBOzs7O0VBSUUsV0FBVztFQUNYLFlBQVk7RUFDWixXQUFXO0FBQ2I7O0FBRUE7RUFDRSxVQUFVO0VBQ1YsV0FBVztFQUNYLG1CQUFtQjtBQUNyQjtBQUNBO0VBQ0UsVUFBVTtFQUNWLFlBQVk7RUFDWixtQkFBbUI7QUFDckI7QUFDQTtFQUNFLGFBQWE7RUFDYixXQUFXO0VBQ1gsbUJBQW1CO0FBQ3JCO0FBQ0E7RUFDRSxhQUFhO0VBQ2IsWUFBWTtFQUNaLG1CQUFtQjtBQUNyQjs7QUFFQTs7RUFFRSxZQUFZO0VBQ1osV0FBVztFQUNYLDZDQUE2QztBQUMvQzs7QUFFQTs7RUFFRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLDZDQUE2QztBQUMvQzs7QUFFQTtFQUNFLFVBQVU7RUFDVix3Q0FBd0M7RUFDeEMsaURBQWlEO0VBQ2pELHNEQUFzRDtFQUN0RCwyQkFBMkI7QUFDN0I7O0FBRUE7RUFDRSxhQUFhO0VBQ2Isd0NBQXdDO0VBQ3hDLGlEQUFpRDtFQUNqRCxzREFBc0Q7RUFDdEQsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0Usc0NBQXNDO0VBQ3RDLFdBQVc7RUFDWCxnREFBZ0Q7RUFDaEQsc0RBQXNEO0VBQ3RELDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLHNDQUFzQztFQUN0QyxZQUFZO0VBQ1osZ0RBQWdEO0VBQ2hELHNEQUFzRDtFQUN0RCw0QkFBNEI7QUFDOUI7O0FBRUE7Ozs7RUFJRSx3QkFBd0I7QUFDMUI7O0FBRUE7Ozs7RUFJRSx3QkFBd0I7QUFDMUI7O0FBRUE7OztFQUdFO0FBQ0Y7RUFDRSw0QkFBNEI7QUFDOUI7QUFDQTtFQUNFLDJCQUEyQjtBQUM3QjtBQUNBO0VBQ0UsNEJBQTRCO0FBQzlCO0FBQ0E7RUFDRSwyQkFBMkI7QUFDN0JcIixzb3VyY2VzQ29udGVudDpbXCIucmVzaXplLWNvbnRhaW5lciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvKiB0b2RvOiBiZXR0ZXIgeiBpbmRleCAqL1xcbiAgei1pbmRleDogMTA7XFxuICAvKiB0b2RvOiBpcyB0aGlzIG5lZWRlZCAqL1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5yZXNpemUtbGluZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvKiB0b2RvIHNtYXJ0ZXIgeiBpbmRleCAqL1xcbiAgei1pbmRleDogLTE7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIC8qIGEgbm9ybWFsIGV4aXQgYW5pbWF0aW9uIGN1cnZlLSBhdCB0aGlzIHBvaW50IHRoZSBleGl0IGFuaW1hdGlvbiBpcyAqL1xcbiAgLyogaW1tZWRpYXRlbHkgcmVzcG9uc2l2ZSBzbyB3ZSBkb24ndCBuZWVkIGEgYmVzcG9rZSBjdXJ2ZSAqL1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcXG4gIC8qIHRvZG86IGJldHRlciB2YXI/ICovXFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxufVxcblxcbi8qIHN0YXJ0IHJlYWxseSBmYXN0IGJlY2F1c2Ugd2Ugc3RhcnQgc3VwZXIgaGlkZGVuIGluaXRpYWxseSBiZWhpbmQgdGhlIHBhbmVsLCBvdGhlcndpc2UgZmVlbHMgbGlrZSBhbiB1bmludGVuZGVkIGFuaW1hdGlvbiBkZWxheSAqL1xcbi5yZXNpemUtY29udGFpbmVyOmhvdmVyIH4gLnJlc2l6ZS1saW5lIHtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGN1YmljLWJlemllcigwLjA1LCAwLjksIDAuMiwgMSk7IC8qIEZhc3Qgc3RhcnQgZm9yIGFuaW1hdGUgaW4gKi9cXG59XFxuXFxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQsXFxuLnJlc2l6ZS1jb250YWluZXIubGVmdCB7XFxuICB0b3A6IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMjVweDtcXG4gIGN1cnNvcjogZXctcmVzaXplO1xcbn1cXG5cXG4vKiB0b2RvOiBkb24ndCBoYXJkIGNvZGUgYWxsIHRoZXNlIHZhbHVlcy91c2UgdmFycyAqL1xcblxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbSxcXG4ucmVzaXplLWNvbnRhaW5lci50b3Age1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAyNXB4O1xcbiAgY3Vyc29yOiBucy1yZXNpemU7XFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLnRvcCB7XFxuICB0b3A6IC0xMnB4O1xcbn1cXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20ge1xcbiAgYm90dG9tOiAtMTJweDtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIubGVmdCB7XFxuICBsZWZ0OiAtMTJweDtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQge1xcbiAgcmlnaHQ6IC0xMnB4O1xcbn1cXG5cXG4ucmVzaXplLWNvbnRhaW5lci50b3AtbGVmdCxcXG4ucmVzaXplLWNvbnRhaW5lci50b3AtcmlnaHQsXFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLWxlZnQsXFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLXJpZ2h0IHtcXG4gIHdpZHRoOiAzMnB4O1xcbiAgaGVpZ2h0OiAzMnB4O1xcbiAgei1pbmRleDogMTU7XFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLnRvcC1sZWZ0IHtcXG4gIHRvcDogLTE2cHg7XFxuICBsZWZ0OiAtMTZweDtcXG4gIGN1cnNvcjogbndzZS1yZXNpemU7XFxufVxcbi5yZXNpemUtY29udGFpbmVyLnRvcC1yaWdodCB7XFxuICB0b3A6IC0xNnB4O1xcbiAgcmlnaHQ6IC0xNnB4O1xcbiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLWxlZnQge1xcbiAgYm90dG9tOiAtMTZweDtcXG4gIGxlZnQ6IC0xNnB4O1xcbiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLXJpZ2h0IHtcXG4gIGJvdHRvbTogLTE2cHg7XFxuICByaWdodDogLTE2cHg7XFxuICBjdXJzb3I6IG53c2UtcmVzaXplO1xcbn1cXG5cXG4ucmVzaXplLWxpbmUudG9wLFxcbi5yZXNpemUtbGluZS5ib3R0b20ge1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxufVxcblxcbi5yZXNpemUtbGluZS5sZWZ0LFxcbi5yZXNpemUtbGluZS5yaWdodCB7XFxuICB3aWR0aDogMjhweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG59XFxuXFxuLnJlc2l6ZS1saW5lLnRvcCB7XFxuICB0b3A6IC0xMnB4O1xcbiAgbGVmdDogY2FsYygtMSAqIHZhcigtLWJvcmRlci1sZWZ0LCAycHgpKTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItaG9yaXpvbnRhbCwgNHB4KSk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKSAwIDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjhweCk7XFxufVxcblxcbi5yZXNpemUtbGluZS5ib3R0b20ge1xcbiAgYm90dG9tOiAtMTJweDtcXG4gIGxlZnQ6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItbGVmdCwgMnB4KSk7XFxuICB3aWR0aDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLWhvcml6b250YWwsIDRweCkpO1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIHZhcigtLXJvdW5kZWQtbWQpIHZhcigtLXJvdW5kZWQtbWQpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yOHB4KTtcXG59XFxuXFxuLnJlc2l6ZS1saW5lLmxlZnQge1xcbiAgdG9wOiBjYWxjKC0xICogdmFyKC0tYm9yZGVyLXRvcCwgMnB4KSk7XFxuICBsZWZ0OiAtMTJweDtcXG4gIGhlaWdodDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLXZlcnRpY2FsLCA0cHgpKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQpIDAgMCB2YXIoLS1yb3VuZGVkLW1kKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyOHB4KTtcXG59XFxuXFxuLnJlc2l6ZS1saW5lLnJpZ2h0IHtcXG4gIHRvcDogY2FsYygtMSAqIHZhcigtLWJvcmRlci10b3AsIDJweCkpO1xcbiAgcmlnaHQ6IC0xMnB4O1xcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItdmVydGljYWwsIDRweCkpO1xcbiAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKSAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yOHB4KTtcXG59XFxuXFxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQ6aG92ZXIgfiAucmVzaXplLWxpbmUucmlnaHQsXFxuLnJlc2l6ZS1jb250YWluZXIubGVmdDpob3ZlciB+IC5yZXNpemUtbGluZS5sZWZ0LFxcbi5yZXNpemUtbGluZS5yaWdodC5kcmFnZ2luZyxcXG4ucmVzaXplLWxpbmUubGVmdC5kcmFnZ2luZyB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbTpob3ZlciB+IC5yZXNpemUtbGluZS5ib3R0b20sXFxuLnJlc2l6ZS1jb250YWluZXIudG9wOmhvdmVyIH4gLnJlc2l6ZS1saW5lLnRvcCxcXG4ucmVzaXplLWxpbmUuYm90dG9tLmRyYWdnaW5nLFxcbi5yZXNpemUtbGluZS50b3AuZHJhZ2dpbmcge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbn1cXG5cXG4vKiBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBzaG93IG11bHRpcGxlIGhhbmRsZXMgYXQgb25jZVxcbiAqIHdlIHNob3VsZCBvbmx5IGV2ZXIgc2hvdyB0aGUgY3VycmVudGx5IHJlc2l6aW5nIGhhbmRsZVxcbiAqIHJlZ2FyZGxlc3Mgb2YgaG92ZXIgc3RhdGUgXFxuICovXFxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIucmlnaHQ6aG92ZXIgfiAucmVzaXplLWxpbmUucmlnaHQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yOHB4KTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIubGVmdDpob3ZlciB+IC5yZXNpemUtbGluZS5sZWZ0IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyOHB4KTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIuYm90dG9tOmhvdmVyIH4gLnJlc2l6ZS1saW5lLmJvdHRvbSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTI4cHgpO1xcbn1cXG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci50b3A6aG92ZXIgfiAucmVzaXplLWxpbmUudG9wIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyOHB4KTtcXG59XFxuXCJdLHNvdXJjZVJvb3Q6XCJcIn1dKTtsZXQgbD1pfSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtYm91bmRhcnktdHJpZ2dlci5jc3NcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se1o6KCk9Pmx9KTt2YXIgcj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPXQubihyKSxhPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT10Lm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNHB4O1xuICBwYWRkaW5nOiA0cHggNnB4O1xuICBsaW5lLWhlaWdodDogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XG4gIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHQge1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHQgLnBsdXMtaWNvbiB7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cyBlYXNlO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHQ6aG92ZXIgLnBsdXMtaWNvbiB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTgwMCk7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIgc3ZnIHtcbiAgd2lkdGg6IDE0cHg7XG4gIGhlaWdodDogMTRweDtcbiAgZmxleC1zaHJpbms6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXI6aG92ZXIgc3ZnIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNzAwKTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcltkaXNhYmxlZF0gc3ZnLFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcltkaXNhYmxlZF06aG92ZXIgc3ZnIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24ge1xuICBwYWRkaW5nOiA4cHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xuICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICBtaW4td2lkdGg6IDEyMHB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBib3gtc2hhZG93OiAwcHggNHB4IDhweCAtNHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb2xvci1ncmF5LTkwMCkgNCUsIHRyYW5zcGFyZW50KTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24tcG9zaXRpb25lciB7XG4gIHotaW5kZXg6IHZhcigtLXRvcC16LWluZGV4KTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDhweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBtaW4td2lkdGg6IDIyMHB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtW2RhdGEtZGlzYWJsZWRdIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbSBzdmcge1xuICBtYXJnaW4tcmlnaHQ6IDEycHg7XG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZ3JvdXAtbGFiZWwge1xuICBwYWRkaW5nOiA4cHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLFFBQVE7RUFDUixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLGdCQUFnQjtFQUNoQiw2QkFBNkI7RUFDN0Isb0JBQW9CO0VBQ3BCLFlBQVk7RUFDWix5QkFBeUI7RUFDekIsZUFBZTtFQUNmLHVDQUF1QztBQUN6Qzs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsdUJBQXVCO0FBQ3pCOztBQUVBO0VBQ0UsZ0NBQWdDO0FBQ2xDOztBQUVBO0VBQ0UsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7RUFDWixjQUFjO0VBQ2Qsc0JBQXNCO0FBQ3hCOztBQUVBO0VBQ0UsNEJBQTRCO0FBQzlCOztBQUVBOztFQUVFLDRCQUE0QjtFQUM1QixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxZQUFZO0VBQ1osdUNBQXVDO0VBQ3ZDLHVDQUF1QztFQUN2QyxtQkFBbUI7RUFDbkIsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixlQUFlO0VBQ2Ysc0ZBQXNGO0FBQ3hGOztBQUVBO0VBQ0UsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixZQUFZO0VBQ1osaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsNkJBQTZCO0VBQzdCLGVBQWU7RUFDZixnQkFBZ0I7RUFDaEIsWUFBWTtFQUNaLGdCQUFnQjtFQUNoQixXQUFXO0FBQ2I7O0FBRUE7RUFDRSw0QkFBNEI7RUFDNUIsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGlDQUFpQztBQUNuQzs7QUFFQTtFQUNFLDJCQUEyQjtFQUMzQiw0QkFBNEI7QUFDOUI7O0FBRUE7RUFDRSw4QkFBOEI7RUFDOUIsK0JBQStCO0FBQ2pDOztBQUVBO0VBQ0UsWUFBWTtFQUNaLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsZ0JBQWdCO0VBQ2hCLDRCQUE0QjtBQUM5QlwiLHNvdXJjZXNDb250ZW50OltcIi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDRweDtcXG4gIHBhZGRpbmc6IDRweCA2cHg7XFxuICBsaW5lLWhlaWdodDogMTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0IHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0IC5wbHVzLWljb24ge1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzIGVhc2U7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXItdGV4dDpob3ZlciAucGx1cy1pY29uIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTgwMCk7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIgc3ZnIHtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyOmhvdmVyIHN2ZyB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS03MDApO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyW2Rpc2FibGVkXSBzdmcsXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcltkaXNhYmxlZF06aG92ZXIgc3ZnIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93biB7XFxuICBwYWRkaW5nOiA4cHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICBib3JkZXItcmFkaXVzOiAxNnB4O1xcbiAgbWluLXdpZHRoOiAxMjBweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYm94LXNoYWRvdzogMHB4IDRweCA4cHggLTRweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29sb3ItZ3JheS05MDApIDQlLCB0cmFuc3BhcmVudCk7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLXBvc2l0aW9uZXIge1xcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogOHB4O1xcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG1pbi13aWR0aDogMjIwcHg7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW1bZGF0YS1kaXNhYmxlZF0ge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW0gc3ZnIHtcXG4gIG1hcmdpbi1yaWdodDogMTJweDtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1ncm91cC1sYWJlbCB7XFxuICBwYWRkaW5nOiA4cHg7XFxuICBmb250LXNpemU6IDEzcHg7XFxuICBsaW5lLWhlaWdodDogMTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci5jc3NcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se1o6KCk9Pmx9KTt2YXIgcj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPXQubihyKSxhPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT10Lm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLnNlZ21lbnQtZXhwbG9yZXItY29udGVudCB7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XG4gIHBhZGRpbmc6IDAgOHB4O1xuICB3aWR0aDogNzAwcHg7XG4gIGhlaWdodDogNDAwcHg7XG4gIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDQwcHgpO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQwcHgpO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE0cHggMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xuICBnYXA6IDEycHg7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLXBhZ2Utcm91dGUtYmFyLXBhdGgge1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1pdGVtIHtcbiAgbWFyZ2luOiA0cHggMDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1pdGVtOm50aC1jaGlsZChldmVuKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItaXRlbS1yb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nLXRvcDogMTBweDtcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDRweDtcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItY2hpbGRyZW4tLWludGVuZGVkIHtcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB3aWR0aDogMTAwJTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUgc2VsZWN0IHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lLS1wYXRoIHtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLXBhdGggc21hbGwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwO1xuICBvcGFjaXR5OiAwO1xufVxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLW5hbWUge1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS04MDApO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlcyB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBnYXA6IDhweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVzICsgLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlciB7XG4gIG1hcmdpbi1sZWZ0OiA4cHg7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDRweCA2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1vdmVycmlkZGVuIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW1iZXItMzAwKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTkwMCk7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwgLmNvZGUtaWNvbiB7XG4gIG9wYWNpdHk6IDA7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICB3aWR0aDogMDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2UtaW4tb3V0O1xufVxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbDpob3ZlciAuY29kZS1pY29uIHtcbiAgb3BhY2l0eTogMTtcbiAgd2lkdGg6IDEycHg7XG4gIG1hcmdpbi1sZWZ0OiA0cHg7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWw6aG92ZXIge1xuICBmaWx0ZXI6IGJyaWdodG5lc3MoMC45NSk7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLWJ1aWx0aW4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcbiAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWNvbG9yLWdyYXktNTAwKTtcbiAgaGVpZ2h0OiAyNHB4O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1idWlsdGluIHN2ZyB7XG4gIG1hcmdpbi1sZWZ0OiA0cHg7XG4gIG1hcmdpbi1yaWdodDogLTRweDtcbn1cblxuLyogRm9vdGVyIHN0eWxlcyAqL1xuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyIHtcbiAgcGFkZGluZzogOHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogNnB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b24tLWRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC41O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItdGV4dCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJhZGdlIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtaW4td2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgcGFkZGluZzogMCA2cHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFtYmVyLTMwMCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1hbWJlci05MDApO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xuICBmb250LXdlaWdodDogNjAwO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC10b29sdGlwLS1zbSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtdG9vbHRpcC0tbGcge1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtZXhwbG9yZXIuY3NzXCJdLG5hbWVzOltdLG1hcHBpbmdzOlwiQUFBQTtFQUNFLHlCQUF5QjtFQUN6QixjQUFjO0VBQ2QsWUFBWTtFQUNaLGFBQWE7RUFDYiw2QkFBNkI7RUFDN0IsK0JBQStCO0FBQ2pDOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsNkNBQTZDO0VBQzdDLFNBQVM7QUFDWDs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixnQkFBZ0I7RUFDaEIsNkJBQTZCO0VBQzdCLDZCQUE2QjtFQUM3QixtQkFBbUI7RUFDbkIsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsYUFBYTtFQUNiLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLDZDQUE2QztBQUMvQzs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixrQkFBa0I7RUFDbEIsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZiw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxvQkFBb0I7RUFDcEIsV0FBVztFQUNYLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0UscUJBQXFCO0VBQ3JCLFFBQVE7RUFDUixVQUFVO0FBQ1o7QUFDQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLG9CQUFvQjtFQUNwQixRQUFRO0VBQ1IsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsZ0JBQWdCO0VBQ2hCLG1CQUFtQjtFQUNuQixpQkFBaUI7RUFDakIseUJBQXlCO0VBQ3pCLGdCQUFnQjtFQUNoQixpQkFBaUI7RUFDakIsZUFBZTtFQUNmLHVDQUF1QztFQUN2Qyw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSx3Q0FBd0M7RUFDeEMsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0UsVUFBVTtFQUNWLGNBQWM7RUFDZCxRQUFRO0VBQ1IsaUNBQWlDO0FBQ25DO0FBQ0E7RUFDRSxVQUFVO0VBQ1YsV0FBVztFQUNYLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLHdCQUF3QjtBQUMxQjs7QUFFQTtFQUNFLDZCQUE2QjtFQUM3Qiw0QkFBNEI7RUFDNUIsd0NBQXdDO0VBQ3hDLFlBQVk7RUFDWixlQUFlO0FBQ2pCO0FBQ0E7RUFDRSxnQkFBZ0I7RUFDaEIsa0JBQWtCO0FBQ3BCOztBQUVBLGtCQUFrQjtBQUNsQjtFQUNFLFlBQVk7RUFDWiwyQ0FBMkM7RUFDM0MsNkNBQTZDO0VBQzdDLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsdUJBQXVCO0VBQ3ZCLFFBQVE7RUFDUixXQUFXO0VBQ1gsWUFBWTtFQUNaLHVDQUF1QztFQUN2Qyx1Q0FBdUM7RUFDdkMsa0JBQWtCO0VBQ2xCLDZCQUE2QjtFQUM3Qix5QkFBeUI7RUFDekIsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZix1Q0FBdUM7QUFDekM7O0FBRUE7RUFDRSxpQ0FBaUM7QUFDbkM7O0FBRUE7RUFDRSxZQUFZO0VBQ1osbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsZUFBZTtFQUNmLFlBQVk7RUFDWixjQUFjO0VBQ2Qsa0NBQWtDO0VBQ2xDLDZCQUE2QjtFQUM3QixtQkFBbUI7RUFDbkIseUJBQXlCO0VBQ3pCLGdCQUFnQjtFQUNoQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCXCIsc291cmNlc0NvbnRlbnQ6W1wiLnNlZ21lbnQtZXhwbG9yZXItY29udGVudCB7XFxuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgcGFkZGluZzogMCA4cHg7XFxuICB3aWR0aDogNzAwcHg7XFxuICBoZWlnaHQ6IDQwMHB4O1xcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gNDBweCk7XFxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQwcHgpO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDE0cHggMTZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gIGdhcDogMTJweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItcGFnZS1yb3V0ZS1iYXItcGF0aCB7XFxuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWl0ZW0ge1xcbiAgbWFyZ2luOiA0cHggMDtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItaXRlbTpudGgtY2hpbGQoZXZlbikge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1pdGVtLXJvdyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmctdG9wOiAxMHB4O1xcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA0cHg7XFxuICB3aGl0ZS1zcGFjZTogcHJlO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWNoaWxkcmVuLS1pbnRlbmRlZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lIHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZSBzZWxlY3Qge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lLS1wYXRoIHtcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLXBhdGggc21hbGwge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDA7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZS0tbmFtZSB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS04MDApO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlcyB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGdhcDogOHB4O1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVzICsgLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlciB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsIHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZzogNHB4IDZweDtcXG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XFxuICBsaW5lLWhlaWdodDogMTZweDtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tb3ZlcnJpZGRlbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTkwMCk7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwgLmNvZGUtaWNvbiB7XFxuICBvcGFjaXR5OiAwO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxuICB3aWR0aDogMDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlLWluLW91dDtcXG59XFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbDpob3ZlciAuY29kZS1pY29uIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB3aWR0aDogMTJweDtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWw6aG92ZXIge1xcbiAgZmlsdGVyOiBicmlnaHRuZXNzKDAuOTUpO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1idWlsdGluIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gIGJvcmRlcjogMXB4IGRhc2hlZCB2YXIoLS1jb2xvci1ncmF5LTUwMCk7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLWJ1aWx0aW4gc3ZnIHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxuICBtYXJnaW4tcmlnaHQ6IC00cHg7XFxufVxcblxcbi8qIEZvb3RlciBzdHlsZXMgKi9cXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXIge1xcbiAgcGFkZGluZzogOHB4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBnYXA6IDhweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogNnB4O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b24tLWRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuNTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci10ZXh0IHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJhZGdlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgbWluLXdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgcGFkZGluZzogMCA2cHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTkwMCk7XFxuICBib3JkZXItcmFkaXVzOiAxMHB4O1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC10b29sdGlwLS1zbSB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRvb2x0aXAtLWxnIHtcXG4gIG1pbi13aWR0aDogMjAwcHg7XFxufVxcblwiXSxzb3VyY2VSb290OlwiXCJ9XSk7bGV0IGw9aX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy90b2FzdC9zdHlsZS5jc3NcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se1o6KCk9Pmx9KTt2YXIgcj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPXQubihyKSxhPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT10Lm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLm5leHRqcy10b2FzdCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xuICBtYXgtd2lkdGg6IDQyMHB4O1xuICBib3gtc2hhZG93OiAwcHggMTZweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG59XG5cbi5uZXh0anMtdG9hc3QtZXJyb3JzLXBhcmVudCB7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtNHhsKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktYnJpZ2h0LXdoaXRlKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL3RvYXN0L3N0eWxlLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSxlQUFlO0VBQ2YsMkJBQTJCO0VBQzNCLGdCQUFnQjtFQUNoQiw2Q0FBNkM7QUFDL0M7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsaUNBQWlDO0VBQ2pDLGdCQUFnQjtFQUNoQixxQ0FBcUM7RUFDckMsdUNBQXVDO0FBQ3pDXCIsc291cmNlc0NvbnRlbnQ6W1wiLm5leHRqcy10b2FzdCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB6LWluZGV4OiB2YXIoLS10b3Atei1pbmRleCk7XFxuICBtYXgtd2lkdGg6IDQyMHB4O1xcbiAgYm94LXNoYWRvdzogMHB4IDE2cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbn1cXG5cXG4ubmV4dGpzLXRvYXN0LWVycm9ycy1wYXJlbnQge1xcbiAgcGFkZGluZzogMTZweDtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtNHhsKTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1icmlnaHQtd2hpdGUpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2dsb2JhbC5jc3NcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se1o6KCk9Pmx9KTt2YXIgcj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPXQubihyKSxhPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT10Lm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLyogZGV2dG9vbCBnbG9iYWwgY3NzIHZhcmlhYmxlcyAqL1xuOmhvc3Qge1xuICAtLXRvcC16LWluZGV4OiAyMTQ3NDgzNjQ3O1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9nbG9iYWwuY3NzXCJdLG5hbWVzOltdLG1hcHBpbmdzOlwiQUFBQSxpQ0FBaUM7QUFDakM7RUFDRSx5QkFBeUI7QUFDM0JcIixzb3VyY2VzQ29udGVudDpbXCIvKiBkZXZ0b29sIGdsb2JhbCBjc3MgdmFyaWFibGVzICovXFxuOmhvc3Qge1xcbiAgLS10b3Atei1pbmRleDogMjE0NzQ4MzY0NztcXG59XFxuXCJdLHNvdXJjZVJvb3Q6XCJcIn1dKTtsZXQgbD1pfSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiOmZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgbj1bXTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbihuKXt2YXIgdD1cIlwiLHI9dm9pZCAwIT09bls1XTtyZXR1cm4gbls0XSYmKHQrPVwiQHN1cHBvcnRzIChcIi5jb25jYXQobls0XSxcIikge1wiKSksblsyXSYmKHQrPVwiQG1lZGlhIFwiLmNvbmNhdChuWzJdLFwiIHtcIikpLHImJih0Kz1cIkBsYXllclwiLmNvbmNhdChuWzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdChuWzVdKTpcIlwiLFwiIHtcIikpLHQrPWUobiksciYmKHQrPVwifVwiKSxuWzJdJiYodCs9XCJ9XCIpLG5bNF0mJih0Kz1cIn1cIiksdH0pLmpvaW4oXCJcIil9LG4uaT1mdW5jdGlvbihlLHQscixvLGEpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bW251bGwsZSx2b2lkIDBdXSk7dmFyIGk9e307aWYocilmb3IodmFyIGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl7dmFyIHM9dGhpc1tsXVswXTtudWxsIT1zJiYoaVtzXT0hMCl9Zm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe3ZhciB1PVtdLmNvbmNhdChlW2NdKTtyJiZpW3VbMF1dfHwodm9pZCAwIT09YSYmKHZvaWQgMD09PXVbNV18fCh1WzFdPVwiQGxheWVyXCIuY29uY2F0KHVbNV0ubGVuZ3RoPjA/XCIgXCIuY29uY2F0KHVbNV0pOlwiXCIsXCIge1wiKS5jb25jYXQodVsxXSxcIn1cIikpLHVbNV09YSksdCYmKHVbMl0mJih1WzFdPVwiQG1lZGlhIFwiLmNvbmNhdCh1WzJdLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpKSx1WzJdPXQpLG8mJih1WzRdPyh1WzFdPVwiQHN1cHBvcnRzIChcIi5jb25jYXQodVs0XSxcIikge1wiKS5jb25jYXQodVsxXSxcIn1cIiksdVs0XT1vKTp1WzRdPVwiXCIuY29uY2F0KG8pKSxuLnB1c2godSkpfX0sbn19LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiOmZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgbj1lWzFdLHQ9ZVszXTtpZighdClyZXR1cm4gbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBidG9hKXt2YXIgcj1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh0KSkpKTtyZXR1cm5bbl0uY29uY2F0KFtcIi8qIyBcIi5jb25jYXQoXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQociksXCIgKi9cIildKS5qb2luKFwiXFxuXCIpfXJldHVybltuXS5qb2luKFwiXFxuXCIpfX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjpmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1bXTtmdW5jdGlvbiB0KGUpe2Zvcih2YXIgdD0tMSxyPTA7cjxuLmxlbmd0aDtyKyspaWYobltyXS5pZGVudGlmaWVyPT09ZSl7dD1yO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIHIoZSxyKXtmb3IodmFyIG89e30sYT1bXSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBsPWVbaV0scz1yLmJhc2U/bFswXStyLmJhc2U6bFswXSxjPW9bc118fDAsdT1cIlwiLmNvbmNhdChzLFwiIFwiKS5jb25jYXQoYyk7b1tzXT1jKzE7dmFyIGQ9dCh1KSxmPXtjc3M6bFsxXSxtZWRpYTpsWzJdLHNvdXJjZU1hcDpsWzNdLHN1cHBvcnRzOmxbNF0sbGF5ZXI6bFs1XX07aWYoLTEhPT1kKW5bZF0ucmVmZXJlbmNlcysrLG5bZF0udXBkYXRlcihmKTtlbHNle3ZhciBwPWZ1bmN0aW9uKGUsbil7dmFyIHQ9bi5kb21BUEkobik7cmV0dXJuIHQudXBkYXRlKGUpLGZ1bmN0aW9uKG4pe24/KG4uY3NzIT09ZS5jc3N8fG4ubWVkaWEhPT1lLm1lZGlhfHxuLnNvdXJjZU1hcCE9PWUuc291cmNlTWFwfHxuLnN1cHBvcnRzIT09ZS5zdXBwb3J0c3x8bi5sYXllciE9PWUubGF5ZXIpJiZ0LnVwZGF0ZShlPW4pOnQucmVtb3ZlKCl9fShmLHIpO3IuYnlJbmRleD1pLG4uc3BsaWNlKGksMCx7aWRlbnRpZmllcjp1LHVwZGF0ZXI6cCxyZWZlcmVuY2VzOjF9KX1hLnB1c2godSl9cmV0dXJuIGF9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsbyl7dmFyIGE9cihlPWV8fFtdLG89b3x8e30pO3JldHVybiBmdW5jdGlvbihlKXtlPWV8fFtdO2Zvcih2YXIgaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbD10KGFbaV0pO25bbF0ucmVmZXJlbmNlcy0tfWZvcih2YXIgcz1yKGUsbyksYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT10KGFbY10pOzA9PT1uW3VdLnJlZmVyZW5jZXMmJihuW3VdLnVwZGF0ZXIoKSxuLnNwbGljZSh1LDEpKX1hPXN9fX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjpmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO3JldHVybiBlLnNldEF0dHJpYnV0ZXMobixlLmF0dHJpYnV0ZXMpLGUuaW5zZXJ0KG4sZS5vcHRpb25zKSxufX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciBuPXQubmM7biYmZS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLG4pfX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiOmZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZG9jdW1lbnQpcmV0dXJue3VwZGF0ZTpmdW5jdGlvbigpe30scmVtb3ZlOmZ1bmN0aW9uKCl7fX07dmFyIG49ZS5pbnNlcnRTdHlsZUVsZW1lbnQoZSk7cmV0dXJue3VwZGF0ZTpmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1cIlwiLHQuc3VwcG9ydHMmJihyKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHQuc3VwcG9ydHMsXCIpIHtcIikpLHQubWVkaWEmJihyKz1cIkBtZWRpYSBcIi5jb25jYXQodC5tZWRpYSxcIiB7XCIpKSwobz12b2lkIDAhPT10LmxheWVyKSYmKHIrPVwiQGxheWVyXCIuY29uY2F0KHQubGF5ZXIubGVuZ3RoPjA/XCIgXCIuY29uY2F0KHQubGF5ZXIpOlwiXCIsXCIge1wiKSkscis9dC5jc3MsbyYmKHIrPVwifVwiKSx0Lm1lZGlhJiYocis9XCJ9XCIpLHQuc3VwcG9ydHMmJihyKz1cIn1cIiksKGE9dC5zb3VyY2VNYXApJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgYnRvYSYmKHIrPVwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYSkpKSksXCIgKi9cIikpLGUuc3R5bGVUYWdUcmFuc2Zvcm0ocixuLGUub3B0aW9ucyl9LHJlbW92ZTpmdW5jdGlvbigpeyFmdW5jdGlvbihlKXtpZihudWxsIT09ZS5wYXJlbnROb2RlKWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX0obil9fX19LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjpmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSxuKXtpZihuLnN0eWxlU2hlZXQpbi5zdHlsZVNoZWV0LmNzc1RleHQ9ZTtlbHNle2Zvcig7bi5maXJzdENoaWxkOyluLnJlbW92ZUNoaWxkKG4uZmlyc3RDaGlsZCk7bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9fX0sXCIuL2Rpc3QvY29tcGlsZWQvYW5zZXIvaW5kZXguanNcIjpmdW5jdGlvbihlKXsoKCk9PntcInVzZSBzdHJpY3RcIjt2YXIgbj17MjExOmU9Pnt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxuKXtmb3IodmFyIHQ9MDt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihuLHQscil7cmV0dXJuIHQmJmUobi5wcm90b3R5cGUsdCksciYmZShuLHIpLG59fSgpLHQ9W1t7Y29sb3I6XCIwLCAwLCAwXCIsY2xhc3M6XCJhbnNpLWJsYWNrXCJ9LHtjb2xvcjpcIjE4NywgMCwgMFwiLGNsYXNzOlwiYW5zaS1yZWRcIn0se2NvbG9yOlwiMCwgMTg3LCAwXCIsY2xhc3M6XCJhbnNpLWdyZWVuXCJ9LHtjb2xvcjpcIjE4NywgMTg3LCAwXCIsY2xhc3M6XCJhbnNpLXllbGxvd1wifSx7Y29sb3I6XCIwLCAwLCAxODdcIixjbGFzczpcImFuc2ktYmx1ZVwifSx7Y29sb3I6XCIxODcsIDAsIDE4N1wiLGNsYXNzOlwiYW5zaS1tYWdlbnRhXCJ9LHtjb2xvcjpcIjAsIDE4NywgMTg3XCIsY2xhc3M6XCJhbnNpLWN5YW5cIn0se2NvbG9yOlwiMjU1LDI1NSwyNTVcIixjbGFzczpcImFuc2ktd2hpdGVcIn1dLFt7Y29sb3I6XCI4NSwgODUsIDg1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1ibGFja1wifSx7Y29sb3I6XCIyNTUsIDg1LCA4NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtcmVkXCJ9LHtjb2xvcjpcIjAsIDI1NSwgMFwiLGNsYXNzOlwiYW5zaS1icmlnaHQtZ3JlZW5cIn0se2NvbG9yOlwiMjU1LCAyNTUsIDg1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC15ZWxsb3dcIn0se2NvbG9yOlwiODUsIDg1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LWJsdWVcIn0se2NvbG9yOlwiMjU1LCA4NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1tYWdlbnRhXCJ9LHtjb2xvcjpcIjg1LCAyNTUsIDI1NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtY3lhblwifSx7Y29sb3I6XCIyNTUsIDI1NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC13aGl0ZVwifV1dO2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBlKSl0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7dGhpcy5mZz10aGlzLmJnPXRoaXMuZmdfdHJ1ZWNvbG9yPXRoaXMuYmdfdHJ1ZWNvbG9yPW51bGwsdGhpcy5icmlnaHQ9MH1yZXR1cm4gbihlLG51bGwsW3trZXk6XCJlc2NhcGVGb3JIdG1sXCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuKG5ldyBlKS5lc2NhcGVGb3JIdG1sKG4pfX0se2tleTpcImxpbmtpZnlcIix2YWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4obmV3IGUpLmxpbmtpZnkobil9fSx7a2V5OlwiYW5zaVRvSHRtbFwiLHZhbHVlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG5ldyBlKS5hbnNpVG9IdG1sKG4sdCl9fSx7a2V5OlwiYW5zaVRvSnNvblwiLHZhbHVlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG5ldyBlKS5hbnNpVG9Kc29uKG4sdCl9fSx7a2V5OlwiYW5zaVRvVGV4dFwiLHZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybihuZXcgZSkuYW5zaVRvVGV4dChuKX19XSksbihlLFt7a2V5Olwic2V0dXBQYWxldHRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLlBBTEVUVEVfQ09MT1JTPVtdO2Zvcih2YXIgZT0wO2U8MjsrK2UpZm9yKHZhciBuPTA7bjw4Oysrbil0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2godFtlXVtuXS5jb2xvcik7Zm9yKHZhciByPVswLDk1LDEzNSwxNzUsMjE1LDI1NV0sbz1mdW5jdGlvbihlLG4sdCl7cmV0dXJuIHJbZV0rXCIsIFwiK3Jbbl0rXCIsIFwiK3JbdF19LGE9MDthPDY7KythKWZvcih2YXIgaT0wO2k8NjsrK2kpZm9yKHZhciBsPTA7bDw2OysrbCl0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2gobyhhLGksbCkpO2Zvcih2YXIgcz04LGM9MDtjPDI0OysrYyxzKz0xMCl0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2gobyhzLHMscykpfX0se2tleTpcImVzY2FwZUZvckh0bWxcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bJjw+XS9nbSxmdW5jdGlvbihlKXtyZXR1cm5cIiZcIj09ZT9cIiZhbXA7XCI6XCI8XCI9PWU/XCImbHQ7XCI6XCI+XCI9PWU/XCImZ3Q7XCI6XCJcIn0pfX0se2tleTpcImxpbmtpZnlcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oaHR0cHM/OlxcL1xcL1teXFxzXSspL2dtLGZ1bmN0aW9uKGUpe3JldHVybic8YSBocmVmPVwiJytlKydcIj4nK2UrXCI8L2E+XCJ9KX19LHtrZXk6XCJhbnNpVG9IdG1sXCIsdmFsdWU6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5wcm9jZXNzKGUsbiwhMCl9fSx7a2V5OlwiYW5zaVRvSnNvblwiLHZhbHVlOmZ1bmN0aW9uKGUsbil7cmV0dXJuKG49bnx8e30pLmpzb249ITAsbi5jbGVhckxpbmU9ITEsdGhpcy5wcm9jZXNzKGUsbiwhMCl9fSx7a2V5OlwiYW5zaVRvVGV4dFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb2Nlc3MoZSx7fSwhMSl9fSx7a2V5OlwicHJvY2Vzc1wiLHZhbHVlOmZ1bmN0aW9uKGUsbix0KXt2YXIgcj10aGlzLG89ZS5zcGxpdCgvXFwwMzNcXFsvKSxhPW8uc2hpZnQoKTtudWxsPT1uJiYobj17fSksbi5jbGVhckxpbmU9L1xcci8udGVzdChlKTt2YXIgaT1vLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gci5wcm9jZXNzQ2h1bmsoZSxuLHQpfSk7aWYobiYmbi5qc29uKXt2YXIgbD10aGlzLnByb2Nlc3NDaHVua0pzb24oXCJcIik7cmV0dXJuIGwuY29udGVudD1hLGwuY2xlYXJMaW5lPW4uY2xlYXJMaW5lLGkudW5zaGlmdChsKSxuLnJlbW92ZV9lbXB0eSYmKGk9aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaXNFbXB0eSgpfSkpLGl9cmV0dXJuIGkudW5zaGlmdChhKSxpLmpvaW4oXCJcIil9fSx7a2V5OlwicHJvY2Vzc0NodW5rSnNvblwiLHZhbHVlOmZ1bmN0aW9uKGUsbixyKXt2YXIgbz0obj12b2lkIDA9PT1uP3t9Om4pLnVzZV9jbGFzc2VzPXZvaWQgMCE9PW4udXNlX2NsYXNzZXMmJm4udXNlX2NsYXNzZXMsYT1uLmtleT1vP1wiY2xhc3NcIjpcImNvbG9yXCIsaT17Y29udGVudDplLGZnOm51bGwsYmc6bnVsbCxmZ190cnVlY29sb3I6bnVsbCxiZ190cnVlY29sb3I6bnVsbCxjbGVhckxpbmU6bi5jbGVhckxpbmUsZGVjb3JhdGlvbjpudWxsLHdhc19wcm9jZXNzZWQ6ITEsaXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiFpLmNvbnRlbnR9fSxsPWUubWF0Y2goL14oWyFcXHgzYy1cXHgzZl0qKShbXFxkO10qKShbXFx4MjAtXFx4MmNdKltcXHg0MC1cXHg3ZV0pKFtcXHNcXFNdKikvbSk7aWYoIWwpcmV0dXJuIGk7aS5jb250ZW50PWxbNF07dmFyIHM9bFsyXS5zcGxpdChcIjtcIik7aWYoXCJcIiE9PWxbMV18fFwibVwiIT09bFszXXx8IXIpcmV0dXJuIGk7Zm9yKHRoaXMuZGVjb3JhdGlvbj1udWxsO3MubGVuZ3RoPjA7KXt2YXIgYz1wYXJzZUludChzLnNoaWZ0KCkpO2lmKGlzTmFOKGMpfHwwPT09Yyl0aGlzLmZnPXRoaXMuYmc9dGhpcy5kZWNvcmF0aW9uPW51bGw7ZWxzZSBpZigxPT09Yyl0aGlzLmRlY29yYXRpb249XCJib2xkXCI7ZWxzZSBpZigyPT09Yyl0aGlzLmRlY29yYXRpb249XCJkaW1cIjtlbHNlIGlmKDM9PWMpdGhpcy5kZWNvcmF0aW9uPVwiaXRhbGljXCI7ZWxzZSBpZig0PT1jKXRoaXMuZGVjb3JhdGlvbj1cInVuZGVybGluZVwiO2Vsc2UgaWYoNT09Yyl0aGlzLmRlY29yYXRpb249XCJibGlua1wiO2Vsc2UgaWYoNz09PWMpdGhpcy5kZWNvcmF0aW9uPVwicmV2ZXJzZVwiO2Vsc2UgaWYoOD09PWMpdGhpcy5kZWNvcmF0aW9uPVwiaGlkZGVuXCI7ZWxzZSBpZig5PT09Yyl0aGlzLmRlY29yYXRpb249XCJzdHJpa2V0aHJvdWdoXCI7ZWxzZSBpZigzOT09Yyl0aGlzLmZnPW51bGw7ZWxzZSBpZig0OT09Yyl0aGlzLmJnPW51bGw7ZWxzZSBpZihjPj0zMCYmYzwzOCl0aGlzLmZnPXRbMF1bYyUxMF1bYV07ZWxzZSBpZihjPj05MCYmYzw5OCl0aGlzLmZnPXRbMV1bYyUxMF1bYV07ZWxzZSBpZihjPj00MCYmYzw0OCl0aGlzLmJnPXRbMF1bYyUxMF1bYV07ZWxzZSBpZihjPj0xMDAmJmM8MTA4KXRoaXMuYmc9dFsxXVtjJTEwXVthXTtlbHNlIGlmKDM4PT09Y3x8NDg9PT1jKXt2YXIgdT0zOD09PWM7aWYocy5sZW5ndGg+PTEpe3ZhciBkPXMuc2hpZnQoKTtpZihcIjVcIj09PWQmJnMubGVuZ3RoPj0xKXt2YXIgZj1wYXJzZUludChzLnNoaWZ0KCkpO2lmKGY+PTAmJmY8PTI1NSlpZihvKXt2YXIgcD1mPj0xNj9cImFuc2ktcGFsZXR0ZS1cIitmOnRbKyhmPjcpXVtmJThdLmNsYXNzO3U/dGhpcy5mZz1wOnRoaXMuYmc9cH1lbHNlIHRoaXMuUEFMRVRURV9DT0xPUlN8fHRoaXMuc2V0dXBQYWxldHRlKCksdT90aGlzLmZnPXRoaXMuUEFMRVRURV9DT0xPUlNbZl06dGhpcy5iZz10aGlzLlBBTEVUVEVfQ09MT1JTW2ZdfWVsc2UgaWYoXCIyXCI9PT1kJiZzLmxlbmd0aD49Myl7dmFyIGg9cGFyc2VJbnQocy5zaGlmdCgpKSxnPXBhcnNlSW50KHMuc2hpZnQoKSksbT1wYXJzZUludChzLnNoaWZ0KCkpO2lmKGg+PTAmJmg8PTI1NSYmZz49MCYmZzw9MjU1JiZtPj0wJiZtPD0yNTUpe3ZhciB2PWgrXCIsIFwiK2crXCIsIFwiK207bz91Pyh0aGlzLmZnPVwiYW5zaS10cnVlY29sb3JcIix0aGlzLmZnX3RydWVjb2xvcj12KToodGhpcy5iZz1cImFuc2ktdHJ1ZWNvbG9yXCIsdGhpcy5iZ190cnVlY29sb3I9dik6dT90aGlzLmZnPXY6dGhpcy5iZz12fX19fX1yZXR1cm4gbnVsbD09PXRoaXMuZmcmJm51bGw9PT10aGlzLmJnJiZudWxsPT09dGhpcy5kZWNvcmF0aW9ufHwoaS5mZz10aGlzLmZnLGkuYmc9dGhpcy5iZyxpLmZnX3RydWVjb2xvcj10aGlzLmZnX3RydWVjb2xvcixpLmJnX3RydWVjb2xvcj10aGlzLmJnX3RydWVjb2xvcixpLmRlY29yYXRpb249dGhpcy5kZWNvcmF0aW9uLGkud2FzX3Byb2Nlc3NlZD0hMCksaX19LHtrZXk6XCJwcm9jZXNzQ2h1bmtcIix2YWx1ZTpmdW5jdGlvbihlLG4sdCl7dmFyIHI9dGhpcztuPW58fHt9O3ZhciBvPXRoaXMucHJvY2Vzc0NodW5rSnNvbihlLG4sdCk7aWYobi5qc29uKXJldHVybiBvO2lmKG8uaXNFbXB0eSgpKXJldHVyblwiXCI7aWYoIW8ud2FzX3Byb2Nlc3NlZClyZXR1cm4gby5jb250ZW50O3ZhciBhPW4udXNlX2NsYXNzZXMsaT1bXSxsPVtdLHM9e30sYz1mdW5jdGlvbihlKXt2YXIgbj1bXSx0PXZvaWQgMDtmb3IodCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJm4ucHVzaChcImRhdGEtXCIrdCsnPVwiJytyLmVzY2FwZUZvckh0bWwoZVt0XSkrJ1wiJyk7cmV0dXJuIG4ubGVuZ3RoPjA/XCIgXCIrbi5qb2luKFwiIFwiKTpcIlwifTtyZXR1cm4oby5mZyYmKGE/KGwucHVzaChvLmZnK1wiLWZnXCIpLG51bGwhPT1vLmZnX3RydWVjb2xvciYmKHNbXCJhbnNpLXRydWVjb2xvci1mZ1wiXT1vLmZnX3RydWVjb2xvcixvLmZnX3RydWVjb2xvcj1udWxsKSk6aS5wdXNoKFwiY29sb3I6cmdiKFwiK28uZmcrXCIpXCIpKSxvLmJnJiYoYT8obC5wdXNoKG8uYmcrXCItYmdcIiksbnVsbCE9PW8uYmdfdHJ1ZWNvbG9yJiYoc1tcImFuc2ktdHJ1ZWNvbG9yLWJnXCJdPW8uYmdfdHJ1ZWNvbG9yLG8uYmdfdHJ1ZWNvbG9yPW51bGwpKTppLnB1c2goXCJiYWNrZ3JvdW5kLWNvbG9yOnJnYihcIitvLmJnK1wiKVwiKSksby5kZWNvcmF0aW9uJiYoYT9sLnB1c2goXCJhbnNpLVwiK28uZGVjb3JhdGlvbik6XCJib2xkXCI9PT1vLmRlY29yYXRpb24/aS5wdXNoKFwiZm9udC13ZWlnaHQ6Ym9sZFwiKTpcImRpbVwiPT09by5kZWNvcmF0aW9uP2kucHVzaChcIm9wYWNpdHk6MC41XCIpOlwiaXRhbGljXCI9PT1vLmRlY29yYXRpb24/aS5wdXNoKFwiZm9udC1zdHlsZTppdGFsaWNcIik6XCJyZXZlcnNlXCI9PT1vLmRlY29yYXRpb24/aS5wdXNoKFwiZmlsdGVyOmludmVydCgxMDAlKVwiKTpcImhpZGRlblwiPT09by5kZWNvcmF0aW9uP2kucHVzaChcInZpc2liaWxpdHk6aGlkZGVuXCIpOlwic3RyaWtldGhyb3VnaFwiPT09by5kZWNvcmF0aW9uP2kucHVzaChcInRleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2hcIik6aS5wdXNoKFwidGV4dC1kZWNvcmF0aW9uOlwiK28uZGVjb3JhdGlvbikpLGEpPyc8c3BhbiBjbGFzcz1cIicrbC5qb2luKFwiIFwiKSsnXCInK2MocykrXCI+XCIrby5jb250ZW50K1wiPC9zcGFuPlwiOic8c3BhbiBzdHlsZT1cIicraS5qb2luKFwiO1wiKSsnXCInK2MocykrXCI+XCIrby5jb250ZW50K1wiPC9zcGFuPlwifX1dKSxlfSgpfX0sdD17fTtmdW5jdGlvbiByKGUpe3ZhciBvPXRbZV07aWYodm9pZCAwIT09bylyZXR1cm4gby5leHBvcnRzO3ZhciBhPXRbZV09e2V4cG9ydHM6e319LGk9ITA7dHJ5e25bZV0oYSxhLmV4cG9ydHMsciksaT0hMX1maW5hbGx5e2kmJmRlbGV0ZSB0W2VdfXJldHVybiBhLmV4cG9ydHN9ci5hYj1cIi8vXCIsZS5leHBvcnRzPXIoMjExKX0pKCl9LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLWNsaWVudC5wcm9kdWN0aW9uLmpzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3ZhciByLG89dChcIi4vZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvaW5kZXguanNcIiksYT10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2luZGV4LmpzXCIpLGk9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC1kb20vaW5kZXguanNcIik7ZnVuY3Rpb24gbChlKXt2YXIgbj1cImh0dHBzOi8vcmVhY3QuZGV2L2Vycm9ycy9cIitlO2lmKDE8YXJndW1lbnRzLmxlbmd0aCl7bis9XCI/YXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbMV0pO2Zvcih2YXIgdD0yO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspbis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbdF0pfXJldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2UrXCI7IHZpc2l0IFwiK24rXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifWZ1bmN0aW9uIHMoZSl7dmFyIG49ZSx0PWU7aWYoZS5hbHRlcm5hdGUpZm9yKDtuLnJldHVybjspbj1uLnJldHVybjtlbHNle2U9bjtkbyAwIT0oNDA5OCYobj1lKS5mbGFncykmJih0PW4ucmV0dXJuKSxlPW4ucmV0dXJuO3doaWxlKGUpfXJldHVybiAzPT09bi50YWc/dDpudWxsfWZ1bmN0aW9uIGMoZSl7aWYoMTM9PT1lLnRhZyl7dmFyIG49ZS5tZW1vaXplZFN0YXRlO2lmKG51bGw9PT1uJiZudWxsIT09KGU9ZS5hbHRlcm5hdGUpJiYobj1lLm1lbW9pemVkU3RhdGUpLG51bGwhPT1uKXJldHVybiBuLmRlaHlkcmF0ZWR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdShlKXtpZigzMT09PWUudGFnKXt2YXIgbj1lLm1lbW9pemVkU3RhdGU7aWYobnVsbD09PW4mJm51bGwhPT0oZT1lLmFsdGVybmF0ZSkmJihuPWUubWVtb2l6ZWRTdGF0ZSksbnVsbCE9PW4pcmV0dXJuIG4uZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGUpe2lmKHMoZSkhPT1lKXRocm93IEVycm9yKGwoMTg4KSl9dmFyIGY9T2JqZWN0LmFzc2lnbixwPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLGg9U3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLGc9U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxtPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSx2PVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxiPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSx5PVN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSx4PVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLHc9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLGo9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLGs9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksQT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxPPVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpO1N5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTt2YXIgQz1TeW1ib2wuZm9yKFwicmVhY3QuYWN0aXZpdHlcIik7U3ltYm9sLmZvcihcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIiksU3ltYm9sLmZvcihcInJlYWN0LnRyYWNpbmdfbWFya2VyXCIpO3ZhciBTPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpO1N5bWJvbC5mb3IoXCJyZWFjdC52aWV3X3RyYW5zaXRpb25cIik7dmFyIEU9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIF8oZSl7cmV0dXJuIG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2YgZT9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9RSYmZVtFXXx8ZVtcIkBAaXRlcmF0b3JcIl0pP2U6bnVsbH12YXIgUD1TeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSx6PUFycmF5LmlzQXJyYXksTD1hLl9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxUPWkuX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFI9e3BlbmRpbmc6ITEsZGF0YTpudWxsLG1ldGhvZDpudWxsLGFjdGlvbjpudWxsfSxOPVtdLEQ9LTE7ZnVuY3Rpb24gQihlKXtyZXR1cm57Y3VycmVudDplfX1mdW5jdGlvbiBNKGUpezA+RHx8KGUuY3VycmVudD1OW0RdLE5bRF09bnVsbCxELS0pfWZ1bmN0aW9uIEkoZSxuKXtOWysrRF09ZS5jdXJyZW50LGUuY3VycmVudD1ufXZhciBIPUIobnVsbCksRj1CKG51bGwpLFU9QihudWxsKSxWPUIobnVsbCk7ZnVuY3Rpb24gcShlLG4pe3N3aXRjaChJKFUsbiksSShGLGUpLEkoSCxudWxsKSxuLm5vZGVUeXBlKXtjYXNlIDk6Y2FzZSAxMTplPShlPW4uZG9jdW1lbnRFbGVtZW50KSYmKGU9ZS5uYW1lc3BhY2VVUkkpP2NwKGUpOjA7YnJlYWs7ZGVmYXVsdDppZihlPW4udGFnTmFtZSxuPW4ubmFtZXNwYWNlVVJJKWU9Y2gobj1jcChuKSxlKTtlbHNlIHN3aXRjaChlKXtjYXNlXCJzdmdcIjplPTE7YnJlYWs7Y2FzZVwibWF0aFwiOmU9MjticmVhaztkZWZhdWx0OmU9MH19TShIKSxJKEgsZSl9ZnVuY3Rpb24gVygpe00oSCksTShGKSxNKFUpfWZ1bmN0aW9uICQoZSl7bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmSShWLGUpO3ZhciBuPUguY3VycmVudCx0PWNoKG4sZS50eXBlKTtuIT09dCYmKEkoRixlKSxJKEgsdCkpfWZ1bmN0aW9uIFooZSl7Ri5jdXJyZW50PT09ZSYmKE0oSCksTShGKSksVi5jdXJyZW50PT09ZSYmKE0oViksYzYuX2N1cnJlbnRWYWx1ZT1SKX1mdW5jdGlvbiBZKGUpe2lmKHZvaWQgMD09PW5EKXRyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGUpe3ZhciBuPWUuc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7bkQ9biYmblsxXXx8XCJcIixuQj0tMTxlLnN0YWNrLmluZGV4T2YoXCJcXG4gICAgYXRcIik/XCIgKDxhbm9ueW1vdXM+KVwiOi0xPGUuc3RhY2suaW5kZXhPZihcIkBcIik/XCJAdW5rbm93bjowOjBcIjpcIlwifXJldHVyblwiXFxuXCIrbkQrZStuQn12YXIgWD0hMTtmdW5jdGlvbiBLKGUsbil7aWYoIWV8fFgpcmV0dXJuXCJcIjtYPSEwO3ZhciB0PUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7dmFyIHI9e0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdDpmdW5jdGlvbigpe3RyeXtpZihuKXt2YXIgdD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCl9O2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcInByb3BzXCIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QodCxbXSl9Y2F0Y2goZSl7dmFyIHI9ZX1SZWZsZWN0LmNvbnN0cnVjdChlLFtdLHQpfWVsc2V7dHJ5e3QuY2FsbCgpfWNhdGNoKGUpe3I9ZX1lLmNhbGwodC5wcm90b3R5cGUpfX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGUpe3I9ZX0odD1lKCkpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNhdGNoJiZ0LmNhdGNoKGZ1bmN0aW9uKCl7fSl9fWNhdGNoKGUpe2lmKGUmJnImJlwic3RyaW5nXCI9PXR5cGVvZiBlLnN0YWNrKXJldHVybltlLnN0YWNrLHIuc3RhY2tdfXJldHVybltudWxsLG51bGxdfX07ci5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWU9XCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIjt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFwibmFtZVwiKTtvJiZvLmNvbmZpZ3VyYWJsZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFwibmFtZVwiLHt2YWx1ZTpcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwifSk7dmFyIGE9ci5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxpPWFbMF0sbD1hWzFdO2lmKGkmJmwpe3ZhciBzPWkuc3BsaXQoXCJcXG5cIiksYz1sLnNwbGl0KFwiXFxuXCIpO2ZvcihvPXI9MDtyPHMubGVuZ3RoJiYhc1tyXS5pbmNsdWRlcyhcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiKTspcisrO2Zvcig7bzxjLmxlbmd0aCYmIWNbb10uaW5jbHVkZXMoXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIik7KW8rKztpZihyPT09cy5sZW5ndGh8fG89PT1jLmxlbmd0aClmb3Iocj1zLmxlbmd0aC0xLG89Yy5sZW5ndGgtMTsxPD1yJiYwPD1vJiZzW3JdIT09Y1tvXTspby0tO2Zvcig7MTw9ciYmMDw9bztyLS0sby0tKWlmKHNbcl0hPT1jW29dKXtpZigxIT09cnx8MSE9PW8pZG8gaWYoci0tLG8tLSwwPm98fHNbcl0hPT1jW29dKXt2YXIgdT1cIlxcblwiK3Nbcl0ucmVwbGFjZShcIiBhdCBuZXcgXCIsXCIgYXQgXCIpO3JldHVybiBlLmRpc3BsYXlOYW1lJiZ1LmluY2x1ZGVzKFwiPGFub255bW91cz5cIikmJih1PXUucmVwbGFjZShcIjxhbm9ueW1vdXM+XCIsZS5kaXNwbGF5TmFtZSkpLHV9d2hpbGUoMTw9ciYmMDw9byk7YnJlYWt9fX1maW5hbGx5e1g9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9dH1yZXR1cm4odD1lP2UuZGlzcGxheU5hbWV8fGUubmFtZTpcIlwiKT9ZKHQpOlwiXCJ9ZnVuY3Rpb24gUShlKXt0cnl7dmFyIG49XCJcIix0PW51bGw7ZG8gbis9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZS50YWcpe2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmV0dXJuIFkoZS50eXBlKTtjYXNlIDE2OnJldHVybiBZKFwiTGF6eVwiKTtjYXNlIDEzOnJldHVybiBlLmNoaWxkIT09biYmbnVsbCE9PW4/WShcIlN1c3BlbnNlIEZhbGxiYWNrXCIpOlkoXCJTdXNwZW5zZVwiKTtjYXNlIDE5OnJldHVybiBZKFwiU3VzcGVuc2VMaXN0XCIpO2Nhc2UgMDpjYXNlIDE1OnJldHVybiBLKGUudHlwZSwhMSk7Y2FzZSAxMTpyZXR1cm4gSyhlLnR5cGUucmVuZGVyLCExKTtjYXNlIDE6cmV0dXJuIEsoZS50eXBlLCEwKTtjYXNlIDMxOnJldHVybiBZKFwiQWN0aXZpdHlcIik7ZGVmYXVsdDpyZXR1cm5cIlwifX0oZSx0KSx0PWUsZT1lLnJldHVybjt3aGlsZShlKTtyZXR1cm4gbn1jYXRjaChlKXtyZXR1cm5cIlxcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IFwiK2UubWVzc2FnZStcIlxcblwiK2Uuc3RhY2t9fXZhciBHPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksSj1vLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssZWU9by51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxlbj1vLnVuc3RhYmxlX3Nob3VsZFlpZWxkLGV0PW8udW5zdGFibGVfcmVxdWVzdFBhaW50LGVyPW8udW5zdGFibGVfbm93LGVvPW8udW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsZWE9by51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxlaT1vLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LGVsPW8udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZXM9by51bnN0YWJsZV9Mb3dQcmlvcml0eSxlYz1vLnVuc3RhYmxlX0lkbGVQcmlvcml0eSxldT1vLmxvZyxlZD1vLnVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlLGVmPW51bGwsZXA9bnVsbDtmdW5jdGlvbiBlaChlKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBldSYmZWQoZSksZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLnNldFN0cmljdE1vZGUpdHJ5e2VwLnNldFN0cmljdE1vZGUoZWYsZSl9Y2F0Y2goZSl7fX12YXIgZWc9TWF0aC5jbHozMj9NYXRoLmNsejMyOmZ1bmN0aW9uKGUpe3JldHVybiAwPT0oZT4+Pj0wKT8zMjozMS0oZW0oZSkvZXZ8MCl8MH0sZW09TWF0aC5sb2csZXY9TWF0aC5MTjIsZWI9MjU2LGV5PTQxOTQzMDQ7ZnVuY3Rpb24gZXgoZSl7dmFyIG49NDImZTtpZigwIT09bilyZXR1cm4gbjtzd2l0Y2goZSYtZSl7Y2FzZSAxOnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDQ7Y2FzZSA4OnJldHVybiA4O2Nhc2UgMTY6cmV0dXJuIDE2O2Nhc2UgMzI6cmV0dXJuIDMyO2Nhc2UgNjQ6cmV0dXJuIDY0O2Nhc2UgMTI4OnJldHVybiAxMjg7Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6cmV0dXJuIDQxOTQwNDgmZTtjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMHgxMDAwMDAwOmNhc2UgMHgyMDAwMDAwOnJldHVybiAweDNjMDAwMDAmZTtjYXNlIDB4NDAwMDAwMDpyZXR1cm4gMHg0MDAwMDAwO2Nhc2UgMHg4MDAwMDAwOnJldHVybiAweDgwMDAwMDA7Y2FzZSAweDEwMDAwMDAwOnJldHVybiAweDEwMDAwMDAwO2Nhc2UgMHgyMDAwMDAwMDpyZXR1cm4gMHgyMDAwMDAwMDtjYXNlIDB4NDAwMDAwMDA6cmV0dXJuIDA7ZGVmYXVsdDpyZXR1cm4gZX19ZnVuY3Rpb24gZXcoZSxuLHQpe3ZhciByPWUucGVuZGluZ0xhbmVzO2lmKDA9PT1yKXJldHVybiAwO3ZhciBvPTAsYT1lLnN1c3BlbmRlZExhbmVzLGk9ZS5waW5nZWRMYW5lcztlPWUud2FybUxhbmVzO3ZhciBsPTB4N2ZmZmZmZiZyO3JldHVybiAwIT09bD8wIT0ocj1sJn5hKT9vPWV4KHIpOjAhPShpJj1sKT9vPWV4KGkpOnR8fDAhPSh0PWwmfmUpJiYobz1leCh0KSk6MCE9KGw9ciZ+YSk/bz1leChsKTowIT09aT9vPWV4KGkpOnR8fDAhPSh0PXImfmUpJiYobz1leCh0KSksMD09PW8/MDowIT09biYmbiE9PW8mJjA9PShuJmEpJiYoKGE9byYtbyk+PSh0PW4mLW4pfHwzMj09PWEmJjAhPSg0MTk0MDQ4JnQpKT9uOm99ZnVuY3Rpb24gZWooZSxuKXtyZXR1cm4gMD09KGUucGVuZGluZ0xhbmVzJn4oZS5zdXNwZW5kZWRMYW5lcyZ+ZS5waW5nZWRMYW5lcykmbil9ZnVuY3Rpb24gZWsoKXt2YXIgZT1lYjtyZXR1cm4gMD09KDQxOTQwNDgmKGViPDw9MSkpJiYoZWI9MjU2KSxlfWZ1bmN0aW9uIGVBKCl7dmFyIGU9ZXk7cmV0dXJuIDA9PSgweDNjMDAwMDAmKGV5PDw9MSkpJiYoZXk9NDE5NDMwNCksZX1mdW5jdGlvbiBlTyhlKXtmb3IodmFyIG49W10sdD0wOzMxPnQ7dCsrKW4ucHVzaChlKTtyZXR1cm4gbn1mdW5jdGlvbiBlQyhlLG4pe2UucGVuZGluZ0xhbmVzfD1uLDB4MTAwMDAwMDAhPT1uJiYoZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLndhcm1MYW5lcz0wKX1mdW5jdGlvbiBlUyhlLG4sdCl7ZS5wZW5kaW5nTGFuZXN8PW4sZS5zdXNwZW5kZWRMYW5lcyY9fm47dmFyIHI9MzEtZWcobik7ZS5lbnRhbmdsZWRMYW5lc3w9bixlLmVudGFuZ2xlbWVudHNbcl09MHg0MDAwMDAwMHxlLmVudGFuZ2xlbWVudHNbcl18NDE5NDA5MCZ0fWZ1bmN0aW9uIGVFKGUsbil7dmFyIHQ9ZS5lbnRhbmdsZWRMYW5lc3w9bjtmb3IoZT1lLmVudGFuZ2xlbWVudHM7dDspe3ZhciByPTMxLWVnKHQpLG89MTw8cjtvJm58ZVtyXSZuJiYoZVtyXXw9biksdCY9fm99fWZ1bmN0aW9uIGVfKGUsbil7dmFyIHQ9biYtbjtyZXR1cm4gMCE9KCh0PTAhPSg0MiZ0KT8xOmVQKHQpKSYoZS5zdXNwZW5kZWRMYW5lc3xuKSk/MDp0fWZ1bmN0aW9uIGVQKGUpe3N3aXRjaChlKXtjYXNlIDI6ZT0xO2JyZWFrO2Nhc2UgODplPTQ7YnJlYWs7Y2FzZSAzMjplPTE2O2JyZWFrO2Nhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOmNhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAweDEwMDAwMDA6Y2FzZSAweDIwMDAwMDA6ZT0xMjg7YnJlYWs7Y2FzZSAweDEwMDAwMDAwOmU9MHg4MDAwMDAwO2JyZWFrO2RlZmF1bHQ6ZT0wfXJldHVybiBlfWZ1bmN0aW9uIGV6KGUpe3JldHVybiAyPChlJj0tZSk/ODxlPzAhPSgweDdmZmZmZmYmZSk/MzI6MHgxMDAwMDAwMDo4OjJ9ZnVuY3Rpb24gZUwoKXt2YXIgZT1ULnA7cmV0dXJuIDAhPT1lP2U6dm9pZCAwPT09KGU9d2luZG93LmV2ZW50KT8zMjp1dShlLnR5cGUpfWZ1bmN0aW9uIGVUKGUsbil7dmFyIHQ9VC5wO3RyeXtyZXR1cm4gVC5wPWUsbigpfWZpbmFsbHl7VC5wPXR9fXZhciBlUj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxlTj1cIl9fcmVhY3RGaWJlciRcIitlUixlRD1cIl9fcmVhY3RQcm9wcyRcIitlUixlQj1cIl9fcmVhY3RDb250YWluZXIkXCIrZVIsZU09XCJfX3JlYWN0RXZlbnRzJFwiK2VSLGVJPVwiX19yZWFjdExpc3RlbmVycyRcIitlUixlSD1cIl9fcmVhY3RIYW5kbGVzJFwiK2VSLGVGPVwiX19yZWFjdFJlc291cmNlcyRcIitlUixlVT1cIl9fcmVhY3RNYXJrZXIkXCIrZVI7ZnVuY3Rpb24gZVYoZSl7ZGVsZXRlIGVbZU5dLGRlbGV0ZSBlW2VEXSxkZWxldGUgZVtlTV0sZGVsZXRlIGVbZUldLGRlbGV0ZSBlW2VIXX1mdW5jdGlvbiBlcShlKXt2YXIgbj1lW2VOXTtpZihuKXJldHVybiBuO2Zvcih2YXIgdD1lLnBhcmVudE5vZGU7dDspe2lmKG49dFtlQl18fHRbZU5dKXtpZih0PW4uYWx0ZXJuYXRlLG51bGwhPT1uLmNoaWxkfHxudWxsIT09dCYmbnVsbCE9PXQuY2hpbGQpZm9yKGU9Y0woZSk7bnVsbCE9PWU7KXtpZih0PWVbZU5dKXJldHVybiB0O2U9Y0woZSl9cmV0dXJuIG59dD0oZT10KS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIGVXKGUpe2lmKGU9ZVtlTl18fGVbZUJdKXt2YXIgbj1lLnRhZztpZig1PT09bnx8Nj09PW58fDEzPT09bnx8MzE9PT1ufHwyNj09PW58fDI3PT09bnx8Mz09PW4pcmV0dXJuIGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZSQoZSl7dmFyIG49ZS50YWc7aWYoNT09PW58fDI2PT09bnx8Mjc9PT1ufHw2PT09bilyZXR1cm4gZS5zdGF0ZU5vZGU7dGhyb3cgRXJyb3IobCgzMykpfWZ1bmN0aW9uIGVaKGUpe3ZhciBuPWVbZUZdO3JldHVybiBufHwobj1lW2VGXT17aG9pc3RhYmxlU3R5bGVzOm5ldyBNYXAsaG9pc3RhYmxlU2NyaXB0czpuZXcgTWFwfSksbn1mdW5jdGlvbiBlWShlKXtlW2VVXT0hMH12YXIgZVg9bmV3IFNldCxlSz17fTtmdW5jdGlvbiBlUShlLG4pe2VHKGUsbiksZUcoZStcIkNhcHR1cmVcIixuKX1mdW5jdGlvbiBlRyhlLG4pe2ZvcihlS1tlXT1uLGU9MDtlPG4ubGVuZ3RoO2UrKyllWC5hZGQobltlXSl9dmFyIGVKPVJlZ0V4cChcIl5bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRF1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCIpLGUwPXt9LGUxPXt9O2Z1bmN0aW9uIGUyKGUsbix0KXtpZihHLmNhbGwoZTEsbil8fCFHLmNhbGwoZTAsbikmJihlSi50ZXN0KG4pP2UxW25dPSEwOihlMFtuXT0hMCwhMSkpKWlmKG51bGw9PT10KWUucmVtb3ZlQXR0cmlidXRlKG4pO2Vsc2V7c3dpdGNoKHR5cGVvZiB0KXtjYXNlXCJ1bmRlZmluZWRcIjpjYXNlXCJmdW5jdGlvblwiOmNhc2VcInN5bWJvbFwiOmUucmVtb3ZlQXR0cmlidXRlKG4pO3JldHVybjtjYXNlXCJib29sZWFuXCI6dmFyIHI9bi50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSk7aWYoXCJkYXRhLVwiIT09ciYmXCJhcmlhLVwiIT09cilyZXR1cm4gdm9pZCBlLnJlbW92ZUF0dHJpYnV0ZShuKX1lLnNldEF0dHJpYnV0ZShuLFwiXCIrdCl9fWZ1bmN0aW9uIGU0KGUsbix0KXtpZihudWxsPT09dCllLnJlbW92ZUF0dHJpYnV0ZShuKTtlbHNle3N3aXRjaCh0eXBlb2YgdCl7Y2FzZVwidW5kZWZpbmVkXCI6Y2FzZVwiZnVuY3Rpb25cIjpjYXNlXCJzeW1ib2xcIjpjYXNlXCJib29sZWFuXCI6ZS5yZW1vdmVBdHRyaWJ1dGUobik7cmV0dXJufWUuc2V0QXR0cmlidXRlKG4sXCJcIit0KX19ZnVuY3Rpb24gZTUoZSxuLHQscil7aWYobnVsbD09PXIpZS5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtzd2l0Y2godHlwZW9mIHIpe2Nhc2VcInVuZGVmaW5lZFwiOmNhc2VcImZ1bmN0aW9uXCI6Y2FzZVwic3ltYm9sXCI6Y2FzZVwiYm9vbGVhblwiOmUucmVtb3ZlQXR0cmlidXRlKHQpO3JldHVybn1lLnNldEF0dHJpYnV0ZU5TKG4sdCxcIlwiK3IpfX1mdW5jdGlvbiBlMyhlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2VcImJpZ2ludFwiOmNhc2VcImJvb2xlYW5cIjpjYXNlXCJudW1iZXJcIjpjYXNlXCJzdHJpbmdcIjpjYXNlXCJ1bmRlZmluZWRcIjpjYXNlXCJvYmplY3RcIjpyZXR1cm4gZTtkZWZhdWx0OnJldHVyblwiXCJ9fWZ1bmN0aW9uIGU2KGUpe3ZhciBuPWUudHlwZTtyZXR1cm4oZT1lLm5vZGVOYW1lKSYmXCJpbnB1dFwiPT09ZS50b0xvd2VyQ2FzZSgpJiYoXCJjaGVja2JveFwiPT09bnx8XCJyYWRpb1wiPT09bil9ZnVuY3Rpb24gZTkoZSl7aWYoIWUuX3ZhbHVlVHJhY2tlcil7dmFyIG49ZTYoZSk/XCJjaGVja2VkXCI6XCJ2YWx1ZVwiO2UuX3ZhbHVlVHJhY2tlcj1mdW5jdGlvbihlLG4sdCl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSxuKTtpZighZS5oYXNPd25Qcm9wZXJ0eShuKSYmdm9pZCAwIT09ciYmXCJmdW5jdGlvblwiPT10eXBlb2Ygci5nZXQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIuc2V0KXt2YXIgbz1yLmdldCxhPXIuc2V0O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGUpe3Q9XCJcIitlLGEuY2FsbCh0aGlzLGUpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ci5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHR9LHNldFZhbHVlOmZ1bmN0aW9uKGUpe3Q9XCJcIitlfSxzdG9wVHJhY2tpbmc6ZnVuY3Rpb24oKXtlLl92YWx1ZVRyYWNrZXI9bnVsbCxkZWxldGUgZVtuXX19fX0oZSxuLFwiXCIrZVtuXSl9fWZ1bmN0aW9uIGU4KGUpe2lmKCFlKXJldHVybiExO3ZhciBuPWUuX3ZhbHVlVHJhY2tlcjtpZighbilyZXR1cm4hMDt2YXIgdD1uLmdldFZhbHVlKCkscj1cIlwiO3JldHVybiBlJiYocj1lNihlKT9lLmNoZWNrZWQ/XCJ0cnVlXCI6XCJmYWxzZVwiOmUudmFsdWUpLChlPXIpIT09dCYmKG4uc2V0VmFsdWUoZSksITApfWZ1bmN0aW9uIGU3KGUpe2lmKHZvaWQgMD09PShlPWV8fChcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKSkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaChuKXtyZXR1cm4gZS5ib2R5fX12YXIgbmU9L1tcXG5cIlxcXFxdL2c7ZnVuY3Rpb24gbm4oZSl7cmV0dXJuIGUucmVwbGFjZShuZSxmdW5jdGlvbihlKXtyZXR1cm5cIlxcXFxcIitlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpK1wiIFwifSl9ZnVuY3Rpb24gbnQoZSxuLHQscixvLGEsaSxsKXtlLm5hbWU9XCJcIixudWxsIT1pJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBpJiZcInN5bWJvbFwiIT10eXBlb2YgaSYmXCJib29sZWFuXCIhPXR5cGVvZiBpP2UudHlwZT1pOmUucmVtb3ZlQXR0cmlidXRlKFwidHlwZVwiKSxudWxsIT1uP1wibnVtYmVyXCI9PT1pPygwPT09biYmXCJcIj09PWUudmFsdWV8fGUudmFsdWUhPW4pJiYoZS52YWx1ZT1cIlwiK2UzKG4pKTplLnZhbHVlIT09XCJcIitlMyhuKSYmKGUudmFsdWU9XCJcIitlMyhuKSk6XCJzdWJtaXRcIiE9PWkmJlwicmVzZXRcIiE9PWl8fGUucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIiksbnVsbCE9bj9ubyhlLGksZTMobikpOm51bGwhPXQ/bm8oZSxpLGUzKHQpKTpudWxsIT1yJiZlLnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpLG51bGw9PW8mJm51bGwhPWEmJihlLmRlZmF1bHRDaGVja2VkPSEhYSksbnVsbCE9byYmKGUuY2hlY2tlZD1vJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBvJiZcInN5bWJvbFwiIT10eXBlb2YgbyksbnVsbCE9bCYmXCJmdW5jdGlvblwiIT10eXBlb2YgbCYmXCJzeW1ib2xcIiE9dHlwZW9mIGwmJlwiYm9vbGVhblwiIT10eXBlb2YgbD9lLm5hbWU9XCJcIitlMyhsKTplLnJlbW92ZUF0dHJpYnV0ZShcIm5hbWVcIil9ZnVuY3Rpb24gbnIoZSxuLHQscixvLGEsaSxsKXtpZihudWxsIT1hJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiZcInN5bWJvbFwiIT10eXBlb2YgYSYmXCJib29sZWFuXCIhPXR5cGVvZiBhJiYoZS50eXBlPWEpLG51bGwhPW58fG51bGwhPXQpe2lmKChcInN1Ym1pdFwiPT09YXx8XCJyZXNldFwiPT09YSkmJm51bGw9PW4pcmV0dXJuIHZvaWQgZTkoZSk7dD1udWxsIT10P1wiXCIrZTModCk6XCJcIixuPW51bGwhPW4/XCJcIitlMyhuKTp0LGx8fG49PT1lLnZhbHVlfHwoZS52YWx1ZT1uKSxlLmRlZmF1bHRWYWx1ZT1ufXI9XCJmdW5jdGlvblwiIT10eXBlb2Yocj1udWxsIT1yP3I6bykmJlwic3ltYm9sXCIhPXR5cGVvZiByJiYhIXIsZS5jaGVja2VkPWw/ZS5jaGVja2VkOiEhcixlLmRlZmF1bHRDaGVja2VkPSEhcixudWxsIT1pJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBpJiZcInN5bWJvbFwiIT10eXBlb2YgaSYmXCJib29sZWFuXCIhPXR5cGVvZiBpJiYoZS5uYW1lPWkpLGU5KGUpfWZ1bmN0aW9uIG5vKGUsbix0KXtcIm51bWJlclwiPT09biYmZTcoZS5vd25lckRvY3VtZW50KT09PWV8fGUuZGVmYXVsdFZhbHVlPT09XCJcIit0fHwoZS5kZWZhdWx0VmFsdWU9XCJcIit0KX1mdW5jdGlvbiBuYShlLG4sdCxyKXtpZihlPWUub3B0aW9ucyxuKXtuPXt9O2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKW5bXCIkXCIrdFtvXV09ITA7Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKylvPW4uaGFzT3duUHJvcGVydHkoXCIkXCIrZVt0XS52YWx1ZSksZVt0XS5zZWxlY3RlZCE9PW8mJihlW3RdLnNlbGVjdGVkPW8pLG8mJnImJihlW3RdLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobz0wLHQ9XCJcIitlMyh0KSxuPW51bGw7bzxlLmxlbmd0aDtvKyspe2lmKGVbb10udmFsdWU9PT10KXtlW29dLnNlbGVjdGVkPSEwLHImJihlW29dLmRlZmF1bHRTZWxlY3RlZD0hMCk7cmV0dXJufW51bGwhPT1ufHxlW29dLmRpc2FibGVkfHwobj1lW29dKX1udWxsIT09biYmKG4uc2VsZWN0ZWQ9ITApfX1mdW5jdGlvbiBuaShlLG4sdCl7aWYobnVsbCE9biYmKChuPVwiXCIrZTMobikpIT09ZS52YWx1ZSYmKGUudmFsdWU9biksbnVsbD09dCkpe2UuZGVmYXVsdFZhbHVlIT09biYmKGUuZGVmYXVsdFZhbHVlPW4pO3JldHVybn1lLmRlZmF1bHRWYWx1ZT1udWxsIT10P1wiXCIrZTModCk6XCJcIn1mdW5jdGlvbiBubChlLG4sdCxyKXtpZihudWxsPT1uKXtpZihudWxsIT1yKXtpZihudWxsIT10KXRocm93IEVycm9yKGwoOTIpKTtpZih6KHIpKXtpZigxPHIubGVuZ3RoKXRocm93IEVycm9yKGwoOTMpKTtyPXJbMF19dD1yfW51bGw9PXQmJih0PVwiXCIpLG49dH1lLmRlZmF1bHRWYWx1ZT10PWUzKG4pLChyPWUudGV4dENvbnRlbnQpPT09dCYmXCJcIiE9PXImJm51bGwhPT1yJiYoZS52YWx1ZT1yKSxlOShlKX1mdW5jdGlvbiBucyhlLG4pe2lmKG4pe3ZhciB0PWUuZmlyc3RDaGlsZDtpZih0JiZ0PT09ZS5sYXN0Q2hpbGQmJjM9PT10Lm5vZGVUeXBlKXt0Lm5vZGVWYWx1ZT1uO3JldHVybn19ZS50ZXh0Q29udGVudD1ufXZhciBuYz1uZXcgU2V0KFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgYXNwZWN0UmF0aW8gYm9yZGVySW1hZ2VPdXRzZXQgYm9yZGVySW1hZ2VTbGljZSBib3JkZXJJbWFnZVdpZHRoIGJveEZsZXggYm94RmxleEdyb3VwIGJveE9yZGluYWxHcm91cCBjb2x1bW5Db3VudCBjb2x1bW5zIGZsZXggZmxleEdyb3cgZmxleFBvc2l0aXZlIGZsZXhTaHJpbmsgZmxleE5lZ2F0aXZlIGZsZXhPcmRlciBncmlkQXJlYSBncmlkUm93IGdyaWRSb3dFbmQgZ3JpZFJvd1NwYW4gZ3JpZFJvd1N0YXJ0IGdyaWRDb2x1bW4gZ3JpZENvbHVtbkVuZCBncmlkQ29sdW1uU3BhbiBncmlkQ29sdW1uU3RhcnQgZm9udFdlaWdodCBsaW5lQ2xhbXAgbGluZUhlaWdodCBvcGFjaXR5IG9yZGVyIG9ycGhhbnMgc2NhbGUgdGFiU2l6ZSB3aWRvd3MgekluZGV4IHpvb20gZmlsbE9wYWNpdHkgZmxvb2RPcGFjaXR5IHN0b3BPcGFjaXR5IHN0cm9rZURhc2hhcnJheSBzdHJva2VEYXNob2Zmc2V0IHN0cm9rZU1pdGVybGltaXQgc3Ryb2tlT3BhY2l0eSBzdHJva2VXaWR0aCBNb3pBbmltYXRpb25JdGVyYXRpb25Db3VudCBNb3pCb3hGbGV4IE1vekJveEZsZXhHcm91cCBNb3pMaW5lQ2xhbXAgbXNBbmltYXRpb25JdGVyYXRpb25Db3VudCBtc0ZsZXggbXNab29tIG1zRmxleEdyb3cgbXNGbGV4TmVnYXRpdmUgbXNGbGV4T3JkZXIgbXNGbGV4UG9zaXRpdmUgbXNGbGV4U2hyaW5rIG1zR3JpZENvbHVtbiBtc0dyaWRDb2x1bW5TcGFuIG1zR3JpZFJvdyBtc0dyaWRSb3dTcGFuIFdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IFdlYmtpdEJveEZsZXggV2ViS2l0Qm94RmxleEdyb3VwIFdlYmtpdEJveE9yZGluYWxHcm91cCBXZWJraXRDb2x1bW5Db3VudCBXZWJraXRDb2x1bW5zIFdlYmtpdEZsZXggV2Via2l0RmxleEdyb3cgV2Via2l0RmxleFBvc2l0aXZlIFdlYmtpdEZsZXhTaHJpbmsgV2Via2l0TGluZUNsYW1wXCIuc3BsaXQoXCIgXCIpKTtmdW5jdGlvbiBudShlLG4sdCl7dmFyIHI9MD09PW4uaW5kZXhPZihcIi0tXCIpO251bGw9PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJcIj09PXQ/cj9lLnNldFByb3BlcnR5KG4sXCJcIik6XCJmbG9hdFwiPT09bj9lLmNzc0Zsb2F0PVwiXCI6ZVtuXT1cIlwiOnI/ZS5zZXRQcm9wZXJ0eShuLHQpOlwibnVtYmVyXCIhPXR5cGVvZiB0fHwwPT09dHx8bmMuaGFzKG4pP1wiZmxvYXRcIj09PW4/ZS5jc3NGbG9hdD10OmVbbl09KFwiXCIrdCkudHJpbSgpOmVbbl09dCtcInB4XCJ9ZnVuY3Rpb24gbmQoZSxuLHQpe2lmKG51bGwhPW4mJlwib2JqZWN0XCIhPXR5cGVvZiBuKXRocm93IEVycm9yKGwoNjIpKTtpZihlPWUuc3R5bGUsbnVsbCE9dCl7Zm9yKHZhciByIGluIHQpIXQuaGFzT3duUHJvcGVydHkocil8fG51bGwhPW4mJm4uaGFzT3duUHJvcGVydHkocil8fCgwPT09ci5pbmRleE9mKFwiLS1cIik/ZS5zZXRQcm9wZXJ0eShyLFwiXCIpOlwiZmxvYXRcIj09PXI/ZS5jc3NGbG9hdD1cIlwiOmVbcl09XCJcIik7Zm9yKHZhciBvIGluIG4pcj1uW29dLG4uaGFzT3duUHJvcGVydHkobykmJnRbb10hPT1yJiZudShlLG8scil9ZWxzZSBmb3IodmFyIGEgaW4gbiluLmhhc093blByb3BlcnR5KGEpJiZudShlLGEsblthXSl9ZnVuY3Rpb24gbmYoZSl7aWYoLTE9PT1lLmluZGV4T2YoXCItXCIpKXJldHVybiExO3N3aXRjaChlKXtjYXNlXCJhbm5vdGF0aW9uLXhtbFwiOmNhc2VcImNvbG9yLXByb2ZpbGVcIjpjYXNlXCJmb250LWZhY2VcIjpjYXNlXCJmb250LWZhY2Utc3JjXCI6Y2FzZVwiZm9udC1mYWNlLXVyaVwiOmNhc2VcImZvbnQtZmFjZS1mb3JtYXRcIjpjYXNlXCJmb250LWZhY2UtbmFtZVwiOmNhc2VcIm1pc3NpbmctZ2x5cGhcIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgbnA9bmV3IE1hcChbW1wiYWNjZXB0Q2hhcnNldFwiLFwiYWNjZXB0LWNoYXJzZXRcIl0sW1wiaHRtbEZvclwiLFwiZm9yXCJdLFtcImh0dHBFcXVpdlwiLFwiaHR0cC1lcXVpdlwiXSxbXCJjcm9zc09yaWdpblwiLFwiY3Jvc3NvcmlnaW5cIl0sW1wiYWNjZW50SGVpZ2h0XCIsXCJhY2NlbnQtaGVpZ2h0XCJdLFtcImFsaWdubWVudEJhc2VsaW5lXCIsXCJhbGlnbm1lbnQtYmFzZWxpbmVcIl0sW1wiYXJhYmljRm9ybVwiLFwiYXJhYmljLWZvcm1cIl0sW1wiYmFzZWxpbmVTaGlmdFwiLFwiYmFzZWxpbmUtc2hpZnRcIl0sW1wiY2FwSGVpZ2h0XCIsXCJjYXAtaGVpZ2h0XCJdLFtcImNsaXBQYXRoXCIsXCJjbGlwLXBhdGhcIl0sW1wiY2xpcFJ1bGVcIixcImNsaXAtcnVsZVwiXSxbXCJjb2xvckludGVycG9sYXRpb25cIixcImNvbG9yLWludGVycG9sYXRpb25cIl0sW1wiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc1wiLFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCJdLFtcImNvbG9yUHJvZmlsZVwiLFwiY29sb3ItcHJvZmlsZVwiXSxbXCJjb2xvclJlbmRlcmluZ1wiLFwiY29sb3ItcmVuZGVyaW5nXCJdLFtcImRvbWluYW50QmFzZWxpbmVcIixcImRvbWluYW50LWJhc2VsaW5lXCJdLFtcImVuYWJsZUJhY2tncm91bmRcIixcImVuYWJsZS1iYWNrZ3JvdW5kXCJdLFtcImZpbGxPcGFjaXR5XCIsXCJmaWxsLW9wYWNpdHlcIl0sW1wiZmlsbFJ1bGVcIixcImZpbGwtcnVsZVwiXSxbXCJmbG9vZENvbG9yXCIsXCJmbG9vZC1jb2xvclwiXSxbXCJmbG9vZE9wYWNpdHlcIixcImZsb29kLW9wYWNpdHlcIl0sW1wiZm9udEZhbWlseVwiLFwiZm9udC1mYW1pbHlcIl0sW1wiZm9udFNpemVcIixcImZvbnQtc2l6ZVwiXSxbXCJmb250U2l6ZUFkanVzdFwiLFwiZm9udC1zaXplLWFkanVzdFwiXSxbXCJmb250U3RyZXRjaFwiLFwiZm9udC1zdHJldGNoXCJdLFtcImZvbnRTdHlsZVwiLFwiZm9udC1zdHlsZVwiXSxbXCJmb250VmFyaWFudFwiLFwiZm9udC12YXJpYW50XCJdLFtcImZvbnRXZWlnaHRcIixcImZvbnQtd2VpZ2h0XCJdLFtcImdseXBoTmFtZVwiLFwiZ2x5cGgtbmFtZVwiXSxbXCJnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbFwiLFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiXSxbXCJnbHlwaE9yaWVudGF0aW9uVmVydGljYWxcIixcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCJdLFtcImhvcml6QWR2WFwiLFwiaG9yaXotYWR2LXhcIl0sW1wiaG9yaXpPcmlnaW5YXCIsXCJob3Jpei1vcmlnaW4teFwiXSxbXCJpbWFnZVJlbmRlcmluZ1wiLFwiaW1hZ2UtcmVuZGVyaW5nXCJdLFtcImxldHRlclNwYWNpbmdcIixcImxldHRlci1zcGFjaW5nXCJdLFtcImxpZ2h0aW5nQ29sb3JcIixcImxpZ2h0aW5nLWNvbG9yXCJdLFtcIm1hcmtlckVuZFwiLFwibWFya2VyLWVuZFwiXSxbXCJtYXJrZXJNaWRcIixcIm1hcmtlci1taWRcIl0sW1wibWFya2VyU3RhcnRcIixcIm1hcmtlci1zdGFydFwiXSxbXCJvdmVybGluZVBvc2l0aW9uXCIsXCJvdmVybGluZS1wb3NpdGlvblwiXSxbXCJvdmVybGluZVRoaWNrbmVzc1wiLFwib3ZlcmxpbmUtdGhpY2tuZXNzXCJdLFtcInBhaW50T3JkZXJcIixcInBhaW50LW9yZGVyXCJdLFtcInBhbm9zZS0xXCIsXCJwYW5vc2UtMVwiXSxbXCJwb2ludGVyRXZlbnRzXCIsXCJwb2ludGVyLWV2ZW50c1wiXSxbXCJyZW5kZXJpbmdJbnRlbnRcIixcInJlbmRlcmluZy1pbnRlbnRcIl0sW1wic2hhcGVSZW5kZXJpbmdcIixcInNoYXBlLXJlbmRlcmluZ1wiXSxbXCJzdG9wQ29sb3JcIixcInN0b3AtY29sb3JcIl0sW1wic3RvcE9wYWNpdHlcIixcInN0b3Atb3BhY2l0eVwiXSxbXCJzdHJpa2V0aHJvdWdoUG9zaXRpb25cIixcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIl0sW1wic3RyaWtldGhyb3VnaFRoaWNrbmVzc1wiLFwic3RyaWtldGhyb3VnaC10aGlja25lc3NcIl0sW1wic3Ryb2tlRGFzaGFycmF5XCIsXCJzdHJva2UtZGFzaGFycmF5XCJdLFtcInN0cm9rZURhc2hvZmZzZXRcIixcInN0cm9rZS1kYXNob2Zmc2V0XCJdLFtcInN0cm9rZUxpbmVjYXBcIixcInN0cm9rZS1saW5lY2FwXCJdLFtcInN0cm9rZUxpbmVqb2luXCIsXCJzdHJva2UtbGluZWpvaW5cIl0sW1wic3Ryb2tlTWl0ZXJsaW1pdFwiLFwic3Ryb2tlLW1pdGVybGltaXRcIl0sW1wic3Ryb2tlT3BhY2l0eVwiLFwic3Ryb2tlLW9wYWNpdHlcIl0sW1wic3Ryb2tlV2lkdGhcIixcInN0cm9rZS13aWR0aFwiXSxbXCJ0ZXh0QW5jaG9yXCIsXCJ0ZXh0LWFuY2hvclwiXSxbXCJ0ZXh0RGVjb3JhdGlvblwiLFwidGV4dC1kZWNvcmF0aW9uXCJdLFtcInRleHRSZW5kZXJpbmdcIixcInRleHQtcmVuZGVyaW5nXCJdLFtcInRyYW5zZm9ybU9yaWdpblwiLFwidHJhbnNmb3JtLW9yaWdpblwiXSxbXCJ1bmRlcmxpbmVQb3NpdGlvblwiLFwidW5kZXJsaW5lLXBvc2l0aW9uXCJdLFtcInVuZGVybGluZVRoaWNrbmVzc1wiLFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiXSxbXCJ1bmljb2RlQmlkaVwiLFwidW5pY29kZS1iaWRpXCJdLFtcInVuaWNvZGVSYW5nZVwiLFwidW5pY29kZS1yYW5nZVwiXSxbXCJ1bml0c1BlckVtXCIsXCJ1bml0cy1wZXItZW1cIl0sW1widkFscGhhYmV0aWNcIixcInYtYWxwaGFiZXRpY1wiXSxbXCJ2SGFuZ2luZ1wiLFwidi1oYW5naW5nXCJdLFtcInZJZGVvZ3JhcGhpY1wiLFwidi1pZGVvZ3JhcGhpY1wiXSxbXCJ2TWF0aGVtYXRpY2FsXCIsXCJ2LW1hdGhlbWF0aWNhbFwiXSxbXCJ2ZWN0b3JFZmZlY3RcIixcInZlY3Rvci1lZmZlY3RcIl0sW1widmVydEFkdllcIixcInZlcnQtYWR2LXlcIl0sW1widmVydE9yaWdpblhcIixcInZlcnQtb3JpZ2luLXhcIl0sW1widmVydE9yaWdpbllcIixcInZlcnQtb3JpZ2luLXlcIl0sW1wid29yZFNwYWNpbmdcIixcIndvcmQtc3BhY2luZ1wiXSxbXCJ3cml0aW5nTW9kZVwiLFwid3JpdGluZy1tb2RlXCJdLFtcInhtbG5zWGxpbmtcIixcInhtbG5zOnhsaW5rXCJdLFtcInhIZWlnaHRcIixcIngtaGVpZ2h0XCJdXSksbmg9L15bXFx1MDAwMC1cXHUwMDFGIF0qaltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSp2W1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnNbXFxyXFxuXFx0XSpjW1xcclxcblxcdF0qcltcXHJcXG5cXHRdKmlbXFxyXFxuXFx0XSpwW1xcclxcblxcdF0qdFtcXHJcXG5cXHRdKjovaTtmdW5jdGlvbiBuZyhlKXtyZXR1cm4gbmgudGVzdChcIlwiK2UpP1wiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0IGhhcyBibG9ja2VkIGEgamF2YXNjcmlwdDogVVJMIGFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbi4nKVwiOmV9ZnVuY3Rpb24gbm0oKXt9dmFyIG52PW51bGw7ZnVuY3Rpb24gbmIoZSl7cmV0dXJuKGU9ZS50YXJnZXR8fGUuc3JjRWxlbWVudHx8d2luZG93KS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGU9ZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksMz09PWUubm9kZVR5cGU/ZS5wYXJlbnROb2RlOmV9dmFyIG55PW51bGwsbng9bnVsbDtmdW5jdGlvbiBudyhlKXt2YXIgbj1lVyhlKTtpZihuJiYoZT1uLnN0YXRlTm9kZSkpe3ZhciB0PWVbZURdfHxudWxsO3N3aXRjaChlPW4uc3RhdGVOb2RlLG4udHlwZSl7Y2FzZVwiaW5wdXRcIjppZihudChlLHQudmFsdWUsdC5kZWZhdWx0VmFsdWUsdC5kZWZhdWx0VmFsdWUsdC5jaGVja2VkLHQuZGVmYXVsdENoZWNrZWQsdC50eXBlLHQubmFtZSksbj10Lm5hbWUsXCJyYWRpb1wiPT09dC50eXBlJiZudWxsIT1uKXtmb3IodD1lO3QucGFyZW50Tm9kZTspdD10LnBhcmVudE5vZGU7Zm9yKHQ9dC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPVwiJytubihcIlwiK24pKydcIl1bdHlwZT1cInJhZGlvXCJdJyksbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2lmKHIhPT1lJiZyLmZvcm09PT1lLmZvcm0pe3ZhciBvPXJbZURdfHxudWxsO2lmKCFvKXRocm93IEVycm9yKGwoOTApKTtudChyLG8udmFsdWUsby5kZWZhdWx0VmFsdWUsby5kZWZhdWx0VmFsdWUsby5jaGVja2VkLG8uZGVmYXVsdENoZWNrZWQsby50eXBlLG8ubmFtZSl9fWZvcihuPTA7bjx0Lmxlbmd0aDtuKyspKHI9dFtuXSkuZm9ybT09PWUuZm9ybSYmZTgocil9YnJlYWs7Y2FzZVwidGV4dGFyZWFcIjpuaShlLHQudmFsdWUsdC5kZWZhdWx0VmFsdWUpO2JyZWFrO2Nhc2VcInNlbGVjdFwiOm51bGwhPShuPXQudmFsdWUpJiZuYShlLCEhdC5tdWx0aXBsZSxuLCExKX19fXZhciBuaj0hMTtmdW5jdGlvbiBuayhlLG4sdCl7aWYobmopcmV0dXJuIGUobix0KTtuaj0hMDt0cnl7cmV0dXJuIGUobil9ZmluYWxseXtpZihuaj0hMSwobnVsbCE9PW55fHxudWxsIT09bngpJiYoc3MoKSxueSYmKG49bnksZT1ueCxueD1ueT1udWxsLG53KG4pLGUpKSlmb3Iobj0wO248ZS5sZW5ndGg7bisrKW53KGVbbl0pfX1mdW5jdGlvbiBuQShlLG4pe3ZhciB0PWUuc3RhdGVOb2RlO2lmKG51bGw9PT10KXJldHVybiBudWxsO3ZhciByPXRbZURdfHxudWxsO2lmKG51bGw9PT1yKXJldHVybiBudWxsO3N3aXRjaCh0PXJbbl0sbil7Y2FzZVwib25DbGlja1wiOmNhc2VcIm9uQ2xpY2tDYXB0dXJlXCI6Y2FzZVwib25Eb3VibGVDbGlja1wiOmNhc2VcIm9uRG91YmxlQ2xpY2tDYXB0dXJlXCI6Y2FzZVwib25Nb3VzZURvd25cIjpjYXNlXCJvbk1vdXNlRG93bkNhcHR1cmVcIjpjYXNlXCJvbk1vdXNlTW92ZVwiOmNhc2VcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOmNhc2VcIm9uTW91c2VVcFwiOmNhc2VcIm9uTW91c2VVcENhcHR1cmVcIjpjYXNlXCJvbk1vdXNlRW50ZXJcIjoocj0hci5kaXNhYmxlZCl8fChyPVwiYnV0dG9uXCIhPT0oZT1lLnR5cGUpJiZcImlucHV0XCIhPT1lJiZcInNlbGVjdFwiIT09ZSYmXCJ0ZXh0YXJlYVwiIT09ZSksZT0hcjticmVhaztkZWZhdWx0OmU9ITF9aWYoZSlyZXR1cm4gbnVsbDtpZih0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IEVycm9yKGwoMjMxLG4sdHlwZW9mIHQpKTtyZXR1cm4gdH12YXIgbk89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LmRvY3VtZW50JiZ2b2lkIDAhPT13aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCxuQz0hMTtpZihuTyl0cnl7dmFyIG5TPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShuUyxcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7bkM9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsblMsblMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLG5TLG5TKX1jYXRjaChlKXtuQz0hMX12YXIgbkU9bnVsbCxuXz1udWxsLG5QPW51bGw7ZnVuY3Rpb24gbnooKXtpZihuUClyZXR1cm4gblA7dmFyIGUsbix0PW5fLHI9dC5sZW5ndGgsbz1cInZhbHVlXCJpbiBuRT9uRS52YWx1ZTpuRS50ZXh0Q29udGVudCxhPW8ubGVuZ3RoO2ZvcihlPTA7ZTxyJiZ0W2VdPT09b1tlXTtlKyspO3ZhciBpPXItZTtmb3Iobj0xO248PWkmJnRbci1uXT09PW9bYS1uXTtuKyspO3JldHVybiBuUD1vLnNsaWNlKGUsMTxuPzEtbjp2b2lkIDApfWZ1bmN0aW9uIG5MKGUpe3ZhciBuPWUua2V5Q29kZTtyZXR1cm5cImNoYXJDb2RlXCJpbiBlPzA9PT0oZT1lLmNoYXJDb2RlKSYmMTM9PT1uJiYoZT0xMyk6ZT1uLDEwPT09ZSYmKGU9MTMpLDMyPD1lfHwxMz09PWU/ZTowfWZ1bmN0aW9uIG5UKCl7cmV0dXJuITB9ZnVuY3Rpb24gblIoKXtyZXR1cm4hMX1mdW5jdGlvbiBuTihlKXtmdW5jdGlvbiBuKG4sdCxyLG8sYSl7Zm9yKHZhciBpIGluIHRoaXMuX3JlYWN0TmFtZT1uLHRoaXMuX3RhcmdldEluc3Q9cix0aGlzLnR5cGU9dCx0aGlzLm5hdGl2ZUV2ZW50PW8sdGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbCxlKWUuaGFzT3duUHJvcGVydHkoaSkmJihuPWVbaV0sdGhpc1tpXT1uP24obyk6b1tpXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShudWxsIT1vLmRlZmF1bHRQcmV2ZW50ZWQ/by5kZWZhdWx0UHJldmVudGVkOiExPT09by5yZXR1cm5WYWx1ZSk/blQ6blIsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1uUix0aGlzfXJldHVybiBmKG4ucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTpcInVua25vd25cIiE9dHlwZW9mIGUucmV0dXJuVmFsdWUmJihlLnJldHVyblZhbHVlPSExKSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1uVCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uP2Uuc3RvcFByb3BhZ2F0aW9uKCk6XCJ1bmtub3duXCIhPXR5cGVvZiBlLmNhbmNlbEJ1YmJsZSYmKGUuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPW5UKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50Om5UfSksbn12YXIgbkQsbkIsbk0sbkksbkgsbkY9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sblU9bk4obkYpLG5WPWYoe30sbkYse3ZpZXc6MCxkZXRhaWw6MH0pLG5xPW5OKG5WKSxuVz1mKHt9LG5WLHtzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAscGFnZVg6MCxwYWdlWTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxnZXRNb2RpZmllclN0YXRlOm4yLGJ1dHRvbjowLGJ1dHRvbnM6MCxyZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lLnJlbGF0ZWRUYXJnZXQ/ZS5mcm9tRWxlbWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50OmUucmVsYXRlZFRhcmdldH0sbW92ZW1lbnRYOmZ1bmN0aW9uKGUpe3JldHVyblwibW92ZW1lbnRYXCJpbiBlP2UubW92ZW1lbnRYOihlIT09bkgmJihuSCYmXCJtb3VzZW1vdmVcIj09PWUudHlwZT8obk09ZS5zY3JlZW5YLW5ILnNjcmVlblgsbkk9ZS5zY3JlZW5ZLW5ILnNjcmVlblkpOm5JPW5NPTAsbkg9ZSksbk0pfSxtb3ZlbWVudFk6ZnVuY3Rpb24oZSl7cmV0dXJuXCJtb3ZlbWVudFlcImluIGU/ZS5tb3ZlbWVudFk6bkl9fSksbiQ9bk4oblcpLG5aPW5OKGYoe30sblcse2RhdGFUcmFuc2ZlcjowfSkpLG5ZPW5OKGYoe30sblYse3JlbGF0ZWRUYXJnZXQ6MH0pKSxuWD1uTihmKHt9LG5GLHthbmltYXRpb25OYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSksbks9bk4oZih7fSxuRix7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm5cImNsaXBib2FyZERhdGFcImluIGU/ZS5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX0pKSxuUT1uTihmKHt9LG5GLHtkYXRhOjB9KSksbkc9e0VzYzpcIkVzY2FwZVwiLFNwYWNlYmFyOlwiIFwiLExlZnQ6XCJBcnJvd0xlZnRcIixVcDpcIkFycm93VXBcIixSaWdodDpcIkFycm93UmlnaHRcIixEb3duOlwiQXJyb3dEb3duXCIsRGVsOlwiRGVsZXRlXCIsV2luOlwiT1NcIixNZW51OlwiQ29udGV4dE1lbnVcIixBcHBzOlwiQ29udGV4dE1lbnVcIixTY3JvbGw6XCJTY3JvbGxMb2NrXCIsTW96UHJpbnRhYmxlS2V5OlwiVW5pZGVudGlmaWVkXCJ9LG5KPXs4OlwiQmFja3NwYWNlXCIsOTpcIlRhYlwiLDEyOlwiQ2xlYXJcIiwxMzpcIkVudGVyXCIsMTY6XCJTaGlmdFwiLDE3OlwiQ29udHJvbFwiLDE4OlwiQWx0XCIsMTk6XCJQYXVzZVwiLDIwOlwiQ2Fwc0xvY2tcIiwyNzpcIkVzY2FwZVwiLDMyOlwiIFwiLDMzOlwiUGFnZVVwXCIsMzQ6XCJQYWdlRG93blwiLDM1OlwiRW5kXCIsMzY6XCJIb21lXCIsMzc6XCJBcnJvd0xlZnRcIiwzODpcIkFycm93VXBcIiwzOTpcIkFycm93UmlnaHRcIiw0MDpcIkFycm93RG93blwiLDQ1OlwiSW5zZXJ0XCIsNDY6XCJEZWxldGVcIiwxMTI6XCJGMVwiLDExMzpcIkYyXCIsMTE0OlwiRjNcIiwxMTU6XCJGNFwiLDExNjpcIkY1XCIsMTE3OlwiRjZcIiwxMTg6XCJGN1wiLDExOTpcIkY4XCIsMTIwOlwiRjlcIiwxMjE6XCJGMTBcIiwxMjI6XCJGMTFcIiwxMjM6XCJGMTJcIiwxNDQ6XCJOdW1Mb2NrXCIsMTQ1OlwiU2Nyb2xsTG9ja1wiLDIyNDpcIk1ldGFcIn0sbjA9e0FsdDpcImFsdEtleVwiLENvbnRyb2w6XCJjdHJsS2V5XCIsTWV0YTpcIm1ldGFLZXlcIixTaGlmdDpcInNoaWZ0S2V5XCJ9O2Z1bmN0aW9uIG4xKGUpe3ZhciBuPXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIG4uZ2V0TW9kaWZpZXJTdGF0ZT9uLmdldE1vZGlmaWVyU3RhdGUoZSk6ISEoZT1uMFtlXSkmJiEhbltlXX1mdW5jdGlvbiBuMigpe3JldHVybiBuMX12YXIgbjQ9bk4oZih7fSxuVix7a2V5OmZ1bmN0aW9uKGUpe2lmKGUua2V5KXt2YXIgbj1uR1tlLmtleV18fGUua2V5O2lmKFwiVW5pZGVudGlmaWVkXCIhPT1uKXJldHVybiBufXJldHVyblwia2V5cHJlc3NcIj09PWUudHlwZT8xMz09PShlPW5MKGUpKT9cIkVudGVyXCI6U3RyaW5nLmZyb21DaGFyQ29kZShlKTpcImtleWRvd25cIj09PWUudHlwZXx8XCJrZXl1cFwiPT09ZS50eXBlP25KW2Uua2V5Q29kZV18fFwiVW5pZGVudGlmaWVkXCI6XCJcIn0sY29kZTowLGxvY2F0aW9uOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLHJlcGVhdDowLGxvY2FsZTowLGdldE1vZGlmaWVyU3RhdGU6bjIsY2hhckNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09ZS50eXBlP25MKGUpOjB9LGtleUNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJrZXlkb3duXCI9PT1lLnR5cGV8fFwia2V5dXBcIj09PWUudHlwZT9lLmtleUNvZGU6MH0sd2hpY2g6ZnVuY3Rpb24oZSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09ZS50eXBlP25MKGUpOlwia2V5ZG93blwiPT09ZS50eXBlfHxcImtleXVwXCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9fSkpLG41PW5OKGYoe30sblcse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSkpLG4zPW5OKGYoe30sblYse3RvdWNoZXM6MCx0YXJnZXRUb3VjaGVzOjAsY2hhbmdlZFRvdWNoZXM6MCxhbHRLZXk6MCxtZXRhS2V5OjAsY3RybEtleTowLHNoaWZ0S2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTpuMn0pKSxuNj1uTihmKHt9LG5GLHtwcm9wZXJ0eU5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pKSxuOT1uTihmKHt9LG5XLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuXCJkZWx0YVhcImluIGU/ZS5kZWx0YVg6XCJ3aGVlbERlbHRhWFwiaW4gZT8tZS53aGVlbERlbHRhWDowfSxkZWx0YVk6ZnVuY3Rpb24oZSl7cmV0dXJuXCJkZWx0YVlcImluIGU/ZS5kZWx0YVk6XCJ3aGVlbERlbHRhWVwiaW4gZT8tZS53aGVlbERlbHRhWTpcIndoZWVsRGVsdGFcImluIGU/LWUud2hlZWxEZWx0YTowfSxkZWx0YVo6MCxkZWx0YU1vZGU6MH0pKSxuOD1uTihmKHt9LG5GLHtuZXdTdGF0ZTowLG9sZFN0YXRlOjB9KSksbjc9WzksMTMsMjcsMzJdLHRlPW5PJiZcIkNvbXBvc2l0aW9uRXZlbnRcImluIHdpbmRvdyx0bj1udWxsO25PJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJih0bj1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciB0dD1uTyYmXCJUZXh0RXZlbnRcImluIHdpbmRvdyYmIXRuLHRyPW5PJiYoIXRlfHx0biYmODx0biYmMTE+PXRuKSx0bz0hMTtmdW5jdGlvbiB0YShlLG4pe3N3aXRjaChlKXtjYXNlXCJrZXl1cFwiOnJldHVybiAtMSE9PW43LmluZGV4T2Yobi5rZXlDb2RlKTtjYXNlXCJrZXlkb3duXCI6cmV0dXJuIDIyOSE9PW4ua2V5Q29kZTtjYXNlXCJrZXlwcmVzc1wiOmNhc2VcIm1vdXNlZG93blwiOmNhc2VcImZvY3Vzb3V0XCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gdGkoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mKGU9ZS5kZXRhaWwpJiZcImRhdGFcImluIGU/ZS5kYXRhOm51bGx9dmFyIHRsPSExLHRzPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLFwiZGF0ZXRpbWUtbG9jYWxcIjohMCxlbWFpbDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O2Z1bmN0aW9uIHRjKGUpe3ZhciBuPWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1uPyEhdHNbZS50eXBlXTpcInRleHRhcmVhXCI9PT1ufWZ1bmN0aW9uIHR1KGUsbix0LHIpe255P254P254LnB1c2gocik6bng9W3JdOm55PXIsMDwobj1jZShuLFwib25DaGFuZ2VcIikpLmxlbmd0aCYmKHQ9bmV3IG5VKFwib25DaGFuZ2VcIixcImNoYW5nZVwiLG51bGwsdCxyKSxlLnB1c2goe2V2ZW50OnQsbGlzdGVuZXJzOm59KSl9dmFyIHRkPW51bGwsdGY9bnVsbDtmdW5jdGlvbiB0cChlKXtzMihlLDApfWZ1bmN0aW9uIHRoKGUpe2lmKGU4KGUkKGUpKSlyZXR1cm4gZX1mdW5jdGlvbiB0ZyhlLG4pe2lmKFwiY2hhbmdlXCI9PT1lKXJldHVybiBufXZhciB0bT0hMTtpZihuTyl7aWYobk8pe3ZhciB0dj1cIm9uaW5wdXRcImluIGRvY3VtZW50O2lmKCF0dil7dmFyIHRiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dGIuc2V0QXR0cmlidXRlKFwib25pbnB1dFwiLFwicmV0dXJuO1wiKSx0dj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0Yi5vbmlucHV0fXI9dHZ9ZWxzZSByPSExO3RtPXImJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSl9ZnVuY3Rpb24gdHkoKXt0ZCYmKHRkLmRldGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLHR4KSx0Zj10ZD1udWxsKX1mdW5jdGlvbiB0eChlKXtpZihcInZhbHVlXCI9PT1lLnByb3BlcnR5TmFtZSYmdGgodGYpKXt2YXIgbj1bXTt0dShuLHRmLGUsbmIoZSkpLG5rKHRwLG4pfX1mdW5jdGlvbiB0dyhlLG4sdCl7XCJmb2N1c2luXCI9PT1lPyh0eSgpLHRkPW4sdGY9dCx0ZC5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIix0eCkpOlwiZm9jdXNvdXRcIj09PWUmJnR5KCl9ZnVuY3Rpb24gdGooZSl7aWYoXCJzZWxlY3Rpb25jaGFuZ2VcIj09PWV8fFwia2V5dXBcIj09PWV8fFwia2V5ZG93blwiPT09ZSlyZXR1cm4gdGgodGYpfWZ1bmN0aW9uIHRrKGUsbil7aWYoXCJjbGlja1wiPT09ZSlyZXR1cm4gdGgobil9ZnVuY3Rpb24gdEEoZSxuKXtpZihcImlucHV0XCI9PT1lfHxcImNoYW5nZVwiPT09ZSlyZXR1cm4gdGgobil9dmFyIHRPPVwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PW4mJigwIT09ZXx8MS9lPT0xL24pfHxlIT1lJiZuIT1ufTtmdW5jdGlvbiB0QyhlLG4pe2lmKHRPKGUsbikpcmV0dXJuITA7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2Ygbnx8bnVsbD09PW4pcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyhuKTtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07aWYoIUcuY2FsbChuLG8pfHwhdE8oZVtvXSxuW29dKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiB0UyhlKXtmb3IoO2UmJmUuZmlyc3RDaGlsZDspZT1lLmZpcnN0Q2hpbGQ7cmV0dXJuIGV9ZnVuY3Rpb24gdEUoZSxuKXt2YXIgdCxyPXRTKGUpO2ZvcihlPTA7cjspe2lmKDM9PT1yLm5vZGVUeXBlKXtpZih0PWUrci50ZXh0Q29udGVudC5sZW5ndGgsZTw9biYmdD49bilyZXR1cm57bm9kZTpyLG9mZnNldDpuLWV9O2U9dH1lOntmb3IoO3I7KXtpZihyLm5leHRTaWJsaW5nKXtyPXIubmV4dFNpYmxpbmc7YnJlYWsgZX1yPXIucGFyZW50Tm9kZX1yPXZvaWQgMH1yPXRTKHIpfX1mdW5jdGlvbiB0XyhlKXtlPW51bGwhPWUmJm51bGwhPWUub3duZXJEb2N1bWVudCYmbnVsbCE9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3P2Uub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldzp3aW5kb3c7Zm9yKHZhciBuPWU3KGUuZG9jdW1lbnQpO24gaW5zdGFuY2VvZiBlLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBuLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZn1jYXRjaChlKXt0PSExfWlmKHQpZT1uLmNvbnRlbnRXaW5kb3c7ZWxzZSBicmVhaztuPWU3KGUuZG9jdW1lbnQpfXJldHVybiBufWZ1bmN0aW9uIHRQKGUpe3ZhciBuPWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gbiYmKFwiaW5wdXRcIj09PW4mJihcInRleHRcIj09PWUudHlwZXx8XCJzZWFyY2hcIj09PWUudHlwZXx8XCJ0ZWxcIj09PWUudHlwZXx8XCJ1cmxcIj09PWUudHlwZXx8XCJwYXNzd29yZFwiPT09ZS50eXBlKXx8XCJ0ZXh0YXJlYVwiPT09bnx8XCJ0cnVlXCI9PT1lLmNvbnRlbnRFZGl0YWJsZSl9dmFyIHR6PW5PJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUsdEw9bnVsbCx0VD1udWxsLHRSPW51bGwsdE49ITE7ZnVuY3Rpb24gdEQoZSxuLHQpe3ZhciByPXQud2luZG93PT09dD90LmRvY3VtZW50Ojk9PT10Lm5vZGVUeXBlP3Q6dC5vd25lckRvY3VtZW50O3ROfHxudWxsPT10THx8dEwhPT1lNyhyKXx8KHI9XCJzZWxlY3Rpb25TdGFydFwiaW4ocj10TCkmJnRQKHIpP3tzdGFydDpyLnNlbGVjdGlvblN0YXJ0LGVuZDpyLnNlbGVjdGlvbkVuZH06e2FuY2hvck5vZGU6KHI9KHIub3duZXJEb2N1bWVudCYmci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpKS5hbmNob3JOb2RlLGFuY2hvck9mZnNldDpyLmFuY2hvck9mZnNldCxmb2N1c05vZGU6ci5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6ci5mb2N1c09mZnNldH0sdFImJnRDKHRSLHIpfHwodFI9ciwwPChyPWNlKHRULFwib25TZWxlY3RcIikpLmxlbmd0aCYmKG49bmV3IG5VKFwib25TZWxlY3RcIixcInNlbGVjdFwiLG51bGwsbix0KSxlLnB1c2goe2V2ZW50Om4sbGlzdGVuZXJzOnJ9KSxuLnRhcmdldD10TCkpKX1mdW5jdGlvbiB0QihlLG4pe3ZhciB0PXt9O3JldHVybiB0W2UudG9Mb3dlckNhc2UoKV09bi50b0xvd2VyQ2FzZSgpLHRbXCJXZWJraXRcIitlXT1cIndlYmtpdFwiK24sdFtcIk1velwiK2VdPVwibW96XCIrbix0fXZhciB0TT17YW5pbWF0aW9uZW5kOnRCKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25FbmRcIiksYW5pbWF0aW9uaXRlcmF0aW9uOnRCKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25JdGVyYXRpb25cIiksYW5pbWF0aW9uc3RhcnQ6dEIoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvblN0YXJ0XCIpLHRyYW5zaXRpb25ydW46dEIoXCJUcmFuc2l0aW9uXCIsXCJUcmFuc2l0aW9uUnVuXCIpLHRyYW5zaXRpb25zdGFydDp0QihcIlRyYW5zaXRpb25cIixcIlRyYW5zaXRpb25TdGFydFwiKSx0cmFuc2l0aW9uY2FuY2VsOnRCKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvbkNhbmNlbFwiKSx0cmFuc2l0aW9uZW5kOnRCKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvbkVuZFwiKX0sdEk9e30sdEg9e307ZnVuY3Rpb24gdEYoZSl7aWYodElbZV0pcmV0dXJuIHRJW2VdO2lmKCF0TVtlXSlyZXR1cm4gZTt2YXIgbix0PXRNW2VdO2ZvcihuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSYmbiBpbiB0SClyZXR1cm4gdElbZV09dFtuXTtyZXR1cm4gZX1uTyYmKHRIPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUsXCJBbmltYXRpb25FdmVudFwiaW4gd2luZG93fHwoZGVsZXRlIHRNLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIHRNLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIHRNLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXCJUcmFuc2l0aW9uRXZlbnRcImluIHdpbmRvd3x8ZGVsZXRlIHRNLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7dmFyIHRVPXRGKFwiYW5pbWF0aW9uZW5kXCIpLHRWPXRGKFwiYW5pbWF0aW9uaXRlcmF0aW9uXCIpLHRxPXRGKFwiYW5pbWF0aW9uc3RhcnRcIiksdFc9dEYoXCJ0cmFuc2l0aW9ucnVuXCIpLHQkPXRGKFwidHJhbnNpdGlvbnN0YXJ0XCIpLHRaPXRGKFwidHJhbnNpdGlvbmNhbmNlbFwiKSx0WT10RihcInRyYW5zaXRpb25lbmRcIiksdFg9bmV3IE1hcCx0Sz1cImFib3J0IGF1eENsaWNrIGJlZm9yZVRvZ2dsZSBjYW5jZWwgY2FuUGxheSBjYW5QbGF5VGhyb3VnaCBjbGljayBjbG9zZSBjb250ZXh0TWVudSBjb3B5IGN1dCBkcmFnIGRyYWdFbmQgZHJhZ0VudGVyIGRyYWdFeGl0IGRyYWdMZWF2ZSBkcmFnT3ZlciBkcmFnU3RhcnQgZHJvcCBkdXJhdGlvbkNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBnb3RQb2ludGVyQ2FwdHVyZSBpbnB1dCBpbnZhbGlkIGtleURvd24ga2V5UHJlc3Mga2V5VXAgbG9hZCBsb2FkZWREYXRhIGxvYWRlZE1ldGFkYXRhIGxvYWRTdGFydCBsb3N0UG9pbnRlckNhcHR1cmUgbW91c2VEb3duIG1vdXNlTW92ZSBtb3VzZU91dCBtb3VzZU92ZXIgbW91c2VVcCBwYXN0ZSBwYXVzZSBwbGF5IHBsYXlpbmcgcG9pbnRlckNhbmNlbCBwb2ludGVyRG93biBwb2ludGVyTW92ZSBwb2ludGVyT3V0IHBvaW50ZXJPdmVyIHBvaW50ZXJVcCBwcm9ncmVzcyByYXRlQ2hhbmdlIHJlc2V0IHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWVVcGRhdGUgdG91Y2hDYW5jZWwgdG91Y2hFbmQgdG91Y2hTdGFydCB2b2x1bWVDaGFuZ2Ugc2Nyb2xsIHRvZ2dsZSB0b3VjaE1vdmUgd2FpdGluZyB3aGVlbFwiLnNwbGl0KFwiIFwiKTtmdW5jdGlvbiB0UShlLG4pe3RYLnNldChlLG4pLGVRKG4sW2VdKX10Sy5wdXNoKFwic2Nyb2xsRW5kXCIpO3ZhciB0Rz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXBvcnRFcnJvcj9yZXBvcnRFcnJvcjpmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuRXJyb3JFdmVudCl7dmFyIG49bmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLG1lc3NhZ2U6XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlP1N0cmluZyhlLm1lc3NhZ2UpOlN0cmluZyhlKSxlcnJvcjplfSk7aWYoIXdpbmRvdy5kaXNwYXRjaEV2ZW50KG4pKXJldHVybn1lbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwcm9jZXNzLmVtaXQpcmV0dXJuIHZvaWQgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIixlKTtjb25zb2xlLmVycm9yKGUpfSx0Sj1bXSx0MD0wLHQxPTA7ZnVuY3Rpb24gdDIoKXtmb3IodmFyIGU9dDAsbj10MT10MD0wO248ZTspe3ZhciB0PXRKW25dO3RKW24rK109bnVsbDt2YXIgcj10SltuXTt0SltuKytdPW51bGw7dmFyIG89dEpbbl07dEpbbisrXT1udWxsO3ZhciBhPXRKW25dO2lmKHRKW24rK109bnVsbCxudWxsIT09ciYmbnVsbCE9PW8pe3ZhciBpPXIucGVuZGluZztudWxsPT09aT9vLm5leHQ9bzooby5uZXh0PWkubmV4dCxpLm5leHQ9byksci5wZW5kaW5nPW99MCE9PWEmJnQ2KHQsbyxhKX19ZnVuY3Rpb24gdDQoZSxuLHQscil7dEpbdDArK109ZSx0Slt0MCsrXT1uLHRKW3QwKytdPXQsdEpbdDArK109cix0MXw9cixlLmxhbmVzfD1yLG51bGwhPT0oZT1lLmFsdGVybmF0ZSkmJihlLmxhbmVzfD1yKX1mdW5jdGlvbiB0NShlLG4sdCxyKXtyZXR1cm4gdDQoZSxuLHQsciksdDkoZSl9ZnVuY3Rpb24gdDMoZSxuKXtyZXR1cm4gdDQoZSxudWxsLG51bGwsbiksdDkoZSl9ZnVuY3Rpb24gdDYoZSxuLHQpe2UubGFuZXN8PXQ7dmFyIHI9ZS5hbHRlcm5hdGU7bnVsbCE9PXImJihyLmxhbmVzfD10KTtmb3IodmFyIG89ITEsYT1lLnJldHVybjtudWxsIT09YTspYS5jaGlsZExhbmVzfD10LG51bGwhPT0ocj1hLmFsdGVybmF0ZSkmJihyLmNoaWxkTGFuZXN8PXQpLDIyPT09YS50YWcmJihudWxsPT09KGU9YS5zdGF0ZU5vZGUpfHwxJmUuX3Zpc2liaWxpdHl8fChvPSEwKSksZT1hLGE9YS5yZXR1cm47cmV0dXJuIDM9PT1lLnRhZz8oYT1lLnN0YXRlTm9kZSxvJiZudWxsIT09biYmKG89MzEtZWcodCksbnVsbD09PShyPShlPWEuaGlkZGVuVXBkYXRlcylbb10pP2Vbb109W25dOnIucHVzaChuKSxuLmxhbmU9MHgyMDAwMDAwMHx0KSxhKTpudWxsfWZ1bmN0aW9uIHQ5KGUpe2lmKDUwPHNlKXRocm93IHNlPTAsc249bnVsbCxFcnJvcihsKDE4NSkpO2Zvcih2YXIgbj1lLnJldHVybjtudWxsIT09bjspbj0oZT1uKS5yZXR1cm47cmV0dXJuIDM9PT1lLnRhZz9lLnN0YXRlTm9kZTpudWxsfXZhciB0OD17fTtmdW5jdGlvbiB0NyhlLG4sdCxyKXt0aGlzLnRhZz1lLHRoaXMua2V5PXQsdGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbCx0aGlzLmluZGV4PTAsdGhpcy5yZWZDbGVhbnVwPXRoaXMucmVmPW51bGwsdGhpcy5wZW5kaW5nUHJvcHM9bix0aGlzLmRlcGVuZGVuY2llcz10aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbCx0aGlzLm1vZGU9cix0aGlzLnN1YnRyZWVGbGFncz10aGlzLmZsYWdzPTAsdGhpcy5kZWxldGlvbnM9bnVsbCx0aGlzLmNoaWxkTGFuZXM9dGhpcy5sYW5lcz0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gcmUoZSxuLHQscil7cmV0dXJuIG5ldyB0NyhlLG4sdCxyKX1mdW5jdGlvbiBybihlKXtyZXR1cm4hKCEoZT1lLnByb3RvdHlwZSl8fCFlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIHJ0KGUsbil7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIG51bGw9PT10PygodD1yZShlLnRhZyxuLGUua2V5LGUubW9kZSkpLmVsZW1lbnRUeXBlPWUuZWxlbWVudFR5cGUsdC50eXBlPWUudHlwZSx0LnN0YXRlTm9kZT1lLnN0YXRlTm9kZSx0LmFsdGVybmF0ZT1lLGUuYWx0ZXJuYXRlPXQpOih0LnBlbmRpbmdQcm9wcz1uLHQudHlwZT1lLnR5cGUsdC5mbGFncz0wLHQuc3VidHJlZUZsYWdzPTAsdC5kZWxldGlvbnM9bnVsbCksdC5mbGFncz0weDNlMDAwMDAmZS5mbGFncyx0LmNoaWxkTGFuZXM9ZS5jaGlsZExhbmVzLHQubGFuZXM9ZS5sYW5lcyx0LmNoaWxkPWUuY2hpbGQsdC5tZW1vaXplZFByb3BzPWUubWVtb2l6ZWRQcm9wcyx0Lm1lbW9pemVkU3RhdGU9ZS5tZW1vaXplZFN0YXRlLHQudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSxuPWUuZGVwZW5kZW5jaWVzLHQuZGVwZW5kZW5jaWVzPW51bGw9PT1uP251bGw6e2xhbmVzOm4ubGFuZXMsZmlyc3RDb250ZXh0Om4uZmlyc3RDb250ZXh0fSx0LnNpYmxpbmc9ZS5zaWJsaW5nLHQuaW5kZXg9ZS5pbmRleCx0LnJlZj1lLnJlZix0LnJlZkNsZWFudXA9ZS5yZWZDbGVhbnVwLHR9ZnVuY3Rpb24gcnIoZSxuKXtlLmZsYWdzJj0weDNlMDAwMDI7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIG51bGw9PT10PyhlLmNoaWxkTGFuZXM9MCxlLmxhbmVzPW4sZS5jaGlsZD1udWxsLGUuc3VidHJlZUZsYWdzPTAsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS51cGRhdGVRdWV1ZT1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5zdGF0ZU5vZGU9bnVsbCk6KGUuY2hpbGRMYW5lcz10LmNoaWxkTGFuZXMsZS5sYW5lcz10LmxhbmVzLGUuY2hpbGQ9dC5jaGlsZCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGwsZS5tZW1vaXplZFByb3BzPXQubWVtb2l6ZWRQcm9wcyxlLm1lbW9pemVkU3RhdGU9dC5tZW1vaXplZFN0YXRlLGUudXBkYXRlUXVldWU9dC51cGRhdGVRdWV1ZSxlLnR5cGU9dC50eXBlLGUuZGVwZW5kZW5jaWVzPW51bGw9PT0obj10LmRlcGVuZGVuY2llcyk/bnVsbDp7bGFuZXM6bi5sYW5lcyxmaXJzdENvbnRleHQ6bi5maXJzdENvbnRleHR9KSxlfWZ1bmN0aW9uIHJvKGUsbix0LHIsbyxhKXt2YXIgaT0wO2lmKHI9ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXJuKGUpJiYoaT0xKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWk9IWZ1bmN0aW9uKGUsbix0KXtpZigxPT09dHx8bnVsbCE9bi5pdGVtUHJvcClyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZVwibWV0YVwiOmNhc2VcInRpdGxlXCI6cmV0dXJuITA7Y2FzZVwic3R5bGVcIjppZihcInN0cmluZ1wiIT10eXBlb2Ygbi5wcmVjZWRlbmNlfHxcInN0cmluZ1wiIT10eXBlb2Ygbi5ocmVmfHxcIlwiPT09bi5ocmVmKWJyZWFrO3JldHVybiEwO2Nhc2VcImxpbmtcIjppZihcInN0cmluZ1wiIT10eXBlb2Ygbi5yZWx8fFwic3RyaW5nXCIhPXR5cGVvZiBuLmhyZWZ8fFwiXCI9PT1uLmhyZWZ8fG4ub25Mb2FkfHxuLm9uRXJyb3IpYnJlYWs7aWYoXCJzdHlsZXNoZWV0XCI9PT1uLnJlbClyZXR1cm4gZT1uLmRpc2FibGVkLFwic3RyaW5nXCI9PXR5cGVvZiBuLnByZWNlZGVuY2UmJm51bGw9PWU7cmV0dXJuITA7Y2FzZVwic2NyaXB0XCI6aWYobi5hc3luYyYmXCJmdW5jdGlvblwiIT10eXBlb2Ygbi5hc3luYyYmXCJzeW1ib2xcIiE9dHlwZW9mIG4uYXN5bmMmJiFuLm9uTG9hZCYmIW4ub25FcnJvciYmbi5zcmMmJlwic3RyaW5nXCI9PXR5cGVvZiBuLnNyYylyZXR1cm4hMH1yZXR1cm4hMX0oZSx0LEguY3VycmVudCk/XCJodG1sXCI9PT1lfHxcImhlYWRcIj09PWV8fFwiYm9keVwiPT09ZT8yNzo1OjI2O2Vsc2UgZTpzd2l0Y2goZSl7Y2FzZSBDOnJldHVybihlPXJlKDMxLHQsbixvKSkuZWxlbWVudFR5cGU9QyxlLmxhbmVzPWEsZTtjYXNlIG06cmV0dXJuIHJhKHQuY2hpbGRyZW4sbyxhLG4pO2Nhc2UgdjppPTgsb3w9MjQ7YnJlYWs7Y2FzZSBiOnJldHVybihlPXJlKDEyLHQsbiwyfG8pKS5lbGVtZW50VHlwZT1iLGUubGFuZXM9YSxlO2Nhc2UgajpyZXR1cm4oZT1yZSgxMyx0LG4sbykpLmVsZW1lbnRUeXBlPWosZS5sYW5lcz1hLGU7Y2FzZSBrOnJldHVybihlPXJlKDE5LHQsbixvKSkuZWxlbWVudFR5cGU9ayxlLmxhbmVzPWEsZTtkZWZhdWx0OmlmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSlzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSB4Omk9MTA7YnJlYWsgZTtjYXNlIHk6aT05O2JyZWFrIGU7Y2FzZSB3Omk9MTE7YnJlYWsgZTtjYXNlIEE6aT0xNDticmVhayBlO2Nhc2UgTzppPTE2LHI9bnVsbDticmVhayBlfWk9MjksdD1FcnJvcihsKDEzMCxudWxsPT09ZT9cIm51bGxcIjp0eXBlb2YgZSxcIlwiKSkscj1udWxsfXJldHVybihuPXJlKGksdCxuLG8pKS5lbGVtZW50VHlwZT1lLG4udHlwZT1yLG4ubGFuZXM9YSxufWZ1bmN0aW9uIHJhKGUsbix0LHIpe3JldHVybihlPXJlKDcsZSxyLG4pKS5sYW5lcz10LGV9ZnVuY3Rpb24gcmkoZSxuLHQpe3JldHVybihlPXJlKDYsZSxudWxsLG4pKS5sYW5lcz10LGV9ZnVuY3Rpb24gcmwoZSl7dmFyIG49cmUoMTgsbnVsbCxudWxsLDApO3JldHVybiBuLnN0YXRlTm9kZT1lLG59ZnVuY3Rpb24gcnMoZSxuLHQpe3JldHVybihuPXJlKDQsbnVsbCE9PWUuY2hpbGRyZW4/ZS5jaGlsZHJlbjpbXSxlLmtleSxuKSkubGFuZXM9dCxuLnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzplLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246ZS5pbXBsZW1lbnRhdGlvbn0sbn12YXIgcmM9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcnUoZSxuKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciB0PXJjLmdldChlKTtyZXR1cm4gdm9pZCAwIT09dD90OihuPXt2YWx1ZTplLHNvdXJjZTpuLHN0YWNrOlEobil9LHJjLnNldChlLG4pLG4pfXJldHVybnt2YWx1ZTplLHNvdXJjZTpuLHN0YWNrOlEobil9fXZhciByZD1bXSxyZj0wLHJwPW51bGwscmg9MCxyZz1bXSxybT0wLHJ2PW51bGwscmI9MSxyeT1cIlwiO2Z1bmN0aW9uIHJ4KGUsbil7cmRbcmYrK109cmgscmRbcmYrK109cnAscnA9ZSxyaD1ufWZ1bmN0aW9uIHJ3KGUsbix0KXtyZ1tybSsrXT1yYixyZ1tybSsrXT1yeSxyZ1tybSsrXT1ydixydj1lO3ZhciByPXJiO2U9cnk7dmFyIG89MzItZWcociktMTtyJj1+KDE8PG8pLHQrPTE7dmFyIGE9MzItZWcobikrbztpZigzMDxhKXt2YXIgaT1vLW8lNTthPShyJigxPDxpKS0xKS50b1N0cmluZygzMikscj4+PWksby09aSxyYj0xPDwzMi1lZyhuKStvfHQ8PG98cixyeT1hK2V9ZWxzZSByYj0xPDxhfHQ8PG98cixyeT1lfWZ1bmN0aW9uIHJqKGUpe251bGwhPT1lLnJldHVybiYmKHJ4KGUsMSkscncoZSwxLDApKX1mdW5jdGlvbiByayhlKXtmb3IoO2U9PT1ycDspcnA9cmRbLS1yZl0scmRbcmZdPW51bGwscmg9cmRbLS1yZl0scmRbcmZdPW51bGw7Zm9yKDtlPT09cnY7KXJ2PXJnWy0tcm1dLHJnW3JtXT1udWxsLHJ5PXJnWy0tcm1dLHJnW3JtXT1udWxsLHJiPXJnWy0tcm1dLHJnW3JtXT1udWxsfWZ1bmN0aW9uIHJBKGUsbil7cmdbcm0rK109cmIscmdbcm0rK109cnkscmdbcm0rK109cnYscmI9bi5pZCxyeT1uLm92ZXJmbG93LHJ2PWV9dmFyIHJPPW51bGwsckM9bnVsbCxyUz0hMSxyRT1udWxsLHJfPSExLHJQPUVycm9yKGwoNTE5KSk7ZnVuY3Rpb24gcnooZSl7dmFyIG49RXJyb3IobCg0MTgsMTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXT9cInRleHRcIjpcIkhUTUxcIixcIlwiKSk7dGhyb3cgckIocnUobixlKSksclB9ZnVuY3Rpb24gckwoZSl7dmFyIG49ZS5zdGF0ZU5vZGUsdD1lLnR5cGUscj1lLm1lbW9pemVkUHJvcHM7c3dpdGNoKG5bZU5dPWUsbltlRF09cix0KXtjYXNlXCJkaWFsb2dcIjpzNChcImNhbmNlbFwiLG4pLHM0KFwiY2xvc2VcIixuKTticmVhaztjYXNlXCJpZnJhbWVcIjpjYXNlXCJvYmplY3RcIjpjYXNlXCJlbWJlZFwiOnM0KFwibG9hZFwiLG4pO2JyZWFrO2Nhc2VcInZpZGVvXCI6Y2FzZVwiYXVkaW9cIjpmb3IodD0wO3Q8czAubGVuZ3RoO3QrKylzNChzMFt0XSxuKTticmVhaztjYXNlXCJzb3VyY2VcIjpzNChcImVycm9yXCIsbik7YnJlYWs7Y2FzZVwiaW1nXCI6Y2FzZVwiaW1hZ2VcIjpjYXNlXCJsaW5rXCI6czQoXCJlcnJvclwiLG4pLHM0KFwibG9hZFwiLG4pO2JyZWFrO2Nhc2VcImRldGFpbHNcIjpzNChcInRvZ2dsZVwiLG4pO2JyZWFrO2Nhc2VcImlucHV0XCI6czQoXCJpbnZhbGlkXCIsbiksbnIobixyLnZhbHVlLHIuZGVmYXVsdFZhbHVlLHIuY2hlY2tlZCxyLmRlZmF1bHRDaGVja2VkLHIudHlwZSxyLm5hbWUsITApO2JyZWFrO2Nhc2VcInNlbGVjdFwiOnM0KFwiaW52YWxpZFwiLG4pO2JyZWFrO2Nhc2VcInRleHRhcmVhXCI6czQoXCJpbnZhbGlkXCIsbiksbmwobixyLnZhbHVlLHIuZGVmYXVsdFZhbHVlLHIuY2hpbGRyZW4pfVwic3RyaW5nXCIhPXR5cGVvZih0PXIuY2hpbGRyZW4pJiZcIm51bWJlclwiIT10eXBlb2YgdCYmXCJiaWdpbnRcIiE9dHlwZW9mIHR8fG4udGV4dENvbnRlbnQ9PT1cIlwiK3R8fCEwPT09ci5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8fGNpKG4udGV4dENvbnRlbnQsdCk/KG51bGwhPXIucG9wb3ZlciYmKHM0KFwiYmVmb3JldG9nZ2xlXCIsbiksczQoXCJ0b2dnbGVcIixuKSksbnVsbCE9ci5vblNjcm9sbCYmczQoXCJzY3JvbGxcIixuKSxudWxsIT1yLm9uU2Nyb2xsRW5kJiZzNChcInNjcm9sbGVuZFwiLG4pLG51bGwhPXIub25DbGljayYmKG4ub25jbGljaz1ubSksbj0hMCk6bj0hMSxufHxyeihlLCEwKX1mdW5jdGlvbiByVChlKXtmb3Iock89ZS5yZXR1cm47ck87KXN3aXRjaChyTy50YWcpe2Nhc2UgNTpjYXNlIDMxOmNhc2UgMTM6cl89ITE7cmV0dXJuO2Nhc2UgMjc6Y2FzZSAzOnJfPSEwO3JldHVybjtkZWZhdWx0OnJPPXJPLnJldHVybn19ZnVuY3Rpb24gclIoZSl7aWYoZSE9PXJPKXJldHVybiExO2lmKCFyUylyZXR1cm4gclQoZSksclM9ITAsITE7dmFyIG4sdD1lLnRhZztpZigobj0zIT09dCYmMjchPT10KSYmKChuPTU9PT10KSYmKG49XCJmb3JtXCI9PT0obj1lLnR5cGUpfHxcImJ1dHRvblwiPT09bnx8Y2coZS50eXBlLGUubWVtb2l6ZWRQcm9wcykpLG49IW4pLG4mJnJDJiZyeihlKSxyVChlKSwxMz09PXQpe2lmKCEoZT1udWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKT9lLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IobCgzMTcpKTtyQz1jeihlKX1lbHNlIGlmKDMxPT09dCl7aWYoIShlPW51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpP2UuZGVoeWRyYXRlZDpudWxsKSl0aHJvdyBFcnJvcihsKDMxNykpO3JDPWN6KGUpfWVsc2UgMjc9PT10Pyh0PXJDLGNqKGUudHlwZSk/KGU9Y1AsY1A9bnVsbCxyQz1lKTpyQz10KTpyQz1yTz9jXyhlLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1mdW5jdGlvbiByTigpe3JDPXJPPW51bGwsclM9ITF9ZnVuY3Rpb24gckQoKXt2YXIgZT1yRTtyZXR1cm4gbnVsbCE9PWUmJihudWxsPT09bFE/bFE9ZTpsUS5wdXNoLmFwcGx5KGxRLGUpLHJFPW51bGwpLGV9ZnVuY3Rpb24gckIoZSl7bnVsbD09PXJFP3JFPVtlXTpyRS5wdXNoKGUpfXZhciByTT1CKG51bGwpLHJJPW51bGwsckg9bnVsbDtmdW5jdGlvbiByRihlLG4sdCl7SShyTSxuLl9jdXJyZW50VmFsdWUpLG4uX2N1cnJlbnRWYWx1ZT10fWZ1bmN0aW9uIHJVKGUpe2UuX2N1cnJlbnRWYWx1ZT1yTS5jdXJyZW50LE0ock0pfWZ1bmN0aW9uIHJWKGUsbix0KXtmb3IoO251bGwhPT1lOyl7dmFyIHI9ZS5hbHRlcm5hdGU7aWYoKGUuY2hpbGRMYW5lcyZuKSE9PW4/KGUuY2hpbGRMYW5lc3w9bixudWxsIT09ciYmKHIuY2hpbGRMYW5lc3w9bikpOm51bGwhPT1yJiYoci5jaGlsZExhbmVzJm4pIT09biYmKHIuY2hpbGRMYW5lc3w9biksZT09PXQpYnJlYWs7ZT1lLnJldHVybn19ZnVuY3Rpb24gcnEoZSxuLHQscil7dmFyIG89ZS5jaGlsZDtmb3IobnVsbCE9PW8mJihvLnJldHVybj1lKTtudWxsIT09bzspe3ZhciBhPW8uZGVwZW5kZW5jaWVzO2lmKG51bGwhPT1hKXt2YXIgaT1vLmNoaWxkO2E9YS5maXJzdENvbnRleHQ7ZTpmb3IoO251bGwhPT1hOyl7dmFyIHM9YTthPW87Zm9yKHZhciBjPTA7YzxuLmxlbmd0aDtjKyspaWYocy5jb250ZXh0PT09bltjXSl7YS5sYW5lc3w9dCxudWxsIT09KHM9YS5hbHRlcm5hdGUpJiYocy5sYW5lc3w9dCksclYoYS5yZXR1cm4sdCxlKSxyfHwoaT1udWxsKTticmVhayBlfWE9cy5uZXh0fX1lbHNlIGlmKDE4PT09by50YWcpe2lmKG51bGw9PT0oaT1vLnJldHVybikpdGhyb3cgRXJyb3IobCgzNDEpKTtpLmxhbmVzfD10LG51bGwhPT0oYT1pLmFsdGVybmF0ZSkmJihhLmxhbmVzfD10KSxyVihpLHQsZSksaT1udWxsfWVsc2UgaT1vLmNoaWxkO2lmKG51bGwhPT1pKWkucmV0dXJuPW87ZWxzZSBmb3IoaT1vO251bGwhPT1pOyl7aWYoaT09PWUpe2k9bnVsbDticmVha31pZihudWxsIT09KG89aS5zaWJsaW5nKSl7by5yZXR1cm49aS5yZXR1cm4saT1vO2JyZWFrfWk9aS5yZXR1cm59bz1pfX1mdW5jdGlvbiByVyhlLG4sdCxyKXtlPW51bGw7Zm9yKHZhciBvPW4sYT0hMTtudWxsIT09bzspe2lmKCFhKXtpZigwIT0oNTI0Mjg4Jm8uZmxhZ3MpKWE9ITA7ZWxzZSBpZigwIT0oMjYyMTQ0Jm8uZmxhZ3MpKWJyZWFrfWlmKDEwPT09by50YWcpe3ZhciBpPW8uYWx0ZXJuYXRlO2lmKG51bGw9PT1pKXRocm93IEVycm9yKGwoMzg3KSk7aWYobnVsbCE9PShpPWkubWVtb2l6ZWRQcm9wcykpe3ZhciBzPW8udHlwZTt0TyhvLnBlbmRpbmdQcm9wcy52YWx1ZSxpLnZhbHVlKXx8KG51bGwhPT1lP2UucHVzaChzKTplPVtzXSl9fWVsc2UgaWYobz09PVYuY3VycmVudCl7aWYobnVsbD09PShpPW8uYWx0ZXJuYXRlKSl0aHJvdyBFcnJvcihsKDM4NykpO2kubWVtb2l6ZWRTdGF0ZS5tZW1vaXplZFN0YXRlIT09by5tZW1vaXplZFN0YXRlLm1lbW9pemVkU3RhdGUmJihudWxsIT09ZT9lLnB1c2goYzYpOmU9W2M2XSl9bz1vLnJldHVybn1udWxsIT09ZSYmcnEobixlLHQsciksbi5mbGFnc3w9MjYyMTQ0fWZ1bmN0aW9uIHIkKGUpe2ZvcihlPWUuZmlyc3RDb250ZXh0O251bGwhPT1lOyl7aWYoIXRPKGUuY29udGV4dC5fY3VycmVudFZhbHVlLGUubWVtb2l6ZWRWYWx1ZSkpcmV0dXJuITA7ZT1lLm5leHR9cmV0dXJuITF9ZnVuY3Rpb24gclooZSl7ckk9ZSxySD1udWxsLG51bGwhPT0oZT1lLmRlcGVuZGVuY2llcykmJihlLmZpcnN0Q29udGV4dD1udWxsKX1mdW5jdGlvbiByWShlKXtyZXR1cm4gcksockksZSl9ZnVuY3Rpb24gclgoZSxuKXtyZXR1cm4gbnVsbD09PXJJJiZyWihlKSxySyhlLG4pfWZ1bmN0aW9uIHJLKGUsbil7dmFyIHQ9bi5fY3VycmVudFZhbHVlO2lmKG49e2NvbnRleHQ6bixtZW1vaXplZFZhbHVlOnQsbmV4dDpudWxsfSxudWxsPT09ckgpe2lmKG51bGw9PT1lKXRocm93IEVycm9yKGwoMzA4KSk7ckg9bixlLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6bn0sZS5mbGFnc3w9NTI0Mjg4fWVsc2Ugckg9ckgubmV4dD1uO3JldHVybiB0fXZhciByUT1cInVuZGVmaW5lZFwiIT10eXBlb2YgQWJvcnRDb250cm9sbGVyP0Fib3J0Q29udHJvbGxlcjpmdW5jdGlvbigpe3ZhciBlPVtdLG49dGhpcy5zaWduYWw9e2Fib3J0ZWQ6ITEsYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihuLHQpe2UucHVzaCh0KX19O3RoaXMuYWJvcnQ9ZnVuY3Rpb24oKXtuLmFib3J0ZWQ9ITAsZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KX19LHJHPW8udW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxySj1vLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LHIwPXskJHR5cGVvZjp4LENvbnN1bWVyOm51bGwsUHJvdmlkZXI6bnVsbCxfY3VycmVudFZhbHVlOm51bGwsX2N1cnJlbnRWYWx1ZTI6bnVsbCxfdGhyZWFkQ291bnQ6MH07ZnVuY3Rpb24gcjEoKXtyZXR1cm57Y29udHJvbGxlcjpuZXcgclEsZGF0YTpuZXcgTWFwLHJlZkNvdW50OjB9fWZ1bmN0aW9uIHIyKGUpe2UucmVmQ291bnQtLSwwPT09ZS5yZWZDb3VudCYmckcockosZnVuY3Rpb24oKXtlLmNvbnRyb2xsZXIuYWJvcnQoKX0pfXZhciByND1udWxsLHI1PTAscjM9MCxyNj1udWxsO2Z1bmN0aW9uIHI5KCl7aWYoMD09LS1yNSYmbnVsbCE9PXI0KXtudWxsIT09cjYmJihyNi5zdGF0dXM9XCJmdWxmaWxsZWRcIik7dmFyIGU9cjQ7cjQ9bnVsbCxyMz0wLHI2PW51bGw7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspKDAsZVtuXSkoKX19dmFyIHI4PUwuUztMLlM9ZnVuY3Rpb24oZSxuKXtcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4udGhlbiYmZnVuY3Rpb24oZSxuKXtpZihudWxsPT09cjQpe3ZhciB0PXI0PVtdO3I1PTAscjM9c1goKSxyNj17c3RhdHVzOlwicGVuZGluZ1wiLHZhbHVlOnZvaWQgMCx0aGVuOmZ1bmN0aW9uKGUpe3QucHVzaChlKX19fXI1Kyssbi50aGVuKHI5LHI5KX0oMCxuKSxudWxsIT09cjgmJnI4KGUsbil9O3ZhciByNz1CKG51bGwpO2Z1bmN0aW9uIG9lKCl7dmFyIGU9cjcuY3VycmVudDtyZXR1cm4gbnVsbCE9PWU/ZTpsTi5wb29sZWRDYWNoZX1mdW5jdGlvbiBvbihlLG4pe251bGw9PT1uP0kocjcscjcuY3VycmVudCk6SShyNyxuLnBvb2wpfWZ1bmN0aW9uIG90KCl7dmFyIGU9b2UoKTtyZXR1cm4gbnVsbD09PWU/bnVsbDp7cGFyZW50OnIwLl9jdXJyZW50VmFsdWUscG9vbDplfX12YXIgb3I9RXJyb3IobCg0NjApKSxvbz1FcnJvcihsKDQ3NCkpLG9hPUVycm9yKGwoNTQyKSksb2k9e3RoZW46ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBvbChlKXtyZXR1cm5cImZ1bGZpbGxlZFwiPT09KGU9ZS5zdGF0dXMpfHxcInJlamVjdGVkXCI9PT1lfWZ1bmN0aW9uIG9zKGUsbix0KXtzd2l0Y2godm9pZCAwPT09KHQ9ZVt0XSk/ZS5wdXNoKG4pOnQhPT1uJiYobi50aGVuKG5tLG5tKSxuPXQpLG4uc3RhdHVzKXtjYXNlXCJmdWxmaWxsZWRcIjpyZXR1cm4gbi52YWx1ZTtjYXNlXCJyZWplY3RlZFwiOnRocm93IG9kKGU9bi5yZWFzb24pLGU7ZGVmYXVsdDppZihcInN0cmluZ1wiPT10eXBlb2Ygbi5zdGF0dXMpbi50aGVuKG5tLG5tKTtlbHNle2lmKG51bGwhPT0oZT1sTikmJjEwMDxlLnNoZWxsU3VzcGVuZENvdW50ZXIpdGhyb3cgRXJyb3IobCg0ODIpKTsoZT1uKS5zdGF0dXM9XCJwZW5kaW5nXCIsZS50aGVuKGZ1bmN0aW9uKGUpe2lmKFwicGVuZGluZ1wiPT09bi5zdGF0dXMpe3ZhciB0PW47dC5zdGF0dXM9XCJmdWxmaWxsZWRcIix0LnZhbHVlPWV9fSxmdW5jdGlvbihlKXtpZihcInBlbmRpbmdcIj09PW4uc3RhdHVzKXt2YXIgdD1uO3Quc3RhdHVzPVwicmVqZWN0ZWRcIix0LnJlYXNvbj1lfX0pfXN3aXRjaChuLnN0YXR1cyl7Y2FzZVwiZnVsZmlsbGVkXCI6cmV0dXJuIG4udmFsdWU7Y2FzZVwicmVqZWN0ZWRcIjp0aHJvdyBvZChlPW4ucmVhc29uKSxlfXRocm93IG9jPW4sb3J9fXZhciBvYz1udWxsO2Z1bmN0aW9uIG91KCl7aWYobnVsbD09PW9jKXRocm93IEVycm9yKGwoNDU5KSk7dmFyIGU9b2M7cmV0dXJuIG9jPW51bGwsZX1mdW5jdGlvbiBvZChlKXtpZihlPT09b3J8fGU9PT1vYSl0aHJvdyBFcnJvcihsKDQ4MykpfXZhciBvZj1udWxsLG9wPTA7ZnVuY3Rpb24gb2goZSl7dmFyIG49b3A7cmV0dXJuIG9wKz0xLG51bGw9PT1vZiYmKG9mPVtdKSxvcyhvZixlLG4pfWZ1bmN0aW9uIG9nKGUsbil7ZS5yZWY9dm9pZCAwIT09KG49bi5wcm9wcy5yZWYpP246bnVsbH1mdW5jdGlvbiBvbShlLG4pe2lmKG4uJCR0eXBlb2Y9PT1wKXRocm93IEVycm9yKGwoNTI1KSk7dGhyb3cgRXJyb3IobCgzMSxcIltvYmplY3QgT2JqZWN0XVwiPT09KGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKT9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKG4pLmpvaW4oXCIsIFwiKStcIn1cIjplKSl9ZnVuY3Rpb24gb3YoZSl7cmV0dXJuKDAsZS5faW5pdCkoZS5fcGF5bG9hZCl9ZnVuY3Rpb24gb2IoZSl7ZnVuY3Rpb24gbihuLHQpe2lmKGUpe3ZhciByPW4uZGVsZXRpb25zO251bGw9PT1yPyhuLmRlbGV0aW9ucz1bdF0sbi5mbGFnc3w9MTYpOnIucHVzaCh0KX19ZnVuY3Rpb24gdCh0LHIpe2lmKCFlKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PXI7KW4odCxyKSxyPXIuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiByKGUpe2Zvcih2YXIgbj1uZXcgTWFwO251bGwhPT1lOyludWxsIT09ZS5rZXk/bi5zZXQoZS5rZXksZSk6bi5zZXQoZS5pbmRleCxlKSxlPWUuc2libGluZztyZXR1cm4gbn1mdW5jdGlvbiBvKGUsbil7cmV0dXJuKGU9cnQoZSxuKSkuaW5kZXg9MCxlLnNpYmxpbmc9bnVsbCxlfWZ1bmN0aW9uIGEobix0LHIpe3JldHVybihuLmluZGV4PXIsZSk/bnVsbCE9PShyPW4uYWx0ZXJuYXRlKT8ocj1yLmluZGV4KTx0PyhuLmZsYWdzfD0weDQwMDAwMDIsdCk6cjoobi5mbGFnc3w9MHg0MDAwMDAyLHQpOihuLmZsYWdzfD0xMDQ4NTc2LHQpfWZ1bmN0aW9uIGkobil7cmV0dXJuIGUmJm51bGw9PT1uLmFsdGVybmF0ZSYmKG4uZmxhZ3N8PTB4NDAwMDAwMiksbn1mdW5jdGlvbiBzKGUsbix0LHIpe3JldHVybiBudWxsPT09bnx8NiE9PW4udGFnPyhuPXJpKHQsZS5tb2RlLHIpKS5yZXR1cm49ZToobj1vKG4sdCkpLnJldHVybj1lLG59ZnVuY3Rpb24gYyhlLG4sdCxyKXt2YXIgYT10LnR5cGU7cmV0dXJuIGE9PT1tP2QoZSxuLHQucHJvcHMuY2hpbGRyZW4scix0LmtleSk6KG51bGwhPT1uJiYobi5lbGVtZW50VHlwZT09PWF8fFwib2JqZWN0XCI9PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PU8mJm92KGEpPT09bi50eXBlKT9vZyhuPW8obix0LnByb3BzKSx0KTpvZyhuPXJvKHQudHlwZSx0LmtleSx0LnByb3BzLG51bGwsZS5tb2RlLHIpLHQpLG4ucmV0dXJuPWUsbil9ZnVuY3Rpb24gdShlLG4sdCxyKXtyZXR1cm4gbnVsbD09PW58fDQhPT1uLnRhZ3x8bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PXQuY29udGFpbmVySW5mb3x8bi5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT10LmltcGxlbWVudGF0aW9uPyhuPXJzKHQsZS5tb2RlLHIpKS5yZXR1cm49ZToobj1vKG4sdC5jaGlsZHJlbnx8W10pKS5yZXR1cm49ZSxufWZ1bmN0aW9uIGQoZSxuLHQscixhKXtyZXR1cm4gbnVsbD09PW58fDchPT1uLnRhZz8obj1yYSh0LGUubW9kZSxyLGEpKS5yZXR1cm49ZToobj1vKG4sdCkpLnJldHVybj1lLG59ZnVuY3Rpb24gZihlLG4sdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4mJlwiXCIhPT1ufHxcIm51bWJlclwiPT10eXBlb2Ygbnx8XCJiaWdpbnRcIj09dHlwZW9mIG4pcmV0dXJuKG49cmkoXCJcIituLGUubW9kZSx0KSkucmV0dXJuPWUsbjtpZihcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4pe3N3aXRjaChuLiQkdHlwZW9mKXtjYXNlIGg6cmV0dXJuIG9nKHQ9cm8obi50eXBlLG4ua2V5LG4ucHJvcHMsbnVsbCxlLm1vZGUsdCksbiksdC5yZXR1cm49ZSx0O2Nhc2UgZzpyZXR1cm4obj1ycyhuLGUubW9kZSx0KSkucmV0dXJuPWUsbjtjYXNlIE86cmV0dXJuIGYoZSxuPSgwLG4uX2luaXQpKG4uX3BheWxvYWQpLHQpfWlmKHoobil8fF8obikpcmV0dXJuKG49cmEobixlLm1vZGUsdCxudWxsKSkucmV0dXJuPWUsbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnRoZW4pcmV0dXJuIGYoZSxvaChuKSx0KTtpZihuLiQkdHlwZW9mPT09eClyZXR1cm4gZihlLHJYKGUsbiksdCk7b20oZSxuKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBwKGUsbix0LHIpe3ZhciBvPW51bGwhPT1uP24ua2V5Om51bGw7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiXCIhPT10fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJiaWdpbnRcIj09dHlwZW9mIHQpcmV0dXJuIG51bGwhPT1vP251bGw6cyhlLG4sXCJcIit0LHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dCl7c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgaDpyZXR1cm4gdC5rZXk9PT1vP2MoZSxuLHQscik6bnVsbDtjYXNlIGc6cmV0dXJuIHQua2V5PT09bz91KGUsbix0LHIpOm51bGw7Y2FzZSBPOnJldHVybiBwKGUsbix0PShvPXQuX2luaXQpKHQuX3BheWxvYWQpLHIpfWlmKHoodCl8fF8odCkpcmV0dXJuIG51bGwhPT1vP251bGw6ZChlLG4sdCxyLG51bGwpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQudGhlbilyZXR1cm4gcChlLG4sb2godCkscik7aWYodC4kJHR5cGVvZj09PXgpcmV0dXJuIHAoZSxuLHJYKGUsdCkscik7b20oZSx0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB2KGUsbix0LHIsbyl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHImJlwiXCIhPT1yfHxcIm51bWJlclwiPT10eXBlb2Ygcnx8XCJiaWdpbnRcIj09dHlwZW9mIHIpcmV0dXJuIHMobixlPWUuZ2V0KHQpfHxudWxsLFwiXCIrcixvKTtpZihcIm9iamVjdFwiPT10eXBlb2YgciYmbnVsbCE9PXIpe3N3aXRjaChyLiQkdHlwZW9mKXtjYXNlIGg6cmV0dXJuIGMobixlPWUuZ2V0KG51bGw9PT1yLmtleT90OnIua2V5KXx8bnVsbCxyLG8pO2Nhc2UgZzpyZXR1cm4gdShuLGU9ZS5nZXQobnVsbD09PXIua2V5P3Q6ci5rZXkpfHxudWxsLHIsbyk7Y2FzZSBPOnJldHVybiB2KGUsbix0LHI9KDAsci5faW5pdCkoci5fcGF5bG9hZCksbyl9aWYoeihyKXx8XyhyKSlyZXR1cm4gZChuLGU9ZS5nZXQodCl8fG51bGwscixvLG51bGwpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIudGhlbilyZXR1cm4gdihlLG4sdCxvaChyKSxvKTtpZihyLiQkdHlwZW9mPT09eClyZXR1cm4gdihlLG4sdCxyWChuLHIpLG8pO29tKG4scil9cmV0dXJuIG51bGx9cmV0dXJuIGZ1bmN0aW9uKHMsYyx1LGQpe3RyeXtvcD0wO3ZhciBiPWZ1bmN0aW9uIHMoYyx1LGQsYil7aWYoXCJvYmplY3RcIj09dHlwZW9mIGQmJm51bGwhPT1kJiZkLnR5cGU9PT1tJiZudWxsPT09ZC5rZXkmJihkPWQucHJvcHMuY2hpbGRyZW4pLFwib2JqZWN0XCI9PXR5cGVvZiBkJiZudWxsIT09ZCl7c3dpdGNoKGQuJCR0eXBlb2Ype2Nhc2UgaDplOntmb3IodmFyIHk9ZC5rZXk7bnVsbCE9PXU7KXtpZih1LmtleT09PXkpe2lmKCh5PWQudHlwZSk9PT1tKXtpZig3PT09dS50YWcpe3QoYyx1LnNpYmxpbmcpLChiPW8odSxkLnByb3BzLmNoaWxkcmVuKSkucmV0dXJuPWMsYz1iO2JyZWFrIGV9fWVsc2UgaWYodS5lbGVtZW50VHlwZT09PXl8fFwib2JqZWN0XCI9PXR5cGVvZiB5JiZudWxsIT09eSYmeS4kJHR5cGVvZj09PU8mJm92KHkpPT09dS50eXBlKXt0KGMsdS5zaWJsaW5nKSxvZyhiPW8odSxkLnByb3BzKSxkKSxiLnJldHVybj1jLGM9YjticmVhayBlfXQoYyx1KTticmVha31uKGMsdSksdT11LnNpYmxpbmd9ZC50eXBlPT09bT8oYj1yYShkLnByb3BzLmNoaWxkcmVuLGMubW9kZSxiLGQua2V5KSkucmV0dXJuPWM6KG9nKGI9cm8oZC50eXBlLGQua2V5LGQucHJvcHMsbnVsbCxjLm1vZGUsYiksZCksYi5yZXR1cm49YyksYz1ifXJldHVybiBpKGMpO2Nhc2UgZzplOntmb3IoeT1kLmtleTtudWxsIT09dTspe2lmKHUua2V5PT09eSlpZig0PT09dS50YWcmJnUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1kLmNvbnRhaW5lckluZm8mJnUuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09ZC5pbXBsZW1lbnRhdGlvbil7dChjLHUuc2libGluZyksKGI9byh1LGQuY2hpbGRyZW58fFtdKSkucmV0dXJuPWMsYz1iO2JyZWFrIGV9ZWxzZXt0KGMsdSk7YnJlYWt9bihjLHUpLHU9dS5zaWJsaW5nfShiPXJzKGQsYy5tb2RlLGIpKS5yZXR1cm49YyxjPWJ9cmV0dXJuIGkoYyk7Y2FzZSBPOnJldHVybiBzKGMsdSxkPSh5PWQuX2luaXQpKGQuX3BheWxvYWQpLGIpfWlmKHooZCkpcmV0dXJuIGZ1bmN0aW9uKG8saSxsLHMpe2Zvcih2YXIgYz1udWxsLHU9bnVsbCxkPWksaD1pPTAsZz1udWxsO251bGwhPT1kJiZoPGwubGVuZ3RoO2grKyl7ZC5pbmRleD5oPyhnPWQsZD1udWxsKTpnPWQuc2libGluZzt2YXIgbT1wKG8sZCxsW2hdLHMpO2lmKG51bGw9PT1tKXtudWxsPT09ZCYmKGQ9Zyk7YnJlYWt9ZSYmZCYmbnVsbD09PW0uYWx0ZXJuYXRlJiZuKG8sZCksaT1hKG0saSxoKSxudWxsPT09dT9jPW06dS5zaWJsaW5nPW0sdT1tLGQ9Z31pZihoPT09bC5sZW5ndGgpcmV0dXJuIHQobyxkKSxyUyYmcngobyxoKSxjO2lmKG51bGw9PT1kKXtmb3IoO2g8bC5sZW5ndGg7aCsrKW51bGwhPT0oZD1mKG8sbFtoXSxzKSkmJihpPWEoZCxpLGgpLG51bGw9PT11P2M9ZDp1LnNpYmxpbmc9ZCx1PWQpO3JldHVybiByUyYmcngobyxoKSxjfWZvcihkPXIoZCk7aDxsLmxlbmd0aDtoKyspbnVsbCE9PShnPXYoZCxvLGgsbFtoXSxzKSkmJihlJiZudWxsIT09Zy5hbHRlcm5hdGUmJmQuZGVsZXRlKG51bGw9PT1nLmtleT9oOmcua2V5KSxpPWEoZyxpLGgpLG51bGw9PT11P2M9Zzp1LnNpYmxpbmc9Zyx1PWcpO3JldHVybiBlJiZkLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIG4obyxlKX0pLHJTJiZyeChvLGgpLGN9KGMsdSxkLGIpO2lmKF8oZCkpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mKHk9XyhkKSkpdGhyb3cgRXJyb3IobCgxNTApKTtyZXR1cm4gZnVuY3Rpb24obyxpLHMsYyl7aWYobnVsbD09cyl0aHJvdyBFcnJvcihsKDE1MSkpO2Zvcih2YXIgdT1udWxsLGQ9bnVsbCxoPWksZz1pPTAsbT1udWxsLGI9cy5uZXh0KCk7bnVsbCE9PWgmJiFiLmRvbmU7ZysrLGI9cy5uZXh0KCkpe2guaW5kZXg+Zz8obT1oLGg9bnVsbCk6bT1oLnNpYmxpbmc7dmFyIHk9cChvLGgsYi52YWx1ZSxjKTtpZihudWxsPT09eSl7bnVsbD09PWgmJihoPW0pO2JyZWFrfWUmJmgmJm51bGw9PT15LmFsdGVybmF0ZSYmbihvLGgpLGk9YSh5LGksZyksbnVsbD09PWQ/dT15OmQuc2libGluZz15LGQ9eSxoPW19aWYoYi5kb25lKXJldHVybiB0KG8saCksclMmJnJ4KG8sZyksdTtpZihudWxsPT09aCl7Zm9yKDshYi5kb25lO2crKyxiPXMubmV4dCgpKW51bGwhPT0oYj1mKG8sYi52YWx1ZSxjKSkmJihpPWEoYixpLGcpLG51bGw9PT1kP3U9YjpkLnNpYmxpbmc9YixkPWIpO3JldHVybiByUyYmcngobyxnKSx1fWZvcihoPXIoaCk7IWIuZG9uZTtnKyssYj1zLm5leHQoKSludWxsIT09KGI9dihoLG8sZyxiLnZhbHVlLGMpKSYmKGUmJm51bGwhPT1iLmFsdGVybmF0ZSYmaC5kZWxldGUobnVsbD09PWIua2V5P2c6Yi5rZXkpLGk9YShiLGksZyksbnVsbD09PWQ/dT1iOmQuc2libGluZz1iLGQ9Yik7cmV0dXJuIGUmJmguZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbihvLGUpfSksclMmJnJ4KG8sZyksdX0oYyx1LGQ9eS5jYWxsKGQpLGIpfWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGQudGhlbilyZXR1cm4gcyhjLHUsb2goZCksYik7aWYoZC4kJHR5cGVvZj09PXgpcmV0dXJuIHMoYyx1LHJYKGMsZCksYik7b20oYyxkKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZCYmXCJcIiE9PWR8fFwibnVtYmVyXCI9PXR5cGVvZiBkfHxcImJpZ2ludFwiPT10eXBlb2YgZD8oZD1cIlwiK2QsbnVsbCE9PXUmJjY9PT11LnRhZz8odChjLHUuc2libGluZyksKGI9byh1LGQpKS5yZXR1cm49Yyk6KHQoYyx1KSwoYj1yaShkLGMubW9kZSxiKSkucmV0dXJuPWMpLGkoYz1iKSk6dChjLHUpfShzLGMsdSxkKTtyZXR1cm4gb2Y9bnVsbCxifWNhdGNoKGUpe2lmKGU9PT1vcnx8ZT09PW9hKXRocm93IGU7dmFyIHk9cmUoMjksZSxudWxsLHMubW9kZSk7cmV0dXJuIHkubGFuZXM9ZCx5LnJldHVybj1zLHl9ZmluYWxseXt9fX12YXIgb3k9b2IoITApLG94PW9iKCExKSxvdz0hMTtmdW5jdGlvbiBvaihlKXtlLnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6ZS5tZW1vaXplZFN0YXRlLGZpcnN0QmFzZVVwZGF0ZTpudWxsLGxhc3RCYXNlVXBkYXRlOm51bGwsc2hhcmVkOntwZW5kaW5nOm51bGwsbGFuZXM6MCxoaWRkZW5DYWxsYmFja3M6bnVsbH0sY2FsbGJhY2tzOm51bGx9fWZ1bmN0aW9uIG9rKGUsbil7ZT1lLnVwZGF0ZVF1ZXVlLG4udXBkYXRlUXVldWU9PT1lJiYobi51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTplLmZpcnN0QmFzZVVwZGF0ZSxsYXN0QmFzZVVwZGF0ZTplLmxhc3RCYXNlVXBkYXRlLHNoYXJlZDplLnNoYXJlZCxjYWxsYmFja3M6bnVsbH0pfWZ1bmN0aW9uIG9BKGUpe3JldHVybntsYW5lOmUsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiBvTyhlLG4sdCl7dmFyIHI9ZS51cGRhdGVRdWV1ZTtpZihudWxsPT09cilyZXR1cm4gbnVsbDtpZihyPXIuc2hhcmVkLDAhPSgyJmxSKSl7dmFyIG89ci5wZW5kaW5nO3JldHVybiBudWxsPT09bz9uLm5leHQ9bjoobi5uZXh0PW8ubmV4dCxvLm5leHQ9biksci5wZW5kaW5nPW4sbj10OShlKSx0NihlLG51bGwsdCksbn1yZXR1cm4gdDQoZSxyLG4sdCksdDkoZSl9ZnVuY3Rpb24gb0MoZSxuLHQpe2lmKG51bGwhPT0obj1uLnVwZGF0ZVF1ZXVlKSYmKG49bi5zaGFyZWQsMCE9KDQxOTQwNDgmdCkpKXt2YXIgcj1uLmxhbmVzO3ImPWUucGVuZGluZ0xhbmVzLHR8PXIsbi5sYW5lcz10LGVFKGUsdCl9fWZ1bmN0aW9uIG9TKGUsbil7dmFyIHQ9ZS51cGRhdGVRdWV1ZSxyPWUuYWx0ZXJuYXRlO2lmKG51bGwhPT1yJiZ0PT09KHI9ci51cGRhdGVRdWV1ZSkpe3ZhciBvPW51bGwsYT1udWxsO2lmKG51bGwhPT0odD10LmZpcnN0QmFzZVVwZGF0ZSkpe2Rve3ZhciBpPXtsYW5lOnQubGFuZSx0YWc6dC50YWcscGF5bG9hZDp0LnBheWxvYWQsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9O251bGw9PT1hP289YT1pOmE9YS5uZXh0PWksdD10Lm5leHR9d2hpbGUobnVsbCE9PXQpO251bGw9PT1hP289YT1uOmE9YS5uZXh0PW59ZWxzZSBvPWE9bjt0PXtiYXNlU3RhdGU6ci5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm8sbGFzdEJhc2VVcGRhdGU6YSxzaGFyZWQ6ci5zaGFyZWQsY2FsbGJhY2tzOnIuY2FsbGJhY2tzfSxlLnVwZGF0ZVF1ZXVlPXQ7cmV0dXJufW51bGw9PT0oZT10Lmxhc3RCYXNlVXBkYXRlKT90LmZpcnN0QmFzZVVwZGF0ZT1uOmUubmV4dD1uLHQubGFzdEJhc2VVcGRhdGU9bn12YXIgb0U9ITE7ZnVuY3Rpb24gb18oKXtpZihvRSl7dmFyIGU9cjY7aWYobnVsbCE9PWUpdGhyb3cgZX19ZnVuY3Rpb24gb1AoZSxuLHQscil7b0U9ITE7dmFyIG89ZS51cGRhdGVRdWV1ZTtvdz0hMTt2YXIgYT1vLmZpcnN0QmFzZVVwZGF0ZSxpPW8ubGFzdEJhc2VVcGRhdGUsbD1vLnNoYXJlZC5wZW5kaW5nO2lmKG51bGwhPT1sKXtvLnNoYXJlZC5wZW5kaW5nPW51bGw7dmFyIHM9bCxjPXMubmV4dDtzLm5leHQ9bnVsbCxudWxsPT09aT9hPWM6aS5uZXh0PWMsaT1zO3ZhciB1PWUuYWx0ZXJuYXRlO251bGwhPT11JiYobD0odT11LnVwZGF0ZVF1ZXVlKS5sYXN0QmFzZVVwZGF0ZSkhPT1pJiYobnVsbD09PWw/dS5maXJzdEJhc2VVcGRhdGU9YzpsLm5leHQ9Yyx1Lmxhc3RCYXNlVXBkYXRlPXMpfWlmKG51bGwhPT1hKXt2YXIgZD1vLmJhc2VTdGF0ZTtmb3IoaT0wLHU9Yz1zPW51bGwsbD1hOzspe3ZhciBwPS0weDIwMDAwMDAxJmwubGFuZSxoPXAhPT1sLmxhbmU7aWYoaD8obEImcCk9PT1wOihyJnApPT09cCl7MCE9PXAmJnA9PT1yMyYmKG9FPSEwKSxudWxsIT09dSYmKHU9dS5uZXh0PXtsYW5lOjAsdGFnOmwudGFnLHBheWxvYWQ6bC5wYXlsb2FkLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfSk7ZTp7dmFyIGc9ZSxtPWw7c3dpdGNoKHA9bixtLnRhZyl7Y2FzZSAxOmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mKGc9bS5wYXlsb2FkKSl7ZD1nLmNhbGwodCxkLHApO2JyZWFrIGV9ZD1nO2JyZWFrIGU7Y2FzZSAzOmcuZmxhZ3M9LTY1NTM3JmcuZmxhZ3N8MTI4O2Nhc2UgMDppZihudWxsPT0ocD1cImZ1bmN0aW9uXCI9PXR5cGVvZihnPW0ucGF5bG9hZCk/Zy5jYWxsKHQsZCxwKTpnKSlicmVhayBlO2Q9Zih7fSxkLHApO2JyZWFrIGU7Y2FzZSAyOm93PSEwfX1udWxsIT09KHA9bC5jYWxsYmFjaykmJihlLmZsYWdzfD02NCxoJiYoZS5mbGFnc3w9ODE5MiksbnVsbD09PShoPW8uY2FsbGJhY2tzKT9vLmNhbGxiYWNrcz1bcF06aC5wdXNoKHApKX1lbHNlIGg9e2xhbmU6cCx0YWc6bC50YWcscGF5bG9hZDpsLnBheWxvYWQsY2FsbGJhY2s6bC5jYWxsYmFjayxuZXh0Om51bGx9LG51bGw9PT11PyhjPXU9aCxzPWQpOnU9dS5uZXh0PWgsaXw9cDtpZihudWxsPT09KGw9bC5uZXh0KSlpZihudWxsPT09KGw9by5zaGFyZWQucGVuZGluZykpYnJlYWs7ZWxzZSBsPShoPWwpLm5leHQsaC5uZXh0PW51bGwsby5sYXN0QmFzZVVwZGF0ZT1oLG8uc2hhcmVkLnBlbmRpbmc9bnVsbH1udWxsPT09dSYmKHM9ZCksby5iYXNlU3RhdGU9cyxvLmZpcnN0QmFzZVVwZGF0ZT1jLG8ubGFzdEJhc2VVcGRhdGU9dSxudWxsPT09YSYmKG8uc2hhcmVkLmxhbmVzPTApLGxXfD1pLGUubGFuZXM9aSxlLm1lbW9pemVkU3RhdGU9ZH19ZnVuY3Rpb24gb3ooZSxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IEVycm9yKGwoMTkxLGUpKTtlLmNhbGwobil9ZnVuY3Rpb24gb0woZSxuKXt2YXIgdD1lLmNhbGxiYWNrcztpZihudWxsIT09dClmb3IoZS5jYWxsYmFja3M9bnVsbCxlPTA7ZTx0Lmxlbmd0aDtlKyspb3oodFtlXSxuKX12YXIgb1Q9QihudWxsKSxvUj1CKDApO2Z1bmN0aW9uIG9OKGUsbil7SShvUixlPWxWKSxJKG9ULG4pLGxWPWV8bi5iYXNlTGFuZXN9ZnVuY3Rpb24gb0QoKXtJKG9SLGxWKSxJKG9ULG9ULmN1cnJlbnQpfWZ1bmN0aW9uIG9CKCl7bFY9b1IuY3VycmVudCxNKG9UKSxNKG9SKX12YXIgb009QihudWxsKSxvST1udWxsO2Z1bmN0aW9uIG9IKGUpe3ZhciBuPWUuYWx0ZXJuYXRlO0kob1csMSZvVy5jdXJyZW50KSxJKG9NLGUpLG51bGw9PT1vSSYmKG51bGw9PT1ufHxudWxsIT09b1QuY3VycmVudD9vST1lOm51bGwhPT1uLm1lbW9pemVkU3RhdGUmJihvST1lKSl9ZnVuY3Rpb24gb0YoZSl7SShvVyxvVy5jdXJyZW50KSxJKG9NLGUpLG51bGw9PT1vSSYmKG9JPWUpfWZ1bmN0aW9uIG9VKGUpezIyPT09ZS50YWc/KEkob1csb1cuY3VycmVudCksSShvTSxlKSxudWxsPT09b0kmJihvST1lKSk6b1YoZSl9ZnVuY3Rpb24gb1YoKXtJKG9XLG9XLmN1cnJlbnQpLEkob00sb00uY3VycmVudCl9ZnVuY3Rpb24gb3EoZSl7TShvTSksb0k9PT1lJiYob0k9bnVsbCksTShvVyl9dmFyIG9XPUIoMCk7ZnVuY3Rpb24gbyQoZSl7Zm9yKHZhciBuPWU7bnVsbCE9PW47KXtpZigxMz09PW4udGFnKXt2YXIgdD1uLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PXQmJihudWxsPT09KHQ9dC5kZWh5ZHJhdGVkKXx8Y1ModCl8fGNFKHQpKSlyZXR1cm4gbn1lbHNlIGlmKDE5PT09bi50YWcmJihcImZvcndhcmRzXCI9PT1uLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXJ8fFwiYmFja3dhcmRzXCI9PT1uLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXJ8fFwidW5zdGFibGVfbGVnYWN5LWJhY2t3YXJkc1wiPT09bi5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyfHxcInRvZ2V0aGVyXCI9PT1uLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIpKXtpZigwIT0oMTI4Jm4uZmxhZ3MpKXJldHVybiBufWVsc2UgaWYobnVsbCE9PW4uY2hpbGQpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT1lKWJyZWFrO2Zvcig7bnVsbD09PW4uc2libGluZzspe2lmKG51bGw9PT1uLnJldHVybnx8bi5yZXR1cm49PT1lKXJldHVybiBudWxsO249bi5yZXR1cm59bi5zaWJsaW5nLnJldHVybj1uLnJldHVybixuPW4uc2libGluZ31yZXR1cm4gbnVsbH12YXIgb1o9MCxvWT1udWxsLG9YPW51bGwsb0s9bnVsbCxvUT0hMSxvRz0hMSxvSj0hMSxvMD0wLG8xPTAsbzI9bnVsbCxvND0wO2Z1bmN0aW9uIG81KCl7dGhyb3cgRXJyb3IobCgzMjEpKX1mdW5jdGlvbiBvMyhlLG4pe2lmKG51bGw9PT1uKXJldHVybiExO2Zvcih2YXIgdD0wO3Q8bi5sZW5ndGgmJnQ8ZS5sZW5ndGg7dCsrKWlmKCF0TyhlW3RdLG5bdF0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG82KGUsbix0LHIsbyxhKXtyZXR1cm4gb1o9YSxvWT1uLG4ubWVtb2l6ZWRTdGF0ZT1udWxsLG4udXBkYXRlUXVldWU9bnVsbCxuLmxhbmVzPTAsTC5IPW51bGw9PT1lfHxudWxsPT09ZS5tZW1vaXplZFN0YXRlP2l0OmlyLG9KPSExLGE9dChyLG8pLG9KPSExLG9HJiYoYT1vOChuLHQscixvKSksbzkoZSksYX1mdW5jdGlvbiBvOShlKXtMLkg9aWU7dmFyIG49bnVsbCE9PW9YJiZudWxsIT09b1gubmV4dDtpZihvWj0wLG9LPW9YPW9ZPW51bGwsb1E9ITEsbzE9MCxvMj1udWxsLG4pdGhyb3cgRXJyb3IobCgzMDApKTtudWxsPT09ZXx8aXh8fG51bGwhPT0oZT1lLmRlcGVuZGVuY2llcykmJnIkKGUpJiYoaXg9ITApfWZ1bmN0aW9uIG84KGUsbix0LHIpe29ZPWU7dmFyIG89MDtkb3tpZihvRyYmKG8yPW51bGwpLG8xPTAsb0c9ITEsMjU8PW8pdGhyb3cgRXJyb3IobCgzMDEpKTtpZihvKz0xLG9LPW9YPW51bGwsbnVsbCE9ZS51cGRhdGVRdWV1ZSl7dmFyIGE9ZS51cGRhdGVRdWV1ZTthLmxhc3RFZmZlY3Q9bnVsbCxhLmV2ZW50cz1udWxsLGEuc3RvcmVzPW51bGwsbnVsbCE9YS5tZW1vQ2FjaGUmJihhLm1lbW9DYWNoZS5pbmRleD0wKX1MLkg9aW8sYT1uKHQscil9d2hpbGUob0cpO3JldHVybiBhfWZ1bmN0aW9uIG83KCl7dmFyIGU9TC5ILG49ZS51c2VTdGF0ZSgpWzBdO3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4udGhlbj9haShuKTpuLGU9ZS51c2VTdGF0ZSgpWzBdLChudWxsIT09b1g/b1gubWVtb2l6ZWRTdGF0ZTpudWxsKSE9PWUmJihvWS5mbGFnc3w9MTAyNCksbn1mdW5jdGlvbiBhZSgpe3ZhciBlPTAhPT1vMDtyZXR1cm4gbzA9MCxlfWZ1bmN0aW9uIGFuKGUsbix0KXtuLnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsbi5mbGFncyY9LTIwNTMsZS5sYW5lcyY9fnR9ZnVuY3Rpb24gYXQoZSl7aWYob1Epe2ZvcihlPWUubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZTspe3ZhciBuPWUucXVldWU7bnVsbCE9PW4mJihuLnBlbmRpbmc9bnVsbCksZT1lLm5leHR9b1E9ITF9b1o9MCxvSz1vWD1vWT1udWxsLG9HPSExLG8xPW8wPTAsbzI9bnVsbH1mdW5jdGlvbiBhcigpe3ZhciBlPXttZW1vaXplZFN0YXRlOm51bGwsYmFzZVN0YXRlOm51bGwsYmFzZVF1ZXVlOm51bGwscXVldWU6bnVsbCxuZXh0Om51bGx9O3JldHVybiBudWxsPT09b0s/b1kubWVtb2l6ZWRTdGF0ZT1vSz1lOm9LPW9LLm5leHQ9ZSxvS31mdW5jdGlvbiBhbygpe2lmKG51bGw9PT1vWCl7dmFyIGU9b1kuYWx0ZXJuYXRlO2U9bnVsbCE9PWU/ZS5tZW1vaXplZFN0YXRlOm51bGx9ZWxzZSBlPW9YLm5leHQ7dmFyIG49bnVsbD09PW9LP29ZLm1lbW9pemVkU3RhdGU6b0submV4dDtpZihudWxsIT09bilvSz1uLG9YPWU7ZWxzZXtpZihudWxsPT09ZSl7aWYobnVsbD09PW9ZLmFsdGVybmF0ZSl0aHJvdyBFcnJvcihsKDQ2NykpO3Rocm93IEVycm9yKGwoMzEwKSl9ZT17bWVtb2l6ZWRTdGF0ZToob1g9ZSkubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6b1guYmFzZVN0YXRlLGJhc2VRdWV1ZTpvWC5iYXNlUXVldWUscXVldWU6b1gucXVldWUsbmV4dDpudWxsfSxudWxsPT09b0s/b1kubWVtb2l6ZWRTdGF0ZT1vSz1lOm9LPW9LLm5leHQ9ZX1yZXR1cm4gb0t9ZnVuY3Rpb24gYWEoKXtyZXR1cm57bGFzdEVmZmVjdDpudWxsLGV2ZW50czpudWxsLHN0b3JlczpudWxsLG1lbW9DYWNoZTpudWxsfX1mdW5jdGlvbiBhaShlKXt2YXIgbj1vMTtyZXR1cm4gbzErPTEsbnVsbD09PW8yJiYobzI9W10pLGU9b3MobzIsZSxuKSxuPW9ZLG51bGw9PT0obnVsbD09PW9LP24ubWVtb2l6ZWRTdGF0ZTpvSy5uZXh0KSYmKEwuSD1udWxsPT09KG49bi5hbHRlcm5hdGUpfHxudWxsPT09bi5tZW1vaXplZFN0YXRlP2l0OmlyKSxlfWZ1bmN0aW9uIGFsKGUpe2lmKG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVuKXJldHVybiBhaShlKTtpZihlLiQkdHlwZW9mPT09eClyZXR1cm4gclkoZSl9dGhyb3cgRXJyb3IobCg0MzgsU3RyaW5nKGUpKSl9ZnVuY3Rpb24gYXMoZSl7dmFyIG49bnVsbCx0PW9ZLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT10JiYobj10Lm1lbW9DYWNoZSksbnVsbD09bil7dmFyIHI9b1kuYWx0ZXJuYXRlO251bGwhPT1yJiZudWxsIT09KHI9ci51cGRhdGVRdWV1ZSkmJm51bGwhPShyPXIubWVtb0NhY2hlKSYmKG49e2RhdGE6ci5kYXRhLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgpfSksaW5kZXg6MH0pfWlmKG51bGw9PW4mJihuPXtkYXRhOltdLGluZGV4OjB9KSxudWxsPT09dCYmKHQ9YWEoKSxvWS51cGRhdGVRdWV1ZT10KSx0Lm1lbW9DYWNoZT1uLHZvaWQgMD09PSh0PW4uZGF0YVtuLmluZGV4XSkpZm9yKHQ9bi5kYXRhW24uaW5kZXhdPUFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09UztyZXR1cm4gbi5pbmRleCsrLHR9ZnVuY3Rpb24gYWMoZSxuKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24oZSk6bn1mdW5jdGlvbiBhdShlKXtyZXR1cm4gYWQoYW8oKSxvWCxlKX1mdW5jdGlvbiBhZChlLG4sdCl7dmFyIHI9ZS5xdWV1ZTtpZihudWxsPT09cil0aHJvdyBFcnJvcihsKDMxMSkpO3IubGFzdFJlbmRlcmVkUmVkdWNlcj10O3ZhciBvPWUuYmFzZVF1ZXVlLGE9ci5wZW5kaW5nO2lmKG51bGwhPT1hKXtpZihudWxsIT09byl7dmFyIGk9by5uZXh0O28ubmV4dD1hLm5leHQsYS5uZXh0PWl9bi5iYXNlUXVldWU9bz1hLHIucGVuZGluZz1udWxsfWlmKGE9ZS5iYXNlU3RhdGUsbnVsbD09PW8pZS5tZW1vaXplZFN0YXRlPWE7ZWxzZXtuPW8ubmV4dDt2YXIgcz1pPW51bGwsYz1udWxsLHU9bixkPSExO2Rve3ZhciBmPS0weDIwMDAwMDAxJnUubGFuZTtpZihmIT09dS5sYW5lPyhsQiZmKT09PWY6KG9aJmYpPT09Zil7dmFyIHA9dS5yZXZlcnRMYW5lO2lmKDA9PT1wKW51bGwhPT1jJiYoYz1jLm5leHQ9e2xhbmU6MCxyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjp1LmFjdGlvbixoYXNFYWdlclN0YXRlOnUuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOnUuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxmPT09cjMmJihkPSEwKTtlbHNlIGlmKChvWiZwKT09PXApe3U9dS5uZXh0LHA9PT1yMyYmKGQ9ITApO2NvbnRpbnVlfWVsc2UgZj17bGFuZTowLHJldmVydExhbmU6dS5yZXZlcnRMYW5lLGdlc3R1cmU6bnVsbCxhY3Rpb246dS5hY3Rpb24saGFzRWFnZXJTdGF0ZTp1Lmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTp1LmVhZ2VyU3RhdGUsbmV4dDpudWxsfSxudWxsPT09Yz8ocz1jPWYsaT1hKTpjPWMubmV4dD1mLG9ZLmxhbmVzfD1wLGxXfD1wO2Y9dS5hY3Rpb24sb0omJnQoYSxmKSxhPXUuaGFzRWFnZXJTdGF0ZT91LmVhZ2VyU3RhdGU6dChhLGYpfWVsc2UgcD17bGFuZTpmLHJldmVydExhbmU6dS5yZXZlcnRMYW5lLGdlc3R1cmU6dS5nZXN0dXJlLGFjdGlvbjp1LmFjdGlvbixoYXNFYWdlclN0YXRlOnUuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOnUuZWFnZXJTdGF0ZSxuZXh0Om51bGx9LG51bGw9PT1jPyhzPWM9cCxpPWEpOmM9Yy5uZXh0PXAsb1kubGFuZXN8PWYsbFd8PWY7dT11Lm5leHR9d2hpbGUobnVsbCE9PXUmJnUhPT1uKTtpZihudWxsPT09Yz9pPWE6Yy5uZXh0PXMsIXRPKGEsZS5tZW1vaXplZFN0YXRlKSYmKGl4PSEwLGQmJm51bGwhPT0odD1yNikpKXRocm93IHQ7ZS5tZW1vaXplZFN0YXRlPWEsZS5iYXNlU3RhdGU9aSxlLmJhc2VRdWV1ZT1jLHIubGFzdFJlbmRlcmVkU3RhdGU9YX1yZXR1cm4gbnVsbD09PW8mJihyLmxhbmVzPTApLFtlLm1lbW9pemVkU3RhdGUsci5kaXNwYXRjaF19ZnVuY3Rpb24gYWYoZSl7dmFyIG49YW8oKSx0PW4ucXVldWU7aWYobnVsbD09PXQpdGhyb3cgRXJyb3IobCgzMTEpKTt0Lmxhc3RSZW5kZXJlZFJlZHVjZXI9ZTt2YXIgcj10LmRpc3BhdGNoLG89dC5wZW5kaW5nLGE9bi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1vKXt0LnBlbmRpbmc9bnVsbDt2YXIgaT1vPW8ubmV4dDtkbyBhPWUoYSxpLmFjdGlvbiksaT1pLm5leHQ7d2hpbGUoaSE9PW8pO3RPKGEsbi5tZW1vaXplZFN0YXRlKXx8KGl4PSEwKSxuLm1lbW9pemVkU3RhdGU9YSxudWxsPT09bi5iYXNlUXVldWUmJihuLmJhc2VTdGF0ZT1hKSx0Lmxhc3RSZW5kZXJlZFN0YXRlPWF9cmV0dXJuW2Escl19ZnVuY3Rpb24gYXAoZSxuLHQpe3ZhciByPW9ZLG89YW8oKSxhPXJTO2lmKGEpe2lmKHZvaWQgMD09PXQpdGhyb3cgRXJyb3IobCg0MDcpKTt0PXQoKX1lbHNlIHQ9bigpO3ZhciBpPSF0Tygob1h8fG8pLm1lbW9pemVkU3RhdGUsdCk7aWYoaSYmKG8ubWVtb2l6ZWRTdGF0ZT10LGl4PSEwKSxvPW8ucXVldWUsYU0oYW0uYmluZChudWxsLHIsbyxlKSxbZV0pLG8uZ2V0U25hcHNob3QhPT1ufHxpfHxudWxsIT09b0smJjEmb0subWVtb2l6ZWRTdGF0ZS50YWcpe2lmKHIuZmxhZ3N8PTIwNDgsYVQoOSx7ZGVzdHJveTp2b2lkIDB9LGFnLmJpbmQobnVsbCxyLG8sdCxuKSxudWxsKSxudWxsPT09bE4pdGhyb3cgRXJyb3IobCgzNDkpKTthfHwwIT0oMTI0Jm9aKXx8YWgocixuLHQpfXJldHVybiB0fWZ1bmN0aW9uIGFoKGUsbix0KXtlLmZsYWdzfD0xNjM4NCxlPXtnZXRTbmFwc2hvdDpuLHZhbHVlOnR9LG51bGw9PT0obj1vWS51cGRhdGVRdWV1ZSk/KG49YWEoKSxvWS51cGRhdGVRdWV1ZT1uLG4uc3RvcmVzPVtlXSk6bnVsbD09PSh0PW4uc3RvcmVzKT9uLnN0b3Jlcz1bZV06dC5wdXNoKGUpfWZ1bmN0aW9uIGFnKGUsbix0LHIpe24udmFsdWU9dCxuLmdldFNuYXBzaG90PXIsYXYobikmJmFiKGUpfWZ1bmN0aW9uIGFtKGUsbix0KXtyZXR1cm4gdChmdW5jdGlvbigpe2F2KG4pJiZhYihlKX0pfWZ1bmN0aW9uIGF2KGUpe3ZhciBuPWUuZ2V0U25hcHNob3Q7ZT1lLnZhbHVlO3RyeXt2YXIgdD1uKCk7cmV0dXJuIXRPKGUsdCl9Y2F0Y2goZSl7cmV0dXJuITB9fWZ1bmN0aW9uIGFiKGUpe3ZhciBuPXQzKGUsMik7bnVsbCE9PW4mJnNvKG4sZSwyKX1mdW5jdGlvbiBheShlKXt2YXIgbj1hcigpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpe3ZhciB0PWU7aWYoZT10KCksb0ope2VoKCEwKTt0cnl7dCgpfWZpbmFsbHl7ZWgoITEpfX19cmV0dXJuIG4ubWVtb2l6ZWRTdGF0ZT1uLmJhc2VTdGF0ZT1lLG4ucXVldWU9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphYyxsYXN0UmVuZGVyZWRTdGF0ZTplfSxufWZ1bmN0aW9uIGF4KGUsbix0LHIpe3JldHVybiBlLmJhc2VTdGF0ZT10LGFkKGUsb1gsXCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOmFjKX1mdW5jdGlvbiBhdyhlLG4sdCxyLG8pe2lmKGE5KGUpKXRocm93IEVycm9yKGwoNDg1KSk7aWYobnVsbCE9PShlPW4uYWN0aW9uKSl7dmFyIGE9e3BheWxvYWQ6byxhY3Rpb246ZSxuZXh0Om51bGwsaXNUcmFuc2l0aW9uOiEwLHN0YXR1czpcInBlbmRpbmdcIix2YWx1ZTpudWxsLHJlYXNvbjpudWxsLGxpc3RlbmVyczpbXSx0aGVuOmZ1bmN0aW9uKGUpe2EubGlzdGVuZXJzLnB1c2goZSl9fTtudWxsIT09TC5UP3QoITApOmEuaXNUcmFuc2l0aW9uPSExLHIoYSksbnVsbD09PSh0PW4ucGVuZGluZyk/KGEubmV4dD1uLnBlbmRpbmc9YSxhaihuLGEpKTooYS5uZXh0PXQubmV4dCxuLnBlbmRpbmc9dC5uZXh0PWEpfX1mdW5jdGlvbiBhaihlLG4pe3ZhciB0PW4uYWN0aW9uLHI9bi5wYXlsb2FkLG89ZS5zdGF0ZTtpZihuLmlzVHJhbnNpdGlvbil7dmFyIGE9TC5ULGk9e307TC5UPWk7dHJ5e3ZhciBsPXQobyxyKSxzPUwuUztudWxsIT09cyYmcyhpLGwpLGFrKGUsbixsKX1jYXRjaCh0KXthTyhlLG4sdCl9ZmluYWxseXtudWxsIT09YSYmbnVsbCE9PWkudHlwZXMmJihhLnR5cGVzPWkudHlwZXMpLEwuVD1hfX1lbHNlIHRyeXthPXQobyxyKSxhayhlLG4sYSl9Y2F0Y2godCl7YU8oZSxuLHQpfX1mdW5jdGlvbiBhayhlLG4sdCl7bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRoZW4/dC50aGVuKGZ1bmN0aW9uKHQpe2FBKGUsbix0KX0sZnVuY3Rpb24odCl7cmV0dXJuIGFPKGUsbix0KX0pOmFBKGUsbix0KX1mdW5jdGlvbiBhQShlLG4sdCl7bi5zdGF0dXM9XCJmdWxmaWxsZWRcIixuLnZhbHVlPXQsYUMobiksZS5zdGF0ZT10LG51bGwhPT0obj1lLnBlbmRpbmcpJiYoKHQ9bi5uZXh0KT09PW4/ZS5wZW5kaW5nPW51bGw6KHQ9dC5uZXh0LG4ubmV4dD10LGFqKGUsdCkpKX1mdW5jdGlvbiBhTyhlLG4sdCl7dmFyIHI9ZS5wZW5kaW5nO2lmKGUucGVuZGluZz1udWxsLG51bGwhPT1yKXtyPXIubmV4dDtkbyBuLnN0YXR1cz1cInJlamVjdGVkXCIsbi5yZWFzb249dCxhQyhuKSxuPW4ubmV4dDt3aGlsZShuIT09cil9ZS5hY3Rpb249bnVsbH1mdW5jdGlvbiBhQyhlKXtlPWUubGlzdGVuZXJzO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKSgwLGVbbl0pKCl9ZnVuY3Rpb24gYVMoZSxuKXtyZXR1cm4gbn1mdW5jdGlvbiBhRShlLG4pe2lmKHJTKXt2YXIgdD1sTi5mb3JtU3RhdGU7aWYobnVsbCE9PXQpe2U6e3ZhciByPW9ZO2lmKHJTKXtpZihyQyl7bjp7Zm9yKHZhciBvPXJDLGE9cl87OCE9PW8ubm9kZVR5cGU7KWlmKCFhfHxudWxsPT09KG89Y18oby5uZXh0U2libGluZykpKXtvPW51bGw7YnJlYWsgbn1vPVwiRiFcIj09PShhPW8uZGF0YSl8fFwiRlwiPT09YT9vOm51bGx9aWYobyl7ckM9Y18oby5uZXh0U2libGluZykscj1cIkYhXCI9PT1vLmRhdGE7YnJlYWsgZX19cnoocil9cj0hMX1yJiYobj10WzBdKX19cmV0dXJuKHQ9YXIoKSkubWVtb2l6ZWRTdGF0ZT10LmJhc2VTdGF0ZT1uLHI9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphUyxsYXN0UmVuZGVyZWRTdGF0ZTpufSx0LnF1ZXVlPXIsdD1hNS5iaW5kKG51bGwsb1ksciksci5kaXNwYXRjaD10LHI9YXkoITEpLGE9YTYuYmluZChudWxsLG9ZLCExLHIucXVldWUpLHI9YXIoKSxvPXtzdGF0ZTpuLGRpc3BhdGNoOm51bGwsYWN0aW9uOmUscGVuZGluZzpudWxsfSxyLnF1ZXVlPW8sdD1hdy5iaW5kKG51bGwsb1ksbyxhLHQpLG8uZGlzcGF0Y2g9dCxyLm1lbW9pemVkU3RhdGU9ZSxbbix0LCExXX1mdW5jdGlvbiBhXyhlKXtyZXR1cm4gYVAoYW8oKSxvWCxlKX1mdW5jdGlvbiBhUChlLG4sdCl7aWYobj1hZChlLG4sYVMpWzBdLGU9YXUoYWMpWzBdLFwib2JqZWN0XCI9PXR5cGVvZiBuJiZudWxsIT09biYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuKXRyeXt2YXIgcj1haShuKX1jYXRjaChlKXtpZihlPT09b3IpdGhyb3cgb2E7dGhyb3cgZX1lbHNlIHI9bjt2YXIgbz0obj1hbygpKS5xdWV1ZSxhPW8uZGlzcGF0Y2g7cmV0dXJuIHQhPT1uLm1lbW9pemVkU3RhdGUmJihvWS5mbGFnc3w9MjA0OCxhVCg5LHtkZXN0cm95OnZvaWQgMH0sYXouYmluZChudWxsLG8sdCksbnVsbCkpLFtyLGEsZV19ZnVuY3Rpb24gYXooZSxuKXtlLmFjdGlvbj1ufWZ1bmN0aW9uIGFMKGUpe3ZhciBuPWFvKCksdD1vWDtpZihudWxsIT09dClyZXR1cm4gYVAobix0LGUpO2FvKCksbj1uLm1lbW9pemVkU3RhdGU7dmFyIHI9KHQ9YW8oKSkucXVldWUuZGlzcGF0Y2g7cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT1lLFtuLHIsITFdfWZ1bmN0aW9uIGFUKGUsbix0LHIpe3JldHVybiBlPXt0YWc6ZSxjcmVhdGU6dCxkZXBzOnIsaW5zdDpuLG5leHQ6bnVsbH0sbnVsbD09PShuPW9ZLnVwZGF0ZVF1ZXVlKSYmKG49YWEoKSxvWS51cGRhdGVRdWV1ZT1uKSxudWxsPT09KHQ9bi5sYXN0RWZmZWN0KT9uLmxhc3RFZmZlY3Q9ZS5uZXh0PWU6KHI9dC5uZXh0LHQubmV4dD1lLGUubmV4dD1yLG4ubGFzdEVmZmVjdD1lKSxlfWZ1bmN0aW9uIGFSKCl7cmV0dXJuIGFvKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBhTihlLG4sdCxyKXt2YXIgbz1hcigpO29ZLmZsYWdzfD1lLG8ubWVtb2l6ZWRTdGF0ZT1hVCgxfG4se2Rlc3Ryb3k6dm9pZCAwfSx0LHZvaWQgMD09PXI/bnVsbDpyKX1mdW5jdGlvbiBhRChlLG4sdCxyKXt2YXIgbz1hbygpO3I9dm9pZCAwPT09cj9udWxsOnI7dmFyIGE9by5tZW1vaXplZFN0YXRlLmluc3Q7bnVsbCE9PW9YJiZudWxsIT09ciYmbzMocixvWC5tZW1vaXplZFN0YXRlLmRlcHMpP28ubWVtb2l6ZWRTdGF0ZT1hVChuLGEsdCxyKToob1kuZmxhZ3N8PWUsby5tZW1vaXplZFN0YXRlPWFUKDF8bixhLHQscikpfWZ1bmN0aW9uIGFCKGUsbil7YU4oODM5MDY1Niw4LGUsbil9ZnVuY3Rpb24gYU0oZSxuKXthRCgyMDQ4LDgsZSxuKX1mdW5jdGlvbiBhSShlLG4pe3JldHVybiBhRCg0LDIsZSxuKX1mdW5jdGlvbiBhSChlLG4pe3JldHVybiBhRCg0LDQsZSxuKX1mdW5jdGlvbiBhRihlLG4pe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciB0PW4oZT1lKCkpO3JldHVybiBmdW5jdGlvbigpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dCgpOm4obnVsbCl9fWlmKG51bGwhPW4pcmV0dXJuIG4uY3VycmVudD1lPWUoKSxmdW5jdGlvbigpe24uY3VycmVudD1udWxsfX1mdW5jdGlvbiBhVShlLG4sdCl7dD1udWxsIT10P3QuY29uY2F0KFtlXSk6bnVsbCxhRCg0LDQsYUYuYmluZChudWxsLG4sZSksdCl9ZnVuY3Rpb24gYVYoKXt9ZnVuY3Rpb24gYXEoZSxuKXt2YXIgdD1hbygpO249dm9pZCAwPT09bj9udWxsOm47dmFyIHI9dC5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsIT09biYmbzMobixyWzFdKT9yWzBdOih0Lm1lbW9pemVkU3RhdGU9W2Usbl0sZSl9ZnVuY3Rpb24gYVcoZSxuKXt2YXIgdD1hbygpO249dm9pZCAwPT09bj9udWxsOm47dmFyIHI9dC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1uJiZvMyhuLHJbMV0pKXJldHVybiByWzBdO2lmKHI9ZSgpLG9KKXtlaCghMCk7dHJ5e2UoKX1maW5hbGx5e2VoKCExKX19cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT1bcixuXSxyfWZ1bmN0aW9uIGEkKGUsbix0KXtyZXR1cm4gdm9pZCAwPT09dHx8MCE9KDB4NDAwMDAwMDAmb1opP2UubWVtb2l6ZWRTdGF0ZT1uOihlLm1lbW9pemVkU3RhdGU9dCxlPXNyKCksb1kubGFuZXN8PWUsbFd8PWUsdCl9ZnVuY3Rpb24gYVooZSxuLHQscil7cmV0dXJuIHRPKHQsbik/dDpudWxsIT09b1QuY3VycmVudD8odE8oZT1hJChlLHQsciksbil8fChpeD0hMCksZSk6MD09KDQyJm9aKXx8MCE9KDB4NDAwMDAwMDAmb1opPyhpeD0hMCxlLm1lbW9pemVkU3RhdGU9dCk6KGU9c3IoKSxvWS5sYW5lc3w9ZSxsV3w9ZSxuKX1mdW5jdGlvbiBhWShlLG4sdCxyLG8pe3ZhciBhPVQucDtULnA9MCE9PWEmJjg+YT9hOjg7dmFyIGk9TC5ULGw9e307TC5UPWwsYTYoZSwhMSxuLHQpO3RyeXt2YXIgcz1vKCksYz1MLlM7aWYobnVsbCE9PWMmJmMobCxzKSxudWxsIT09cyYmXCJvYmplY3RcIj09dHlwZW9mIHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHMudGhlbil7dmFyIHUsZCxmPSh1PVtdLGQ9e3N0YXR1czpcInBlbmRpbmdcIix2YWx1ZTpudWxsLHJlYXNvbjpudWxsLHRoZW46ZnVuY3Rpb24oZSl7dS5wdXNoKGUpfX0scy50aGVuKGZ1bmN0aW9uKCl7ZC5zdGF0dXM9XCJmdWxmaWxsZWRcIixkLnZhbHVlPXI7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspKDAsdVtlXSkocil9LGZ1bmN0aW9uKGUpe2ZvcihkLnN0YXR1cz1cInJlamVjdGVkXCIsZC5yZWFzb249ZSxlPTA7ZTx1Lmxlbmd0aDtlKyspKDAsdVtlXSkodm9pZCAwKX0pLGQpO2EzKGUsbixmLHN0KGUpKX1lbHNlIGEzKGUsbixyLHN0KGUpKX1jYXRjaCh0KXthMyhlLG4se3RoZW46ZnVuY3Rpb24oKXt9LHN0YXR1czpcInJlamVjdGVkXCIscmVhc29uOnR9LHN0KCkpfWZpbmFsbHl7VC5wPWEsbnVsbCE9PWkmJm51bGwhPT1sLnR5cGVzJiYoaS50eXBlcz1sLnR5cGVzKSxMLlQ9aX19ZnVuY3Rpb24gYVgoKXt9ZnVuY3Rpb24gYUsoZSxuLHQscil7aWYoNSE9PWUudGFnKXRocm93IEVycm9yKGwoNDc2KSk7dmFyIG89YVEoZSkucXVldWU7YVkoZSxvLG4sUixudWxsPT09dD9hWDpmdW5jdGlvbigpe3JldHVybiBhRyhlKSx0KHIpfSl9ZnVuY3Rpb24gYVEoZSl7dmFyIG49ZS5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1uKXJldHVybiBuO3ZhciB0PXt9O3JldHVybihuPXttZW1vaXplZFN0YXRlOlIsYmFzZVN0YXRlOlIsYmFzZVF1ZXVlOm51bGwscXVldWU6e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphYyxsYXN0UmVuZGVyZWRTdGF0ZTpSfSxuZXh0Om51bGx9KS5uZXh0PXttZW1vaXplZFN0YXRlOnQsYmFzZVN0YXRlOnQsYmFzZVF1ZXVlOm51bGwscXVldWU6e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphYyxsYXN0UmVuZGVyZWRTdGF0ZTp0fSxuZXh0Om51bGx9LGUubWVtb2l6ZWRTdGF0ZT1uLG51bGwhPT0oZT1lLmFsdGVybmF0ZSkmJihlLm1lbW9pemVkU3RhdGU9biksbn1mdW5jdGlvbiBhRyhlKXt2YXIgbj1hUShlKTtudWxsPT09bi5uZXh0JiYobj1lLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlKSxhMyhlLG4ubmV4dC5xdWV1ZSx7fSxzdCgpKX1mdW5jdGlvbiBhSigpe3JldHVybiByWShjNil9ZnVuY3Rpb24gYTAoKXtyZXR1cm4gYW8oKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIGExKCl7cmV0dXJuIGFvKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBhMihlKXtmb3IodmFyIG49ZS5yZXR1cm47bnVsbCE9PW47KXtzd2l0Y2gobi50YWcpe2Nhc2UgMjQ6Y2FzZSAzOnZhciB0PXN0KCkscj1vTyhuLGU9b0EodCksdCk7bnVsbCE9PXImJihzbyhyLG4sdCksb0MocixuLHQpKSxuPXtjYWNoZTpyMSgpfSxlLnBheWxvYWQ9bjtyZXR1cm59bj1uLnJldHVybn19ZnVuY3Rpb24gYTQoZSxuLHQpe3ZhciByPXN0KCk7dD17bGFuZTpyLHJldmVydExhbmU6MCxnZXN0dXJlOm51bGwsYWN0aW9uOnQsaGFzRWFnZXJTdGF0ZTohMSxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfSxhOShlKT9hOChuLHQpOm51bGwhPT0odD10NShlLG4sdCxyKSkmJihzbyh0LGUsciksYTcodCxuLHIpKX1mdW5jdGlvbiBhNShlLG4sdCl7YTMoZSxuLHQsc3QoKSl9ZnVuY3Rpb24gYTMoZSxuLHQscil7dmFyIG89e2xhbmU6cixyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjp0LGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH07aWYoYTkoZSkpYTgobixvKTtlbHNle3ZhciBhPWUuYWx0ZXJuYXRlO2lmKDA9PT1lLmxhbmVzJiYobnVsbD09PWF8fDA9PT1hLmxhbmVzKSYmbnVsbCE9PShhPW4ubGFzdFJlbmRlcmVkUmVkdWNlcikpdHJ5e3ZhciBpPW4ubGFzdFJlbmRlcmVkU3RhdGUsbD1hKGksdCk7aWYoby5oYXNFYWdlclN0YXRlPSEwLG8uZWFnZXJTdGF0ZT1sLHRPKGwsaSkpcmV0dXJuIHQ0KGUsbixvLDApLG51bGw9PT1sTiYmdDIoKSwhMX1jYXRjaChlKXt9ZmluYWxseXt9aWYobnVsbCE9PSh0PXQ1KGUsbixvLHIpKSlyZXR1cm4gc28odCxlLHIpLGE3KHQsbixyKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBhNihlLG4sdCxyKXtpZihyPXtsYW5lOjIscmV2ZXJ0TGFuZTpzWCgpLGdlc3R1cmU6bnVsbCxhY3Rpb246cixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LGE5KGUpKXtpZihuKXRocm93IEVycm9yKGwoNDc5KSl9ZWxzZSBudWxsIT09KG49dDUoZSx0LHIsMikpJiZzbyhuLGUsMil9ZnVuY3Rpb24gYTkoZSl7dmFyIG49ZS5hbHRlcm5hdGU7cmV0dXJuIGU9PT1vWXx8bnVsbCE9PW4mJm49PT1vWX1mdW5jdGlvbiBhOChlLG4pe29HPW9RPSEwO3ZhciB0PWUucGVuZGluZztudWxsPT09dD9uLm5leHQ9bjoobi5uZXh0PXQubmV4dCx0Lm5leHQ9biksZS5wZW5kaW5nPW59ZnVuY3Rpb24gYTcoZSxuLHQpe2lmKDAhPSg0MTk0MDQ4JnQpKXt2YXIgcj1uLmxhbmVzO3ImPWUucGVuZGluZ0xhbmVzLG4ubGFuZXM9dHw9cixlRShlLHQpfX12YXIgaWU9e3JlYWRDb250ZXh0OnJZLHVzZTphbCx1c2VDYWxsYmFjazpvNSx1c2VDb250ZXh0Om81LHVzZUVmZmVjdDpvNSx1c2VJbXBlcmF0aXZlSGFuZGxlOm81LHVzZUxheW91dEVmZmVjdDpvNSx1c2VJbnNlcnRpb25FZmZlY3Q6bzUsdXNlTWVtbzpvNSx1c2VSZWR1Y2VyOm81LHVzZVJlZjpvNSx1c2VTdGF0ZTpvNSx1c2VEZWJ1Z1ZhbHVlOm81LHVzZURlZmVycmVkVmFsdWU6bzUsdXNlVHJhbnNpdGlvbjpvNSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpvNSx1c2VJZDpvNSx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czpvNSx1c2VGb3JtU3RhdGU6bzUsdXNlQWN0aW9uU3RhdGU6bzUsdXNlT3B0aW1pc3RpYzpvNSx1c2VNZW1vQ2FjaGU6bzUsdXNlQ2FjaGVSZWZyZXNoOm81fSxpdD17cmVhZENvbnRleHQ6clksdXNlOmFsLHVzZUNhbGxiYWNrOmZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyKCkubWVtb2l6ZWRTdGF0ZT1bZSx2b2lkIDA9PT1uP251bGw6bl0sZX0sdXNlQ29udGV4dDpyWSx1c2VFZmZlY3Q6YUIsdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihlLG4sdCl7dD1udWxsIT10P3QuY29uY2F0KFtlXSk6bnVsbCxhTig0MTk0MzA4LDQsYUYuYmluZChudWxsLG4sZSksdCl9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLG4pe3JldHVybiBhTig0MTk0MzA4LDQsZSxuKX0sdXNlSW5zZXJ0aW9uRWZmZWN0OmZ1bmN0aW9uKGUsbil7YU4oNCwyLGUsbil9LHVzZU1lbW86ZnVuY3Rpb24oZSxuKXt2YXIgdD1hcigpO249dm9pZCAwPT09bj9udWxsOm47dmFyIHI9ZSgpO2lmKG9KKXtlaCghMCk7dHJ5e2UoKX1maW5hbGx5e2VoKCExKX19cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT1bcixuXSxyfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGUsbix0KXt2YXIgcj1hcigpO2lmKHZvaWQgMCE9PXQpe3ZhciBvPXQobik7aWYob0ope2VoKCEwKTt0cnl7dChuKX1maW5hbGx5e2VoKCExKX19fWVsc2Ugbz1uO3JldHVybiByLm1lbW9pemVkU3RhdGU9ci5iYXNlU3RhdGU9byxyLnF1ZXVlPWU9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOm99LGU9ZS5kaXNwYXRjaD1hNC5iaW5kKG51bGwsb1ksZSksW3IubWVtb2l6ZWRTdGF0ZSxlXX0sdXNlUmVmOmZ1bmN0aW9uKGUpe3JldHVybiBhcigpLm1lbW9pemVkU3RhdGU9ZT17Y3VycmVudDplfX0sdXNlU3RhdGU6ZnVuY3Rpb24oZSl7dmFyIG49KGU9YXkoZSkpLnF1ZXVlLHQ9YTUuYmluZChudWxsLG9ZLG4pO3JldHVybiBuLmRpc3BhdGNoPXQsW2UubWVtb2l6ZWRTdGF0ZSx0XX0sdXNlRGVidWdWYWx1ZTphVix1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUsbil7cmV0dXJuIGEkKGFyKCksZSxuKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPWF5KCExKTtyZXR1cm4gZT1hWS5iaW5kKG51bGwsb1ksZS5xdWV1ZSwhMCwhMSksYXIoKS5tZW1vaXplZFN0YXRlPWUsWyExLGVdfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpmdW5jdGlvbihlLG4sdCl7dmFyIHI9b1ksbz1hcigpO2lmKHJTKXtpZih2b2lkIDA9PT10KXRocm93IEVycm9yKGwoNDA3KSk7dD10KCl9ZWxzZXtpZih0PW4oKSxudWxsPT09bE4pdGhyb3cgRXJyb3IobCgzNDkpKTswIT0oMTI0JmxCKXx8YWgocixuLHQpfW8ubWVtb2l6ZWRTdGF0ZT10O3ZhciBhPXt2YWx1ZTp0LGdldFNuYXBzaG90Om59O3JldHVybiBvLnF1ZXVlPWEsYUIoYW0uYmluZChudWxsLHIsYSxlKSxbZV0pLHIuZmxhZ3N8PTIwNDgsYVQoOSx7ZGVzdHJveTp2b2lkIDB9LGFnLmJpbmQobnVsbCxyLGEsdCxuKSxudWxsKSx0fSx1c2VJZDpmdW5jdGlvbigpe3ZhciBlPWFyKCksbj1sTi5pZGVudGlmaWVyUHJlZml4O2lmKHJTKXt2YXIgdD1yeSxyPXJiO249XCJfXCIrbitcIlJfXCIrKHQ9KHImfigxPDwzMi1lZyhyKS0xKSkudG9TdHJpbmcoMzIpK3QpLDA8KHQ9bzArKykmJihuKz1cIkhcIit0LnRvU3RyaW5nKDMyKSksbis9XCJfXCJ9ZWxzZSBuPVwiX1wiK24rXCJyX1wiKyh0PW80KyspLnRvU3RyaW5nKDMyKStcIl9cIjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPW59LHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOmFKLHVzZUZvcm1TdGF0ZTphRSx1c2VBY3Rpb25TdGF0ZTphRSx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGUpe3ZhciBuPWFyKCk7bi5tZW1vaXplZFN0YXRlPW4uYmFzZVN0YXRlPWU7dmFyIHQ9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpudWxsLGxhc3RSZW5kZXJlZFN0YXRlOm51bGx9O3JldHVybiBuLnF1ZXVlPXQsbj1hNi5iaW5kKG51bGwsb1ksITAsdCksdC5kaXNwYXRjaD1uLFtlLG5dfSx1c2VNZW1vQ2FjaGU6YXMsdXNlQ2FjaGVSZWZyZXNoOmZ1bmN0aW9uKCl7cmV0dXJuIGFyKCkubWVtb2l6ZWRTdGF0ZT1hMi5iaW5kKG51bGwsb1kpfX0saXI9e3JlYWRDb250ZXh0OnJZLHVzZTphbCx1c2VDYWxsYmFjazphcSx1c2VDb250ZXh0OnJZLHVzZUVmZmVjdDphTSx1c2VJbXBlcmF0aXZlSGFuZGxlOmFVLHVzZUluc2VydGlvbkVmZmVjdDphSSx1c2VMYXlvdXRFZmZlY3Q6YUgsdXNlTWVtbzphVyx1c2VSZWR1Y2VyOmF1LHVzZVJlZjphUix1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBhdShhYyl9LHVzZURlYnVnVmFsdWU6YVYsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLG4pe3JldHVybiBhWihhbygpLG9YLm1lbW9pemVkU3RhdGUsZSxuKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPWF1KGFjKVswXSxuPWFvKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bXCJib29sZWFuXCI9PXR5cGVvZiBlP2U6YWkoZSksbl19LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmFwLHVzZUlkOmEwLHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOmFKLHVzZUZvcm1TdGF0ZTphXyx1c2VBY3Rpb25TdGF0ZTphXyx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGUsbil7cmV0dXJuIGF4KGFvKCksb1gsZSxuKX0sdXNlTWVtb0NhY2hlOmFzLHVzZUNhY2hlUmVmcmVzaDphMX0saW89e3JlYWRDb250ZXh0OnJZLHVzZTphbCx1c2VDYWxsYmFjazphcSx1c2VDb250ZXh0OnJZLHVzZUVmZmVjdDphTSx1c2VJbXBlcmF0aXZlSGFuZGxlOmFVLHVzZUluc2VydGlvbkVmZmVjdDphSSx1c2VMYXlvdXRFZmZlY3Q6YUgsdXNlTWVtbzphVyx1c2VSZWR1Y2VyOmFmLHVzZVJlZjphUix1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBhZihhYyl9LHVzZURlYnVnVmFsdWU6YVYsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLG4pe3ZhciB0PWFvKCk7cmV0dXJuIG51bGw9PT1vWD9hJCh0LGUsbik6YVoodCxvWC5tZW1vaXplZFN0YXRlLGUsbil9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT1hZihhYylbMF0sbj1hbygpLm1lbW9pemVkU3RhdGU7cmV0dXJuW1wiYm9vbGVhblwiPT10eXBlb2YgZT9lOmFpKGUpLG5dfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTphcCx1c2VJZDphMCx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czphSix1c2VGb3JtU3RhdGU6YUwsdXNlQWN0aW9uU3RhdGU6YUwsdXNlT3B0aW1pc3RpYzpmdW5jdGlvbihlLG4pe3ZhciB0PWFvKCk7cmV0dXJuIG51bGwhPT1vWD9heCh0LG9YLGUsbik6KHQuYmFzZVN0YXRlPWUsW2UsdC5xdWV1ZS5kaXNwYXRjaF0pfSx1c2VNZW1vQ2FjaGU6YXMsdXNlQ2FjaGVSZWZyZXNoOmExfTtmdW5jdGlvbiBpYShlLG4sdCxyKXt0PW51bGw9PSh0PXQocixuPWUubWVtb2l6ZWRTdGF0ZSkpP246Zih7fSxuLHQpLGUubWVtb2l6ZWRTdGF0ZT10LDA9PT1lLmxhbmVzJiYoZS51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9dCl9dmFyIGlpPXtlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSxuLHQpe2U9ZS5fcmVhY3RJbnRlcm5hbHM7dmFyIHI9c3QoKSxvPW9BKHIpO28ucGF5bG9hZD1uLG51bGwhPXQmJihvLmNhbGxiYWNrPXQpLG51bGwhPT0obj1vTyhlLG8scikpJiYoc28obixlLHIpLG9DKG4sZSxyKSl9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSxuLHQpe2U9ZS5fcmVhY3RJbnRlcm5hbHM7dmFyIHI9c3QoKSxvPW9BKHIpO28udGFnPTEsby5wYXlsb2FkPW4sbnVsbCE9dCYmKG8uY2FsbGJhY2s9dCksbnVsbCE9PShuPW9PKGUsbyxyKSkmJihzbyhuLGUsciksb0MobixlLHIpKX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGUsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgdD1zdCgpLHI9b0EodCk7ci50YWc9MixudWxsIT1uJiYoci5jYWxsYmFjaz1uKSxudWxsIT09KG49b08oZSxyLHQpKSYmKHNvKG4sZSx0KSxvQyhuLGUsdCkpfX07ZnVuY3Rpb24gaWwoZSxuLHQscixvLGEsaSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YoZT1lLnN0YXRlTm9kZSkuc2hvdWxkQ29tcG9uZW50VXBkYXRlP2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHIsYSxpKTohbi5wcm90b3R5cGV8fCFuLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudHx8IXRDKHQscil8fCF0QyhvLGEpfWZ1bmN0aW9uIGlzKGUsbix0LHIpe2U9bi5zdGF0ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJm4uY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh0LHIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4uVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJm4uVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHModCxyKSxuLnN0YXRlIT09ZSYmaWkuZW5xdWV1ZVJlcGxhY2VTdGF0ZShuLG4uc3RhdGUsbnVsbCl9ZnVuY3Rpb24gaWMoZSxuKXt2YXIgdD1uO2lmKFwicmVmXCJpbiBuKWZvcih2YXIgciBpbiB0PXt9LG4pXCJyZWZcIiE9PXImJih0W3JdPW5bcl0pO2lmKGU9ZS5kZWZhdWx0UHJvcHMpZm9yKHZhciBvIGluIHQ9PT1uJiYodD1mKHt9LHQpKSxlKXZvaWQgMD09PXRbb10mJih0W29dPWVbb10pO3JldHVybiB0fWZ1bmN0aW9uIGl1KGUpe3RHKGUpfWZ1bmN0aW9uIGlkKGUpe2NvbnNvbGUuZXJyb3IoZSl9ZnVuY3Rpb24gaXAoZSl7dEcoZSl9ZnVuY3Rpb24gaWgoZSxuKXt0cnl7KDAsZS5vblVuY2F1Z2h0RXJyb3IpKG4udmFsdWUse2NvbXBvbmVudFN0YWNrOm4uc3RhY2t9KX1jYXRjaChlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfX1mdW5jdGlvbiBpZyhlLG4sdCl7dHJ5eygwLGUub25DYXVnaHRFcnJvcikodC52YWx1ZSx7Y29tcG9uZW50U3RhY2s6dC5zdGFjayxlcnJvckJvdW5kYXJ5OjE9PT1uLnRhZz9uLnN0YXRlTm9kZTpudWxsfSl9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX19ZnVuY3Rpb24gaW0oZSxuLHQpe3JldHVybih0PW9BKHQpKS50YWc9Myx0LnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH0sdC5jYWxsYmFjaz1mdW5jdGlvbigpe2loKGUsbil9LHR9ZnVuY3Rpb24gaXYoZSl7cmV0dXJuKGU9b0EoZSkpLnRhZz0zLGV9ZnVuY3Rpb24gaWIoZSxuLHQscil7dmFyIG89dC50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBvKXt2YXIgYT1yLnZhbHVlO2UucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiBvKGEpfSxlLmNhbGxiYWNrPWZ1bmN0aW9uKCl7aWcobix0LHIpfX12YXIgaT10LnN0YXRlTm9kZTtudWxsIT09aSYmXCJmdW5jdGlvblwiPT10eXBlb2YgaS5jb21wb25lbnREaWRDYXRjaCYmKGUuY2FsbGJhY2s9ZnVuY3Rpb24oKXtpZyhuLHQsciksXCJmdW5jdGlvblwiIT10eXBlb2YgbyYmKG51bGw9PT1sMj9sMj1uZXcgU2V0KFt0aGlzXSk6bDIuYWRkKHRoaXMpKTt2YXIgZT1yLnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2goci52YWx1ZSx7Y29tcG9uZW50U3RhY2s6bnVsbCE9PWU/ZTpcIlwifSl9KX12YXIgaXk9RXJyb3IobCg0NjEpKSxpeD0hMTtmdW5jdGlvbiBpdyhlLG4sdCxyKXtuLmNoaWxkPW51bGw9PT1lP294KG4sbnVsbCx0LHIpOm95KG4sZS5jaGlsZCx0LHIpfWZ1bmN0aW9uIGlqKGUsbix0LHIsbyl7dD10LnJlbmRlcjt2YXIgYT1uLnJlZjtpZihcInJlZlwiaW4gcil7dmFyIGk9e307Zm9yKHZhciBsIGluIHIpXCJyZWZcIiE9PWwmJihpW2xdPXJbbF0pfWVsc2UgaT1yO3JldHVybihyWihuKSxyPW82KGUsbix0LGksYSxvKSxsPWFlKCksbnVsbD09PWV8fGl4KT8oclMmJmwmJnJqKG4pLG4uZmxhZ3N8PTEsaXcoZSxuLHIsbyksbi5jaGlsZCk6KGFuKGUsbixvKSxpcShlLG4sbykpfWZ1bmN0aW9uIGlrKGUsbix0LHIsbyl7aWYobnVsbD09PWUpe3ZhciBhPXQudHlwZTtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBhfHxybihhKXx8dm9pZCAwIT09YS5kZWZhdWx0UHJvcHN8fG51bGwhPT10LmNvbXBhcmU/KChlPXJvKHQudHlwZSxudWxsLHIsbixuLm1vZGUsbykpLnJlZj1uLnJlZixlLnJldHVybj1uLG4uY2hpbGQ9ZSk6KG4udGFnPTE1LG4udHlwZT1hLGlBKGUsbixhLHIsbykpfWlmKGE9ZS5jaGlsZCwhaVcoZSxvKSl7dmFyIGk9YS5tZW1vaXplZFByb3BzO2lmKCh0PW51bGwhPT0odD10LmNvbXBhcmUpP3Q6dEMpKGkscikmJmUucmVmPT09bi5yZWYpcmV0dXJuIGlxKGUsbixvKX1yZXR1cm4gbi5mbGFnc3w9MSwoZT1ydChhLHIpKS5yZWY9bi5yZWYsZS5yZXR1cm49bixuLmNoaWxkPWV9ZnVuY3Rpb24gaUEoZSxuLHQscixvKXtpZihudWxsIT09ZSl7dmFyIGE9ZS5tZW1vaXplZFByb3BzO2lmKHRDKGEscikmJmUucmVmPT09bi5yZWYpaWYoaXg9ITEsbi5wZW5kaW5nUHJvcHM9cj1hLCFpVyhlLG8pKXJldHVybiBuLmxhbmVzPWUubGFuZXMsaXEoZSxuLG8pO2Vsc2UgMCE9KDEzMTA3MiZlLmZsYWdzKSYmKGl4PSEwKX1yZXR1cm4gaVAoZSxuLHQscixvKX1mdW5jdGlvbiBpTyhlLG4sdCxyKXt2YXIgbz1yLmNoaWxkcmVuLGE9bnVsbCE9PWU/ZS5tZW1vaXplZFN0YXRlOm51bGw7aWYoXCJoaWRkZW5cIj09PXIubW9kZSl7aWYoMCE9KDEyOCZuLmZsYWdzKSl7aWYocj1udWxsIT09YT9hLmJhc2VMYW5lc3x0OnQsbnVsbCE9PWUpe2ZvcihhPTAsbz1uLmNoaWxkPWUuY2hpbGQ7bnVsbCE9PW87KWE9YXxvLmxhbmVzfG8uY2hpbGRMYW5lcyxvPW8uc2libGluZztuLmNoaWxkTGFuZXM9YSZ+cn1lbHNlIG4uY2hpbGRMYW5lcz0wLG4uY2hpbGQ9bnVsbDtyZXR1cm4gaUMoZSxuLHIsdCl9aWYoMD09KDB4MjAwMDAwMDAmdCkpcmV0dXJuIG4ubGFuZXM9bi5jaGlsZExhbmVzPTB4MjAwMDAwMDAsaUMoZSxuLG51bGwhPT1hP2EuYmFzZUxhbmVzfHQ6dCx0KTtuLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsfSxudWxsIT09ZSYmb24obixudWxsIT09YT9hLmNhY2hlUG9vbDpudWxsKSxudWxsIT09YT9vTihuLGEpOm9EKCksb1Uobil9ZWxzZSBudWxsIT09YT8ob24obixhLmNhY2hlUG9vbCksb04obixhKSxvVihuKSxuLm1lbW9pemVkU3RhdGU9bnVsbCk6KG51bGwhPT1lJiZvbihuLG51bGwpLG9EKCksb1YobikpO3JldHVybiBpdyhlLG4sbyx0KSxuLmNoaWxkfWZ1bmN0aW9uIGlDKGUsbix0LHIpe3ZhciBvPW9lKCk7cmV0dXJuIG4ubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOnQsY2FjaGVQb29sOm89bnVsbD09PW8/bnVsbDp7cGFyZW50OnIwLl9jdXJyZW50VmFsdWUscG9vbDpvfX0sbnVsbCE9PWUmJm9uKG4sbnVsbCksb0QoKSxvVShuKSxudWxsIT09ZSYmclcoZSxuLHIsITApLG51bGx9ZnVuY3Rpb24gaVMoZSxuKXtyZXR1cm4obj1pSSh7bW9kZTpuLm1vZGUsY2hpbGRyZW46bi5jaGlsZHJlbn0sZS5tb2RlKSkucmVmPWUucmVmLGUuY2hpbGQ9bixuLnJldHVybj1lLG59ZnVuY3Rpb24gaUUoZSxuLHQpe3JldHVybiBveShuLGUuY2hpbGQsbnVsbCx0KSxlPWlTKG4sbi5wZW5kaW5nUHJvcHMpLGUuZmxhZ3N8PTIsb3Eobiksbi5tZW1vaXplZFN0YXRlPW51bGwsZX1mdW5jdGlvbiBpXyhlLG4pe3ZhciB0PW4ucmVmO2lmKG51bGw9PT10KW51bGwhPT1lJiZudWxsIT09ZS5yZWYmJihuLmZsYWdzfD00MTk0ODE2KTtlbHNle2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJlwib2JqZWN0XCIhPXR5cGVvZiB0KXRocm93IEVycm9yKGwoMjg0KSk7KG51bGw9PT1lfHxlLnJlZiE9PXQpJiYobi5mbGFnc3w9NDE5NDgxNil9fWZ1bmN0aW9uIGlQKGUsbix0LHIsbyl7cmV0dXJuKHJaKG4pLHQ9bzYoZSxuLHQscix2b2lkIDAsbykscj1hZSgpLG51bGw9PT1lfHxpeCk/KHJTJiZyJiZyaihuKSxuLmZsYWdzfD0xLGl3KGUsbix0LG8pLG4uY2hpbGQpOihhbihlLG4sbyksaXEoZSxuLG8pKX1mdW5jdGlvbiBpeihlLG4sdCxyLG8sYSl7cmV0dXJuKHJaKG4pLG4udXBkYXRlUXVldWU9bnVsbCx0PW84KG4scix0LG8pLG85KGUpLHI9YWUoKSxudWxsPT09ZXx8aXgpPyhyUyYmciYmcmoobiksbi5mbGFnc3w9MSxpdyhlLG4sdCxhKSxuLmNoaWxkKTooYW4oZSxuLGEpLGlxKGUsbixhKSl9ZnVuY3Rpb24gaUwoZSxuLHQscixvKXtpZihyWihuKSxudWxsPT09bi5zdGF0ZU5vZGUpe3ZhciBhPXQ4LGk9dC5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT10eXBlb2YgaSYmbnVsbCE9PWkmJihhPXJZKGkpKSxuLm1lbW9pemVkU3RhdGU9bnVsbCE9PShhPW5ldyB0KHIsYSkpLnN0YXRlJiZ2b2lkIDAhPT1hLnN0YXRlP2Euc3RhdGU6bnVsbCxhLnVwZGF0ZXI9aWksbi5zdGF0ZU5vZGU9YSxhLl9yZWFjdEludGVybmFscz1uLChhPW4uc3RhdGVOb2RlKS5wcm9wcz1yLGEuc3RhdGU9bi5tZW1vaXplZFN0YXRlLGEucmVmcz17fSxvaihuKSxpPXQuY29udGV4dFR5cGUsYS5jb250ZXh0PVwib2JqZWN0XCI9PXR5cGVvZiBpJiZudWxsIT09aT9yWShpKTp0OCxhLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZihpPXQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKSYmKGlhKG4sdCxpLHIpLGEuc3RhdGU9bi5tZW1vaXplZFN0YXRlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc3x8XCJmdW5jdGlvblwiPT10eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmNvbXBvbmVudFdpbGxNb3VudHx8KGk9YS5zdGF0ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudFdpbGxNb3VudCYmYS5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLGkhPT1hLnN0YXRlJiZpaS5lbnF1ZXVlUmVwbGFjZVN0YXRlKGEsYS5zdGF0ZSxudWxsKSxvUChuLHIsYSxvKSxvXygpLGEuc3RhdGU9bi5tZW1vaXplZFN0YXRlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZE1vdW50JiYobi5mbGFnc3w9NDE5NDMwOCkscj0hMH1lbHNlIGlmKG51bGw9PT1lKXthPW4uc3RhdGVOb2RlO3ZhciBsPW4ubWVtb2l6ZWRQcm9wcyxzPWljKHQsbCk7YS5wcm9wcz1zO3ZhciBjPWEuY29udGV4dCx1PXQuY29udGV4dFR5cGU7aT10OCxcIm9iamVjdFwiPT10eXBlb2YgdSYmbnVsbCE9PXUmJihpPXJZKHUpKTt2YXIgZD10LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczt1PVwiZnVuY3Rpb25cIj09dHlwZW9mIGR8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUsbD1uLnBlbmRpbmdQcm9wcyE9PWwsdXx8XCJmdW5jdGlvblwiIT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwobHx8YyE9PWkpJiZpcyhuLGEscixpKSxvdz0hMTt2YXIgZj1uLm1lbW9pemVkU3RhdGU7YS5zdGF0ZT1mLG9QKG4scixhLG8pLG9fKCksYz1uLm1lbW9pemVkU3RhdGUsbHx8ZiE9PWN8fG93PyhcImZ1bmN0aW9uXCI9PXR5cGVvZiBkJiYoaWEobix0LGQsciksYz1uLm1lbW9pemVkU3RhdGUpLChzPW93fHxpbChuLHQscyxyLGYsYyxpKSk/KHV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnR8fChcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudFdpbGxNb3VudCYmYS5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZE1vdW50JiYobi5mbGFnc3w9NDE5NDMwOCkpOihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZE1vdW50JiYobi5mbGFnc3w9NDE5NDMwOCksbi5tZW1vaXplZFByb3BzPXIsbi5tZW1vaXplZFN0YXRlPWMpLGEucHJvcHM9cixhLnN0YXRlPWMsYS5jb250ZXh0PWkscj1zKTooXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRNb3VudCYmKG4uZmxhZ3N8PTQxOTQzMDgpLHI9ITEpfWVsc2V7YT1uLnN0YXRlTm9kZSxvayhlLG4pLHU9aWModCxpPW4ubWVtb2l6ZWRQcm9wcyksYS5wcm9wcz11LGQ9bi5wZW5kaW5nUHJvcHMsZj1hLmNvbnRleHQsYz10LmNvbnRleHRUeXBlLHM9dDgsXCJvYmplY3RcIj09dHlwZW9mIGMmJm51bGwhPT1jJiYocz1yWShjKSksKGM9XCJmdW5jdGlvblwiPT10eXBlb2YobD10LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChpIT09ZHx8ZiE9PXMpJiZpcyhuLGEscixzKSxvdz0hMSxmPW4ubWVtb2l6ZWRTdGF0ZSxhLnN0YXRlPWYsb1AobixyLGEsbyksb18oKTt2YXIgcD1uLm1lbW9pemVkU3RhdGU7aSE9PWR8fGYhPT1wfHxvd3x8bnVsbCE9PWUmJm51bGwhPT1lLmRlcGVuZGVuY2llcyYmciQoZS5kZXBlbmRlbmNpZXMpPyhcImZ1bmN0aW9uXCI9PXR5cGVvZiBsJiYoaWEobix0LGwscikscD1uLm1lbW9pemVkU3RhdGUpLCh1PW93fHxpbChuLHQsdSxyLGYscCxzKXx8bnVsbCE9PWUmJm51bGwhPT1lLmRlcGVuZGVuY2llcyYmciQoZS5kZXBlbmRlbmNpZXMpKT8oY3x8XCJmdW5jdGlvblwiIT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5jb21wb25lbnRXaWxsVXBkYXRlfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnRXaWxsVXBkYXRlJiZhLmNvbXBvbmVudFdpbGxVcGRhdGUocixwLHMpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJmEuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUocixwLHMpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZFVwZGF0ZSYmKG4uZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihuLmZsYWdzfD0xMDI0KSk6KFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuY29tcG9uZW50RGlkVXBkYXRlfHxpPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwobi5mbGFnc3w9NCksXCJmdW5jdGlvblwiIT10eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KG4uZmxhZ3N8PTEwMjQpLG4ubWVtb2l6ZWRQcm9wcz1yLG4ubWVtb2l6ZWRTdGF0ZT1wKSxhLnByb3BzPXIsYS5zdGF0ZT1wLGEuY29udGV4dD1zLHI9dSk6KFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuY29tcG9uZW50RGlkVXBkYXRlfHxpPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwobi5mbGFnc3w9NCksXCJmdW5jdGlvblwiIT10eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KG4uZmxhZ3N8PTEwMjQpLHI9ITEpfXJldHVybiBhPXIsaV8oZSxuKSxyPTAhPSgxMjgmbi5mbGFncyksYXx8cj8oYT1uLnN0YXRlTm9kZSx0PXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yP251bGw6YS5yZW5kZXIoKSxuLmZsYWdzfD0xLG51bGwhPT1lJiZyPyhuLmNoaWxkPW95KG4sZS5jaGlsZCxudWxsLG8pLG4uY2hpbGQ9b3kobixudWxsLHQsbykpOml3KGUsbix0LG8pLG4ubWVtb2l6ZWRTdGF0ZT1hLnN0YXRlLGU9bi5jaGlsZCk6ZT1pcShlLG4sbyksZX1mdW5jdGlvbiBpVChlLG4sdCxyKXtyZXR1cm4gck4oKSxuLmZsYWdzfD0yNTYsaXcoZSxuLHQsciksbi5jaGlsZH12YXIgaVI9e2RlaHlkcmF0ZWQ6bnVsbCx0cmVlQ29udGV4dDpudWxsLHJldHJ5TGFuZTowLGh5ZHJhdGlvbkVycm9yczpudWxsfTtmdW5jdGlvbiBpTihlKXtyZXR1cm57YmFzZUxhbmVzOmUsY2FjaGVQb29sOm90KCl9fWZ1bmN0aW9uIGlEKGUsbix0KXtyZXR1cm4gZT1udWxsIT09ZT9lLmNoaWxkTGFuZXMmfnQ6MCxuJiYoZXw9bFkpLGV9ZnVuY3Rpb24gaUIoZSxuLHQpe3ZhciByLG89bi5wZW5kaW5nUHJvcHMsYT0hMSxpPTAhPSgxMjgmbi5mbGFncyk7aWYoKHI9aSl8fChyPShudWxsPT09ZXx8bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSkmJjAhPSgyJm9XLmN1cnJlbnQpKSxyJiYoYT0hMCxuLmZsYWdzJj0tMTI5KSxyPTAhPSgzMiZuLmZsYWdzKSxuLmZsYWdzJj0tMzMsbnVsbD09PWUpe2lmKHJTKXtpZihhP29IKG4pOm9WKG4pLChlPXJDKT9udWxsIT09KGU9bnVsbCE9PShlPWNDKGUscl8pKSYmXCImXCIhPT1lLmRhdGE/ZTpudWxsKSYmKG4ubWVtb2l6ZWRTdGF0ZT17ZGVoeWRyYXRlZDplLHRyZWVDb250ZXh0Om51bGwhPT1ydj97aWQ6cmIsb3ZlcmZsb3c6cnl9Om51bGwscmV0cnlMYW5lOjB4MjAwMDAwMDAsaHlkcmF0aW9uRXJyb3JzOm51bGx9LCh0PXJsKGUpKS5yZXR1cm49bixuLmNoaWxkPXQsck89bixyQz1udWxsKTplPW51bGwsbnVsbD09PWUpdGhyb3cgcnoobik7cmV0dXJuIGNFKGUpP24ubGFuZXM9MzI6bi5sYW5lcz0weDIwMDAwMDAwLG51bGx9dmFyIHM9by5jaGlsZHJlbjtyZXR1cm4obz1vLmZhbGxiYWNrLGEpPyhvVihuKSxzPWlJKHttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46c30sYT1uLm1vZGUpLG89cmEobyxhLHQsbnVsbCkscy5yZXR1cm49bixvLnJldHVybj1uLHMuc2libGluZz1vLG4uY2hpbGQ9cywocz1uLmNoaWxkKS5tZW1vaXplZFN0YXRlPWlOKHQpLHMuY2hpbGRMYW5lcz1pRChlLHIsdCksbi5tZW1vaXplZFN0YXRlPWlSLG8pOihvSChuKSxpTShuLHMpKX12YXIgYz1lLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWMmJm51bGwhPT0ocz1jLmRlaHlkcmF0ZWQpKXtpZihpKTI1NiZuLmZsYWdzPyhvSChuKSxuLmZsYWdzJj0tMjU3LG49aUgoZSxuLHQpKTpudWxsIT09bi5tZW1vaXplZFN0YXRlPyhvVihuKSxuLmNoaWxkPWUuY2hpbGQsbi5mbGFnc3w9MTI4LG49bnVsbCk6KG9WKG4pLHM9by5mYWxsYmFjayxhPW4ubW9kZSxvPWlJKHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOm8uY2hpbGRyZW59LGEpLHM9cmEocyxhLHQsbnVsbCkscy5mbGFnc3w9MixvLnJldHVybj1uLHMucmV0dXJuPW4sby5zaWJsaW5nPXMsbi5jaGlsZD1vLG95KG4sZS5jaGlsZCxudWxsLHQpLChvPW4uY2hpbGQpLm1lbW9pemVkU3RhdGU9aU4odCksby5jaGlsZExhbmVzPWlEKGUscix0KSxuLm1lbW9pemVkU3RhdGU9aVIsbj1zKTtlbHNlIGlmKG9IKG4pLGNFKHMpKXtpZihyPXMubmV4dFNpYmxpbmcmJnMubmV4dFNpYmxpbmcuZGF0YXNldCl2YXIgdT1yLmRnc3Q7cj11LChvPUVycm9yKGwoNDE5KSkpLnN0YWNrPVwiXCIsby5kaWdlc3Q9cixyQih7dmFsdWU6byxzb3VyY2U6bnVsbCxzdGFjazpudWxsfSksbj1pSChlLG4sdCl9ZWxzZSBpZihpeHx8clcoZSxuLHQsITEpLHI9MCE9KHQmZS5jaGlsZExhbmVzKSxpeHx8cil7aWYobnVsbCE9PShyPWxOKSYmMCE9PShvPWVfKHIsdCkpJiZvIT09Yy5yZXRyeUxhbmUpdGhyb3cgYy5yZXRyeUxhbmU9byx0MyhlLG8pLHNvKHIsZSxvKSxpeTtjUyhzKXx8c2coKSxuPWlIKGUsbix0KX1lbHNlIGNTKHMpPyhuLmZsYWdzfD0xOTIsbi5jaGlsZD1lLmNoaWxkLG49bnVsbCk6KGU9Yy50cmVlQ29udGV4dCxyQz1jXyhzLm5leHRTaWJsaW5nKSxyTz1uLHJTPSEwLHJFPW51bGwscl89ITEsbnVsbCE9PWUmJnJBKG4sZSksbj1pTShuLG8uY2hpbGRyZW4pLG4uZmxhZ3N8PTQwOTYpO3JldHVybiBufXJldHVybiBhPyhvVihuKSxzPW8uZmFsbGJhY2ssYT1uLm1vZGUsdT0oYz1lLmNoaWxkKS5zaWJsaW5nLChvPXJ0KGMse21vZGU6XCJoaWRkZW5cIixjaGlsZHJlbjpvLmNoaWxkcmVufSkpLnN1YnRyZWVGbGFncz0weDNlMDAwMDAmYy5zdWJ0cmVlRmxhZ3MsbnVsbCE9PXU/cz1ydCh1LHMpOihzPXJhKHMsYSx0LG51bGwpLHMuZmxhZ3N8PTIpLHMucmV0dXJuPW4sby5yZXR1cm49bixvLnNpYmxpbmc9cyxuLmNoaWxkPW8sbz1zLHM9bi5jaGlsZCxudWxsPT09KGE9ZS5jaGlsZC5tZW1vaXplZFN0YXRlKT9hPWlOKHQpOihudWxsIT09KGM9YS5jYWNoZVBvb2wpPyh1PXIwLl9jdXJyZW50VmFsdWUsYz1jLnBhcmVudCE9PXU/e3BhcmVudDp1LHBvb2w6dX06Yyk6Yz1vdCgpLGE9e2Jhc2VMYW5lczphLmJhc2VMYW5lc3x0LGNhY2hlUG9vbDpjfSkscy5tZW1vaXplZFN0YXRlPWEscy5jaGlsZExhbmVzPWlEKGUscix0KSxuLm1lbW9pemVkU3RhdGU9aVIsbyk6KG9IKG4pLGU9KHQ9ZS5jaGlsZCkuc2libGluZywodD1ydCh0LHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOm8uY2hpbGRyZW59KSkucmV0dXJuPW4sdC5zaWJsaW5nPW51bGwsbnVsbCE9PWUmJihudWxsPT09KHI9bi5kZWxldGlvbnMpPyhuLmRlbGV0aW9ucz1bZV0sbi5mbGFnc3w9MTYpOnIucHVzaChlKSksbi5jaGlsZD10LG4ubWVtb2l6ZWRTdGF0ZT1udWxsLHQpfWZ1bmN0aW9uIGlNKGUsbil7cmV0dXJuKG49aUkoe21vZGU6XCJ2aXNpYmxlXCIsY2hpbGRyZW46bn0sZS5tb2RlKSkucmV0dXJuPWUsZS5jaGlsZD1ufWZ1bmN0aW9uIGlJKGUsbil7cmV0dXJuKGU9cmUoMjIsZSxudWxsLG4pKS5sYW5lcz0wLGUuc3RhdGVOb2RlPXtfdmlzaWJpbGl0eToxLF9wZW5kaW5nTWFya2VyczpudWxsLF9yZXRyeUNhY2hlOm51bGwsX3RyYW5zaXRpb25zOm51bGx9LGV9ZnVuY3Rpb24gaUgoZSxuLHQpe3JldHVybiBveShuLGUuY2hpbGQsbnVsbCx0KSxlPWlNKG4sbi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLGUuZmxhZ3N8PTIsbi5tZW1vaXplZFN0YXRlPW51bGwsZX1mdW5jdGlvbiBpRihlLG4sdCl7ZS5sYW5lc3w9bjt2YXIgcj1lLmFsdGVybmF0ZTtudWxsIT09ciYmKHIubGFuZXN8PW4pLHJWKGUucmV0dXJuLG4sdCl9ZnVuY3Rpb24gaVUoZSxuLHQscixvLGEpe3ZhciBpPWUubWVtb2l6ZWRTdGF0ZTtudWxsPT09aT9lLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOm4scmVuZGVyaW5nOm51bGwscmVuZGVyaW5nU3RhcnRUaW1lOjAsbGFzdDpyLHRhaWw6dCx0YWlsTW9kZTpvLHRyZWVGb3JrQ291bnQ6YX06KGkuaXNCYWNrd2FyZHM9bixpLnJlbmRlcmluZz1udWxsLGkucmVuZGVyaW5nU3RhcnRUaW1lPTAsaS5sYXN0PXIsaS50YWlsPXQsaS50YWlsTW9kZT1vLGkudHJlZUZvcmtDb3VudD1hKX1mdW5jdGlvbiBpVihlLG4sdCl7dmFyIHI9bi5wZW5kaW5nUHJvcHMsbz1yLnJldmVhbE9yZGVyLGE9ci50YWlsO3I9ci5jaGlsZHJlbjt2YXIgaT1vVy5jdXJyZW50LGw9MCE9KDImaSk7aWYobD8oaT0xJml8MixuLmZsYWdzfD0xMjgpOmkmPTEsSShvVyxpKSxpdyhlLG4scix0KSxyPXJTP3JoOjAsIWwmJm51bGwhPT1lJiYwIT0oMTI4JmUuZmxhZ3MpKWU6Zm9yKGU9bi5jaGlsZDtudWxsIT09ZTspe2lmKDEzPT09ZS50YWcpbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmaUYoZSx0LG4pO2Vsc2UgaWYoMTk9PT1lLnRhZylpRihlLHQsbik7ZWxzZSBpZihudWxsIT09ZS5jaGlsZCl7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGQ7Y29udGludWV9aWYoZT09PW4pYnJlYWs7Zm9yKDtudWxsPT09ZS5zaWJsaW5nOyl7aWYobnVsbD09PWUucmV0dXJufHxlLnJldHVybj09PW4pYnJlYWsgZTtlPWUucmV0dXJufWUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmd9c3dpdGNoKG8pe2Nhc2VcImZvcndhcmRzXCI6Zm9yKG89bnVsbCx0PW4uY2hpbGQ7bnVsbCE9PXQ7KW51bGwhPT0oZT10LmFsdGVybmF0ZSkmJm51bGw9PT1vJChlKSYmKG89dCksdD10LnNpYmxpbmc7bnVsbD09PSh0PW8pPyhvPW4uY2hpbGQsbi5jaGlsZD1udWxsKToobz10LnNpYmxpbmcsdC5zaWJsaW5nPW51bGwpLGlVKG4sITEsbyx0LGEscik7YnJlYWs7Y2FzZVwiYmFja3dhcmRzXCI6Y2FzZVwidW5zdGFibGVfbGVnYWN5LWJhY2t3YXJkc1wiOmZvcih0PW51bGwsbz1uLmNoaWxkLG4uY2hpbGQ9bnVsbDtudWxsIT09bzspe2lmKG51bGwhPT0oZT1vLmFsdGVybmF0ZSkmJm51bGw9PT1vJChlKSl7bi5jaGlsZD1vO2JyZWFrfWU9by5zaWJsaW5nLG8uc2libGluZz10LHQ9byxvPWV9aVUobiwhMCx0LG51bGwsYSxyKTticmVhaztjYXNlXCJ0b2dldGhlclwiOmlVKG4sITEsbnVsbCxudWxsLHZvaWQgMCxyKTticmVhaztkZWZhdWx0Om4ubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiBuLmNoaWxkfWZ1bmN0aW9uIGlxKGUsbix0KXtpZihudWxsIT09ZSYmKG4uZGVwZW5kZW5jaWVzPWUuZGVwZW5kZW5jaWVzKSxsV3w9bi5sYW5lcywwPT0odCZuLmNoaWxkTGFuZXMpKXtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtlbHNlIGlmKHJXKGUsbix0LCExKSwwPT0odCZuLmNoaWxkTGFuZXMpKXJldHVybiBudWxsfWlmKG51bGwhPT1lJiZuLmNoaWxkIT09ZS5jaGlsZCl0aHJvdyBFcnJvcihsKDE1MykpO2lmKG51bGwhPT1uLmNoaWxkKXtmb3IodD1ydChlPW4uY2hpbGQsZS5wZW5kaW5nUHJvcHMpLG4uY2hpbGQ9dCx0LnJldHVybj1uO251bGwhPT1lLnNpYmxpbmc7KWU9ZS5zaWJsaW5nLCh0PXQuc2libGluZz1ydChlLGUucGVuZGluZ1Byb3BzKSkucmV0dXJuPW47dC5zaWJsaW5nPW51bGx9cmV0dXJuIG4uY2hpbGR9ZnVuY3Rpb24gaVcoZSxuKXtyZXR1cm4gMCE9KGUubGFuZXMmbil8fCEhKG51bGwhPT0oZT1lLmRlcGVuZGVuY2llcykmJnIkKGUpKX1mdW5jdGlvbiBpJChlLG4sdCl7aWYobnVsbCE9PWUpaWYoZS5tZW1vaXplZFByb3BzIT09bi5wZW5kaW5nUHJvcHMpaXg9ITA7ZWxzZXtpZighaVcoZSx0KSYmMD09KDEyOCZuLmZsYWdzKSlyZXR1cm4gaXg9ITEsZnVuY3Rpb24oZSxuLHQpe3N3aXRjaChuLnRhZyl7Y2FzZSAzOnEobixuLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxyRihuLHIwLGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksck4oKTticmVhaztjYXNlIDI3OmNhc2UgNTokKG4pO2JyZWFrO2Nhc2UgNDpxKG4sbi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDpyRihuLG4udHlwZSxuLm1lbW9pemVkUHJvcHMudmFsdWUpO2JyZWFrO2Nhc2UgMzE6aWYobnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZSlyZXR1cm4gbi5mbGFnc3w9MTI4LG9GKG4pLG51bGw7YnJlYWs7Y2FzZSAxMzp2YXIgcj1uLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PXIpe2lmKG51bGwhPT1yLmRlaHlkcmF0ZWQpcmV0dXJuIG9IKG4pLG4uZmxhZ3N8PTEyOCxudWxsO2lmKDAhPSh0Jm4uY2hpbGQuY2hpbGRMYW5lcykpcmV0dXJuIGlCKGUsbix0KTtyZXR1cm4gb0gobiksbnVsbCE9PShlPWlxKGUsbix0KSk/ZS5zaWJsaW5nOm51bGx9b0gobik7YnJlYWs7Y2FzZSAxOTp2YXIgbz0wIT0oMTI4JmUuZmxhZ3MpO2lmKChyPTAhPSh0Jm4uY2hpbGRMYW5lcykpfHwoclcoZSxuLHQsITEpLHI9MCE9KHQmbi5jaGlsZExhbmVzKSksbyl7aWYocilyZXR1cm4gaVYoZSxuLHQpO24uZmxhZ3N8PTEyOH1pZihudWxsIT09KG89bi5tZW1vaXplZFN0YXRlKSYmKG8ucmVuZGVyaW5nPW51bGwsby50YWlsPW51bGwsby5sYXN0RWZmZWN0PW51bGwpLEkob1csb1cuY3VycmVudCksIXIpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gbi5sYW5lcz0wLGlPKGUsbix0LG4ucGVuZGluZ1Byb3BzKTtjYXNlIDI0OnJGKG4scjAsZS5tZW1vaXplZFN0YXRlLmNhY2hlKX1yZXR1cm4gaXEoZSxuLHQpfShlLG4sdCk7aXg9MCE9KDEzMTA3MiZlLmZsYWdzKX1lbHNlIGl4PSExLHJTJiYwIT0oMTA0ODU3NiZuLmZsYWdzKSYmcncobixyaCxuLmluZGV4KTtzd2l0Y2gobi5sYW5lcz0wLG4udGFnKXtjYXNlIDE2OmU6e2U9bi5wZW5kaW5nUHJvcHM7dmFyIHI9bi5lbGVtZW50VHlwZSxvPXIuX2luaXQ7aWYocj1vKHIuX3BheWxvYWQpLG4udHlwZT1yLFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcm4ocik/KGU9aWMocixlKSxuLnRhZz0xLG49aUwobnVsbCxuLHIsZSx0KSk6KG4udGFnPTAsbj1pUChudWxsLG4scixlLHQpKTtlbHNle2lmKG51bGwhPXIpe2lmKChvPXIuJCR0eXBlb2YpPT09dyl7bi50YWc9MTEsbj1paihudWxsLG4scixlLHQpO2JyZWFrIGV9ZWxzZSBpZihvPT09QSl7bi50YWc9MTQsbj1payhudWxsLG4scixlLHQpO2JyZWFrIGV9fXRocm93IEVycm9yKGwoMzA2LG49ZnVuY3Rpb24gZShuKXtpZihudWxsPT1uKXJldHVybiBudWxsO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pcmV0dXJuIG4uJCR0eXBlb2Y9PT1QP251bGw6bi5kaXNwbGF5TmFtZXx8bi5uYW1lfHxudWxsO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXJldHVybiBuO3N3aXRjaChuKXtjYXNlIG06cmV0dXJuXCJGcmFnbWVudFwiO2Nhc2UgYjpyZXR1cm5cIlByb2ZpbGVyXCI7Y2FzZSB2OnJldHVyblwiU3RyaWN0TW9kZVwiO2Nhc2UgajpyZXR1cm5cIlN1c3BlbnNlXCI7Y2FzZSBrOnJldHVyblwiU3VzcGVuc2VMaXN0XCI7Y2FzZSBDOnJldHVyblwiQWN0aXZpdHlcIn1pZihcIm9iamVjdFwiPT10eXBlb2Ygbilzd2l0Y2gobi4kJHR5cGVvZil7Y2FzZSBnOnJldHVyblwiUG9ydGFsXCI7Y2FzZSB4OnJldHVybiBuLmRpc3BsYXlOYW1lfHxcIkNvbnRleHRcIjtjYXNlIHk6cmV0dXJuKG4uX2NvbnRleHQuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Db25zdW1lclwiO2Nhc2Ugdzp2YXIgdD1uLnJlbmRlcjtyZXR1cm4obj1uLmRpc3BsYXlOYW1lKXx8KG49XCJcIiE9PShuPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8XCJcIik/XCJGb3J3YXJkUmVmKFwiK24rXCIpXCI6XCJGb3J3YXJkUmVmXCIpLG47Y2FzZSBBOnJldHVybiBudWxsIT09KHQ9bi5kaXNwbGF5TmFtZXx8bnVsbCk/dDplKG4udHlwZSl8fFwiTWVtb1wiO2Nhc2UgTzp0PW4uX3BheWxvYWQsbj1uLl9pbml0O3RyeXtyZXR1cm4gZShuKHQpKX1jYXRjaChlKXt9fXJldHVybiBudWxsfShyKXx8cixcIlwiKSl9fXJldHVybiBuO2Nhc2UgMDpyZXR1cm4gaVAoZSxuLG4udHlwZSxuLnBlbmRpbmdQcm9wcyx0KTtjYXNlIDE6cmV0dXJuIG89aWMocj1uLnR5cGUsbi5wZW5kaW5nUHJvcHMpLGlMKGUsbixyLG8sdCk7Y2FzZSAzOmU6e2lmKHEobixuLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxudWxsPT09ZSl0aHJvdyBFcnJvcihsKDM4NykpO3I9bi5wZW5kaW5nUHJvcHM7dmFyIGE9bi5tZW1vaXplZFN0YXRlO289YS5lbGVtZW50LG9rKGUsbiksb1AobixyLG51bGwsdCk7dmFyIGk9bi5tZW1vaXplZFN0YXRlO2lmKHJGKG4scjAscj1pLmNhY2hlKSxyIT09YS5jYWNoZSYmcnEobixbcjBdLHQsITApLG9fKCkscj1pLmVsZW1lbnQsYS5pc0RlaHlkcmF0ZWQpaWYoYT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDohMSxjYWNoZTppLmNhY2hlfSxuLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1hLG4ubWVtb2l6ZWRTdGF0ZT1hLDI1NiZuLmZsYWdzKXtuPWlUKGUsbixyLHQpO2JyZWFrIGV9ZWxzZSBpZihyIT09byl7ckIobz1ydShFcnJvcihsKDQyNCkpLG4pKSxuPWlUKGUsbixyLHQpO2JyZWFrIGV9ZWxzZSBmb3IockM9Y18oKGU9OT09PShlPW4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLm5vZGVUeXBlP2UuYm9keTpcIkhUTUxcIj09PWUubm9kZU5hbWU/ZS5vd25lckRvY3VtZW50LmJvZHk6ZSkuZmlyc3RDaGlsZCksck89bixyUz0hMCxyRT1udWxsLHJfPSEwLHQ9b3gobixudWxsLHIsdCksbi5jaGlsZD10O3Q7KXQuZmxhZ3M9LTMmdC5mbGFnc3w0MDk2LHQ9dC5zaWJsaW5nO2Vsc2V7aWYock4oKSxyPT09byl7bj1pcShlLG4sdCk7YnJlYWsgZX1pdyhlLG4scix0KX1uPW4uY2hpbGR9cmV0dXJuIG47Y2FzZSAyNjpyZXR1cm4gaV8oZSxuKSxudWxsPT09ZT8odD1jRihuLnR5cGUsbnVsbCxuLnBlbmRpbmdQcm9wcyxudWxsKSk/bi5tZW1vaXplZFN0YXRlPXQ6clN8fCh0PW4udHlwZSxlPW4ucGVuZGluZ1Byb3BzLChyPWNmKFUuY3VycmVudCkuY3JlYXRlRWxlbWVudCh0KSlbZU5dPW4scltlRF09ZSxjYyhyLHQsZSksZVkociksbi5zdGF0ZU5vZGU9cik6bi5tZW1vaXplZFN0YXRlPWNGKG4udHlwZSxlLm1lbW9pemVkUHJvcHMsbi5wZW5kaW5nUHJvcHMsZS5tZW1vaXplZFN0YXRlKSxudWxsO2Nhc2UgMjc6cmV0dXJuICQobiksbnVsbD09PWUmJnJTJiYocj1uLnN0YXRlTm9kZT1jVChuLnR5cGUsbi5wZW5kaW5nUHJvcHMsVS5jdXJyZW50KSxyTz1uLHJfPSEwLG89ckMsY2oobi50eXBlKT8oY1A9byxyQz1jXyhyLmZpcnN0Q2hpbGQpKTpyQz1vKSxpdyhlLG4sbi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sdCksaV8oZSxuKSxudWxsPT09ZSYmKG4uZmxhZ3N8PTQxOTQzMDQpLG4uY2hpbGQ7Y2FzZSA1OnJldHVybiBudWxsPT09ZSYmclMmJigobz1yPXJDKSYmKG51bGwhPT0ocj1mdW5jdGlvbihlLG4sdCxyKXtmb3IoOzE9PT1lLm5vZGVUeXBlOyl7aWYoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09bi50b0xvd2VyQ2FzZSgpKXtpZighciYmKFwiSU5QVVRcIiE9PWUubm9kZU5hbWV8fFwiaGlkZGVuXCIhPT1lLnR5cGUpKWJyZWFrfWVsc2UgaWYocil7aWYoIWVbZVVdKXN3aXRjaChuKXtjYXNlXCJtZXRhXCI6aWYoIWUuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpYnJlYWs7cmV0dXJuIGU7Y2FzZVwibGlua1wiOmlmKFwic3R5bGVzaGVldFwiPT09KG89ZS5nZXRBdHRyaWJ1dGUoXCJyZWxcIikpJiZlLmhhc0F0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKXx8byE9PXQucmVsfHxlLmdldEF0dHJpYnV0ZShcImhyZWZcIikhPT0obnVsbD09dC5ocmVmfHxcIlwiPT09dC5ocmVmP251bGw6dC5ocmVmKXx8ZS5nZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiKSE9PShudWxsPT10LmNyb3NzT3JpZ2luP251bGw6dC5jcm9zc09yaWdpbil8fGUuZ2V0QXR0cmlidXRlKFwidGl0bGVcIikhPT0obnVsbD09dC50aXRsZT9udWxsOnQudGl0bGUpKWJyZWFrO3JldHVybiBlO2Nhc2VcInN0eWxlXCI6aWYoZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIikpYnJlYWs7cmV0dXJuIGU7Y2FzZVwic2NyaXB0XCI6aWYoKChvPWUuZ2V0QXR0cmlidXRlKFwic3JjXCIpKSE9PShudWxsPT10LnNyYz9udWxsOnQuc3JjKXx8ZS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpIT09KG51bGw9PXQudHlwZT9udWxsOnQudHlwZSl8fGUuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikhPT0obnVsbD09dC5jcm9zc09yaWdpbj9udWxsOnQuY3Jvc3NPcmlnaW4pKSYmbyYmZS5oYXNBdHRyaWJ1dGUoXCJhc3luY1wiKSYmIWUuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpYnJlYWs7cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4gZX19ZWxzZXtpZihcImlucHV0XCIhPT1ufHxcImhpZGRlblwiIT09ZS50eXBlKXJldHVybiBlO3ZhciBvPW51bGw9PXQubmFtZT9udWxsOlwiXCIrdC5uYW1lO2lmKFwiaGlkZGVuXCI9PT10LnR5cGUmJmUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKT09PW8pcmV0dXJuIGV9aWYobnVsbD09PShlPWNfKGUubmV4dFNpYmxpbmcpKSlicmVha31yZXR1cm4gbnVsbH0ocixuLnR5cGUsbi5wZW5kaW5nUHJvcHMscl8pKT8obi5zdGF0ZU5vZGU9cixyTz1uLHJDPWNfKHIuZmlyc3RDaGlsZCkscl89ITEsbz0hMCk6bz0hMSksb3x8cnoobikpLCQobiksbz1uLnR5cGUsYT1uLnBlbmRpbmdQcm9wcyxpPW51bGwhPT1lP2UubWVtb2l6ZWRQcm9wczpudWxsLHI9YS5jaGlsZHJlbixjZyhvLGEpP3I9bnVsbDpudWxsIT09aSYmY2cobyxpKSYmKG4uZmxhZ3N8PTMyKSxudWxsIT09bi5tZW1vaXplZFN0YXRlJiYoYzYuX2N1cnJlbnRWYWx1ZT1vPW82KGUsbixvNyxudWxsLG51bGwsdCkpLGlfKGUsbiksaXcoZSxuLHIsdCksbi5jaGlsZDtjYXNlIDY6cmV0dXJuIG51bGw9PT1lJiZyUyYmKChlPXQ9ckMpJiYobnVsbCE9PSh0PWZ1bmN0aW9uKGUsbix0KXtpZihcIlwiPT09bilyZXR1cm4gbnVsbDtmb3IoOzMhPT1lLm5vZGVUeXBlOylpZigoMSE9PWUubm9kZVR5cGV8fFwiSU5QVVRcIiE9PWUubm9kZU5hbWV8fFwiaGlkZGVuXCIhPT1lLnR5cGUpJiYhdHx8bnVsbD09PShlPWNfKGUubmV4dFNpYmxpbmcpKSlyZXR1cm4gbnVsbDtyZXR1cm4gZX0odCxuLnBlbmRpbmdQcm9wcyxyXykpPyhuLnN0YXRlTm9kZT10LHJPPW4sckM9bnVsbCxlPSEwKTplPSExKSxlfHxyeihuKSksbnVsbDtjYXNlIDEzOnJldHVybiBpQihlLG4sdCk7Y2FzZSA0OnJldHVybiBxKG4sbi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbykscj1uLnBlbmRpbmdQcm9wcyxudWxsPT09ZT9uLmNoaWxkPW95KG4sbnVsbCxyLHQpOml3KGUsbixyLHQpLG4uY2hpbGQ7Y2FzZSAxMTpyZXR1cm4gaWooZSxuLG4udHlwZSxuLnBlbmRpbmdQcm9wcyx0KTtjYXNlIDc6cmV0dXJuIGl3KGUsbixuLnBlbmRpbmdQcm9wcyx0KSxuLmNoaWxkO2Nhc2UgODpjYXNlIDEyOnJldHVybiBpdyhlLG4sbi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sdCksbi5jaGlsZDtjYXNlIDEwOnJldHVybiByPW4ucGVuZGluZ1Byb3BzLHJGKG4sbi50eXBlLHIudmFsdWUpLGl3KGUsbixyLmNoaWxkcmVuLHQpLG4uY2hpbGQ7Y2FzZSA5OnJldHVybiBvPW4udHlwZS5fY29udGV4dCxyPW4ucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHJaKG4pLHI9cihvPXJZKG8pKSxuLmZsYWdzfD0xLGl3KGUsbixyLHQpLG4uY2hpbGQ7Y2FzZSAxNDpyZXR1cm4gaWsoZSxuLG4udHlwZSxuLnBlbmRpbmdQcm9wcyx0KTtjYXNlIDE1OnJldHVybiBpQShlLG4sbi50eXBlLG4ucGVuZGluZ1Byb3BzLHQpO2Nhc2UgMTk6cmV0dXJuIGlWKGUsbix0KTtjYXNlIDMxOmlmKG89bi5wZW5kaW5nUHJvcHMsaT0wIT0oMTI4Jm4uZmxhZ3MpLG4uZmxhZ3MmPS0xMjksbnVsbD09PWUpaWYoclMpe2lmKFwiaGlkZGVuXCI9PT1vLm1vZGUpaVMobixvKTtlbHNlIGlmKG9GKG4pLCh0PXJDKT9udWxsIT09KHQ9bnVsbCE9PSh0PWNDKHQscl8pKSYmXCImXCI9PT10LmRhdGE/dDpudWxsKSYmKG4ubWVtb2l6ZWRTdGF0ZT17ZGVoeWRyYXRlZDp0LHRyZWVDb250ZXh0Om51bGwhPT1ydj97aWQ6cmIsb3ZlcmZsb3c6cnl9Om51bGwscmV0cnlMYW5lOjB4MjAwMDAwMDAsaHlkcmF0aW9uRXJyb3JzOm51bGx9LChlPXJsKHQpKS5yZXR1cm49bixuLmNoaWxkPWUsck89bixyQz1udWxsKTp0PW51bGwsbnVsbD09PXQpdGhyb3cgcnoobik7bi5sYW5lcz0weDIwMDAwMDAwLG49bnVsbH1lbHNlIG49aVMobixvKTtlbHNlIGlmKG51bGwhPT0ocj1lLm1lbW9pemVkU3RhdGUpKWlmKGE9ci5kZWh5ZHJhdGVkLG9GKG4pLGkpaWYoMjU2Jm4uZmxhZ3Mpbi5mbGFncyY9LTI1NyxuPWlFKGUsbix0KTtlbHNlIGlmKG51bGwhPT1uLm1lbW9pemVkU3RhdGUpbi5jaGlsZD1lLmNoaWxkLG4uZmxhZ3N8PTEyOCxuPW51bGw7ZWxzZSB0aHJvdyBFcnJvcihsKDU1OCkpO2Vsc2UgaWYoaXh8fHJXKGUsbix0LCExKSxpPTAhPSh0JmUuY2hpbGRMYW5lcyksaXh8fGkpe2lmKG51bGwhPT0obz1sTikmJjAhPT0oYT1lXyhvLHQpKSYmYSE9PXIucmV0cnlMYW5lKXRocm93IHIucmV0cnlMYW5lPWEsdDMoZSxhKSxzbyhvLGUsYSksaXk7c2coKSxuPWlFKGUsbix0KX1lbHNlIHQ9ci50cmVlQ29udGV4dCxyQz1jXyhhLm5leHRTaWJsaW5nKSxyTz1uLHJTPSEwLHJFPW51bGwscl89ITEsbnVsbCE9PXQmJnJBKG4sdCksbj1pUyhuLG8pLG4uZmxhZ3N8PTQwOTY7ZWxzZSh0PXJ0KGUuY2hpbGQse21vZGU6by5tb2RlLGNoaWxkcmVuOm8uY2hpbGRyZW59KSkucmVmPW4ucmVmLG4uY2hpbGQ9dCx0LnJldHVybj1uLG49dDtyZXR1cm4gbjtjYXNlIDIyOnJldHVybiBpTyhlLG4sdCxuLnBlbmRpbmdQcm9wcyk7Y2FzZSAyNDpyZXR1cm4gcloobikscj1yWShyMCksbnVsbD09PWU/KG51bGw9PT0obz1vZSgpKSYmKG89bE4sYT1yMSgpLG8ucG9vbGVkQ2FjaGU9YSxhLnJlZkNvdW50KyssbnVsbCE9PWEmJihvLnBvb2xlZENhY2hlTGFuZXN8PXQpLG89YSksbi5tZW1vaXplZFN0YXRlPXtwYXJlbnQ6cixjYWNoZTpvfSxvaihuKSxyRihuLHIwLG8pKTooMCE9KGUubGFuZXMmdCkmJihvayhlLG4pLG9QKG4sbnVsbCxudWxsLHQpLG9fKCkpLG89ZS5tZW1vaXplZFN0YXRlLGE9bi5tZW1vaXplZFN0YXRlLG8ucGFyZW50IT09cj8obz17cGFyZW50OnIsY2FjaGU6cn0sbi5tZW1vaXplZFN0YXRlPW8sMD09PW4ubGFuZXMmJihuLm1lbW9pemVkU3RhdGU9bi51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9byksckYobixyMCxyKSk6KHJGKG4scjAscj1hLmNhY2hlKSxyIT09by5jYWNoZSYmcnEobixbcjBdLHQsITApKSksaXcoZSxuLG4ucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHQpLG4uY2hpbGQ7Y2FzZSAyOTp0aHJvdyBuLnBlbmRpbmdQcm9wc310aHJvdyBFcnJvcihsKDE1NixuLnRhZykpfWZ1bmN0aW9uIGlaKGUpe2UuZmxhZ3N8PTR9ZnVuY3Rpb24gaVkoZSxuLHQscixvKXtpZigobj0wIT0oMzImZS5tb2RlKSkmJihuPSExKSxuKXtpZihlLmZsYWdzfD0weDEwMDAwMDAsKDB4MTNmZmZmNDAmbyk9PT1vKWlmKGUuc3RhdGVOb2RlLmNvbXBsZXRlKWUuZmxhZ3N8PTgxOTI7ZWxzZSBpZihzZigpKWUuZmxhZ3N8PTgxOTI7ZWxzZSB0aHJvdyBvYz1vaSxvb31lbHNlIGUuZmxhZ3MmPS0weDEwMDAwMDF9ZnVuY3Rpb24gaVgoZSxuKXtpZihcInN0eWxlc2hlZXRcIiE9PW4udHlwZXx8MCE9KDQmbi5zdGF0ZS5sb2FkaW5nKSllLmZsYWdzJj0tMHgxMDAwMDAxO2Vsc2UgaWYoZS5mbGFnc3w9MHgxMDAwMDAwLCFjMChuKSlpZihzZigpKWUuZmxhZ3N8PTgxOTI7ZWxzZSB0aHJvdyBvYz1vaSxvb31mdW5jdGlvbiBpSyhlLG4pe251bGwhPT1uJiYoZS5mbGFnc3w9NCksMTYzODQmZS5mbGFncyYmKG49MjIhPT1lLnRhZz9lQSgpOjB4MjAwMDAwMDAsZS5sYW5lc3w9bixsWHw9bil9ZnVuY3Rpb24gaVEoZSxuKXtpZighclMpc3dpdGNoKGUudGFpbE1vZGUpe2Nhc2VcImhpZGRlblwiOm49ZS50YWlsO2Zvcih2YXIgdD1udWxsO251bGwhPT1uOyludWxsIT09bi5hbHRlcm5hdGUmJih0PW4pLG49bi5zaWJsaW5nO251bGw9PT10P2UudGFpbD1udWxsOnQuc2libGluZz1udWxsO2JyZWFrO2Nhc2VcImNvbGxhcHNlZFwiOnQ9ZS50YWlsO2Zvcih2YXIgcj1udWxsO251bGwhPT10OyludWxsIT09dC5hbHRlcm5hdGUmJihyPXQpLHQ9dC5zaWJsaW5nO251bGw9PT1yP258fG51bGw9PT1lLnRhaWw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpyLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gaUcoZSl7dmFyIG49bnVsbCE9PWUuYWx0ZXJuYXRlJiZlLmFsdGVybmF0ZS5jaGlsZD09PWUuY2hpbGQsdD0wLHI9MDtpZihuKWZvcih2YXIgbz1lLmNoaWxkO251bGwhPT1vOyl0fD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD0weDNlMDAwMDAmby5zdWJ0cmVlRmxhZ3Mscnw9MHgzZTAwMDAwJm8uZmxhZ3Msby5yZXR1cm49ZSxvPW8uc2libGluZztlbHNlIGZvcihvPWUuY2hpbGQ7bnVsbCE9PW87KXR8PW8ubGFuZXN8by5jaGlsZExhbmVzLHJ8PW8uc3VidHJlZUZsYWdzLHJ8PW8uZmxhZ3Msby5yZXR1cm49ZSxvPW8uc2libGluZztyZXR1cm4gZS5zdWJ0cmVlRmxhZ3N8PXIsZS5jaGlsZExhbmVzPXQsbn1mdW5jdGlvbiBpSihlLG4pe3N3aXRjaChyayhuKSxuLnRhZyl7Y2FzZSAzOnJVKHIwKSxXKCk7YnJlYWs7Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNTpaKG4pO2JyZWFrO2Nhc2UgNDpXKCk7YnJlYWs7Y2FzZSAzMTpudWxsIT09bi5tZW1vaXplZFN0YXRlJiZvcShuKTticmVhaztjYXNlIDEzOm9xKG4pO2JyZWFrO2Nhc2UgMTk6TShvVyk7YnJlYWs7Y2FzZSAxMDpyVShuLnR5cGUpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzpvcShuKSxvQigpLG51bGwhPT1lJiZNKHI3KTticmVhaztjYXNlIDI0OnJVKHIwKX19ZnVuY3Rpb24gaTAoZSxuKXt0cnl7dmFyIHQ9bi51cGRhdGVRdWV1ZSxyPW51bGwhPT10P3QubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1yKXt2YXIgbz1yLm5leHQ7dD1vO2Rve2lmKCh0LnRhZyZlKT09PWUpe3I9dm9pZCAwO3ZhciBhPXQuY3JlYXRlO3QuaW5zdC5kZXN0cm95PXI9YSgpfXQ9dC5uZXh0fXdoaWxlKHQhPT1vKX19Y2F0Y2goZSl7c1AobixuLnJldHVybixlKX19ZnVuY3Rpb24gaTEoZSxuLHQpe3RyeXt2YXIgcj1uLnVwZGF0ZVF1ZXVlLG89bnVsbCE9PXI/ci5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PW8pe3ZhciBhPW8ubmV4dDtyPWE7ZG97aWYoKHIudGFnJmUpPT09ZSl7dmFyIGk9ci5pbnN0LGw9aS5kZXN0cm95O2lmKHZvaWQgMCE9PWwpe2kuZGVzdHJveT12b2lkIDAsbz1uO3RyeXtsKCl9Y2F0Y2goZSl7c1Aobyx0LGUpfX19cj1yLm5leHR9d2hpbGUociE9PWEpfX1jYXRjaChlKXtzUChuLG4ucmV0dXJuLGUpfX1mdW5jdGlvbiBpMihlKXt2YXIgbj1lLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1uKXt2YXIgdD1lLnN0YXRlTm9kZTt0cnl7b0wobix0KX1jYXRjaChuKXtzUChlLGUucmV0dXJuLG4pfX19ZnVuY3Rpb24gaTQoZSxuLHQpe3QucHJvcHM9aWMoZS50eXBlLGUubWVtb2l6ZWRQcm9wcyksdC5zdGF0ZT1lLm1lbW9pemVkU3RhdGU7dHJ5e3QuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaCh0KXtzUChlLG4sdCl9fWZ1bmN0aW9uIGk1KGUsbil7dHJ5e3ZhciB0PWUucmVmO2lmKG51bGwhPT10KXtzd2l0Y2goZS50YWcpe2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6dmFyIHI9ZS5zdGF0ZU5vZGU7YnJlYWs7ZGVmYXVsdDpyPWUuc3RhdGVOb2RlfVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZS5yZWZDbGVhbnVwPXQocik6dC5jdXJyZW50PXJ9fWNhdGNoKHQpe3NQKGUsbix0KX19ZnVuY3Rpb24gaTMoZSxuKXt2YXIgdD1lLnJlZixyPWUucmVmQ2xlYW51cDtpZihudWxsIT09dClpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXRyeXtyKCl9Y2F0Y2godCl7c1AoZSxuLHQpfWZpbmFsbHl7ZS5yZWZDbGVhbnVwPW51bGwsbnVsbCE9KGU9ZS5hbHRlcm5hdGUpJiYoZS5yZWZDbGVhbnVwPW51bGwpfWVsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl0cnl7dChudWxsKX1jYXRjaCh0KXtzUChlLG4sdCl9ZWxzZSB0LmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBpNihlKXt2YXIgbj1lLnR5cGUsdD1lLm1lbW9pemVkUHJvcHMscj1lLnN0YXRlTm9kZTt0cnl7c3dpdGNoKG4pe2Nhc2VcImJ1dHRvblwiOmNhc2VcImlucHV0XCI6Y2FzZVwic2VsZWN0XCI6Y2FzZVwidGV4dGFyZWFcIjp0LmF1dG9Gb2N1cyYmci5mb2N1cygpO2JyZWFrO2Nhc2VcImltZ1wiOnQuc3JjP3Iuc3JjPXQuc3JjOnQuc3JjU2V0JiYoci5zcmNzZXQ9dC5zcmNTZXQpfX1jYXRjaChuKXtzUChlLGUucmV0dXJuLG4pfX1mdW5jdGlvbiBpOShlLG4sdCl7dHJ5e3ZhciByPWUuc3RhdGVOb2RlOyhmdW5jdGlvbihlLG4sdCxyKXtzd2l0Y2gobil7Y2FzZVwiZGl2XCI6Y2FzZVwic3BhblwiOmNhc2VcInN2Z1wiOmNhc2VcInBhdGhcIjpjYXNlXCJhXCI6Y2FzZVwiZ1wiOmNhc2VcInBcIjpjYXNlXCJsaVwiOmJyZWFrO2Nhc2VcImlucHV0XCI6dmFyIG89bnVsbCxhPW51bGwsaT1udWxsLHM9bnVsbCxjPW51bGwsdT1udWxsLGQ9bnVsbDtmb3IoaCBpbiB0KXt2YXIgZj10W2hdO2lmKHQuaGFzT3duUHJvcGVydHkoaCkmJm51bGwhPWYpc3dpdGNoKGgpe2Nhc2VcImNoZWNrZWRcIjpjYXNlXCJ2YWx1ZVwiOmJyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOmM9ZjtkZWZhdWx0OnIuaGFzT3duUHJvcGVydHkoaCl8fGNsKGUsbixoLG51bGwscixmKX19Zm9yKHZhciBwIGluIHIpe3ZhciBoPXJbcF07aWYoZj10W3BdLHIuaGFzT3duUHJvcGVydHkocCkmJihudWxsIT1ofHxudWxsIT1mKSlzd2l0Y2gocCl7Y2FzZVwidHlwZVwiOmE9aDticmVhaztjYXNlXCJuYW1lXCI6bz1oO2JyZWFrO2Nhc2VcImNoZWNrZWRcIjp1PWg7YnJlYWs7Y2FzZVwiZGVmYXVsdENoZWNrZWRcIjpkPWg7YnJlYWs7Y2FzZVwidmFsdWVcIjppPWg7YnJlYWs7Y2FzZVwiZGVmYXVsdFZhbHVlXCI6cz1oO2JyZWFrO2Nhc2VcImNoaWxkcmVuXCI6Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1oKXRocm93IEVycm9yKGwoMTM3LG4pKTticmVhaztkZWZhdWx0OmghPT1mJiZjbChlLG4scCxoLHIsZil9fW50KGUsaSxzLGMsdSxkLGEsbyk7cmV0dXJuO2Nhc2VcInNlbGVjdFwiOmZvcihhIGluIGg9aT1zPXA9bnVsbCx0KWlmKGM9dFthXSx0Lmhhc093blByb3BlcnR5KGEpJiZudWxsIT1jKXN3aXRjaChhKXtjYXNlXCJ2YWx1ZVwiOmJyZWFrO2Nhc2VcIm11bHRpcGxlXCI6aD1jO2RlZmF1bHQ6ci5oYXNPd25Qcm9wZXJ0eShhKXx8Y2woZSxuLGEsbnVsbCxyLGMpfWZvcihvIGluIHIpaWYoYT1yW29dLGM9dFtvXSxyLmhhc093blByb3BlcnR5KG8pJiYobnVsbCE9YXx8bnVsbCE9Yykpc3dpdGNoKG8pe2Nhc2VcInZhbHVlXCI6cD1hO2JyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOnM9YTticmVhaztjYXNlXCJtdWx0aXBsZVwiOmk9YTtkZWZhdWx0OmEhPT1jJiZjbChlLG4sbyxhLHIsYyl9bj1zLHQ9aSxyPWgsbnVsbCE9cD9uYShlLCEhdCxwLCExKTohIXIhPSEhdCYmKG51bGwhPW4/bmEoZSwhIXQsbiwhMCk6bmEoZSwhIXQsdD9bXTpcIlwiLCExKSk7cmV0dXJuO2Nhc2VcInRleHRhcmVhXCI6Zm9yKHMgaW4gaD1wPW51bGwsdClpZihvPXRbc10sdC5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9byYmIXIuaGFzT3duUHJvcGVydHkocykpc3dpdGNoKHMpe2Nhc2VcInZhbHVlXCI6Y2FzZVwiY2hpbGRyZW5cIjpicmVhaztkZWZhdWx0OmNsKGUsbixzLG51bGwscixvKX1mb3IoaSBpbiByKWlmKG89cltpXSxhPXRbaV0sci5oYXNPd25Qcm9wZXJ0eShpKSYmKG51bGwhPW98fG51bGwhPWEpKXN3aXRjaChpKXtjYXNlXCJ2YWx1ZVwiOnA9bzticmVhaztjYXNlXCJkZWZhdWx0VmFsdWVcIjpoPW87YnJlYWs7Y2FzZVwiY2hpbGRyZW5cIjpicmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPW8pdGhyb3cgRXJyb3IobCg5MSkpO2JyZWFrO2RlZmF1bHQ6byE9PWEmJmNsKGUsbixpLG8scixhKX1uaShlLHAsaCk7cmV0dXJuO2Nhc2VcIm9wdGlvblwiOmZvcih2YXIgZyBpbiB0KXA9dFtnXSx0Lmhhc093blByb3BlcnR5KGcpJiZudWxsIT1wJiYhci5oYXNPd25Qcm9wZXJ0eShnKSYmKFwic2VsZWN0ZWRcIj09PWc/ZS5zZWxlY3RlZD0hMTpjbChlLG4sZyxudWxsLHIscCkpO2ZvcihjIGluIHIpcD1yW2NdLGg9dFtjXSxyLmhhc093blByb3BlcnR5KGMpJiZwIT09aCYmKG51bGwhPXB8fG51bGwhPWgpJiYoXCJzZWxlY3RlZFwiPT09Yz9lLnNlbGVjdGVkPXAmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHAmJlwic3ltYm9sXCIhPXR5cGVvZiBwOmNsKGUsbixjLHAscixoKSk7cmV0dXJuO2Nhc2VcImltZ1wiOmNhc2VcImxpbmtcIjpjYXNlXCJhcmVhXCI6Y2FzZVwiYmFzZVwiOmNhc2VcImJyXCI6Y2FzZVwiY29sXCI6Y2FzZVwiZW1iZWRcIjpjYXNlXCJoclwiOmNhc2VcImtleWdlblwiOmNhc2VcIm1ldGFcIjpjYXNlXCJwYXJhbVwiOmNhc2VcInNvdXJjZVwiOmNhc2VcInRyYWNrXCI6Y2FzZVwid2JyXCI6Y2FzZVwibWVudWl0ZW1cIjpmb3IodmFyIG0gaW4gdClwPXRbbV0sdC5oYXNPd25Qcm9wZXJ0eShtKSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkobSkmJmNsKGUsbixtLG51bGwscixwKTtmb3IodSBpbiByKWlmKHA9clt1XSxoPXRbdV0sci5oYXNPd25Qcm9wZXJ0eSh1KSYmcCE9PWgmJihudWxsIT1wfHxudWxsIT1oKSlzd2l0Y2godSl7Y2FzZVwiY2hpbGRyZW5cIjpjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXApdGhyb3cgRXJyb3IobCgxMzcsbikpO2JyZWFrO2RlZmF1bHQ6Y2woZSxuLHUscCxyLGgpfXJldHVybjtkZWZhdWx0OmlmKG5mKG4pKXtmb3IodmFyIHYgaW4gdClwPXRbdl0sdC5oYXNPd25Qcm9wZXJ0eSh2KSYmdm9pZCAwIT09cCYmIXIuaGFzT3duUHJvcGVydHkodikmJmNzKGUsbix2LHZvaWQgMCxyLHApO2ZvcihkIGluIHIpcD1yW2RdLGg9dFtkXSxyLmhhc093blByb3BlcnR5KGQpJiZwIT09aCYmKHZvaWQgMCE9PXB8fHZvaWQgMCE9PWgpJiZjcyhlLG4sZCxwLHIsaCk7cmV0dXJufX1mb3IodmFyIGIgaW4gdClwPXRbYl0sdC5oYXNPd25Qcm9wZXJ0eShiKSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkoYikmJmNsKGUsbixiLG51bGwscixwKTtmb3IoZiBpbiByKXA9cltmXSxoPXRbZl0sci5oYXNPd25Qcm9wZXJ0eShmKSYmcCE9PWgmJihudWxsIT1wfHxudWxsIT1oKSYmY2woZSxuLGYscCxyLGgpfSkocixlLnR5cGUsdCxuKSxyW2VEXT1ufWNhdGNoKG4pe3NQKGUsZS5yZXR1cm4sbil9fWZ1bmN0aW9uIGk4KGUpe3JldHVybiA1PT09ZS50YWd8fDM9PT1lLnRhZ3x8MjY9PT1lLnRhZ3x8Mjc9PT1lLnRhZyYmY2ooZS50eXBlKXx8ND09PWUudGFnfWZ1bmN0aW9uIGk3KGUpe2U6Zm9yKDs7KXtmb3IoO251bGw9PT1lLnNpYmxpbmc7KXtpZihudWxsPT09ZS5yZXR1cm58fGk4KGUucmV0dXJuKSlyZXR1cm4gbnVsbDtlPWUucmV0dXJufWZvcihlLnNpYmxpbmcucmV0dXJuPWUucmV0dXJuLGU9ZS5zaWJsaW5nOzUhPT1lLnRhZyYmNiE9PWUudGFnJiYxOCE9PWUudGFnOyl7aWYoMjc9PT1lLnRhZyYmY2ooZS50eXBlKXx8MiZlLmZsYWdzfHxudWxsPT09ZS5jaGlsZHx8ND09PWUudGFnKWNvbnRpbnVlIGU7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGR9aWYoISgyJmUuZmxhZ3MpKXJldHVybiBlLnN0YXRlTm9kZX19ZnVuY3Rpb24gbGUoZSxuLHQpe3ZhciByPWUudGFnO2lmKDU9PT1yfHw2PT09cillPWUuc3RhdGVOb2RlLG4/dC5pbnNlcnRCZWZvcmUoZSxuKTp0LmFwcGVuZENoaWxkKGUpO2Vsc2UgaWYoNCE9PXImJigyNz09PXImJmNqKGUudHlwZSkmJih0PWUuc3RhdGVOb2RlKSxudWxsIT09KGU9ZS5jaGlsZCkpKWZvcihsZShlLG4sdCksZT1lLnNpYmxpbmc7bnVsbCE9PWU7KWxlKGUsbix0KSxlPWUuc2libGluZ31mdW5jdGlvbiBsbihlKXt2YXIgbj1lLnN0YXRlTm9kZSx0PWUubWVtb2l6ZWRQcm9wczt0cnl7Zm9yKHZhciByPWUudHlwZSxvPW4uYXR0cmlidXRlcztvLmxlbmd0aDspbi5yZW1vdmVBdHRyaWJ1dGVOb2RlKG9bMF0pO2NjKG4scix0KSxuW2VOXT1lLG5bZURdPXR9Y2F0Y2gobil7c1AoZSxlLnJldHVybixuKX19dmFyIGx0PSExLGxyPSExLGxvPSExLGxhPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtTZXQ/V2Vha1NldDpTZXQsbGk9bnVsbDtmdW5jdGlvbiBsbChlLG4sdCl7dmFyIHI9dC5mbGFncztzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6bHkoZSx0KSw0JnImJmkwKDUsdCk7YnJlYWs7Y2FzZSAxOmlmKGx5KGUsdCksNCZyKWlmKGU9dC5zdGF0ZU5vZGUsbnVsbD09PW4pdHJ5e2UuY29tcG9uZW50RGlkTW91bnQoKX1jYXRjaChlKXtzUCh0LHQucmV0dXJuLGUpfWVsc2V7dmFyIG89aWModC50eXBlLG4ubWVtb2l6ZWRQcm9wcyk7bj1uLm1lbW9pemVkU3RhdGU7dHJ5e2UuY29tcG9uZW50RGlkVXBkYXRlKG8sbixlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKX1jYXRjaChlKXtzUCh0LHQucmV0dXJuLGUpfX02NCZyJiZpMih0KSw1MTImciYmaTUodCx0LnJldHVybik7YnJlYWs7Y2FzZSAzOmlmKGx5KGUsdCksNjQmciYmbnVsbCE9PShlPXQudXBkYXRlUXVldWUpKXtpZihuPW51bGwsbnVsbCE9PXQuY2hpbGQpc3dpdGNoKHQuY2hpbGQudGFnKXtjYXNlIDI3OmNhc2UgNTpjYXNlIDE6bj10LmNoaWxkLnN0YXRlTm9kZX10cnl7b0woZSxuKX1jYXRjaChlKXtzUCh0LHQucmV0dXJuLGUpfX1icmVhaztjYXNlIDI3Om51bGw9PT1uJiY0JnImJmxuKHQpO2Nhc2UgMjY6Y2FzZSA1Omx5KGUsdCksbnVsbD09PW4mJjQmciYmaTYodCksNTEyJnImJmk1KHQsdC5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6ZGVmYXVsdDpseShlLHQpO2JyZWFrO2Nhc2UgMzE6bHkoZSx0KSw0JnImJmxmKGUsdCk7YnJlYWs7Y2FzZSAxMzpseShlLHQpLDQmciYmbHAoZSx0KSw2NCZyJiZudWxsIT09KGU9dC5tZW1vaXplZFN0YXRlKSYmbnVsbCE9PShlPWUuZGVoeWRyYXRlZCkmJmZ1bmN0aW9uKGUsbil7dmFyIHQ9ZS5vd25lckRvY3VtZW50O2lmKFwiJH5cIj09PWUuZGF0YSllLl9yZWFjdFJldHJ5PW47ZWxzZSBpZihcIiQ/XCIhPT1lLmRhdGF8fFwibG9hZGluZ1wiIT09dC5yZWFkeVN0YXRlKW4oKTtlbHNle3ZhciByPWZ1bmN0aW9uKCl7bigpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixyKX07dC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLHIpLGUuX3JlYWN0UmV0cnk9cn19KGUsdD1zUi5iaW5kKG51bGwsdCkpO2JyZWFrO2Nhc2UgMjI6aWYoIShyPW51bGwhPT10Lm1lbW9pemVkU3RhdGV8fGx0KSl7bj1udWxsIT09biYmbnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZXx8bHIsbz1sdDt2YXIgYT1scjtsdD1yLChscj1uKSYmIWE/ZnVuY3Rpb24gZShuLHQscil7Zm9yKHI9ciYmMCE9KDg3NzImdC5zdWJ0cmVlRmxhZ3MpLHQ9dC5jaGlsZDtudWxsIT09dDspe3ZhciBvPXQuYWx0ZXJuYXRlLGE9bixpPXQsbD1pLmZsYWdzO3N3aXRjaChpLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTplKGEsaSxyKSxpMCg0LGkpO2JyZWFrO2Nhc2UgMTppZihlKGEsaSxyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZihhPShvPWkpLnN0YXRlTm9kZSkuY29tcG9uZW50RGlkTW91bnQpdHJ5e2EuY29tcG9uZW50RGlkTW91bnQoKX1jYXRjaChlKXtzUChvLG8ucmV0dXJuLGUpfWlmKG51bGwhPT0oYT0obz1pKS51cGRhdGVRdWV1ZSkpe3ZhciBzPW8uc3RhdGVOb2RlO3RyeXt2YXIgYz1hLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7aWYobnVsbCE9PWMpZm9yKGEuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcz1udWxsLGE9MDthPGMubGVuZ3RoO2ErKylveihjW2FdLHMpfWNhdGNoKGUpe3NQKG8sby5yZXR1cm4sZSl9fXImJjY0JmwmJmkyKGkpLGk1KGksaS5yZXR1cm4pO2JyZWFrO2Nhc2UgMjc6bG4oaSk7Y2FzZSAyNjpjYXNlIDU6ZShhLGksciksciYmbnVsbD09PW8mJjQmbCYmaTYoaSksaTUoaSxpLnJldHVybik7YnJlYWs7Y2FzZSAxMjpkZWZhdWx0OmUoYSxpLHIpO2JyZWFrO2Nhc2UgMzE6ZShhLGksciksciYmNCZsJiZsZihhLGkpO2JyZWFrO2Nhc2UgMTM6ZShhLGksciksciYmNCZsJiZscChhLGkpO2JyZWFrO2Nhc2UgMjI6bnVsbD09PWkubWVtb2l6ZWRTdGF0ZSYmZShhLGksciksaTUoaSxpLnJldHVybik7Y2FzZSAzMDp9dD10LnNpYmxpbmd9fShlLHQsMCE9KDg3NzImdC5zdWJ0cmVlRmxhZ3MpKTpseShlLHQpLGx0PW8sbHI9YX1jYXNlIDMwOn19dmFyIGxzPW51bGwsbGM9ITE7ZnVuY3Rpb24gbHUoZSxuLHQpe2Zvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KWxkKGUsbix0KSx0PXQuc2libGluZ31mdW5jdGlvbiBsZChlLG4sdCl7aWYoZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLm9uQ29tbWl0RmliZXJVbm1vdW50KXRyeXtlcC5vbkNvbW1pdEZpYmVyVW5tb3VudChlZix0KX1jYXRjaChlKXt9c3dpdGNoKHQudGFnKXtjYXNlIDI2OmxyfHxpMyh0LG4pLGx1KGUsbix0KSx0Lm1lbW9pemVkU3RhdGU/dC5tZW1vaXplZFN0YXRlLmNvdW50LS06dC5zdGF0ZU5vZGUmJih0PXQuc3RhdGVOb2RlKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpO2JyZWFrO2Nhc2UgMjc6bHJ8fGkzKHQsbik7dmFyIHI9bHMsbz1sYztjaih0LnR5cGUpJiYobHM9dC5zdGF0ZU5vZGUsbGM9ITEpLGx1KGUsbix0KSxjUih0LnN0YXRlTm9kZSksbHM9cixsYz1vO2JyZWFrO2Nhc2UgNTpscnx8aTModCxuKTtjYXNlIDY6aWYocj1scyxvPWxjLGxzPW51bGwsbHUoZSxuLHQpLGxzPXIsbGM9byxudWxsIT09bHMpaWYobGMpdHJ5eyg5PT09bHMubm9kZVR5cGU/bHMuYm9keTpcIkhUTUxcIj09PWxzLm5vZGVOYW1lP2xzLm93bmVyRG9jdW1lbnQuYm9keTpscykucmVtb3ZlQ2hpbGQodC5zdGF0ZU5vZGUpfWNhdGNoKGUpe3NQKHQsbixlKX1lbHNlIHRyeXtscy5yZW1vdmVDaGlsZCh0LnN0YXRlTm9kZSl9Y2F0Y2goZSl7c1AodCxuLGUpfWJyZWFrO2Nhc2UgMTg6bnVsbCE9PWxzJiYobGM/KGNrKDk9PT0oZT1scykubm9kZVR5cGU/ZS5ib2R5OlwiSFRNTFwiPT09ZS5ub2RlTmFtZT9lLm93bmVyRG9jdW1lbnQuYm9keTplLHQuc3RhdGVOb2RlKSx1RShlKSk6Y2sobHMsdC5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDQ6cj1scyxvPWxjLGxzPXQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sbGM9ITAsbHUoZSxuLHQpLGxzPXIsbGM9bzticmVhaztjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6bHJ8fGkxKDIsdCxuKSxscnx8aTEoNCx0LG4pLGx1KGUsbix0KTticmVhaztjYXNlIDE6bHJ8fChpMyh0LG4pLFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC5zdGF0ZU5vZGUpLmNvbXBvbmVudFdpbGxVbm1vdW50JiZpNCh0LG4scikpLGx1KGUsbix0KTticmVhaztjYXNlIDIxOmRlZmF1bHQ6bHUoZSxuLHQpO2JyZWFrO2Nhc2UgMjI6bHI9KHI9bHIpfHxudWxsIT09dC5tZW1vaXplZFN0YXRlLGx1KGUsbix0KSxscj1yfX1mdW5jdGlvbiBsZihlLG4pe2lmKG51bGw9PT1uLm1lbW9pemVkU3RhdGUmJm51bGwhPT0oZT1uLmFsdGVybmF0ZSkmJm51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpKXtlPWUuZGVoeWRyYXRlZDt0cnl7dUUoZSl9Y2F0Y2goZSl7c1AobixuLnJldHVybixlKX19fWZ1bmN0aW9uIGxwKGUsbil7aWYobnVsbD09PW4ubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PShlPW4uYWx0ZXJuYXRlKSYmbnVsbCE9PShlPWUubWVtb2l6ZWRTdGF0ZSkmJm51bGwhPT0oZT1lLmRlaHlkcmF0ZWQpKXRyeXt1RShlKX1jYXRjaChlKXtzUChuLG4ucmV0dXJuLGUpfX1mdW5jdGlvbiBsaChlLG4pe3ZhciB0PWZ1bmN0aW9uKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAzMTpjYXNlIDEzOmNhc2UgMTk6dmFyIG49ZS5zdGF0ZU5vZGU7cmV0dXJuIG51bGw9PT1uJiYobj1lLnN0YXRlTm9kZT1uZXcgbGEpLG47Y2FzZSAyMjpyZXR1cm4gbnVsbD09PShuPShlPWUuc3RhdGVOb2RlKS5fcmV0cnlDYWNoZSkmJihuPWUuX3JldHJ5Q2FjaGU9bmV3IGxhKSxuO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0MzUsZS50YWcpKX19KGUpO24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1zTi5iaW5kKG51bGwsZSxuKTt0LmhhcyhuKXx8KHQuYWRkKG4pLG4udGhlbihyLHIpKX0pfWZ1bmN0aW9uIGxnKGUsbil7dmFyIHQ9bi5kZWxldGlvbnM7aWYobnVsbCE9PXQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl0sYT1lLGk9bixzPWk7ZTpmb3IoO251bGwhPT1zOyl7c3dpdGNoKHMudGFnKXtjYXNlIDI3OmlmKGNqKHMudHlwZSkpe2xzPXMuc3RhdGVOb2RlLGxjPSExO2JyZWFrIGV9YnJlYWs7Y2FzZSA1OmxzPXMuc3RhdGVOb2RlLGxjPSExO2JyZWFrIGU7Y2FzZSAzOmNhc2UgNDpscz1zLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGxjPSEwO2JyZWFrIGV9cz1zLnJldHVybn1pZihudWxsPT09bHMpdGhyb3cgRXJyb3IobCgxNjApKTtsZChhLGksbyksbHM9bnVsbCxsYz0hMSxudWxsIT09KGE9by5hbHRlcm5hdGUpJiYoYS5yZXR1cm49bnVsbCksby5yZXR1cm49bnVsbH1pZigxMzg3OCZuLnN1YnRyZWVGbGFncylmb3Iobj1uLmNoaWxkO251bGwhPT1uOylsdihuLGUpLG49bi5zaWJsaW5nfXZhciBsbT1udWxsO2Z1bmN0aW9uIGx2KGUsbil7dmFyIHQ9ZS5hbHRlcm5hdGUscj1lLmZsYWdzO3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmxnKG4sZSksbGIoZSksNCZyJiYoaTEoMyxlLGUucmV0dXJuKSxpMCgzLGUpLGkxKDUsZSxlLnJldHVybikpO2JyZWFrO2Nhc2UgMTpsZyhuLGUpLGxiKGUpLDUxMiZyJiYobHJ8fG51bGw9PT10fHxpMyh0LHQucmV0dXJuKSksNjQmciYmbHQmJm51bGwhPT0oZT1lLnVwZGF0ZVF1ZXVlKSYmbnVsbCE9PShyPWUuY2FsbGJhY2tzKSYmKHQ9ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzLGUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcz1udWxsPT09dD9yOnQuY29uY2F0KHIpKTticmVhaztjYXNlIDI2OnZhciBvPWxtO2lmKGxnKG4sZSksbGIoZSksNTEyJnImJihscnx8bnVsbD09PXR8fGkzKHQsdC5yZXR1cm4pKSw0JnIpe3ZhciBhPW51bGwhPT10P3QubWVtb2l6ZWRTdGF0ZTpudWxsO2lmKHI9ZS5tZW1vaXplZFN0YXRlLG51bGw9PT10KWlmKG51bGw9PT1yKWlmKG51bGw9PT1lLnN0YXRlTm9kZSl7ZTp7cj1lLnR5cGUsdD1lLm1lbW9pemVkUHJvcHMsbz1vLm93bmVyRG9jdW1lbnR8fG87bjpzd2l0Y2gocil7Y2FzZVwidGl0bGVcIjooIShhPW8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0aXRsZVwiKVswXSl8fGFbZVVdfHxhW2VOXXx8XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT09YS5uYW1lc3BhY2VVUkl8fGEuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpJiYoYT1vLmNyZWF0ZUVsZW1lbnQociksby5oZWFkLmluc2VydEJlZm9yZShhLG8ucXVlcnlTZWxlY3RvcihcImhlYWQgPiB0aXRsZVwiKSkpLGNjKGEscix0KSxhW2VOXT1lLGVZKGEpLHI9YTticmVhayBlO2Nhc2VcImxpbmtcIjp2YXIgaT1jRyhcImxpbmtcIixcImhyZWZcIixvKS5nZXQocisodC5ocmVmfHxcIlwiKSk7aWYoaSl7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaWYoKGE9aVtzXSkuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKT09PShudWxsPT10LmhyZWZ8fFwiXCI9PT10LmhyZWY/bnVsbDp0LmhyZWYpJiZhLmdldEF0dHJpYnV0ZShcInJlbFwiKT09PShudWxsPT10LnJlbD9udWxsOnQucmVsKSYmYS5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKT09PShudWxsPT10LnRpdGxlP251bGw6dC50aXRsZSkmJmEuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIik9PT0obnVsbD09dC5jcm9zc09yaWdpbj9udWxsOnQuY3Jvc3NPcmlnaW4pKXtpLnNwbGljZShzLDEpO2JyZWFrIG59fWNjKGE9by5jcmVhdGVFbGVtZW50KHIpLHIsdCksby5oZWFkLmFwcGVuZENoaWxkKGEpO2JyZWFrO2Nhc2VcIm1ldGFcIjppZihpPWNHKFwibWV0YVwiLFwiY29udGVudFwiLG8pLmdldChyKyh0LmNvbnRlbnR8fFwiXCIpKSl7Zm9yKHM9MDtzPGkubGVuZ3RoO3MrKylpZigoYT1pW3NdKS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpPT09KG51bGw9PXQuY29udGVudD9udWxsOlwiXCIrdC5jb250ZW50KSYmYS5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpPT09KG51bGw9PXQubmFtZT9udWxsOnQubmFtZSkmJmEuZ2V0QXR0cmlidXRlKFwicHJvcGVydHlcIik9PT0obnVsbD09dC5wcm9wZXJ0eT9udWxsOnQucHJvcGVydHkpJiZhLmdldEF0dHJpYnV0ZShcImh0dHAtZXF1aXZcIik9PT0obnVsbD09dC5odHRwRXF1aXY/bnVsbDp0Lmh0dHBFcXVpdikmJmEuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKT09PShudWxsPT10LmNoYXJTZXQ/bnVsbDp0LmNoYXJTZXQpKXtpLnNwbGljZShzLDEpO2JyZWFrIG59fWNjKGE9by5jcmVhdGVFbGVtZW50KHIpLHIsdCksby5oZWFkLmFwcGVuZENoaWxkKGEpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0NjgscikpfWFbZU5dPWUsZVkoYSkscj1hfWUuc3RhdGVOb2RlPXJ9ZWxzZSBjSihvLGUudHlwZSxlLnN0YXRlTm9kZSk7ZWxzZSBlLnN0YXRlTm9kZT1jWihvLHIsZS5tZW1vaXplZFByb3BzKTtlbHNlIGEhPT1yPyhudWxsPT09YT9udWxsIT09dC5zdGF0ZU5vZGUmJih0PXQuc3RhdGVOb2RlKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpOmEuY291bnQtLSxudWxsPT09cj9jSihvLGUudHlwZSxlLnN0YXRlTm9kZSk6Y1oobyxyLGUubWVtb2l6ZWRQcm9wcykpOm51bGw9PT1yJiZudWxsIT09ZS5zdGF0ZU5vZGUmJmk5KGUsZS5tZW1vaXplZFByb3BzLHQubWVtb2l6ZWRQcm9wcyl9YnJlYWs7Y2FzZSAyNzpsZyhuLGUpLGxiKGUpLDUxMiZyJiYobHJ8fG51bGw9PT10fHxpMyh0LHQucmV0dXJuKSksbnVsbCE9PXQmJjQmciYmaTkoZSxlLm1lbW9pemVkUHJvcHMsdC5tZW1vaXplZFByb3BzKTticmVhaztjYXNlIDU6aWYobGcobixlKSxsYihlKSw1MTImciYmKGxyfHxudWxsPT09dHx8aTModCx0LnJldHVybikpLDMyJmUuZmxhZ3Mpe289ZS5zdGF0ZU5vZGU7dHJ5e25zKG8sXCJcIil9Y2F0Y2gobil7c1AoZSxlLnJldHVybixuKX19NCZyJiZudWxsIT1lLnN0YXRlTm9kZSYmKG89ZS5tZW1vaXplZFByb3BzLGk5KGUsbyxudWxsIT09dD90Lm1lbW9pemVkUHJvcHM6bykpLDEwMjQmciYmKGxvPSEwKTticmVhaztjYXNlIDY6aWYobGcobixlKSxsYihlKSw0JnIpe2lmKG51bGw9PT1lLnN0YXRlTm9kZSl0aHJvdyBFcnJvcihsKDE2MikpO3I9ZS5tZW1vaXplZFByb3BzLHQ9ZS5zdGF0ZU5vZGU7dHJ5e3Qubm9kZVZhbHVlPXJ9Y2F0Y2gobil7c1AoZSxlLnJldHVybixuKX19YnJlYWs7Y2FzZSAzOmlmKGNRPW51bGwsbz1sbSxsbT1jQihuLmNvbnRhaW5lckluZm8pLGxnKG4sZSksbG09byxsYihlKSw0JnImJm51bGwhPT10JiZ0Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXRyeXt1RShuLmNvbnRhaW5lckluZm8pfWNhdGNoKG4pe3NQKGUsZS5yZXR1cm4sbil9bG8mJihsbz0hMSxmdW5jdGlvbiBlKG4pe2lmKDEwMjQmbi5zdWJ0cmVlRmxhZ3MpZm9yKG49bi5jaGlsZDtudWxsIT09bjspe3ZhciB0PW47ZSh0KSw1PT09dC50YWcmJjEwMjQmdC5mbGFncyYmdC5zdGF0ZU5vZGUucmVzZXQoKSxuPW4uc2libGluZ319KGUpKTticmVhaztjYXNlIDQ6cj1sbSxsbT1jQihlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxsZyhuLGUpLGxiKGUpLGxtPXI7YnJlYWs7Y2FzZSAxMjpkZWZhdWx0OmxnKG4sZSksbGIoZSk7YnJlYWs7Y2FzZSAzMTpjYXNlIDE5OmxnKG4sZSksbGIoZSksNCZyJiZudWxsIT09KHI9ZS51cGRhdGVRdWV1ZSkmJihlLnVwZGF0ZVF1ZXVlPW51bGwsbGgoZSxyKSk7YnJlYWs7Y2FzZSAxMzpsZyhuLGUpLGxiKGUpLDgxOTImZS5jaGlsZC5mbGFncyYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSE9KG51bGwhPT10JiZudWxsIT09dC5tZW1vaXplZFN0YXRlKSYmKGxKPWVyKCkpLDQmciYmbnVsbCE9PShyPWUudXBkYXRlUXVldWUpJiYoZS51cGRhdGVRdWV1ZT1udWxsLGxoKGUscikpO2JyZWFrO2Nhc2UgMjI6bz1udWxsIT09ZS5tZW1vaXplZFN0YXRlO3ZhciBjPW51bGwhPT10JiZudWxsIT09dC5tZW1vaXplZFN0YXRlLHU9bHQsZD1scjtpZihsdD11fHxvLGxyPWR8fGMsbGcobixlKSxscj1kLGx0PXUsbGIoZSksODE5MiZyKWU6Zm9yKChuPWUuc3RhdGVOb2RlKS5fdmlzaWJpbGl0eT1vPy0yJm4uX3Zpc2liaWxpdHk6MXxuLl92aXNpYmlsaXR5LG8mJihudWxsPT09dHx8Y3x8bHR8fGxyfHxmdW5jdGlvbiBlKG4pe2ZvcihuPW4uY2hpbGQ7bnVsbCE9PW47KXt2YXIgdD1uO3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmkxKDQsdCx0LnJldHVybiksZSh0KTticmVhaztjYXNlIDE6aTModCx0LnJldHVybik7dmFyIHI9dC5zdGF0ZU5vZGU7XCJmdW5jdGlvblwiPT10eXBlb2Ygci5jb21wb25lbnRXaWxsVW5tb3VudCYmaTQodCx0LnJldHVybixyKSxlKHQpO2JyZWFrO2Nhc2UgMjc6Y1IodC5zdGF0ZU5vZGUpO2Nhc2UgMjY6Y2FzZSA1OmkzKHQsdC5yZXR1cm4pLGUodCk7YnJlYWs7Y2FzZSAyMjpudWxsPT09dC5tZW1vaXplZFN0YXRlJiZlKHQpO2JyZWFrO2RlZmF1bHQ6ZSh0KX1uPW4uc2libGluZ319KGUpKSx0PW51bGwsbj1lOzspe2lmKDU9PT1uLnRhZ3x8MjY9PT1uLnRhZyl7aWYobnVsbD09PXQpe2M9dD1uO3RyeXtpZihhPWMuc3RhdGVOb2RlLG8paT1hLnN0eWxlLFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuc2V0UHJvcGVydHk/aS5zZXRQcm9wZXJ0eShcImRpc3BsYXlcIixcIm5vbmVcIixcImltcG9ydGFudFwiKTppLmRpc3BsYXk9XCJub25lXCI7ZWxzZXtzPWMuc3RhdGVOb2RlO3ZhciBmPWMubWVtb2l6ZWRQcm9wcy5zdHlsZSxwPW51bGwhPWYmJmYuaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5XCIpP2YuZGlzcGxheTpudWxsO3Muc3R5bGUuZGlzcGxheT1udWxsPT1wfHxcImJvb2xlYW5cIj09dHlwZW9mIHA/XCJcIjooXCJcIitwKS50cmltKCl9fWNhdGNoKGUpe3NQKGMsYy5yZXR1cm4sZSl9fX1lbHNlIGlmKDY9PT1uLnRhZyl7aWYobnVsbD09PXQpe2M9bjt0cnl7Yy5zdGF0ZU5vZGUubm9kZVZhbHVlPW8/XCJcIjpjLm1lbW9pemVkUHJvcHN9Y2F0Y2goZSl7c1AoYyxjLnJldHVybixlKX19fWVsc2UgaWYoMTg9PT1uLnRhZyl7aWYobnVsbD09PXQpe2M9bjt0cnl7dmFyIGg9Yy5zdGF0ZU5vZGU7bz9jQShoLCEwKTpjQShjLnN0YXRlTm9kZSwhMSl9Y2F0Y2goZSl7c1AoYyxjLnJldHVybixlKX19fWVsc2UgaWYoKDIyIT09bi50YWcmJjIzIT09bi50YWd8fG51bGw9PT1uLm1lbW9pemVkU3RhdGV8fG49PT1lKSYmbnVsbCE9PW4uY2hpbGQpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT1lKWJyZWFrO2Zvcig7bnVsbD09PW4uc2libGluZzspe2lmKG51bGw9PT1uLnJldHVybnx8bi5yZXR1cm49PT1lKWJyZWFrIGU7dD09PW4mJih0PW51bGwpLG49bi5yZXR1cm59dD09PW4mJih0PW51bGwpLG4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9NCZyJiZudWxsIT09KHI9ZS51cGRhdGVRdWV1ZSkmJm51bGwhPT0odD1yLnJldHJ5UXVldWUpJiYoci5yZXRyeVF1ZXVlPW51bGwsbGgoZSx0KSk7Y2FzZSAzMDpjYXNlIDIxOn19ZnVuY3Rpb24gbGIoZSl7dmFyIG49ZS5mbGFncztpZigyJm4pe3RyeXtmb3IodmFyIHQscj1lLnJldHVybjtudWxsIT09cjspe2lmKGk4KHIpKXt0PXI7YnJlYWt9cj1yLnJldHVybn1pZihudWxsPT10KXRocm93IEVycm9yKGwoMTYwKSk7c3dpdGNoKHQudGFnKXtjYXNlIDI3OnZhciBvPXQuc3RhdGVOb2RlLGE9aTcoZSk7bGUoZSxhLG8pO2JyZWFrO2Nhc2UgNTp2YXIgaT10LnN0YXRlTm9kZTszMiZ0LmZsYWdzJiYobnMoaSxcIlwiKSx0LmZsYWdzJj0tMzMpO3ZhciBzPWk3KGUpO2xlKGUscyxpKTticmVhaztjYXNlIDM6Y2FzZSA0OnZhciBjPXQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sdT1pNyhlKTshZnVuY3Rpb24gZShuLHQscil7dmFyIG89bi50YWc7aWYoNT09PW98fDY9PT1vKW49bi5zdGF0ZU5vZGUsdD8oOT09PXIubm9kZVR5cGU/ci5ib2R5OlwiSFRNTFwiPT09ci5ub2RlTmFtZT9yLm93bmVyRG9jdW1lbnQuYm9keTpyKS5pbnNlcnRCZWZvcmUobix0KTooKHQ9OT09PXIubm9kZVR5cGU/ci5ib2R5OlwiSFRNTFwiPT09ci5ub2RlTmFtZT9yLm93bmVyRG9jdW1lbnQuYm9keTpyKS5hcHBlbmRDaGlsZChuKSxudWxsIT0ocj1yLl9yZWFjdFJvb3RDb250YWluZXIpfHxudWxsIT09dC5vbmNsaWNrfHwodC5vbmNsaWNrPW5tKSk7ZWxzZSBpZig0IT09byYmKDI3PT09byYmY2oobi50eXBlKSYmKHI9bi5zdGF0ZU5vZGUsdD1udWxsKSxudWxsIT09KG49bi5jaGlsZCkpKWZvcihlKG4sdCxyKSxuPW4uc2libGluZztudWxsIT09bjspZShuLHQsciksbj1uLnNpYmxpbmd9KGUsdSxjKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGwoMTYxKSl9fWNhdGNoKG4pe3NQKGUsZS5yZXR1cm4sbil9ZS5mbGFncyY9LTN9NDA5NiZuJiYoZS5mbGFncyY9LTQwOTcpfWZ1bmN0aW9uIGx5KGUsbil7aWYoODc3MiZuLnN1YnRyZWVGbGFncylmb3Iobj1uLmNoaWxkO251bGwhPT1uOylsbChlLG4uYWx0ZXJuYXRlLG4pLG49bi5zaWJsaW5nfWZ1bmN0aW9uIGx4KGUsbil7dmFyIHQ9bnVsbDtudWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJih0PWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksZT1udWxsLG51bGwhPT1uLm1lbW9pemVkU3RhdGUmJm51bGwhPT1uLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYoZT1uLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGUhPT10JiYobnVsbCE9ZSYmZS5yZWZDb3VudCsrLG51bGwhPXQmJnIyKHQpKX1mdW5jdGlvbiBsdyhlLG4pe2U9bnVsbCxudWxsIT09bi5hbHRlcm5hdGUmJihlPW4uYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpLChuPW4ubWVtb2l6ZWRTdGF0ZS5jYWNoZSkhPT1lJiYobi5yZWZDb3VudCsrLG51bGwhPWUmJnIyKGUpKX1mdW5jdGlvbiBsaihlLG4sdCxyKXtpZigxMDI1NiZuLnN1YnRyZWVGbGFncylmb3Iobj1uLmNoaWxkO251bGwhPT1uOylsayhlLG4sdCxyKSxuPW4uc2libGluZ31mdW5jdGlvbiBsayhlLG4sdCxyKXt2YXIgbz1uLmZsYWdzO3N3aXRjaChuLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpsaihlLG4sdCxyKSwyMDQ4Jm8mJmkwKDksbik7YnJlYWs7Y2FzZSAxOmNhc2UgMzE6Y2FzZSAxMzpkZWZhdWx0OmxqKGUsbix0LHIpO2JyZWFrO2Nhc2UgMzpsaihlLG4sdCxyKSwyMDQ4Jm8mJihlPW51bGwsbnVsbCE9PW4uYWx0ZXJuYXRlJiYoZT1uLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSwobj1uLm1lbW9pemVkU3RhdGUuY2FjaGUpIT09ZSYmKG4ucmVmQ291bnQrKyxudWxsIT1lJiZyMihlKSkpO2JyZWFrO2Nhc2UgMTI6aWYoMjA0OCZvKXtsaihlLG4sdCxyKSxlPW4uc3RhdGVOb2RlO3RyeXt2YXIgYT1uLm1lbW9pemVkUHJvcHMsaT1hLmlkLGw9YS5vblBvc3RDb21taXQ7XCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbChpLG51bGw9PT1uLmFsdGVybmF0ZT9cIm1vdW50XCI6XCJ1cGRhdGVcIixlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiwtMCl9Y2F0Y2goZSl7c1AobixuLnJldHVybixlKX19ZWxzZSBsaihlLG4sdCxyKTticmVhaztjYXNlIDIzOmJyZWFrO2Nhc2UgMjI6YT1uLnN0YXRlTm9kZSxpPW4uYWx0ZXJuYXRlLG51bGwhPT1uLm1lbW9pemVkU3RhdGU/MiZhLl92aXNpYmlsaXR5P2xqKGUsbix0LHIpOmxBKGUsbik6MiZhLl92aXNpYmlsaXR5P2xqKGUsbix0LHIpOihhLl92aXNpYmlsaXR5fD0yLGZ1bmN0aW9uIGUobix0LHIsbyxhKXtmb3IoYT1hJiYwIT0oMTAyNTYmdC5zdWJ0cmVlRmxhZ3MpLHQ9dC5jaGlsZDtudWxsIT09dDspe3ZhciBpPXQsbD1pLmZsYWdzO3N3aXRjaChpLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTplKG4saSxyLG8sYSksaTAoOCxpKTticmVhaztjYXNlIDIzOmJyZWFrO2Nhc2UgMjI6dmFyIHM9aS5zdGF0ZU5vZGU7bnVsbCE9PWkubWVtb2l6ZWRTdGF0ZT8yJnMuX3Zpc2liaWxpdHk/ZShuLGkscixvLGEpOmxBKG4saSk6KHMuX3Zpc2liaWxpdHl8PTIsZShuLGkscixvLGEpKSxhJiYyMDQ4JmwmJmx4KGkuYWx0ZXJuYXRlLGkpO2JyZWFrO2Nhc2UgMjQ6ZShuLGkscixvLGEpLGEmJjIwNDgmbCYmbHcoaS5hbHRlcm5hdGUsaSk7YnJlYWs7ZGVmYXVsdDplKG4saSxyLG8sYSl9dD10LnNpYmxpbmd9fShlLG4sdCxyLDAhPSgxMDI1NiZuLnN1YnRyZWVGbGFncykpKSwyMDQ4Jm8mJmx4KGksbik7YnJlYWs7Y2FzZSAyNDpsaihlLG4sdCxyKSwyMDQ4Jm8mJmx3KG4uYWx0ZXJuYXRlLG4pfX1mdW5jdGlvbiBsQShlLG4pe2lmKDEwMjU2Jm4uc3VidHJlZUZsYWdzKWZvcihuPW4uY2hpbGQ7bnVsbCE9PW47KXt2YXIgdD1uLHI9dC5mbGFncztzd2l0Y2godC50YWcpe2Nhc2UgMjI6bEEoZSx0KSwyMDQ4JnImJmx4KHQuYWx0ZXJuYXRlLHQpO2JyZWFrO2Nhc2UgMjQ6bEEoZSx0KSwyMDQ4JnImJmx3KHQuYWx0ZXJuYXRlLHQpO2JyZWFrO2RlZmF1bHQ6bEEoZSx0KX1uPW4uc2libGluZ319dmFyIGxPPTgxOTI7ZnVuY3Rpb24gbEMoZSl7aWYoZS5zdWJ0cmVlRmxhZ3MmbE8pZm9yKGU9ZS5jaGlsZDtudWxsIT09ZTspbFMoZSksZT1lLnNpYmxpbmd9ZnVuY3Rpb24gbFMoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmxDKGUpLGUuZmxhZ3MmbE8mJm51bGwhPT1lLm1lbW9pemVkU3RhdGUmJmZ1bmN0aW9uKGUsbix0KXtpZihudWxsPT09YzEpdGhyb3cgRXJyb3IobCg0NzUpKTt2YXIgcj1jMTtpZihcInN0eWxlc2hlZXRcIj09PW4udHlwZSYmKFwic3RyaW5nXCIhPXR5cGVvZiB0Lm1lZGlhfHwhMSE9PW1hdGNoTWVkaWEodC5tZWRpYSkubWF0Y2hlcykmJjA9PSg0Jm4uc3RhdGUubG9hZGluZykpe2lmKG51bGw9PT1uLmluc3RhbmNlKXt2YXIgbz1jVSh0LmhyZWYpLGE9ZS5xdWVyeVNlbGVjdG9yKGNWKG8pKTtpZihhKXtudWxsIT09KGU9YS5fcCkmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW4mJihyLmNvdW50Kysscj1jMi5iaW5kKHIpLGUudGhlbihyLHIpKSxuLnN0YXRlLmxvYWRpbmd8PTQsbi5pbnN0YW5jZT1hLGVZKGEpO3JldHVybn1hPWUub3duZXJEb2N1bWVudHx8ZSx0PWNxKHQpLChvPWNOLmdldChvKSkmJmNYKHQsbyksZVkoYT1hLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKTt2YXIgaT1hO2kuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSxuKXtpLm9ubG9hZD1lLGkub25lcnJvcj1ufSksY2MoYSxcImxpbmtcIix0KSxuLmluc3RhbmNlPWF9bnVsbD09PXIuc3R5bGVzaGVldHMmJihyLnN0eWxlc2hlZXRzPW5ldyBNYXApLHIuc3R5bGVzaGVldHMuc2V0KG4sZSksKGU9bi5zdGF0ZS5wcmVsb2FkKSYmMD09KDMmbi5zdGF0ZS5sb2FkaW5nKSYmKHIuY291bnQrKyxuPWMyLmJpbmQociksZS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLG4pLGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsbikpfX0obG0sZS5tZW1vaXplZFN0YXRlLGUubWVtb2l6ZWRQcm9wcyk7YnJlYWs7Y2FzZSA1OmRlZmF1bHQ6bEMoZSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgbj1sbTtsbT1jQihlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxsQyhlKSxsbT1uO2JyZWFrO2Nhc2UgMjI6bnVsbD09PWUubWVtb2l6ZWRTdGF0ZSYmKG51bGwhPT0obj1lLmFsdGVybmF0ZSkmJm51bGwhPT1uLm1lbW9pemVkU3RhdGU/KG49bE8sbE89MHgxMDAwMDAwLGxDKGUpLGxPPW4pOmxDKGUpKX19ZnVuY3Rpb24gbEUoZSl7dmFyIG49ZS5hbHRlcm5hdGU7aWYobnVsbCE9PW4mJm51bGwhPT0oZT1uLmNoaWxkKSl7bi5jaGlsZD1udWxsO2RvIG49ZS5zaWJsaW5nLGUuc2libGluZz1udWxsLGU9bjt3aGlsZShudWxsIT09ZSl9fWZ1bmN0aW9uIGxfKGUpe3ZhciBuPWUuZGVsZXRpb25zO2lmKDAhPSgxNiZlLmZsYWdzKSl7aWYobnVsbCE9PW4pZm9yKHZhciB0PTA7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07bGk9cixseihyLGUpfWxFKGUpfWlmKDEwMjU2JmUuc3VidHJlZUZsYWdzKWZvcihlPWUuY2hpbGQ7bnVsbCE9PWU7KWxQKGUpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIGxQKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpsXyhlKSwyMDQ4JmUuZmxhZ3MmJmkxKDksZSxlLnJldHVybik7YnJlYWs7Y2FzZSAzOmNhc2UgMTI6ZGVmYXVsdDpsXyhlKTticmVhaztjYXNlIDIyOnZhciBuPWUuc3RhdGVOb2RlO251bGwhPT1lLm1lbW9pemVkU3RhdGUmJjImbi5fdmlzaWJpbGl0eSYmKG51bGw9PT1lLnJldHVybnx8MTMhPT1lLnJldHVybi50YWcpPyhuLl92aXNpYmlsaXR5Jj0tMyxmdW5jdGlvbiBlKG4pe3ZhciB0PW4uZGVsZXRpb25zO2lmKDAhPSgxNiZuLmZsYWdzKSl7aWYobnVsbCE9PXQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07bGk9byxseihvLG4pfWxFKG4pfWZvcihuPW4uY2hpbGQ7bnVsbCE9PW47KXtzd2l0Y2goKHQ9bikudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmkxKDgsdCx0LnJldHVybiksZSh0KTticmVhaztjYXNlIDIyOjImKHI9dC5zdGF0ZU5vZGUpLl92aXNpYmlsaXR5JiYoci5fdmlzaWJpbGl0eSY9LTMsZSh0KSk7YnJlYWs7ZGVmYXVsdDplKHQpfW49bi5zaWJsaW5nfX0oZSkpOmxfKGUpfX1mdW5jdGlvbiBseihlLG4pe2Zvcig7bnVsbCE9PWxpOyl7dmFyIHQ9bGk7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmkxKDgsdCxuKTticmVhaztjYXNlIDIzOmNhc2UgMjI6aWYobnVsbCE9PXQubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PXQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wpe3ZhciByPXQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbDtudWxsIT1yJiZyLnJlZkNvdW50Kyt9YnJlYWs7Y2FzZSAyNDpyMih0Lm1lbW9pemVkU3RhdGUuY2FjaGUpfWlmKG51bGwhPT0ocj10LmNoaWxkKSlyLnJldHVybj10LGxpPXI7ZWxzZSBmb3IodD1lO251bGwhPT1saTspe3ZhciBvPShyPWxpKS5zaWJsaW5nLGE9ci5yZXR1cm47aWYoIWZ1bmN0aW9uIGUobil7dmFyIHQ9bi5hbHRlcm5hdGU7bnVsbCE9PXQmJihuLmFsdGVybmF0ZT1udWxsLGUodCkpLG4uY2hpbGQ9bnVsbCxuLmRlbGV0aW9ucz1udWxsLG4uc2libGluZz1udWxsLDU9PT1uLnRhZyYmbnVsbCE9PSh0PW4uc3RhdGVOb2RlKSYmZVYodCksbi5zdGF0ZU5vZGU9bnVsbCxuLnJldHVybj1udWxsLG4uZGVwZW5kZW5jaWVzPW51bGwsbi5tZW1vaXplZFByb3BzPW51bGwsbi5tZW1vaXplZFN0YXRlPW51bGwsbi5wZW5kaW5nUHJvcHM9bnVsbCxuLnN0YXRlTm9kZT1udWxsLG4udXBkYXRlUXVldWU9bnVsbH0ocikscj09PXQpe2xpPW51bGw7YnJlYWt9aWYobnVsbCE9PW8pe28ucmV0dXJuPWEsbGk9bzticmVha31saT1hfX19dmFyIGxMPXtnZXRDYWNoZUZvclR5cGU6ZnVuY3Rpb24oZSl7dmFyIG49clkocjApLHQ9bi5kYXRhLmdldChlKTtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ZSgpLG4uZGF0YS5zZXQoZSx0KSksdH0sY2FjaGVTaWduYWw6ZnVuY3Rpb24oKXtyZXR1cm4gclkocjApLmNvbnRyb2xsZXIuc2lnbmFsfX0sbFQ9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcCxsUj0wLGxOPW51bGwsbEQ9bnVsbCxsQj0wLGxNPTAsbEk9bnVsbCxsSD0hMSxsRj0hMSxsVT0hMSxsVj0wLGxxPTAsbFc9MCxsJD0wLGxaPTAsbFk9MCxsWD0wLGxLPW51bGwsbFE9bnVsbCxsRz0hMSxsSj0wLGwwPTEvMCxsMT1udWxsLGwyPW51bGwsbDQ9MCxsNT1udWxsLGwzPW51bGwsbDY9MCxsOT0wLGw4PW51bGwsbDc9bnVsbCxzZT0wLHNuPW51bGw7ZnVuY3Rpb24gc3QoKXtyZXR1cm4gMCE9KDImbFIpJiYwIT09bEI/bEImLWxCOm51bGwhPT1MLlQ/c1goKTplTCgpfWZ1bmN0aW9uIHNyKCl7MD09PWxZJiYobFk9MD09KDB4MjAwMDAwMDAmbEIpfHxyUz9laygpOjB4MjAwMDAwMDApO3ZhciBlPW9NLmN1cnJlbnQ7cmV0dXJuIG51bGwhPT1lJiYoZS5mbGFnc3w9MzIpLGxZfWZ1bmN0aW9uIHNvKGUsbix0KXsoZT09PWxOJiYoMj09PWxNfHw5PT09bE0pfHxudWxsIT09ZS5jYW5jZWxQZW5kaW5nQ29tbWl0KSYmKHN1KGUsMCksc2woZSxsQixsWSwhMSkpLGVDKGUsdCksKDA9PSgyJmxSKXx8ZSE9PWxOKSYmKGU9PT1sTiYmKDA9PSgyJmxSKSYmKGwkfD10KSw0PT09bHEmJnNsKGUsbEIsbFksITEpKSxzVShlKSl9ZnVuY3Rpb24gc2EoZSxuLHQpe2lmKDAhPSg2JmxSKSl0aHJvdyBFcnJvcihsKDMyNykpO2Zvcih2YXIgcj0hdCYmMD09KDEyNCZuKSYmMD09KG4mZS5leHBpcmVkTGFuZXMpfHxlaihlLG4pLG89cj9mdW5jdGlvbihlLG4pe3ZhciB0PWxSO2xSfD0yO3ZhciByPXNwKCksbz1zaCgpO2xOIT09ZXx8bEIhPT1uPyhsMT1udWxsLGwwPWVyKCkrNTAwLHN1KGUsbikpOmxGPWVqKGUsbik7ZTpmb3IoOzspdHJ5e2lmKDAhPT1sTSYmbnVsbCE9PWxEKXtuPWxEO3ZhciBhPWxJO246c3dpdGNoKGxNKXtjYXNlIDE6bE09MCxsST1udWxsLHN5KGUsbixhLDEpO2JyZWFrO2Nhc2UgMjpjYXNlIDk6aWYob2woYSkpe2xNPTAsbEk9bnVsbCxzYihuKTticmVha31uPWZ1bmN0aW9uKCl7MiE9PWxNJiY5IT09bE18fGxOIT09ZXx8KGxNPTcpLHNVKGUpfSxhLnRoZW4obixuKTticmVhayBlO2Nhc2UgMzpsTT03O2JyZWFrIGU7Y2FzZSA0OmxNPTU7YnJlYWsgZTtjYXNlIDc6b2woYSk/KGxNPTAsbEk9bnVsbCxzYihuKSk6KGxNPTAsbEk9bnVsbCxzeShlLG4sYSw3KSk7YnJlYWs7Y2FzZSA1OnZhciBpPW51bGw7c3dpdGNoKGxELnRhZyl7Y2FzZSAyNjppPWxELm1lbW9pemVkU3RhdGU7Y2FzZSA1OmNhc2UgMjc6dmFyIHM9bEQ7aWYoaT9jMChpKTpzLnN0YXRlTm9kZS5jb21wbGV0ZSl7bE09MCxsST1udWxsO3ZhciBjPXMuc2libGluZztpZihudWxsIT09YylsRD1jO2Vsc2V7dmFyIHU9cy5yZXR1cm47bnVsbCE9PXU/KGxEPXUsc3godSkpOmxEPW51bGx9YnJlYWsgbn19bE09MCxsST1udWxsLHN5KGUsbixhLDUpO2JyZWFrO2Nhc2UgNjpsTT0wLGxJPW51bGwsc3koZSxuLGEsNik7YnJlYWs7Y2FzZSA4OnNjKCksbHE9NjticmVhayBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0NjIpKX19Zm9yKDtudWxsIT09bEQmJiFlbigpOylzdihsRCk7YnJlYWt9Y2F0Y2gobil7c2QoZSxuKX1yZXR1cm4ockg9ckk9bnVsbCxMLkg9cixMLkE9byxsUj10LG51bGwhPT1sRCk/MDoobE49bnVsbCxsQj0wLHQyKCksbHEpfShlLG4pOnNtKGUsbiwhMCksYT1yOzspe2lmKDA9PT1vKWxGJiYhciYmc2woZSxuLDAsITEpO2Vsc2V7aWYodD1lLmN1cnJlbnQuYWx0ZXJuYXRlLGEmJiFmdW5jdGlvbihlKXtmb3IodmFyIG49ZTs7KXt2YXIgdD1uLnRhZztpZigoMD09PXR8fDExPT09dHx8MTU9PT10KSYmMTYzODQmbi5mbGFncyYmbnVsbCE9PSh0PW4udXBkYXRlUXVldWUpJiZudWxsIT09KHQ9dC5zdG9yZXMpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLGE9by5nZXRTbmFwc2hvdDtvPW8udmFsdWU7dHJ5e2lmKCF0TyhhKCksbykpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9fWlmKHQ9bi5jaGlsZCwxNjM4NCZuLnN1YnRyZWVGbGFncyYmbnVsbCE9PXQpdC5yZXR1cm49bixuPXQ7ZWxzZXtpZihuPT09ZSlicmVhaztmb3IoO251bGw9PT1uLnNpYmxpbmc7KXtpZihudWxsPT09bi5yZXR1cm58fG4ucmV0dXJuPT09ZSlyZXR1cm4hMDtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9fXJldHVybiEwfSh0KSl7bz1zbShlLG4sITEpLGE9ITE7Y29udGludWV9aWYoMj09PW8pe2lmKGE9bixlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJmEpdmFyIGk9MDtlbHNlIGk9MCE9KGk9LTB4MjAwMDAwMDEmZS5wZW5kaW5nTGFuZXMpP2k6MHgyMDAwMDAwMCZpPzB4MjAwMDAwMDA6MDtpZigwIT09aSl7bj1pO2U6e289bEs7dmFyIHM9ZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkO2lmKHMmJihzdShlLGkpLmZsYWdzfD0yNTYpLDIhPT0oaT1zbShlLGksITEpKSl7aWYobFUmJiFzKXtlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzfD1hLGwkfD1hLG89NDticmVhayBlfWE9bFEsbFE9byxudWxsIT09YSYmKG51bGw9PT1sUT9sUT1hOmxRLnB1c2guYXBwbHkobFEsYSkpfW89aX1pZihhPSExLDIhPT1vKWNvbnRpbnVlfX1pZigxPT09byl7c3UoZSwwKSxzbChlLG4sMCwhMCk7YnJlYWt9ZTp7c3dpdGNoKHI9ZSxhPW8pe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IobCgzNDUpKTtjYXNlIDQ6aWYoKDQxOTQwNDgmbikhPT1uKWJyZWFrO2Nhc2UgNjpzbChyLG4sbFksIWxIKTticmVhayBlO2Nhc2UgMjpsUT1udWxsO2JyZWFrO2Nhc2UgMzpjYXNlIDU6YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDMyOSkpfWlmKCgweDNjMDAwMDAmbik9PT1uJiYxMDwobz1sSiszMDAtZXIoKSkpe2lmKHNsKHIsbixsWSwhbEgpLDAhPT1ldyhyLDAsITApKWJyZWFrIGU7ci50aW1lb3V0SGFuZGxlPWN2KHNpLmJpbmQobnVsbCxyLHQsbFEsbDEsbEcsbixsWSxsJCxsWCxsSCxhLDIsLTAsMCksbyk7YnJlYWsgZX1zaShyLHQsbFEsbDEsbEcsbixsWSxsJCxsWCxsSCxhLDAsLTAsMCl9fWJyZWFrfXNVKGUpfWZ1bmN0aW9uIHNpKGUsbix0LHIsbyxhLGkscyxjLHUsZCxmLHAsaCl7aWYoZS50aW1lb3V0SGFuZGxlPS0xLCg4MTkyJihmPW4uc3VidHJlZUZsYWdzKXx8MHgxMDAyMDAwPT0oMHgxMDAyMDAwJmYpKSYmKGMxPXtzdHlsZXNoZWV0czpudWxsLGNvdW50OjAsdW5zdXNwZW5kOm5tfSxsUyhuKSxudWxsIT09KGY9ZnVuY3Rpb24oKXtpZihudWxsPT09YzEpdGhyb3cgRXJyb3IobCg0NzUpKTt2YXIgZT1jMTtyZXR1cm4gZS5zdHlsZXNoZWV0cyYmMD09PWUuY291bnQmJmM1KGUsZS5zdHlsZXNoZWV0cyksMDxlLmNvdW50P2Z1bmN0aW9uKG4pe3ZhciB0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihlLnN0eWxlc2hlZXRzJiZjNShlLGUuc3R5bGVzaGVldHMpLGUudW5zdXNwZW5kKXt2YXIgbj1lLnVuc3VzcGVuZDtlLnVuc3VzcGVuZD1udWxsLG4oKX19LDZlNCk7cmV0dXJuIGUudW5zdXNwZW5kPW4sZnVuY3Rpb24oKXtlLnVuc3VzcGVuZD1udWxsLGNsZWFyVGltZW91dCh0KX19Om51bGx9KCkpKSl7ZS5jYW5jZWxQZW5kaW5nQ29tbWl0PWYoc2ouYmluZChudWxsLGUsbixhLHQscixvLGkscyxjLGQsMSxwLGgpKSxzbChlLGEsaSwhdSk7cmV0dXJufXNqKGUsbixhLHQscixvLGkscyxjKX1mdW5jdGlvbiBzbChlLG4sdCxyKXtuJj1+bFosbiY9fmwkLGUuc3VzcGVuZGVkTGFuZXN8PW4sZS5waW5nZWRMYW5lcyY9fm4sciYmKGUud2FybUxhbmVzfD1uKSxyPWUuZXhwaXJhdGlvblRpbWVzO2Zvcih2YXIgbz1uOzA8bzspe3ZhciBhPTMxLWVnKG8pLGk9MTw8YTtyW2FdPS0xLG8mPX5pfTAhPT10JiZlUyhlLHQsbil9ZnVuY3Rpb24gc3MoKXtyZXR1cm4gMCE9KDYmbFIpfHwoc1YoMCwhMSksITEpfWZ1bmN0aW9uIHNjKCl7aWYobnVsbCE9PWxEKXtpZigwPT09bE0pdmFyIGU9bEQucmV0dXJuO2Vsc2UgZT1sRCxySD1yST1udWxsLGF0KGUpLG9mPW51bGwsb3A9MCxlPWxEO2Zvcig7bnVsbCE9PWU7KWlKKGUuYWx0ZXJuYXRlLGUpLGU9ZS5yZXR1cm47bEQ9bnVsbH19ZnVuY3Rpb24gc3UoZSxuKXt2YXIgdD1lLnRpbWVvdXRIYW5kbGU7LTEhPT10JiYoZS50aW1lb3V0SGFuZGxlPS0xLGNiKHQpKSxudWxsIT09KHQ9ZS5jYW5jZWxQZW5kaW5nQ29tbWl0KSYmKGUuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsLHQoKSksc2MoKSxsTj1lLGxEPXQ9cnQoZS5jdXJyZW50LG51bGwpLGxCPW4sbE09MCxsST1udWxsLGxIPSExLGxGPWVqKGUsbiksbFU9ITEsbFg9bFk9bFo9bCQ9bFc9bHE9MCxsUT1sSz1udWxsLGxHPSExLDAhPSg4Jm4pJiYobnw9MzImbik7dmFyIHI9ZS5lbnRhbmdsZWRMYW5lcztpZigwIT09cilmb3IoZT1lLmVudGFuZ2xlbWVudHMsciY9bjswPHI7KXt2YXIgbz0zMS1lZyhyKSxhPTE8PG87bnw9ZVtvXSxyJj1+YX1yZXR1cm4gbFY9bix0MigpLHR9ZnVuY3Rpb24gc2QoZSxuKXtvWT1udWxsLEwuSD1pZSxuPT09b3J8fG49PT1vYT8obj1vdSgpLGxNPTMpOm49PT1vbz8obj1vdSgpLGxNPTQpOmxNPW49PT1peT84Om51bGwhPT1uJiZcIm9iamVjdFwiPT10eXBlb2YgbiYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuPzY6MSxsST1uLG51bGw9PT1sRCYmKGxxPTEsaWgoZSxydShuLGUuY3VycmVudCkpKX1mdW5jdGlvbiBzZigpe3ZhciBlPW9NLmN1cnJlbnQ7cmV0dXJuIG51bGw9PT1lfHwoKDQxOTQwNDgmbEIpPT09bEI/bnVsbD09PW9JOigoMHgzYzAwMDAwJmxCKT09PWxCfHwwIT0oMHgyMDAwMDAwMCZsQikpJiZlPT09b0kpfWZ1bmN0aW9uIHNwKCl7dmFyIGU9TC5IO3JldHVybiBMLkg9aWUsbnVsbD09PWU/aWU6ZX1mdW5jdGlvbiBzaCgpe3ZhciBlPUwuQTtyZXR1cm4gTC5BPWxMLGV9ZnVuY3Rpb24gc2coKXtscT00LGxIfHwoNDE5NDA0OCZsQikhPT1sQiYmbnVsbCE9PW9NLmN1cnJlbnR8fChsRj0hMCksMD09KDB4N2ZmZmZmZiZsVykmJjA9PSgweDdmZmZmZmYmbCQpfHxudWxsPT09bE58fHNsKGxOLGxCLGxZLCExKX1mdW5jdGlvbiBzbShlLG4sdCl7dmFyIHI9bFI7bFJ8PTI7dmFyIG89c3AoKSxhPXNoKCk7KGxOIT09ZXx8bEIhPT1uKSYmKGwxPW51bGwsc3UoZSxuKSksbj0hMTt2YXIgaT1scTtlOmZvcig7Oyl0cnl7aWYoMCE9PWxNJiZudWxsIT09bEQpe3ZhciBsPWxELHM9bEk7c3dpdGNoKGxNKXtjYXNlIDg6c2MoKSxpPTY7YnJlYWsgZTtjYXNlIDM6Y2FzZSAyOmNhc2UgOTpjYXNlIDY6bnVsbD09PW9NLmN1cnJlbnQmJihuPSEwKTt2YXIgYz1sTTtpZihsTT0wLGxJPW51bGwsc3koZSxsLHMsYyksdCYmbEYpe2k9MDticmVhayBlfWJyZWFrO2RlZmF1bHQ6Yz1sTSxsTT0wLGxJPW51bGwsc3koZSxsLHMsYyl9fShmdW5jdGlvbigpe2Zvcig7bnVsbCE9PWxEOylzdihsRCl9KSgpLGk9bHE7YnJlYWt9Y2F0Y2gobil7c2QoZSxuKX1yZXR1cm4gbiYmZS5zaGVsbFN1c3BlbmRDb3VudGVyKyssckg9ckk9bnVsbCxsUj1yLEwuSD1vLEwuQT1hLG51bGw9PT1sRCYmKGxOPW51bGwsbEI9MCx0MigpKSxpfWZ1bmN0aW9uIHN2KGUpe3ZhciBuPWkkKGUuYWx0ZXJuYXRlLGUsbFYpO2UubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyxudWxsPT09bj9zeChlKTpsRD1ufWZ1bmN0aW9uIHNiKGUpe3ZhciBuPWUsdD1uLmFsdGVybmF0ZTtzd2l0Y2gobi50YWcpe2Nhc2UgMTU6Y2FzZSAwOm49aXoodCxuLG4ucGVuZGluZ1Byb3BzLG4udHlwZSx2b2lkIDAsbEIpO2JyZWFrO2Nhc2UgMTE6bj1peih0LG4sbi5wZW5kaW5nUHJvcHMsbi50eXBlLnJlbmRlcixuLnJlZixsQik7YnJlYWs7Y2FzZSA1OmF0KG4pO2RlZmF1bHQ6aUoodCxuKSxuPWkkKHQsbj1sRD1ycihuLGxWKSxsVil9ZS5tZW1vaXplZFByb3BzPWUucGVuZGluZ1Byb3BzLG51bGw9PT1uP3N4KGUpOmxEPW59ZnVuY3Rpb24gc3koZSxuLHQscil7ckg9ckk9bnVsbCxhdChuKSxvZj1udWxsLG9wPTA7dmFyIG89bi5yZXR1cm47dHJ5e2lmKGZ1bmN0aW9uKGUsbix0LHIsbyl7aWYodC5mbGFnc3w9MzI3NjgsbnVsbCE9PXImJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnRoZW4pe2lmKG51bGwhPT0obj10LmFsdGVybmF0ZSkmJnJXKG4sdCxvLCEwKSxudWxsIT09KHQ9b00uY3VycmVudCkpe3N3aXRjaCh0LnRhZyl7Y2FzZSAzMTpjYXNlIDEzOnJldHVybiBudWxsPT09b0k/c2coKTpudWxsPT09dC5hbHRlcm5hdGUmJjA9PT1scSYmKGxxPTMpLHQuZmxhZ3MmPS0yNTcsdC5mbGFnc3w9NjU1MzYsdC5sYW5lcz1vLHI9PT1vaT90LmZsYWdzfD0xNjM4NDoobnVsbD09PShuPXQudXBkYXRlUXVldWUpP3QudXBkYXRlUXVldWU9bmV3IFNldChbcl0pOm4uYWRkKHIpLHN6KGUscixvKSksITE7Y2FzZSAyMjpyZXR1cm4gdC5mbGFnc3w9NjU1MzYscj09PW9pP3QuZmxhZ3N8PTE2Mzg0OihudWxsPT09KG49dC51cGRhdGVRdWV1ZSk/KG49e3RyYW5zaXRpb25zOm51bGwsbWFya2VySW5zdGFuY2VzOm51bGwscmV0cnlRdWV1ZTpuZXcgU2V0KFtyXSl9LHQudXBkYXRlUXVldWU9bik6bnVsbD09PSh0PW4ucmV0cnlRdWV1ZSk/bi5yZXRyeVF1ZXVlPW5ldyBTZXQoW3JdKTp0LmFkZChyKSxzeihlLHIsbykpLCExfXRocm93IEVycm9yKGwoNDM1LHQudGFnKSl9cmV0dXJuIHN6KGUscixvKSxzZygpLCExfWlmKHJTKXJldHVybiBudWxsIT09KG49b00uY3VycmVudCk/KDA9PSg2NTUzNiZuLmZsYWdzKSYmKG4uZmxhZ3N8PTI1Niksbi5mbGFnc3w9NjU1MzYsbi5sYW5lcz1vLHIhPT1yUCYmckIocnUoZT1FcnJvcihsKDQyMikse2NhdXNlOnJ9KSx0KSkpOihyIT09clAmJnJCKHJ1KG49RXJyb3IobCg0MjMpLHtjYXVzZTpyfSksdCkpLGU9ZS5jdXJyZW50LmFsdGVybmF0ZSxlLmZsYWdzfD02NTUzNixvJj0tbyxlLmxhbmVzfD1vLHI9cnUocix0KSxvPWltKGUuc3RhdGVOb2RlLHIsbyksb1MoZSxvKSw0IT09bHEmJihscT0yKSksITE7dmFyIGE9RXJyb3IobCg1MjApLHtjYXVzZTpyfSk7aWYoYT1ydShhLHQpLG51bGw9PT1sSz9sSz1bYV06bEsucHVzaChhKSw0IT09bHEmJihscT0yKSxudWxsPT09bilyZXR1cm4hMDtyPXJ1KHIsdCksdD1uO2Rve3N3aXRjaCh0LnRhZyl7Y2FzZSAzOnJldHVybiB0LmZsYWdzfD02NTUzNixlPW8mLW8sdC5sYW5lc3w9ZSxlPWltKHQuc3RhdGVOb2RlLHIsZSksb1ModCxlKSwhMTtjYXNlIDE6aWYobj10LnR5cGUsYT10LnN0YXRlTm9kZSwwPT0oMTI4JnQuZmxhZ3MpJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fG51bGwhPT1hJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PWwyfHwhbDIuaGFzKGEpKSkpcmV0dXJuIHQuZmxhZ3N8PTY1NTM2LG8mPS1vLHQubGFuZXN8PW8saWIobz1pdihvKSxlLHQsciksb1ModCxvKSwhMX10PXQucmV0dXJufXdoaWxlKG51bGwhPT10KTtyZXR1cm4hMX0oZSxvLG4sdCxsQikpe2xxPTEsaWgoZSxydSh0LGUuY3VycmVudCkpLGxEPW51bGw7cmV0dXJufX1jYXRjaChuKXtpZihudWxsIT09byl0aHJvdyBsRD1vLG47bHE9MSxpaChlLHJ1KHQsZS5jdXJyZW50KSksbEQ9bnVsbDtyZXR1cm59MzI3Njgmbi5mbGFncz8oclN8fDE9PT1yP2U9ITA6bEZ8fDAhPSgweDIwMDAwMDAwJmxCKT9lPSExOihsSD1lPSEwLCgyPT09cnx8OT09PXJ8fDM9PT1yfHw2PT09cikmJm51bGwhPT0ocj1vTS5jdXJyZW50KSYmMTM9PT1yLnRhZyYmKHIuZmxhZ3N8PTE2Mzg0KSksc3cobixlKSk6c3gobil9ZnVuY3Rpb24gc3goZSl7dmFyIG49ZTtkb3tpZigwIT0oMzI3Njgmbi5mbGFncykpcmV0dXJuIHZvaWQgc3cobixsSCk7ZT1uLnJldHVybjt2YXIgdD1mdW5jdGlvbihlLG4sdCl7dmFyIHI9bi5wZW5kaW5nUHJvcHM7c3dpdGNoKHJrKG4pLG4udGFnKXtjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OmNhc2UgMTpyZXR1cm4gaUcobiksbnVsbDtjYXNlIDM6cmV0dXJuIHQ9bi5zdGF0ZU5vZGUscj1udWxsLG51bGwhPT1lJiYocj1lLm1lbW9pemVkU3RhdGUuY2FjaGUpLG4ubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PXImJihuLmZsYWdzfD0yMDQ4KSxyVShyMCksVygpLHQucGVuZGluZ0NvbnRleHQmJih0LmNvbnRleHQ9dC5wZW5kaW5nQ29udGV4dCx0LnBlbmRpbmdDb250ZXh0PW51bGwpLChudWxsPT09ZXx8bnVsbD09PWUuY2hpbGQpJiYoclIobik/aVoobik6bnVsbD09PWV8fGUubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQmJjA9PSgyNTYmbi5mbGFncyl8fChuLmZsYWdzfD0xMDI0LHJEKCkpKSxpRyhuKSxudWxsO2Nhc2UgMjY6dmFyIG89bi50eXBlLGE9bi5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsPT09ZT8oaVoobiksbnVsbCE9PWE/KGlHKG4pLGlYKG4sYSkpOihpRyhuKSxpWShuLG8sbnVsbCxyLHQpKSk6YT9hIT09ZS5tZW1vaXplZFN0YXRlPyhpWihuKSxpRyhuKSxpWChuLGEpKTooaUcobiksbi5mbGFncyY9LTB4MTAwMDAwMSk6KChlPWUubWVtb2l6ZWRQcm9wcykhPT1yJiZpWihuKSxpRyhuKSxpWShuLG8sZSxyLHQpKSxudWxsO2Nhc2UgMjc6aWYoWihuKSx0PVUuY3VycmVudCxvPW4udHlwZSxudWxsIT09ZSYmbnVsbCE9bi5zdGF0ZU5vZGUpZS5tZW1vaXplZFByb3BzIT09ciYmaVoobik7ZWxzZXtpZighcil7aWYobnVsbD09PW4uc3RhdGVOb2RlKXRocm93IEVycm9yKGwoMTY2KSk7cmV0dXJuIGlHKG4pLG51bGx9ZT1ILmN1cnJlbnQsclIobik/ckwobixlKToobi5zdGF0ZU5vZGU9ZT1jVChvLHIsdCksaVoobikpfXJldHVybiBpRyhuKSxudWxsO2Nhc2UgNTppZihaKG4pLG89bi50eXBlLG51bGwhPT1lJiZudWxsIT1uLnN0YXRlTm9kZSllLm1lbW9pemVkUHJvcHMhPT1yJiZpWihuKTtlbHNle2lmKCFyKXtpZihudWxsPT09bi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobCgxNjYpKTtyZXR1cm4gaUcobiksbnVsbH1pZihhPUguY3VycmVudCxyUihuKSlyTChuLGEpO2Vsc2V7dmFyIGk9Y2YoVS5jdXJyZW50KTtzd2l0Y2goYSl7Y2FzZSAxOmE9aS5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLG8pO2JyZWFrO2Nhc2UgMjphPWkuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLG8pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKG8pe2Nhc2VcInN2Z1wiOmE9aS5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLG8pO2JyZWFrO2Nhc2VcIm1hdGhcIjphPWkuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLG8pO2JyZWFrO2Nhc2VcInNjcmlwdFwiOihhPWkuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPVwiPHNjcmlwdD48XFwvc2NyaXB0PlwiLGE9YS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2JyZWFrO2Nhc2VcInNlbGVjdFwiOmE9XCJzdHJpbmdcIj09dHlwZW9mIHIuaXM/aS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIse2lzOnIuaXN9KTppLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiksci5tdWx0aXBsZT9hLm11bHRpcGxlPSEwOnIuc2l6ZSYmKGEuc2l6ZT1yLnNpemUpO2JyZWFrO2RlZmF1bHQ6YT1cInN0cmluZ1wiPT10eXBlb2Ygci5pcz9pLmNyZWF0ZUVsZW1lbnQobyx7aXM6ci5pc30pOmkuY3JlYXRlRWxlbWVudChvKX19YVtlTl09bixhW2VEXT1yO2U6Zm9yKGk9bi5jaGlsZDtudWxsIT09aTspe2lmKDU9PT1pLnRhZ3x8Nj09PWkudGFnKWEuYXBwZW5kQ2hpbGQoaS5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWkudGFnJiYyNyE9PWkudGFnJiZudWxsIT09aS5jaGlsZCl7aS5jaGlsZC5yZXR1cm49aSxpPWkuY2hpbGQ7Y29udGludWV9aWYoaT09PW4pYnJlYWs7Zm9yKDtudWxsPT09aS5zaWJsaW5nOyl7aWYobnVsbD09PWkucmV0dXJufHxpLnJldHVybj09PW4pYnJlYWsgZTtpPWkucmV0dXJufWkuc2libGluZy5yZXR1cm49aS5yZXR1cm4saT1pLnNpYmxpbmd9c3dpdGNoKG4uc3RhdGVOb2RlPWEsY2MoYSxvLHIpLG8pe2Nhc2VcImJ1dHRvblwiOmNhc2VcImlucHV0XCI6Y2FzZVwic2VsZWN0XCI6Y2FzZVwidGV4dGFyZWFcIjpyPSEhci5hdXRvRm9jdXM7YnJlYWs7Y2FzZVwiaW1nXCI6cj0hMDticmVhaztkZWZhdWx0OnI9ITF9ciYmaVoobil9fXJldHVybiBpRyhuKSxpWShuLG4udHlwZSxudWxsPT09ZT9udWxsOmUubWVtb2l6ZWRQcm9wcyxuLnBlbmRpbmdQcm9wcyx0KSxudWxsO2Nhc2UgNjppZihlJiZudWxsIT1uLnN0YXRlTm9kZSllLm1lbW9pemVkUHJvcHMhPT1yJiZpWihuKTtlbHNle2lmKFwic3RyaW5nXCIhPXR5cGVvZiByJiZudWxsPT09bi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobCgxNjYpKTtpZihlPVUuY3VycmVudCxyUihuKSl7aWYoZT1uLnN0YXRlTm9kZSx0PW4ubWVtb2l6ZWRQcm9wcyxyPW51bGwsbnVsbCE9PShvPXJPKSlzd2l0Y2goby50YWcpe2Nhc2UgMjc6Y2FzZSA1OnI9by5tZW1vaXplZFByb3BzfWVbZU5dPW4sKGU9ISEoZS5ub2RlVmFsdWU9PT10fHxudWxsIT09ciYmITA9PT1yLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZ3x8Y2koZS5ub2RlVmFsdWUsdCkpKXx8cnoobiwhMCl9ZWxzZShlPWNmKGUpLmNyZWF0ZVRleHROb2RlKHIpKVtlTl09bixuLnN0YXRlTm9kZT1lfXJldHVybiBpRyhuKSxudWxsO2Nhc2UgMzE6aWYodD1uLm1lbW9pemVkU3RhdGUsbnVsbD09PWV8fG51bGwhPT1lLm1lbW9pemVkU3RhdGUpe2lmKHI9clIobiksbnVsbCE9PXQpe2lmKG51bGw9PT1lKXtpZighcil0aHJvdyBFcnJvcihsKDMxOCkpO2lmKCEoZT1udWxsIT09KGU9bi5tZW1vaXplZFN0YXRlKT9lLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IobCg1NTcpKTtlW2VOXT1ufWVsc2Ugck4oKSwwPT0oMTI4Jm4uZmxhZ3MpJiYobi5tZW1vaXplZFN0YXRlPW51bGwpLG4uZmxhZ3N8PTQ7aUcobiksZT0hMX1lbHNlIHQ9ckQoKSxudWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmKGUubWVtb2l6ZWRTdGF0ZS5oeWRyYXRpb25FcnJvcnM9dCksZT0hMDtpZighZSl7aWYoMjU2Jm4uZmxhZ3MpcmV0dXJuIG9xKG4pLG47cmV0dXJuIG9xKG4pLG51bGx9aWYoMCE9KDEyOCZuLmZsYWdzKSl0aHJvdyBFcnJvcihsKDU1OCkpfXJldHVybiBpRyhuKSxudWxsO2Nhc2UgMTM6aWYocj1uLm1lbW9pemVkU3RhdGUsbnVsbD09PWV8fG51bGwhPT1lLm1lbW9pemVkU3RhdGUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUuZGVoeWRyYXRlZCl7aWYobz1yUihuKSxudWxsIT09ciYmbnVsbCE9PXIuZGVoeWRyYXRlZCl7aWYobnVsbD09PWUpe2lmKCFvKXRocm93IEVycm9yKGwoMzE4KSk7aWYoIShvPW51bGwhPT0obz1uLm1lbW9pemVkU3RhdGUpP28uZGVoeWRyYXRlZDpudWxsKSl0aHJvdyBFcnJvcihsKDMxNykpO29bZU5dPW59ZWxzZSByTigpLDA9PSgxMjgmbi5mbGFncykmJihuLm1lbW9pemVkU3RhdGU9bnVsbCksbi5mbGFnc3w9NDtpRyhuKSxvPSExfWVsc2Ugbz1yRCgpLG51bGwhPT1lJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlJiYoZS5tZW1vaXplZFN0YXRlLmh5ZHJhdGlvbkVycm9ycz1vKSxvPSEwO2lmKCFvKXtpZigyNTYmbi5mbGFncylyZXR1cm4gb3EobiksbjtyZXR1cm4gb3EobiksbnVsbH19aWYob3EobiksMCE9KDEyOCZuLmZsYWdzKSlyZXR1cm4gbi5sYW5lcz10LG47cmV0dXJuIHQ9bnVsbCE9PXIsZT1udWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSx0JiYocj1uLmNoaWxkLG89bnVsbCxudWxsIT09ci5hbHRlcm5hdGUmJm51bGwhPT1yLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlJiZudWxsIT09ci5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJihvPXIuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGE9bnVsbCxudWxsIT09ci5tZW1vaXplZFN0YXRlJiZudWxsIT09ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKGE9ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxhIT09byYmKHIuZmxhZ3N8PTIwNDgpKSx0IT09ZSYmdCYmKG4uY2hpbGQuZmxhZ3N8PTgxOTIpLGlLKG4sbi51cGRhdGVRdWV1ZSksaUcobiksbnVsbDtjYXNlIDQ6cmV0dXJuIFcoKSxudWxsPT09ZSYmczYobi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksaUcobiksbnVsbDtjYXNlIDEwOnJldHVybiByVShuLnR5cGUpLGlHKG4pLG51bGw7Y2FzZSAxOTppZihNKG9XKSxudWxsPT09KHI9bi5tZW1vaXplZFN0YXRlKSlyZXR1cm4gaUcobiksbnVsbDtpZihvPTAhPSgxMjgmbi5mbGFncyksbnVsbD09PShhPXIucmVuZGVyaW5nKSlpZihvKWlRKHIsITEpO2Vsc2V7aWYoMCE9PWxxfHxudWxsIT09ZSYmMCE9KDEyOCZlLmZsYWdzKSlmb3IoZT1uLmNoaWxkO251bGwhPT1lOyl7aWYobnVsbCE9PShhPW8kKGUpKSl7Zm9yKG4uZmxhZ3N8PTEyOCxpUShyLCExKSxuLnVwZGF0ZVF1ZXVlPWU9YS51cGRhdGVRdWV1ZSxpSyhuLGUpLG4uc3VidHJlZUZsYWdzPTAsZT10LHQ9bi5jaGlsZDtudWxsIT09dDspcnIodCxlKSx0PXQuc2libGluZztyZXR1cm4gSShvVywxJm9XLmN1cnJlbnR8MiksclMmJnJ4KG4sci50cmVlRm9ya0NvdW50KSxuLmNoaWxkfWU9ZS5zaWJsaW5nfW51bGwhPT1yLnRhaWwmJmVyKCk+bDAmJihuLmZsYWdzfD0xMjgsbz0hMCxpUShyLCExKSxuLmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIW8paWYobnVsbCE9PShlPW8kKGEpKSl7aWYobi5mbGFnc3w9MTI4LG89ITAsbi51cGRhdGVRdWV1ZT1lPWUudXBkYXRlUXVldWUsaUsobixlKSxpUShyLCEwKSxudWxsPT09ci50YWlsJiZcImhpZGRlblwiPT09ci50YWlsTW9kZSYmIWEuYWx0ZXJuYXRlJiYhclMpcmV0dXJuIGlHKG4pLG51bGx9ZWxzZSAyKmVyKCktci5yZW5kZXJpbmdTdGFydFRpbWU+bDAmJjB4MjAwMDAwMDAhPT10JiYobi5mbGFnc3w9MTI4LG89ITAsaVEociwhMSksbi5sYW5lcz00MTk0MzA0KTtyLmlzQmFja3dhcmRzPyhhLnNpYmxpbmc9bi5jaGlsZCxuLmNoaWxkPWEpOihudWxsIT09KGU9ci5sYXN0KT9lLnNpYmxpbmc9YTpuLmNoaWxkPWEsci5sYXN0PWEpfWlmKG51bGwhPT1yLnRhaWwpcmV0dXJuIGU9ci50YWlsLHIucmVuZGVyaW5nPWUsci50YWlsPWUuc2libGluZyxyLnJlbmRlcmluZ1N0YXJ0VGltZT1lcigpLGUuc2libGluZz1udWxsLHQ9b1cuY3VycmVudCxJKG9XLG8/MSZ0fDI6MSZ0KSxyUyYmcngobixyLnRyZWVGb3JrQ291bnQpLGU7cmV0dXJuIGlHKG4pLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBvcShuKSxvQigpLHI9bnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZSxudWxsIT09ZT9udWxsIT09ZS5tZW1vaXplZFN0YXRlIT09ciYmKG4uZmxhZ3N8PTgxOTIpOnImJihuLmZsYWdzfD04MTkyKSxyPzAhPSgweDIwMDAwMDAwJnQpJiYwPT0oMTI4Jm4uZmxhZ3MpJiYoaUcobiksNiZuLnN1YnRyZWVGbGFncyYmKG4uZmxhZ3N8PTgxOTIpKTppRyhuKSxudWxsIT09KHQ9bi51cGRhdGVRdWV1ZSkmJmlLKG4sdC5yZXRyeVF1ZXVlKSx0PW51bGwsbnVsbCE9PWUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYodD1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLHI9bnVsbCxudWxsIT09bi5tZW1vaXplZFN0YXRlJiZudWxsIT09bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKHI9bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxyIT09dCYmKG4uZmxhZ3N8PTIwNDgpLG51bGwhPT1lJiZNKHI3KSxudWxsO2Nhc2UgMjQ6cmV0dXJuIHQ9bnVsbCxudWxsIT09ZSYmKHQ9ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSxuLm1lbW9pemVkU3RhdGUuY2FjaGUhPT10JiYobi5mbGFnc3w9MjA0OCksclUocjApLGlHKG4pLG51bGw7Y2FzZSAyNTpjYXNlIDMwOnJldHVybiBudWxsfXRocm93IEVycm9yKGwoMTU2LG4udGFnKSl9KG4uYWx0ZXJuYXRlLG4sbFYpO2lmKG51bGwhPT10KXtsRD10O3JldHVybn1pZihudWxsIT09KG49bi5zaWJsaW5nKSl7bEQ9bjtyZXR1cm59bEQ9bj1lfXdoaWxlKG51bGwhPT1uKTswPT09bHEmJihscT01KX1mdW5jdGlvbiBzdyhlLG4pe2Rve3ZhciB0PWZ1bmN0aW9uKGUsbil7c3dpdGNoKHJrKG4pLG4udGFnKXtjYXNlIDE6cmV0dXJuIDY1NTM2JihlPW4uZmxhZ3MpPyhuLmZsYWdzPS02NTUzNyZlfDEyOCxuKTpudWxsO2Nhc2UgMzpyZXR1cm4gclUocjApLFcoKSwwIT0oNjU1MzYmKGU9bi5mbGFncykpJiYwPT0oMTI4JmUpPyhuLmZsYWdzPS02NTUzNyZlfDEyOCxuKTpudWxsO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmV0dXJuIFoobiksbnVsbDtjYXNlIDMxOmlmKG51bGwhPT1uLm1lbW9pemVkU3RhdGUpe2lmKG9xKG4pLG51bGw9PT1uLmFsdGVybmF0ZSl0aHJvdyBFcnJvcihsKDM0MCkpO3JOKCl9cmV0dXJuIDY1NTM2JihlPW4uZmxhZ3MpPyhuLmZsYWdzPS02NTUzNyZlfDEyOCxuKTpudWxsO2Nhc2UgMTM6aWYob3EobiksbnVsbCE9PShlPW4ubWVtb2l6ZWRTdGF0ZSkmJm51bGwhPT1lLmRlaHlkcmF0ZWQpe2lmKG51bGw9PT1uLmFsdGVybmF0ZSl0aHJvdyBFcnJvcihsKDM0MCkpO3JOKCl9cmV0dXJuIDY1NTM2JihlPW4uZmxhZ3MpPyhuLmZsYWdzPS02NTUzNyZlfDEyOCxuKTpudWxsO2Nhc2UgMTk6cmV0dXJuIE0ob1cpLG51bGw7Y2FzZSA0OnJldHVybiBXKCksbnVsbDtjYXNlIDEwOnJldHVybiByVShuLnR5cGUpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBvcShuKSxvQigpLG51bGwhPT1lJiZNKHI3KSw2NTUzNiYoZT1uLmZsYWdzKT8obi5mbGFncz0tNjU1MzcmZXwxMjgsbik6bnVsbDtjYXNlIDI0OnJldHVybiByVShyMCksbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX0oZS5hbHRlcm5hdGUsZSk7aWYobnVsbCE9PXQpe3QuZmxhZ3MmPTMyNzY3LGxEPXQ7cmV0dXJufWlmKG51bGwhPT0odD1lLnJldHVybikmJih0LmZsYWdzfD0zMjc2OCx0LnN1YnRyZWVGbGFncz0wLHQuZGVsZXRpb25zPW51bGwpLCFuJiZudWxsIT09KGU9ZS5zaWJsaW5nKSl7bEQ9ZTtyZXR1cm59bEQ9ZT10fXdoaWxlKG51bGwhPT1lKTtscT02LGxEPW51bGx9ZnVuY3Rpb24gc2ooZSxuLHQscixvLGEsaSxzLGMpe2UuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsO2RvIHNTKCk7d2hpbGUoMCE9PWw0KTtpZigwIT0oNiZsUikpdGhyb3cgRXJyb3IobCgzMjcpKTtpZihudWxsIT09bil7aWYobj09PWUuY3VycmVudCl0aHJvdyBFcnJvcihsKDE3NykpO2lmKCFmdW5jdGlvbihlLG4sdCxyLG8sYSl7dmFyIGk9ZS5wZW5kaW5nTGFuZXM7ZS5wZW5kaW5nTGFuZXM9dCxlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wLGUud2FybUxhbmVzPTAsZS5leHBpcmVkTGFuZXMmPXQsZS5lbnRhbmdsZWRMYW5lcyY9dCxlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJj10LGUuc2hlbGxTdXNwZW5kQ291bnRlcj0wO3ZhciBsPWUuZW50YW5nbGVtZW50cyxzPWUuZXhwaXJhdGlvblRpbWVzLGM9ZS5oaWRkZW5VcGRhdGVzO2Zvcih0PWkmfnQ7MDx0Oyl7dmFyIHU9MzEtZWcodCksZD0xPDx1O2xbdV09MCxzW3VdPS0xO3ZhciBmPWNbdV07aWYobnVsbCE9PWYpZm9yKGNbdV09bnVsbCx1PTA7dTxmLmxlbmd0aDt1Kyspe3ZhciBwPWZbdV07bnVsbCE9PXAmJihwLmxhbmUmPS0weDIwMDAwMDAxKX10Jj1+ZH0wIT09ciYmZVMoZSxyLDApLDAhPT1hJiYwPT09byYmMCE9PWUudGFnJiYoZS5zdXNwZW5kZWRMYW5lc3w9YSZ+KGkmfm4pKX0oZSx0LGE9bi5sYW5lc3xuLmNoaWxkTGFuZXN8dDEsaSxzLGMpLGU9PT1sTiYmKGxEPWxOPW51bGwsbEI9MCksbDM9bixsNT1lLGw2PXQsbDk9YSxsOD1vLGw3PXIsMCE9KDEwMjU2Jm4uc3VidHJlZUZsYWdzKXx8MCE9KDEwMjU2Jm4uZmxhZ3MpPyhlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wLEooZWwsZnVuY3Rpb24oKXtyZXR1cm4gc0UoITApLG51bGx9KSk6KGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTApLHI9MCE9KDEzODc4Jm4uZmxhZ3MpLDAhPSgxMzg3OCZuLnN1YnRyZWVGbGFncyl8fHIpe3I9TC5ULEwuVD1udWxsLG89VC5wLFQucD0yLGk9bFIsbFJ8PTQ7dHJ5eyFmdW5jdGlvbihlLG4pe2lmKGU9ZS5jb250YWluZXJJbmZvLGN1PXVyLHRQKGU9dF8oZSkpKXtpZihcInNlbGVjdGlvblN0YXJ0XCJpbiBlKXZhciB0PXtzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07ZWxzZSBlOnt2YXIgcj0odD0odD1lLm93bmVyRG9jdW1lbnQpJiZ0LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbiYmdC5nZXRTZWxlY3Rpb24oKTtpZihyJiYwIT09ci5yYW5nZUNvdW50KXt0PXIuYW5jaG9yTm9kZTt2YXIgbyxhPXIuYW5jaG9yT2Zmc2V0LGk9ci5mb2N1c05vZGU7cj1yLmZvY3VzT2Zmc2V0O3RyeXt0Lm5vZGVUeXBlLGkubm9kZVR5cGV9Y2F0Y2goZSl7dD1udWxsO2JyZWFrIGV9dmFyIHM9MCxjPS0xLHU9LTEsZD0wLGY9MCxwPWUsaD1udWxsO246Zm9yKDs7KXtmb3IoO3AhPT10fHwwIT09YSYmMyE9PXAubm9kZVR5cGV8fChjPXMrYSkscCE9PWl8fDAhPT1yJiYzIT09cC5ub2RlVHlwZXx8KHU9cytyKSwzPT09cC5ub2RlVHlwZSYmKHMrPXAubm9kZVZhbHVlLmxlbmd0aCksbnVsbCE9PShvPXAuZmlyc3RDaGlsZCk7KWg9cCxwPW87Zm9yKDs7KXtpZihwPT09ZSlicmVhayBuO2lmKGg9PT10JiYrK2Q9PT1hJiYoYz1zKSxoPT09aSYmKytmPT09ciYmKHU9cyksbnVsbCE9PShvPXAubmV4dFNpYmxpbmcpKWJyZWFrO2g9KHA9aCkucGFyZW50Tm9kZX1wPW99dD0tMT09PWN8fC0xPT09dT9udWxsOntzdGFydDpjLGVuZDp1fX1lbHNlIHQ9bnVsbH10PXR8fHtzdGFydDowLGVuZDowfX1lbHNlIHQ9bnVsbDtmb3IoY2Q9e2ZvY3VzZWRFbGVtOmUsc2VsZWN0aW9uUmFuZ2U6dH0sdXI9ITEsbGk9bjtudWxsIT09bGk7KWlmKGU9KG49bGkpLmNoaWxkLDAhPSgxMDI0Jm4uc3VidHJlZUZsYWdzKSYmbnVsbCE9PWUpZS5yZXR1cm49bixsaT1lO2Vsc2UgZm9yKDtudWxsIT09bGk7KXtzd2l0Y2goaT0obj1saSkuYWx0ZXJuYXRlLGU9bi5mbGFncyxuLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDU6Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhaztjYXNlIDE6aWYoMCE9KDEwMjQmZSkmJm51bGwhPT1pKXtlPXZvaWQgMCx0PW4sYT1pLm1lbW9pemVkUHJvcHMsaT1pLm1lbW9pemVkU3RhdGUscj10LnN0YXRlTm9kZTt0cnl7dmFyIGc9aWModC50eXBlLGEpO2U9ci5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShnLGkpLHIuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9ZX1jYXRjaChlKXtzUCh0LHQucmV0dXJuLGUpfX1icmVhaztjYXNlIDM6aWYoMCE9KDEwMjQmZSkpe2lmKDk9PT0odD0oZT1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKS5ub2RlVHlwZSkpY08oZSk7ZWxzZSBpZigxPT09dClzd2l0Y2goZS5ub2RlTmFtZSl7Y2FzZVwiSEVBRFwiOmNhc2VcIkhUTUxcIjpjYXNlXCJCT0RZXCI6Y08oZSk7YnJlYWs7ZGVmYXVsdDplLnRleHRDb250ZW50PVwiXCJ9fWJyZWFrO2RlZmF1bHQ6aWYoMCE9KDEwMjQmZSkpdGhyb3cgRXJyb3IobCgxNjMpKX1pZihudWxsIT09KGU9bi5zaWJsaW5nKSl7ZS5yZXR1cm49bi5yZXR1cm4sbGk9ZTticmVha31saT1uLnJldHVybn19KGUsbix0KX1maW5hbGx5e2xSPWksVC5wPW8sTC5UPXJ9fWw0PTEsc2soKSxzQSgpLHNPKCl9fWZ1bmN0aW9uIHNrKCl7aWYoMT09PWw0KXtsND0wO3ZhciBlPWw1LG49bDMsdD0wIT0oMTM4Nzgmbi5mbGFncyk7aWYoMCE9KDEzODc4Jm4uc3VidHJlZUZsYWdzKXx8dCl7dD1MLlQsTC5UPW51bGw7dmFyIHI9VC5wO1QucD0yO3ZhciBvPWxSO2xSfD00O3RyeXtsdihuLGUpO3ZhciBhPWNkLGk9dF8oZS5jb250YWluZXJJbmZvKSxsPWEuZm9jdXNlZEVsZW0scz1hLnNlbGVjdGlvblJhbmdlO2lmKGkhPT1sJiZsJiZsLm93bmVyRG9jdW1lbnQmJmZ1bmN0aW9uIGUobix0KXtyZXR1cm4hIW4mJiEhdCYmKG49PT10fHwoIW58fDMhPT1uLm5vZGVUeXBlKSYmKHQmJjM9PT10Lm5vZGVUeXBlP2Uobix0LnBhcmVudE5vZGUpOlwiY29udGFpbnNcImluIG4/bi5jb250YWlucyh0KTohIW4uY29tcGFyZURvY3VtZW50UG9zaXRpb24mJiEhKDE2Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpKSl9KGwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbCkpe2lmKG51bGwhPT1zJiZ0UChsKSl7dmFyIGM9cy5zdGFydCx1PXMuZW5kO2lmKHZvaWQgMD09PXUmJih1PWMpLFwic2VsZWN0aW9uU3RhcnRcImluIGwpbC5zZWxlY3Rpb25TdGFydD1jLGwuc2VsZWN0aW9uRW5kPU1hdGgubWluKHUsbC52YWx1ZS5sZW5ndGgpO2Vsc2V7dmFyIGQ9bC5vd25lckRvY3VtZW50fHxkb2N1bWVudCxmPWQmJmQuZGVmYXVsdFZpZXd8fHdpbmRvdztpZihmLmdldFNlbGVjdGlvbil7dmFyIHA9Zi5nZXRTZWxlY3Rpb24oKSxoPWwudGV4dENvbnRlbnQubGVuZ3RoLGc9TWF0aC5taW4ocy5zdGFydCxoKSxtPXZvaWQgMD09PXMuZW5kP2c6TWF0aC5taW4ocy5lbmQsaCk7IXAuZXh0ZW5kJiZnPm0mJihpPW0sbT1nLGc9aSk7dmFyIHY9dEUobCxnKSxiPXRFKGwsbSk7aWYodiYmYiYmKDEhPT1wLnJhbmdlQ291bnR8fHAuYW5jaG9yTm9kZSE9PXYubm9kZXx8cC5hbmNob3JPZmZzZXQhPT12Lm9mZnNldHx8cC5mb2N1c05vZGUhPT1iLm5vZGV8fHAuZm9jdXNPZmZzZXQhPT1iLm9mZnNldCkpe3ZhciB5PWQuY3JlYXRlUmFuZ2UoKTt5LnNldFN0YXJ0KHYubm9kZSx2Lm9mZnNldCkscC5yZW1vdmVBbGxSYW5nZXMoKSxnPm0/KHAuYWRkUmFuZ2UoeSkscC5leHRlbmQoYi5ub2RlLGIub2Zmc2V0KSk6KHkuc2V0RW5kKGIubm9kZSxiLm9mZnNldCkscC5hZGRSYW5nZSh5KSl9fX19Zm9yKGQ9W10scD1sO3A9cC5wYXJlbnROb2RlOykxPT09cC5ub2RlVHlwZSYmZC5wdXNoKHtlbGVtZW50OnAsbGVmdDpwLnNjcm9sbExlZnQsdG9wOnAuc2Nyb2xsVG9wfSk7Zm9yKFwiZnVuY3Rpb25cIj09dHlwZW9mIGwuZm9jdXMmJmwuZm9jdXMoKSxsPTA7bDxkLmxlbmd0aDtsKyspe3ZhciB4PWRbbF07eC5lbGVtZW50LnNjcm9sbExlZnQ9eC5sZWZ0LHguZWxlbWVudC5zY3JvbGxUb3A9eC50b3B9fXVyPSEhY3UsY2Q9Y3U9bnVsbH1maW5hbGx5e2xSPW8sVC5wPXIsTC5UPXR9fWUuY3VycmVudD1uLGw0PTJ9fWZ1bmN0aW9uIHNBKCl7aWYoMj09PWw0KXtsND0wO3ZhciBlPWw1LG49bDMsdD0wIT0oODc3MiZuLmZsYWdzKTtpZigwIT0oODc3MiZuLnN1YnRyZWVGbGFncyl8fHQpe3Q9TC5ULEwuVD1udWxsO3ZhciByPVQucDtULnA9Mjt2YXIgbz1sUjtsUnw9NDt0cnl7bGwoZSxuLmFsdGVybmF0ZSxuKX1maW5hbGx5e2xSPW8sVC5wPXIsTC5UPXR9fWw0PTN9fWZ1bmN0aW9uIHNPKCl7aWYoND09PWw0fHwzPT09bDQpe2w0PTAsZXQoKTt2YXIgZT1sNSxuPWwzLHQ9bDYscj1sNzswIT0oMTAyNTYmbi5zdWJ0cmVlRmxhZ3MpfHwwIT0oMTAyNTYmbi5mbGFncyk/bDQ9NToobDQ9MCxsMz1sNT1udWxsLHNDKGUsZS5wZW5kaW5nTGFuZXMpKTt2YXIgbz1lLnBlbmRpbmdMYW5lcztpZigwPT09byYmKGwyPW51bGwpLGV6KHQpLG49bi5zdGF0ZU5vZGUsZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLm9uQ29tbWl0RmliZXJSb290KXRyeXtlcC5vbkNvbW1pdEZpYmVyUm9vdChlZixuLHZvaWQgMCwxMjg9PSgxMjgmbi5jdXJyZW50LmZsYWdzKSl9Y2F0Y2goZSl7fWlmKG51bGwhPT1yKXtuPUwuVCxvPVQucCxULnA9MixMLlQ9bnVsbDt0cnl7Zm9yKHZhciBhPWUub25SZWNvdmVyYWJsZUVycm9yLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGw9cltpXTthKGwudmFsdWUse2NvbXBvbmVudFN0YWNrOmwuc3RhY2t9KX19ZmluYWxseXtMLlQ9bixULnA9b319MCE9KDMmbDYpJiZzUygpLHNVKGUpLG89ZS5wZW5kaW5nTGFuZXMsMCE9KDQxOTQwOTAmdCkmJjAhPSg0MiZvKT9lPT09c24/c2UrKzooc2U9MCxzbj1lKTpzZT0wLHNWKDAsITEpfX1mdW5jdGlvbiBzQyhlLG4pezA9PShlLnBvb2xlZENhY2hlTGFuZXMmPW4pJiZudWxsIT0obj1lLnBvb2xlZENhY2hlKSYmKGUucG9vbGVkQ2FjaGU9bnVsbCxyMihuKSl9ZnVuY3Rpb24gc1MoZSl7cmV0dXJuIHNrKCksc0EoKSxzTygpLHNFKGUpfWZ1bmN0aW9uIHNFKCl7aWYoNSE9PWw0KXJldHVybiExO3ZhciBlPWw1LG49bDk7bDk9MDt2YXIgdD1leihsNikscj1MLlQsbz1ULnA7dHJ5e1QucD0zMj50PzMyOnQsTC5UPW51bGwsdD1sOCxsOD1udWxsO3ZhciBhPWw1LGk9bDY7aWYobDQ9MCxsMz1sNT1udWxsLGw2PTAsMCE9KDYmbFIpKXRocm93IEVycm9yKGwoMzMxKSk7dmFyIHM9bFI7aWYobFJ8PTQsbFAoYS5jdXJyZW50KSxsayhhLGEuY3VycmVudCxpLHQpLGxSPXMsc1YoMCwhMSksZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLm9uUG9zdENvbW1pdEZpYmVyUm9vdCl0cnl7ZXAub25Qb3N0Q29tbWl0RmliZXJSb290KGVmLGEpfWNhdGNoKGUpe31yZXR1cm4hMH1maW5hbGx5e1QucD1vLEwuVD1yLHNDKGUsbil9fWZ1bmN0aW9uIHNfKGUsbix0KXtuPXJ1KHQsbiksbj1pbShlLnN0YXRlTm9kZSxuLDIpLG51bGwhPT0oZT1vTyhlLG4sMikpJiYoZUMoZSwyKSxzVShlKSl9ZnVuY3Rpb24gc1AoZSxuLHQpe2lmKDM9PT1lLnRhZylzXyhlLGUsdCk7ZWxzZSBmb3IoO251bGwhPT1uOyl7aWYoMz09PW4udGFnKXtzXyhuLGUsdCk7YnJlYWt9aWYoMT09PW4udGFnKXt2YXIgcj1uLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PWwyfHwhbDIuaGFzKHIpKSl7ZT1ydSh0LGUpLG51bGwhPT0ocj1vTyhuLHQ9aXYoMiksMikpJiYoaWIodCxyLG4sZSksZUMociwyKSxzVShyKSk7YnJlYWt9fW49bi5yZXR1cm59fWZ1bmN0aW9uIHN6KGUsbix0KXt2YXIgcj1lLnBpbmdDYWNoZTtpZihudWxsPT09cil7cj1lLnBpbmdDYWNoZT1uZXcgbFQ7dmFyIG89bmV3IFNldDtyLnNldChuLG8pfWVsc2Ugdm9pZCAwPT09KG89ci5nZXQobikpJiYobz1uZXcgU2V0LHIuc2V0KG4sbykpO28uaGFzKHQpfHwobFU9ITAsby5hZGQodCksZT1zTC5iaW5kKG51bGwsZSxuLHQpLG4udGhlbihlLGUpKX1mdW5jdGlvbiBzTChlLG4sdCl7dmFyIHI9ZS5waW5nQ2FjaGU7bnVsbCE9PXImJnIuZGVsZXRlKG4pLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmdCxlLndhcm1MYW5lcyY9fnQsbE49PT1lJiYobEImdCk9PT10JiYoND09PWxxfHwzPT09bHEmJigweDNjMDAwMDAmbEIpPT09bEImJjMwMD5lcigpLWxKPzA9PSgyJmxSKSYmc3UoZSwwKTpsWnw9dCxsWD09PWxCJiYobFg9MCkpLHNVKGUpfWZ1bmN0aW9uIHNUKGUsbil7MD09PW4mJihuPWVBKCkpLG51bGwhPT0oZT10MyhlLG4pKSYmKGVDKGUsbiksc1UoZSkpfWZ1bmN0aW9uIHNSKGUpe3ZhciBuPWUubWVtb2l6ZWRTdGF0ZSx0PTA7bnVsbCE9PW4mJih0PW4ucmV0cnlMYW5lKSxzVChlLHQpfWZ1bmN0aW9uIHNOKGUsbil7dmFyIHQ9MDtzd2l0Y2goZS50YWcpe2Nhc2UgMzE6Y2FzZSAxMzp2YXIgcj1lLnN0YXRlTm9kZSxvPWUubWVtb2l6ZWRTdGF0ZTtudWxsIT09byYmKHQ9by5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6cj1lLnN0YXRlTm9kZTticmVhaztjYXNlIDIyOnI9ZS5zdGF0ZU5vZGUuX3JldHJ5Q2FjaGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDMxNCkpfW51bGwhPT1yJiZyLmRlbGV0ZShuKSxzVChlLHQpfXZhciBzRD1udWxsLHNCPW51bGwsc009ITEsc0k9ITEsc0g9ITEsc0Y9MDtmdW5jdGlvbiBzVShlKXtlIT09c0ImJm51bGw9PT1lLm5leHQmJihudWxsPT09c0I/c0Q9c0I9ZTpzQj1zQi5uZXh0PWUpLHNJPSEwLHNNfHwoc009ITAsY3goZnVuY3Rpb24oKXswIT0oNiZsUik/SihlYSxzcSk6c1coKX0pKX1mdW5jdGlvbiBzVihlLG4pe2lmKCFzSCYmc0kpe3NIPSEwO2RvIGZvcih2YXIgdD0hMSxyPXNEO251bGwhPT1yOyl7aWYoIW4paWYoMCE9PWUpe3ZhciBvPXIucGVuZGluZ0xhbmVzO2lmKDA9PT1vKXZhciBhPTA7ZWxzZXt2YXIgaT1yLnN1c3BlbmRlZExhbmVzLGw9ci5waW5nZWRMYW5lczthPTB4YzAwMDA5NSYoYT0oMTw8MzEtZWcoNDJ8ZSkrMSktMSYobyZ+KGkmfmwpKSk/MHhjMDAwMDk1JmF8MTphPzJ8YTowfTAhPT1hJiYodD0hMCxzWShyLGEpKX1lbHNlIGE9bEIsMD09KDMmKGE9ZXcocixyPT09bE4/YTowLG51bGwhPT1yLmNhbmNlbFBlbmRpbmdDb21taXR8fC0xIT09ci50aW1lb3V0SGFuZGxlKSkpfHxlaihyLGEpfHwodD0hMCxzWShyLGEpKTtyPXIubmV4dH13aGlsZSh0KTtzSD0hMX19ZnVuY3Rpb24gc3EoKXtzVygpfWZ1bmN0aW9uIHNXKCl7c0k9c009ITE7dmFyIGUsbj0wOzA9PT1zRnx8KChlPXdpbmRvdy5ldmVudCkmJlwicG9wc3RhdGVcIj09PWUudHlwZT9lPT09Y218fChjbT1lLDApOihjbT1udWxsLDEpKXx8KG49c0YpO2Zvcih2YXIgdD1lcigpLHI9bnVsbCxvPXNEO251bGwhPT1vOyl7dmFyIGE9by5uZXh0LGk9cyQobyx0KTswPT09aT8oby5uZXh0PW51bGwsbnVsbD09PXI/c0Q9YTpyLm5leHQ9YSxudWxsPT09YSYmKHNCPXIpKToocj1vLCgwIT09bnx8MCE9KDMmaSkpJiYoc0k9ITApKSxvPWF9MCE9PWw0JiY1IT09bDR8fHNWKG4sITEpLDAhPT1zRiYmKHNGPTApfWZ1bmN0aW9uIHMkKGUsbil7Zm9yKHZhciB0PWUuc3VzcGVuZGVkTGFuZXMscj1lLnBpbmdlZExhbmVzLG89ZS5leHBpcmF0aW9uVGltZXMsYT0tMHgzYzAwMDAxJmUucGVuZGluZ0xhbmVzOzA8YTspe3ZhciBpPTMxLWVnKGEpLGw9MTw8aSxzPW9baV07LTE9PT1zPygwPT0obCZ0KXx8MCE9KGwmcikpJiYob1tpXT1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDg6Y2FzZSA2NDpyZXR1cm4gbisyNTA7Y2FzZSAxNjpjYXNlIDMyOmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiBuKzVlMztkZWZhdWx0OnJldHVybiAtMX19KGwsbikpOnM8PW4mJihlLmV4cGlyZWRMYW5lc3w9bCksYSY9fmx9aWYobj1sTix0PWxCLHQ9ZXcoZSxlPT09bj90OjAsbnVsbCE9PWUuY2FuY2VsUGVuZGluZ0NvbW1pdHx8LTEhPT1lLnRpbWVvdXRIYW5kbGUpLHI9ZS5jYWxsYmFja05vZGUsMD09PXR8fGU9PT1uJiYoMj09PWxNfHw5PT09bE0pfHxudWxsIT09ZS5jYW5jZWxQZW5kaW5nQ29tbWl0KXJldHVybiBudWxsIT09ciYmbnVsbCE9PXImJmVlKHIpLGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7aWYoMD09KDMmdCl8fGVqKGUsdCkpe2lmKChuPXQmLXQpPT09ZS5jYWxsYmFja1ByaW9yaXR5KXJldHVybiBuO3N3aXRjaChudWxsIT09ciYmZWUociksZXoodCkpe2Nhc2UgMjpjYXNlIDg6dD1laTticmVhaztjYXNlIDMyOmRlZmF1bHQ6dD1lbDticmVhaztjYXNlIDB4MTAwMDAwMDA6dD1lY31yZXR1cm4gdD1KKHQscj1zWi5iaW5kKG51bGwsZSkpLGUuY2FsbGJhY2tQcmlvcml0eT1uLGUuY2FsbGJhY2tOb2RlPXQsbn1yZXR1cm4gbnVsbCE9PXImJm51bGwhPT1yJiZlZShyKSxlLmNhbGxiYWNrUHJpb3JpdHk9MixlLmNhbGxiYWNrTm9kZT1udWxsLDJ9ZnVuY3Rpb24gc1ooZSxuKXtpZigwIT09bDQmJjUhPT1sNClyZXR1cm4gZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrUHJpb3JpdHk9MCxudWxsO3ZhciB0PWUuY2FsbGJhY2tOb2RlO2lmKHNTKCEwKSYmZS5jYWxsYmFja05vZGUhPT10KXJldHVybiBudWxsO3ZhciByPWxCO3JldHVybiAwPT09KHI9ZXcoZSxlPT09bE4/cjowLG51bGwhPT1lLmNhbmNlbFBlbmRpbmdDb21taXR8fC0xIT09ZS50aW1lb3V0SGFuZGxlKSk/bnVsbDooc2EoZSxyLG4pLHMkKGUsZXIoKSksbnVsbCE9ZS5jYWxsYmFja05vZGUmJmUuY2FsbGJhY2tOb2RlPT09dD9zWi5iaW5kKG51bGwsZSk6bnVsbCl9ZnVuY3Rpb24gc1koZSxuKXtpZihzUygpKXJldHVybiBudWxsO3NhKGUsbiwhMCl9ZnVuY3Rpb24gc1goKXtpZigwPT09c0Ype3ZhciBlPXIzO3NGPTAhPT1lP2U6ZWsoKX1yZXR1cm4gc0Z9ZnVuY3Rpb24gc0soZSl7cmV0dXJuIG51bGw9PWV8fFwic3ltYm9sXCI9PXR5cGVvZiBlfHxcImJvb2xlYW5cIj09dHlwZW9mIGU/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bmcoXCJcIitlKX1mdW5jdGlvbiBzUShlLG4pe3ZhciB0PW4ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7cmV0dXJuIHQubmFtZT1uLm5hbWUsdC52YWx1ZT1uLnZhbHVlLGUuaWQmJnQuc2V0QXR0cmlidXRlKFwiZm9ybVwiLGUuaWQpLG4ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxuKSxlPW5ldyBGb3JtRGF0YShlKSx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksZX1mb3IodmFyIHNHPTA7c0c8dEsubGVuZ3RoO3NHKyspe3ZhciBzSj10S1tzR107dFEoc0oudG9Mb3dlckNhc2UoKSxcIm9uXCIrKHNKWzBdLnRvVXBwZXJDYXNlKCkrc0ouc2xpY2UoMSkpKX10USh0VSxcIm9uQW5pbWF0aW9uRW5kXCIpLHRRKHRWLFwib25BbmltYXRpb25JdGVyYXRpb25cIiksdFEodHEsXCJvbkFuaW1hdGlvblN0YXJ0XCIpLHRRKFwiZGJsY2xpY2tcIixcIm9uRG91YmxlQ2xpY2tcIiksdFEoXCJmb2N1c2luXCIsXCJvbkZvY3VzXCIpLHRRKFwiZm9jdXNvdXRcIixcIm9uQmx1clwiKSx0USh0VyxcIm9uVHJhbnNpdGlvblJ1blwiKSx0USh0JCxcIm9uVHJhbnNpdGlvblN0YXJ0XCIpLHRRKHRaLFwib25UcmFuc2l0aW9uQ2FuY2VsXCIpLHRRKHRZLFwib25UcmFuc2l0aW9uRW5kXCIpLGVHKFwib25Nb3VzZUVudGVyXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSksZUcoXCJvbk1vdXNlTGVhdmVcIixbXCJtb3VzZW91dFwiLFwibW91c2VvdmVyXCJdKSxlRyhcIm9uUG9pbnRlckVudGVyXCIsW1wicG9pbnRlcm91dFwiLFwicG9pbnRlcm92ZXJcIl0pLGVHKFwib25Qb2ludGVyTGVhdmVcIixbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXSksZVEoXCJvbkNoYW5nZVwiLFwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcIiBcIikpLGVRKFwib25TZWxlY3RcIixcImZvY3Vzb3V0IGNvbnRleHRtZW51IGRyYWdlbmQgZm9jdXNpbiBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSksZVEoXCJvbkJlZm9yZUlucHV0XCIsW1wiY29tcG9zaXRpb25lbmRcIixcImtleXByZXNzXCIsXCJ0ZXh0SW5wdXRcIixcInBhc3RlXCJdKSxlUShcIm9uQ29tcG9zaXRpb25FbmRcIixcImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKSxlUShcIm9uQ29tcG9zaXRpb25TdGFydFwiLFwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSksZVEoXCJvbkNvbXBvc2l0aW9uVXBkYXRlXCIsXCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSk7dmFyIHMwPVwiYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmdcIi5zcGxpdChcIiBcIiksczE9bmV3IFNldChcImJlZm9yZXRvZ2dsZSBjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCBzY3JvbGxlbmQgdG9nZ2xlXCIuc3BsaXQoXCIgXCIpLmNvbmNhdChzMCkpO2Z1bmN0aW9uIHMyKGUsbil7bj0wIT0oNCZuKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIHI9ZVt0XSxvPXIuZXZlbnQ7cj1yLmxpc3RlbmVycztlOnt2YXIgYT12b2lkIDA7aWYobilmb3IodmFyIGk9ci5sZW5ndGgtMTswPD1pO2ktLSl7dmFyIGw9cltpXSxzPWwuaW5zdGFuY2UsYz1sLmN1cnJlbnRUYXJnZXQ7aWYobD1sLmxpc3RlbmVyLHMhPT1hJiZvLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgZTthPWwsby5jdXJyZW50VGFyZ2V0PWM7dHJ5e2Eobyl9Y2F0Y2goZSl7dEcoZSl9by5jdXJyZW50VGFyZ2V0PW51bGwsYT1zfWVsc2UgZm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7aWYocz0obD1yW2ldKS5pbnN0YW5jZSxjPWwuY3VycmVudFRhcmdldCxsPWwubGlzdGVuZXIscyE9PWEmJm8uaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO2E9bCxvLmN1cnJlbnRUYXJnZXQ9Yzt0cnl7YShvKX1jYXRjaChlKXt0RyhlKX1vLmN1cnJlbnRUYXJnZXQ9bnVsbCxhPXN9fX19ZnVuY3Rpb24gczQoZSxuKXt2YXIgdD1uW2VNXTt2b2lkIDA9PT10JiYodD1uW2VNXT1uZXcgU2V0KTt2YXIgcj1lK1wiX19idWJibGVcIjt0LmhhcyhyKXx8KHM5KG4sZSwyLCExKSx0LmFkZChyKSl9ZnVuY3Rpb24gczUoZSxuLHQpe3ZhciByPTA7biYmKHJ8PTQpLHM5KHQsZSxyLG4pfXZhciBzMz1cIl9yZWFjdExpc3RlbmluZ1wiK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIHM2KGUpe2lmKCFlW3MzXSl7ZVtzM109ITAsZVguZm9yRWFjaChmdW5jdGlvbihuKXtcInNlbGVjdGlvbmNoYW5nZVwiIT09biYmKHMxLmhhcyhuKXx8czUobiwhMSxlKSxzNShuLCEwLGUpKX0pO3ZhciBuPTk9PT1lLm5vZGVUeXBlP2U6ZS5vd25lckRvY3VtZW50O251bGw9PT1ufHxuW3MzXXx8KG5bczNdPSEwLHM1KFwic2VsZWN0aW9uY2hhbmdlXCIsITEsbikpfX1mdW5jdGlvbiBzOShlLG4sdCxyKXtzd2l0Y2godXUobikpe2Nhc2UgMjp2YXIgbz11bzticmVhaztjYXNlIDg6bz11YTticmVhaztkZWZhdWx0Om89dWl9dD1vLmJpbmQobnVsbCxuLHQsZSksbz12b2lkIDAsbkMmJihcInRvdWNoc3RhcnRcIj09PW58fFwidG91Y2htb3ZlXCI9PT1ufHxcIndoZWVsXCI9PT1uKSYmKG89ITApLHI/dm9pZCAwIT09bz9lLmFkZEV2ZW50TGlzdGVuZXIobix0LHtjYXB0dXJlOiEwLHBhc3NpdmU6b30pOmUuYWRkRXZlbnRMaXN0ZW5lcihuLHQsITApOnZvaWQgMCE9PW8/ZS5hZGRFdmVudExpc3RlbmVyKG4sdCx7cGFzc2l2ZTpvfSk6ZS5hZGRFdmVudExpc3RlbmVyKG4sdCwhMSl9ZnVuY3Rpb24gczgoZSxuLHQscixvKXt2YXIgYT1yO2lmKDA9PSgxJm4pJiYwPT0oMiZuKSYmbnVsbCE9PXIpZTpmb3IoOzspe2lmKG51bGw9PT1yKXJldHVybjt2YXIgaT1yLnRhZztpZigzPT09aXx8ND09PWkpe3ZhciBsPXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYobD09PW8pYnJlYWs7aWYoND09PWkpZm9yKGk9ci5yZXR1cm47bnVsbCE9PWk7KXt2YXIgYz1pLnRhZztpZigoMz09PWN8fDQ9PT1jKSYmaS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PW8pcmV0dXJuO2k9aS5yZXR1cm59Zm9yKDtudWxsIT09bDspe2lmKG51bGw9PT0oaT1lcShsKSkpcmV0dXJuO2lmKDU9PT0oYz1pLnRhZyl8fDY9PT1jfHwyNj09PWN8fDI3PT09Yyl7cj1hPWk7Y29udGludWUgZX1sPWwucGFyZW50Tm9kZX19cj1yLnJldHVybn1uayhmdW5jdGlvbigpe3ZhciByPWEsbz1uYih0KSxpPVtdO2U6e3ZhciBsPXRYLmdldChlKTtpZih2b2lkIDAhPT1sKXt2YXIgYz1uVSx1PWU7c3dpdGNoKGUpe2Nhc2VcImtleXByZXNzXCI6aWYoMD09PW5MKHQpKWJyZWFrIGU7Y2FzZVwia2V5ZG93blwiOmNhc2VcImtleXVwXCI6Yz1uNDticmVhaztjYXNlXCJmb2N1c2luXCI6dT1cImZvY3VzXCIsYz1uWTticmVhaztjYXNlXCJmb2N1c291dFwiOnU9XCJibHVyXCIsYz1uWTticmVhaztjYXNlXCJiZWZvcmVibHVyXCI6Y2FzZVwiYWZ0ZXJibHVyXCI6Yz1uWTticmVhaztjYXNlXCJjbGlja1wiOmlmKDI9PT10LmJ1dHRvbilicmVhayBlO2Nhc2VcImF1eGNsaWNrXCI6Y2FzZVwiZGJsY2xpY2tcIjpjYXNlXCJtb3VzZWRvd25cIjpjYXNlXCJtb3VzZW1vdmVcIjpjYXNlXCJtb3VzZXVwXCI6Y2FzZVwibW91c2VvdXRcIjpjYXNlXCJtb3VzZW92ZXJcIjpjYXNlXCJjb250ZXh0bWVudVwiOmM9biQ7YnJlYWs7Y2FzZVwiZHJhZ1wiOmNhc2VcImRyYWdlbmRcIjpjYXNlXCJkcmFnZW50ZXJcIjpjYXNlXCJkcmFnZXhpdFwiOmNhc2VcImRyYWdsZWF2ZVwiOmNhc2VcImRyYWdvdmVyXCI6Y2FzZVwiZHJhZ3N0YXJ0XCI6Y2FzZVwiZHJvcFwiOmM9blo7YnJlYWs7Y2FzZVwidG91Y2hjYW5jZWxcIjpjYXNlXCJ0b3VjaGVuZFwiOmNhc2VcInRvdWNobW92ZVwiOmNhc2VcInRvdWNoc3RhcnRcIjpjPW4zO2JyZWFrO2Nhc2UgdFU6Y2FzZSB0VjpjYXNlIHRxOmM9blg7YnJlYWs7Y2FzZSB0WTpjPW42O2JyZWFrO2Nhc2VcInNjcm9sbFwiOmNhc2VcInNjcm9sbGVuZFwiOmM9bnE7YnJlYWs7Y2FzZVwid2hlZWxcIjpjPW45O2JyZWFrO2Nhc2VcImNvcHlcIjpjYXNlXCJjdXRcIjpjYXNlXCJwYXN0ZVwiOmM9bks7YnJlYWs7Y2FzZVwiZ290cG9pbnRlcmNhcHR1cmVcIjpjYXNlXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpjYXNlXCJwb2ludGVyY2FuY2VsXCI6Y2FzZVwicG9pbnRlcmRvd25cIjpjYXNlXCJwb2ludGVybW92ZVwiOmNhc2VcInBvaW50ZXJvdXRcIjpjYXNlXCJwb2ludGVyb3ZlclwiOmNhc2VcInBvaW50ZXJ1cFwiOmM9bjU7YnJlYWs7Y2FzZVwidG9nZ2xlXCI6Y2FzZVwiYmVmb3JldG9nZ2xlXCI6Yz1uOH12YXIgZD0wIT0oNCZuKSxmPSFkJiYoXCJzY3JvbGxcIj09PWV8fFwic2Nyb2xsZW5kXCI9PT1lKSxwPWQ/bnVsbCE9PWw/bCtcIkNhcHR1cmVcIjpudWxsOmw7ZD1bXTtmb3IodmFyIGgsZz1yO251bGwhPT1nOyl7dmFyIG09ZztpZihoPW0uc3RhdGVOb2RlLDUhPT0obT1tLnRhZykmJjI2IT09bSYmMjchPT1tfHxudWxsPT09aHx8bnVsbD09PXB8fG51bGwhPShtPW5BKGcscCkpJiZkLnB1c2goczcoZyxtLGgpKSxmKWJyZWFrO2c9Zy5yZXR1cm59MDxkLmxlbmd0aCYmKGw9bmV3IGMobCx1LG51bGwsdCxvKSxpLnB1c2goe2V2ZW50OmwsbGlzdGVuZXJzOmR9KSl9fWlmKDA9PSg3Jm4pKXtpZigobD1cIm1vdXNlb3ZlclwiPT09ZXx8XCJwb2ludGVyb3ZlclwiPT09ZSxjPVwibW91c2VvdXRcIj09PWV8fFwicG9pbnRlcm91dFwiPT09ZSwhKGwmJnQhPT1udiYmKHU9dC5yZWxhdGVkVGFyZ2V0fHx0LmZyb21FbGVtZW50KSYmKGVxKHUpfHx1W2VCXSkpKSYmKGN8fGwpJiYobD1vLndpbmRvdz09PW8/bzoobD1vLm93bmVyRG9jdW1lbnQpP2wuZGVmYXVsdFZpZXd8fGwucGFyZW50V2luZG93OndpbmRvdyxjPyh1PXQucmVsYXRlZFRhcmdldHx8dC50b0VsZW1lbnQsYz1yLG51bGwhPT0odT11P2VxKHUpOm51bGwpJiYoZj1zKHUpLGQ9dS50YWcsdSE9PWZ8fDUhPT1kJiYyNyE9PWQmJjYhPT1kKSYmKHU9bnVsbCkpOihjPW51bGwsdT1yKSxjIT09dSkpe2lmKGQ9biQsbT1cIm9uTW91c2VMZWF2ZVwiLHA9XCJvbk1vdXNlRW50ZXJcIixnPVwibW91c2VcIiwoXCJwb2ludGVyb3V0XCI9PT1lfHxcInBvaW50ZXJvdmVyXCI9PT1lKSYmKGQ9bjUsbT1cIm9uUG9pbnRlckxlYXZlXCIscD1cIm9uUG9pbnRlckVudGVyXCIsZz1cInBvaW50ZXJcIiksZj1udWxsPT1jP2w6ZSQoYyksaD1udWxsPT11P2w6ZSQodSksKGw9bmV3IGQobSxnK1wibGVhdmVcIixjLHQsbykpLnRhcmdldD1mLGwucmVsYXRlZFRhcmdldD1oLG09bnVsbCxlcShvKT09PXImJigoZD1uZXcgZChwLGcrXCJlbnRlclwiLHUsdCxvKSkudGFyZ2V0PWgsZC5yZWxhdGVkVGFyZ2V0PWYsbT1kKSxmPW0sYyYmdSluOntmb3IoZD1jbixwPWMsZz11LGg9MCxtPXA7bTttPWQobSkpaCsrO209MDtmb3IodmFyIHYsYj1nO2I7Yj1kKGIpKW0rKztmb3IoOzA8aC1tOylwPWQocCksaC0tO2Zvcig7MDxtLWg7KWc9ZChnKSxtLS07Zm9yKDtoLS07KXtpZihwPT09Z3x8bnVsbCE9PWcmJnA9PT1nLmFsdGVybmF0ZSl7ZD1wO2JyZWFrIG59cD1kKHApLGc9ZChnKX1kPW51bGx9ZWxzZSBkPW51bGw7bnVsbCE9PWMmJmN0KGksbCxjLGQsITEpLG51bGwhPT11JiZudWxsIT09ZiYmY3QoaSxmLHUsZCwhMCl9ZTp7aWYoXCJzZWxlY3RcIj09PShjPShsPXI/ZSQocik6d2luZG93KS5ub2RlTmFtZSYmbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXx8XCJpbnB1dFwiPT09YyYmXCJmaWxlXCI9PT1sLnR5cGUpdmFyIHk9dGc7ZWxzZSBpZih0YyhsKSlpZih0bSl5PXRBO2Vsc2V7eT10ajt2YXIgeD10d31lbHNlKGM9bC5ub2RlTmFtZSkmJlwiaW5wdXRcIj09PWMudG9Mb3dlckNhc2UoKSYmKFwiY2hlY2tib3hcIj09PWwudHlwZXx8XCJyYWRpb1wiPT09bC50eXBlKT95PXRrOnImJm5mKHIuZWxlbWVudFR5cGUpJiYoeT10Zyk7aWYoeSYmKHk9eShlLHIpKSl7dHUoaSx5LHQsbyk7YnJlYWsgZX14JiZ4KGUsbCxyKSxcImZvY3Vzb3V0XCI9PT1lJiZyJiZcIm51bWJlclwiPT09bC50eXBlJiZudWxsIT1yLm1lbW9pemVkUHJvcHMudmFsdWUmJm5vKGwsXCJudW1iZXJcIixsLnZhbHVlKX1zd2l0Y2goeD1yP2UkKHIpOndpbmRvdyxlKXtjYXNlXCJmb2N1c2luXCI6KHRjKHgpfHxcInRydWVcIj09PXguY29udGVudEVkaXRhYmxlKSYmKHRMPXgsdFQ9cix0Uj1udWxsKTticmVhaztjYXNlXCJmb2N1c291dFwiOnRSPXRUPXRMPW51bGw7YnJlYWs7Y2FzZVwibW91c2Vkb3duXCI6dE49ITA7YnJlYWs7Y2FzZVwiY29udGV4dG1lbnVcIjpjYXNlXCJtb3VzZXVwXCI6Y2FzZVwiZHJhZ2VuZFwiOnROPSExLHREKGksdCxvKTticmVhaztjYXNlXCJzZWxlY3Rpb25jaGFuZ2VcIjppZih0eilicmVhaztjYXNlXCJrZXlkb3duXCI6Y2FzZVwia2V5dXBcIjp0RChpLHQsbyl9aWYodGUpbjp7c3dpdGNoKGUpe2Nhc2VcImNvbXBvc2l0aW9uc3RhcnRcIjp2YXIgdz1cIm9uQ29tcG9zaXRpb25TdGFydFwiO2JyZWFrIG47Y2FzZVwiY29tcG9zaXRpb25lbmRcIjp3PVwib25Db21wb3NpdGlvbkVuZFwiO2JyZWFrIG47Y2FzZVwiY29tcG9zaXRpb251cGRhdGVcIjp3PVwib25Db21wb3NpdGlvblVwZGF0ZVwiO2JyZWFrIG59dz12b2lkIDB9ZWxzZSB0bD90YShlLHQpJiYodz1cIm9uQ29tcG9zaXRpb25FbmRcIik6XCJrZXlkb3duXCI9PT1lJiYyMjk9PT10LmtleUNvZGUmJih3PVwib25Db21wb3NpdGlvblN0YXJ0XCIpO3cmJih0ciYmXCJrb1wiIT09dC5sb2NhbGUmJih0bHx8XCJvbkNvbXBvc2l0aW9uU3RhcnRcIiE9PXc/XCJvbkNvbXBvc2l0aW9uRW5kXCI9PT13JiZ0bCYmKHY9bnooKSk6KG5fPVwidmFsdWVcImluKG5FPW8pP25FLnZhbHVlOm5FLnRleHRDb250ZW50LHRsPSEwKSksMDwoeD1jZShyLHcpKS5sZW5ndGgmJih3PW5ldyBuUSh3LGUsbnVsbCx0LG8pLGkucHVzaCh7ZXZlbnQ6dyxsaXN0ZW5lcnM6eH0pLHY/dy5kYXRhPXY6bnVsbCE9PSh2PXRpKHQpKSYmKHcuZGF0YT12KSkpLCh2PXR0P2Z1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2VcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIHRpKG4pO2Nhc2VcImtleXByZXNzXCI6aWYoMzIhPT1uLndoaWNoKXJldHVybiBudWxsO3JldHVybiB0bz0hMCxcIiBcIjtjYXNlXCJ0ZXh0SW5wdXRcIjpyZXR1cm5cIiBcIj09PShlPW4uZGF0YSkmJnRvP251bGw6ZTtkZWZhdWx0OnJldHVybiBudWxsfX0oZSx0KTpmdW5jdGlvbihlLG4pe2lmKHRsKXJldHVyblwiY29tcG9zaXRpb25lbmRcIj09PWV8fCF0ZSYmdGEoZSxuKT8oZT1ueigpLG5QPW5fPW5FPW51bGwsdGw9ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZVwicGFzdGVcIjpkZWZhdWx0OnJldHVybiBudWxsO2Nhc2VcImtleXByZXNzXCI6aWYoIShuLmN0cmxLZXl8fG4uYWx0S2V5fHxuLm1ldGFLZXkpfHxuLmN0cmxLZXkmJm4uYWx0S2V5KXtpZihuLmNoYXImJjE8bi5jaGFyLmxlbmd0aClyZXR1cm4gbi5jaGFyO2lmKG4ud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobi53aGljaCl9cmV0dXJuIG51bGw7Y2FzZVwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gdHImJlwia29cIiE9PW4ubG9jYWxlP251bGw6bi5kYXRhfX0oZSx0KSkmJjA8KHc9Y2UocixcIm9uQmVmb3JlSW5wdXRcIikpLmxlbmd0aCYmKHg9bmV3IG5RKFwib25CZWZvcmVJbnB1dFwiLFwiYmVmb3JlaW5wdXRcIixudWxsLHQsbyksaS5wdXNoKHtldmVudDp4LGxpc3RlbmVyczp3fSkseC5kYXRhPXYpO3ZhciBqPWU7aWYoXCJzdWJtaXRcIj09PWomJnImJnIuc3RhdGVOb2RlPT09byl7dmFyIGs9c0soKG9bZURdfHxudWxsKS5hY3Rpb24pLEE9dC5zdWJtaXR0ZXI7QSYmbnVsbCE9PShqPShqPUFbZURdfHxudWxsKT9zSyhqLmZvcm1BY3Rpb24pOkEuZ2V0QXR0cmlidXRlKFwiZm9ybUFjdGlvblwiKSkmJihrPWosQT1udWxsKTt2YXIgTz1uZXcgblUoXCJhY3Rpb25cIixcImFjdGlvblwiLG51bGwsdCxvKTtpLnB1c2goe2V2ZW50Ok8sbGlzdGVuZXJzOlt7aW5zdGFuY2U6bnVsbCxsaXN0ZW5lcjpmdW5jdGlvbigpe2lmKHQuZGVmYXVsdFByZXZlbnRlZCl7aWYoMCE9PXNGKXt2YXIgZT1BP3NRKG8sQSk6bmV3IEZvcm1EYXRhKG8pO2FLKHIse3BlbmRpbmc6ITAsZGF0YTplLG1ldGhvZDpvLm1ldGhvZCxhY3Rpb246a30sbnVsbCxlKX19ZWxzZVwiZnVuY3Rpb25cIj09dHlwZW9mIGsmJihPLnByZXZlbnREZWZhdWx0KCksYUsocix7cGVuZGluZzohMCxkYXRhOmU9QT9zUShvLEEpOm5ldyBGb3JtRGF0YShvKSxtZXRob2Q6by5tZXRob2QsYWN0aW9uOmt9LGssZSkpfSxjdXJyZW50VGFyZ2V0Om99XX0pfX1zMihpLG4pfSl9ZnVuY3Rpb24gczcoZSxuLHQpe3JldHVybntpbnN0YW5jZTplLGxpc3RlbmVyOm4sY3VycmVudFRhcmdldDp0fX1mdW5jdGlvbiBjZShlLG4pe2Zvcih2YXIgdD1uK1wiQ2FwdHVyZVwiLHI9W107bnVsbCE9PWU7KXt2YXIgbz1lLGE9by5zdGF0ZU5vZGU7aWYoNSE9PShvPW8udGFnKSYmMjYhPT1vJiYyNyE9PW98fG51bGw9PT1hfHwobnVsbCE9KG89bkEoZSx0KSkmJnIudW5zaGlmdChzNyhlLG8sYSkpLG51bGwhPShvPW5BKGUsbikpJiZyLnB1c2goczcoZSxvLGEpKSksMz09PWUudGFnKXJldHVybiByO2U9ZS5yZXR1cm59cmV0dXJuW119ZnVuY3Rpb24gY24oZSl7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7ZG8gZT1lLnJldHVybjt3aGlsZShlJiY1IT09ZS50YWcmJjI3IT09ZS50YWcpO3JldHVybiBlfHxudWxsfWZ1bmN0aW9uIGN0KGUsbix0LHIsbyl7Zm9yKHZhciBhPW4uX3JlYWN0TmFtZSxpPVtdO251bGwhPT10JiZ0IT09cjspe3ZhciBsPXQscz1sLmFsdGVybmF0ZSxjPWwuc3RhdGVOb2RlO2lmKGw9bC50YWcsbnVsbCE9PXMmJnM9PT1yKWJyZWFrOzUhPT1sJiYyNiE9PWwmJjI3IT09bHx8bnVsbD09PWN8fChzPWMsbz9udWxsIT0oYz1uQSh0LGEpKSYmaS51bnNoaWZ0KHM3KHQsYyxzKSk6b3x8bnVsbCE9KGM9bkEodCxhKSkmJmkucHVzaChzNyh0LGMscykpKSx0PXQucmV0dXJufTAhPT1pLmxlbmd0aCYmZS5wdXNoKHtldmVudDpuLGxpc3RlbmVyczppfSl9dmFyIGNyPS9cXHJcXG4/L2csY289L1xcdTAwMDB8XFx1RkZGRC9nO2Z1bmN0aW9uIGNhKGUpe3JldHVybihcInN0cmluZ1wiPT10eXBlb2YgZT9lOlwiXCIrZSkucmVwbGFjZShjcixcIlxcblwiKS5yZXBsYWNlKGNvLFwiXCIpfWZ1bmN0aW9uIGNpKGUsbil7cmV0dXJuIG49Y2EobiksY2EoZSk9PT1ufWZ1bmN0aW9uIGNsKGUsbix0LHIsbyxhKXtzd2l0Y2godCl7Y2FzZVwiY2hpbGRyZW5cIjpcInN0cmluZ1wiPT10eXBlb2Ygcj9cImJvZHlcIj09PW58fFwidGV4dGFyZWFcIj09PW4mJlwiXCI9PT1yfHxucyhlLHIpOihcIm51bWJlclwiPT10eXBlb2Ygcnx8XCJiaWdpbnRcIj09dHlwZW9mIHIpJiZcImJvZHlcIiE9PW4mJm5zKGUsXCJcIityKTticmVhaztjYXNlXCJjbGFzc05hbWVcIjplNChlLFwiY2xhc3NcIixyKTticmVhaztjYXNlXCJ0YWJJbmRleFwiOmU0KGUsXCJ0YWJpbmRleFwiLHIpO2JyZWFrO2Nhc2VcImRpclwiOmNhc2VcInJvbGVcIjpjYXNlXCJ2aWV3Qm94XCI6Y2FzZVwid2lkdGhcIjpjYXNlXCJoZWlnaHRcIjplNChlLHQscik7YnJlYWs7Y2FzZVwic3R5bGVcIjpuZChlLHIsYSk7YnJlYWs7Y2FzZVwiZGF0YVwiOmlmKFwib2JqZWN0XCIhPT1uKXtlNChlLFwiZGF0YVwiLHIpO2JyZWFrfWNhc2VcInNyY1wiOmNhc2VcImhyZWZcIjppZihcIlwiPT09ciYmKFwiYVwiIT09bnx8XCJocmVmXCIhPT10KXx8bnVsbD09cnx8XCJmdW5jdGlvblwiPT10eXBlb2Ygcnx8XCJzeW1ib2xcIj09dHlwZW9mIHJ8fFwiYm9vbGVhblwiPT10eXBlb2Ygcil7ZS5yZW1vdmVBdHRyaWJ1dGUodCk7YnJlYWt9cj1uZyhcIlwiK3IpLGUuc2V0QXR0cmlidXRlKHQscik7YnJlYWs7Y2FzZVwiYWN0aW9uXCI6Y2FzZVwiZm9ybUFjdGlvblwiOmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpe2Uuc2V0QXR0cmlidXRlKHQsXCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignQSBSZWFjdCBmb3JtIHdhcyB1bmV4cGVjdGVkbHkgc3VibWl0dGVkLiBJZiB5b3UgY2FsbGVkIGZvcm0uc3VibWl0KCkgbWFudWFsbHksIGNvbnNpZGVyIHVzaW5nIGZvcm0ucmVxdWVzdFN1Ym1pdCgpIGluc3RlYWQuIElmIHlvdVxcXFwncmUgdHJ5aW5nIHRvIHVzZSBldmVudC5zdG9wUHJvcGFnYXRpb24oKSBpbiBhIHN1Ym1pdCBldmVudCBoYW5kbGVyLCBjb25zaWRlciBhbHNvIGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQoKS4nKVwiKTticmVha31pZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoXCJmb3JtQWN0aW9uXCI9PT10PyhcImlucHV0XCIhPT1uJiZjbChlLG4sXCJuYW1lXCIsby5uYW1lLG8sbnVsbCksY2woZSxuLFwiZm9ybUVuY1R5cGVcIixvLmZvcm1FbmNUeXBlLG8sbnVsbCksY2woZSxuLFwiZm9ybU1ldGhvZFwiLG8uZm9ybU1ldGhvZCxvLG51bGwpLGNsKGUsbixcImZvcm1UYXJnZXRcIixvLmZvcm1UYXJnZXQsbyxudWxsKSk6KGNsKGUsbixcImVuY1R5cGVcIixvLmVuY1R5cGUsbyxudWxsKSxjbChlLG4sXCJtZXRob2RcIixvLm1ldGhvZCxvLG51bGwpLGNsKGUsbixcInRhcmdldFwiLG8udGFyZ2V0LG8sbnVsbCkpKSxudWxsPT1yfHxcInN5bWJvbFwiPT10eXBlb2Ygcnx8XCJib29sZWFuXCI9PXR5cGVvZiByKXtlLnJlbW92ZUF0dHJpYnV0ZSh0KTticmVha31yPW5nKFwiXCIrciksZS5zZXRBdHRyaWJ1dGUodCxyKTticmVhaztjYXNlXCJvbkNsaWNrXCI6bnVsbCE9ciYmKGUub25jbGljaz1ubSk7YnJlYWs7Y2FzZVwib25TY3JvbGxcIjpudWxsIT1yJiZzNChcInNjcm9sbFwiLGUpO2JyZWFrO2Nhc2VcIm9uU2Nyb2xsRW5kXCI6bnVsbCE9ciYmczQoXCJzY3JvbGxlbmRcIixlKTticmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXIpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiByfHwhKFwiX19odG1sXCJpbiByKSl0aHJvdyBFcnJvcihsKDYxKSk7aWYobnVsbCE9KHQ9ci5fX2h0bWwpKXtpZihudWxsIT1vLmNoaWxkcmVuKXRocm93IEVycm9yKGwoNjApKTtlLmlubmVySFRNTD10fX1icmVhaztjYXNlXCJtdWx0aXBsZVwiOmUubXVsdGlwbGU9ciYmXCJmdW5jdGlvblwiIT10eXBlb2YgciYmXCJzeW1ib2xcIiE9dHlwZW9mIHI7YnJlYWs7Y2FzZVwibXV0ZWRcIjplLm11dGVkPXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJlwic3ltYm9sXCIhPXR5cGVvZiByO2JyZWFrO2Nhc2VcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOmNhc2VcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOmNhc2VcImRlZmF1bHRWYWx1ZVwiOmNhc2VcImRlZmF1bHRDaGVja2VkXCI6Y2FzZVwiaW5uZXJIVE1MXCI6Y2FzZVwicmVmXCI6Y2FzZVwiYXV0b0ZvY3VzXCI6Y2FzZVwiaW5uZXJUZXh0XCI6Y2FzZVwidGV4dENvbnRlbnRcIjpicmVhaztjYXNlXCJ4bGlua0hyZWZcIjppZihudWxsPT1yfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByfHxcImJvb2xlYW5cIj09dHlwZW9mIHJ8fFwic3ltYm9sXCI9PXR5cGVvZiByKXtlLnJlbW92ZUF0dHJpYnV0ZShcInhsaW5rOmhyZWZcIik7YnJlYWt9dD1uZyhcIlwiK3IpLGUuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazpocmVmXCIsdCk7YnJlYWs7Y2FzZVwiY29udGVudEVkaXRhYmxlXCI6Y2FzZVwic3BlbGxDaGVja1wiOmNhc2VcImRyYWdnYWJsZVwiOmNhc2VcInZhbHVlXCI6Y2FzZVwiYXV0b1JldmVyc2VcIjpjYXNlXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCI6Y2FzZVwiZm9jdXNhYmxlXCI6Y2FzZVwicHJlc2VydmVBbHBoYVwiOm51bGwhPXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJlwic3ltYm9sXCIhPXR5cGVvZiByP2Uuc2V0QXR0cmlidXRlKHQsXCJcIityKTplLnJlbW92ZUF0dHJpYnV0ZSh0KTticmVhaztjYXNlXCJpbmVydFwiOmNhc2VcImFsbG93RnVsbFNjcmVlblwiOmNhc2VcImFzeW5jXCI6Y2FzZVwiYXV0b1BsYXlcIjpjYXNlXCJjb250cm9sc1wiOmNhc2VcImRlZmF1bHRcIjpjYXNlXCJkZWZlclwiOmNhc2VcImRpc2FibGVkXCI6Y2FzZVwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpjYXNlXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIjpjYXNlXCJmb3JtTm9WYWxpZGF0ZVwiOmNhc2VcImhpZGRlblwiOmNhc2VcImxvb3BcIjpjYXNlXCJub01vZHVsZVwiOmNhc2VcIm5vVmFsaWRhdGVcIjpjYXNlXCJvcGVuXCI6Y2FzZVwicGxheXNJbmxpbmVcIjpjYXNlXCJyZWFkT25seVwiOmNhc2VcInJlcXVpcmVkXCI6Y2FzZVwicmV2ZXJzZWRcIjpjYXNlXCJzY29wZWRcIjpjYXNlXCJzZWFtbGVzc1wiOmNhc2VcIml0ZW1TY29wZVwiOnImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJlwic3ltYm9sXCIhPXR5cGVvZiByP2Uuc2V0QXR0cmlidXRlKHQsXCJcIik6ZS5yZW1vdmVBdHRyaWJ1dGUodCk7YnJlYWs7Y2FzZVwiY2FwdHVyZVwiOmNhc2VcImRvd25sb2FkXCI6ITA9PT1yP2Uuc2V0QXR0cmlidXRlKHQsXCJcIik6ITEhPT1yJiZudWxsIT1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiZcInN5bWJvbFwiIT10eXBlb2Ygcj9lLnNldEF0dHJpYnV0ZSh0LHIpOmUucmVtb3ZlQXR0cmlidXRlKHQpO2JyZWFrO2Nhc2VcImNvbHNcIjpjYXNlXCJyb3dzXCI6Y2FzZVwic2l6ZVwiOmNhc2VcInNwYW5cIjpudWxsIT1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiZcInN5bWJvbFwiIT10eXBlb2YgciYmIWlzTmFOKHIpJiYxPD1yP2Uuc2V0QXR0cmlidXRlKHQscik6ZS5yZW1vdmVBdHRyaWJ1dGUodCk7YnJlYWs7Y2FzZVwicm93U3BhblwiOmNhc2VcInN0YXJ0XCI6bnVsbD09cnx8XCJmdW5jdGlvblwiPT10eXBlb2Ygcnx8XCJzeW1ib2xcIj09dHlwZW9mIHJ8fGlzTmFOKHIpP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQscik7YnJlYWs7Y2FzZVwicG9wb3ZlclwiOnM0KFwiYmVmb3JldG9nZ2xlXCIsZSksczQoXCJ0b2dnbGVcIixlKSxlMihlLFwicG9wb3ZlclwiLHIpO2JyZWFrO2Nhc2VcInhsaW5rQWN0dWF0ZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazphY3R1YXRlXCIscik7YnJlYWs7Y2FzZVwieGxpbmtBcmNyb2xlXCI6ZTUoZSxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcInhsaW5rOmFyY3JvbGVcIixyKTticmVhaztjYXNlXCJ4bGlua1JvbGVcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwieGxpbms6cm9sZVwiLHIpO2JyZWFrO2Nhc2VcInhsaW5rU2hvd1wiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazpzaG93XCIscik7YnJlYWs7Y2FzZVwieGxpbmtUaXRsZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazp0aXRsZVwiLHIpO2JyZWFrO2Nhc2VcInhsaW5rVHlwZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazp0eXBlXCIscik7YnJlYWs7Y2FzZVwieG1sQmFzZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcInhtbDpiYXNlXCIscik7YnJlYWs7Y2FzZVwieG1sTGFuZ1wiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcInhtbDpsYW5nXCIscik7YnJlYWs7Y2FzZVwieG1sU3BhY2VcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXCJ4bWw6c3BhY2VcIixyKTticmVhaztjYXNlXCJpc1wiOmUyKGUsXCJpc1wiLHIpO2JyZWFrO2RlZmF1bHQ6Mjx0Lmxlbmd0aCYmKFwib1wiPT09dFswXXx8XCJPXCI9PT10WzBdKSYmKFwiblwiPT09dFsxXXx8XCJOXCI9PT10WzFdKXx8ZTIoZSx0PW5wLmdldCh0KXx8dCxyKX19ZnVuY3Rpb24gY3MoZSxuLHQscixvLGEpe3N3aXRjaCh0KXtjYXNlXCJzdHlsZVwiOm5kKGUscixhKTticmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXIpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiByfHwhKFwiX19odG1sXCJpbiByKSl0aHJvdyBFcnJvcihsKDYxKSk7aWYobnVsbCE9KHQ9ci5fX2h0bWwpKXtpZihudWxsIT1vLmNoaWxkcmVuKXRocm93IEVycm9yKGwoNjApKTtlLmlubmVySFRNTD10fX1icmVhaztjYXNlXCJjaGlsZHJlblwiOlwic3RyaW5nXCI9PXR5cGVvZiByP25zKGUscik6KFwibnVtYmVyXCI9PXR5cGVvZiByfHxcImJpZ2ludFwiPT10eXBlb2YgcikmJm5zKGUsXCJcIityKTticmVhaztjYXNlXCJvblNjcm9sbFwiOm51bGwhPXImJnM0KFwic2Nyb2xsXCIsZSk7YnJlYWs7Y2FzZVwib25TY3JvbGxFbmRcIjpudWxsIT1yJiZzNChcInNjcm9sbGVuZFwiLGUpO2JyZWFrO2Nhc2VcIm9uQ2xpY2tcIjpudWxsIT1yJiYoZS5vbmNsaWNrPW5tKTticmVhaztjYXNlXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpjYXNlXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpjYXNlXCJpbm5lckhUTUxcIjpjYXNlXCJyZWZcIjpjYXNlXCJpbm5lclRleHRcIjpjYXNlXCJ0ZXh0Q29udGVudFwiOmJyZWFrO2RlZmF1bHQ6aWYoIWVLLmhhc093blByb3BlcnR5KHQpKWU6e2lmKFwib1wiPT09dFswXSYmXCJuXCI9PT10WzFdJiYobz10LmVuZHNXaXRoKFwiQ2FwdHVyZVwiKSxuPXQuc2xpY2UoMixvP3QubGVuZ3RoLTc6dm9pZCAwKSxcImZ1bmN0aW9uXCI9PXR5cGVvZihhPW51bGwhPShhPWVbZURdfHxudWxsKT9hW3RdOm51bGwpJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIobixhLG8pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpKXtcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiZudWxsIT09YSYmKHQgaW4gZT9lW3RdPW51bGw6ZS5oYXNBdHRyaWJ1dGUodCkmJmUucmVtb3ZlQXR0cmlidXRlKHQpKSxlLmFkZEV2ZW50TGlzdGVuZXIobixyLG8pO2JyZWFrIGV9dCBpbiBlP2VbdF09cjohMD09PXI/ZS5zZXRBdHRyaWJ1dGUodCxcIlwiKTplMihlLHQscil9fX1mdW5jdGlvbiBjYyhlLG4sdCl7c3dpdGNoKG4pe2Nhc2VcImRpdlwiOmNhc2VcInNwYW5cIjpjYXNlXCJzdmdcIjpjYXNlXCJwYXRoXCI6Y2FzZVwiYVwiOmNhc2VcImdcIjpjYXNlXCJwXCI6Y2FzZVwibGlcIjpicmVhaztjYXNlXCJpbWdcIjpzNChcImVycm9yXCIsZSksczQoXCJsb2FkXCIsZSk7dmFyIHIsbz0hMSxhPSExO2ZvcihyIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIGk9dFtyXTtpZihudWxsIT1pKXN3aXRjaChyKXtjYXNlXCJzcmNcIjpvPSEwO2JyZWFrO2Nhc2VcInNyY1NldFwiOmE9ITA7YnJlYWs7Y2FzZVwiY2hpbGRyZW5cIjpjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOnRocm93IEVycm9yKGwoMTM3LG4pKTtkZWZhdWx0OmNsKGUsbixyLGksdCxudWxsKX19YSYmY2woZSxuLFwic3JjU2V0XCIsdC5zcmNTZXQsdCxudWxsKSxvJiZjbChlLG4sXCJzcmNcIix0LnNyYyx0LG51bGwpO3JldHVybjtjYXNlXCJpbnB1dFwiOnM0KFwiaW52YWxpZFwiLGUpO3ZhciBzPXI9aT1hPW51bGwsYz1udWxsLHU9bnVsbDtmb3IobyBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobykpe3ZhciBkPXRbb107aWYobnVsbCE9ZClzd2l0Y2gobyl7Y2FzZVwibmFtZVwiOmE9ZDticmVhaztjYXNlXCJ0eXBlXCI6aT1kO2JyZWFrO2Nhc2VcImNoZWNrZWRcIjpjPWQ7YnJlYWs7Y2FzZVwiZGVmYXVsdENoZWNrZWRcIjp1PWQ7YnJlYWs7Y2FzZVwidmFsdWVcIjpyPWQ7YnJlYWs7Y2FzZVwiZGVmYXVsdFZhbHVlXCI6cz1kO2JyZWFrO2Nhc2VcImNoaWxkcmVuXCI6Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1kKXRocm93IEVycm9yKGwoMTM3LG4pKTticmVhaztkZWZhdWx0OmNsKGUsbixvLGQsdCxudWxsKX19bnIoZSxyLHMsYyx1LGksYSwhMSk7cmV0dXJuO2Nhc2VcInNlbGVjdFwiOmZvcihhIGluIHM0KFwiaW52YWxpZFwiLGUpLG89aT1yPW51bGwsdClpZih0Lmhhc093blByb3BlcnR5KGEpJiZudWxsIT0ocz10W2FdKSlzd2l0Y2goYSl7Y2FzZVwidmFsdWVcIjpyPXM7YnJlYWs7Y2FzZVwiZGVmYXVsdFZhbHVlXCI6aT1zO2JyZWFrO2Nhc2VcIm11bHRpcGxlXCI6bz1zO2RlZmF1bHQ6Y2woZSxuLGEscyx0LG51bGwpfW49cix0PWksZS5tdWx0aXBsZT0hIW8sbnVsbCE9bj9uYShlLCEhbyxuLCExKTpudWxsIT10JiZuYShlLCEhbyx0LCEwKTtyZXR1cm47Y2FzZVwidGV4dGFyZWFcIjpmb3IoaSBpbiBzNChcImludmFsaWRcIixlKSxyPWE9bz1udWxsLHQpaWYodC5oYXNPd25Qcm9wZXJ0eShpKSYmbnVsbCE9KHM9dFtpXSkpc3dpdGNoKGkpe2Nhc2VcInZhbHVlXCI6bz1zO2JyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOmE9czticmVhaztjYXNlXCJjaGlsZHJlblwiOnI9czticmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXMpdGhyb3cgRXJyb3IobCg5MSkpO2JyZWFrO2RlZmF1bHQ6Y2woZSxuLGkscyx0LG51bGwpfW5sKGUsbyxhLHIpO3JldHVybjtjYXNlXCJvcHRpb25cIjpmb3IoYyBpbiB0KXQuaGFzT3duUHJvcGVydHkoYykmJm51bGwhPShvPXRbY10pJiYoXCJzZWxlY3RlZFwiPT09Yz9lLnNlbGVjdGVkPW8mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG8mJlwic3ltYm9sXCIhPXR5cGVvZiBvOmNsKGUsbixjLG8sdCxudWxsKSk7cmV0dXJuO2Nhc2VcImRpYWxvZ1wiOnM0KFwiYmVmb3JldG9nZ2xlXCIsZSksczQoXCJ0b2dnbGVcIixlKSxzNChcImNhbmNlbFwiLGUpLHM0KFwiY2xvc2VcIixlKTticmVhaztjYXNlXCJpZnJhbWVcIjpjYXNlXCJvYmplY3RcIjpzNChcImxvYWRcIixlKTticmVhaztjYXNlXCJ2aWRlb1wiOmNhc2VcImF1ZGlvXCI6Zm9yKG89MDtvPHMwLmxlbmd0aDtvKyspczQoczBbb10sZSk7YnJlYWs7Y2FzZVwiaW1hZ2VcIjpzNChcImVycm9yXCIsZSksczQoXCJsb2FkXCIsZSk7YnJlYWs7Y2FzZVwiZGV0YWlsc1wiOnM0KFwidG9nZ2xlXCIsZSk7YnJlYWs7Y2FzZVwiZW1iZWRcIjpjYXNlXCJzb3VyY2VcIjpjYXNlXCJsaW5rXCI6czQoXCJlcnJvclwiLGUpLHM0KFwibG9hZFwiLGUpO2Nhc2VcImFyZWFcIjpjYXNlXCJiYXNlXCI6Y2FzZVwiYnJcIjpjYXNlXCJjb2xcIjpjYXNlXCJoclwiOmNhc2VcImtleWdlblwiOmNhc2VcIm1ldGFcIjpjYXNlXCJwYXJhbVwiOmNhc2VcInRyYWNrXCI6Y2FzZVwid2JyXCI6Y2FzZVwibWVudWl0ZW1cIjpmb3IodSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkodSkmJm51bGwhPShvPXRbdV0pKXN3aXRjaCh1KXtjYXNlXCJjaGlsZHJlblwiOmNhc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6dGhyb3cgRXJyb3IobCgxMzcsbikpO2RlZmF1bHQ6Y2woZSxuLHUsbyx0LG51bGwpfXJldHVybjtkZWZhdWx0OmlmKG5mKG4pKXtmb3IoZCBpbiB0KXQuaGFzT3duUHJvcGVydHkoZCkmJnZvaWQgMCE9PShvPXRbZF0pJiZjcyhlLG4sZCxvLHQsdm9pZCAwKTtyZXR1cm59fWZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9KG89dFtzXSkmJmNsKGUsbixzLG8sdCxudWxsKX12YXIgY3U9bnVsbCxjZD1udWxsO2Z1bmN0aW9uIGNmKGUpe3JldHVybiA5PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudH1mdW5jdGlvbiBjcChlKXtzd2l0Y2goZSl7Y2FzZVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjpyZXR1cm4gMTtjYXNlXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gY2goZSxuKXtpZigwPT09ZSlzd2l0Y2gobil7Y2FzZVwic3ZnXCI6cmV0dXJuIDE7Y2FzZVwibWF0aFwiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9cmV0dXJuIDE9PT1lJiZcImZvcmVpZ25PYmplY3RcIj09PW4/MDplfWZ1bmN0aW9uIGNnKGUsbil7cmV0dXJuXCJ0ZXh0YXJlYVwiPT09ZXx8XCJub3NjcmlwdFwiPT09ZXx8XCJzdHJpbmdcIj09dHlwZW9mIG4uY2hpbGRyZW58fFwibnVtYmVyXCI9PXR5cGVvZiBuLmNoaWxkcmVufHxcImJpZ2ludFwiPT10eXBlb2Ygbi5jaGlsZHJlbnx8XCJvYmplY3RcIj09dHlwZW9mIG4uZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPT1uLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT1uLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbH12YXIgY209bnVsbCxjdj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6dm9pZCAwLGNiPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6dm9pZCAwLGN5PVwiZnVuY3Rpb25cIj09dHlwZW9mIFByb21pc2U/UHJvbWlzZTp2b2lkIDAsY3g9XCJmdW5jdGlvblwiPT10eXBlb2YgcXVldWVNaWNyb3Rhc2s/cXVldWVNaWNyb3Rhc2s6dm9pZCAwIT09Y3k/ZnVuY3Rpb24oZSl7cmV0dXJuIGN5LnJlc29sdmUobnVsbCkudGhlbihlKS5jYXRjaChjdyl9OmN2O2Z1bmN0aW9uIGN3KGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9ZnVuY3Rpb24gY2ooZSl7cmV0dXJuXCJoZWFkXCI9PT1lfWZ1bmN0aW9uIGNrKGUsbil7dmFyIHQ9bixyPTA7ZG97dmFyIG89dC5uZXh0U2libGluZztpZihlLnJlbW92ZUNoaWxkKHQpLG8mJjg9PT1vLm5vZGVUeXBlKWlmKFwiLyRcIj09PSh0PW8uZGF0YSl8fFwiLyZcIj09PXQpe2lmKDA9PT1yKXtlLnJlbW92ZUNoaWxkKG8pLHVFKG4pO3JldHVybn1yLS19ZWxzZSBpZihcIiRcIj09PXR8fFwiJD9cIj09PXR8fFwiJH5cIj09PXR8fFwiJCFcIj09PXR8fFwiJlwiPT09dClyKys7ZWxzZSBpZihcImh0bWxcIj09PXQpY1IoZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7ZWxzZSBpZihcImhlYWRcIj09PXQpe2NSKHQ9ZS5vd25lckRvY3VtZW50LmhlYWQpO2Zvcih2YXIgYT10LmZpcnN0Q2hpbGQ7YTspe3ZhciBpPWEubmV4dFNpYmxpbmcsbD1hLm5vZGVOYW1lO2FbZVVdfHxcIlNDUklQVFwiPT09bHx8XCJTVFlMRVwiPT09bHx8XCJMSU5LXCI9PT1sJiZcInN0eWxlc2hlZXRcIj09PWEucmVsLnRvTG93ZXJDYXNlKCl8fHQucmVtb3ZlQ2hpbGQoYSksYT1pfX1lbHNlXCJib2R5XCI9PT10JiZjUihlLm93bmVyRG9jdW1lbnQuYm9keSk7dD1vfXdoaWxlKHQpO3VFKG4pfWZ1bmN0aW9uIGNBKGUsbil7dmFyIHQ9ZTtlPTA7ZG97dmFyIHI9dC5uZXh0U2libGluZztpZigxPT09dC5ub2RlVHlwZT9uPyh0Ll9zdGFzaGVkRGlzcGxheT10LnN0eWxlLmRpc3BsYXksdC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiKToodC5zdHlsZS5kaXNwbGF5PXQuX3N0YXNoZWREaXNwbGF5fHxcIlwiLFwiXCI9PT10LmdldEF0dHJpYnV0ZShcInN0eWxlXCIpJiZ0LnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpKTozPT09dC5ub2RlVHlwZSYmKG4/KHQuX3N0YXNoZWRUZXh0PXQubm9kZVZhbHVlLHQubm9kZVZhbHVlPVwiXCIpOnQubm9kZVZhbHVlPXQuX3N0YXNoZWRUZXh0fHxcIlwiKSxyJiY4PT09ci5ub2RlVHlwZSlpZihcIi8kXCI9PT0odD1yLmRhdGEpKWlmKDA9PT1lKWJyZWFrO2Vsc2UgZS0tO2Vsc2VcIiRcIiE9PXQmJlwiJD9cIiE9PXQmJlwiJH5cIiE9PXQmJlwiJCFcIiE9PXR8fGUrKzt0PXJ9d2hpbGUodCl9ZnVuY3Rpb24gY08oZSl7dmFyIG49ZS5maXJzdENoaWxkO2ZvcihuJiYxMD09PW4ubm9kZVR5cGUmJihuPW4ubmV4dFNpYmxpbmcpO247KXt2YXIgdD1uO3N3aXRjaChuPW4ubmV4dFNpYmxpbmcsdC5ub2RlTmFtZSl7Y2FzZVwiSFRNTFwiOmNhc2VcIkhFQURcIjpjYXNlXCJCT0RZXCI6Y08odCksZVYodCk7Y29udGludWU7Y2FzZVwiU0NSSVBUXCI6Y2FzZVwiU1RZTEVcIjpjb250aW51ZTtjYXNlXCJMSU5LXCI6aWYoXCJzdHlsZXNoZWV0XCI9PT10LnJlbC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWUucmVtb3ZlQ2hpbGQodCl9fWZ1bmN0aW9uIGNDKGUsbil7Zm9yKDs4IT09ZS5ub2RlVHlwZTspaWYoIW58fG51bGw9PT0oZT1jXyhlLm5leHRTaWJsaW5nKSkpcmV0dXJuIG51bGw7cmV0dXJuIGV9ZnVuY3Rpb24gY1MoZSl7cmV0dXJuXCIkP1wiPT09ZS5kYXRhfHxcIiR+XCI9PT1lLmRhdGF9ZnVuY3Rpb24gY0UoZSl7cmV0dXJuXCIkIVwiPT09ZS5kYXRhfHxcIiQ/XCI9PT1lLmRhdGEmJlwibG9hZGluZ1wiIT09ZS5vd25lckRvY3VtZW50LnJlYWR5U3RhdGV9ZnVuY3Rpb24gY18oZSl7Zm9yKDtudWxsIT1lO2U9ZS5uZXh0U2libGluZyl7dmFyIG49ZS5ub2RlVHlwZTtpZigxPT09bnx8Mz09PW4pYnJlYWs7aWYoOD09PW4pe2lmKFwiJFwiPT09KG49ZS5kYXRhKXx8XCIkIVwiPT09bnx8XCIkP1wiPT09bnx8XCIkflwiPT09bnx8XCImXCI9PT1ufHxcIkYhXCI9PT1ufHxcIkZcIj09PW4pYnJlYWs7aWYoXCIvJFwiPT09bnx8XCIvJlwiPT09bilyZXR1cm4gbnVsbH19cmV0dXJuIGV9dmFyIGNQPW51bGw7ZnVuY3Rpb24gY3ooZSl7ZT1lLm5leHRTaWJsaW5nO2Zvcih2YXIgbj0wO2U7KXtpZig4PT09ZS5ub2RlVHlwZSl7dmFyIHQ9ZS5kYXRhO2lmKFwiLyRcIj09PXR8fFwiLyZcIj09PXQpe2lmKDA9PT1uKXJldHVybiBjXyhlLm5leHRTaWJsaW5nKTtuLS19ZWxzZVwiJFwiIT09dCYmXCIkIVwiIT09dCYmXCIkP1wiIT09dCYmXCIkflwiIT09dCYmXCImXCIhPT10fHxuKyt9ZT1lLm5leHRTaWJsaW5nfXJldHVybiBudWxsfWZ1bmN0aW9uIGNMKGUpe2U9ZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciBuPTA7ZTspe2lmKDg9PT1lLm5vZGVUeXBlKXt2YXIgdD1lLmRhdGE7aWYoXCIkXCI9PT10fHxcIiQhXCI9PT10fHxcIiQ/XCI9PT10fHxcIiR+XCI9PT10fHxcIiZcIj09PXQpe2lmKDA9PT1uKXJldHVybiBlO24tLX1lbHNlXCIvJFwiIT09dCYmXCIvJlwiIT09dHx8bisrfWU9ZS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gY1QoZSxuLHQpe3N3aXRjaChuPWNmKHQpLGUpe2Nhc2VcImh0bWxcIjppZighKGU9bi5kb2N1bWVudEVsZW1lbnQpKXRocm93IEVycm9yKGwoNDUyKSk7cmV0dXJuIGU7Y2FzZVwiaGVhZFwiOmlmKCEoZT1uLmhlYWQpKXRocm93IEVycm9yKGwoNDUzKSk7cmV0dXJuIGU7Y2FzZVwiYm9keVwiOmlmKCEoZT1uLmJvZHkpKXRocm93IEVycm9yKGwoNDU0KSk7cmV0dXJuIGU7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDQ1MSkpfX1mdW5jdGlvbiBjUihlKXtmb3IodmFyIG49ZS5hdHRyaWJ1dGVzO24ubGVuZ3RoOyllLnJlbW92ZUF0dHJpYnV0ZU5vZGUoblswXSk7ZVYoZSl9dmFyIGNOPW5ldyBNYXAsY0Q9bmV3IFNldDtmdW5jdGlvbiBjQihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmdldFJvb3ROb2RlP2UuZ2V0Um9vdE5vZGUoKTo5PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudH12YXIgY009VC5kO1QuZD17ZjpmdW5jdGlvbigpe3ZhciBlPWNNLmYoKSxuPXNzKCk7cmV0dXJuIGV8fG59LHI6ZnVuY3Rpb24oZSl7dmFyIG49ZVcoZSk7bnVsbCE9PW4mJjU9PT1uLnRhZyYmXCJmb3JtXCI9PT1uLnR5cGU/YUcobik6Y00ucihlKX0sRDpmdW5jdGlvbihlKXtjTS5EKGUpLGNIKFwiZG5zLXByZWZldGNoXCIsZSxudWxsKX0sQzpmdW5jdGlvbihlLG4pe2NNLkMoZSxuKSxjSChcInByZWNvbm5lY3RcIixlLG4pfSxMOmZ1bmN0aW9uKGUsbix0KXtpZihjTS5MKGUsbix0KSxjSSYmZSYmbil7dmFyIHI9J2xpbmtbcmVsPVwicHJlbG9hZFwiXVthcz1cIicrbm4obikrJ1wiXSc7XCJpbWFnZVwiPT09biYmdCYmdC5pbWFnZVNyY1NldD8ocis9J1tpbWFnZXNyY3NldD1cIicrbm4odC5pbWFnZVNyY1NldCkrJ1wiXScsXCJzdHJpbmdcIj09dHlwZW9mIHQuaW1hZ2VTaXplcyYmKHIrPSdbaW1hZ2VzaXplcz1cIicrbm4odC5pbWFnZVNpemVzKSsnXCJdJykpOnIrPSdbaHJlZj1cIicrbm4oZSkrJ1wiXSc7dmFyIG89cjtzd2l0Y2gobil7Y2FzZVwic3R5bGVcIjpvPWNVKGUpO2JyZWFrO2Nhc2VcInNjcmlwdFwiOm89Y1coZSl9Y04uaGFzKG8pfHwoZT1mKHtyZWw6XCJwcmVsb2FkXCIsaHJlZjpcImltYWdlXCI9PT1uJiZ0JiZ0LmltYWdlU3JjU2V0P3ZvaWQgMDplLGFzOm59LHQpLGNOLnNldChvLGUpLG51bGwhPT1jSS5xdWVyeVNlbGVjdG9yKHIpfHxcInN0eWxlXCI9PT1uJiZjSS5xdWVyeVNlbGVjdG9yKGNWKG8pKXx8XCJzY3JpcHRcIj09PW4mJmNJLnF1ZXJ5U2VsZWN0b3IoYyQobykpfHwoY2Mobj1jSS5jcmVhdGVFbGVtZW50KFwibGlua1wiKSxcImxpbmtcIixlKSxlWShuKSxjSS5oZWFkLmFwcGVuZENoaWxkKG4pKSl9fSxtOmZ1bmN0aW9uKGUsbil7aWYoY00ubShlLG4pLGNJJiZlKXt2YXIgdD1uJiZcInN0cmluZ1wiPT10eXBlb2Ygbi5hcz9uLmFzOlwic2NyaXB0XCIscj0nbGlua1tyZWw9XCJtb2R1bGVwcmVsb2FkXCJdW2FzPVwiJytubih0KSsnXCJdW2hyZWY9XCInK25uKGUpKydcIl0nLG89cjtzd2l0Y2godCl7Y2FzZVwiYXVkaW93b3JrbGV0XCI6Y2FzZVwicGFpbnR3b3JrbGV0XCI6Y2FzZVwic2VydmljZXdvcmtlclwiOmNhc2VcInNoYXJlZHdvcmtlclwiOmNhc2VcIndvcmtlclwiOmNhc2VcInNjcmlwdFwiOm89Y1coZSl9aWYoIWNOLmhhcyhvKSYmKGU9Zih7cmVsOlwibW9kdWxlcHJlbG9hZFwiLGhyZWY6ZX0sbiksY04uc2V0KG8sZSksbnVsbD09PWNJLnF1ZXJ5U2VsZWN0b3IocikpKXtzd2l0Y2godCl7Y2FzZVwiYXVkaW93b3JrbGV0XCI6Y2FzZVwicGFpbnR3b3JrbGV0XCI6Y2FzZVwic2VydmljZXdvcmtlclwiOmNhc2VcInNoYXJlZHdvcmtlclwiOmNhc2VcIndvcmtlclwiOmNhc2VcInNjcmlwdFwiOmlmKGNJLnF1ZXJ5U2VsZWN0b3IoYyQobykpKXJldHVybn1jYyh0PWNJLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLFwibGlua1wiLGUpLGVZKHQpLGNJLmhlYWQuYXBwZW5kQ2hpbGQodCl9fX0sWDpmdW5jdGlvbihlLG4pe2lmKGNNLlgoZSxuKSxjSSYmZSl7dmFyIHQ9ZVooY0kpLmhvaXN0YWJsZVNjcmlwdHMscj1jVyhlKSxvPXQuZ2V0KHIpO298fCgobz1jSS5xdWVyeVNlbGVjdG9yKGMkKHIpKSl8fChlPWYoe3NyYzplLGFzeW5jOiEwfSxuKSwobj1jTi5nZXQocikpJiZjSyhlLG4pLGVZKG89Y0kuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSksY2MobyxcImxpbmtcIixlKSxjSS5oZWFkLmFwcGVuZENoaWxkKG8pKSxvPXt0eXBlOlwic2NyaXB0XCIsaW5zdGFuY2U6byxjb3VudDoxLHN0YXRlOm51bGx9LHQuc2V0KHIsbykpfX0sUzpmdW5jdGlvbihlLG4sdCl7aWYoY00uUyhlLG4sdCksY0kmJmUpe3ZhciByPWVaKGNJKS5ob2lzdGFibGVTdHlsZXMsbz1jVShlKTtuPW58fFwiZGVmYXVsdFwiO3ZhciBhPXIuZ2V0KG8pO2lmKCFhKXt2YXIgaT17bG9hZGluZzowLHByZWxvYWQ6bnVsbH07aWYoYT1jSS5xdWVyeVNlbGVjdG9yKGNWKG8pKSlpLmxvYWRpbmc9NTtlbHNle2U9Zih7cmVsOlwic3R5bGVzaGVldFwiLGhyZWY6ZSxcImRhdGEtcHJlY2VkZW5jZVwiOm59LHQpLCh0PWNOLmdldChvKSkmJmNYKGUsdCk7dmFyIGw9YT1jSS5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtlWShsKSxjYyhsLFwibGlua1wiLGUpLGwuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSxuKXtsLm9ubG9hZD1lLGwub25lcnJvcj1ufSksbC5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGZ1bmN0aW9uKCl7aS5sb2FkaW5nfD0xfSksbC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixmdW5jdGlvbigpe2kubG9hZGluZ3w9Mn0pLGkubG9hZGluZ3w9NCxjWShhLG4sY0kpfWE9e3R5cGU6XCJzdHlsZXNoZWV0XCIsaW5zdGFuY2U6YSxjb3VudDoxLHN0YXRlOml9LHIuc2V0KG8sYSl9fX0sTTpmdW5jdGlvbihlLG4pe2lmKGNNLk0oZSxuKSxjSSYmZSl7dmFyIHQ9ZVooY0kpLmhvaXN0YWJsZVNjcmlwdHMscj1jVyhlKSxvPXQuZ2V0KHIpO298fCgobz1jSS5xdWVyeVNlbGVjdG9yKGMkKHIpKSl8fChlPWYoe3NyYzplLGFzeW5jOiEwLHR5cGU6XCJtb2R1bGVcIn0sbiksKG49Y04uZ2V0KHIpKSYmY0soZSxuKSxlWShvPWNJLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLGNjKG8sXCJsaW5rXCIsZSksY0kuaGVhZC5hcHBlbmRDaGlsZChvKSksbz17dHlwZTpcInNjcmlwdFwiLGluc3RhbmNlOm8sY291bnQ6MSxzdGF0ZTpudWxsfSx0LnNldChyLG8pKX19fTt2YXIgY0k9XCJ1bmRlZmluZWRcIj09dHlwZW9mIGRvY3VtZW50P251bGw6ZG9jdW1lbnQ7ZnVuY3Rpb24gY0goZSxuLHQpe2lmKGNJJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmbil7dmFyIHI9bm4obik7cj0nbGlua1tyZWw9XCInK2UrJ1wiXVtocmVmPVwiJytyKydcIl0nLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYocis9J1tjcm9zc29yaWdpbj1cIicrdCsnXCJdJyksY0QuaGFzKHIpfHwoY0QuYWRkKHIpLGU9e3JlbDplLGNyb3NzT3JpZ2luOnQsaHJlZjpufSxudWxsPT09Y0kucXVlcnlTZWxlY3RvcihyKSYmKGNjKG49Y0kuY3JlYXRlRWxlbWVudChcImxpbmtcIiksXCJsaW5rXCIsZSksZVkobiksY0kuaGVhZC5hcHBlbmRDaGlsZChuKSkpfX1mdW5jdGlvbiBjRihlLG4sdCxyKXt2YXIgbz0obz1VLmN1cnJlbnQpP2NCKG8pOm51bGw7aWYoIW8pdGhyb3cgRXJyb3IobCg0NDYpKTtzd2l0Y2goZSl7Y2FzZVwibWV0YVwiOmNhc2VcInRpdGxlXCI6cmV0dXJuIG51bGw7Y2FzZVwic3R5bGVcIjpyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdC5wcmVjZWRlbmNlJiZcInN0cmluZ1wiPT10eXBlb2YgdC5ocmVmPyhuPWNVKHQuaHJlZiksKHI9KHQ9ZVoobykuaG9pc3RhYmxlU3R5bGVzKS5nZXQobikpfHwocj17dHlwZTpcInN0eWxlXCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9LHQuc2V0KG4scikpLHIpOnt0eXBlOlwidm9pZFwiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfTtjYXNlXCJsaW5rXCI6aWYoXCJzdHlsZXNoZWV0XCI9PT10LnJlbCYmXCJzdHJpbmdcIj09dHlwZW9mIHQuaHJlZiYmXCJzdHJpbmdcIj09dHlwZW9mIHQucHJlY2VkZW5jZSl7ZT1jVSh0LmhyZWYpO3ZhciBhLGkscyxjLHU9ZVoobykuaG9pc3RhYmxlU3R5bGVzLGQ9dS5nZXQoZSk7aWYoZHx8KG89by5vd25lckRvY3VtZW50fHxvLGQ9e3R5cGU6XCJzdHlsZXNoZWV0XCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOntsb2FkaW5nOjAscHJlbG9hZDpudWxsfX0sdS5zZXQoZSxkKSwodT1vLnF1ZXJ5U2VsZWN0b3IoY1YoZSkpKSYmIXUuX3AmJihkLmluc3RhbmNlPXUsZC5zdGF0ZS5sb2FkaW5nPTUpLGNOLmhhcyhlKXx8KHQ9e3JlbDpcInByZWxvYWRcIixhczpcInN0eWxlXCIsaHJlZjp0LmhyZWYsY3Jvc3NPcmlnaW46dC5jcm9zc09yaWdpbixpbnRlZ3JpdHk6dC5pbnRlZ3JpdHksbWVkaWE6dC5tZWRpYSxocmVmTGFuZzp0LmhyZWZMYW5nLHJlZmVycmVyUG9saWN5OnQucmVmZXJyZXJQb2xpY3l9LGNOLnNldChlLHQpLHV8fChhPW8saT1lLHM9dCxjPWQuc3RhdGUsYS5xdWVyeVNlbGVjdG9yKCdsaW5rW3JlbD1cInByZWxvYWRcIl1bYXM9XCJzdHlsZVwiXVsnK2krXCJdXCIpP2MubG9hZGluZz0xOihjLnByZWxvYWQ9aT1hLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLGkuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixmdW5jdGlvbigpe3JldHVybiBjLmxvYWRpbmd8PTF9KSxpLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLGZ1bmN0aW9uKCl7cmV0dXJuIGMubG9hZGluZ3w9Mn0pLGNjKGksXCJsaW5rXCIscyksZVkoaSksYS5oZWFkLmFwcGVuZENoaWxkKGkpKSkpKSxuJiZudWxsPT09cil0aHJvdyBFcnJvcihsKDUyOCxcIlwiKSk7cmV0dXJuIGR9aWYobiYmbnVsbCE9PXIpdGhyb3cgRXJyb3IobCg1MjksXCJcIikpO3JldHVybiBudWxsO2Nhc2VcInNjcmlwdFwiOnJldHVybiBuPXQuYXN5bmMsXCJzdHJpbmdcIj09dHlwZW9mKHQ9dC5zcmMpJiZuJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBuJiZcInN5bWJvbFwiIT10eXBlb2Ygbj8obj1jVyh0KSwocj0odD1lWihvKS5ob2lzdGFibGVTY3JpcHRzKS5nZXQobikpfHwocj17dHlwZTpcInNjcmlwdFwiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfSx0LnNldChuLHIpKSxyKTp7dHlwZTpcInZvaWRcIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH07ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDQ0NCxlKSl9fWZ1bmN0aW9uIGNVKGUpe3JldHVybidocmVmPVwiJytubihlKSsnXCInfWZ1bmN0aW9uIGNWKGUpe3JldHVybidsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl1bJytlK1wiXVwifWZ1bmN0aW9uIGNxKGUpe3JldHVybiBmKHt9LGUse1wiZGF0YS1wcmVjZWRlbmNlXCI6ZS5wcmVjZWRlbmNlLHByZWNlZGVuY2U6bnVsbH0pfWZ1bmN0aW9uIGNXKGUpe3JldHVybidbc3JjPVwiJytubihlKSsnXCJdJ31mdW5jdGlvbiBjJChlKXtyZXR1cm5cInNjcmlwdFthc3luY11cIitlfWZ1bmN0aW9uIGNaKGUsbix0KXtpZihuLmNvdW50KyssbnVsbD09PW4uaW5zdGFuY2Upc3dpdGNoKG4udHlwZSl7Y2FzZVwic3R5bGVcIjp2YXIgcj1lLnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlW2RhdGEtaHJlZn49XCInK25uKHQuaHJlZikrJ1wiXScpO2lmKHIpcmV0dXJuIG4uaW5zdGFuY2U9cixlWShyKSxyO3ZhciBvPWYoe30sdCx7XCJkYXRhLWhyZWZcIjp0LmhyZWYsXCJkYXRhLXByZWNlZGVuY2VcIjp0LnByZWNlZGVuY2UsaHJlZjpudWxsLHByZWNlZGVuY2U6bnVsbH0pO3JldHVybiBlWShyPShlLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSksY2MocixcInN0eWxlXCIsbyksY1kocix0LnByZWNlZGVuY2UsZSksbi5pbnN0YW5jZT1yO2Nhc2VcInN0eWxlc2hlZXRcIjpvPWNVKHQuaHJlZik7dmFyIGE9ZS5xdWVyeVNlbGVjdG9yKGNWKG8pKTtpZihhKXJldHVybiBuLnN0YXRlLmxvYWRpbmd8PTQsbi5pbnN0YW5jZT1hLGVZKGEpLGE7cj1jcSh0KSwobz1jTi5nZXQobykpJiZjWChyLG8pLGVZKGE9KGUub3duZXJEb2N1bWVudHx8ZSkuY3JlYXRlRWxlbWVudChcImxpbmtcIikpO3ZhciBpPWE7cmV0dXJuIGkuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSxuKXtpLm9ubG9hZD1lLGkub25lcnJvcj1ufSksY2MoYSxcImxpbmtcIixyKSxuLnN0YXRlLmxvYWRpbmd8PTQsY1koYSx0LnByZWNlZGVuY2UsZSksbi5pbnN0YW5jZT1hO2Nhc2VcInNjcmlwdFwiOmlmKGE9Y1codC5zcmMpLG89ZS5xdWVyeVNlbGVjdG9yKGMkKGEpKSlyZXR1cm4gbi5pbnN0YW5jZT1vLGVZKG8pLG87cmV0dXJuIHI9dCwobz1jTi5nZXQoYSkpJiZjSyhyPWYoe30sdCksbyksZVkobz0oZT1lLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLGNjKG8sXCJsaW5rXCIsciksZS5oZWFkLmFwcGVuZENoaWxkKG8pLG4uaW5zdGFuY2U9bztjYXNlXCJ2b2lkXCI6cmV0dXJuIG51bGw7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDQ0MyxuLnR5cGUpKX1yZXR1cm5cInN0eWxlc2hlZXRcIj09PW4udHlwZSYmMD09KDQmbi5zdGF0ZS5sb2FkaW5nKSYmKHI9bi5pbnN0YW5jZSxuLnN0YXRlLmxvYWRpbmd8PTQsY1kocix0LnByZWNlZGVuY2UsZSkpLG4uaW5zdGFuY2V9ZnVuY3Rpb24gY1koZSxuLHQpe2Zvcih2YXIgcj10LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXVtkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0nKSxvPXIubGVuZ3RoP3Jbci5sZW5ndGgtMV06bnVsbCxhPW8saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbD1yW2ldO2lmKGwuZGF0YXNldC5wcmVjZWRlbmNlPT09bilhPWw7ZWxzZSBpZihhIT09bylicmVha31hP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSxhLm5leHRTaWJsaW5nKToobj05PT09dC5ub2RlVHlwZT90LmhlYWQ6dCkuaW5zZXJ0QmVmb3JlKGUsbi5maXJzdENoaWxkKX1mdW5jdGlvbiBjWChlLG4pe251bGw9PWUuY3Jvc3NPcmlnaW4mJihlLmNyb3NzT3JpZ2luPW4uY3Jvc3NPcmlnaW4pLG51bGw9PWUucmVmZXJyZXJQb2xpY3kmJihlLnJlZmVycmVyUG9saWN5PW4ucmVmZXJyZXJQb2xpY3kpLG51bGw9PWUudGl0bGUmJihlLnRpdGxlPW4udGl0bGUpfWZ1bmN0aW9uIGNLKGUsbil7bnVsbD09ZS5jcm9zc09yaWdpbiYmKGUuY3Jvc3NPcmlnaW49bi5jcm9zc09yaWdpbiksbnVsbD09ZS5yZWZlcnJlclBvbGljeSYmKGUucmVmZXJyZXJQb2xpY3k9bi5yZWZlcnJlclBvbGljeSksbnVsbD09ZS5pbnRlZ3JpdHkmJihlLmludGVncml0eT1uLmludGVncml0eSl9dmFyIGNRPW51bGw7ZnVuY3Rpb24gY0coZSxuLHQpe2lmKG51bGw9PT1jUSl7dmFyIHI9bmV3IE1hcCxvPWNRPW5ldyBNYXA7by5zZXQodCxyKX1lbHNlKHI9KG89Y1EpLmdldCh0KSl8fChyPW5ldyBNYXAsby5zZXQodCxyKSk7aWYoci5oYXMoZSkpcmV0dXJuIHI7Zm9yKHIuc2V0KGUsbnVsbCksdD10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIGE9dFtvXTtpZighKGFbZVVdfHxhW2VOXXx8XCJsaW5rXCI9PT1lJiZcInN0eWxlc2hlZXRcIj09PWEuZ2V0QXR0cmlidXRlKFwicmVsXCIpKSYmXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIT09YS5uYW1lc3BhY2VVUkkpe3ZhciBpPWEuZ2V0QXR0cmlidXRlKG4pfHxcIlwiO2k9ZStpO3ZhciBsPXIuZ2V0KGkpO2w/bC5wdXNoKGEpOnIuc2V0KGksW2FdKX19cmV0dXJuIHJ9ZnVuY3Rpb24gY0ooZSxuLHQpeyhlPWUub3duZXJEb2N1bWVudHx8ZSkuaGVhZC5pbnNlcnRCZWZvcmUodCxcInRpdGxlXCI9PT1uP2UucXVlcnlTZWxlY3RvcihcImhlYWQgPiB0aXRsZVwiKTpudWxsKX1mdW5jdGlvbiBjMChlKXtyZXR1cm5cInN0eWxlc2hlZXRcIiE9PWUudHlwZXx8MCE9KDMmZS5zdGF0ZS5sb2FkaW5nKX12YXIgYzE9bnVsbDtmdW5jdGlvbiBjMigpe2lmKHRoaXMuY291bnQtLSwwPT09dGhpcy5jb3VudCl7aWYodGhpcy5zdHlsZXNoZWV0cyljNSh0aGlzLHRoaXMuc3R5bGVzaGVldHMpO2Vsc2UgaWYodGhpcy51bnN1c3BlbmQpe3ZhciBlPXRoaXMudW5zdXNwZW5kO3RoaXMudW5zdXNwZW5kPW51bGwsZSgpfX19dmFyIGM0PW51bGw7ZnVuY3Rpb24gYzUoZSxuKXtlLnN0eWxlc2hlZXRzPW51bGwsbnVsbCE9PWUudW5zdXNwZW5kJiYoZS5jb3VudCsrLGM0PW5ldyBNYXAsbi5mb3JFYWNoKGMzLGUpLGM0PW51bGwsYzIuY2FsbChlKSl9ZnVuY3Rpb24gYzMoZSxuKXtpZighKDQmbi5zdGF0ZS5sb2FkaW5nKSl7dmFyIHQ9YzQuZ2V0KGUpO2lmKHQpdmFyIHI9dC5nZXQobnVsbCk7ZWxzZXt0PW5ldyBNYXAsYzQuc2V0KGUsdCk7Zm9yKHZhciBvPWUucXVlcnlTZWxlY3RvckFsbChcImxpbmtbZGF0YS1wcmVjZWRlbmNlXSxzdHlsZVtkYXRhLXByZWNlZGVuY2VdXCIpLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGk9b1thXTsoXCJMSU5LXCI9PT1pLm5vZGVOYW1lfHxcIm5vdCBhbGxcIiE9PWkuZ2V0QXR0cmlidXRlKFwibWVkaWFcIikpJiYodC5zZXQoaS5kYXRhc2V0LnByZWNlZGVuY2UsaSkscj1pKX1yJiZ0LnNldChudWxsLHIpfWk9KG89bi5pbnN0YW5jZSkuZ2V0QXR0cmlidXRlKFwiZGF0YS1wcmVjZWRlbmNlXCIpLChhPXQuZ2V0KGkpfHxyKT09PXImJnQuc2V0KG51bGwsbyksdC5zZXQoaSxvKSx0aGlzLmNvdW50Kysscj1jMi5iaW5kKHRoaXMpLG8uYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixyKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLHIpLGE/YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLGEubmV4dFNpYmxpbmcpOihlPTk9PT1lLm5vZGVUeXBlP2UuaGVhZDplKS5pbnNlcnRCZWZvcmUobyxlLmZpcnN0Q2hpbGQpLG4uc3RhdGUubG9hZGluZ3w9NH19dmFyIGM2PXskJHR5cGVvZjp4LFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbCxfY3VycmVudFZhbHVlOlIsX2N1cnJlbnRWYWx1ZTI6UixfdGhyZWFkQ291bnQ6MH07ZnVuY3Rpb24gYzkoZSxuLHQscixvLGEsaSxsLHMpe3RoaXMudGFnPTEsdGhpcy5jb250YWluZXJJbmZvPWUsdGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGwsdGhpcy50aW1lb3V0SGFuZGxlPS0xLHRoaXMuY2FsbGJhY2tOb2RlPXRoaXMubmV4dD10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD10aGlzLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbCx0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MCx0aGlzLmV4cGlyYXRpb25UaW1lcz1lTygtMSksdGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLnNoZWxsU3VzcGVuZENvdW50ZXI9dGhpcy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLndhcm1MYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9ZU8oMCksdGhpcy5oaWRkZW5VcGRhdGVzPWVPKG51bGwpLHRoaXMuaWRlbnRpZmllclByZWZpeD1yLHRoaXMub25VbmNhdWdodEVycm9yPW8sdGhpcy5vbkNhdWdodEVycm9yPWEsdGhpcy5vblJlY292ZXJhYmxlRXJyb3I9aSx0aGlzLnBvb2xlZENhY2hlPW51bGwsdGhpcy5wb29sZWRDYWNoZUxhbmVzPTAsdGhpcy5mb3JtU3RhdGU9cyx0aGlzLmluY29tcGxldGVUcmFuc2l0aW9ucz1uZXcgTWFwfWZ1bmN0aW9uIGM4KGUsbix0LHIsbyxhKXtvPW8/dDg6dDgsbnVsbD09PXIuY29udGV4dD9yLmNvbnRleHQ9bzpyLnBlbmRpbmdDb250ZXh0PW8sKHI9b0EobikpLnBheWxvYWQ9e2VsZW1lbnQ6dH0sbnVsbCE9PShhPXZvaWQgMD09PWE/bnVsbDphKSYmKHIuY2FsbGJhY2s9YSksbnVsbCE9PSh0PW9PKGUscixuKSkmJihzbyh0LGUsbiksb0ModCxlLG4pKX1mdW5jdGlvbiBjNyhlLG4pe2lmKG51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpJiZudWxsIT09ZS5kZWh5ZHJhdGVkKXt2YXIgdD1lLnJldHJ5TGFuZTtlLnJldHJ5TGFuZT0wIT09dCYmdDxuP3Q6bn19ZnVuY3Rpb24gdWUoZSxuKXtjNyhlLG4pLChlPWUuYWx0ZXJuYXRlKSYmYzcoZSxuKX1mdW5jdGlvbiB1bihlKXtpZigxMz09PWUudGFnfHwzMT09PWUudGFnKXt2YXIgbj10MyhlLDB4NDAwMDAwMCk7bnVsbCE9PW4mJnNvKG4sZSwweDQwMDAwMDApLHVlKGUsMHg0MDAwMDAwKX19ZnVuY3Rpb24gdXQoZSl7aWYoMTM9PT1lLnRhZ3x8MzE9PT1lLnRhZyl7dmFyIG49c3QoKSx0PXQzKGUsbj1lUChuKSk7bnVsbCE9PXQmJnNvKHQsZSxuKSx1ZShlLG4pfX12YXIgdXI9ITA7ZnVuY3Rpb24gdW8oZSxuLHQscil7dmFyIG89TC5UO0wuVD1udWxsO3ZhciBhPVQucDt0cnl7VC5wPTIsdWkoZSxuLHQscil9ZmluYWxseXtULnA9YSxMLlQ9b319ZnVuY3Rpb24gdWEoZSxuLHQscil7dmFyIG89TC5UO0wuVD1udWxsO3ZhciBhPVQucDt0cnl7VC5wPTgsdWkoZSxuLHQscil9ZmluYWxseXtULnA9YSxMLlQ9b319ZnVuY3Rpb24gdWkoZSxuLHQscil7aWYodXIpe3ZhciBvPXVsKHIpO2lmKG51bGw9PT1vKXM4KGUsbixyLHVzLHQpLHV5KGUscik7ZWxzZSBpZihmdW5jdGlvbihlLG4sdCxyLG8pe3N3aXRjaChuKXtjYXNlXCJmb2N1c2luXCI6cmV0dXJuIHVmPXV4KHVmLGUsbix0LHIsbyksITA7Y2FzZVwiZHJhZ2VudGVyXCI6cmV0dXJuIHVwPXV4KHVwLGUsbix0LHIsbyksITA7Y2FzZVwibW91c2VvdmVyXCI6cmV0dXJuIHVoPXV4KHVoLGUsbix0LHIsbyksITA7Y2FzZVwicG9pbnRlcm92ZXJcIjp2YXIgYT1vLnBvaW50ZXJJZDtyZXR1cm4gdWcuc2V0KGEsdXgodWcuZ2V0KGEpfHxudWxsLGUsbix0LHIsbykpLCEwO2Nhc2VcImdvdHBvaW50ZXJjYXB0dXJlXCI6cmV0dXJuIGE9by5wb2ludGVySWQsdW0uc2V0KGEsdXgodW0uZ2V0KGEpfHxudWxsLGUsbix0LHIsbykpLCEwfXJldHVybiExfShvLGUsbix0LHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZih1eShlLHIpLDQmbiYmLTE8dWIuaW5kZXhPZihlKSl7Zm9yKDtudWxsIT09bzspe3ZhciBhPWVXKG8pO2lmKG51bGwhPT1hKXN3aXRjaChhLnRhZyl7Y2FzZSAzOmlmKChhPWEuc3RhdGVOb2RlKS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXt2YXIgaT1leChhLnBlbmRpbmdMYW5lcyk7aWYoMCE9PWkpe3ZhciBsPWE7Zm9yKGwucGVuZGluZ0xhbmVzfD0yLGwuZW50YW5nbGVkTGFuZXN8PTI7aTspe3ZhciBzPTE8PDMxLWVnKGkpO2wuZW50YW5nbGVtZW50c1sxXXw9cyxpJj1+c31zVShhKSwwPT0oNiZsUikmJihsMD1lcigpKzUwMCxzVigwLCExKSl9fWJyZWFrO2Nhc2UgMzE6Y2FzZSAxMzpudWxsIT09KGw9dDMoYSwyKSkmJnNvKGwsYSwyKSxzcygpLHVlKGEsMil9aWYobnVsbD09PShhPXVsKHIpKSYmczgoZSxuLHIsdXMsdCksYT09PW8pYnJlYWs7bz1hfW51bGwhPT1vJiZyLnN0b3BQcm9wYWdhdGlvbigpfWVsc2UgczgoZSxuLHIsbnVsbCx0KX19ZnVuY3Rpb24gdWwoZSl7cmV0dXJuIHVjKGU9bmIoZSkpfXZhciB1cz1udWxsO2Z1bmN0aW9uIHVjKGUpe2lmKHVzPW51bGwsbnVsbCE9PShlPWVxKGUpKSl7dmFyIG49cyhlKTtpZihudWxsPT09billPW51bGw7ZWxzZXt2YXIgdD1uLnRhZztpZigxMz09PXQpe2lmKG51bGwhPT0oZT1jKG4pKSlyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZigzMT09PXQpe2lmKG51bGwhPT0oZT11KG4pKSlyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZigzPT09dCl7aWYobi5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClyZXR1cm4gMz09PW4udGFnP24uc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtlPW51bGx9ZWxzZSBuIT09ZSYmKGU9bnVsbCl9fXJldHVybiB1cz1lLG51bGx9ZnVuY3Rpb24gdXUoZSl7c3dpdGNoKGUpe2Nhc2VcImJlZm9yZXRvZ2dsZVwiOmNhc2VcImNhbmNlbFwiOmNhc2VcImNsaWNrXCI6Y2FzZVwiY2xvc2VcIjpjYXNlXCJjb250ZXh0bWVudVwiOmNhc2VcImNvcHlcIjpjYXNlXCJjdXRcIjpjYXNlXCJhdXhjbGlja1wiOmNhc2VcImRibGNsaWNrXCI6Y2FzZVwiZHJhZ2VuZFwiOmNhc2VcImRyYWdzdGFydFwiOmNhc2VcImRyb3BcIjpjYXNlXCJmb2N1c2luXCI6Y2FzZVwiZm9jdXNvdXRcIjpjYXNlXCJpbnB1dFwiOmNhc2VcImludmFsaWRcIjpjYXNlXCJrZXlkb3duXCI6Y2FzZVwia2V5cHJlc3NcIjpjYXNlXCJrZXl1cFwiOmNhc2VcIm1vdXNlZG93blwiOmNhc2VcIm1vdXNldXBcIjpjYXNlXCJwYXN0ZVwiOmNhc2VcInBhdXNlXCI6Y2FzZVwicGxheVwiOmNhc2VcInBvaW50ZXJjYW5jZWxcIjpjYXNlXCJwb2ludGVyZG93blwiOmNhc2VcInBvaW50ZXJ1cFwiOmNhc2VcInJhdGVjaGFuZ2VcIjpjYXNlXCJyZXNldFwiOmNhc2VcInJlc2l6ZVwiOmNhc2VcInNlZWtlZFwiOmNhc2VcInN1Ym1pdFwiOmNhc2VcInRvZ2dsZVwiOmNhc2VcInRvdWNoY2FuY2VsXCI6Y2FzZVwidG91Y2hlbmRcIjpjYXNlXCJ0b3VjaHN0YXJ0XCI6Y2FzZVwidm9sdW1lY2hhbmdlXCI6Y2FzZVwiY2hhbmdlXCI6Y2FzZVwic2VsZWN0aW9uY2hhbmdlXCI6Y2FzZVwidGV4dElucHV0XCI6Y2FzZVwiY29tcG9zaXRpb25zdGFydFwiOmNhc2VcImNvbXBvc2l0aW9uZW5kXCI6Y2FzZVwiY29tcG9zaXRpb251cGRhdGVcIjpjYXNlXCJiZWZvcmVibHVyXCI6Y2FzZVwiYWZ0ZXJibHVyXCI6Y2FzZVwiYmVmb3JlaW5wdXRcIjpjYXNlXCJibHVyXCI6Y2FzZVwiZnVsbHNjcmVlbmNoYW5nZVwiOmNhc2VcImZvY3VzXCI6Y2FzZVwiaGFzaGNoYW5nZVwiOmNhc2VcInBvcHN0YXRlXCI6Y2FzZVwic2VsZWN0XCI6Y2FzZVwic2VsZWN0c3RhcnRcIjpyZXR1cm4gMjtjYXNlXCJkcmFnXCI6Y2FzZVwiZHJhZ2VudGVyXCI6Y2FzZVwiZHJhZ2V4aXRcIjpjYXNlXCJkcmFnbGVhdmVcIjpjYXNlXCJkcmFnb3ZlclwiOmNhc2VcIm1vdXNlbW92ZVwiOmNhc2VcIm1vdXNlb3V0XCI6Y2FzZVwibW91c2VvdmVyXCI6Y2FzZVwicG9pbnRlcm1vdmVcIjpjYXNlXCJwb2ludGVyb3V0XCI6Y2FzZVwicG9pbnRlcm92ZXJcIjpjYXNlXCJzY3JvbGxcIjpjYXNlXCJ0b3VjaG1vdmVcIjpjYXNlXCJ3aGVlbFwiOmNhc2VcIm1vdXNlZW50ZXJcIjpjYXNlXCJtb3VzZWxlYXZlXCI6Y2FzZVwicG9pbnRlcmVudGVyXCI6Y2FzZVwicG9pbnRlcmxlYXZlXCI6cmV0dXJuIDg7Y2FzZVwibWVzc2FnZVwiOnN3aXRjaChlbygpKXtjYXNlIGVhOnJldHVybiAyO2Nhc2UgZWk6cmV0dXJuIDg7Y2FzZSBlbDpjYXNlIGVzOnJldHVybiAzMjtjYXNlIGVjOnJldHVybiAweDEwMDAwMDAwO2RlZmF1bHQ6cmV0dXJuIDMyfWRlZmF1bHQ6cmV0dXJuIDMyfX12YXIgdWQ9ITEsdWY9bnVsbCx1cD1udWxsLHVoPW51bGwsdWc9bmV3IE1hcCx1bT1uZXcgTWFwLHV2PVtdLHViPVwibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0XCIuc3BsaXQoXCIgXCIpO2Z1bmN0aW9uIHV5KGUsbil7c3dpdGNoKGUpe2Nhc2VcImZvY3VzaW5cIjpjYXNlXCJmb2N1c291dFwiOnVmPW51bGw7YnJlYWs7Y2FzZVwiZHJhZ2VudGVyXCI6Y2FzZVwiZHJhZ2xlYXZlXCI6dXA9bnVsbDticmVhaztjYXNlXCJtb3VzZW92ZXJcIjpjYXNlXCJtb3VzZW91dFwiOnVoPW51bGw7YnJlYWs7Y2FzZVwicG9pbnRlcm92ZXJcIjpjYXNlXCJwb2ludGVyb3V0XCI6dWcuZGVsZXRlKG4ucG9pbnRlcklkKTticmVhaztjYXNlXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2VcImxvc3Rwb2ludGVyY2FwdHVyZVwiOnVtLmRlbGV0ZShuLnBvaW50ZXJJZCl9fWZ1bmN0aW9uIHV4KGUsbix0LHIsbyxhKXtyZXR1cm4gbnVsbD09PWV8fGUubmF0aXZlRXZlbnQhPT1hPyhlPXtibG9ja2VkT246bixkb21FdmVudE5hbWU6dCxldmVudFN5c3RlbUZsYWdzOnIsbmF0aXZlRXZlbnQ6YSx0YXJnZXRDb250YWluZXJzOltvXX0sbnVsbCE9PW4mJm51bGwhPT0obj1lVyhuKSkmJnVuKG4pKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLG49ZS50YXJnZXRDb250YWluZXJzLG51bGwhPT1vJiYtMT09PW4uaW5kZXhPZihvKSYmbi5wdXNoKG8pKSxlfWZ1bmN0aW9uIHV3KGUpe3ZhciBuPWVxKGUudGFyZ2V0KTtpZihudWxsIT09bil7dmFyIHQ9cyhuKTtpZihudWxsIT09dCl7aWYoMTM9PT0obj10LnRhZykpe2lmKG51bGwhPT0obj1jKHQpKSl7ZS5ibG9ja2VkT249bixlVChlLnByaW9yaXR5LGZ1bmN0aW9uKCl7dXQodCl9KTtyZXR1cm59fWVsc2UgaWYoMzE9PT1uKXtpZihudWxsIT09KG49dSh0KSkpe2UuYmxvY2tlZE9uPW4sZVQoZS5wcmlvcml0eSxmdW5jdGlvbigpe3V0KHQpfSk7cmV0dXJufX1lbHNlIGlmKDM9PT1uJiZ0LnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXtlLmJsb2NrZWRPbj0zPT09dC50YWc/dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19fWUuYmxvY2tlZE9uPW51bGx9ZnVuY3Rpb24gdWooZSl7aWYobnVsbCE9PWUuYmxvY2tlZE9uKXJldHVybiExO2Zvcih2YXIgbj1lLnRhcmdldENvbnRhaW5lcnM7MDxuLmxlbmd0aDspe3ZhciB0PXVsKGUubmF0aXZlRXZlbnQpO2lmKG51bGwhPT10KXJldHVybiBudWxsIT09KG49ZVcodCkpJiZ1bihuKSxlLmJsb2NrZWRPbj10LCExO3ZhciByPW5ldyh0PWUubmF0aXZlRXZlbnQpLmNvbnN0cnVjdG9yKHQudHlwZSx0KTtudj1yLHQudGFyZ2V0LmRpc3BhdGNoRXZlbnQociksbnY9bnVsbCxuLnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gdWsoZSxuLHQpe3VqKGUpJiZ0LmRlbGV0ZShuKX1mdW5jdGlvbiB1QSgpe3VkPSExLG51bGwhPT11ZiYmdWoodWYpJiYodWY9bnVsbCksbnVsbCE9PXVwJiZ1aih1cCkmJih1cD1udWxsKSxudWxsIT09dWgmJnVqKHVoKSYmKHVoPW51bGwpLHVnLmZvckVhY2godWspLHVtLmZvckVhY2godWspfWZ1bmN0aW9uIHVPKGUsbil7ZS5ibG9ja2VkT249PT1uJiYoZS5ibG9ja2VkT249bnVsbCx1ZHx8KHVkPSEwLG8udW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhvLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LHVBKSkpfXZhciB1Qz1udWxsO2Z1bmN0aW9uIHVTKGUpe3VDIT09ZSYmKHVDPWUsby51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKG8udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZnVuY3Rpb24oKXt1Qz09PWUmJih1Qz1udWxsKTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTMpe3ZhciB0PWVbbl0scj1lW24rMV0sbz1lW24rMl07aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgcilpZihudWxsPT09dWMocnx8dCkpY29udGludWU7ZWxzZSBicmVhazt2YXIgYT1lVyh0KTtudWxsIT09YSYmKGUuc3BsaWNlKG4sMyksbi09MyxhSyhhLHtwZW5kaW5nOiEwLGRhdGE6byxtZXRob2Q6dC5tZXRob2QsYWN0aW9uOnJ9LHIsbykpfX0pKX1mdW5jdGlvbiB1RShlKXtmdW5jdGlvbiBuKG4pe3JldHVybiB1TyhuLGUpfW51bGwhPT11ZiYmdU8odWYsZSksbnVsbCE9PXVwJiZ1Tyh1cCxlKSxudWxsIT09dWgmJnVPKHVoLGUpLHVnLmZvckVhY2gobiksdW0uZm9yRWFjaChuKTtmb3IodmFyIHQ9MDt0PHV2Lmxlbmd0aDt0Kyspe3ZhciByPXV2W3RdO3IuYmxvY2tlZE9uPT09ZSYmKHIuYmxvY2tlZE9uPW51bGwpfWZvcig7MDx1di5sZW5ndGgmJm51bGw9PT0odD11dlswXSkuYmxvY2tlZE9uOyl1dyh0KSxudWxsPT09dC5ibG9ja2VkT24mJnV2LnNoaWZ0KCk7aWYobnVsbCE9KHQ9KGUub3duZXJEb2N1bWVudHx8ZSkuJCRyZWFjdEZvcm1SZXBsYXkpKWZvcihyPTA7cjx0Lmxlbmd0aDtyKz0zKXt2YXIgbz10W3JdLGE9dFtyKzFdLGk9b1tlRF18fG51bGw7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSlpfHx1Uyh0KTtlbHNlIGlmKGkpe3ZhciBsPW51bGw7aWYoYSYmYS5oYXNBdHRyaWJ1dGUoXCJmb3JtQWN0aW9uXCIpKXtpZihvPWEsaT1hW2VEXXx8bnVsbClsPWkuZm9ybUFjdGlvbjtlbHNlIGlmKG51bGwhPT11YyhvKSljb250aW51ZX1lbHNlIGw9aS5hY3Rpb247XCJmdW5jdGlvblwiPT10eXBlb2YgbD90W3IrMV09bDoodC5zcGxpY2UociwzKSxyLT0zKSx1Uyh0KX19fWZ1bmN0aW9uIHVfKCl7ZnVuY3Rpb24gZShlKXtlLmNhbkludGVyY2VwdCYmXCJyZWFjdC10cmFuc2l0aW9uXCI9PT1lLmluZm8mJmUuaW50ZXJjZXB0KHtoYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3JldHVybiBvPWV9KX0sZm9jdXNSZXNldDpcIm1hbnVhbFwiLHNjcm9sbDpcIm1hbnVhbFwifSl9ZnVuY3Rpb24gbigpe251bGwhPT1vJiYobygpLG89bnVsbCkscnx8c2V0VGltZW91dCh0LDIwKX1mdW5jdGlvbiB0KCl7aWYoIXImJiFuYXZpZ2F0aW9uLnRyYW5zaXRpb24pe3ZhciBlPW5hdmlnYXRpb24uY3VycmVudEVudHJ5O2UmJm51bGwhPWUudXJsJiZuYXZpZ2F0aW9uLm5hdmlnYXRlKGUudXJsLHtzdGF0ZTplLmdldFN0YXRlKCksaW5mbzpcInJlYWN0LXRyYW5zaXRpb25cIixoaXN0b3J5OlwicmVwbGFjZVwifSl9fWlmKFwib2JqZWN0XCI9PXR5cGVvZiBuYXZpZ2F0aW9uKXt2YXIgcj0hMSxvPW51bGw7cmV0dXJuIG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlXCIsZSksbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKFwibmF2aWdhdGVzdWNjZXNzXCIsbiksbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKFwibmF2aWdhdGVlcnJvclwiLG4pLHNldFRpbWVvdXQodCwxMDApLGZ1bmN0aW9uKCl7cj0hMCxuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJuYXZpZ2F0ZVwiLGUpLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlc3VjY2Vzc1wiLG4pLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlZXJyb3JcIixuKSxudWxsIT09byYmKG8oKSxvPW51bGwpfX19ZnVuY3Rpb24gdVAoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9ZnVuY3Rpb24gdXooZSl7dGhpcy5faW50ZXJuYWxSb290PWV9dXoucHJvdG90eXBlLnJlbmRlcj11UC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMuX2ludGVybmFsUm9vdDtpZihudWxsPT09bil0aHJvdyBFcnJvcihsKDQwOSkpO2M4KG4uY3VycmVudCxzdCgpLGUsbixudWxsLG51bGwpfSx1ei5wcm90b3R5cGUudW5tb3VudD11UC5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ludGVybmFsUm9vdDtpZihudWxsIT09ZSl7dGhpcy5faW50ZXJuYWxSb290PW51bGw7dmFyIG49ZS5jb250YWluZXJJbmZvO2M4KGUuY3VycmVudCwyLG51bGwsZSxudWxsLG51bGwpLHNzKCksbltlQl09bnVsbH19LHV6LnByb3RvdHlwZS51bnN0YWJsZV9zY2hlZHVsZUh5ZHJhdGlvbj1mdW5jdGlvbihlKXtpZihlKXt2YXIgbj1lTCgpO2U9e2Jsb2NrZWRPbjpudWxsLHRhcmdldDplLHByaW9yaXR5Om59O2Zvcih2YXIgdD0wO3Q8dXYubGVuZ3RoJiYwIT09biYmbjx1dlt0XS5wcmlvcml0eTt0KyspO3V2LnNwbGljZSh0LDAsZSksMD09PXQmJnV3KGUpfX07dmFyIHVMPWEudmVyc2lvbjtpZihcIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIiE9PXVMKXRocm93IEVycm9yKGwoNTI3LHVMLFwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwiKSk7aWYoVC5maW5kRE9NTm9kZT1mdW5jdGlvbihlKXt2YXIgbj1lLl9yZWFjdEludGVybmFscztpZih2b2lkIDA9PT1uKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJlbmRlcil0aHJvdyBFcnJvcihsKDE4OCkpO3Rocm93IEVycm9yKGwoMjY4LGU9T2JqZWN0LmtleXMoZSkuam9pbihcIixcIikpKX1yZXR1cm4gZT1udWxsPT09KGU9bnVsbCE9PShlPWZ1bmN0aW9uKGUpe3ZhciBuPWUuYWx0ZXJuYXRlO2lmKCFuKXtpZihudWxsPT09KG49cyhlKSkpdGhyb3cgRXJyb3IobCgxODgpKTtyZXR1cm4gbiE9PWU/bnVsbDplfWZvcih2YXIgdD1lLHI9bjs7KXt2YXIgbz10LnJldHVybjtpZihudWxsPT09bylicmVhazt2YXIgYT1vLmFsdGVybmF0ZTtpZihudWxsPT09YSl7aWYobnVsbCE9PShyPW8ucmV0dXJuKSl7dD1yO2NvbnRpbnVlfWJyZWFrfWlmKG8uY2hpbGQ9PT1hLmNoaWxkKXtmb3IoYT1vLmNoaWxkO2E7KXtpZihhPT09dClyZXR1cm4gZChvKSxlO2lmKGE9PT1yKXJldHVybiBkKG8pLG47YT1hLnNpYmxpbmd9dGhyb3cgRXJyb3IobCgxODgpKX1pZih0LnJldHVybiE9PXIucmV0dXJuKXQ9byxyPWE7ZWxzZXtmb3IodmFyIGk9ITEsYz1vLmNoaWxkO2M7KXtpZihjPT09dCl7aT0hMCx0PW8scj1hO2JyZWFrfWlmKGM9PT1yKXtpPSEwLHI9byx0PWE7YnJlYWt9Yz1jLnNpYmxpbmd9aWYoIWkpe2ZvcihjPWEuY2hpbGQ7Yzspe2lmKGM9PT10KXtpPSEwLHQ9YSxyPW87YnJlYWt9aWYoYz09PXIpe2k9ITAscj1hLHQ9bzticmVha31jPWMuc2libGluZ31pZighaSl0aHJvdyBFcnJvcihsKDE4OSkpfX1pZih0LmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IobCgxOTApKX1pZigzIT09dC50YWcpdGhyb3cgRXJyb3IobCgxODgpKTtyZXR1cm4gdC5zdGF0ZU5vZGUuY3VycmVudD09PXQ/ZTpufShuKSk/ZnVuY3Rpb24gZShuKXt2YXIgdD1uLnRhZztpZig1PT09dHx8MjY9PT10fHwyNz09PXR8fDY9PT10KXJldHVybiBuO2ZvcihuPW4uY2hpbGQ7bnVsbCE9PW47KXtpZihudWxsIT09KHQ9ZShuKSkpcmV0dXJuIHQ7bj1uLnNpYmxpbmd9cmV0dXJuIG51bGx9KGUpOm51bGwpP251bGw6ZS5zdGF0ZU5vZGV9LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pe3ZhciB1VD1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIXVULmlzRGlzYWJsZWQmJnVULnN1cHBvcnRzRmliZXIpdHJ5e2VmPXVULmluamVjdCh7YnVuZGxlVHlwZTowLHZlcnNpb246XCIxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXCIscmVuZGVyZXJQYWNrYWdlTmFtZTpcInJlYWN0LWRvbVwiLGN1cnJlbnREaXNwYXRjaGVyUmVmOkwscmVjb25jaWxlclZlcnNpb246XCIxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXCJ9KSxlcD11VH1jYXRjaChlKXt9fW4uY3JlYXRlUm9vdD1mdW5jdGlvbihlLG4pe2lmKCEodD1lKXx8MSE9PXQubm9kZVR5cGUmJjkhPT10Lm5vZGVUeXBlJiYxMSE9PXQubm9kZVR5cGUpdGhyb3cgRXJyb3IobCgyOTkpKTt2YXIgdCxyLG8sYSxpLHMsYyx1LGQ9ITEsZj1cIlwiLHA9aXUsaD1pZCxnPWlwO3JldHVybiBudWxsIT1uJiYoITA9PT1uLnVuc3RhYmxlX3N0cmljdE1vZGUmJihkPSEwKSx2b2lkIDAhPT1uLmlkZW50aWZpZXJQcmVmaXgmJihmPW4uaWRlbnRpZmllclByZWZpeCksdm9pZCAwIT09bi5vblVuY2F1Z2h0RXJyb3ImJihwPW4ub25VbmNhdWdodEVycm9yKSx2b2lkIDAhPT1uLm9uQ2F1Z2h0RXJyb3ImJihoPW4ub25DYXVnaHRFcnJvciksdm9pZCAwIT09bi5vblJlY292ZXJhYmxlRXJyb3ImJihnPW4ub25SZWNvdmVyYWJsZUVycm9yKSkscj1lLG89MSxhPSExLGk9bnVsbCxzPTAsYz1kLHU9bnVsbCxyPW5ldyBjOShyLG8sYSxmLHAsaCxnLHVfLG51bGwpLG89MSwhMD09PWMmJihvfD0yNCksYz1yZSgzLG51bGwsbnVsbCxvKSxyLmN1cnJlbnQ9YyxjLnN0YXRlTm9kZT1yLG89cjEoKSxvLnJlZkNvdW50Kyssci5wb29sZWRDYWNoZT1vLG8ucmVmQ291bnQrKyxjLm1lbW9pemVkU3RhdGU9e2VsZW1lbnQ6bnVsbCxpc0RlaHlkcmF0ZWQ6YSxjYWNoZTpvfSxvaihjKSxuPXIsZVtlQl09bi5jdXJyZW50LHM2KGUpLG5ldyB1UChuKX19LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiKTtmdW5jdGlvbiBvKGUpe3ZhciBuPVwiaHR0cHM6Ly9yZWFjdC5kZXYvZXJyb3JzL1wiK2U7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXtuKz1cIj9hcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1sxXSk7Zm9yKHZhciB0PTI7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyluKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1t0XSl9cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrZStcIjsgdmlzaXQgXCIrbitcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9ZnVuY3Rpb24gYSgpe312YXIgaT17ZDp7ZjphLHI6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihvKDUyMikpfSxEOmEsQzphLEw6YSxtOmEsWDphLFM6YSxNOmF9LHA6MCxmaW5kRE9NTm9kZTpudWxsfSxsPVN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIikscz1yLl9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERTtmdW5jdGlvbiBjKGUsbil7cmV0dXJuXCJmb250XCI9PT1lP1wiXCI6XCJzdHJpbmdcIj09dHlwZW9mIG4/XCJ1c2UtY3JlZGVudGlhbHNcIj09PW4/bjpcIlwiOnZvaWQgMH1uLl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERT1pLG4uY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKGUsbil7dmFyIHQ9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIW58fDEhPT1uLm5vZGVUeXBlJiY5IT09bi5ub2RlVHlwZSYmMTEhPT1uLm5vZGVUeXBlKXRocm93IEVycm9yKG8oMjk5KSk7cmV0dXJuIGZ1bmN0aW9uKGUsbix0KXt2YXIgcj0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6bCxrZXk6bnVsbD09cj9udWxsOlwiXCIrcixjaGlsZHJlbjplLGNvbnRhaW5lckluZm86bixpbXBsZW1lbnRhdGlvbjp0fX0oZSxuLG51bGwsdCl9LG4uZmx1c2hTeW5jPWZ1bmN0aW9uKGUpe3ZhciBuPXMuVCx0PWkucDt0cnl7aWYocy5UPW51bGwsaS5wPTIsZSlyZXR1cm4gZSgpfWZpbmFsbHl7cy5UPW4saS5wPXQsaS5kLmYoKX19LG4ucHJlY29ubmVjdD1mdW5jdGlvbihlLG4pe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYobj1uP1wic3RyaW5nXCI9PXR5cGVvZihuPW4uY3Jvc3NPcmlnaW4pP1widXNlLWNyZWRlbnRpYWxzXCI9PT1uP246XCJcIjp2b2lkIDA6bnVsbCxpLmQuQyhlLG4pKX0sbi5wcmVmZXRjaEROUz1mdW5jdGlvbihlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmaS5kLkQoZSl9LG4ucHJlaW5pdD1mdW5jdGlvbihlLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZuJiZcInN0cmluZ1wiPT10eXBlb2Ygbi5hcyl7dmFyIHQ9bi5hcyxyPWModCxuLmNyb3NzT3JpZ2luKSxvPVwic3RyaW5nXCI9PXR5cGVvZiBuLmludGVncml0eT9uLmludGVncml0eTp2b2lkIDAsYT1cInN0cmluZ1wiPT10eXBlb2Ygbi5mZXRjaFByaW9yaXR5P24uZmV0Y2hQcmlvcml0eTp2b2lkIDA7XCJzdHlsZVwiPT09dD9pLmQuUyhlLFwic3RyaW5nXCI9PXR5cGVvZiBuLnByZWNlZGVuY2U/bi5wcmVjZWRlbmNlOnZvaWQgMCx7Y3Jvc3NPcmlnaW46cixpbnRlZ3JpdHk6byxmZXRjaFByaW9yaXR5OmF9KTpcInNjcmlwdFwiPT09dCYmaS5kLlgoZSx7Y3Jvc3NPcmlnaW46cixpbnRlZ3JpdHk6byxmZXRjaFByaW9yaXR5OmEsbm9uY2U6XCJzdHJpbmdcIj09dHlwZW9mIG4ubm9uY2U/bi5ub25jZTp2b2lkIDB9KX19LG4ucHJlaW5pdE1vZHVsZT1mdW5jdGlvbihlLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWlmKFwib2JqZWN0XCI9PXR5cGVvZiBuJiZudWxsIT09bil7aWYobnVsbD09bi5hc3x8XCJzY3JpcHRcIj09PW4uYXMpe3ZhciB0PWMobi5hcyxuLmNyb3NzT3JpZ2luKTtpLmQuTShlLHtjcm9zc09yaWdpbjp0LGludGVncml0eTpcInN0cmluZ1wiPT10eXBlb2Ygbi5pbnRlZ3JpdHk/bi5pbnRlZ3JpdHk6dm9pZCAwLG5vbmNlOlwic3RyaW5nXCI9PXR5cGVvZiBuLm5vbmNlP24ubm9uY2U6dm9pZCAwfSl9fWVsc2UgbnVsbD09biYmaS5kLk0oZSl9LG4ucHJlbG9hZD1mdW5jdGlvbihlLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4mJlwic3RyaW5nXCI9PXR5cGVvZiBuLmFzKXt2YXIgdD1uLmFzLHI9Yyh0LG4uY3Jvc3NPcmlnaW4pO2kuZC5MKGUsdCx7Y3Jvc3NPcmlnaW46cixpbnRlZ3JpdHk6XCJzdHJpbmdcIj09dHlwZW9mIG4uaW50ZWdyaXR5P24uaW50ZWdyaXR5OnZvaWQgMCxub25jZTpcInN0cmluZ1wiPT10eXBlb2Ygbi5ub25jZT9uLm5vbmNlOnZvaWQgMCx0eXBlOlwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGU/bi50eXBlOnZvaWQgMCxmZXRjaFByaW9yaXR5Olwic3RyaW5nXCI9PXR5cGVvZiBuLmZldGNoUHJpb3JpdHk/bi5mZXRjaFByaW9yaXR5OnZvaWQgMCxyZWZlcnJlclBvbGljeTpcInN0cmluZ1wiPT10eXBlb2Ygbi5yZWZlcnJlclBvbGljeT9uLnJlZmVycmVyUG9saWN5OnZvaWQgMCxpbWFnZVNyY1NldDpcInN0cmluZ1wiPT10eXBlb2Ygbi5pbWFnZVNyY1NldD9uLmltYWdlU3JjU2V0OnZvaWQgMCxpbWFnZVNpemVzOlwic3RyaW5nXCI9PXR5cGVvZiBuLmltYWdlU2l6ZXM/bi5pbWFnZVNpemVzOnZvaWQgMCxtZWRpYTpcInN0cmluZ1wiPT10eXBlb2Ygbi5tZWRpYT9uLm1lZGlhOnZvaWQgMH0pfX0sbi5wcmVsb2FkTW9kdWxlPWZ1bmN0aW9uKGUsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpaWYobil7dmFyIHQ9YyhuLmFzLG4uY3Jvc3NPcmlnaW4pO2kuZC5tKGUse2FzOlwic3RyaW5nXCI9PXR5cGVvZiBuLmFzJiZcInNjcmlwdFwiIT09bi5hcz9uLmFzOnZvaWQgMCxjcm9zc09yaWdpbjp0LGludGVncml0eTpcInN0cmluZ1wiPT10eXBlb2Ygbi5pbnRlZ3JpdHk/bi5pbnRlZ3JpdHk6dm9pZCAwfSl9ZWxzZSBpLmQubShlKX0sbi5yZXF1ZXN0Rm9ybVJlc2V0PWZ1bmN0aW9uKGUpe2kuZC5yKGUpfSxuLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGUobil9LG4udXNlRm9ybVN0YXRlPWZ1bmN0aW9uKGUsbix0KXtyZXR1cm4gcy5ILnVzZUZvcm1TdGF0ZShlLG4sdCl9LG4udXNlRm9ybVN0YXR1cz1mdW5jdGlvbigpe3JldHVybiBzLkgudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMoKX0sbi52ZXJzaW9uPVwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwifSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2xpZW50LmpzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiOyFmdW5jdGlvbiBlKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmXCJmdW5jdGlvblwiPT10eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoZSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19KCksZS5leHBvcnRzPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20tY2xpZW50LnByb2R1Y3Rpb24uanNcIil9LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9pbmRleC5qc1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjshZnVuY3Rpb24gZSgpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18mJlwiZnVuY3Rpb25cIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSl0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGUpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fSgpLGUuZXhwb3J0cz10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24uanNcIil9LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLmpzXCI6ZnVuY3Rpb24oZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgdD1TeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIik7ZnVuY3Rpb24gcihlLG4scil7dmFyIG89bnVsbDtpZih2b2lkIDAhPT1yJiYobz1cIlwiK3IpLHZvaWQgMCE9PW4ua2V5JiYobz1cIlwiK24ua2V5KSxcImtleVwiaW4gbilmb3IodmFyIGEgaW4gcj17fSxuKVwia2V5XCIhPT1hJiYoclthXT1uW2FdKTtlbHNlIHI9bjtyZXR1cm57JCR0eXBlb2Y6dCx0eXBlOmUsa2V5Om8scmVmOnZvaWQgMCE9PShuPXIucmVmKT9uOm51bGwscHJvcHM6cn19bi5GcmFnbWVudD1TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksbi5qc3g9cixuLmpzeHM9cn0sXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLG4pe1widXNlIHN0cmljdFwiO3ZhciB0PVN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxyPVN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksbz1TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksYT1TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksaT1TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksbD1TeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIikscz1TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxjPVN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSx1PVN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxkPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLGY9U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIikscD1TeW1ib2wuaXRlcmF0b3IsaD17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sZz1PYmplY3QuYXNzaWduLG09e307ZnVuY3Rpb24gdihlLG4sdCl7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD1uLHRoaXMucmVmcz1tLHRoaXMudXBkYXRlcj10fHxofWZ1bmN0aW9uIGIoKXt9ZnVuY3Rpb24geShlLG4sdCl7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD1uLHRoaXMucmVmcz1tLHRoaXMudXBkYXRlcj10fHxofXYucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sdi5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSxuKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9ZSl0aHJvdyBFcnJvcihcInRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSxuLFwic2V0U3RhdGVcIil9LHYucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLFwiZm9yY2VVcGRhdGVcIil9LGIucHJvdG90eXBlPXYucHJvdG90eXBlO3ZhciB4PXkucHJvdG90eXBlPW5ldyBiO3guY29uc3RydWN0b3I9eSxnKHgsdi5wcm90b3R5cGUpLHguaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIHc9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBqKCl7fXZhciBrPXtIOm51bGwsQTpudWxsLFQ6bnVsbCxTOm51bGx9LEE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBPKGUsbixyLG8sYSxpKXtyZXR1cm57JCR0eXBlb2Y6dCx0eXBlOmUsa2V5Om4scmVmOnZvaWQgMCE9PShyPWkucmVmKT9yOm51bGwscHJvcHM6aX19ZnVuY3Rpb24gQyhlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT10fXZhciBTPS9cXC8rL2c7ZnVuY3Rpb24gRShlLG4pe3ZhciB0LHI7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT1lLmtleT8odD1cIlwiK2Uua2V5LHI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9LFwiJFwiK3QucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGUpe3JldHVybiByW2VdfSkpOm4udG9TdHJpbmcoMzYpfWZ1bmN0aW9uIF8oZSxuLG8pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIGE9W10saT0wO3JldHVybiFmdW5jdGlvbiBlKG4sbyxhLGksbCl7dmFyIHMsYyx1LGQ9dHlwZW9mIG47KFwidW5kZWZpbmVkXCI9PT1kfHxcImJvb2xlYW5cIj09PWQpJiYobj1udWxsKTt2YXIgaD0hMTtpZihudWxsPT09biloPSEwO2Vsc2Ugc3dpdGNoKGQpe2Nhc2VcImJpZ2ludFwiOmNhc2VcInN0cmluZ1wiOmNhc2VcIm51bWJlclwiOmg9ITA7YnJlYWs7Y2FzZVwib2JqZWN0XCI6c3dpdGNoKG4uJCR0eXBlb2Ype2Nhc2UgdDpjYXNlIHI6aD0hMDticmVhaztjYXNlIGY6cmV0dXJuIGUoKGg9bi5faW5pdCkobi5fcGF5bG9hZCksbyxhLGksbCl9fWlmKGgpcmV0dXJuIGw9bChuKSxoPVwiXCI9PT1pP1wiLlwiK0UobiwwKTppLHcobCk/KGE9XCJcIixudWxsIT1oJiYoYT1oLnJlcGxhY2UoUyxcIiQmL1wiKStcIi9cIiksZShsLG8sYSxcIlwiLGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpOm51bGwhPWwmJihDKGwpJiYocz1sLGM9YSsobnVsbD09bC5rZXl8fG4mJm4ua2V5PT09bC5rZXk/XCJcIjooXCJcIitsLmtleSkucmVwbGFjZShTLFwiJCYvXCIpK1wiL1wiKStoLGw9TyhzLnR5cGUsYyx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzLnByb3BzKSksby5wdXNoKGwpKSwxO2g9MDt2YXIgZz1cIlwiPT09aT9cIi5cIjppK1wiOlwiO2lmKHcobikpZm9yKHZhciBtPTA7bTxuLmxlbmd0aDttKyspZD1nK0UoaT1uW21dLG0pLGgrPWUoaSxvLGEsZCxsKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mKG09bnVsbD09PSh1PW4pfHxcIm9iamVjdFwiIT10eXBlb2YgdT9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKHU9cCYmdVtwXXx8dVtcIkBAaXRlcmF0b3JcIl0pP3U6bnVsbCkpZm9yKG49bS5jYWxsKG4pLG09MDshKGk9bi5uZXh0KCkpLmRvbmU7KWQ9ZytFKGk9aS52YWx1ZSxtKyspLGgrPWUoaSxvLGEsZCxsKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1kKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnRoZW4pcmV0dXJuIGUoZnVuY3Rpb24oZSl7c3dpdGNoKGUuc3RhdHVzKXtjYXNlXCJmdWxmaWxsZWRcIjpyZXR1cm4gZS52YWx1ZTtjYXNlXCJyZWplY3RlZFwiOnRocm93IGUucmVhc29uO2RlZmF1bHQ6c3dpdGNoKFwic3RyaW5nXCI9PXR5cGVvZiBlLnN0YXR1cz9lLnRoZW4oaixqKTooZS5zdGF0dXM9XCJwZW5kaW5nXCIsZS50aGVuKGZ1bmN0aW9uKG4pe1wicGVuZGluZ1wiPT09ZS5zdGF0dXMmJihlLnN0YXR1cz1cImZ1bGZpbGxlZFwiLGUudmFsdWU9bil9LGZ1bmN0aW9uKG4pe1wicGVuZGluZ1wiPT09ZS5zdGF0dXMmJihlLnN0YXR1cz1cInJlamVjdGVkXCIsZS5yZWFzb249bil9KSksZS5zdGF0dXMpe2Nhc2VcImZ1bGZpbGxlZFwiOnJldHVybiBlLnZhbHVlO2Nhc2VcInJlamVjdGVkXCI6dGhyb3cgZS5yZWFzb259fXRocm93IGV9KG4pLG8sYSxpLGwpO3Rocm93IEVycm9yKFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIisoXCJbb2JqZWN0IE9iamVjdF1cIj09PShvPVN0cmluZyhuKSk/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhuKS5qb2luKFwiLCBcIikrXCJ9XCI6bykrXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIpfXJldHVybiBofShlLGEsXCJcIixcIlwiLGZ1bmN0aW9uKGUpe3JldHVybiBuLmNhbGwobyxlLGkrKyl9KSxhfWZ1bmN0aW9uIFAoZSl7aWYoLTE9PT1lLl9zdGF0dXMpe3ZhciBuPWUuX3Jlc3VsdDsobj1uKCkpLnRoZW4oZnVuY3Rpb24obil7KDA9PT1lLl9zdGF0dXN8fC0xPT09ZS5fc3RhdHVzKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD1uKX0sZnVuY3Rpb24obil7KDA9PT1lLl9zdGF0dXN8fC0xPT09ZS5fc3RhdHVzKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD1uKX0pLC0xPT09ZS5fc3RhdHVzJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PW4pfWlmKDE9PT1lLl9zdGF0dXMpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgej1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXBvcnRFcnJvcj9yZXBvcnRFcnJvcjpmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuRXJyb3JFdmVudCl7dmFyIG49bmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLG1lc3NhZ2U6XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlP1N0cmluZyhlLm1lc3NhZ2UpOlN0cmluZyhlKSxlcnJvcjplfSk7aWYoIXdpbmRvdy5kaXNwYXRjaEV2ZW50KG4pKXJldHVybn1lbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwcm9jZXNzLmVtaXQpcmV0dXJuIHZvaWQgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIixlKTtjb25zb2xlLmVycm9yKGUpfTtuLkNoaWxkcmVuPXttYXA6Xyxmb3JFYWNoOmZ1bmN0aW9uKGUsbix0KXtfKGUsZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdCl9LGNvdW50OmZ1bmN0aW9uKGUpe3ZhciBuPTA7cmV0dXJuIF8oZSxmdW5jdGlvbigpe24rK30pLG59LHRvQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIF8oZSxmdW5jdGlvbihlKXtyZXR1cm4gZX0pfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighQyhlKSl0aHJvdyBFcnJvcihcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiKTtyZXR1cm4gZX19LG4uQ29tcG9uZW50PXYsbi5GcmFnbWVudD1vLG4uUHJvZmlsZXI9aSxuLlB1cmVDb21wb25lbnQ9eSxuLlN0cmljdE1vZGU9YSxuLlN1c3BlbnNlPXUsbi5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU9ayxuLl9fQ09NUElMRVJfUlVOVElNRT17X19wcm90b19fOm51bGwsYzpmdW5jdGlvbihlKXtyZXR1cm4gay5ILnVzZU1lbW9DYWNoZShlKX19LG4uY2FjaGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobnVsbCxhcmd1bWVudHMpfX0sbi5jYWNoZVNpZ25hbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxuLmNsb25lRWxlbWVudD1mdW5jdGlvbihlLG4sdCl7aWYobnVsbD09ZSl0aHJvdyBFcnJvcihcIlRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIrZStcIi5cIik7dmFyIHI9Zyh7fSxlLnByb3BzKSxvPWUua2V5LGE9dm9pZCAwO2lmKG51bGwhPW4pZm9yKGkgaW4gdm9pZCAwIT09bi5yZWYmJihhPXZvaWQgMCksdm9pZCAwIT09bi5rZXkmJihvPVwiXCIrbi5rZXkpLG4pQS5jYWxsKG4saSkmJlwia2V5XCIhPT1pJiZcIl9fc2VsZlwiIT09aSYmXCJfX3NvdXJjZVwiIT09aSYmKFwicmVmXCIhPT1pfHx2b2lkIDAhPT1uLnJlZikmJihyW2ldPW5baV0pO3ZhciBpPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09aSlyLmNoaWxkcmVuPXQ7ZWxzZSBpZigxPGkpe2Zvcih2YXIgbD1BcnJheShpKSxzPTA7czxpO3MrKylsW3NdPWFyZ3VtZW50c1tzKzJdO3IuY2hpbGRyZW49bH1yZXR1cm4gTyhlLnR5cGUsbyx2b2lkIDAsdm9pZCAwLGEscil9LG4uY3JlYXRlQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4oZT17JCR0eXBlb2Y6cyxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9KS5Qcm92aWRlcj1lLGUuQ29uc3VtZXI9eyQkdHlwZW9mOmwsX2NvbnRleHQ6ZX0sZX0sbi5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsbix0KXt2YXIgcixvPXt9LGE9bnVsbDtpZihudWxsIT1uKWZvcihyIGluIHZvaWQgMCE9PW4ua2V5JiYoYT1cIlwiK24ua2V5KSxuKUEuY2FsbChuLHIpJiZcImtleVwiIT09ciYmXCJfX3NlbGZcIiE9PXImJlwiX19zb3VyY2VcIiE9PXImJihvW3JdPW5bcl0pO3ZhciBpPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09aSlvLmNoaWxkcmVuPXQ7ZWxzZSBpZigxPGkpe2Zvcih2YXIgbD1BcnJheShpKSxzPTA7czxpO3MrKylsW3NdPWFyZ3VtZW50c1tzKzJdO28uY2hpbGRyZW49bH1pZihlJiZlLmRlZmF1bHRQcm9wcylmb3IociBpbiBpPWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PW9bcl0mJihvW3JdPWlbcl0pO3JldHVybiBPKGUsYSx2b2lkIDAsdm9pZCAwLG51bGwsbyl9LG4uY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LG4uZm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6YyxyZW5kZXI6ZX19LG4uaXNWYWxpZEVsZW1lbnQ9QyxuLmxhenk9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOmYsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpQfX0sbi5tZW1vPWZ1bmN0aW9uKGUsbil7cmV0dXJueyQkdHlwZW9mOmQsdHlwZTplLGNvbXBhcmU6dm9pZCAwPT09bj9udWxsOm59fSxuLnN0YXJ0VHJhbnNpdGlvbj1mdW5jdGlvbihlKXt2YXIgbj1rLlQsdD17fTtrLlQ9dDt0cnl7dmFyIHI9ZSgpLG89ay5TO251bGwhPT1vJiZvKHQsciksXCJvYmplY3RcIj09dHlwZW9mIHImJm51bGwhPT1yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnRoZW4mJnIudGhlbihqLHopfWNhdGNoKGUpe3ooZSl9ZmluYWxseXtudWxsIT09biYmbnVsbCE9PXQudHlwZXMmJihuLnR5cGVzPXQudHlwZXMpLGsuVD1ufX0sbi51bnN0YWJsZV91c2VDYWNoZVJlZnJlc2g9ZnVuY3Rpb24oKXtyZXR1cm4gay5ILnVzZUNhY2hlUmVmcmVzaCgpfSxuLnVzZT1mdW5jdGlvbihlKXtyZXR1cm4gay5ILnVzZShlKX0sbi51c2VBY3Rpb25TdGF0ZT1mdW5jdGlvbihlLG4sdCl7cmV0dXJuIGsuSC51c2VBY3Rpb25TdGF0ZShlLG4sdCl9LG4udXNlQ2FsbGJhY2s9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gay5ILnVzZUNhbGxiYWNrKGUsbil9LG4udXNlQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gay5ILnVzZUNvbnRleHQoZSl9LG4udXNlRGVidWdWYWx1ZT1mdW5jdGlvbigpe30sbi51c2VEZWZlcnJlZFZhbHVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGsuSC51c2VEZWZlcnJlZFZhbHVlKGUsbil9LG4udXNlRWZmZWN0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIGsuSC51c2VFZmZlY3QoZSxuKX0sbi51c2VJZD1mdW5jdGlvbigpe3JldHVybiBrLkgudXNlSWQoKX0sbi51c2VJbXBlcmF0aXZlSGFuZGxlPWZ1bmN0aW9uKGUsbix0KXtyZXR1cm4gay5ILnVzZUltcGVyYXRpdmVIYW5kbGUoZSxuLHQpfSxuLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbihlLG4pe3JldHVybiBrLkgudXNlSW5zZXJ0aW9uRWZmZWN0KGUsbil9LG4udXNlTGF5b3V0RWZmZWN0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIGsuSC51c2VMYXlvdXRFZmZlY3QoZSxuKX0sbi51c2VNZW1vPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGsuSC51c2VNZW1vKGUsbil9LG4udXNlT3B0aW1pc3RpYz1mdW5jdGlvbihlLG4pe3JldHVybiBrLkgudXNlT3B0aW1pc3RpYyhlLG4pfSxuLnVzZVJlZHVjZXI9ZnVuY3Rpb24oZSxuLHQpe3JldHVybiBrLkgudXNlUmVkdWNlcihlLG4sdCl9LG4udXNlUmVmPWZ1bmN0aW9uKGUpe3JldHVybiBrLkgudXNlUmVmKGUpfSxuLnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBrLkgudXNlU3RhdGUoZSl9LG4udXNlU3luY0V4dGVybmFsU3RvcmU9ZnVuY3Rpb24oZSxuLHQpe3JldHVybiBrLkgudXNlU3luY0V4dGVybmFsU3RvcmUoZSxuLHQpfSxuLnVzZVRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gay5ILnVzZVRyYW5zaXRpb24oKX0sbi52ZXJzaW9uPVwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwifSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QucHJvZHVjdGlvbi5qc1wiKX0sXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24uanNcIil9LFwiLi9kaXN0L2NvbXBpbGVkL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSxuKXt2YXIgdD1lLmxlbmd0aDtmb3IoZS5wdXNoKG4pOzA8dDspe3ZhciByPXQtMT4+PjEsbz1lW3JdO2lmKDA8YShvLG4pKWVbcl09bixlW3RdPW8sdD1yO2Vsc2UgYnJlYWt9fWZ1bmN0aW9uIHIoZSl7cmV0dXJuIDA9PT1lLmxlbmd0aD9udWxsOmVbMF19ZnVuY3Rpb24gbyhlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG49ZVswXSx0PWUucG9wKCk7aWYodCE9PW4pe2VbMF09dDtmb3IodmFyIHI9MCxvPWUubGVuZ3RoLGk9bz4+PjE7cjxpOyl7dmFyIGw9MioocisxKS0xLHM9ZVtsXSxjPWwrMSx1PWVbY107aWYoMD5hKHMsdCkpYzxvJiYwPmEodSxzKT8oZVtyXT11LGVbY109dCxyPWMpOihlW3JdPXMsZVtsXT10LHI9bCk7ZWxzZSBpZihjPG8mJjA+YSh1LHQpKWVbcl09dSxlW2NdPXQscj1jO2Vsc2UgYnJlYWt9fXJldHVybiBufWZ1bmN0aW9uIGEoZSxuKXt2YXIgdD1lLnNvcnRJbmRleC1uLnNvcnRJbmRleDtyZXR1cm4gMCE9PXQ/dDplLmlkLW4uaWR9aWYobi51bnN0YWJsZV9ub3c9dm9pZCAwLFwib2JqZWN0XCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgcGVyZm9ybWFuY2Uubm93KXt2YXIgaSxsPXBlcmZvcm1hbmNlO24udW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGwubm93KCl9fWVsc2V7dmFyIHM9RGF0ZSxjPXMubm93KCk7bi51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gcy5ub3coKS1jfX12YXIgdT1bXSxkPVtdLGY9MSxwPW51bGwsaD0zLGc9ITEsbT0hMSx2PSExLGI9ITEseT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6bnVsbCx4PVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6bnVsbCx3PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZXRJbW1lZGlhdGU/c2V0SW1tZWRpYXRlOm51bGw7ZnVuY3Rpb24gaihlKXtmb3IodmFyIG49cihkKTtudWxsIT09bjspe2lmKG51bGw9PT1uLmNhbGxiYWNrKW8oZCk7ZWxzZSBpZihuLnN0YXJ0VGltZTw9ZSlvKGQpLG4uc29ydEluZGV4PW4uZXhwaXJhdGlvblRpbWUsdCh1LG4pO2Vsc2UgYnJlYWs7bj1yKGQpfX1mdW5jdGlvbiBrKGUpe2lmKHY9ITEsaihlKSwhbSlpZihudWxsIT09cih1KSltPSEwLEF8fChBPSEwLGkoKSk7ZWxzZXt2YXIgbj1yKGQpO251bGwhPT1uJiZMKGssbi5zdGFydFRpbWUtZSl9fXZhciBBPSExLE89LTEsQz01LFM9LTE7ZnVuY3Rpb24gRSgpe3JldHVybiEhYnx8IShuLnVuc3RhYmxlX25vdygpLVM8Qyl9ZnVuY3Rpb24gXygpe2lmKGI9ITEsQSl7dmFyIGU9bi51bnN0YWJsZV9ub3coKTtTPWU7dmFyIHQ9ITA7dHJ5e2U6e209ITEsdiYmKHY9ITEseChPKSxPPS0xKSxnPSEwO3ZhciBhPWg7dHJ5e246e2ZvcihqKGUpLHA9cih1KTtudWxsIT09cCYmIShwLmV4cGlyYXRpb25UaW1lPmUmJkUoKSk7KXt2YXIgbD1wLmNhbGxiYWNrO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGwpe3AuY2FsbGJhY2s9bnVsbCxoPXAucHJpb3JpdHlMZXZlbDt2YXIgcz1sKHAuZXhwaXJhdGlvblRpbWU8PWUpO2lmKGU9bi51bnN0YWJsZV9ub3coKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBzKXtwLmNhbGxiYWNrPXMsaihlKSx0PSEwO2JyZWFrIG59cD09PXIodSkmJm8odSksaihlKX1lbHNlIG8odSk7cD1yKHUpfWlmKG51bGwhPT1wKXQ9ITA7ZWxzZXt2YXIgYz1yKGQpO251bGwhPT1jJiZMKGssYy5zdGFydFRpbWUtZSksdD0hMX19YnJlYWsgZX1maW5hbGx5e3A9bnVsbCxoPWEsZz0hMX19fWZpbmFsbHl7dD9pKCk6QT0hMX19fWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHcpaT1mdW5jdGlvbigpe3coXyl9O2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsKXt2YXIgUD1uZXcgTWVzc2FnZUNoYW5uZWwsej1QLnBvcnQyO1AucG9ydDEub25tZXNzYWdlPV8saT1mdW5jdGlvbigpe3oucG9zdE1lc3NhZ2UobnVsbCl9fWVsc2UgaT1mdW5jdGlvbigpe3koXywwKX07ZnVuY3Rpb24gTChlLHQpe089eShmdW5jdGlvbigpe2Uobi51bnN0YWJsZV9ub3coKSl9LHQpfW4udW5zdGFibGVfSWRsZVByaW9yaXR5PTUsbi51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eT0xLG4udW5zdGFibGVfTG93UHJpb3JpdHk9NCxuLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTMsbi51bnN0YWJsZV9Qcm9maWxpbmc9bnVsbCxuLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTIsbi51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihlKXtlLmNhbGxiYWNrPW51bGx9LG4udW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oZSl7MD5lfHwxMjU8ZT9jb25zb2xlLmVycm9yKFwiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkXCIpOkM9MDxlP01hdGguZmxvb3IoMWUzL2UpOjV9LG4udW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gaH0sbi51bnN0YWJsZV9uZXh0PWZ1bmN0aW9uKGUpe3N3aXRjaChoKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzp2YXIgbj0zO2JyZWFrO2RlZmF1bHQ6bj1ofXZhciB0PWg7aD1uO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7aD10fX0sbi51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ9ZnVuY3Rpb24oKXtiPSEwfSxuLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6ZT0zfXZhciB0PWg7aD1lO3RyeXtyZXR1cm4gbigpfWZpbmFsbHl7aD10fX0sbi51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGUsbyxhKXt2YXIgbD1uLnVuc3RhYmxlX25vdygpO3N3aXRjaChhPVwib2JqZWN0XCI9PXR5cGVvZiBhJiZudWxsIT09YSYmXCJudW1iZXJcIj09dHlwZW9mKGE9YS5kZWxheSkmJjA8YT9sK2E6bCxlKXtjYXNlIDE6dmFyIHM9LTE7YnJlYWs7Y2FzZSAyOnM9MjUwO2JyZWFrO2Nhc2UgNTpzPTB4M2ZmZmZmZmY7YnJlYWs7Y2FzZSA0OnM9MWU0O2JyZWFrO2RlZmF1bHQ6cz01ZTN9cmV0dXJuIHM9YStzLGU9e2lkOmYrKyxjYWxsYmFjazpvLHByaW9yaXR5TGV2ZWw6ZSxzdGFydFRpbWU6YSxleHBpcmF0aW9uVGltZTpzLHNvcnRJbmRleDotMX0sYT5sPyhlLnNvcnRJbmRleD1hLHQoZCxlKSxudWxsPT09cih1KSYmZT09PXIoZCkmJih2Pyh4KE8pLE89LTEpOnY9ITAsTChrLGEtbCkpKTooZS5zb3J0SW5kZXg9cyx0KHUsZSksbXx8Z3x8KG09ITAsQXx8KEE9ITAsaSgpKSkpLGV9LG4udW5zdGFibGVfc2hvdWxkWWllbGQ9RSxuLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgbj1oO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWg7aD1uO3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtoPXR9fX19LFwiLi9kaXN0L2NvbXBpbGVkL3NjaGVkdWxlci9pbmRleC5qc1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLmpzXCIpfSxcIi4vZGlzdC9jb21waWxlZC9zdGFja3RyYWNlLXBhcnNlci9zdGFjay10cmFjZS1wYXJzZXIuY2pzLmpzXCI6ZnVuY3Rpb24oZSl7KCgpPT57XCJ1c2Ugc3RyaWN0XCI7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18mJihfX25jY3dwY2tfcmVxdWlyZV9fLmFiPVwiLy9cIik7dmFyIG4sdCxyLG8sYSxpLGwscyxjPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG49XCI8dW5rbm93bj5cIix0PS9eXFxzKmF0ICguKj8pID9cXCgoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWUtZXh0ZW5zaW9ufG5hdGl2ZXxldmFsfHdlYnBhY2t8d2VicGFjay1pbnRlcm5hbHxyc2N8dHVyYm9wYWNrfDxhbm9ueW1vdXM+fFxcL3xbYS16XTpcXFxcfFxcXFxcXFxcKS4qPykoPzo6KFxcZCspKT8oPzo6KFxcZCspKT9cXCk/XFxzKiQvaSxyPS9cXCgoXFxTKikoPzo6KFxcZCspKSg/OjooXFxkKykpXFwpLyxvPS9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT8uKykgKT9cXCg/KCg/OmZpbGV8bXMtYXBweHxodHRwcz98d2VicGFja3x3ZWJwYWNrLWludGVybmFsfHJzY3x0dXJib3BhY2t8YmxvYik6Lio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaSxhPS9eXFxzKiguKj8pKD86XFwoKC4qPylcXCkpPyg/Ol58QCkoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWV8d2VicGFja3x3ZWJwYWNrLWludGVybmFsfHJzY3x0dXJib3BhY2t8cmVzb3VyY2V8XFxbbmF0aXZlKS4qP3xbXkBdKmJ1bmRsZSkoPzo6KFxcZCspKT8oPzo6KFxcZCspKT9cXHMqJC9pLGk9LyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2ksbD0vXlxccyooPzooW15AXSopKD86XFwoKC4qPylcXCkpP0ApPyhcXFMuKj8pOihcXGQrKSg/OjooXFxkKykpP1xccyokL2kscz0vXlxccyphdCAoPzooKD86XFxbb2JqZWN0IG9iamVjdFxcXSk/W15cXFxcL10rKD86IFxcW2FzIFxcUytcXF0pPykgKT9cXCg/KC4qPyk6KFxcZCspKD86OihcXGQrKSk/XFwpP1xccyokL2ksYy5wYXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIlxcblwiKS5yZWR1Y2UoZnVuY3Rpb24oZSxjKXt2YXIgdSxkLGYscCxoLGcsbT1mdW5jdGlvbihlKXt2YXIgbz10LmV4ZWMoZSk7aWYoIW8pcmV0dXJuIG51bGw7dmFyIGE9b1syXSYmMD09PW9bMl0uaW5kZXhPZihcIm5hdGl2ZVwiKSxpPW9bMl0mJjA9PT1vWzJdLmluZGV4T2YoXCJldmFsXCIpLGw9ci5leGVjKG9bMl0pO3JldHVybiBpJiZudWxsIT1sJiYob1syXT1sWzFdLG9bM109bFsyXSxvWzRdPWxbM10pLHtmaWxlOmE/bnVsbDpvWzJdLG1ldGhvZE5hbWU6b1sxXXx8bixhcmd1bWVudHM6YT9bb1syXV06W10sbGluZU51bWJlcjpvWzNdPytvWzNdOm51bGwsY29sdW1uOm9bNF0/K29bNF06bnVsbH19KGMpfHwodT1jLChkPW8uZXhlYyh1KSk/e2ZpbGU6ZFsyXSxtZXRob2ROYW1lOmRbMV18fG4sYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K2RbM10sY29sdW1uOmRbNF0/K2RbNF06bnVsbH06bnVsbCl8fGZ1bmN0aW9uKGUpe3ZhciB0PWEuZXhlYyhlKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcj10WzNdJiZ0WzNdLmluZGV4T2YoXCIgPiBldmFsXCIpPi0xLG89aS5leGVjKHRbM10pO3JldHVybiByJiZudWxsIT1vJiYodFszXT1vWzFdLHRbNF09b1syXSx0WzVdPW51bGwpLHtmaWxlOnRbM10sbWV0aG9kTmFtZTp0WzFdfHxuLGFyZ3VtZW50czp0WzJdP3RbMl0uc3BsaXQoXCIsXCIpOltdLGxpbmVOdW1iZXI6dFs0XT8rdFs0XTpudWxsLGNvbHVtbjp0WzVdPyt0WzVdOm51bGx9fShjKXx8KGY9YywocD1zLmV4ZWMoZikpP3tmaWxlOnBbMl0sbWV0aG9kTmFtZTpwWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOitwWzNdLGNvbHVtbjpwWzRdPytwWzRdOm51bGx9Om51bGwpfHwoaD1jLChnPWwuZXhlYyhoKSk/e2ZpbGU6Z1szXSxtZXRob2ROYW1lOmdbMV18fG4sYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K2dbNF0sY29sdW1uOmdbNV0/K2dbNV06bnVsbH06bnVsbCk7cmV0dXJuIG0mJmUucHVzaChtKSxlfSxbXSl9LGUuZXhwb3J0cz1jfSkoKX0sXCIuL2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qc1wiOmZ1bmN0aW9uKGUpeygoKT0+e1widXNlIHN0cmljdFwiO3ZhciBuPXs1MTE6ZT0+e2UuZXhwb3J0cz0oe29ubHlGaXJzdDplPSExfT17fSk9PlJlZ0V4cChcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyl8KD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSlcIixlP3ZvaWQgMDpcImdcIil9LDUzMjooZSxuLHQpPT57bGV0IHI9dCg1MTEpO2UuZXhwb3J0cz1lPT5cInN0cmluZ1wiPT10eXBlb2YgZT9lLnJlcGxhY2UocigpLFwiXCIpOmV9fSx0PXt9O2Z1bmN0aW9uIHIoZSl7dmFyIG89dFtlXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGE9dFtlXT17ZXhwb3J0czp7fX0saT0hMDt0cnl7bltlXShhLGEuZXhwb3J0cyxyKSxpPSExfWZpbmFsbHl7aSYmZGVsZXRlIHRbZV19cmV0dXJuIGEuZXhwb3J0c31yLmFiPVwiLy9cIixlLmV4cG9ydHM9cig1MzIpfSkoKX0sXCIuL3NyYy9idWlsZC93ZWJwYWNrL2xvYWRlcnMvZGV2dG9vbC9kZXZ0b29sLXN0eWxlLWluamVjdC5qc1wiOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtsZXQgZT13aW5kb3cuX25leHRqc0RldnRvb2xzU3R5bGVDYWNoZTtpZihlLmNhY2hlZFNoYWRvd1Jvb3QpcmV0dXJuIGUuY2FjaGVkU2hhZG93Um9vdDtsZXQgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibmV4dGpzLXBvcnRhbFwiKSx0PW4/LnNoYWRvd1Jvb3R8fG51bGw7cmV0dXJuIHQmJihlLmNhY2hlZFNoYWRvd1Jvb3Q9dCksdH1mdW5jdGlvbiB0KGUsbil7bGV0IHQ9d2luZG93Ll9uZXh0anNEZXZ0b29sc1N0eWxlQ2FjaGU7dC5sYXN0SW5zZXJ0ZWRFbGVtZW50P3QubGFzdEluc2VydGVkRWxlbWVudC5uZXh0U2libGluZz9uLmluc2VydEJlZm9yZShlLHQubGFzdEluc2VydGVkRWxlbWVudC5uZXh0U2libGluZyk6bi5hcHBlbmRDaGlsZChlKTpuLmluc2VydEJlZm9yZShlLG4uZmlyc3RDaGlsZCksdC5sYXN0SW5zZXJ0ZWRFbGVtZW50PWV9ZnVuY3Rpb24gcigpe2xldCBlPXdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlLHI9bigpO3ImJihlLnBlbmRpbmdFbGVtZW50cy5mb3JFYWNoKGU9Pnt0KGUscil9KSxlLnBlbmRpbmdFbGVtZW50cz1bXSl9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlPXdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlfHx7cGVuZGluZ0VsZW1lbnRzOltdLGlzT2JzZXJ2aW5nOiExLGxhc3RJbnNlcnRlZEVsZW1lbnQ6bnVsbCxjYWNoZWRTaGFkb3dSb290Om51bGx9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLW5leHRqcy1kZXYtdG9vbC1zdHlsZVwiLFwidHJ1ZVwiKTtsZXQgbz1uKCk7bz90KGUsbyk6KHdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlLnBlbmRpbmdFbGVtZW50cy5wdXNoKGUpLGZ1bmN0aW9uKCl7bGV0IGU9d2luZG93Ll9uZXh0anNEZXZ0b29sc1N0eWxlQ2FjaGU7aWYoZS5pc09ic2VydmluZylyZXR1cm47aWYoZS5pc09ic2VydmluZz0hMCxuKCkpcmV0dXJuIHIoKTtsZXQgdD1uZXcgTXV0YXRpb25PYnNlcnZlcihvPT57aWYoMD09PW8ubGVuZ3RofHwwPT09b1swXS5hZGRlZE5vZGVzLmxlbmd0aClyZXR1cm47bGV0IGE9b1swXS5hZGRlZE5vZGVzWzBdLGk9bnVsbDtpZihcIlNDUklQVFwiPT09YS50YWdOYW1lJiZhLmdldEF0dHJpYnV0ZShcImRhdGEtbmV4dGpzLWRldi1vdmVybGF5XCIpP2k9YS5maXJzdENoaWxkOlwiTkVYVEpTLVBPUlRBTFwiPT09YS50YWdOYW1lJiYoaT1hKSwhaSlyZXR1cm47bGV0IGw9KCk9PntuKCk/KHIoKSx0LmRpc2Nvbm5lY3QoKSxlLmlzT2JzZXJ2aW5nPSExKTpzZXRUaW1lb3V0KGwsMjApfTtsKCl9KTt0Lm9ic2VydmUoZG9jdW1lbnQuYm9keSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KX0oKSl9fSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9lcnJvcnMvZGV2LXRvb2xzLWluZGljYXRvci9kZXYtdG9vbHMtaW5mby9kZXYtdG9vbHMtaW5mby50c3hcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se2c6KCk9PnMseDooKT0+bH0pO3ZhciByPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanNcIiksbz10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2luZGV4LmpzXCIpLGE9dChcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9lcnJvcnMvZGV2LXRvb2xzLWluZGljYXRvci91dGlscy50c1wiKSxpPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2hvb2tzL3VzZS1kZWxheWVkLXJlbmRlci50c1wiKTtmdW5jdGlvbiBsKGUpe3ZhciBuLHQsbD1lLnRpdGxlLHM9ZS5jaGlsZHJlbix1PWUubGVhcm5Nb3JlTGluayxkPWUuaXNPcGVuLGY9ZS50cmlnZ2VyUmVmLHA9ZS5jbG9zZSxoPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJ0aXRsZVwiLFwiY2hpbGRyZW5cIixcImxlYXJuTW9yZUxpbmtcIixcImlzT3BlblwiLFwidHJpZ2dlclJlZlwiLFwiY2xvc2VcIl0pLGc9KDAsby51c2VSZWYpKG51bGwpLG09KDAsby51c2VSZWYpKG51bGwpLHY9KDAsaS5OKShkLHtlbnRlckRlbGF5OjAsZXhpdERlbGF5OmEuSzd9KSxiPXYubW91bnRlZCx5PXYucmVuZGVyZWQ7cmV0dXJuKCgwLGEuUDUpKGcsZixkLGZ1bmN0aW9uKCl7dmFyIGU7bnVsbD09KGU9bS5jdXJyZW50KXx8ZS5mb2N1cygpfSksKDAsYS5POCkoZyxmLGIscCksYik/KDAsci5qc3gpKFwiZGl2XCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByO3I9dFtuXSxuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09cn0pfXJldHVybiBlfSh7dGFiSW5kZXg6LTEscm9sZTpcImRpYWxvZ1wiLHJlZjpnLFwiZGF0YS1pbmZvLXBvcG92ZXJcIjohMH0saCksdD10PXtcImRhdGEtcmVuZGVyZWRcIjp5LGNoaWxkcmVuOigwLHIuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29udGFpbmVyXCIsY2hpbGRyZW46WygwLHIuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8taGVhZGVyXCIsY2hpbGRyZW46WygwLHIuanN4KShcImJ1dHRvblwiLHtyZWY6bSxjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jbG9zZS1idXR0b25cIixvbkNsaWNrOnAsXCJhcmlhLWxhYmVsXCI6XCJDbG9zZSBkaWFsb2dcIixjaGlsZHJlbjooMCxyLmpzeCkoYyx7fSl9KSwoMCxyLmpzeCkoXCJoM1wiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby10aXRsZVwiLGNoaWxkcmVuOmx9KV19KSwoMCxyLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWJvZHlcIixjaGlsZHJlbjpbcyx1JiYoMCxyLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tYnV0dG9uLWNvbnRhaW5lclwiLGNoaWxkcmVuOigwLHIuanN4KShcImFcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tbGVhcm4tbW9yZS1idXR0b25cIixocmVmOnUsdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9yZWZlcnJlciBub29wZW5lclwiLGNoaWxkcmVuOlwiTGVhcm4gTW9yZVwifSl9KV19KV19KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSk6bnVsbH12YXIgcz1cIlxcbiAgW2RhdGEtaW5mby1wb3BvdmVyXSB7XFxuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZW51KTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC14bCk7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stc2Fucyk7XFxuICAgIHotaW5kZXg6IDM7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIG91dGxpbmU6IDA7XFxuICAgIG1pbi13aWR0aDogMzUwcHg7XFxuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tYW5pbWF0ZS1vdXQtZHVyYXRpb24tbXMpXFxuICAgICAgdmFyKC0tYW5pbWF0ZS1vdXQtdGltaW5nLWZ1bmN0aW9uKTtcXG5cXG4gICAgJltkYXRhLXJlbmRlcmVkPSd0cnVlJ10ge1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgc2NhbGU6IDE7XFxuICAgIH1cXG5cXG4gICAgYnV0dG9uOmZvY3VzLXZpc2libGUge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tY29udGFpbmVyIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tYm9keSB7XFxuICAgIHBhZGRpbmc6IDE2cHg7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8taGVhZGVyIHtcXG4gICAgaGVpZ2h0OiA0OHB4O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDZweDtcXG4gICAgcGFkZGluZzogNnB4IDhweDtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jbG9zZS1idXR0b24ge1xcbiAgICBhbGw6IHVuc2V0O1xcbiAgICB3aWR0aDogMjBweDtcXG4gICAgaGVpZ2h0OiAyMHB4OyAgICBcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIHRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2U7XFxuICAgIHRyYW5zbGF0ZTogMCAxcHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby10aXRsZSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1zZWN0aW9uLXRpdGxlIHtcXG4gICAgcGFkZGluZzogOHB4IDBweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWFydGljbGUge1xcbiAgICBwYWRkaW5nOiA4cHggNnB4O1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICAuZGV2LXRvb2xzLWluZm8tcGFyYWdyYXBoIHtcXG4gICAgJjpsYXN0LWNoaWxkIHtcXG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tYnV0dG9uLWNvbnRhaW5lciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1sZWFybi1tb3JlLWJ1dHRvbiB7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogMCA4cHg7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yOCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tbGVhcm4tbW9yZS1idXR0b246aG92ZXIge1xcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIG9wYWNpdHk6IDAuOTtcXG4gIH1cXG5cIjtmdW5jdGlvbiBjKCl7cmV0dXJuKDAsci5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNNS4xNDY0NSA4LjcwNzAzQzQuNzU1OTUgOC4zMTY1MSA0Ljc1NTk1IDcuNjgzNDkgNS4xNDY0NSA3LjI5Mjk3TDEwLjUgMS45Mzk0NUwxMS41NjA1IDNMNi41NjA1MSA4TDExLjU2MDUgMTNMMTAuNSAxNC4wNjA1TDUuMTQ2NDUgOC43MDcwM1pcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfX0sXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZXJyb3JzL2Rldi10b29scy1pbmRpY2F0b3IvZGV2LXRvb2xzLWluZm8vc2VnbWVudHMtZXhwbG9yZXIudHN4XCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtXOigpPT5pfSk7dmFyIHI9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtcnVudGltZS5qc1wiKSxvPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci50c3hcIiksYT10KFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL2Rldi10b29scy1pbmZvL2Rldi10b29scy1pbmZvLnRzeFwiKTtmdW5jdGlvbiBpKGUpe3ZhciBuLHQsaT1lLnJvdXRlclR5cGUsbD1lLnBhZ2Uscz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wicm91dGVyVHlwZVwiLFwicGFnZVwiXSk7cmV0dXJuKDAsci5qc3gpKGEueCwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI7cj10W25dLG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT1yfSl9cmV0dXJuIGV9KHt0aXRsZTpcIlJvdXRlIEluZm9cIn0scyksdD10PXtjaGlsZHJlbjooMCxyLmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1zZWdtZW50cy1leHBsb3JlclwiOiEwLHN0eWxlOnttYXJnaW46XCItMTZweFwifSxjaGlsZHJlbjooMCxyLmpzeCkoby51LHtpc0FwcFJvdXRlcjpcImFwcFwiPT09aSxwYWdlOmx9KX0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX19LFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL3V0aWxzLnRzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtLNzooKT0+cyxPODooKT0+bCxQNTooKT0+YSx1RDooKT0+Yyx2WTooKT0+aX0pO3ZhciByPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIik7ZnVuY3Rpb24gbyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gYShlLG4sdCxhKXsoMCxyLnVzZUVmZmVjdCkoZnVuY3Rpb24oKXt2YXIgcj1mdW5jdGlvbihlKXtpZihcIlRhYlwiPT09ZS5rZXkmJm51bGwhPT1sKXt2YXIgbix0LHI9KHQ9KG49bC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24sIFtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKScpKT9bblswXSxuW24ubGVuZ3RoLTFdXTpbXSxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh0KXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fSh0LDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvKGUsMik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG8oZSxuKX19KHQsMil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGE9clswXSxzPXJbMV0sYz1pKGwpO2Uuc2hpZnRLZXk/Yz09PWEmJihudWxsPT1zfHxzLmZvY3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpKTpjPT09cyYmKG51bGw9PWF8fGEuZm9jdXMoKSxlLnByZXZlbnREZWZhdWx0KCkpfX0sbD1udWxsLHM9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGw9ZS5jdXJyZW50LHQpYT9hKCk6bnVsbD09bHx8bC5mb2N1cygpLG51bGw9PWx8fGwuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixyKTtlbHNle3ZhciBvLHM9aShsKTtuJiYobnVsbD09bD92b2lkIDA6bC5jb250YWlucyhzKSkmJihudWxsPT0obz1uLmN1cnJlbnQpfHxvLmZvY3VzKCkpfX0pO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChzKSxudWxsPT1sfHxsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIscil9fSxbdF0pfWZ1bmN0aW9uIGkoZSl7dmFyIG4sdD1udWxsPT1lP3ZvaWQgMDplLmdldFJvb3ROb2RlKCk7cmV0dXJuKG51bGwhPShuPVNoYWRvd1Jvb3QpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5oYXNJbnN0YW5jZV0/ISFuW1N5bWJvbC5oYXNJbnN0YW5jZV0odCk6dCBpbnN0YW5jZW9mIG4pP251bGw9PXQ/dm9pZCAwOnQuYWN0aXZlRWxlbWVudDpudWxsfWZ1bmN0aW9uIGwoZSxuLHQsbyxhKXsoMCxyLnVzZUVmZmVjdCkoZnVuY3Rpb24oKXt2YXIgcixpPWZ1bmN0aW9uKHQpe3ZhciByLGEsaT10LnRhcmdldDshKGUuY3VycmVudCYmZS5jdXJyZW50LmNvbnRhaW5zKGkpKSYmKG51bGwhPShyPWUuY3VycmVudCkmJnIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkmJnQuY2xpZW50WD49ZS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQmJnQuY2xpZW50WDw9ZS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0JiZ0LmNsaWVudFk+PWUuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AmJnQuY2xpZW50WTw9ZS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbXx8bnVsbCE9KGE9bi5jdXJyZW50KSYmYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSYmdC5jbGllbnRYPj1uLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCYmdC5jbGllbnRYPD1uLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQmJnQuY2xpZW50WT49bi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCYmdC5jbGllbnRZPD1uLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tfHxvKCkpfSxsPWZ1bmN0aW9uKGUpe1wiRXNjYXBlXCI9PT1lLmtleSYmbygpfTtpZih0KXt2YXIgcz1hfHwobnVsbD09KHI9ZS5jdXJyZW50KT92b2lkIDA6ci5vd25lckRvY3VtZW50KTtyZXR1cm4gbnVsbD09c3x8cy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaSksbnVsbD09c3x8cy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGwpLGZ1bmN0aW9uKCl7bnVsbD09c3x8cy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaSksbnVsbD09c3x8cy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGwpfX19LFt0LGUsbl0pfXZhciBzPTIwMCxjPVwiY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4xKVwifSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9vdmVydmlldy9zZWdtZW50LWV4cGxvcmVyLnRzeFwiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjt0LmQobix7dTooKT0+YXR9KTt2YXIgcixvLGEsaSxsPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanNcIikscz10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCIpLGM9dC5uKHMpLHU9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCIpLGQ9dC5uKHUpLGY9dChcIi4vc3JjL2J1aWxkL3dlYnBhY2svbG9hZGVycy9kZXZ0b29sL2RldnRvb2wtc3R5bGUtaW5qZWN0LmpzXCIpLHA9dC5uKGYpLGg9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiKSxnPXQubihoKSxtPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIiksdj10Lm4obSksYj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIikseT10Lm4oYikseD10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci5jc3NcIiksdz17fTt3LnN0eWxlVGFnVHJhbnNmb3JtPXkoKSx3LnNldEF0dHJpYnV0ZXM9ZygpLHcuaW5zZXJ0PXAoKSx3LmRvbUFQST1kKCksdy5pbnNlcnRTdHlsZUVsZW1lbnQ9digpLGMoKSh4LlosdykseC5aJiZ4LloubG9jYWxzJiZ4LloubG9jYWxzO3ZhciBqPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3NlZ21lbnQtZXhwbG9yZXItdHJpZS50c1wiKSxrPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3V0aWxzL2N4LnRzXCIpLEE9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtYm91bmRhcnktdHJpZ2dlci5jc3NcIiksTz17fTtPLnN0eWxlVGFnVHJhbnNmb3JtPXkoKSxPLnNldEF0dHJpYnV0ZXM9ZygpLE8uaW5zZXJ0PXAoKSxPLmRvbUFQST1kKCksTy5pbnNlcnRTdHlsZUVsZW1lbnQ9digpLGMoKShBLlosTyksQS5aJiZBLloubG9jYWxzJiZBLloubG9jYWxzO3ZhciBDPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIiksUz10LnQoQywyKSxFPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2luZGV4LmpzXCIpO2xldCBfPXt9O2Z1bmN0aW9uIFAoZSxuKXtsZXQgdD1DLnVzZVJlZihfKTtyZXR1cm4gdC5jdXJyZW50PT09XyYmKHQuY3VycmVudD1lKG4pKSx0fWxldCB6PVNbYHVzZUluc2VydGlvbkVmZmVjdCR7TWF0aC5yYW5kb20oKS50b0ZpeGVkKDEpfWAuc2xpY2UoMCwtMyldLEw9eiYmeiE9PUMudXNlTGF5b3V0RWZmZWN0P3o6ZT0+ZSgpO2Z1bmN0aW9uIFQoZSl7bGV0IG49UChSKS5jdXJyZW50O3JldHVybiBuLm5leHQ9ZSxMKG4uZWZmZWN0KSxuLnRyYW1wb2xpbmV9ZnVuY3Rpb24gUigpe2xldCBlPXtuZXh0OnZvaWQgMCxjYWxsYmFjazpOLHRyYW1wb2xpbmU6KC4uLm4pPT5lLmNhbGxiYWNrPy4oLi4ubiksZWZmZWN0OigpPT57ZS5jYWxsYmFjaz1lLm5leHR9fTtyZXR1cm4gZX1mdW5jdGlvbiBOKCl7fWZ1bmN0aW9uIEQoKXtsZXQgZT1uZXcgTWFwO3JldHVybntlbWl0KG4sdCl7ZS5nZXQobik/LmZvckVhY2goZT0+ZSh0KSl9LG9uKG4sdCl7ZS5oYXMobil8fGUuc2V0KG4sbmV3IFNldCksZS5nZXQobikuYWRkKHQpfSxvZmYobix0KXtlLmdldChuKT8uZGVsZXRlKHQpfX19bGV0IEI9ey4uLlN9LE09MCxJPUIudXNlSWQ7ZnVuY3Rpb24gSChlLG4pe2lmKHZvaWQgMCE9PUkpe2xldCB0PUkoKTtyZXR1cm4gZT8/KG4/YCR7bn0tJHt0fWA6dCl9cmV0dXJuIGZ1bmN0aW9uKGUsbj1cIm11aVwiKXtsZXRbdCxyXT1DLnVzZVN0YXRlKGUpLG89ZXx8dDtyZXR1cm4gQy51c2VFZmZlY3QoKCk9PntudWxsPT10JiYoTSs9MSxyKGAke259LSR7TX1gKSl9LFt0LG5dKSxvfShlLG4pfWxldCBGPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudD9DLnVzZUxheW91dEVmZmVjdDooKT0+e30sVT1DLmNyZWF0ZUNvbnRleHQobnVsbCksVj1DLmNyZWF0ZUNvbnRleHQobnVsbCkscT0oKT0+Qy51c2VDb250ZXh0KFUpPy5pZHx8bnVsbCxXPSgpPT5DLnVzZUNvbnRleHQoVik7ZnVuY3Rpb24gJChlKXtsZXR7Y2hpbGRyZW46bixpZDp0fT1lLHI9cSgpO3JldHVybigwLGwuanN4KShVLlByb3ZpZGVyLHt2YWx1ZTpDLnVzZU1lbW8oKCk9Pih7aWQ6dCxwYXJlbnRJZDpyfSksW3Qscl0pLGNoaWxkcmVuOm59KX1mdW5jdGlvbiBaKGUpe2xldHtjaGlsZHJlbjpufT1lLHQ9Qy51c2VSZWYoW10pLHI9Qy51c2VDYWxsYmFjayhlPT57dC5jdXJyZW50PVsuLi50LmN1cnJlbnQsZV19LFtdKSxvPUMudXNlQ2FsbGJhY2soZT0+e3QuY3VycmVudD10LmN1cnJlbnQuZmlsdGVyKG49Pm4hPT1lKX0sW10pLFthXT1DLnVzZVN0YXRlKCgpPT5EKCkpO3JldHVybigwLGwuanN4KShWLlByb3ZpZGVyLHt2YWx1ZTpDLnVzZU1lbW8oKCk9Pih7bm9kZXNSZWY6dCxhZGROb2RlOnIscmVtb3ZlTm9kZTpvLGV2ZW50czphfSksW3IsbyxhXSksY2hpbGRyZW46bn0pfWZ1bmN0aW9uIFkoZSl7bGV0e29wZW46bj0hMSxvbk9wZW5DaGFuZ2U6dCxlbGVtZW50czpyfT1lLG89SCgpLGE9Qy51c2VSZWYoe30pLFtpXT1DLnVzZVN0YXRlKCgpPT5EKCkpLGw9bnVsbCE9cSgpLFtzLGNdPUMudXNlU3RhdGUoci5yZWZlcmVuY2UpLHU9VCgoZSxuLHIpPT57YS5jdXJyZW50Lm9wZW5FdmVudD1lP246dm9pZCAwLGkuZW1pdChcIm9wZW5jaGFuZ2VcIix7b3BlbjplLGV2ZW50Om4scmVhc29uOnIsbmVzdGVkOmx9KSx0Py4oZSxuLHIpfSksZD1DLnVzZU1lbW8oKCk9Pih7c2V0UG9zaXRpb25SZWZlcmVuY2U6Y30pLFtdKSxmPUMudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6c3x8ci5yZWZlcmVuY2V8fG51bGwsZmxvYXRpbmc6ci5mbG9hdGluZ3x8bnVsbCxkb21SZWZlcmVuY2U6ci5yZWZlcmVuY2V9KSxbcyxyLnJlZmVyZW5jZSxyLmZsb2F0aW5nXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+KHtkYXRhUmVmOmEsb3BlbjpuLG9uT3BlbkNoYW5nZTp1LGVsZW1lbnRzOmYsZXZlbnRzOmksZmxvYXRpbmdJZDpvLHJlZnM6ZH0pLFtuLHUsZixpLG8sZF0pfWZ1bmN0aW9uIFgoKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93fWZ1bmN0aW9uIEsoZSl7cmV0dXJuIEooZSk/KGUubm9kZU5hbWV8fFwiXCIpLnRvTG93ZXJDYXNlKCk6XCIjZG9jdW1lbnRcIn1mdW5jdGlvbiBRKGUpe3ZhciBuO3JldHVybihudWxsPT1lfHxudWxsPT0obj1lLm93bmVyRG9jdW1lbnQpP3ZvaWQgMDpuLmRlZmF1bHRWaWV3KXx8d2luZG93fWZ1bmN0aW9uIEcoZSl7dmFyIG47cmV0dXJuIG51bGw9PShuPShKKGUpP2Uub3duZXJEb2N1bWVudDplLmRvY3VtZW50KXx8d2luZG93LmRvY3VtZW50KT92b2lkIDA6bi5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gSihlKXtyZXR1cm4hIVgoKSYmKGUgaW5zdGFuY2VvZiBOb2RlfHxlIGluc3RhbmNlb2YgUShlKS5Ob2RlKX1mdW5jdGlvbiBlZShlKXtyZXR1cm4hIVgoKSYmKGUgaW5zdGFuY2VvZiBFbGVtZW50fHxlIGluc3RhbmNlb2YgUShlKS5FbGVtZW50KX1mdW5jdGlvbiBlbihlKXtyZXR1cm4hIVgoKSYmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8ZSBpbnN0YW5jZW9mIFEoZSkuSFRNTEVsZW1lbnQpfWZ1bmN0aW9uIGV0KGUpe3JldHVybiEhWCgpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU2hhZG93Um9vdCYmKGUgaW5zdGFuY2VvZiBTaGFkb3dSb290fHxlIGluc3RhbmNlb2YgUShlKS5TaGFkb3dSb290KX1sZXQgZXI9bmV3IFNldChbXCJpbmxpbmVcIixcImNvbnRlbnRzXCJdKTtmdW5jdGlvbiBlbyhlKXtsZXR7b3ZlcmZsb3c6bixvdmVyZmxvd1g6dCxvdmVyZmxvd1k6cixkaXNwbGF5Om99PWVnKGUpO3JldHVybi9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KG4rcit0KSYmIWVyLmhhcyhvKX1sZXQgZWE9bmV3IFNldChbXCJ0YWJsZVwiLFwidGRcIixcInRoXCJdKSxlaT1bXCI6cG9wb3Zlci1vcGVuXCIsXCI6bW9kYWxcIl07ZnVuY3Rpb24gZWwoZSl7cmV0dXJuIGVpLnNvbWUobj0+e3RyeXtyZXR1cm4gZS5tYXRjaGVzKG4pfWNhdGNoKGUpe3JldHVybiExfX0pfWxldCBlcz1bXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZVwiLFwic2NhbGVcIixcInJvdGF0ZVwiLFwicGVyc3BlY3RpdmVcIl0sZWM9W1widHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGVcIixcInNjYWxlXCIsXCJyb3RhdGVcIixcInBlcnNwZWN0aXZlXCIsXCJmaWx0ZXJcIl0sZXU9W1wicGFpbnRcIixcImxheW91dFwiLFwic3RyaWN0XCIsXCJjb250ZW50XCJdO2Z1bmN0aW9uIGVkKGUpe2xldCBuPWVmKCksdD1lZShlKT9lZyhlKTplO3JldHVybiBlcy5zb21lKGU9PiEhdFtlXSYmXCJub25lXCIhPT10W2VdKXx8ISF0LmNvbnRhaW5lclR5cGUmJlwibm9ybWFsXCIhPT10LmNvbnRhaW5lclR5cGV8fCFuJiYhIXQuYmFja2Ryb3BGaWx0ZXImJlwibm9uZVwiIT09dC5iYWNrZHJvcEZpbHRlcnx8IW4mJiEhdC5maWx0ZXImJlwibm9uZVwiIT09dC5maWx0ZXJ8fGVjLnNvbWUoZT0+KHQud2lsbENoYW5nZXx8XCJcIikuaW5jbHVkZXMoZSkpfHxldS5zb21lKGU9Pih0LmNvbnRhaW58fFwiXCIpLmluY2x1ZGVzKGUpKX1mdW5jdGlvbiBlZigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBDU1MmJiEhQ1NTLnN1cHBvcnRzJiZDU1Muc3VwcG9ydHMoXCItd2Via2l0LWJhY2tkcm9wLWZpbHRlclwiLFwibm9uZVwiKX1sZXQgZXA9bmV3IFNldChbXCJodG1sXCIsXCJib2R5XCIsXCIjZG9jdW1lbnRcIl0pO2Z1bmN0aW9uIGVoKGUpe3JldHVybiBlcC5oYXMoSyhlKSl9ZnVuY3Rpb24gZWcoZSl7cmV0dXJuIFEoZSkuZ2V0Q29tcHV0ZWRTdHlsZShlKX1mdW5jdGlvbiBlbShlKXtyZXR1cm4gZWUoZSk/e3Njcm9sbExlZnQ6ZS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDplLnNjcm9sbFRvcH06e3Njcm9sbExlZnQ6ZS5zY3JvbGxYLHNjcm9sbFRvcDplLnNjcm9sbFl9fWZ1bmN0aW9uIGV2KGUpe2lmKFwiaHRtbFwiPT09SyhlKSlyZXR1cm4gZTtsZXQgbj1lLmFzc2lnbmVkU2xvdHx8ZS5wYXJlbnROb2RlfHxldChlKSYmZS5ob3N0fHxHKGUpO3JldHVybiBldChuKT9uLmhvc3Q6bn1mdW5jdGlvbiBlYihlLG4sdCl7dmFyIHI7dm9pZCAwPT09biYmKG49W10pLHZvaWQgMD09PXQmJih0PSEwKTtsZXQgbz1mdW5jdGlvbiBlKG4pe2xldCB0PWV2KG4pO3JldHVybiBlaCh0KT9uLm93bmVyRG9jdW1lbnQ/bi5vd25lckRvY3VtZW50LmJvZHk6bi5ib2R5OmVuKHQpJiZlbyh0KT90OmUodCl9KGUpLGE9bz09PShudWxsPT0ocj1lLm93bmVyRG9jdW1lbnQpP3ZvaWQgMDpyLmJvZHkpLGk9UShvKTtpZihhKXtsZXQgZT1leShpKTtyZXR1cm4gbi5jb25jYXQoaSxpLnZpc3VhbFZpZXdwb3J0fHxbXSxlbyhvKT9vOltdLGUmJnQ/ZWIoZSk6W10pfXJldHVybiBuLmNvbmNhdChvLGViKG8sW10sdCkpfWZ1bmN0aW9uIGV5KGUpe3JldHVybiBlLnBhcmVudCYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucGFyZW50KT9lLmZyYW1lRWxlbWVudDpudWxsfWxldCBleD1bXTtmdW5jdGlvbiBldyhlKXtDLnVzZUVmZmVjdChlLGV4KX1jbGFzcyBlantzdGF0aWMgY3JlYXRlKCl7cmV0dXJuIG5ldyBlan1jdXJyZW50SWQ9MDtzdGFydChlLG4pe3RoaXMuY2xlYXIoKSx0aGlzLmN1cnJlbnRJZD1zZXRUaW1lb3V0KCgpPT57dGhpcy5jdXJyZW50SWQ9MCxuKCl9LGUpfWlzU3RhcnRlZCgpe3JldHVybiAwIT09dGhpcy5jdXJyZW50SWR9Y2xlYXI9KCk9PnswIT09dGhpcy5jdXJyZW50SWQmJihjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50SWQpLHRoaXMuY3VycmVudElkPTApfTtkaXNwb3NlRWZmZWN0PSgpPT50aGlzLmNsZWFyfWZ1bmN0aW9uIGVrKCl7bGV0IGU9UChlai5jcmVhdGUpLmN1cnJlbnQ7cmV0dXJuIGV3KGUuZGlzcG9zZUVmZmVjdCksZX1mdW5jdGlvbiBlQShlKXtsZXQgbj1QKGVPLGUpLmN1cnJlbnQ7cmV0dXJuIG4ubmV4dD1lLEYobi5lZmZlY3QpLG59ZnVuY3Rpb24gZU8oZSl7bGV0IG49e2N1cnJlbnQ6ZSxuZXh0OmUsZWZmZWN0OigpPT57bi5jdXJyZW50PW4ubmV4dH19O3JldHVybiBufWxldCBlQz1cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yLGVTPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIG5hdmlnYXRvcilyZXR1cm57cGxhdGZvcm06XCJcIixtYXhUb3VjaFBvaW50czotMX07bGV0IGU9bmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7cmV0dXJuIGU/LnBsYXRmb3JtP3twbGF0Zm9ybTplLnBsYXRmb3JtLG1heFRvdWNoUG9pbnRzOm5hdmlnYXRvci5tYXhUb3VjaFBvaW50c306e3BsYXRmb3JtOm5hdmlnYXRvci5wbGF0Zm9ybT8/XCJcIixtYXhUb3VjaFBvaW50czpuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM/Py0xfX0oKSxlRT1mdW5jdGlvbigpe2lmKCFlQylyZXR1cm5cIlwiO2xldCBlPW5hdmlnYXRvci51c2VyQWdlbnREYXRhO3JldHVybiBlPy5wbGF0Zm9ybT9lLnBsYXRmb3JtOm5hdmlnYXRvci5wbGF0Zm9ybT8/XCJcIn0oKSxlXz1mdW5jdGlvbigpe2lmKCFlQylyZXR1cm5cIlwiO2xldCBlPW5hdmlnYXRvci51c2VyQWdlbnREYXRhO3JldHVybiBlJiZBcnJheS5pc0FycmF5KGUuYnJhbmRzKT9lLmJyYW5kcy5tYXAoKHticmFuZDplLHZlcnNpb246bn0pPT5gJHtlfS8ke259YCkuam9pbihcIiBcIik6bmF2aWdhdG9yLnVzZXJBZ2VudH0oKSxlUD1cInVuZGVmaW5lZFwiIT10eXBlb2YgQ1NTJiYhIUNTUy5zdXBwb3J0cyYmQ1NTLnN1cHBvcnRzKFwiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6bm9uZVwiKSxlej1cIk1hY0ludGVsXCI9PT1lUy5wbGF0Zm9ybSYmZVMubWF4VG91Y2hQb2ludHM+MXx8L2lQKGhvbmV8YWR8b2QpfGlPUy8udGVzdChlUy5wbGF0Zm9ybSk7ZUMmJi9maXJlZm94L2kudGVzdChlXyk7bGV0IGVMPWVDJiYvYXBwbGUvaS50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLGVUPWVDJiYvYW5kcm9pZC9pLnRlc3QoZUUpfHwvYW5kcm9pZC9pLnRlc3QoZV8pLGVSPWVDJiZlRS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJtYWNcIikmJiFuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMsZU49ZV8uaW5jbHVkZXMoXCJqc2RvbS9cIik7ZnVuY3Rpb24gZUQoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZUIoZSl7cmV0dXJuIDA9PT1lLm1veklucHV0U291cmNlJiYhIWUuaXNUcnVzdGVkfHwoZVQmJmUucG9pbnRlclR5cGU/XCJjbGlja1wiPT09ZS50eXBlJiYxPT09ZS5idXR0b25zOjA9PT1lLmRldGFpbCYmIWUucG9pbnRlclR5cGUpfWZ1bmN0aW9uIGVNKGUpe3JldHVybiFlTiYmKCFlVCYmMD09PWUud2lkdGgmJjA9PT1lLmhlaWdodHx8ZVQmJjE9PT1lLndpZHRoJiYxPT09ZS5oZWlnaHQmJjA9PT1lLnByZXNzdXJlJiYwPT09ZS5kZXRhaWwmJlwibW91c2VcIj09PWUucG9pbnRlclR5cGV8fGUud2lkdGg8MSYmZS5oZWlnaHQ8MSYmMD09PWUucHJlc3N1cmUmJjA9PT1lLmRldGFpbCYmXCJ0b3VjaFwiPT09ZS5wb2ludGVyVHlwZSl9ZnVuY3Rpb24gZUkoZSxuKXtsZXQgdD1bXCJtb3VzZVwiLFwicGVuXCJdO3JldHVybiBufHx0LnB1c2goXCJcIix2b2lkIDApLHQuaW5jbHVkZXMoZSl9bGV0IGVIPVwiZGF0YS1iYXNlLXVpLWZvY3VzYWJsZVwiLGVGPVwiYWN0aXZlXCIsZVU9XCJzZWxlY3RlZFwiLGVWPVwiQXJyb3dMZWZ0XCIsZXE9XCJBcnJvd1JpZ2h0XCIsZVc9XCJBcnJvd1VwXCIsZSQ9XCJBcnJvd0Rvd25cIjtmdW5jdGlvbiBlWihlKXtsZXQgbj1lLmFjdGl2ZUVsZW1lbnQ7Zm9yKDtuPy5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50IT1udWxsOyluPW4uc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O3JldHVybiBufWZ1bmN0aW9uIGVZKGUsbil7aWYoIWV8fCFuKXJldHVybiExO2xldCB0PW4uZ2V0Um9vdE5vZGU/LigpO2lmKGUuY29udGFpbnMobikpcmV0dXJuITA7aWYodCYmZXQodCkpe2xldCB0PW47Zm9yKDt0Oyl7aWYoZT09PXQpcmV0dXJuITA7dD10LnBhcmVudE5vZGV8fHQuaG9zdH19cmV0dXJuITF9ZnVuY3Rpb24gZVgoZSl7cmV0dXJuXCJjb21wb3NlZFBhdGhcImluIGU/ZS5jb21wb3NlZFBhdGgoKVswXTplLnRhcmdldH1mdW5jdGlvbiBlSyhlLG4pe3JldHVybiBudWxsIT1uJiYoXCJjb21wb3NlZFBhdGhcImluIGU/ZS5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyhuKTpudWxsIT1lLnRhcmdldCYmbi5jb250YWlucyhlLnRhcmdldCkpfWZ1bmN0aW9uIGVRKGUpe3JldHVybiBlPy5vd25lckRvY3VtZW50fHxkb2N1bWVudH1mdW5jdGlvbiBlRyhlKXtyZXR1cm4gZW4oZSkmJmUubWF0Y2hlcyhcImlucHV0Om5vdChbdHlwZT0naGlkZGVuJ10pOm5vdChbZGlzYWJsZWRdKSxbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT0nZmFsc2UnXSksdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pXCIpfWZ1bmN0aW9uIGVKKGUpe3JldHVybiEhZSYmXCJjb21ib2JveFwiPT09ZS5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpJiZlRyhlKX1mdW5jdGlvbiBlMChlKXtyZXR1cm4gZT9lLmhhc0F0dHJpYnV0ZShlSCk/ZTplLnF1ZXJ5U2VsZWN0b3IoYFske2VIfV1gKXx8ZTpudWxsfWZ1bmN0aW9uIGUxKGUpe3JldHVybmBkYXRhLWJhc2UtdWktJHtlfWB9bGV0IGUyPWUxKFwic2FmZS1wb2x5Z29uXCIpO2Z1bmN0aW9uIGU0KGUsbix0KXtpZih0JiYhZUkodCkpcmV0dXJuIDA7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSl7bGV0IHQ9ZSgpO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0P3Q6dD8uW25dfXJldHVybiBlPy5bbl19ZnVuY3Rpb24gZTUoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lKCk6ZX1mdW5jdGlvbiBlMyhlLG49e30pe2xldHtvcGVuOnQsb25PcGVuQ2hhbmdlOnIsZGF0YVJlZjpvLGV2ZW50czphLGVsZW1lbnRzOml9PWUse2VuYWJsZWQ6bD0hMCxkZWxheTpzPTAsaGFuZGxlQ2xvc2U6Yz1udWxsLG1vdXNlT25seTp1PSExLHJlc3RNczpkPTAsbW92ZTpmPSEwfT1uLHA9VygpLGg9cSgpLGc9ZUEoYyksbT1lQShzKSx2PWVBKHQpLGI9ZUEoZCkseT1DLnVzZVJlZih2b2lkIDApLHg9ZWsoKSx3PUMudXNlUmVmKHZvaWQgMCksaj1laygpLGs9Qy51c2VSZWYoITApLEE9Qy51c2VSZWYoITEpLE89Qy51c2VSZWYoKCk9Pnt9KSxTPUMudXNlUmVmKCExKSxFPVQoKCk9PntsZXQgZT1vLmN1cnJlbnQub3BlbkV2ZW50Py50eXBlO3JldHVybiBlPy5pbmNsdWRlcyhcIm1vdXNlXCIpJiZcIm1vdXNlZG93blwiIT09ZX0pO0MudXNlRWZmZWN0KCgpPT57aWYobClyZXR1cm4gYS5vbihcIm9wZW5jaGFuZ2VcIixlKSwoKT0+e2Eub2ZmKFwib3BlbmNoYW5nZVwiLGUpfTtmdW5jdGlvbiBlKHtvcGVuOmV9KXtlfHwoeC5jbGVhcigpLGouY2xlYXIoKSxrLmN1cnJlbnQ9ITAsUy5jdXJyZW50PSExKX19LFtsLGEseCxqXSksQy51c2VFZmZlY3QoKCk9PntpZighbHx8IWcuY3VycmVudHx8IXQpcmV0dXJuO2Z1bmN0aW9uIGUoZSl7RSgpJiZyKCExLGUsXCJob3ZlclwiKX1sZXQgbj1lUShpLmZsb2F0aW5nKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixlKSwoKT0+e24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixlKX19LFtpLmZsb2F0aW5nLHQscixsLGcsRV0pO2xldCBfPUMudXNlQ2FsbGJhY2soKGUsbj0hMCx0PVwiaG92ZXJcIik9PntsZXQgbz1lNChtLmN1cnJlbnQsXCJjbG9zZVwiLHkuY3VycmVudCk7byYmIXcuY3VycmVudD94LnN0YXJ0KG8sKCk9PnIoITEsZSx0KSk6biYmKHguY2xlYXIoKSxyKCExLGUsdCkpfSxbbSxyLHhdKSxQPVQoKCk9PntPLmN1cnJlbnQoKSx3LmN1cnJlbnQ9dm9pZCAwfSksej1UKCgpPT57aWYoQS5jdXJyZW50KXtsZXQgZT1lUShpLmZsb2F0aW5nKS5ib2R5O2Uuc3R5bGUucG9pbnRlckV2ZW50cz1cIlwiLGUucmVtb3ZlQXR0cmlidXRlKGUyKSxBLmN1cnJlbnQ9ITF9fSksTD1UKCgpPT4hIW8uY3VycmVudC5vcGVuRXZlbnQmJltcImNsaWNrXCIsXCJtb3VzZWRvd25cIl0uaW5jbHVkZXMoby5jdXJyZW50Lm9wZW5FdmVudC50eXBlKSk7Qy51c2VFZmZlY3QoKCk9PntpZihsJiZlZShpLmRvbVJlZmVyZW5jZSkpe2xldCByPWkuZG9tUmVmZXJlbmNlLG89aS5mbG9hdGluZztyZXR1cm4gdCYmci5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLGEpLGYmJnIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLGUse29uY2U6ITB9KSxyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsZSksci5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLG4pLG8mJihvLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsYSksby5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLHMpLG8uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixjKSksKCk9Pnt0JiZyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsYSksZiYmci5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsZSksci5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLGUpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixuKSxvJiYoby5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLGEpLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIixzKSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsYykpfX1mdW5jdGlvbiBlKGUpe2lmKHguY2xlYXIoKSxrLmN1cnJlbnQ9ITEsdSYmIWVJKHkuY3VycmVudCl8fGU1KGIuY3VycmVudCk+MCYmIWU0KG0uY3VycmVudCxcIm9wZW5cIikpcmV0dXJuO2xldCBuPWU0KG0uY3VycmVudCxcIm9wZW5cIix5LmN1cnJlbnQpO24/eC5zdGFydChuLCgpPT57di5jdXJyZW50fHxyKCEwLGUsXCJob3ZlclwiKX0pOnR8fHIoITAsZSxcImhvdmVyXCIpfWZ1bmN0aW9uIG4oZSl7aWYoTCgpKXJldHVybiB2b2lkIHooKTtPLmN1cnJlbnQoKTtsZXQgbj1lUShpLmZsb2F0aW5nKTtpZihqLmNsZWFyKCksUy5jdXJyZW50PSExLGcuY3VycmVudCYmby5jdXJyZW50LmZsb2F0aW5nQ29udGV4dCl7dHx8eC5jbGVhcigpLHcuY3VycmVudD1nLmN1cnJlbnQoey4uLm8uY3VycmVudC5mbG9hdGluZ0NvbnRleHQsdHJlZTpwLHg6ZS5jbGllbnRYLHk6ZS5jbGllbnRZLG9uQ2xvc2UoKXt6KCksUCgpLEwoKXx8XyhlLCEwLFwic2FmZS1wb2x5Z29uXCIpfX0pO2xldCByPXcuY3VycmVudDtuLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixyKSxPLmN1cnJlbnQ9KCk9PntuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixyKX07cmV0dXJufVwidG91Y2hcIj09PXkuY3VycmVudCYmZVkoaS5mbG9hdGluZyxlLnJlbGF0ZWRUYXJnZXQpfHxfKGUpfWZ1bmN0aW9uIGEoZSl7IUwoKSYmby5jdXJyZW50LmZsb2F0aW5nQ29udGV4dCYmZy5jdXJyZW50Py4oey4uLm8uY3VycmVudC5mbG9hdGluZ0NvbnRleHQsdHJlZTpwLHg6ZS5jbGllbnRYLHk6ZS5jbGllbnRZLG9uQ2xvc2UoKXt6KCksUCgpLEwoKXx8XyhlKX19KShlKX1mdW5jdGlvbiBzKCl7eC5jbGVhcigpfWZ1bmN0aW9uIGMoZSl7TCgpfHxfKGUsITEpfX0sW2ksbCxlLHUsZixfLFAseixyLHQsdixwLG0sZyxvLEwsYix4LGpdKSxGKCgpPT57aWYobCYmdCYmZy5jdXJyZW50Py5fX29wdGlvbnM/LmJsb2NrUG9pbnRlckV2ZW50cyYmRSgpKXtBLmN1cnJlbnQ9ITA7bGV0IGU9aS5mbG9hdGluZztpZihlZShpLmRvbVJlZmVyZW5jZSkmJmUpe2xldCBuPWVRKGkuZmxvYXRpbmcpLmJvZHk7bi5zZXRBdHRyaWJ1dGUoZTIsXCJcIik7bGV0IHQ9aS5kb21SZWZlcmVuY2Uscj1wPy5ub2Rlc1JlZi5jdXJyZW50LmZpbmQoZT0+ZS5pZD09PWgpPy5jb250ZXh0Py5lbGVtZW50cy5mbG9hdGluZztyZXR1cm4gciYmKHIuc3R5bGUucG9pbnRlckV2ZW50cz1cIlwiKSxuLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCIsdC5zdHlsZS5wb2ludGVyRXZlbnRzPVwiYXV0b1wiLGUuc3R5bGUucG9pbnRlckV2ZW50cz1cImF1dG9cIiwoKT0+e24uc3R5bGUucG9pbnRlckV2ZW50cz1cIlwiLHQuc3R5bGUucG9pbnRlckV2ZW50cz1cIlwiLGUuc3R5bGUucG9pbnRlckV2ZW50cz1cIlwifX19fSxbbCx0LGgsaSxwLGcsRV0pLEYoKCk9Pnt0fHwoeS5jdXJyZW50PXZvaWQgMCxTLmN1cnJlbnQ9ITEsUCgpLHooKSl9LFt0LFAsel0pLEMudXNlRWZmZWN0KCgpPT4oKT0+e1AoKSx4LmNsZWFyKCksai5jbGVhcigpLHooKX0sW2wsaS5kb21SZWZlcmVuY2UsUCx6LHgsal0pO2xldCBSPUMudXNlTWVtbygoKT0+e2Z1bmN0aW9uIGUoZSl7eS5jdXJyZW50PWUucG9pbnRlclR5cGV9cmV0dXJue29uUG9pbnRlckRvd246ZSxvblBvaW50ZXJFbnRlcjplLG9uTW91c2VNb3ZlKGUpe2xldHtuYXRpdmVFdmVudDpufT1lO2Z1bmN0aW9uIG8oKXtrLmN1cnJlbnR8fHYuY3VycmVudHx8cighMCxuLFwiaG92ZXJcIil9KCF1fHxlSSh5LmN1cnJlbnQpKSYmIXQmJjAhPT1lNShiLmN1cnJlbnQpJiYoUy5jdXJyZW50JiZlLm1vdmVtZW50WCoqMitlLm1vdmVtZW50WSoqMjwyfHwoai5jbGVhcigpLFwidG91Y2hcIj09PXkuY3VycmVudD9vKCk6KFMuY3VycmVudD0hMCxqLnN0YXJ0KGU1KGIuY3VycmVudCksbykpKSl9fX0sW3Uscix0LHYsYixqXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+bD97cmVmZXJlbmNlOlJ9Ont9LFtsLFJdKX1mdW5jdGlvbiBlNihlLG4sdD0hMCl7cmV0dXJuIGUuZmlsdGVyKGU9PmUucGFyZW50SWQ9PT1uJiYoIXR8fGUuY29udGV4dD8ub3BlbikpLmZsYXRNYXAobj0+W24sLi4uZTYoZSxuLmlkLHQpXSl9ZnVuY3Rpb24gZTkoZSxuKXtsZXQgdD1bXSxyPWUuZmluZChlPT5lLmlkPT09bik/LnBhcmVudElkO2Zvcig7cjspe2xldCBuPWUuZmluZChlPT5lLmlkPT09cik7cj1uPy5wYXJlbnRJZCxuJiYodD10LmNvbmNhdChuKSl9cmV0dXJuIHR9ZnVuY3Rpb24gZTgoZSxuKXtsZXRbdCxyXT1lLG89ITEsYT1uLmxlbmd0aDtmb3IobGV0IGU9MCxpPWEtMTtlPGE7aT1lKyspe2xldFthLGxdPW5bZV18fFswLDBdLFtzLGNdPW5baV18fFswLDBdO2w+PXIhPWM+PXImJnQ8PShzLWEpKihyLWwpLyhjLWwpK2EmJihvPSFvKX1yZXR1cm4gb31mdW5jdGlvbiBlNyhlPXt9KXtsZXR7YnVmZmVyOm49LjUsYmxvY2tQb2ludGVyRXZlbnRzOnQ9ITEscmVxdWlyZUludGVudDpyPSEwfT1lLG89bmV3IGVqLGE9ITEsaT1udWxsLGw9bnVsbCxzPXBlcmZvcm1hbmNlLm5vdygpLGM9KHt4OmUseTp0LHBsYWNlbWVudDpjLGVsZW1lbnRzOnUsb25DbG9zZTpkLG5vZGVJZDpmLHRyZWU6cH0pPT5mdW5jdGlvbihoKXtmdW5jdGlvbiBnKCl7by5jbGVhcigpLGQoKX1pZihvLmNsZWFyKCksIXUuZG9tUmVmZXJlbmNlfHwhdS5mbG9hdGluZ3x8bnVsbD09Y3x8bnVsbD09ZXx8bnVsbD09dClyZXR1cm47bGV0e2NsaWVudFg6bSxjbGllbnRZOnZ9PWgsYj1bbSx2XSx5PWVYKGgpLHg9XCJtb3VzZWxlYXZlXCI9PT1oLnR5cGUsdz1lWSh1LmZsb2F0aW5nLHkpLGo9ZVkodS5kb21SZWZlcmVuY2UseSksaz11LmRvbVJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBPXUuZmxvYXRpbmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksTz1jLnNwbGl0KFwiLVwiKVswXSxDPWU+QS5yaWdodC1BLndpZHRoLzIsUz10PkEuYm90dG9tLUEuaGVpZ2h0LzIsRT1iWzBdPj1rLngmJmJbMF08PWsueCtrLndpZHRoJiZiWzFdPj1rLnkmJmJbMV08PWsueStrLmhlaWdodCxfPUEud2lkdGg+ay53aWR0aCxQPUEuaGVpZ2h0PmsuaGVpZ2h0LHo9KF8/azpBKS5sZWZ0LEw9KF8/azpBKS5yaWdodCxUPShQP2s6QSkudG9wLFI9KFA/azpBKS5ib3R0b207aWYodyYmKGE9ITAsIXgpKXJldHVybjtpZihqJiYoYT0hMSksaiYmIXgpe2E9ITA7cmV0dXJufWlmKHgmJmVlKGgucmVsYXRlZFRhcmdldCkmJmVZKHUuZmxvYXRpbmcsaC5yZWxhdGVkVGFyZ2V0KXx8cCYmZTYocC5ub2Rlc1JlZi5jdXJyZW50LGYpLnNvbWUoKHtjb250ZXh0OmV9KT0+ZT8ub3BlbikpcmV0dXJuO2lmKFwidG9wXCI9PT1PJiZ0Pj1rLmJvdHRvbS0xfHxcImJvdHRvbVwiPT09TyYmdDw9ay50b3ArMXx8XCJsZWZ0XCI9PT1PJiZlPj1rLnJpZ2h0LTF8fFwicmlnaHRcIj09PU8mJmU8PWsubGVmdCsxKXJldHVybiBnKCk7bGV0IE49W107c3dpdGNoKE8pe2Nhc2VcInRvcFwiOk49W1t6LGsudG9wKzFdLFt6LEEuYm90dG9tLTFdLFtMLEEuYm90dG9tLTFdLFtMLGsudG9wKzFdXTticmVhaztjYXNlXCJib3R0b21cIjpOPVtbeixBLnRvcCsxXSxbeixrLmJvdHRvbS0xXSxbTCxrLmJvdHRvbS0xXSxbTCxBLnRvcCsxXV07YnJlYWs7Y2FzZVwibGVmdFwiOk49W1tBLnJpZ2h0LTEsUl0sW0EucmlnaHQtMSxUXSxbay5sZWZ0KzEsVF0sW2subGVmdCsxLFJdXTticmVhaztjYXNlXCJyaWdodFwiOk49W1trLnJpZ2h0LTEsUl0sW2sucmlnaHQtMSxUXSxbQS5sZWZ0KzEsVF0sW0EubGVmdCsxLFJdXX1pZighZTgoW20sdl0sTikpe2lmKGEmJiFFKXJldHVybiBnKCk7aWYoIXgmJnIpe2xldCBlPWZ1bmN0aW9uKGUsbil7bGV0IHQ9cGVyZm9ybWFuY2Uubm93KCkscj10LXM7aWYobnVsbD09PWl8fG51bGw9PT1sfHwwPT09cilyZXR1cm4gaT1lLGw9bixzPXQsbnVsbDtsZXQgbz1lLWksYT1uLWwsYz1NYXRoLnNxcnQobypvK2EqYSk7cmV0dXJuIGk9ZSxsPW4scz10LGMvcn0oaC5jbGllbnRYLGguY2xpZW50WSk7aWYobnVsbCE9PWUmJmU8LjEpcmV0dXJuIGcoKX1lOChbbSx2XSxmdW5jdGlvbihbZSx0XSl7c3dpdGNoKE8pe2Nhc2VcInRvcFwiOntsZXQgcj1bW0EubGVmdCxDfHxfP0EuYm90dG9tLW46QS50b3BdLFtBLnJpZ2h0LEM/Xz9BLmJvdHRvbS1uOkEudG9wOkEuYm90dG9tLW5dXTtyZXR1cm5bW18/ZStuLzI6Qz9lKzQqbjplLTQqbix0K24rMV0sW18/ZS1uLzI6Qz9lKzQqbjplLTQqbix0K24rMV0sLi4ucl19Y2FzZVwiYm90dG9tXCI6e2xldCByPVtbQS5sZWZ0LEN8fF8/QS50b3ArbjpBLmJvdHRvbV0sW0EucmlnaHQsQz9fP0EudG9wK246QS5ib3R0b206QS50b3Arbl1dO3JldHVybltbXz9lK24vMjpDP2UrNCpuOmUtNCpuLHQtbl0sW18/ZS1uLzI6Qz9lKzQqbjplLTQqbix0LW5dLC4uLnJdfWNhc2VcImxlZnRcIjpyZXR1cm5bW1N8fFA/QS5yaWdodC1uOkEubGVmdCxBLnRvcF0sW1M/UD9BLnJpZ2h0LW46QS5sZWZ0OkEucmlnaHQtbixBLmJvdHRvbV0sW2UrbisxLFA/dCtuLzI6Uz90KzQqbjp0LTQqbl0sW2UrbisxLFA/dC1uLzI6Uz90KzQqbjp0LTQqbl1dO2Nhc2VcInJpZ2h0XCI6e2xldCByPVtbU3x8UD9BLmxlZnQrbjpBLnJpZ2h0LEEudG9wXSxbUz9QP0EubGVmdCtuOkEucmlnaHQ6QS5sZWZ0K24sQS5ib3R0b21dXTtyZXR1cm5bW2UtbixQP3Qrbi8yOlM/dCs0Km46dC00Km5dLFtlLW4sUD90LW4vMjpTP3QrNCpuOnQtNCpuXSwuLi5yXX1kZWZhdWx0OnJldHVybltdfX0oW2UsdF0pKT8hYSYmciYmby5zdGFydCg0MCxnKTpnKCl9fTtyZXR1cm4gYy5fX29wdGlvbnM9e2Jsb2NrUG9pbnRlckV2ZW50czp0fSxjfWxldCBuZT1lUiYmZUw7ZnVuY3Rpb24gbm4oZSxuPXt9KXtsZXR7b3Blbjp0LG9uT3BlbkNoYW5nZTpyLGV2ZW50czpvLGRhdGFSZWY6YSxlbGVtZW50czppfT1lLHtlbmFibGVkOmw9ITAsdmlzaWJsZU9ubHk6cz0hMH09bixjPUMudXNlUmVmKCExKSx1PWVrKCksZD1DLnVzZVJlZighMCk7Qy51c2VFZmZlY3QoKCk9PntpZighbClyZXR1cm47bGV0IGU9UShpLmRvbVJlZmVyZW5jZSk7ZnVuY3Rpb24gbigpeyF0JiZlbihpLmRvbVJlZmVyZW5jZSkmJmkuZG9tUmVmZXJlbmNlPT09ZVooZVEoaS5kb21SZWZlcmVuY2UpKSYmKGMuY3VycmVudD0hMCl9ZnVuY3Rpb24gcigpe2QuY3VycmVudD0hMH1mdW5jdGlvbiBvKCl7ZC5jdXJyZW50PSExfXJldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsbiksbmUmJihlLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsciwhMCksZS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixvLCEwKSksKCk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsbiksbmUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixvLCEwKSl9fSxbaS5kb21SZWZlcmVuY2UsdCxsXSksQy51c2VFZmZlY3QoKCk9PntpZihsKXJldHVybiBvLm9uKFwib3BlbmNoYW5nZVwiLGUpLCgpPT57by5vZmYoXCJvcGVuY2hhbmdlXCIsZSl9O2Z1bmN0aW9uIGUoe3JlYXNvbjplfSl7KFwicmVmZXJlbmNlLXByZXNzXCI9PT1lfHxcImVzY2FwZS1rZXlcIj09PWUpJiYoYy5jdXJyZW50PSEwKX19LFtvLGxdKTtsZXQgZj1DLnVzZU1lbW8oKCk9Pih7b25Nb3VzZUxlYXZlKCl7Yy5jdXJyZW50PSExfSxvbkZvY3VzKGUpe2lmKGMuY3VycmVudClyZXR1cm47bGV0IG49ZVgoZS5uYXRpdmVFdmVudCk7aWYocyYmZWUobikpe2lmKG5lJiYhZS5yZWxhdGVkVGFyZ2V0KXtpZighZC5jdXJyZW50JiYhZUcobikpcmV0dXJufWVsc2UgaWYoIWZ1bmN0aW9uKGUpe2lmKCFlfHxlTilyZXR1cm4hMDt0cnl7cmV0dXJuIGUubWF0Y2hlcyhcIjpmb2N1cy12aXNpYmxlXCIpfWNhdGNoKGUpe3JldHVybiEwfX0obikpcmV0dXJufXIoITAsZS5uYXRpdmVFdmVudCxcImZvY3VzXCIpfSxvbkJsdXIoZSl7Yy5jdXJyZW50PSExO2xldCBuPWUucmVsYXRlZFRhcmdldCx0PWUubmF0aXZlRXZlbnQsbz1lZShuKSYmbi5oYXNBdHRyaWJ1dGUoZTEoXCJmb2N1cy1ndWFyZFwiKSkmJlwib3V0c2lkZVwiPT09bi5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR5cGVcIik7dS5zdGFydCgwLCgpPT57bGV0IGU9ZVooaS5kb21SZWZlcmVuY2U/aS5kb21SZWZlcmVuY2Uub3duZXJEb2N1bWVudDpkb2N1bWVudCk7KG58fGUhPT1pLmRvbVJlZmVyZW5jZSkmJihlWShhLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5yZWZzLmZsb2F0aW5nLmN1cnJlbnQsZSl8fGVZKGkuZG9tUmVmZXJlbmNlLGUpfHxvfHxyKCExLHQsXCJmb2N1c1wiKSl9KX19KSxbYSxpLmRvbVJlZmVyZW5jZSxyLHMsdV0pO3JldHVybiBDLnVzZU1lbW8oKCk9Pmw/e3JlZmVyZW5jZTpmfTp7fSxbbCxmXSl9bGV0IG50PXtzdHlsZTp7dHJhbnNpdGlvbjpcIm5vbmVcIn19LG5yPXt9LG5vPXtmYWxsYmFja0F4aXNTaWRlOlwibm9uZVwifSxuYT17ZmFsbGJhY2tBeGlzU2lkZTpcImVuZFwifSxuaT1uZXcgY2xhc3N7Y2FsbGJhY2tzPVtdO2NhbGxiYWNrc0NvdW50PTA7bmV4dElkPTE7c3RhcnRJZD0xO2lzU2NoZWR1bGVkPSExO3RpY2s9ZT0+e3RoaXMuaXNTY2hlZHVsZWQ9ITE7bGV0IG49dGhpcy5jYWxsYmFja3MsdD10aGlzLmNhbGxiYWNrc0NvdW50O2lmKHRoaXMuY2FsbGJhY2tzPVtdLHRoaXMuY2FsbGJhY2tzQ291bnQ9MCx0aGlzLnN0YXJ0SWQ9dGhpcy5uZXh0SWQsdD4wKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCs9MSluW3RdPy4oZSl9O3JlcXVlc3QoZSl7bGV0IG49dGhpcy5uZXh0SWQ7cmV0dXJuIHRoaXMubmV4dElkKz0xLHRoaXMuY2FsbGJhY2tzLnB1c2goZSksdGhpcy5jYWxsYmFja3NDb3VudCs9MSx0aGlzLmlzU2NoZWR1bGVkfHwocmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudGljayksdGhpcy5pc1NjaGVkdWxlZD0hMCksbn1jYW5jZWwoZSl7bGV0IG49ZS10aGlzLnN0YXJ0SWQ7bjwwfHxuPj10aGlzLmNhbGxiYWNrcy5sZW5ndGh8fCh0aGlzLmNhbGxiYWNrc1tuXT1udWxsLHRoaXMuY2FsbGJhY2tzQ291bnQtPTEpfX07Y2xhc3Mgbmx7c3RhdGljIGNyZWF0ZSgpe3JldHVybiBuZXcgbmx9c3RhdGljIHJlcXVlc3QoZSl7cmV0dXJuIG5pLnJlcXVlc3QoZSl9c3RhdGljIGNhbmNlbChlKXtyZXR1cm4gbmkuY2FuY2VsKGUpfWN1cnJlbnRJZD1udWxsO3JlcXVlc3QoZSl7dGhpcy5jYW5jZWwoKSx0aGlzLmN1cnJlbnRJZD1uaS5yZXF1ZXN0KCgpPT57dGhpcy5jdXJyZW50SWQ9bnVsbCxlKCl9KX1jYW5jZWw9KCk9PntudWxsIT09dGhpcy5jdXJyZW50SWQmJihuaS5jYW5jZWwodGhpcy5jdXJyZW50SWQpLHRoaXMuY3VycmVudElkPW51bGwpfTtkaXNwb3NlRWZmZWN0PSgpPT50aGlzLmNhbmNlbH1mdW5jdGlvbiBucygpe2xldCBlPVAobmwuY3JlYXRlKS5jdXJyZW50O3JldHVybiBldyhlLmRpc3Bvc2VFZmZlY3QpLGV9bGV0IG5jPXtwb2ludGVyZG93bjpcIm9uUG9pbnRlckRvd25cIixtb3VzZWRvd246XCJvbk1vdXNlRG93blwiLGNsaWNrOlwib25DbGlja1wifSxudT17cG9pbnRlcmRvd246XCJvblBvaW50ZXJEb3duQ2FwdHVyZVwiLG1vdXNlZG93bjpcIm9uTW91c2VEb3duQ2FwdHVyZVwiLGNsaWNrOlwib25DbGlja0NhcHR1cmVcIn0sbmQ9ZT0+KHtlc2NhcGVLZXk6XCJib29sZWFuXCI9PXR5cGVvZiBlP2U6ZT8uZXNjYXBlS2V5Pz8hMSxvdXRzaWRlUHJlc3M6XCJib29sZWFuXCI9PXR5cGVvZiBlP2U6ZT8ub3V0c2lkZVByZXNzPz8hMH0pO2Z1bmN0aW9uIG5mKGUsbj17fSl7bGV0e29wZW46dCxvbk9wZW5DaGFuZ2U6cixlbGVtZW50czpvLGRhdGFSZWY6YX09ZSx7ZW5hYmxlZDppPSEwLGVzY2FwZUtleTpsPSEwLG91dHNpZGVQcmVzczpzPSEwLG91dHNpZGVQcmVzc0V2ZW50OmM9XCJwb2ludGVyZG93blwiLHJlZmVyZW5jZVByZXNzOnU9ITEscmVmZXJlbmNlUHJlc3NFdmVudDpkPVwicG9pbnRlcmRvd25cIixhbmNlc3RvclNjcm9sbDpmPSExLGJ1YmJsZXM6cCxjYXB0dXJlOmh9PW4sZz1XKCksbT1UKFwiZnVuY3Rpb25cIj09dHlwZW9mIHM/czooKT0+ITEpLHY9XCJmdW5jdGlvblwiPT10eXBlb2Ygcz9tOnMsYj1DLnVzZVJlZighMSkse2VzY2FwZUtleTp5LG91dHNpZGVQcmVzczp4fT1uZChwKSx7ZXNjYXBlS2V5Oncsb3V0c2lkZVByZXNzOmp9PW5kKGgpLGs9Qy51c2VSZWYoITEpLEE9ZWsoKSxPPVQoZT0+e2lmKCF0fHwhaXx8IWx8fFwiRXNjYXBlXCIhPT1lLmtleXx8ay5jdXJyZW50KXJldHVybjtsZXQgbj1hLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5ub2RlSWQsbz1nP2U2KGcubm9kZXNSZWYuY3VycmVudCxuKTpbXTtpZigheSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksby5sZW5ndGg+MCkpe2xldCBlPSEwO2lmKG8uZm9yRWFjaChuPT57bi5jb250ZXh0Py5vcGVuJiYhbi5jb250ZXh0LmRhdGFSZWYuY3VycmVudC5fX2VzY2FwZUtleUJ1YmJsZXMmJihlPSExKX0pLCFlKXJldHVybn1yKCExLFwibmF0aXZlRXZlbnRcImluIGU/ZS5uYXRpdmVFdmVudDplLFwiZXNjYXBlLWtleVwiKX0pLFM9VChlPT57bGV0IG49KCk9PntPKGUpLGVYKGUpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLG4pfTtlWChlKT8uYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixuKX0pLEU9VChlPT57bGV0IG49YS5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZTthLmN1cnJlbnQuaW5zaWRlUmVhY3RUcmVlPSExO2xldCB0PWIuY3VycmVudDtpZihiLmN1cnJlbnQ9ITEsXCJjbGlja1wiPT09YyYmdHx8bnx8XCJmdW5jdGlvblwiPT10eXBlb2YgdiYmIXYoZSkpcmV0dXJuO2xldCBpPWVYKGUpLGw9YFske2UxKFwiaW5lcnRcIil9XWAscz1lUShvLmZsb2F0aW5nKS5xdWVyeVNlbGVjdG9yQWxsKGwpLHU9ZWUoaSk/aTpudWxsO2Zvcig7dSYmIWVoKHUpOyl7bGV0IGU9ZXYodSk7aWYoZWgoZSl8fCFlZShlKSlicmVhazt1PWV9aWYocy5sZW5ndGgmJmVlKGkpJiYhaS5tYXRjaGVzKFwiaHRtbCxib2R5XCIpJiYhZVkoaSxvLmZsb2F0aW5nKSYmQXJyYXkuZnJvbShzKS5ldmVyeShlPT4hZVkodSxlKSkpcmV0dXJuO2lmKGVuKGkpKXtsZXQgbj1laChpKSx0PWVnKGkpLHI9L2F1dG98c2Nyb2xsLyxvPW58fHIudGVzdCh0Lm92ZXJmbG93WCksYT1ufHxyLnRlc3QodC5vdmVyZmxvd1kpLGw9byYmaS5jbGllbnRXaWR0aD4wJiZpLnNjcm9sbFdpZHRoPmkuY2xpZW50V2lkdGgscz1hJiZpLmNsaWVudEhlaWdodD4wJiZpLnNjcm9sbEhlaWdodD5pLmNsaWVudEhlaWdodCxjPVwicnRsXCI9PT10LmRpcmVjdGlvbix1PXMmJihjP2Uub2Zmc2V0WDw9aS5vZmZzZXRXaWR0aC1pLmNsaWVudFdpZHRoOmUub2Zmc2V0WD5pLmNsaWVudFdpZHRoKSxkPWwmJmUub2Zmc2V0WT5pLmNsaWVudEhlaWdodDtpZih1fHxkKXJldHVybn1sZXQgZD1hLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5ub2RlSWQsZj1nJiZlNihnLm5vZGVzUmVmLmN1cnJlbnQsZCkuc29tZShuPT5lSyhlLG4uY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcpKTtpZihlSyhlLG8uZmxvYXRpbmcpfHxlSyhlLG8uZG9tUmVmZXJlbmNlKXx8ZilyZXR1cm47bGV0IHA9Zz9lNihnLm5vZGVzUmVmLmN1cnJlbnQsZCk6W107aWYocC5sZW5ndGg+MCl7bGV0IGU9ITA7aWYocC5mb3JFYWNoKG49PntuLmNvbnRleHQ/Lm9wZW4mJiFuLmNvbnRleHQuZGF0YVJlZi5jdXJyZW50Ll9fb3V0c2lkZVByZXNzQnViYmxlcyYmKGU9ITEpfSksIWUpcmV0dXJufXIoITEsZSxcIm91dHNpZGUtcHJlc3NcIil9KSxfPVQoZT0+e2xldCBuPSgpPT57RShlKSxlWChlKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihjLG4pfTtlWChlKT8uYWRkRXZlbnRMaXN0ZW5lcihjLG4pfSk7Qy51c2VFZmZlY3QoKCk9PntpZighdHx8IWkpcmV0dXJuO2EuY3VycmVudC5fX2VzY2FwZUtleUJ1YmJsZXM9eSxhLmN1cnJlbnQuX19vdXRzaWRlUHJlc3NCdWJibGVzPXg7bGV0IGU9bmV3IGVqO2Z1bmN0aW9uIG4oZSl7cighMSxlLFwiYW5jZXN0b3Itc2Nyb2xsXCIpfWZ1bmN0aW9uIHMoKXtlLmNsZWFyKCksay5jdXJyZW50PSEwfWZ1bmN0aW9uIHUoKXtlLnN0YXJ0KDUqISFlZigpLCgpPT57ay5jdXJyZW50PSExfSl9bGV0IGQ9ZVEoby5mbG9hdGluZyk7bCYmKGQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix3P1M6Tyx3KSxkLmFkZEV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbnN0YXJ0XCIscyksZC5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIix1KSksdiYmZC5hZGRFdmVudExpc3RlbmVyKGMsaj9fOkUsaik7bGV0IHA9W107cmV0dXJuIGYmJihlZShvLmRvbVJlZmVyZW5jZSkmJihwPWViKG8uZG9tUmVmZXJlbmNlKSksZWUoby5mbG9hdGluZykmJihwPXAuY29uY2F0KGViKG8uZmxvYXRpbmcpKSksIWVlKG8ucmVmZXJlbmNlKSYmby5yZWZlcmVuY2UmJm8ucmVmZXJlbmNlLmNvbnRleHRFbGVtZW50JiYocD1wLmNvbmNhdChlYihvLnJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkpKSksKHA9cC5maWx0ZXIoZT0+ZSE9PWQuZGVmYXVsdFZpZXc/LnZpc3VhbFZpZXdwb3J0KSkuZm9yRWFjaChlPT57ZS5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsbix7cGFzc2l2ZTohMH0pfSksKCk9PntsJiYoZC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHc/UzpPLHcpLGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uc3RhcnRcIixzKSxkLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbmVuZFwiLHUpKSx2JiZkLnJlbW92ZUV2ZW50TGlzdGVuZXIoYyxqP186RSxqKSxwLmZvckVhY2goZT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLG4pfSksZS5jbGVhcigpfX0sW2EsbyxsLHYsYyx0LHIsZixpLHkseCxPLHcsUyxFLGosX10pLEMudXNlRWZmZWN0KCgpPT57YS5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZT0hMX0sW2EsdixjXSk7bGV0IFA9Qy51c2VNZW1vKCgpPT4oe29uS2V5RG93bjpPLC4uLnUmJntbbmNbZF1dOmU9PntyKCExLGUubmF0aXZlRXZlbnQsXCJyZWZlcmVuY2UtcHJlc3NcIil9LC4uLlwiY2xpY2tcIiE9PWQmJntvbkNsaWNrKGUpe3IoITEsZS5uYXRpdmVFdmVudCxcInJlZmVyZW5jZS1wcmVzc1wiKX19fX0pLFtPLHIsdSxkXSksej1DLnVzZU1lbW8oKCk9Pih7b25LZXlEb3duOk8sb25Nb3VzZURvd24oKXtiLmN1cnJlbnQ9ITB9LG9uTW91c2VVcCgpe2IuY3VycmVudD0hMH0sW251W2NdXTooKT0+e2EuY3VycmVudC5pbnNpZGVSZWFjdFRyZWU9ITB9LG9uQmx1ckNhcHR1cmUoKXtnfHwoYS5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZT0hMCxBLnN0YXJ0KDAsKCk9PnthLmN1cnJlbnQuaW5zaWRlUmVhY3RUcmVlPSExfSkpfX0pLFtPLGMsYSxnLEFdKTtyZXR1cm4gQy51c2VNZW1vKCgpPT5pP3tyZWZlcmVuY2U6UCxmbG9hdGluZzp6fTp7fSxbaSxQLHpdKX1sZXQgbnA9bmV3IE1hcChbW1wic2VsZWN0XCIsXCJsaXN0Ym94XCJdLFtcImNvbWJvYm94XCIsXCJsaXN0Ym94XCJdLFtcImxhYmVsXCIsITFdXSksbmg9W1widG9wXCIsXCJyaWdodFwiLFwiYm90dG9tXCIsXCJsZWZ0XCJdLG5nPU1hdGgubWluLG5tPU1hdGgubWF4LG52PU1hdGgucm91bmQsbmI9TWF0aC5mbG9vcixueT1lPT4oe3g6ZSx5OmV9KSxueD17bGVmdDpcInJpZ2h0XCIscmlnaHQ6XCJsZWZ0XCIsYm90dG9tOlwidG9wXCIsdG9wOlwiYm90dG9tXCJ9LG53PXtzdGFydDpcImVuZFwiLGVuZDpcInN0YXJ0XCJ9O2Z1bmN0aW9uIG5qKGUsbil7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lKG4pOmV9ZnVuY3Rpb24gbmsoZSl7cmV0dXJuIGUuc3BsaXQoXCItXCIpWzBdfWZ1bmN0aW9uIG5BKGUpe3JldHVybiBlLnNwbGl0KFwiLVwiKVsxXX1mdW5jdGlvbiBuTyhlKXtyZXR1cm5cInhcIj09PWU/XCJ5XCI6XCJ4XCJ9ZnVuY3Rpb24gbkMoZSl7cmV0dXJuXCJ5XCI9PT1lP1wiaGVpZ2h0XCI6XCJ3aWR0aFwifWxldCBuUz1uZXcgU2V0KFtcInRvcFwiLFwiYm90dG9tXCJdKTtmdW5jdGlvbiBuRShlKXtyZXR1cm4gblMuaGFzKG5rKGUpKT9cInlcIjpcInhcIn1mdW5jdGlvbiBuXyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9zdGFydHxlbmQvZyxlPT5ud1tlXSl9bGV0IG5QPVtcImxlZnRcIixcInJpZ2h0XCJdLG56PVtcInJpZ2h0XCIsXCJsZWZ0XCJdLG5MPVtcInRvcFwiLFwiYm90dG9tXCJdLG5UPVtcImJvdHRvbVwiLFwidG9wXCJdO2Z1bmN0aW9uIG5SKGUpe3JldHVybiBlLnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLGU9Pm54W2VdKX1mdW5jdGlvbiBuTihlKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgZT97dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjAsLi4uZX06e3RvcDplLHJpZ2h0OmUsYm90dG9tOmUsbGVmdDplfX1mdW5jdGlvbiBuRChlKXtsZXR7eDpuLHk6dCx3aWR0aDpyLGhlaWdodDpvfT1lO3JldHVybnt3aWR0aDpyLGhlaWdodDpvLHRvcDp0LGxlZnQ6bixyaWdodDpuK3IsYm90dG9tOnQrbyx4Om4seTp0fX1mdW5jdGlvbiBuQihlLG4sdCl7cmV0dXJuIE1hdGguZmxvb3IoZS9uKSE9PXR9ZnVuY3Rpb24gbk0oZSxuKXtyZXR1cm4gbjwwfHxuPj1lLmN1cnJlbnQubGVuZ3RofWZ1bmN0aW9uIG5JKGUsbil7cmV0dXJuIG5GKGUse2Rpc2FibGVkSW5kaWNlczpufSl9ZnVuY3Rpb24gbkgoZSxuKXtyZXR1cm4gbkYoZSx7ZGVjcmVtZW50OiEwLHN0YXJ0aW5nSW5kZXg6ZS5jdXJyZW50Lmxlbmd0aCxkaXNhYmxlZEluZGljZXM6bn0pfWZ1bmN0aW9uIG5GKGUse3N0YXJ0aW5nSW5kZXg6bj0tMSxkZWNyZW1lbnQ6dD0hMSxkaXNhYmxlZEluZGljZXM6cixhbW91bnQ6bz0xfT17fSl7bGV0IGE9bjtkbyBhKz10Py1vOm87d2hpbGUoYT49MCYmYTw9ZS5jdXJyZW50Lmxlbmd0aC0xJiZuVShlLGEscikpO3JldHVybiBhfWZ1bmN0aW9uIG5VKGUsbix0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXJldHVybiB0KG4pO2lmKHQpcmV0dXJuIHQuaW5jbHVkZXMobik7bGV0IHI9ZS5jdXJyZW50W25dO3JldHVybiBudWxsPT1yfHxyLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpfHxcInRydWVcIj09PXIuZ2V0QXR0cmlidXRlKFwiYXJpYS1kaXNhYmxlZFwiKX1sZXQgblY9MDtmdW5jdGlvbiBucShlLG49e30pe2xldHtwcmV2ZW50U2Nyb2xsOnQ9ITEsY2FuY2VsUHJldmlvdXM6cj0hMCxzeW5jOm89ITF9PW47ciYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoblYpO2xldCBhPSgpPT5lPy5mb2N1cyh7cHJldmVudFNjcm9sbDp0fSk7bz9hKCk6blY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGEpfWZ1bmN0aW9uIG5XKGUsbix0KXtzd2l0Y2goZSl7Y2FzZVwidmVydGljYWxcIjpyZXR1cm4gbjtjYXNlXCJob3Jpem9udGFsXCI6cmV0dXJuIHQ7ZGVmYXVsdDpyZXR1cm4gbnx8dH19ZnVuY3Rpb24gbiQoZSxuKXtyZXR1cm4gblcobixlPT09ZVd8fGU9PT1lJCxlPT09ZVZ8fGU9PT1lcSl9ZnVuY3Rpb24gblooZSxuLHQpe3JldHVybiBuVyhuLGU9PT1lJCx0P2U9PT1lVjplPT09ZXEpfHxcIkVudGVyXCI9PT1lfHxcIiBcIj09PWV8fFwiXCI9PT1lfWZ1bmN0aW9uIG5ZKGUsbix0KXtyZXR1cm4gblcobix0P2U9PT1lVjplPT09ZXEsZT09PWUkKX1mdW5jdGlvbiBuWChlLG4sdCxyKXtyZXR1cm5cImJvdGhcIj09PW58fFwiaG9yaXpvbnRhbFwiPT09biYmciYmcj4xP1wiRXNjYXBlXCI9PT1lOm5XKG4sdD9lPT09ZXE6ZT09PWVWLGU9PT1lVyl9ZnVuY3Rpb24gbksoZT1bXSl7bGV0IG49ZS5tYXAoZT0+ZT8ucmVmZXJlbmNlKSx0PWUubWFwKGU9PmU/LmZsb2F0aW5nKSxyPWUubWFwKGU9PmU/Lml0ZW0pLG89Qy51c2VDYWxsYmFjayhuPT5uUShuLGUsXCJyZWZlcmVuY2VcIiksbiksYT1DLnVzZUNhbGxiYWNrKG49Pm5RKG4sZSxcImZsb2F0aW5nXCIpLHQpLGk9Qy51c2VDYWxsYmFjayhuPT5uUShuLGUsXCJpdGVtXCIpLHIpO3JldHVybiBDLnVzZU1lbW8oKCk9Pih7Z2V0UmVmZXJlbmNlUHJvcHM6byxnZXRGbG9hdGluZ1Byb3BzOmEsZ2V0SXRlbVByb3BzOml9KSxbbyxhLGldKX1mdW5jdGlvbiBuUShlLG4sdCl7bGV0IHI9bmV3IE1hcCxvPVwiaXRlbVwiPT09dCxhPXt9O2ZvcihsZXQgbiBpblwiZmxvYXRpbmdcIj09PXQmJihhLnRhYkluZGV4PS0xLGFbZUhdPVwiXCIpLGUpbyYmZSYmKG49PT1lRnx8bj09PWVVKXx8KGFbbl09ZVtuXSk7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKz0xKXtsZXQgbCxzPW5baV0/Llt0XTsobD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzP2U/cyhlKTpudWxsOnMpJiZuRyhhLGwsbyxyKX1yZXR1cm4gbkcoYSxlLG8sciksYX1mdW5jdGlvbiBuRyhlLG4sdCxyKXtmb3IobGV0IG8gaW4gbil7bGV0IGE9bltvXTt0JiYobz09PWVGfHxvPT09ZVUpfHwoby5zdGFydHNXaXRoKFwib25cIik/KHIuaGFzKG8pfHxyLnNldChvLFtdKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoci5nZXQobyk/LnB1c2goYSksZVtvXT0oLi4uZSk9PnIuZ2V0KG8pPy5tYXAobj0+biguLi5lKSkuZmluZChlPT52b2lkIDAhPT1lKSkpOmVbb109YSl9fWxldCBuSj1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBuMChlKXtsZXQgbj1DLnVzZUNvbnRleHQobkopO2lmKHZvaWQgMD09PW4mJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogTWVudVJvb3RDb250ZXh0IGlzIG1pc3NpbmcuIE1lbnUgcGFydHMgbXVzdCBiZSBwbGFjZWQgd2l0aGluIDxNZW51LlJvb3Q+LlwiKTtyZXR1cm4gbn1sZXQgbjE9Qy5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIG4yKGUsbj0hMSx0PSExKXtsZXRbcixvXT1DLnVzZVN0YXRlKGUmJm4/XCJpZGxlXCI6dm9pZCAwKSxbYSxpXT1DLnVzZVN0YXRlKGUpO3JldHVybiBlJiYhYSYmKGkoITApLG8oXCJzdGFydGluZ1wiKSksZXx8IWF8fFwiZW5kaW5nXCI9PT1yfHx0fHxvKFwiZW5kaW5nXCIpLGV8fGF8fFwiZW5kaW5nXCIhPT1yfHxvKHZvaWQgMCksRigoKT0+e2lmKCFlJiZhJiZcImVuZGluZ1wiIT09ciYmdCl7bGV0IGU9bmwucmVxdWVzdCgoKT0+e28oXCJlbmRpbmdcIil9KTtyZXR1cm4oKT0+e25sLmNhbmNlbChlKX19fSxbZSxhLHIsdF0pLEYoKCk9PntpZighZXx8bilyZXR1cm47bGV0IHQ9bmwucmVxdWVzdCgoKT0+e0UuZmx1c2hTeW5jKCgpPT57byh2b2lkIDApfSl9KTtyZXR1cm4oKT0+e25sLmNhbmNlbCh0KX19LFtuLGVdKSxGKCgpPT57aWYoIWV8fCFuKXJldHVybjtlJiZhJiZcImlkbGVcIiE9PXImJm8oXCJzdGFydGluZ1wiKTtsZXQgdD1ubC5yZXF1ZXN0KCgpPT57byhcImlkbGVcIil9KTtyZXR1cm4oKT0+e25sLmNhbmNlbCh0KX19LFtuLGUsYSxvLHJdKSxDLnVzZU1lbW8oKCk9Pih7bW91bnRlZDphLHNldE1vdW50ZWQ6aSx0cmFuc2l0aW9uU3RhdHVzOnJ9KSxbYSxyXSl9ZnVuY3Rpb24gbjQoe2NvbnRyb2xsZWQ6ZSxkZWZhdWx0Om4sbmFtZTp0LHN0YXRlOnI9XCJ2YWx1ZVwifSl7bGV0e2N1cnJlbnQ6b309Qy51c2VSZWYodm9pZCAwIT09ZSksW2EsaV09Qy51c2VTdGF0ZShuKSxsPUMudXNlQ2FsbGJhY2soZT0+e298fGkoZSl9LFtdKTtyZXR1cm5bbz9lOmEsbF19ZnVuY3Rpb24gbjUoZSl7bGV0e2VuYWJsZWQ6bj0hMCxvcGVuOnQscmVmOnIsb25Db21wbGV0ZTpvfT1lLGE9ZUEodCksaT1UKG8pLGw9ZnVuY3Rpb24oZSxuPSExKXtsZXQgdD1ucygpLHI9ZWsoKTtyZXR1cm4gVCgobyxhPW51bGwpPT57dC5jYW5jZWwoKSxyLmNsZWFyKCk7bGV0IGk9ZS5jdXJyZW50O2kmJihcImZ1bmN0aW9uXCIhPXR5cGVvZiBpLmdldEFuaW1hdGlvbnN8fGdsb2JhbFRoaXMuQkFTRV9VSV9BTklNQVRJT05TX0RJU0FCTEVEP28oKTp0LnJlcXVlc3QoKCk9PntmdW5jdGlvbiBlKCl7aSYmUHJvbWlzZS5hbGxTZXR0bGVkKGkuZ2V0QW5pbWF0aW9ucygpLm1hcChlPT5lLmZpbmlzaGVkKSkudGhlbigoKT0+e251bGwhPWEmJmEuYWJvcnRlZHx8RS5mbHVzaFN5bmMobyl9KX1uP3Iuc3RhcnQoMCxlKTplKCl9KSl9KX0ocix0KTtDLnVzZUVmZmVjdCgoKT0+e24mJmwoKCk9Pnt0PT09YS5jdXJyZW50JiZpKCl9KX0sW24sdCxpLGwsYV0pfWxldCBuMz1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBuNihlPSEwKXtsZXQgbj1DLnVzZUNvbnRleHQobjMpO2lmKHZvaWQgMD09PW4mJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogRGlyZWN0aW9uQ29udGV4dCBpcyBtaXNzaW5nLlwiKTtyZXR1cm4gbj8uZGlyZWN0aW9uPz9cImx0clwifWxldCBuOT0oKT0+e30sbjg9e30sbjc9e30sdGU9XCJcIjtjbGFzcyB0bntsb2NrQ291bnQ9MDtyZXN0b3JlPW51bGw7dGltZW91dExvY2s9ZWouY3JlYXRlKCk7dGltZW91dFVubG9jaz1lai5jcmVhdGUoKTthY3F1aXJlKGUpe3JldHVybiB0aGlzLmxvY2tDb3VudCs9MSwxPT09dGhpcy5sb2NrQ291bnQmJm51bGw9PT10aGlzLnJlc3RvcmUmJnRoaXMudGltZW91dExvY2suc3RhcnQoMCwoKT0+dGhpcy5sb2NrKGUpKSx0aGlzLnJlbGVhc2V9cmVsZWFzZT0oKT0+e3RoaXMubG9ja0NvdW50LT0xLDA9PT10aGlzLmxvY2tDb3VudCYmdGhpcy5yZXN0b3JlJiZ0aGlzLnRpbWVvdXRVbmxvY2suc3RhcnQoMCx0aGlzLnVubG9jayl9O3VubG9jaz0oKT0+ezA9PT10aGlzLmxvY2tDb3VudCYmdGhpcy5yZXN0b3JlJiYodGhpcy5yZXN0b3JlPy4oKSx0aGlzLnJlc3RvcmU9bnVsbCl9O2xvY2soZSl7aWYoMD09PXRoaXMubG9ja0NvdW50fHxudWxsIT09dGhpcy5yZXN0b3JlKXJldHVybjtsZXQgbj1lUShlKS5kb2N1bWVudEVsZW1lbnQsdD1RKG4pLmdldENvbXB1dGVkU3R5bGUobikub3ZlcmZsb3dZO2lmKFwiaGlkZGVuXCI9PT10fHxcImNsaXBcIj09PXQpe3RoaXMucmVzdG9yZT1uOTtyZXR1cm59bGV0IHI9ZXp8fCFmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZG9jdW1lbnQpcmV0dXJuITE7bGV0IG49ZVEoZSk7cmV0dXJuIFEobikuaW5uZXJXaWR0aC1uLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aD4wfShlKTt0aGlzLnJlc3RvcmU9cj9mdW5jdGlvbihlKXtsZXQgbj1lUShlKS5kb2N1bWVudEVsZW1lbnQsdD1uLnN0eWxlLm92ZXJmbG93O3JldHVybiBuLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIsKCk9PntuLnN0eWxlLm92ZXJmbG93PXR9fShlKTpmdW5jdGlvbihlKXtsZXQgbj1lUShlKSx0PW4uZG9jdW1lbnRFbGVtZW50LHI9bi5ib2R5LG89USh0KSxhPTAsaT0wLGw9bmwuY3JlYXRlKCk7aWYoZVAmJihvLnZpc3VhbFZpZXdwb3J0Py5zY2FsZT8/MSkhPT0xKXJldHVybigpPT57fTtmdW5jdGlvbiBzKCl7bGV0IGU9by5nZXRDb21wdXRlZFN0eWxlKHQpLG49by5nZXRDb21wdXRlZFN0eWxlKHIpO2E9dC5zY3JvbGxUb3AsaT10LnNjcm9sbExlZnQsbjg9e3Njcm9sbGJhckd1dHRlcjp0LnN0eWxlLnNjcm9sbGJhckd1dHRlcixvdmVyZmxvd1k6dC5zdHlsZS5vdmVyZmxvd1ksb3ZlcmZsb3dYOnQuc3R5bGUub3ZlcmZsb3dYfSx0ZT10LnN0eWxlLnNjcm9sbEJlaGF2aW9yLG43PXtwb3NpdGlvbjpyLnN0eWxlLnBvc2l0aW9uLGhlaWdodDpyLnN0eWxlLmhlaWdodCx3aWR0aDpyLnN0eWxlLndpZHRoLGJveFNpemluZzpyLnN0eWxlLmJveFNpemluZyxvdmVyZmxvd1k6ci5zdHlsZS5vdmVyZmxvd1ksb3ZlcmZsb3dYOnIuc3R5bGUub3ZlcmZsb3dYLHNjcm9sbEJlaGF2aW9yOnIuc3R5bGUuc2Nyb2xsQmVoYXZpb3J9O2xldCBsPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBDU1MmJkNTUy5zdXBwb3J0cz8uKFwic2Nyb2xsYmFyLWd1dHRlclwiLFwic3RhYmxlXCIpLHM9dC5zY3JvbGxIZWlnaHQ+dC5jbGllbnRIZWlnaHQsYz10LnNjcm9sbFdpZHRoPnQuY2xpZW50V2lkdGgsdT1cInNjcm9sbFwiPT09ZS5vdmVyZmxvd1l8fFwic2Nyb2xsXCI9PT1uLm92ZXJmbG93WSxkPVwic2Nyb2xsXCI9PT1lLm92ZXJmbG93WHx8XCJzY3JvbGxcIj09PW4ub3ZlcmZsb3dYLGY9TWF0aC5tYXgoMCxvLmlubmVyV2lkdGgtdC5jbGllbnRXaWR0aCkscD1NYXRoLm1heCgwLG8uaW5uZXJIZWlnaHQtdC5jbGllbnRIZWlnaHQpLGg9cGFyc2VGbG9hdChuLm1hcmdpblRvcCkrcGFyc2VGbG9hdChuLm1hcmdpbkJvdHRvbSksZz1wYXJzZUZsb2F0KG4ubWFyZ2luTGVmdCkrcGFyc2VGbG9hdChuLm1hcmdpblJpZ2h0KTtPYmplY3QuYXNzaWduKHQuc3R5bGUse3Njcm9sbGJhckd1dHRlcjpcInN0YWJsZVwiLG92ZXJmbG93WTohbCYmKHN8fHUpP1wic2Nyb2xsXCI6XCJoaWRkZW5cIixvdmVyZmxvd1g6IWwmJihjfHxkKT9cInNjcm9sbFwiOlwiaGlkZGVuXCJ9KSxPYmplY3QuYXNzaWduKHIuc3R5bGUse3Bvc2l0aW9uOlwicmVsYXRpdmVcIixoZWlnaHQ6aHx8cD9gY2FsYygxMDBkdmggLSAke2grcH1weClgOlwiMTAwZHZoXCIsd2lkdGg6Z3x8Zj9gY2FsYygxMDB2dyAtICR7ZytmfXB4KWA6XCIxMDB2d1wiLGJveFNpemluZzpcImJvcmRlci1ib3hcIixvdmVyZmxvdzpcImhpZGRlblwiLHNjcm9sbEJlaGF2aW9yOlwidW5zZXRcIn0pLHIuc2Nyb2xsVG9wPWEsci5zY3JvbGxMZWZ0PWksdC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWJhc2UtdWktc2Nyb2xsLWxvY2tlZFwiLFwiXCIpLHQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9XCJ1bnNldFwifWZ1bmN0aW9uIGMoKXtPYmplY3QuYXNzaWduKHQuc3R5bGUsbjgpLE9iamVjdC5hc3NpZ24oci5zdHlsZSxuNyksdC5zY3JvbGxUb3A9YSx0LnNjcm9sbExlZnQ9aSx0LnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtYmFzZS11aS1zY3JvbGwtbG9ja2VkXCIpLHQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9dGV9ZnVuY3Rpb24gdSgpe2MoKSxsLnJlcXVlc3Qocyl9cmV0dXJuIHMoKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix1KSwoKT0+e2wuY2FuY2VsKCksYygpLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHUpfX0oZSl9fWxldCB0dD1uZXcgdG47ZnVuY3Rpb24gdHIoZSl7aWYoZSlyZXR1cm4oe1wiZm9jdXMtb3V0XCI6XCJmb2N1cy1vdXRcIixcImVzY2FwZS1rZXlcIjpcImVzY2FwZS1rZXlcIixcIm91dHNpZGUtcHJlc3NcIjpcIm91dHNpZGUtcHJlc3NcIixcImxpc3QtbmF2aWdhdGlvblwiOlwibGlzdC1uYXZpZ2F0aW9uXCIsY2xpY2s6XCJ0cmlnZ2VyLXByZXNzXCIsaG92ZXI6XCJ0cmlnZ2VyLWhvdmVyXCIsZm9jdXM6XCJ0cmlnZ2VyLWZvY3VzXCIsXCJyZWZlcmVuY2UtcHJlc3NcIjpcInRyaWdnZXItcHJlc3NcIixcInNhZmUtcG9seWdvblwiOlwidHJpZ2dlci1ob3ZlclwiLFwiYW5jZXN0b3Itc2Nyb2xsXCI6dm9pZCAwfSlbZV19bGV0IHRvPUMuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIHRhKGU9ITApe2xldCBuPUMudXNlQ29udGV4dCh0byk7aWYodm9pZCAwPT09biYmIWUpdGhyb3cgRXJyb3IoXCJCYXNlIFVJOiBDb250ZXh0TWVudVJvb3RDb250ZXh0IGlzIG1pc3NpbmcuIENvbnRleHRNZW51IHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8Q29udGV4dE1lbnUuUm9vdD4uXCIpO3JldHVybiBufWxldCB0aT1DLmNyZWF0ZUNvbnRleHQoITEpO2Z1bmN0aW9uIHRsKGUsbil7cmV0dXJuIGUmJiFuP2U6IWUmJm4/bjplfHxuP3suLi5lLC4uLm59OnZvaWQgMH1sZXQgdHM9e307ZnVuY3Rpb24gdGMoZSxuLHQscixvKXtsZXQgYT17Li4udGYoZSx0cyl9O3JldHVybiBuJiYoYT10dShhLG4pKSx0JiYoYT10dShhLHQpKSxyJiYoYT10dShhLHIpKSxvJiYoYT10dShhLG8pKSxhfWZ1bmN0aW9uIHR1KGUsbil7cmV0dXJuIHRkKG4pP24oZSk6ZnVuY3Rpb24oZSxuKXtpZighbilyZXR1cm4gZTtmb3IobGV0IHQgaW4gbil7bGV0IHI9blt0XTtzd2l0Y2godCl7Y2FzZVwic3R5bGVcIjplW3RdPXRsKGUuc3R5bGUscik7YnJlYWs7Y2FzZVwiY2xhc3NOYW1lXCI6ZVt0XT10aChlLmNsYXNzTmFtZSxyKTticmVhaztkZWZhdWx0OiFmdW5jdGlvbihlLG4pe2xldCB0PWUuY2hhckNvZGVBdCgwKSxyPWUuY2hhckNvZGVBdCgxKSxvPWUuY2hhckNvZGVBdCgyKTtyZXR1cm4gMTExPT09dCYmMTEwPT09ciYmbz49NjUmJm88PTkwJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbnx8dm9pZCAwPT09bil9KHQscik/ZVt0XT1yOmVbdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj9lP3Q9Pnt2YXIgcjtpZihudWxsIT0ocj10KSYmXCJvYmplY3RcIj09dHlwZW9mIHImJlwibmF0aXZlRXZlbnRcImluIHIpe3RwKHQpO2xldCByPW4odCk7cmV0dXJuIHQuYmFzZVVJSGFuZGxlclByZXZlbnRlZHx8ZT8uKHQpLHJ9bGV0IG89bih0KTtyZXR1cm4gZT8uKHQpLG99Om46ZX0oZVt0XSxyKX19cmV0dXJuIGV9KGUsbil9ZnVuY3Rpb24gdGQoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX1mdW5jdGlvbiB0ZihlLG4pe3JldHVybiB0ZChlKT9lKG4pOmU/P3RzfWZ1bmN0aW9uIHRwKGUpe3JldHVybiBlLnByZXZlbnRCYXNlVUlIYW5kbGVyPSgpPT57ZS5iYXNlVUlIYW5kbGVyUHJldmVudGVkPSEwfSxlfWZ1bmN0aW9uIHRoKGUsbil7cmV0dXJuIG4/ZT9uK1wiIFwiK2U6bjplfWxldCB0Zz1bXSx0bT17Y3VycmVudDohMX0sdHY9ZnVuY3Rpb24oZSl7bGV0IG4sdCx7Y2hpbGRyZW46cixvcGVuOm8sb25PcGVuQ2hhbmdlOmEsb25PcGVuQ2hhbmdlQ29tcGxldGU6aSxkZWZhdWx0T3BlbjpzPSExLGRpc2FibGVkOmM9ITEsbW9kYWw6dSxsb29wOmQ9ITAsb3JpZW50YXRpb246Zj1cInZlcnRpY2FsXCIsYWN0aW9uc1JlZjpwLG9wZW5PbkhvdmVyOmgsZGVsYXk6Zz0xMDAsY2xvc2VEZWxheTptPTAsY2xvc2VQYXJlbnRPbkVzYzp2PSEwfT1lLFtiLHldPUMudXNlU3RhdGUobnVsbCksW3gsd109Qy51c2VTdGF0ZShudWxsKSxbaixrXT1DLnVzZVN0YXRlKCksW0EsT109Qy51c2VTdGF0ZSghMCksW1MsX109Qy51c2VTdGF0ZShudWxsKSxbUCx6XT1DLnVzZVN0YXRlKG51bGwpLFtMLFJdPUMudXNlU3RhdGUoITApLFtOLERdPUMudXNlU3RhdGUoITEpLEI9Qy51c2VSZWYobnVsbCksTT1DLnVzZVJlZihudWxsKSxJPUMudXNlUmVmKG51bGwpLFU9ZWsoKSxWPXRhKCEwKSwkPUMudXNlQ29udGV4dCh0aSk7e2xldCBlPW4wKCEwKSx0PWZ1bmN0aW9uKGUpe2xldCBuPUMudXNlQ29udGV4dChuMSk7aWYobnVsbD09PW4mJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogTWVudWJhckNvbnRleHQgaXMgbWlzc2luZy4gTWVudWJhciBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPE1lbnViYXI+LlwiKTtyZXR1cm4gbn0oITApO249JCYmZT97dHlwZTpcIm1lbnVcIixjb250ZXh0OmV9OnQ/e3R5cGU6XCJtZW51YmFyXCIsY29udGV4dDp0fTpWP3t0eXBlOlwiY29udGV4dC1tZW51XCIsY29udGV4dDpWfTp7dHlwZTp2b2lkIDB9fWxldCBYPUgoKTt2b2lkIDAhPT1uLnR5cGUmJihYPW4uY29udGV4dC5yb290SWQpO2xldCBLPSh2b2lkIDA9PT1uLnR5cGV8fFwiY29udGV4dC1tZW51XCI9PT1uLnR5cGUpJiYodT8/ITApLFE9XCJtZW51XCI9PT1uLnR5cGU/bi5jb250ZXh0LmFsbG93TW91c2VFbnRlcjpOLEc9XCJtZW51XCI9PT1uLnR5cGU/bi5jb250ZXh0LnNldEFsbG93TW91c2VFbnRlcjpELEo9aD8/KFwibWVudVwiPT09bi50eXBlfHxcIm1lbnViYXJcIj09PW4udHlwZSYmbi5jb250ZXh0Lmhhc1N1Ym1lbnVPcGVuKSxbZWUsZXRdPW40KHtjb250cm9sbGVkOm8sZGVmYXVsdDpzLG5hbWU6XCJNZW51Um9vdFwiLHN0YXRlOlwib3BlblwifSksZXI9Qy51c2VSZWYoXCJjb250ZXh0LW1lbnVcIiE9PW4udHlwZSksZW89ZWsoKTtDLnVzZUVmZmVjdCgoKT0+e2lmKGVlfHwoQi5jdXJyZW50PW51bGwpLFwiY29udGV4dC1tZW51XCI9PT1uLnR5cGUpe2lmKCFlZSl7ZW8uY2xlYXIoKSxlci5jdXJyZW50PSExO3JldHVybn1lby5zdGFydCg1MDAsKCk9Pntlci5jdXJyZW50PSEwfSl9fSxbZW8sZWUsbi50eXBlXSk7bGV0IGVhPUMudXNlQ2FsbGJhY2soZT0+e0kuY3VycmVudD1lLHcoZSl9LFtdKSx7bW91bnRlZDplaSxzZXRNb3VudGVkOmVsLHRyYW5zaXRpb25TdGF0dXM6ZXN9PW4yKGVlKSx7ZW5hYmxlZDplYz0hMCxtb3VudGVkOmV1LG9wZW46ZWQscmVmZXJlbmNlRWxlbWVudDplZj1udWxsfT17ZW5hYmxlZDplZSYmSyYmXCJ0cmlnZ2VyLWhvdmVyXCIhPT1QLG1vdW50ZWQ6ZWksb3BlbjplZSxyZWZlcmVuY2VFbGVtZW50Onh9O0YoKCk9PntpZihlUCYmZXUmJiFlZCl7bGV0IGU9ZVEoZWYpLG49ZS5ib2R5LnN0eWxlLnVzZXJTZWxlY3QsdD1lLmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZS5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9XCJub25lXCIsZS5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9XCJub25lXCIsKCk9PntlLmJvZHkuc3R5bGUudXNlclNlbGVjdD1uLGUuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PXR9fX0sW2V1LGVkLGVmXSksRigoKT0+e2lmKGVjKXJldHVybiB0dC5hY3F1aXJlKGVmKX0sW2VjLGVmXSksZWV8fEF8fE8oITApO2xldCBlcD1UKCgpPT57ZWwoITEpLFIoITApLEcoITEpLGk/LighMSl9KTtuNSh7ZW5hYmxlZDohcCxvcGVuOmVlLHJlZjpNLG9uQ29tcGxldGUoKXtlZXx8ZXAoKX19KTtsZXQgZWg9Qy51c2VSZWYoITApLGVnPWVrKCksZW09VCgoZSx0LHIpPT57aWYoZWU9PT1lfHwhMT09PWUmJnQ/LnR5cGU9PT1cImNsaWNrXCImJlwidG91Y2hcIj09PXQucG9pbnRlclR5cGUmJiFlaC5jdXJyZW50KXJldHVybjtlJiZcInRyaWdnZXItZm9jdXNcIj09PXI/KGVoLmN1cnJlbnQ9ITEsZWcuc3RhcnQoMzAwLCgpPT57ZWguY3VycmVudD0hMH0pKTooZWguY3VycmVudD0hMCxlZy5jbGVhcigpKTtsZXQgbz0oXCJ0cmlnZ2VyLXByZXNzXCI9PT1yfHxcIml0ZW0tcHJlc3NcIj09PXIpJiYwPT09dC5kZXRhaWwmJnQ/LmlzVHJ1c3RlZCxpPSFlJiYoXCJlc2NhcGUta2V5XCI9PT1yfHxudWxsPT1yKTtmdW5jdGlvbiBsKCl7YT8uKGUsdCxyKSxldChlKSx6KHI/P251bGwpLEIuY3VycmVudD10Pz9udWxsfVwidHJpZ2dlci1ob3ZlclwiPT09cj8oUighMCksVS5zdGFydCg1MDAsKCk9PntSKCExKX0pLEUuZmx1c2hTeW5jKGwpKTpsKCksXCJtZW51YmFyXCI9PT1uLnR5cGUmJihcInRyaWdnZXItZm9jdXNcIj09PXJ8fFwiZm9jdXMtb3V0XCI9PT1yfHxcInRyaWdnZXItaG92ZXJcIj09PXJ8fFwibGlzdC1uYXZpZ2F0aW9uXCI9PT1yfHxcInNpYmxpbmctb3BlblwiPT09cik/ayhcImdyb3VwXCIpOm98fGk/ayhvP1wiY2xpY2tcIjpcImRpc21pc3NcIik6ayh2b2lkIDApfSk7Qy51c2VJbXBlcmF0aXZlSGFuZGxlKHAsKCk9Pih7dW5tb3VudDplcH0pLFtlcF0pLFwiY29udGV4dC1tZW51XCI9PT1uLnR5cGUmJih0PW4uY29udGV4dCksQy51c2VJbXBlcmF0aXZlSGFuZGxlKHQ/LnBvc2l0aW9uZXJSZWYsKCk9PngsW3hdKSxDLnVzZUltcGVyYXRpdmVIYW5kbGUodD8uYWN0aW9uc1JlZiwoKT0+KHtzZXRPcGVuOmVtfSksW2VtXSksQy51c2VFZmZlY3QoKCk9PntlZXx8VS5jbGVhcigpfSxbVSxlZV0pO2xldCBldj1ZKHtlbGVtZW50czp7cmVmZXJlbmNlOmIsZmxvYXRpbmc6eH0sb3BlbjplZSxvbk9wZW5DaGFuZ2UoZSxuLHQpe2VtKGUsbix0cih0KSl9fSksZWI9ZTMoZXYse2VuYWJsZWQ6QSYmSiYmIWMmJlwiY29udGV4dC1tZW51XCIhPT1uLnR5cGUmJihcIm1lbnViYXJcIiE9PW4udHlwZXx8bi5jb250ZXh0Lmhhc1N1Ym1lbnVPcGVuJiYhZWUpLGhhbmRsZUNsb3NlOmU3KHtibG9ja1BvaW50ZXJFdmVudHM6ITB9KSxtb3VzZU9ubHk6ITAsbW92ZTpcIm1lbnVcIj09PW4udHlwZSxyZXN0TXM6dm9pZCAwPT09bi50eXBlfHxcIm1lbnVcIj09PW4udHlwZSYmUT9nOnZvaWQgMCxkZWxheTpcIm1lbnVcIj09PW4udHlwZT97b3BlbjpRP2c6MWUxMCxjbG9zZTptfTp7Y2xvc2U6bX19KSxleT1ubihldix7ZW5hYmxlZDohYyYmIWVlJiZcIm1lbnViYXJcIj09PW4udHlwZSYmbi5jb250ZXh0Lmhhc1N1Ym1lbnVPcGVuJiYhVn0pLGV4PWZ1bmN0aW9uKGUsbj17fSl7bGV0e29wZW46dCxvbk9wZW5DaGFuZ2U6cixkYXRhUmVmOm99PWUse2VuYWJsZWQ6YT0hMCxldmVudDppPVwiY2xpY2tcIix0b2dnbGU6bD0hMCxpZ25vcmVNb3VzZTpzPSExLHN0aWNrSWZPcGVuOmM9ITB9PW4sdT1DLnVzZVJlZih2b2lkIDApLGQ9bnMoKSxmPUMudXNlTWVtbygoKT0+KHtvblBvaW50ZXJEb3duKGUpe3UuY3VycmVudD1lLnBvaW50ZXJUeXBlfSxvbk1vdXNlRG93bihlKXtsZXQgbj11LmN1cnJlbnQsYT1lLm5hdGl2ZUV2ZW50O2lmKDAhPT1lLmJ1dHRvbnx8XCJjbGlja1wiPT09aXx8ZUkobiwhMCkmJnMpcmV0dXJuO2xldCBmPW8uY3VycmVudC5vcGVuRXZlbnQscD1mPy50eXBlLGg9ISh0JiZsJiYoIWZ8fCFjfHxcImNsaWNrXCI9PT1wfHxcIm1vdXNlZG93blwiPT09cCkpO2QucmVxdWVzdCgoKT0+e3IoaCxhLFwiY2xpY2tcIil9KX0sb25DbGljayhlKXtsZXQgbj11LmN1cnJlbnQ7aWYoXCJtb3VzZWRvd25cIj09PWkmJm4pe3UuY3VycmVudD12b2lkIDA7cmV0dXJufWlmKGVJKG4sITApJiZzKXJldHVybjtsZXQgYT1vLmN1cnJlbnQub3BlbkV2ZW50LGQ9YT8udHlwZTtyKCEodCYmbCYmKCFhfHwhY3x8XCJjbGlja1wiPT09ZHx8XCJtb3VzZWRvd25cIj09PWR8fFwia2V5ZG93blwiPT09ZHx8XCJrZXl1cFwiPT09ZCkpLGUubmF0aXZlRXZlbnQsXCJjbGlja1wiKX0sb25LZXlEb3duKCl7dS5jdXJyZW50PXZvaWQgMH19KSxbbyxpLHMscix0LGMsbCxkXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+YT97cmVmZXJlbmNlOmZ9Om5yLFthLGZdKX0oZXYse2VuYWJsZWQ6IWMmJlwiY29udGV4dC1tZW51XCIhPT1uLnR5cGUsZXZlbnQ6ZWUmJlwibWVudWJhclwiPT09bi50eXBlP1wiY2xpY2tcIjpcIm1vdXNlZG93blwiLHRvZ2dsZTohSnx8XCJtZW51XCIhPT1uLnR5cGUsaWdub3JlTW91c2U6SiYmXCJtZW51XCI9PT1uLnR5cGUsc3RpY2tJZk9wZW46dm9pZCAwPT09bi50eXBlJiZMfSksZXc9bmYoZXYse2VuYWJsZWQ6IWMsYnViYmxlczp2JiZcIm1lbnVcIj09PW4udHlwZSxvdXRzaWRlUHJlc3NFdmVudDpcIm1vdXNlZG93blwiLG91dHNpZGVQcmVzczooKT0+XCJjb250ZXh0LW1lbnVcIiE9PW4udHlwZXx8Qi5jdXJyZW50Py50eXBlPT09XCJjb250ZXh0bWVudVwifHxlci5jdXJyZW50fSksZWo9ZnVuY3Rpb24oZSxuPXt9KXtsZXR7b3Blbjp0LGVsZW1lbnRzOnIsZmxvYXRpbmdJZDpvfT1lLHtlbmFibGVkOmE9ITAscm9sZTppPVwiZGlhbG9nXCJ9PW4sbD1IKCkscz1yLmRvbVJlZmVyZW5jZT8uaWR8fGwsYz1DLnVzZU1lbW8oKCk9PmUwKHIuZmxvYXRpbmcpPy5pZHx8byxbci5mbG9hdGluZyxvXSksdT1ucC5nZXQoaSk/P2ksZD1udWxsIT1xKCksZj1DLnVzZU1lbW8oKCk9PlwidG9vbHRpcFwiPT09dXx8XCJsYWJlbFwiPT09aT97W2BhcmlhLSR7XCJsYWJlbFwiPT09aT9cImxhYmVsbGVkYnlcIjpcImRlc2NyaWJlZGJ5XCJ9YF06dD9jOnZvaWQgMH06e1wiYXJpYS1leHBhbmRlZFwiOnQ/XCJ0cnVlXCI6XCJmYWxzZVwiLFwiYXJpYS1oYXNwb3B1cFwiOlwiYWxlcnRkaWFsb2dcIj09PXU/XCJkaWFsb2dcIjp1LFwiYXJpYS1jb250cm9sc1wiOnQ/Yzp2b2lkIDAsLi4uXCJsaXN0Ym94XCI9PT11JiZ7cm9sZTpcImNvbWJvYm94XCJ9LC4uLlwibWVudVwiPT09dSYme2lkOnN9LC4uLlwibWVudVwiPT09dSYmZCYme3JvbGU6XCJtZW51aXRlbVwifSwuLi5cInNlbGVjdFwiPT09aSYme1wiYXJpYS1hdXRvY29tcGxldGVcIjpcIm5vbmVcIn0sLi4uXCJjb21ib2JveFwiPT09aSYme1wiYXJpYS1hdXRvY29tcGxldGVcIjpcImxpc3RcIn19LFt1LGMsZCx0LHMsaV0pLHA9Qy51c2VNZW1vKCgpPT57bGV0IGU9e2lkOmMsLi4udSYme3JvbGU6dX19O3JldHVyblwidG9vbHRpcFwiPT09dXx8XCJsYWJlbFwiPT09aT9lOnsuLi5lLC4uLlwibWVudVwiPT09dSYme1wiYXJpYS1sYWJlbGxlZGJ5XCI6c319fSxbdSxjLHMsaV0pLGg9Qy51c2VDYWxsYmFjaygoe2FjdGl2ZTplLHNlbGVjdGVkOm59KT0+e2xldCB0PXtyb2xlOlwib3B0aW9uXCIsLi4uZSYme2lkOmAke2N9LWZ1aS1vcHRpb25gfX07c3dpdGNoKGkpe2Nhc2VcInNlbGVjdFwiOnJldHVybnsuLi50LFwiYXJpYS1zZWxlY3RlZFwiOmUmJm59O2Nhc2VcImNvbWJvYm94XCI6cmV0dXJuey4uLnQsXCJhcmlhLXNlbGVjdGVkXCI6bn19cmV0dXJue319LFtjLGldKTtyZXR1cm4gQy51c2VNZW1vKCgpPT5hP3tyZWZlcmVuY2U6ZixmbG9hdGluZzpwLGl0ZW06aH06e30sW2EsZixwLGhdKX0oZXYse3JvbGU6XCJtZW51XCJ9KSxlTz1DLnVzZVJlZihbXSksZUM9Qy51c2VSZWYoW10pLGVTPW42KCksZUU9ZnVuY3Rpb24oZSxuKXtsZXR7b3Blbjp0LG9uT3BlbkNoYW5nZTpyLGVsZW1lbnRzOm8sZmxvYXRpbmdJZDphfT1lLHtsaXN0UmVmOmksYWN0aXZlSW5kZXg6bCxvbk5hdmlnYXRlOnM9KCk9Pnt9LGVuYWJsZWQ6Yz0hMCxzZWxlY3RlZEluZGV4OnU9bnVsbCxhbGxvd0VzY2FwZTpkPSExLGxvb3A6Zj0hMSxuZXN0ZWQ6cD0hMSxydGw6aD0hMSx2aXJ0dWFsOmc9ITEsZm9jdXNJdGVtT25PcGVuOm09XCJhdXRvXCIsZm9jdXNJdGVtT25Ib3Zlcjp2PSEwLG9wZW5PbkFycm93S2V5RG93bjpiPSEwLGRpc2FibGVkSW5kaWNlczp5LG9yaWVudGF0aW9uOng9XCJ2ZXJ0aWNhbFwiLHBhcmVudE9yaWVudGF0aW9uOncsY29sczpqPTEsc2Nyb2xsSXRlbUludG9WaWV3Oms9ITAsdmlydHVhbEl0ZW1SZWY6QSxpdGVtU2l6ZXM6TyxkZW5zZTpTPSExfT1uLEU9ZUEoZTAoby5mbG9hdGluZykpLF89cSgpLFA9VygpO0YoKCk9PntlLmRhdGFSZWYuY3VycmVudC5vcmllbnRhdGlvbj14fSxbZSx4XSk7bGV0IHo9ZUooby5kb21SZWZlcmVuY2UpLEw9Qy51c2VSZWYobSksUj1DLnVzZVJlZih1Pz8tMSksTj1DLnVzZVJlZihudWxsKSxEPUMudXNlUmVmKCEwKSxCPVQoKCk9PntzKC0xPT09Ui5jdXJyZW50P251bGw6Ui5jdXJyZW50KX0pLE09Qy51c2VSZWYoQiksST1DLnVzZVJlZighIW8uZmxvYXRpbmcpLEg9Qy51c2VSZWYodCksVT1DLnVzZVJlZighMSksVj1DLnVzZVJlZighMSksJD1lQSh5KSxaPWVBKHQpLFk9ZUEoayksWD1lQSh1KSxbSyxRXT1DLnVzZVN0YXRlKCksW0csSl09Qy51c2VTdGF0ZSgpLGVlPVQoKCk9PntmdW5jdGlvbiBlKGUpe2c/KGUuaWQ/LmVuZHNXaXRoKFwiLWZ1aS1vcHRpb25cIikmJihlLmlkPWAke2F9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMiwxMCl9YCksUShlLmlkKSxQPy5ldmVudHMuZW1pdChcInZpcnR1YWxmb2N1c1wiLGUpLEEmJihBLmN1cnJlbnQ9ZSkpOm5xKGUse3N5bmM6VS5jdXJyZW50LHByZXZlbnRTY3JvbGw6ITB9KX1sZXQgbj1pLmN1cnJlbnRbUi5jdXJyZW50XSx0PVYuY3VycmVudDtuJiZlKG4pLChVLmN1cnJlbnQ/ZT0+ZSgpOnJlcXVlc3RBbmltYXRpb25GcmFtZSkoKCk9PntsZXQgcj1pLmN1cnJlbnRbUi5jdXJyZW50XXx8bjtpZighcilyZXR1cm47bnx8ZShyKTtsZXQgbz1ZLmN1cnJlbnQ7byYmZXImJih0fHwhRC5jdXJyZW50KSYmci5zY3JvbGxJbnRvVmlldz8uKFwiYm9vbGVhblwiPT10eXBlb2Ygbz97YmxvY2s6XCJuZWFyZXN0XCIsaW5saW5lOlwibmVhcmVzdFwifTpvKX0pfSk7RigoKT0+e2MmJih0JiZvLmZsb2F0aW5nP0wuY3VycmVudCYmbnVsbCE9dSYmKFYuY3VycmVudD0hMCxSLmN1cnJlbnQ9dSxCKCkpOkkuY3VycmVudCYmKFIuY3VycmVudD0tMSxNLmN1cnJlbnQoKSkpfSxbYyx0LG8uZmxvYXRpbmcsdSxCXSksRigoKT0+e2lmKGMmJnQmJm8uZmxvYXRpbmcpaWYobnVsbD09bCl7aWYoVS5jdXJyZW50PSExLG51bGwhPVguY3VycmVudClyZXR1cm47aWYoSS5jdXJyZW50JiYoUi5jdXJyZW50PS0xLGVlKCkpLCghSC5jdXJyZW50fHwhSS5jdXJyZW50KSYmTC5jdXJyZW50JiYobnVsbCE9Ti5jdXJyZW50fHwhMD09PUwuY3VycmVudCYmbnVsbD09Ti5jdXJyZW50KSl7bGV0IGU9MCxuPSgpPT57bnVsbD09aS5jdXJyZW50WzBdPyhlPDImJihlP3JlcXVlc3RBbmltYXRpb25GcmFtZTpxdWV1ZU1pY3JvdGFzaykobiksZSs9MSk6KFIuY3VycmVudD1udWxsPT1OLmN1cnJlbnR8fG5aKE4uY3VycmVudCx4LGgpfHxwP25JKGksJC5jdXJyZW50KTpuSChpLCQuY3VycmVudCksTi5jdXJyZW50PW51bGwsQigpKX07bigpfX1lbHNlIG5NKGksbCl8fChSLmN1cnJlbnQ9bCxlZSgpLFYuY3VycmVudD0hMSl9LFtjLHQsby5mbG9hdGluZyxsLFgscCxpLHgsaCxCLGVlLCRdKSxGKCgpPT57aWYoIWN8fG8uZmxvYXRpbmd8fCFQfHxnfHwhSS5jdXJyZW50KXJldHVybjtsZXQgZT1QLm5vZGVzUmVmLmN1cnJlbnQsbj1lLmZpbmQoZT0+ZS5pZD09PV8pPy5jb250ZXh0Py5lbGVtZW50cy5mbG9hdGluZyx0PWVaKGVRKG8uZmxvYXRpbmcpKSxyPWUuc29tZShlPT5lLmNvbnRleHQmJmVZKGUuY29udGV4dC5lbGVtZW50cy5mbG9hdGluZyx0KSk7biYmIXImJkQuY3VycmVudCYmbi5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfSxbYyxvLmZsb2F0aW5nLFAsXyxnXSksRigoKT0+e2lmKGMmJlAmJmcmJiFfKXJldHVybiBQLmV2ZW50cy5vbihcInZpcnR1YWxmb2N1c1wiLGUpLCgpPT57UC5ldmVudHMub2ZmKFwidmlydHVhbGZvY3VzXCIsZSl9O2Z1bmN0aW9uIGUoZSl7SihlLmlkKSxBJiYoQS5jdXJyZW50PWUpfX0sW2MsUCxnLF8sQV0pLEYoKCk9PntNLmN1cnJlbnQ9QixILmN1cnJlbnQ9dCxJLmN1cnJlbnQ9ISFvLmZsb2F0aW5nfSksRigoKT0+e3R8fChOLmN1cnJlbnQ9bnVsbCxMLmN1cnJlbnQ9bSl9LFt0LG1dKTtsZXQgZXQ9bnVsbCE9bCxlcj1DLnVzZU1lbW8oKCk9PntmdW5jdGlvbiBlKGUpe2lmKCFaLmN1cnJlbnQpcmV0dXJuO2xldCBuPWkuY3VycmVudC5pbmRleE9mKGUpOy0xIT09biYmUi5jdXJyZW50IT09biYmKFIuY3VycmVudD1uLEIoKSl9cmV0dXJue29uRm9jdXMoe2N1cnJlbnRUYXJnZXQ6bn0pe1UuY3VycmVudD0hMCxlKG4pfSxvbkNsaWNrOih7Y3VycmVudFRhcmdldDplfSk9PmUuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxvbk1vdXNlTW92ZSh7Y3VycmVudFRhcmdldDpufSl7VS5jdXJyZW50PSEwLFYuY3VycmVudD0hMSx2JiZlKG4pfSxvblBvaW50ZXJMZWF2ZSh7cG9pbnRlclR5cGU6ZX0pe0QuY3VycmVudCYmXCJ0b3VjaFwiIT09ZSYmKFUuY3VycmVudD0hMCx2JiYoUi5jdXJyZW50PS0xLEIoKSxnfHxFLmN1cnJlbnQ/LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSkpKX19fSxbWixFLHYsaSxCLGddKSxlbz1DLnVzZUNhbGxiYWNrKCgpPT53Pz9QPy5ub2Rlc1JlZi5jdXJyZW50LmZpbmQoZT0+ZS5pZD09PV8pPy5jb250ZXh0Py5kYXRhUmVmPy5jdXJyZW50Lm9yaWVudGF0aW9uLFtfLFAsd10pLGVhPVQoZT0+e2lmKEQuY3VycmVudD0hMSxVLmN1cnJlbnQ9ITAsMjI5PT09ZS53aGljaHx8IVouY3VycmVudCYmZS5jdXJyZW50VGFyZ2V0PT09RS5jdXJyZW50KXJldHVybjtpZihwJiZuWChlLmtleSx4LGgsaikpe24kKGUua2V5LGVvKCkpfHxlRChlKSxyKCExLGUubmF0aXZlRXZlbnQsXCJsaXN0LW5hdmlnYXRpb25cIiksZW4oby5kb21SZWZlcmVuY2UpJiYoZz9QPy5ldmVudHMuZW1pdChcInZpcnR1YWxmb2N1c1wiLG8uZG9tUmVmZXJlbmNlKTpvLmRvbVJlZmVyZW5jZS5mb2N1cygpKTtyZXR1cm59bGV0IG49Ui5jdXJyZW50LGE9bkkoaSx5KSxsPW5IKGkseSk7aWYoenx8KFwiSG9tZVwiPT09ZS5rZXkmJihlRChlKSxSLmN1cnJlbnQ9YSxCKCkpLFwiRW5kXCI9PT1lLmtleSYmKGVEKGUpLFIuY3VycmVudD1sLEIoKSkpLGo+MSl7dmFyIHM7bGV0IG49T3x8QXJyYXkuZnJvbSh7bGVuZ3RoOmkuY3VycmVudC5sZW5ndGh9LCgpPT4oe3dpZHRoOjEsaGVpZ2h0OjF9KSksdD1mdW5jdGlvbihlLG4sdCl7bGV0IHI9W10sbz0wO3JldHVybiBlLmZvckVhY2goKHt3aWR0aDplLGhlaWdodDphfSxpKT0+e2xldCBsPSExO2Zvcih0JiYobz0wKTshbDspe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8ZTtyKz0xKWZvcihsZXQgZT0wO2U8YTtlKz0xKXQucHVzaChvK3IrZSpuKTtvJW4rZTw9biYmdC5ldmVyeShlPT5udWxsPT1yW2VdKT8odC5mb3JFYWNoKGU9PntyW2VdPWl9KSxsPSEwKTpvKz0xfX0pLFsuLi5yXX0obixqLFMpLHI9dC5maW5kSW5kZXgoZT0+bnVsbCE9ZSYmIW5VKGksZSx5KSksbz10LnJlZHVjZSgoZSxuLHQpPT5udWxsPT1ufHxuVShpLG4seSk/ZTp0LC0xKSxjPXRbZnVuY3Rpb24oZSx7ZXZlbnQ6bixvcmllbnRhdGlvbjp0LGxvb3A6cixydGw6byxjb2xzOmEsZGlzYWJsZWRJbmRpY2VzOmksbWluSW5kZXg6bCxtYXhJbmRleDpzLHByZXZJbmRleDpjLHN0b3BFdmVudDp1PSExfSl7bGV0IGQ9YztpZihuLmtleT09PWVXKXtpZih1JiZlRChuKSwtMT09PWMpZD1zO2Vsc2UgaWYoZD1uRihlLHtzdGFydGluZ0luZGV4OmQsYW1vdW50OmEsZGVjcmVtZW50OiEwLGRpc2FibGVkSW5kaWNlczppfSksciYmKGMtYTxsfHxkPDApKXtsZXQgZT1jJWEsbj1zJWEsdD1zLShuLWUpO2Q9bj09PWU/czpuPmU/dDp0LWF9bk0oZSxkKSYmKGQ9Yyl9aWYobi5rZXk9PT1lJCYmKHUmJmVEKG4pLC0xPT09Yz9kPWw6KGQ9bkYoZSx7c3RhcnRpbmdJbmRleDpjLGFtb3VudDphLGRpc2FibGVkSW5kaWNlczppfSksciYmYythPnMmJihkPW5GKGUse3N0YXJ0aW5nSW5kZXg6YyVhLWEsYW1vdW50OmEsZGlzYWJsZWRJbmRpY2VzOml9KSkpLG5NKGUsZCkmJihkPWMpKSxcImJvdGhcIj09PXQpe2xldCB0PW5iKGMvYSk7bi5rZXk9PT0obz9lVjplcSkmJih1JiZlRChuKSxjJWEhPWEtMT8oZD1uRihlLHtzdGFydGluZ0luZGV4OmMsZGlzYWJsZWRJbmRpY2VzOml9KSxyJiZuQihkLGEsdCkmJihkPW5GKGUse3N0YXJ0aW5nSW5kZXg6Yy1jJWEtMSxkaXNhYmxlZEluZGljZXM6aX0pKSk6ciYmKGQ9bkYoZSx7c3RhcnRpbmdJbmRleDpjLWMlYS0xLGRpc2FibGVkSW5kaWNlczppfSkpLG5CKGQsYSx0KSYmKGQ9YykpLG4ua2V5PT09KG8/ZXE6ZVYpJiYodSYmZUQobiksYyVhIT0wPyhkPW5GKGUse3N0YXJ0aW5nSW5kZXg6YyxkZWNyZW1lbnQ6ITAsZGlzYWJsZWRJbmRpY2VzOml9KSxyJiZuQihkLGEsdCkmJihkPW5GKGUse3N0YXJ0aW5nSW5kZXg6YysoYS1jJWEpLGRlY3JlbWVudDohMCxkaXNhYmxlZEluZGljZXM6aX0pKSk6ciYmKGQ9bkYoZSx7c3RhcnRpbmdJbmRleDpjKyhhLWMlYSksZGVjcmVtZW50OiEwLGRpc2FibGVkSW5kaWNlczppfSkpLG5CKGQsYSx0KSYmKGQ9YykpO2xldCBsPW5iKHMvYSk9PT10O25NKGUsZCkmJihkPXImJmw/bi5rZXk9PT0obz9lcTplVik/czpuRihlLHtzdGFydGluZ0luZGV4OmMtYyVhLTEsZGlzYWJsZWRJbmRpY2VzOml9KTpjKX1yZXR1cm4gZH0oe2N1cnJlbnQ6dC5tYXAoZT0+bnVsbCE9ZT9pLmN1cnJlbnRbZV06bnVsbCl9LHtldmVudDplLG9yaWVudGF0aW9uOngsbG9vcDpmLHJ0bDpoLGNvbHM6aixkaXNhYmxlZEluZGljZXM6KHM9Wy4uLihcImZ1bmN0aW9uXCIhPXR5cGVvZiB5P3k6bnVsbCl8fGkuY3VycmVudC5tYXAoKGUsbik9Pm5VKGksbix5KT9uOnZvaWQgMCksdm9pZCAwXSx0LmZsYXRNYXAoKGUsbik9PnMuaW5jbHVkZXMoZSk/W25dOltdKSksbWluSW5kZXg6cixtYXhJbmRleDpvLHByZXZJbmRleDpmdW5jdGlvbihlLG4sdCxyLG8pe2lmKC0xPT09ZSlyZXR1cm4gLTE7bGV0IGE9dC5pbmRleE9mKGUpLGk9bltlXTtzd2l0Y2gobyl7Y2FzZVwidGxcIjpyZXR1cm4gYTtjYXNlXCJ0clwiOmlmKCFpKXJldHVybiBhO3JldHVybiBhK2kud2lkdGgtMTtjYXNlXCJibFwiOmlmKCFpKXJldHVybiBhO3JldHVybiBhKyhpLmhlaWdodC0xKSpyO2Nhc2VcImJyXCI6cmV0dXJuIHQubGFzdEluZGV4T2YoZSk7ZGVmYXVsdDpyZXR1cm4gLTF9fShSLmN1cnJlbnQ+bD9hOlIuY3VycmVudCxuLHQsaixlLmtleT09PWUkP1wiYmxcIjplLmtleT09PShoP2VWOmVxKT9cInRyXCI6XCJ0bFwiKSxzdG9wRXZlbnQ6ITB9KV07aWYobnVsbCE9YyYmKFIuY3VycmVudD1jLEIoKSksXCJib3RoXCI9PT14KXJldHVybn1pZihuJChlLmtleSx4KSl7aWYoZUQoZSksdCYmIWcmJmVaKGUuY3VycmVudFRhcmdldC5vd25lckRvY3VtZW50KT09PWUuY3VycmVudFRhcmdldCl7Ui5jdXJyZW50PW5aKGUua2V5LHgsaCk/YTpsLEIoKTtyZXR1cm59blooZS5rZXkseCxoKT9mP1IuY3VycmVudD1uPj1sP2QmJm4hPT1pLmN1cnJlbnQubGVuZ3RoPy0xOmE6bkYoaSx7c3RhcnRpbmdJbmRleDpuLGRpc2FibGVkSW5kaWNlczp5fSk6Ui5jdXJyZW50PU1hdGgubWluKGwsbkYoaSx7c3RhcnRpbmdJbmRleDpuLGRpc2FibGVkSW5kaWNlczp5fSkpOmY/Ui5jdXJyZW50PW48PWE/ZCYmLTEhPT1uP2kuY3VycmVudC5sZW5ndGg6bDpuRihpLHtzdGFydGluZ0luZGV4Om4sZGVjcmVtZW50OiEwLGRpc2FibGVkSW5kaWNlczp5fSk6Ui5jdXJyZW50PU1hdGgubWF4KGEsbkYoaSx7c3RhcnRpbmdJbmRleDpuLGRlY3JlbWVudDohMCxkaXNhYmxlZEluZGljZXM6eX0pKSxuTShpLFIuY3VycmVudCkmJihSLmN1cnJlbnQ9LTEpLEIoKX19KSxlaT1DLnVzZU1lbW8oKCk9PmcmJnQmJmV0JiZ7XCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjpHfHxLfSxbZyx0LGV0LEcsS10pLGVsPUMudXNlTWVtbygoKT0+KHtcImFyaWEtb3JpZW50YXRpb25cIjpcImJvdGhcIj09PXg/dm9pZCAwOngsLi4uIXo/ZWk6e30sb25LZXlEb3duOmVhLG9uUG9pbnRlck1vdmUoKXtELmN1cnJlbnQ9ITB9fSksW2VpLGVhLHgsel0pLGVzPUMudXNlTWVtbygoKT0+e2Z1bmN0aW9uIGUoZSl7XCJhdXRvXCI9PT1tJiZlQihlLm5hdGl2ZUV2ZW50KSYmKEwuY3VycmVudD0hMCl9ZnVuY3Rpb24gbihlKXtMLmN1cnJlbnQ9bSxcImF1dG9cIj09PW0mJmVNKGUubmF0aXZlRXZlbnQpJiYoTC5jdXJyZW50PSEwKX1yZXR1cm57Li4uZWksb25LZXlEb3duKGUpe0QuY3VycmVudD0hMTtsZXQgbj1lLmtleS5zdGFydHNXaXRoKFwiQXJyb3dcIiksbz1bXCJIb21lXCIsXCJFbmRcIl0uaW5jbHVkZXMoZS5rZXkpLGE9blkoZS5rZXkseCxoKSxsPW5YKGUua2V5LHgsaCxqKSxzPW5ZKGUua2V5LGVvKCksaCksYz1uJChlLmtleSx4KSxkPShwP3M6Yyl8fFwiRW50ZXJcIj09PWUua2V5fHxcIlwiPT09ZS5rZXkudHJpbSgpO2lmKGcmJnQpe3ZhciBmLG07bGV0IHQscixzPVA/Lm5vZGVzUmVmLmN1cnJlbnQuZmluZChlPT5udWxsPT1lLnBhcmVudElkKSx1PVAmJnM/KGY9UC5ub2Rlc1JlZi5jdXJyZW50LG09cy5pZCxyPS0xLCFmdW5jdGlvbiBlKG4sbyl7bz5yJiYodD1uLHI9byksZTYoZixuKS5mb3JFYWNoKG49PntlKG4uaWQsbysxKX0pfShtLDApLGYuZmluZChlPT5lLmlkPT09dCkpOm51bGw7aWYoKG58fG8pJiZ1JiZBKXtsZXQgbj1uZXcgS2V5Ym9hcmRFdmVudChcImtleWRvd25cIix7a2V5OmUua2V5LGJ1YmJsZXM6ITB9KTtpZihhfHxsKXtsZXQgdD11LmNvbnRleHQ/LmVsZW1lbnRzLmRvbVJlZmVyZW5jZT09PWUuY3VycmVudFRhcmdldCxyPWwmJiF0P3UuY29udGV4dD8uZWxlbWVudHMuZG9tUmVmZXJlbmNlOmE/aS5jdXJyZW50LmZpbmQoZT0+ZT8uaWQ9PT1LKTpudWxsO3ImJihlRChlKSxyLmRpc3BhdGNoRXZlbnQobiksSih2b2lkIDApKX1pZigoY3x8bykmJnUuY29udGV4dCYmdS5jb250ZXh0Lm9wZW4mJnUucGFyZW50SWQmJmUuY3VycmVudFRhcmdldCE9PXUuY29udGV4dC5lbGVtZW50cy5kb21SZWZlcmVuY2Upe2VEKGUpLHUuY29udGV4dC5lbGVtZW50cy5kb21SZWZlcmVuY2U/LmRpc3BhdGNoRXZlbnQobik7cmV0dXJufX1yZXR1cm4gZWEoZSl9aWYodHx8Ynx8IW4pe2lmKGQpe2xldCBuPW4kKGUua2V5LGVvKCkpO04uY3VycmVudD1wJiZuP251bGw6ZS5rZXl9aWYocCl7cyYmKGVEKGUpLHQ/KFIuY3VycmVudD1uSShpLCQuY3VycmVudCksQigpKTpyKCEwLGUubmF0aXZlRXZlbnQsXCJsaXN0LW5hdmlnYXRpb25cIikpO3JldHVybn1jJiYobnVsbCE9dSYmKFIuY3VycmVudD11KSxlRChlKSwhdCYmYj9yKCEwLGUubmF0aXZlRXZlbnQsXCJsaXN0LW5hdmlnYXRpb25cIik6ZWEoZSksdCYmQigpKX19LG9uRm9jdXMoKXt0JiYhZyYmKFIuY3VycmVudD0tMSxCKCkpfSxvblBvaW50ZXJEb3duOm4sb25Qb2ludGVyRW50ZXI6bixvbk1vdXNlRG93bjplLG9uQ2xpY2s6ZX19LFtLLGVpLGosZWEsJCxtLGkscCxCLHIsdCxiLHgsZW8saCx1LFAsZyxBXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+Yz97cmVmZXJlbmNlOmVzLGZsb2F0aW5nOmVsLGl0ZW06ZXJ9Ont9LFtjLGVzLGVsLGVyXSl9KGV2LHtlbmFibGVkOiFjLGxpc3RSZWY6ZU8sYWN0aXZlSW5kZXg6UyxuZXN0ZWQ6dm9pZCAwIT09bi50eXBlLGxvb3A6ZCxvcmllbnRhdGlvbjpmLHBhcmVudE9yaWVudGF0aW9uOlwibWVudWJhclwiPT09bi50eXBlP24uY29udGV4dC5vcmllbnRhdGlvbjp2b2lkIDAscnRsOlwicnRsXCI9PT1lUyxkaXNhYmxlZEluZGljZXM6dGcsb25OYXZpZ2F0ZTpfLG9wZW5PbkFycm93S2V5RG93bjpcImNvbnRleHQtbWVudVwiIT09bi50eXBlfSksZV89Qy51c2VSZWYoITEpLGV6PWZ1bmN0aW9uKGUsbil7bGV0e29wZW46dCxkYXRhUmVmOnJ9PWUse2xpc3RSZWY6byxhY3RpdmVJbmRleDphLG9uTWF0Y2g6aSxvblR5cGluZ0NoYW5nZTpsLGVuYWJsZWQ6cz0hMCxmaW5kTWF0Y2g6Yz1udWxsLHJlc2V0TXM6dT03NTAsaWdub3JlS2V5czpkPVtdLHNlbGVjdGVkSW5kZXg6Zj1udWxsfT1uLHA9ZWsoKSxoPUMudXNlUmVmKFwiXCIpLGc9Qy51c2VSZWYoZj8/YT8/LTEpLG09Qy51c2VSZWYobnVsbCksdj1UKGkpLGI9VChsKSx5PWVBKGMpLHg9ZUEoZCk7RigoKT0+e3QmJihwLmNsZWFyKCksbS5jdXJyZW50PW51bGwsaC5jdXJyZW50PVwiXCIpfSxbdCxwXSksRigoKT0+e3QmJlwiXCI9PT1oLmN1cnJlbnQmJihnLmN1cnJlbnQ9Zj8/YT8/LTEpfSxbdCxmLGFdKTtsZXQgdz1UKGU9PntlP3IuY3VycmVudC50eXBpbmd8fChyLmN1cnJlbnQudHlwaW5nPWUsYihlKSk6ci5jdXJyZW50LnR5cGluZyYmKHIuY3VycmVudC50eXBpbmc9ZSxiKGUpKX0pLGo9VChlPT57ZnVuY3Rpb24gbihlLG4sdCl7bGV0IHI9eS5jdXJyZW50P3kuY3VycmVudChuLHQpOm4uZmluZChlPT5lPy50b0xvY2FsZUxvd2VyQ2FzZSgpLmluZGV4T2YodC50b0xvY2FsZUxvd2VyQ2FzZSgpKT09PTApO3JldHVybiByP2UuaW5kZXhPZihyKTotMX1sZXQgcj1vLmN1cnJlbnQ7aWYoaC5jdXJyZW50Lmxlbmd0aD4wJiZcIiBcIiE9PWguY3VycmVudFswXSYmKC0xPT09bihyLHIsaC5jdXJyZW50KT93KCExKTpcIiBcIj09PWUua2V5JiZlRChlKSksbnVsbD09cnx8eC5jdXJyZW50LmluY2x1ZGVzKGUua2V5KXx8MSE9PWUua2V5Lmxlbmd0aHx8ZS5jdHJsS2V5fHxlLm1ldGFLZXl8fGUuYWx0S2V5KXJldHVybjt0JiZcIiBcIiE9PWUua2V5JiYoZUQoZSksdyghMCkpLHIuZXZlcnkoZT0+IWV8fGVbMF0/LnRvTG9jYWxlTG93ZXJDYXNlKCkhPT1lWzFdPy50b0xvY2FsZUxvd2VyQ2FzZSgpKSYmaC5jdXJyZW50PT09ZS5rZXkmJihoLmN1cnJlbnQ9XCJcIixnLmN1cnJlbnQ9bS5jdXJyZW50KSxoLmN1cnJlbnQrPWUua2V5LHAuc3RhcnQodSwoKT0+e2guY3VycmVudD1cIlwiLGcuY3VycmVudD1tLmN1cnJlbnQsdyghMSl9KTtsZXQgYT1nLmN1cnJlbnQsaT1uKHIsWy4uLnIuc2xpY2UoKGF8fDApKzEpLC4uLnIuc2xpY2UoMCwoYXx8MCkrMSldLGguY3VycmVudCk7LTEhPT1pPyh2KGkpLG0uY3VycmVudD1pKTpcIiBcIiE9PWUua2V5JiYoaC5jdXJyZW50PVwiXCIsdyghMSkpfSksaz1DLnVzZU1lbW8oKCk9Pih7b25LZXlEb3duOmp9KSxbal0pLEE9Qy51c2VNZW1vKCgpPT4oe29uS2V5RG93bjpqLG9uS2V5VXAoZSl7XCIgXCI9PT1lLmtleSYmdyghMSl9fSksW2osd10pO3JldHVybiBDLnVzZU1lbW8oKCk9PnM/e3JlZmVyZW5jZTprLGZsb2F0aW5nOkF9Ont9LFtzLGssQV0pfShldix7bGlzdFJlZjplQyxhY3RpdmVJbmRleDpTLHJlc2V0TXM6NTAwLG9uTWF0Y2g6ZT0+e2VlJiZlIT09UyYmXyhlKX0sb25UeXBpbmdDaGFuZ2U6Qy51c2VDYWxsYmFjayhlPT57ZV8uY3VycmVudD1lfSxbXSl9KSx7Z2V0UmVmZXJlbmNlUHJvcHM6ZUwsZ2V0RmxvYXRpbmdQcm9wczplVCxnZXRJdGVtUHJvcHM6ZVJ9PW5LKFtlYixleCxldyxleSxlaixlRSxlel0pLGVOPWZ1bmN0aW9uKGUpe2xldHtlbmFibGVkOm49ITAsbW91c2VEb3duQWN0aW9uOnQsb3BlbjpyfT1lLG89Qy51c2VSZWYoITEpO3JldHVybiBDLnVzZU1lbW8oKCk9Pm4/e29uTW91c2VEb3duOmU9PnsoXCJvcGVuXCI9PT10JiYhcnx8XCJjbG9zZVwiPT09dCYmcikmJihvLmN1cnJlbnQ9ITAsZVEoZS5jdXJyZW50VGFyZ2V0KS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoKT0+e28uY3VycmVudD0hMX0se29uY2U6ITB9KSl9LG9uQ2xpY2s6ZT0+e28uY3VycmVudCYmKG8uY3VycmVudD0hMSxlLnByZXZlbnRCYXNlVUlIYW5kbGVyKCkpfX06bnIsW24sdCxyXSl9KHtvcGVuOmVlLGVuYWJsZWQ6XCJtZW51YmFyXCI9PT1uLnR5cGUsbW91c2VEb3duQWN0aW9uOlwib3BlblwifSksZUg9Qy51c2VNZW1vKCgpPT57bGV0IGU9dGMoZUwoKSx7b25Nb3VzZUVudGVyKCl7TyghMCl9LG9uTW91c2VNb3ZlKCl7RyghMCl9fSxlTik7cmV0dXJuIGRlbGV0ZSBlLnJvbGUsZX0sW2VMLGVOLEddKSxlRj1DLnVzZU1lbW8oKCk9PmVUKHtvbk1vdXNlRW50ZXIoKXtKJiZcIm1lbnVcIiE9PW4udHlwZXx8TyghMSl9LG9uTW91c2VNb3ZlKCl7RyghMCl9LG9uQ2xpY2soKXtKJiZPKCExKX19KSxbZVQsSixuLnR5cGUsR10pLGVVPUMudXNlTWVtbygoKT0+ZVIoKSxbZVJdKSxlWD1DLnVzZU1lbW8oKCk9Pih7YWN0aXZlSW5kZXg6UyxzZXRBY3RpdmVJbmRleDpfLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6bi50eXBlP24uY29udGV4dC5hbGxvd01vdXNlVXBUcmlnZ2VyUmVmOnRtLGZsb2F0aW5nUm9vdENvbnRleHQ6ZXYsaXRlbVByb3BzOmVVLHBvcHVwUHJvcHM6ZUYsdHJpZ2dlclByb3BzOmVILGl0ZW1Eb21FbGVtZW50czplTyxpdGVtTGFiZWxzOmVDLG1vdW50ZWQ6ZWksb3BlbjplZSxwb3B1cFJlZjpNLHBvc2l0aW9uZXJSZWY6SSxzZXRPcGVuOmVtLHNldFBvc2l0aW9uZXJFbGVtZW50OmVhLHRyaWdnZXJFbGVtZW50OmIsc2V0VHJpZ2dlckVsZW1lbnQ6eSx0cmFuc2l0aW9uU3RhdHVzOmVzLGxhc3RPcGVuQ2hhbmdlUmVhc29uOlAsaW5zdGFudFR5cGU6aixvbk9wZW5DaGFuZ2VDb21wbGV0ZTppLHNldEhvdmVyRW5hYmxlZDpPLHR5cGluZ1JlZjplXyxtb2RhbDpLLGRpc2FibGVkOmMscGFyZW50Om4scm9vdElkOlgsYWxsb3dNb3VzZUVudGVyOlEsc2V0QWxsb3dNb3VzZUVudGVyOkd9KSxbUyxldixlVSxlRixlSCxlTyxlQyxlaSxlZSxJLGVtLGVzLGIsZWEsUCxqLGksSyxjLG4sWCxRLEddKSxlSz0oMCxsLmpzeCkobkouUHJvdmlkZXIse3ZhbHVlOmVYLGNoaWxkcmVuOnJ9KTtyZXR1cm4gdm9pZCAwPT09bi50eXBlfHxcImNvbnRleHQtbWVudVwiPT09bi50eXBlPygwLGwuanN4KShaLHtjaGlsZHJlbjplS30pOmVLfTtmdW5jdGlvbiB0YihlLG4sdCxyKXt2YXIgbyxhLGksbCxzO2xldCBjPVAodHkpLmN1cnJlbnQ7cmV0dXJuIG89YyxhPWUsaT1uLGw9dCxzPXIsKG8ucmVmc1swXSE9PWF8fG8ucmVmc1sxXSE9PWl8fG8ucmVmc1syXSE9PWx8fG8ucmVmc1szXSE9PXMpJiZ0eChjLFtlLG4sdCxyXSksYy5jYWxsYmFja31mdW5jdGlvbiB0eSgpe3JldHVybntjYWxsYmFjazpudWxsLGNsZWFudXA6bnVsbCxyZWZzOltdfX1mdW5jdGlvbiB0eChlLG4pe2lmKGUucmVmcz1uLG4uZXZlcnkoZT0+bnVsbD09ZSkpe2UuY2FsbGJhY2s9bnVsbDtyZXR1cm59ZS5jYWxsYmFjaz10PT57aWYoZS5jbGVhbnVwJiYoZS5jbGVhbnVwKCksZS5jbGVhbnVwPW51bGwpLG51bGwhPXQpe2xldCByPUFycmF5KG4ubGVuZ3RoKS5maWxsKG51bGwpO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSs9MSl7bGV0IG89bltlXTtpZihudWxsIT1vKXN3aXRjaCh0eXBlb2Ygbyl7Y2FzZVwiZnVuY3Rpb25cIjp7bGV0IG49byh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYocltlXT1uKTticmVha31jYXNlXCJvYmplY3RcIjpvLmN1cnJlbnQ9dH19ZS5jbGVhbnVwPSgpPT57Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKz0xKXtsZXQgdD1uW2VdO2lmKG51bGwhPXQpc3dpdGNoKHR5cGVvZiB0KXtjYXNlXCJmdW5jdGlvblwiOntsZXQgbj1yW2VdO1wiZnVuY3Rpb25cIj09dHlwZW9mIG4/bigpOnQobnVsbCk7YnJlYWt9Y2FzZVwib2JqZWN0XCI6dC5jdXJyZW50PW51bGx9fX19fX1sZXQgdHc9cGFyc2VJbnQoQy52ZXJzaW9uLDEwKTtmdW5jdGlvbiB0aihlLG4sdD17fSl7bGV0IHI9bi5yZW5kZXIsbz1mdW5jdGlvbihlLG49e30pe2xldCB0LHtjbGFzc05hbWU6cixyZW5kZXI6b309ZSx7c3RhdGU6YT1ucixyZWY6aSxwcm9wczpsLGRpc2FibGVTdHlsZUhvb2tzOnMsY3VzdG9tU3R5bGVIb29rTWFwcGluZzpjLGVuYWJsZWQ6dT0hMH09bixkPXU/XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yKGEpOnI6dm9pZCAwOyEwIT09cyYmKHQ9Qy51c2VNZW1vKCgpPT51P2Z1bmN0aW9uKGUsbil7bGV0IHQ9e307Zm9yKGxldCByIGluIGUpe2xldCBvPWVbcl07aWYobj8uaGFzT3duUHJvcGVydHkocikpe2xldCBlPW5bcl0obyk7bnVsbCE9ZSYmT2JqZWN0LmFzc2lnbih0LGUpO2NvbnRpbnVlfSEwPT09bz90W2BkYXRhLSR7ci50b0xvd2VyQ2FzZSgpfWBdPVwiXCI6byYmKHRbYGRhdGEtJHtyLnRvTG93ZXJDYXNlKCl9YF09by50b1N0cmluZygpKX1yZXR1cm4gdH0oYSxjKTpucixbYSxjLHVdKSk7bGV0IGY9dT90bCh0LEFycmF5LmlzQXJyYXkobCk/ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHRmKGVbMF0sdHMpO2xldCBuPXsuLi50ZihlWzBdLHRzKX07Zm9yKGxldCB0PTE7dDxlLmxlbmd0aDt0Kz0xKW49dHUobixlW3RdKTtyZXR1cm4gbn0obCk6bCk/P25yOm5yO3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJih1P0FycmF5LmlzQXJyYXkoaSk/Zi5yZWY9ZnVuY3Rpb24oZSl7dmFyIG4sdDtsZXQgcj1QKHR5KS5jdXJyZW50O3JldHVybiBuPXIsdD1lLChuLnJlZnMubGVuZ3RoIT09dC5sZW5ndGh8fG4ucmVmcy5zb21lKChlLG4pPT5lIT09dFtuXSkpJiZ0eChyLGUpLHIuY2FsbGJhY2t9KFtmLnJlZix0ayhvKSwuLi5pXSk6Zi5yZWY9dGIoZi5yZWYsdGsobyksaSk6dGIobnVsbCxudWxsKSksdSk/KHZvaWQgMCE9PWQmJihmLmNsYXNzTmFtZT10aChmLmNsYXNzTmFtZSxkKSksZik6bnJ9KG4sdCk7cmV0dXJuITE9PT10LmVuYWJsZWQ/bnVsbDpmdW5jdGlvbihlLG4sdCxyKXtpZihuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXJldHVybiBuKHQscik7bGV0IGU9dGModCxuLnByb3BzKTtyZXR1cm4gZS5yZWY9dC5yZWYsQy5jbG9uZUVsZW1lbnQobixlKX1pZihlJiZcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIG8sYTtyZXR1cm4gbz1lLGE9dCxcImJ1dHRvblwiPT09bz8oMCxsLmpzeCkoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLC4uLmF9KTpcImltZ1wiPT09bz8oMCxsLmpzeCkoXCJpbWdcIix7YWx0OlwiXCIsLi4uYX0pOkMuY3JlYXRlRWxlbWVudChvLGEpfXRocm93IEVycm9yKFwiQmFzZSBVSTogUmVuZGVyIGVsZW1lbnQgb3IgZnVuY3Rpb24gYXJlIG5vdCBkZWZpbmVkLlwiKX0oZSxyLG8sdC5zdGF0ZT8/bnIpfWZ1bmN0aW9uIHRrKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3R3Pj0xOT9lLnByb3BzLnJlZjplLnJlZjpudWxsfWxldCB0QT1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiB0TyhlPSExKXtsZXQgbj1DLnVzZUNvbnRleHQodEEpO2lmKHZvaWQgMD09PW4mJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogQ29tcG9zaXRlUm9vdENvbnRleHQgaXMgbWlzc2luZy4gQ29tcG9zaXRlIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8Q29tcG9zaXRlLlJvb3Q+LlwiKTtyZXR1cm4gbn1sZXQgdEM9Qy5jcmVhdGVDb250ZXh0KHtyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e30sc3Vic2NyaWJlTWFwQ2hhbmdlOigpPT4oKT0+e30sZWxlbWVudHNSZWY6e2N1cnJlbnQ6W119LG5leHRJbmRleFJlZjp7Y3VycmVudDowfX0pLHRTPSgocj17fSlbci5Ob25lPTBdPVwiTm9uZVwiLHJbci5HdWVzc0Zyb21PcmRlcj0xXT1cIkd1ZXNzRnJvbU9yZGVyXCIscik7ZnVuY3Rpb24gdEUoZT17fSl7bGV0e2xhYmVsOm4sbWV0YWRhdGE6dCx0ZXh0UmVmOnIsaW5kZXhHdWVzc0JlaGF2aW9yOm99PWUse3JlZ2lzdGVyOmEsdW5yZWdpc3RlcjppLHN1YnNjcmliZU1hcENoYW5nZTpsLGVsZW1lbnRzUmVmOnMsbGFiZWxzUmVmOmMsbmV4dEluZGV4UmVmOnV9PUMudXNlQ29udGV4dCh0QyksZD1DLnVzZVJlZigtMSksW2YscF09Qy51c2VTdGF0ZShvPT09dFMuR3Vlc3NGcm9tT3JkZXI/KCk9PntpZigtMT09PWQuY3VycmVudCl7bGV0IGU9dS5jdXJyZW50O3UuY3VycmVudCs9MSxkLmN1cnJlbnQ9ZX1yZXR1cm4gZC5jdXJyZW50fTotMSksaD1DLnVzZVJlZihudWxsKSxnPUMudXNlQ2FsbGJhY2soZT0+e2lmKGguY3VycmVudD1lLC0xIT09ZiYmbnVsbCE9PWUmJihzLmN1cnJlbnRbZl09ZSxjKSl7bGV0IHQ9dm9pZCAwIT09bjtjLmN1cnJlbnRbZl09dD9uOnI/LmN1cnJlbnQ/LnRleHRDb250ZW50Pz9lLnRleHRDb250ZW50fX0sW2YscyxjLG4scl0pO3JldHVybiBGKCgpPT57bGV0IGU9aC5jdXJyZW50O2lmKGUpcmV0dXJuIGEoZSx0KSwoKT0+e2koZSl9fSxbYSxpLHRdKSxGKCgpPT5sKGU9PntsZXQgbj1oLmN1cnJlbnQ/ZS5nZXQoaC5jdXJyZW50KT8uaW5kZXg6bnVsbDtudWxsIT1uJiZwKG4pfSksW2wscF0pLEMudXNlTWVtbygoKT0+KHtyZWY6ZyxpbmRleDpmfSksW2YsZ10pfWZ1bmN0aW9uIHRfKGUpe2xldHtyZW5kZXI6bixjbGFzc05hbWU6dCxpdGVtUmVmOnI9bnVsbCxtZXRhZGF0YTpvLC4uLmF9PWUse3Byb3BzOmkscmVmOmx9PWZ1bmN0aW9uKGU9e30pe2xldHtoaWdobGlnaHRlZEluZGV4Om4sb25IaWdobGlnaHRlZEluZGV4Q2hhbmdlOnQsaGlnaGxpZ2h0SXRlbU9uSG92ZXI6cn09dE8oKSx7cmVmOm8saW5kZXg6YX09dEUoZSksaT1uPT09YSxsPUMudXNlUmVmKG51bGwpLHM9dGIobyxsKSxjPUMudXNlTWVtbygoKT0+KHt0YWJJbmRleDppPzA6LTEsb25Gb2N1cygpe3QoYSl9LG9uTW91c2VNb3ZlKCl7bGV0IGU9bC5jdXJyZW50O2lmKCFyfHwhZSlyZXR1cm47bGV0IG49ZS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKXx8XCJ0cnVlXCI9PT1lLmFyaWFEaXNhYmxlZDtpfHxufHxlLmZvY3VzKCl9fSksW2EsaSx0LHJdKTtyZXR1cm4gQy51c2VNZW1vKCgpPT4oe3Byb3BzOmMscmVmOnMsaW5kZXg6YX0pLFtjLGEsc10pfSh7bWV0YWRhdGE6b30pO3JldHVybiB0aihcImRpdlwiLGUse3JlZjpbcixsXSxwcm9wczpbaSxhXX0pfWxldCB0UD0oKG89e30pLnN0YXJ0aW5nU3R5bGU9XCJkYXRhLXN0YXJ0aW5nLXN0eWxlXCIsby5lbmRpbmdTdHlsZT1cImRhdGEtZW5kaW5nLXN0eWxlXCIsbyksdHo9e1t0UC5zdGFydGluZ1N0eWxlXTpcIlwifSx0TD17W3RQLmVuZGluZ1N0eWxlXTpcIlwifSx0VD17dHJhbnNpdGlvblN0YXR1czplPT5cInN0YXJ0aW5nXCI9PT1lP3R6OlwiZW5kaW5nXCI9PT1lP3RMOm51bGx9LHRSPSgoYT17fSkub3Blbj1cImRhdGEtb3BlblwiLGEuY2xvc2VkPVwiZGF0YS1jbG9zZWRcIixhW2Euc3RhcnRpbmdTdHlsZT10UC5zdGFydGluZ1N0eWxlXT1cInN0YXJ0aW5nU3R5bGVcIixhW2EuZW5kaW5nU3R5bGU9dFAuZW5kaW5nU3R5bGVdPVwiZW5kaW5nU3R5bGVcIixhLmFuY2hvckhpZGRlbj1cImRhdGEtYW5jaG9yLWhpZGRlblwiLGEpLHROPSgoaT17fSkucG9wdXBPcGVuPVwiZGF0YS1wb3B1cC1vcGVuXCIsaS5wcmVzc2VkPVwiZGF0YS1wcmVzc2VkXCIsaSksdEQ9e1t0Ti5wb3B1cE9wZW5dOlwiXCJ9LHRCPXtbdE4ucG9wdXBPcGVuXTpcIlwiLFt0Ti5wcmVzc2VkXTpcIlwifSx0TT17W3RSLm9wZW5dOlwiXCJ9LHRJPXtbdFIuY2xvc2VkXTpcIlwifSx0SD17W3RSLmFuY2hvckhpZGRlbl06XCJcIn0sdEY9e29wZW46ZT0+ZT90RDpudWxsfSx0VT17b3BlbjplPT5lP3RCOm51bGx9LHRWPXtvcGVuOmU9PmU/dE06dEksYW5jaG9ySGlkZGVuOmU9PmU/dEg6bnVsbH07ZnVuY3Rpb24gdHEoZT17fSl7bGV0e2Rpc2FibGVkOm49ITEsZm9jdXNhYmxlV2hlbkRpc2FibGVkOnQsdGFiSW5kZXg6cj0wLG5hdGl2ZTpvPSEwfT1lLGE9Qy51c2VSZWYobnVsbCksaT12b2lkIDAhPT10TyghMCksbD1UKCgpPT57bGV0IGU9YS5jdXJyZW50O3JldHVybiEhKGU/LnRhZ05hbWU9PT1cIkFcIiYmZT8uaHJlZil9KSx7cHJvcHM6c309ZnVuY3Rpb24oZSl7bGV0e2ZvY3VzYWJsZVdoZW5EaXNhYmxlZDpuLGRpc2FibGVkOnQsY29tcG9zaXRlOnI9ITEsdGFiSW5kZXg6bz0wLGlzTmF0aXZlQnV0dG9uOmF9PWUsaT1yJiYhMSE9PW4sbD1yJiYhMT09PW47cmV0dXJue3Byb3BzOkMudXNlTWVtbygoKT0+e2xldCBlPXtvbktleURvd24oZSl7dCYmbiYmXCJUYWJcIiE9PWUua2V5JiZlLnByZXZlbnREZWZhdWx0KCl9fTtyZXR1cm4gcnx8KGUudGFiSW5kZXg9bywhYSYmdCYmKGUudGFiSW5kZXg9bj9vOi0xKSksKGEmJihufHxpKXx8IWEmJnQpJiYoZVtcImFyaWEtZGlzYWJsZWRcIl09dCksYSYmKCFufHxsKSYmKGUuZGlzYWJsZWQ9dCksZX0sW3IsdCxuLGksbCxhLG9dKX19KHtmb2N1c2FibGVXaGVuRGlzYWJsZWQ6dCxkaXNhYmxlZDpuLGNvbXBvc2l0ZTppLHRhYkluZGV4OnIsaXNOYXRpdmVCdXR0b246b30pO3JldHVybiBGKCgpPT57bGV0IGU9YS5jdXJyZW50O2UgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCYmaSYmbiYmdm9pZCAwPT09cy5kaXNhYmxlZCYmZS5kaXNhYmxlZCYmKGUuZGlzYWJsZWQ9ITEpfSxbbixzLmRpc2FibGVkLGldKSx7Z2V0QnV0dG9uUHJvcHM6Qy51c2VDYWxsYmFjaygoZT17fSk9PntsZXR7b25DbGljazp0LG9uTW91c2VEb3duOnIsb25LZXlVcDphLG9uS2V5RG93bjppLG9uUG9pbnRlckRvd246YywuLi51fT1lO3JldHVybiB0Yyh7dHlwZTpvP1wiYnV0dG9uXCI6dm9pZCAwLG9uQ2xpY2soZSl7aWYobilyZXR1cm4gdm9pZCBlLnByZXZlbnREZWZhdWx0KCk7dD8uKGUpfSxvbk1vdXNlRG93bihlKXtufHxyPy4oZSl9LG9uS2V5RG93bihlKXtufHwodHAoZSksaT8uKGUpKSwhZS5iYXNlVUlIYW5kbGVyUHJldmVudGVkJiYoZS50YXJnZXQhPT1lLmN1cnJlbnRUYXJnZXR8fG98fGwoKXx8XCJFbnRlclwiIT09ZS5rZXl8fG58fCh0Py4oZSksZS5wcmV2ZW50RGVmYXVsdCgpKSl9LG9uS2V5VXAoZSl7bnx8KHRwKGUpLGE/LihlKSksIWUuYmFzZVVJSGFuZGxlclByZXZlbnRlZCYmKGUudGFyZ2V0IT09ZS5jdXJyZW50VGFyZ2V0fHxvfHxufHxcIiBcIiE9PWUua2V5fHx0Py4oZSkpfSxvblBvaW50ZXJEb3duKGUpe2lmKG4pcmV0dXJuIHZvaWQgZS5wcmV2ZW50RGVmYXVsdCgpO2M/LihlKX19LG8/dm9pZCAwOntyb2xlOlwiYnV0dG9uXCJ9LHMsdSl9LFtuLHMsbyxsXSksYnV0dG9uUmVmOmF9fWxldCB0Vz1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXR7cmVuZGVyOnQsY2xhc3NOYW1lOnIsZGlzYWJsZWQ6bz0hMSxuYXRpdmVCdXR0b246YT0hMCwuLi5pfT1lLHt0cmlnZ2VyUHJvcHM6cyxkaXNhYmxlZDpjLHNldFRyaWdnZXJFbGVtZW50OnUsb3BlbjpkLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6Zixwb3NpdGlvbmVyUmVmOnAscGFyZW50OmgsbGFzdE9wZW5DaGFuZ2VSZWFzb246Zyxyb290SWQ6bX09bjAoKSx2PW98fGMsYj1DLnVzZVJlZihudWxsKSx5PWVrKCkse2dldEJ1dHRvblByb3BzOngsYnV0dG9uUmVmOnd9PXRxKHtkaXNhYmxlZDp2LG5hdGl2ZTphfSksaj10Yih3LHUpLHtldmVudHM6a309VygpO0MudXNlRWZmZWN0KCgpPT57ZHx8dm9pZCAwIT09aC50eXBlfHwoZi5jdXJyZW50PSExKX0sW2YsZCxoLnR5cGVdKTtsZXQgQT1UKGU9PntpZighYi5jdXJyZW50KXJldHVybjt5LmNsZWFyKCksZi5jdXJyZW50PSExO2xldCBuPWUudGFyZ2V0O2lmKGVZKGIuY3VycmVudCxuKXx8ZVkocC5jdXJyZW50LG4pfHxuPT09Yi5jdXJyZW50fHxudWxsIT1uJiZmdW5jdGlvbiBlKG4pe3JldHVybiBlbihuKSYmbi5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJvb3Rvd25lcmlkXCIpP24uZ2V0QXR0cmlidXRlKFwiZGF0YS1yb290b3duZXJpZFwiKT8/dm9pZCAwOmVoKG4pP3ZvaWQgMDplKGV2KG4pKX0obik9PT1tKXJldHVybjtsZXQgdD1mdW5jdGlvbihlKXtsZXQgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSxcIjo6YmVmb3JlXCIpLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSxcIjo6YWZ0ZXJcIik7aWYoXCJub25lXCI9PT10LmNvbnRlbnQmJlwibm9uZVwiPT09ci5jb250ZW50KXJldHVybiBuO2xldCBvPXBhcnNlRmxvYXQodC53aWR0aCl8fDAsYT1wYXJzZUZsb2F0KHQuaGVpZ2h0KXx8MCxpPXBhcnNlRmxvYXQoci53aWR0aCl8fDAsbD1wYXJzZUZsb2F0KHIuaGVpZ2h0KXx8MCxzPU1hdGgubWF4KG4ud2lkdGgsbyxpKSxjPU1hdGgubWF4KG4uaGVpZ2h0LGEsbCksdT1zLW4ud2lkdGgsZD1jLW4uaGVpZ2h0O3JldHVybntsZWZ0Om4ubGVmdC11LzIscmlnaHQ6bi5yaWdodCt1LzIsdG9wOm4udG9wLWQvMixib3R0b206bi5ib3R0b20rZC8yfX0oYi5jdXJyZW50KTtlLmNsaWVudFg+PXQubGVmdC0yJiZlLmNsaWVudFg8PXQucmlnaHQrMiYmZS5jbGllbnRZPj10LnRvcC0yJiZlLmNsaWVudFk8PXQuYm90dG9tKzJ8fGsuZW1pdChcImNsb3NlXCIse2RvbUV2ZW50OmUscmVhc29uOlwiY2FuY2VsLW9wZW5cIn0pfSk7Qy51c2VFZmZlY3QoKCk9PntkJiZcInRyaWdnZXItaG92ZXJcIj09PWcmJmVRKGIuY3VycmVudCkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixBLHtvbmNlOiEwfSl9LFtkLEEsZ10pO2xldCBPPUMudXNlQ2FsbGJhY2soZT0+dGMoe1wiYXJpYS1oYXNwb3B1cFwiOlwibWVudVwiLHJlZjpqLG9uTW91c2VEb3duOmU9PntkfHwoeS5zdGFydCgyMDAsKCk9PntmLmN1cnJlbnQ9ITB9KSxlUShlLmN1cnJlbnRUYXJnZXQpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsQSx7b25jZTohMH0pKX19LGUseCksW3gsaixkLGYseSxBXSksUz10aihcImJ1dHRvblwiLGUse3N0YXRlOkMudXNlTWVtbygoKT0+KHtkaXNhYmxlZDp2LG9wZW46ZH0pLFt2LGRdKSxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnRVLHJlZjpbYixuLHddLHByb3BzOltzLGksT119KTtyZXR1cm5cIm1lbnViYXJcIj09PWgudHlwZT8oMCxsLmpzeCkodF8se3JlbmRlcjpTfSk6U30pLHQkPXtjbGlwOlwicmVjdCgwIDAgMCAwKVwiLG92ZXJmbG93OlwiaGlkZGVuXCIsd2hpdGVTcGFjZTpcIm5vd3JhcFwiLHBvc2l0aW9uOlwiZml4ZWRcIix0b3A6MCxsZWZ0OjAsYm9yZGVyOjAscGFkZGluZzowLHdpZHRoOjEsaGVpZ2h0OjEsbWFyZ2luOi0xfSx0Wj1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXRbdCxyXT1DLnVzZVN0YXRlKCk7cmV0dXJuIEYoKCk9PntlTCYmcihcImJ1dHRvblwiKX0sW10pLCgwLGwuanN4KShcInNwYW5cIix7Li4uZSxyZWY6bix0YWJJbmRleDowLHJvbGU6dCxcImFyaWEtaGlkZGVuXCI6IXR8fHZvaWQgMCxzdHlsZTp0JCxcImRhdGEtYmFzZS11aS1mb2N1cy1ndWFyZFwiOlwiXCJ9KX0pO3ZhciB0WT0naW5wdXQ6bm90KFtpbmVydF0pLHNlbGVjdDpub3QoW2luZXJ0XSksdGV4dGFyZWE6bm90KFtpbmVydF0pLGFbaHJlZl06bm90KFtpbmVydF0pLGJ1dHRvbjpub3QoW2luZXJ0XSksW3RhYmluZGV4XTpub3Qoc2xvdCk6bm90KFtpbmVydF0pLGF1ZGlvW2NvbnRyb2xzXTpub3QoW2luZXJ0XSksdmlkZW9bY29udHJvbHNdOm5vdChbaW5lcnRdKSxbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKTpub3QoW2luZXJ0XSksZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGU6bm90KFtpbmVydF0pLGRldGFpbHM6bm90KFtpbmVydF0pJyx0WD1cInVuZGVmaW5lZFwiPT10eXBlb2YgRWxlbWVudCx0Sz10WD9mdW5jdGlvbigpe306RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc3x8RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcix0UT0hdFgmJkVsZW1lbnQucHJvdG90eXBlLmdldFJvb3ROb2RlP2Z1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBudWxsPT1lfHxudWxsPT0obj1lLmdldFJvb3ROb2RlKT92b2lkIDA6bi5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZS5vd25lckRvY3VtZW50fSx0Rz1mdW5jdGlvbiBlKG4sdCl7dm9pZCAwPT09dCYmKHQ9ITApO3ZhciByLG89bnVsbD09bnx8bnVsbD09KHI9bi5nZXRBdHRyaWJ1dGUpP3ZvaWQgMDpyLmNhbGwobixcImluZXJ0XCIpO3JldHVyblwiXCI9PT1vfHxcInRydWVcIj09PW98fHQmJm4mJmUobi5wYXJlbnROb2RlKX0sdEo9ZnVuY3Rpb24oZSl7dmFyIG4sdD1udWxsPT1lfHxudWxsPT0obj1lLmdldEF0dHJpYnV0ZSk/dm9pZCAwOm4uY2FsbChlLFwiY29udGVudGVkaXRhYmxlXCIpO3JldHVyblwiXCI9PT10fHxcInRydWVcIj09PXR9LHQwPWZ1bmN0aW9uKGUsbix0KXtpZih0RyhlKSlyZXR1cm5bXTt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoZS5xdWVyeVNlbGVjdG9yQWxsKHRZKSk7cmV0dXJuIG4mJnRLLmNhbGwoZSx0WSkmJnIudW5zaGlmdChlKSxyPXIuZmlsdGVyKHQpfSx0MT1mdW5jdGlvbiBlKG4sdCxyKXtmb3IodmFyIG89W10sYT1BcnJheS5mcm9tKG4pO2EubGVuZ3RoOyl7dmFyIGk9YS5zaGlmdCgpO2lmKCF0RyhpLCExKSlpZihcIlNMT1RcIj09PWkudGFnTmFtZSl7dmFyIGw9aS5hc3NpZ25lZEVsZW1lbnRzKCkscz1lKGwubGVuZ3RoP2w6aS5jaGlsZHJlbiwhMCxyKTtyLmZsYXR0ZW4/by5wdXNoLmFwcGx5KG8scyk6by5wdXNoKHtzY29wZVBhcmVudDppLGNhbmRpZGF0ZXM6c30pfWVsc2V7dEsuY2FsbChpLHRZKSYmci5maWx0ZXIoaSkmJih0fHwhbi5pbmNsdWRlcyhpKSkmJm8ucHVzaChpKTt2YXIgYz1pLnNoYWRvd1Jvb3R8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZ2V0U2hhZG93Um9vdCYmci5nZXRTaGFkb3dSb290KGkpLHU9IXRHKGMsITEpJiYoIXIuc2hhZG93Um9vdEZpbHRlcnx8ci5zaGFkb3dSb290RmlsdGVyKGkpKTtpZihjJiZ1KXt2YXIgZD1lKCEwPT09Yz9pLmNoaWxkcmVuOmMuY2hpbGRyZW4sITAscik7ci5mbGF0dGVuP28ucHVzaC5hcHBseShvLGQpOm8ucHVzaCh7c2NvcGVQYXJlbnQ6aSxjYW5kaWRhdGVzOmR9KX1lbHNlIGEudW5zaGlmdC5hcHBseShhLGkuY2hpbGRyZW4pfX1yZXR1cm4gb30sdDI9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApKX0sdDQ9ZnVuY3Rpb24oZSl7aWYoIWUpdGhyb3cgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiBlLnRhYkluZGV4PDAmJigvXihBVURJT3xWSURFT3xERVRBSUxTKSQvLnRlc3QoZS50YWdOYW1lKXx8dEooZSkpJiYhdDIoZSk/MDplLnRhYkluZGV4fSx0NT1mdW5jdGlvbihlLG4pe3ZhciB0PXQ0KGUpO3JldHVybiB0PDAmJm4mJiF0MihlKT8wOnR9LHQzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGUudGFiSW5kZXg9PT1uLnRhYkluZGV4P2UuZG9jdW1lbnRPcmRlci1uLmRvY3VtZW50T3JkZXI6ZS50YWJJbmRleC1uLnRhYkluZGV4fSx0Nj1mdW5jdGlvbihlKXtyZXR1cm5cIklOUFVUXCI9PT1lLnRhZ05hbWV9LHQ5PWZ1bmN0aW9uKGUsbil7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5jaGVja2VkJiZlW3RdLmZvcm09PT1uKXJldHVybiBlW3RdfSx0OD1mdW5jdGlvbihlKXtpZighZS5uYW1lKXJldHVybiEwO3ZhciBuLHQ9ZS5mb3JtfHx0UShlKSxyPWZ1bmN0aW9uKGUpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJytlKydcIl0nKX07aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LkNTUyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUpbj1yKHdpbmRvdy5DU1MuZXNjYXBlKGUubmFtZSkpO2Vsc2UgdHJ5e249cihlLm5hbWUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKFwiTG9va3MgbGlrZSB5b3UgaGF2ZSBhIHJhZGlvIGJ1dHRvbiB3aXRoIGEgbmFtZSBhdHRyaWJ1dGUgY29udGFpbmluZyBpbnZhbGlkIENTUyBzZWxlY3RvciBjaGFyYWN0ZXJzIGFuZCBuZWVkIHRoZSBDU1MuZXNjYXBlIHBvbHlmaWxsOiAlc1wiLGUubWVzc2FnZSksITF9dmFyIG89dDkobixlLmZvcm0pO3JldHVybiFvfHxvPT09ZX0sdDc9ZnVuY3Rpb24oZSl7cmV0dXJuIHQ2KGUpJiZcInJhZGlvXCI9PT1lLnR5cGUmJiF0OChlKX0scmU9ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLG8sYSxpLGwscz1lJiZ0UShlKSxjPW51bGw9PShuPXMpP3ZvaWQgMDpuLmhvc3QsdT0hMTtpZihzJiZzIT09ZSlmb3IodT0hIShudWxsIT0odD1jKSYmbnVsbCE9KHI9dC5vd25lckRvY3VtZW50KSYmci5jb250YWlucyhjKXx8bnVsbCE9ZSYmbnVsbCE9KG89ZS5vd25lckRvY3VtZW50KSYmby5jb250YWlucyhlKSk7IXUmJmM7KXU9ISEobnVsbCE9KGk9Yz1udWxsPT0oYT1zPXRRKGMpKT92b2lkIDA6YS5ob3N0KSYmbnVsbCE9KGw9aS5vd25lckRvY3VtZW50KSYmbC5jb250YWlucyhjKSk7cmV0dXJuIHV9LHJuPWZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdD1uLndpZHRoLHI9bi5oZWlnaHQ7cmV0dXJuIDA9PT10JiYwPT09cn0scnQ9ZnVuY3Rpb24oZSxuKXt2YXIgdD1uLmRpc3BsYXlDaGVjayxyPW4uZ2V0U2hhZG93Um9vdDtpZihcImhpZGRlblwiPT09Z2V0Q29tcHV0ZWRTdHlsZShlKS52aXNpYmlsaXR5KXJldHVybiEwO3ZhciBvPXRLLmNhbGwoZSxcImRldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlXCIpP2UucGFyZW50RWxlbWVudDplO2lmKHRLLmNhbGwobyxcImRldGFpbHM6bm90KFtvcGVuXSkgKlwiKSlyZXR1cm4hMDtpZih0JiZcImZ1bGxcIiE9PXQmJlwibGVnYWN5LWZ1bGxcIiE9PXQpe2lmKFwibm9uLXplcm8tYXJlYVwiPT09dClyZXR1cm4gcm4oZSl9ZWxzZXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXtmb3IodmFyIGE9ZTtlOyl7dmFyIGk9ZS5wYXJlbnRFbGVtZW50LGw9dFEoZSk7aWYoaSYmIWkuc2hhZG93Um9vdCYmITA9PT1yKGkpKXJldHVybiBybihlKTtlPWUuYXNzaWduZWRTbG90P2UuYXNzaWduZWRTbG90Oml8fGw9PT1lLm93bmVyRG9jdW1lbnQ/aTpsLmhvc3R9ZT1hfWlmKHJlKGUpKXJldHVybiFlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoO2lmKFwibGVnYWN5LWZ1bGxcIiE9PXQpcmV0dXJuITB9cmV0dXJuITF9LHJyPWZ1bmN0aW9uKGUpe2lmKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChlLnRhZ05hbWUpKWZvcih2YXIgbj1lLnBhcmVudEVsZW1lbnQ7bjspe2lmKFwiRklFTERTRVRcIj09PW4udGFnTmFtZSYmbi5kaXNhYmxlZCl7Zm9yKHZhciB0PTA7dDxuLmNoaWxkcmVuLmxlbmd0aDt0Kyspe3ZhciByPW4uY2hpbGRyZW4uaXRlbSh0KTtpZihcIkxFR0VORFwiPT09ci50YWdOYW1lKXJldHVybiEhdEsuY2FsbChuLFwiZmllbGRzZXRbZGlzYWJsZWRdICpcIil8fCFyLmNvbnRhaW5zKGUpfXJldHVybiEwfW49bi5wYXJlbnRFbGVtZW50fXJldHVybiExfSxybz1mdW5jdGlvbihlLG4pe3JldHVybiEobi5kaXNhYmxlZHx8dEcobil8fHQ2KG4pJiZcImhpZGRlblwiPT09bi50eXBlfHxydChuLGUpfHxcIkRFVEFJTFNcIj09PW4udGFnTmFtZSYmQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KG4uY2hpbGRyZW4pLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuXCJTVU1NQVJZXCI9PT1lLnRhZ05hbWV9KXx8cnIobikpfSxyYT1mdW5jdGlvbihlLG4pe3JldHVybiEodDcobil8fDA+dDQobikpJiYhIXJvKGUsbil9LHJpPWZ1bmN0aW9uKGUpe3ZhciBuPXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApO3JldHVybiEhaXNOYU4obil8fCEhKG4+PTApfSxybD1mdW5jdGlvbiBlKG4pe3ZhciB0PVtdLHI9W107cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuLG8pe3ZhciBhPSEhbi5zY29wZVBhcmVudCxpPWE/bi5zY29wZVBhcmVudDpuLGw9dDUoaSxhKSxzPWE/ZShuLmNhbmRpZGF0ZXMpOmk7MD09PWw/YT90LnB1c2guYXBwbHkodCxzKTp0LnB1c2goaSk6ci5wdXNoKHtkb2N1bWVudE9yZGVyOm8sdGFiSW5kZXg6bCxpdGVtOm4saXNTY29wZTphLGNvbnRlbnQ6c30pfSksci5zb3J0KHQzKS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi5pc1Njb3BlP2UucHVzaC5hcHBseShlLG4uY29udGVudCk6ZS5wdXNoKG4uY29udGVudCksZX0sW10pLmNvbmNhdCh0KX0scnM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcmwoKG49bnx8e30pLmdldFNoYWRvd1Jvb3Q/dDEoW2VdLG4uaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOnJhLmJpbmQobnVsbCxuKSxmbGF0dGVuOiExLGdldFNoYWRvd1Jvb3Q6bi5nZXRTaGFkb3dSb290LHNoYWRvd1Jvb3RGaWx0ZXI6cml9KTp0MChlLG4uaW5jbHVkZUNvbnRhaW5lcixyYS5iaW5kKG51bGwsbikpKX0scmM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4obj1ufHx7fSkuZ2V0U2hhZG93Um9vdD90MShbZV0sbi5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6cm8uYmluZChudWxsLG4pLGZsYXR0ZW46ITAsZ2V0U2hhZG93Um9vdDpuLmdldFNoYWRvd1Jvb3R9KTp0MChlLG4uaW5jbHVkZUNvbnRhaW5lcixyby5iaW5kKG51bGwsbikpfSxydT1mdW5jdGlvbihlLG4pe2lmKG49bnx8e30sIWUpdGhyb3cgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiExIT09dEsuY2FsbChlLHRZKSYmcmEobixlKX07bGV0IHJkPSgpPT4oe2dldFNoYWRvd1Jvb3Q6ITAsZGlzcGxheUNoZWNrOlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlc2l6ZU9ic2VydmVyJiZSZXNpemVPYnNlcnZlci50b1N0cmluZygpLmluY2x1ZGVzKFwiW25hdGl2ZSBjb2RlXVwiKT9cImZ1bGxcIjpcIm5vbmVcIn0pO2Z1bmN0aW9uIHJmKGUsbil7bGV0IHQ9cnMoZSxyZCgpKSxyPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybjtsZXQgbz1lWihlUShlKSksYT10LmluZGV4T2Yobyk7cmV0dXJuIHRbLTE9PT1hPzE9PT1uPzA6ci0xOmErbl19ZnVuY3Rpb24gcnAoZSl7cmV0dXJuIHJmKGVRKGUpLmJvZHksMSl8fGV9ZnVuY3Rpb24gcmgoZSl7cmV0dXJuIHJmKGVRKGUpLmJvZHksLTEpfHxlfWZ1bmN0aW9uIHJnKGUsbil7bGV0IHQ9bnx8ZS5jdXJyZW50VGFyZ2V0LHI9ZS5yZWxhdGVkVGFyZ2V0O3JldHVybiFyfHwhZVkodCxyKX1mdW5jdGlvbiBybShlKXtlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10YWJpbmRleF1cIikuZm9yRWFjaChlPT57bGV0IG49ZS5kYXRhc2V0LnRhYmluZGV4O2RlbGV0ZSBlLmRhdGFzZXQudGFiaW5kZXgsbj9lLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsbik6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKX0pfWxldCBydj1DLmNyZWF0ZUNvbnRleHQobnVsbCkscmI9KCk9PkMudXNlQ29udGV4dChydikscnk9ZTEoXCJwb3J0YWxcIik7ZnVuY3Rpb24gcngoZT17fSl7bGV0e2lkOm4scm9vdDp0fT1lLHI9SCgpLG89cmIoKSxbYSxpXT1DLnVzZVN0YXRlKG51bGwpLGw9Qy51c2VSZWYobnVsbCk7cmV0dXJuIEYoKCk9PigpPT57YT8ucmVtb3ZlKCkscXVldWVNaWNyb3Rhc2soKCk9PntsLmN1cnJlbnQ9bnVsbH0pfSxbYV0pLEYoKCk9PntpZighcnx8bC5jdXJyZW50KXJldHVybjtsZXQgZT1uP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKG4pOm51bGw7aWYoIWUpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dC5pZD1yLHQuc2V0QXR0cmlidXRlKHJ5LFwiXCIpLGUuYXBwZW5kQ2hpbGQodCksbC5jdXJyZW50PXQsaSh0KX0sW24scl0pLEYoKCk9PntpZihudWxsPT09dHx8IXJ8fGwuY3VycmVudClyZXR1cm47bGV0IGU9dHx8bz8ucG9ydGFsTm9kZTtlJiYhZWUoZSkmJihlPWUuY3VycmVudCksZT1lfHxkb2N1bWVudC5ib2R5O2xldCBhPW51bGw7biYmKChhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlkPW4sZS5hcHBlbmRDaGlsZChhKSk7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtzLmlkPXIscy5zZXRBdHRyaWJ1dGUocnksXCJcIiksKGU9YXx8ZSkuYXBwZW5kQ2hpbGQocyksbC5jdXJyZW50PXMsaShzKX0sW24sdCxyLG9dKSxhfWZ1bmN0aW9uIHJ3KGUpe2xldHtjaGlsZHJlbjpuLGlkOnQscm9vdDpyLHByZXNlcnZlVGFiT3JkZXI6bz0hMH09ZSxhPXJ4KHtpZDp0LHJvb3Q6cn0pLFtpLHNdPUMudXNlU3RhdGUobnVsbCksYz1DLnVzZVJlZihudWxsKSx1PUMudXNlUmVmKG51bGwpLGQ9Qy51c2VSZWYobnVsbCksZj1DLnVzZVJlZihudWxsKSxwPWk/Lm1vZGFsLGg9aT8ub3BlbixnPSEhaSYmIWkubW9kYWwmJmkub3BlbiYmbyYmISEocnx8YSk7cmV0dXJuIEMudXNlRWZmZWN0KCgpPT57aWYoYSYmbyYmIXApcmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixlLCEwKSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLGUsITApLCgpPT57YS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNpblwiLGUsITApLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsZSwhMCl9O2Z1bmN0aW9uIGUoZSl7YSYmcmcoZSkmJihcImZvY3VzaW5cIj09PWUudHlwZT9ybTpmdW5jdGlvbihlKXtycyhlLHJkKCkpLmZvckVhY2goZT0+e2UuZGF0YXNldC50YWJpbmRleD1lLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpfHxcIlwiLGUuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixcIi0xXCIpfSl9KShhKX19LFthLG8scF0pLEMudXNlRWZmZWN0KCgpPT57YSYmKGh8fHJtKGEpKX0sW2gsYV0pLCgwLGwuanN4cykocnYuUHJvdmlkZXIse3ZhbHVlOkMudXNlTWVtbygoKT0+KHtwcmVzZXJ2ZVRhYk9yZGVyOm8sYmVmb3JlT3V0c2lkZVJlZjpjLGFmdGVyT3V0c2lkZVJlZjp1LGJlZm9yZUluc2lkZVJlZjpkLGFmdGVySW5zaWRlUmVmOmYscG9ydGFsTm9kZTphLHNldEZvY3VzTWFuYWdlclN0YXRlOnN9KSxbbyxhXSksY2hpbGRyZW46W2cmJmEmJigwLGwuanN4KSh0Wix7XCJkYXRhLXR5cGVcIjpcIm91dHNpZGVcIixyZWY6YyxvbkZvY3VzOmU9PntpZihyZyhlLGEpKWQuY3VycmVudD8uZm9jdXMoKTtlbHNle2xldCBlPXJoKGk/aS5kb21SZWZlcmVuY2U6bnVsbCk7ZT8uZm9jdXMoKX19fSksZyYmYSYmKDAsbC5qc3gpKFwic3BhblwiLHtcImFyaWEtb3duc1wiOmEuaWQsc3R5bGU6dCR9KSxhJiZFLmNyZWF0ZVBvcnRhbChuLGEpLGcmJmEmJigwLGwuanN4KSh0Wix7XCJkYXRhLXR5cGVcIjpcIm91dHNpZGVcIixyZWY6dSxvbkZvY3VzOmU9PntpZihyZyhlLGEpKWYuY3VycmVudD8uZm9jdXMoKTtlbHNle2xldCBuPXJwKGk/aS5kb21SZWZlcmVuY2U6bnVsbCk7bj8uZm9jdXMoKSxpPy5jbG9zZU9uRm9jdXNPdXQmJmk/Lm9uT3BlbkNoYW5nZSghMSxlLm5hdGl2ZUV2ZW50LFwiZm9jdXMtb3V0XCIpfX19KV19KX1sZXQgcmo9Qy5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gcmsoZSl7bGV0e2NoaWxkcmVuOm4sa2VlcE1vdW50ZWQ6dD0hMSxjb250YWluZXI6cn09ZSx7bW91bnRlZDpvfT1uMCgpO3JldHVybiBvfHx0PygwLGwuanN4KShyai5Qcm92aWRlcix7dmFsdWU6dCxjaGlsZHJlbjooMCxsLmpzeCkocncse3Jvb3Q6cixjaGlsZHJlbjpufSl9KTpudWxsfWxldCByQT1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiByTyhlLG4sdCl7bGV0IHIse3JlZmVyZW5jZTpvLGZsb2F0aW5nOmF9PWUsaT1uRShuKSxsPW5PKG5FKG4pKSxzPW5DKGwpLGM9bmsobiksdT1cInlcIj09PWksZD1vLngrby53aWR0aC8yLWEud2lkdGgvMixmPW8ueStvLmhlaWdodC8yLWEuaGVpZ2h0LzIscD1vW3NdLzItYVtzXS8yO3N3aXRjaChjKXtjYXNlXCJ0b3BcIjpyPXt4OmQseTpvLnktYS5oZWlnaHR9O2JyZWFrO2Nhc2VcImJvdHRvbVwiOnI9e3g6ZCx5Om8ueStvLmhlaWdodH07YnJlYWs7Y2FzZVwicmlnaHRcIjpyPXt4Om8ueCtvLndpZHRoLHk6Zn07YnJlYWs7Y2FzZVwibGVmdFwiOnI9e3g6by54LWEud2lkdGgseTpmfTticmVhaztkZWZhdWx0OnI9e3g6by54LHk6by55fX1zd2l0Y2gobkEobikpe2Nhc2VcInN0YXJ0XCI6cltsXS09cCoodCYmdT8tMToxKTticmVhaztjYXNlXCJlbmRcIjpyW2xdKz1wKih0JiZ1Py0xOjEpfXJldHVybiByfWxldCByQz1hc3luYyhlLG4sdCk9PntsZXR7cGxhY2VtZW50OnI9XCJib3R0b21cIixzdHJhdGVneTpvPVwiYWJzb2x1dGVcIixtaWRkbGV3YXJlOmE9W10scGxhdGZvcm06aX09dCxsPWEuZmlsdGVyKEJvb2xlYW4pLHM9YXdhaXQgKG51bGw9PWkuaXNSVEw/dm9pZCAwOmkuaXNSVEwobikpLGM9YXdhaXQgaS5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTplLGZsb2F0aW5nOm4sc3RyYXRlZ3k6b30pLHt4OnUseTpkfT1yTyhjLHIscyksZj1yLHA9e30saD0wO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCsrKXtsZXR7bmFtZTphLGZuOmd9PWxbdF0se3g6bSx5OnYsZGF0YTpiLHJlc2V0Onl9PWF3YWl0IGcoe3g6dSx5OmQsaW5pdGlhbFBsYWNlbWVudDpyLHBsYWNlbWVudDpmLHN0cmF0ZWd5Om8sbWlkZGxld2FyZURhdGE6cCxyZWN0czpjLHBsYXRmb3JtOmksZWxlbWVudHM6e3JlZmVyZW5jZTplLGZsb2F0aW5nOm59fSk7dT1udWxsIT1tP206dSxkPW51bGwhPXY/djpkLHA9ey4uLnAsW2FdOnsuLi5wW2FdLC4uLmJ9fSx5JiZoPD01MCYmKGgrKyxcIm9iamVjdFwiPT10eXBlb2YgeSYmKHkucGxhY2VtZW50JiYoZj15LnBsYWNlbWVudCkseS5yZWN0cyYmKGM9ITA9PT15LnJlY3RzP2F3YWl0IGkuZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzpuLHN0cmF0ZWd5Om99KTp5LnJlY3RzKSx7eDp1LHk6ZH09ck8oYyxmLHMpKSx0PS0xKX1yZXR1cm57eDp1LHk6ZCxwbGFjZW1lbnQ6ZixzdHJhdGVneTpvLG1pZGRsZXdhcmVEYXRhOnB9fTthc3luYyBmdW5jdGlvbiByUyhlLG4pe3ZhciB0O3ZvaWQgMD09PW4mJihuPXt9KTtsZXR7eDpyLHk6byxwbGF0Zm9ybTphLHJlY3RzOmksZWxlbWVudHM6bCxzdHJhdGVneTpzfT1lLHtib3VuZGFyeTpjPVwiY2xpcHBpbmdBbmNlc3RvcnNcIixyb290Qm91bmRhcnk6dT1cInZpZXdwb3J0XCIsZWxlbWVudENvbnRleHQ6ZD1cImZsb2F0aW5nXCIsYWx0Qm91bmRhcnk6Zj0hMSxwYWRkaW5nOnA9MH09bmoobixlKSxoPW5OKHApLGc9bFtmP1wiZmxvYXRpbmdcIj09PWQ/XCJyZWZlcmVuY2VcIjpcImZsb2F0aW5nXCI6ZF0sbT1uRChhd2FpdCBhLmdldENsaXBwaW5nUmVjdCh7ZWxlbWVudDpudWxsPT0odD1hd2FpdCAobnVsbD09YS5pc0VsZW1lbnQ/dm9pZCAwOmEuaXNFbGVtZW50KGcpKSl8fHQ/ZzpnLmNvbnRleHRFbGVtZW50fHxhd2FpdCAobnVsbD09YS5nZXREb2N1bWVudEVsZW1lbnQ/dm9pZCAwOmEuZ2V0RG9jdW1lbnRFbGVtZW50KGwuZmxvYXRpbmcpKSxib3VuZGFyeTpjLHJvb3RCb3VuZGFyeTp1LHN0cmF0ZWd5OnN9KSksdj1cImZsb2F0aW5nXCI9PT1kP3t4OnIseTpvLHdpZHRoOmkuZmxvYXRpbmcud2lkdGgsaGVpZ2h0OmkuZmxvYXRpbmcuaGVpZ2h0fTppLnJlZmVyZW5jZSxiPWF3YWl0IChudWxsPT1hLmdldE9mZnNldFBhcmVudD92b2lkIDA6YS5nZXRPZmZzZXRQYXJlbnQobC5mbG9hdGluZykpLHk9YXdhaXQgKG51bGw9PWEuaXNFbGVtZW50P3ZvaWQgMDphLmlzRWxlbWVudChiKSkmJmF3YWl0IChudWxsPT1hLmdldFNjYWxlP3ZvaWQgMDphLmdldFNjYWxlKGIpKXx8e3g6MSx5OjF9LHg9bkQoYS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBhLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtlbGVtZW50czpsLHJlY3Q6dixvZmZzZXRQYXJlbnQ6YixzdHJhdGVneTpzfSk6dik7cmV0dXJue3RvcDoobS50b3AteC50b3AraC50b3ApL3kueSxib3R0b206KHguYm90dG9tLW0uYm90dG9tK2guYm90dG9tKS95LnksbGVmdDoobS5sZWZ0LXgubGVmdCtoLmxlZnQpL3kueCxyaWdodDooeC5yaWdodC1tLnJpZ2h0K2gucmlnaHQpL3kueH19ZnVuY3Rpb24gckUoZSxuKXtyZXR1cm57dG9wOmUudG9wLW4uaGVpZ2h0LHJpZ2h0OmUucmlnaHQtbi53aWR0aCxib3R0b206ZS5ib3R0b20tbi5oZWlnaHQsbGVmdDplLmxlZnQtbi53aWR0aH19ZnVuY3Rpb24gcl8oZSl7cmV0dXJuIG5oLnNvbWUobj0+ZVtuXT49MCl9bGV0IHJQPW5ldyBTZXQoW1wibGVmdFwiLFwidG9wXCJdKTthc3luYyBmdW5jdGlvbiByeihlLG4pe2xldHtwbGFjZW1lbnQ6dCxwbGF0Zm9ybTpyLGVsZW1lbnRzOm99PWUsYT1hd2FpdCAobnVsbD09ci5pc1JUTD92b2lkIDA6ci5pc1JUTChvLmZsb2F0aW5nKSksaT1uayh0KSxsPW5BKHQpLHM9XCJ5XCI9PT1uRSh0KSxjPXJQLmhhcyhpKT8tMToxLHU9YSYmcz8tMToxLGQ9bmoobixlKSx7bWFpbkF4aXM6Zixjcm9zc0F4aXM6cCxhbGlnbm1lbnRBeGlzOmh9PVwibnVtYmVyXCI9PXR5cGVvZiBkP3ttYWluQXhpczpkLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOmQubWFpbkF4aXN8fDAsY3Jvc3NBeGlzOmQuY3Jvc3NBeGlzfHwwLGFsaWdubWVudEF4aXM6ZC5hbGlnbm1lbnRBeGlzfTtyZXR1cm4gbCYmXCJudW1iZXJcIj09dHlwZW9mIGgmJihwPVwiZW5kXCI9PT1sPy0xKmg6aCkscz97eDpwKnUseTpmKmN9Ont4OmYqYyx5OnAqdX19ZnVuY3Rpb24gckwoZSl7bGV0IG49ZWcoZSksdD1wYXJzZUZsb2F0KG4ud2lkdGgpfHwwLHI9cGFyc2VGbG9hdChuLmhlaWdodCl8fDAsbz1lbihlKSxhPW8/ZS5vZmZzZXRXaWR0aDp0LGk9bz9lLm9mZnNldEhlaWdodDpyLGw9bnYodCkhPT1hfHxudihyKSE9PWk7cmV0dXJuIGwmJih0PWEscj1pKSx7d2lkdGg6dCxoZWlnaHQ6ciwkOmx9fWZ1bmN0aW9uIHJUKGUpe3JldHVybiBlZShlKT9lOmUuY29udGV4dEVsZW1lbnR9ZnVuY3Rpb24gclIoZSl7bGV0IG49clQoZSk7aWYoIWVuKG4pKXJldHVybiBueSgxKTtsZXQgdD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpyLGhlaWdodDpvLCQ6YX09ckwobiksaT0oYT9udih0LndpZHRoKTp0LndpZHRoKS9yLGw9KGE/bnYodC5oZWlnaHQpOnQuaGVpZ2h0KS9vO3JldHVybiBpJiZOdW1iZXIuaXNGaW5pdGUoaSl8fChpPTEpLGwmJk51bWJlci5pc0Zpbml0ZShsKXx8KGw9MSkse3g6aSx5Omx9fWxldCByTj1ueSgwKTtmdW5jdGlvbiByRChlKXtsZXQgbj1RKGUpO3JldHVybiBlZigpJiZuLnZpc3VhbFZpZXdwb3J0P3t4Om4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCx5Om4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wfTpyTn1mdW5jdGlvbiByQihlLG4sdCxyKXt2YXIgbzt2b2lkIDA9PT1uJiYobj0hMSksdm9pZCAwPT09dCYmKHQ9ITEpO2xldCBhPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1yVChlKSxsPW55KDEpO24mJihyP2VlKHIpJiYobD1yUihyKSk6bD1yUihlKSk7bGV0IHM9KHZvaWQgMD09PShvPXQpJiYobz0hMSksciYmKCFvfHxyPT09UShpKSkmJm8pP3JEKGkpOm55KDApLGM9KGEubGVmdCtzLngpL2wueCx1PShhLnRvcCtzLnkpL2wueSxkPWEud2lkdGgvbC54LGY9YS5oZWlnaHQvbC55O2lmKGkpe2xldCBlPVEoaSksbj1yJiZlZShyKT9RKHIpOnIsdD1lLG89ZXkodCk7Zm9yKDtvJiZyJiZuIT09dDspe2xldCBlPXJSKG8pLG49by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWVnKG8pLGE9bi5sZWZ0KyhvLmNsaWVudExlZnQrcGFyc2VGbG9hdChyLnBhZGRpbmdMZWZ0KSkqZS54LGk9bi50b3ArKG8uY2xpZW50VG9wK3BhcnNlRmxvYXQoci5wYWRkaW5nVG9wKSkqZS55O2MqPWUueCx1Kj1lLnksZCo9ZS54LGYqPWUueSxjKz1hLHUrPWksbz1leSh0PVEobykpfX1yZXR1cm4gbkQoe3dpZHRoOmQsaGVpZ2h0OmYseDpjLHk6dX0pfWZ1bmN0aW9uIHJNKGUsbil7bGV0IHQ9ZW0oZSkuc2Nyb2xsTGVmdDtyZXR1cm4gbj9uLmxlZnQrdDpyQihHKGUpKS5sZWZ0K3R9ZnVuY3Rpb24gckkoZSxuLHQpe3ZvaWQgMD09PXQmJih0PSExKTtsZXQgcj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt4OnIubGVmdCtuLnNjcm9sbExlZnQtKHQ/MDpyTShlLHIpKSx5OnIudG9wK24uc2Nyb2xsVG9wfX1sZXQgckg9bmV3IFNldChbXCJhYnNvbHV0ZVwiLFwiZml4ZWRcIl0pO2Z1bmN0aW9uIHJGKGUsbix0KXtsZXQgcjtpZihcInZpZXdwb3J0XCI9PT1uKXI9ZnVuY3Rpb24oZSxuKXtsZXQgdD1RKGUpLHI9RyhlKSxvPXQudmlzdWFsVmlld3BvcnQsYT1yLmNsaWVudFdpZHRoLGk9ci5jbGllbnRIZWlnaHQsbD0wLHM9MDtpZihvKXthPW8ud2lkdGgsaT1vLmhlaWdodDtsZXQgZT1lZigpOyghZXx8ZSYmXCJmaXhlZFwiPT09bikmJihsPW8ub2Zmc2V0TGVmdCxzPW8ub2Zmc2V0VG9wKX1yZXR1cm57d2lkdGg6YSxoZWlnaHQ6aSx4OmwseTpzfX0oZSx0KTtlbHNlIGlmKFwiZG9jdW1lbnRcIj09PW4pcj1mdW5jdGlvbihlKXtsZXQgbj1HKGUpLHQ9ZW0oZSkscj1lLm93bmVyRG9jdW1lbnQuYm9keSxvPW5tKG4uc2Nyb2xsV2lkdGgsbi5jbGllbnRXaWR0aCxyLnNjcm9sbFdpZHRoLHIuY2xpZW50V2lkdGgpLGE9bm0obi5zY3JvbGxIZWlnaHQsbi5jbGllbnRIZWlnaHQsci5zY3JvbGxIZWlnaHQsci5jbGllbnRIZWlnaHQpLGk9LXQuc2Nyb2xsTGVmdCtyTShlKSxsPS10LnNjcm9sbFRvcDtyZXR1cm5cInJ0bFwiPT09ZWcocikuZGlyZWN0aW9uJiYoaSs9bm0obi5jbGllbnRXaWR0aCxyLmNsaWVudFdpZHRoKS1vKSx7d2lkdGg6byxoZWlnaHQ6YSx4OmkseTpsfX0oRyhlKSk7ZWxzZSBpZihlZShuKSlyPWZ1bmN0aW9uKGUsbil7bGV0IHQ9ckIoZSwhMCxcImZpeGVkXCI9PT1uKSxyPXQudG9wK2UuY2xpZW50VG9wLG89dC5sZWZ0K2UuY2xpZW50TGVmdCxhPWVuKGUpP3JSKGUpOm55KDEpLGk9ZS5jbGllbnRXaWR0aCphLngsbD1lLmNsaWVudEhlaWdodCphLnk7cmV0dXJue3dpZHRoOmksaGVpZ2h0OmwseDpvKmEueCx5OnIqYS55fX0obix0KTtlbHNle2xldCB0PXJEKGUpO3I9e3g6bi54LXQueCx5Om4ueS10Lnksd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHR9fXJldHVybiBuRChyKX1mdW5jdGlvbiByVShlKXtyZXR1cm5cInN0YXRpY1wiPT09ZWcoZSkucG9zaXRpb259ZnVuY3Rpb24gclYoZSxuKXtpZighZW4oZSl8fFwiZml4ZWRcIj09PWVnKGUpLnBvc2l0aW9uKXJldHVybiBudWxsO2lmKG4pcmV0dXJuIG4oZSk7bGV0IHQ9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIEcoZSk9PT10JiYodD10Lm93bmVyRG9jdW1lbnQuYm9keSksdH1mdW5jdGlvbiBycShlLG4pe3ZhciB0O2xldCByPVEoZSk7aWYoZWwoZSkpcmV0dXJuIHI7aWYoIWVuKGUpKXtsZXQgbj1ldihlKTtmb3IoO24mJiFlaChuKTspe2lmKGVlKG4pJiYhclUobikpcmV0dXJuIG47bj1ldihuKX1yZXR1cm4gcn1sZXQgbz1yVihlLG4pO2Zvcig7byYmKHQ9byxlYS5oYXMoSyh0KSkpJiZyVShvKTspbz1yVihvLG4pO3JldHVybiBvJiZlaChvKSYmclUobykmJiFlZChvKT9yOm98fGZ1bmN0aW9uKGUpe2xldCBuPWV2KGUpO2Zvcig7ZW4obikmJiFlaChuKTspe2lmKGVkKG4pKXJldHVybiBuO2lmKGVsKG4pKWJyZWFrO249ZXYobil9cmV0dXJuIG51bGx9KGUpfHxyfWxldCByVz1hc3luYyBmdW5jdGlvbihlKXtsZXQgbj10aGlzLmdldE9mZnNldFBhcmVudHx8cnEsdD10aGlzLmdldERpbWVuc2lvbnMscj1hd2FpdCB0KGUuZmxvYXRpbmcpO3JldHVybntyZWZlcmVuY2U6ZnVuY3Rpb24oZSxuLHQpe2xldCByPWVuKG4pLG89RyhuKSxhPVwiZml4ZWRcIj09PXQsaT1yQihlLCEwLGEsbiksbD17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxzPW55KDApO2lmKHJ8fCFyJiYhYSlpZigoXCJib2R5XCIhPT1LKG4pfHxlbyhvKSkmJihsPWVtKG4pKSxyKXtsZXQgZT1yQihuLCEwLGEsbik7cy54PWUueCtuLmNsaWVudExlZnQscy55PWUueStuLmNsaWVudFRvcH1lbHNlIG8mJihzLng9ck0obykpO2EmJiFyJiZvJiYocy54PXJNKG8pKTtsZXQgYz0hb3x8cnx8YT9ueSgwKTpySShvLGwpO3JldHVybnt4OmkubGVmdCtsLnNjcm9sbExlZnQtcy54LWMueCx5OmkudG9wK2wuc2Nyb2xsVG9wLXMueS1jLnksd2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9fShlLnJlZmVyZW5jZSxhd2FpdCBuKGUuZmxvYXRpbmcpLGUuc3RyYXRlZ3kpLGZsb2F0aW5nOnt4OjAseTowLHdpZHRoOnIud2lkdGgsaGVpZ2h0OnIuaGVpZ2h0fX19LHIkPXtjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdDpmdW5jdGlvbihlKXtsZXR7ZWxlbWVudHM6bixyZWN0OnQsb2Zmc2V0UGFyZW50OnIsc3RyYXRlZ3k6b309ZSxhPVwiZml4ZWRcIj09PW8saT1HKHIpLGw9ISFuJiZlbChuLmZsb2F0aW5nKTtpZihyPT09aXx8bCYmYSlyZXR1cm4gdDtsZXQgcz17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxjPW55KDEpLHU9bnkoMCksZD1lbihyKTtpZigoZHx8IWQmJiFhKSYmKChcImJvZHlcIiE9PUsocil8fGVvKGkpKSYmKHM9ZW0ocikpLGVuKHIpKSl7bGV0IGU9ckIocik7Yz1yUihyKSx1Lng9ZS54K3IuY2xpZW50TGVmdCx1Lnk9ZS55K3IuY2xpZW50VG9wfWxldCBmPSFpfHxkfHxhP255KDApOnJJKGkscywhMCk7cmV0dXJue3dpZHRoOnQud2lkdGgqYy54LGhlaWdodDp0LmhlaWdodCpjLnkseDp0LngqYy54LXMuc2Nyb2xsTGVmdCpjLngrdS54K2YueCx5OnQueSpjLnktcy5zY3JvbGxUb3AqYy55K3UueStmLnl9fSxnZXREb2N1bWVudEVsZW1lbnQ6RyxnZXRDbGlwcGluZ1JlY3Q6ZnVuY3Rpb24oZSl7bGV0e2VsZW1lbnQ6bixib3VuZGFyeTp0LHJvb3RCb3VuZGFyeTpyLHN0cmF0ZWd5Om99PWUsYT1bLi4uXCJjbGlwcGluZ0FuY2VzdG9yc1wiPT09dD9lbChuKT9bXTpmdW5jdGlvbihlLG4pe2xldCB0PW4uZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7bGV0IHI9ZWIoZSxbXSwhMSkuZmlsdGVyKGU9PmVlKGUpJiZcImJvZHlcIiE9PUsoZSkpLG89bnVsbCxhPVwiZml4ZWRcIj09PWVnKGUpLnBvc2l0aW9uLGk9YT9ldihlKTplO2Zvcig7ZWUoaSkmJiFlaChpKTspe2xldCBuPWVnKGkpLHQ9ZWQoaSk7dHx8XCJmaXhlZFwiIT09bi5wb3NpdGlvbnx8KG89bnVsbCksKGE/IXQmJiFvOiF0JiZcInN0YXRpY1wiPT09bi5wb3NpdGlvbiYmISFvJiZySC5oYXMoby5wb3NpdGlvbil8fGVvKGkpJiYhdCYmZnVuY3Rpb24gZShuLHQpe2xldCByPWV2KG4pO3JldHVybiEocj09PXR8fCFlZShyKXx8ZWgocikpJiYoXCJmaXhlZFwiPT09ZWcocikucG9zaXRpb258fGUocix0KSl9KGUsaSkpP3I9ci5maWx0ZXIoZT0+ZSE9PWkpOm89bixpPWV2KGkpfXJldHVybiBuLnNldChlLHIpLHJ9KG4sdGhpcy5fYyk6W10uY29uY2F0KHQpLHJdLGk9YVswXSxsPWEucmVkdWNlKChlLHQpPT57bGV0IHI9ckYobix0LG8pO3JldHVybiBlLnRvcD1ubShyLnRvcCxlLnRvcCksZS5yaWdodD1uZyhyLnJpZ2h0LGUucmlnaHQpLGUuYm90dG9tPW5nKHIuYm90dG9tLGUuYm90dG9tKSxlLmxlZnQ9bm0oci5sZWZ0LGUubGVmdCksZX0sckYobixpLG8pKTtyZXR1cm57d2lkdGg6bC5yaWdodC1sLmxlZnQsaGVpZ2h0OmwuYm90dG9tLWwudG9wLHg6bC5sZWZ0LHk6bC50b3B9fSxnZXRPZmZzZXRQYXJlbnQ6cnEsZ2V0RWxlbWVudFJlY3RzOnJXLGdldENsaWVudFJlY3RzOmZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5mcm9tKGUuZ2V0Q2xpZW50UmVjdHMoKSl9LGdldERpbWVuc2lvbnM6ZnVuY3Rpb24oZSl7bGV0e3dpZHRoOm4saGVpZ2h0OnR9PXJMKGUpO3JldHVybnt3aWR0aDpuLGhlaWdodDp0fX0sZ2V0U2NhbGU6clIsaXNFbGVtZW50OmVlLGlzUlRMOmZ1bmN0aW9uKGUpe3JldHVyblwicnRsXCI9PT1lZyhlKS5kaXJlY3Rpb259fTtmdW5jdGlvbiByWihlLG4pe3JldHVybiBlLng9PT1uLngmJmUueT09PW4ueSYmZS53aWR0aD09PW4ud2lkdGgmJmUuaGVpZ2h0PT09bi5oZWlnaHR9ZnVuY3Rpb24gclkoZSxuLHQscil7bGV0IG87dm9pZCAwPT09ciYmKHI9e30pO2xldHthbmNlc3RvclNjcm9sbDphPSEwLGFuY2VzdG9yUmVzaXplOmk9ITAsZWxlbWVudFJlc2l6ZTpsPVwiZnVuY3Rpb25cIj09dHlwZW9mIFJlc2l6ZU9ic2VydmVyLGxheW91dFNoaWZ0OnM9XCJmdW5jdGlvblwiPT10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIsYW5pbWF0aW9uRnJhbWU6Yz0hMX09cix1PXJUKGUpLGQ9YXx8aT9bLi4udT9lYih1KTpbXSwuLi5lYihuKV06W107ZC5mb3JFYWNoKGU9PnthJiZlLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0LHtwYXNzaXZlOiEwfSksaSYmZS5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdCl9KTtsZXQgZj11JiZzP2Z1bmN0aW9uKGUsbil7bGV0IHQscj1udWxsLG89RyhlKTtmdW5jdGlvbiBhKCl7dmFyIGU7Y2xlYXJUaW1lb3V0KHQpLG51bGw9PShlPXIpfHxlLmRpc2Nvbm5lY3QoKSxyPW51bGx9cmV0dXJuIWZ1bmN0aW9uIGkobCxzKXt2b2lkIDA9PT1sJiYobD0hMSksdm9pZCAwPT09cyYmKHM9MSksYSgpO2xldCBjPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse2xlZnQ6dSx0b3A6ZCx3aWR0aDpmLGhlaWdodDpwfT1jO2lmKGx8fG4oKSwhZnx8IXApcmV0dXJuO2xldCBoPW5iKGQpLGc9bmIoby5jbGllbnRXaWR0aC0odStmKSksbT17cm9vdE1hcmdpbjotaCtcInB4IFwiKy1nK1wicHggXCIrLW5iKG8uY2xpZW50SGVpZ2h0LShkK3ApKStcInB4IFwiKy1uYih1KStcInB4XCIsdGhyZXNob2xkOm5tKDAsbmcoMSxzKSl8fDF9LHY9ITA7ZnVuY3Rpb24gYihuKXtsZXQgcj1uWzBdLmludGVyc2VjdGlvblJhdGlvO2lmKHIhPT1zKXtpZighdilyZXR1cm4gaSgpO3I/aSghMSxyKTp0PXNldFRpbWVvdXQoKCk9PntpKCExLDFlLTcpfSwxZTMpfTEhPT1yfHxyWihjLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpfHxpKCksdj0hMX10cnl7cj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoYix7Li4ubSxyb290Om8ub3duZXJEb2N1bWVudH0pfWNhdGNoKGUpe3I9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGIsbSl9ci5vYnNlcnZlKGUpfSghMCksYX0odSx0KTpudWxsLHA9LTEsaD1udWxsO2wmJihoPW5ldyBSZXNpemVPYnNlcnZlcihlPT57bGV0W3JdPWU7ciYmci50YXJnZXQ9PT11JiZoJiYoaC51bm9ic2VydmUobiksY2FuY2VsQW5pbWF0aW9uRnJhbWUocCkscD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2YXIgZTtudWxsPT0oZT1oKXx8ZS5vYnNlcnZlKG4pfSkpLHQoKX0pLHUmJiFjJiZoLm9ic2VydmUodSksaC5vYnNlcnZlKG4pKTtsZXQgZz1jP3JCKGUpOm51bGw7cmV0dXJuIGMmJmZ1bmN0aW9uIG4oKXtsZXQgcj1yQihlKTtnJiYhclooZyxyKSYmdCgpLGc9cixvPXJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0oKSx0KCksKCk9Pnt2YXIgZTtkLmZvckVhY2goZT0+e2EmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHQpLGkmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQpfSksbnVsbD09Znx8ZigpLG51bGw9PShlPWgpfHxlLmRpc2Nvbm5lY3QoKSxoPW51bGwsYyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUobyl9fWxldCByWD1lPT4oe25hbWU6XCJhcnJvd1wiLG9wdGlvbnM6ZSxhc3luYyBmbihuKXtsZXR7eDp0LHk6cixwbGFjZW1lbnQ6byxyZWN0czphLHBsYXRmb3JtOmksZWxlbWVudHM6bCxtaWRkbGV3YXJlRGF0YTpzfT1uLHtlbGVtZW50OmMscGFkZGluZzp1PTB9PW5qKGUsbil8fHt9O2lmKG51bGw9PWMpcmV0dXJue307bGV0IGQ9bk4odSksZj17eDp0LHk6cn0scD1uTyhuRShvKSksaD1uQyhwKSxnPWF3YWl0IGkuZ2V0RGltZW5zaW9ucyhjKSxtPVwieVwiPT09cCx2PW0/XCJjbGllbnRIZWlnaHRcIjpcImNsaWVudFdpZHRoXCIsYj1hLnJlZmVyZW5jZVtoXSthLnJlZmVyZW5jZVtwXS1mW3BdLWEuZmxvYXRpbmdbaF0seT1mW3BdLWEucmVmZXJlbmNlW3BdLHg9YXdhaXQgKG51bGw9PWkuZ2V0T2Zmc2V0UGFyZW50P3ZvaWQgMDppLmdldE9mZnNldFBhcmVudChjKSksdz14P3hbdl06MDt3JiZhd2FpdCAobnVsbD09aS5pc0VsZW1lbnQ/dm9pZCAwOmkuaXNFbGVtZW50KHgpKXx8KHc9bC5mbG9hdGluZ1t2XXx8YS5mbG9hdGluZ1toXSk7bGV0IGo9dy8yLWdbaF0vMi0xLGs9bmcoZFttP1widG9wXCI6XCJsZWZ0XCJdLGopLEE9bmcoZFttP1wiYm90dG9tXCI6XCJyaWdodFwiXSxqKSxPPXctZ1toXS1BLEM9dy8yLWdbaF0vMisoYi8yLXkvMiksUz1ubShrLG5nKEMsTykpLEU9IXMuYXJyb3cmJm51bGwhPW5BKG8pJiZDIT09UyYmYS5yZWZlcmVuY2VbaF0vMi0oQzxrP2s6QSktZ1toXS8yPDAsXz1FP0M8az9DLWs6Qy1POjA7cmV0dXJue1twXTpmW3BdK18sZGF0YTp7W3BdOlMsY2VudGVyT2Zmc2V0OkMtUy1fLC4uLkUmJnthbGlnbm1lbnRPZmZzZXQ6X319LHJlc2V0OkV9fX0pO3ZhciBySz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/Qy51c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIHJRKGUsbil7bGV0IHQscixvO2lmKGU9PT1uKXJldHVybiEwO2lmKHR5cGVvZiBlIT10eXBlb2YgbilyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLnRvU3RyaW5nKCk9PT1uLnRvU3RyaW5nKCkpcmV0dXJuITA7aWYoZSYmbiYmXCJvYmplY3RcIj09dHlwZW9mIGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKCh0PWUubGVuZ3RoKSE9PW4ubGVuZ3RoKXJldHVybiExO2ZvcihyPXQ7MCE9ci0tOylpZighclEoZVtyXSxuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1pZigodD0obz1PYmplY3Qua2V5cyhlKSkubGVuZ3RoKSE9PU9iamVjdC5rZXlzKG4pLmxlbmd0aClyZXR1cm4hMTtmb3Iocj10OzAhPXItLTspaWYoISh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChuLG9bcl0pKXJldHVybiExO2ZvcihyPXQ7MCE9ci0tOyl7bGV0IHQ9b1tyXTtpZigoXCJfb3duZXJcIiE9PXR8fCFlLiQkdHlwZW9mKSYmIXJRKGVbdF0sblt0XSkpcmV0dXJuITF9cmV0dXJuITB9cmV0dXJuIGUhPWUmJm4hPW59ZnVuY3Rpb24gckcoZSl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHdpbmRvdz8xOihlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZGV2aWNlUGl4ZWxSYXRpb3x8MX1mdW5jdGlvbiBySihlLG4pe2xldCB0PXJHKGUpO3JldHVybiBNYXRoLnJvdW5kKG4qdCkvdH1mdW5jdGlvbiByMChlKXtsZXQgbj1DLnVzZVJlZihlKTtyZXR1cm4gcksoKCk9PntuLmN1cnJlbnQ9ZX0pLG59ZnVuY3Rpb24gcjEoZSxuLHQpe2xldCByPVwiaW5saW5lLXN0YXJ0XCI9PT1lfHxcImlubGluZS1lbmRcIj09PWU7cmV0dXJuKHt0b3A6XCJ0b3BcIixyaWdodDpyP3Q/XCJpbmxpbmUtc3RhcnRcIjpcImlubGluZS1lbmRcIjpcInJpZ2h0XCIsYm90dG9tOlwiYm90dG9tXCIsbGVmdDpyP3Q/XCJpbmxpbmUtZW5kXCI6XCJpbmxpbmUtc3RhcnRcIjpcImxlZnRcIn0pW25dfWZ1bmN0aW9uIHIyKGUsbix0KXtsZXR7cmVjdHM6cixwbGFjZW1lbnQ6b309ZTtyZXR1cm57c2lkZTpyMShuLG5rKG8pLHQpLGFsaWduOm5BKG8pfHxcImNlbnRlclwiLGFuY2hvcjp7d2lkdGg6ci5yZWZlcmVuY2Uud2lkdGgsaGVpZ2h0OnIucmVmZXJlbmNlLmhlaWdodH0scG9zaXRpb25lcjp7d2lkdGg6ci5mbG9hdGluZy53aWR0aCxoZWlnaHQ6ci5mbG9hdGluZy5oZWlnaHR9fX1mdW5jdGlvbiByNChlKXt2YXIgbix0LHIsbyxhLGksbCxzLGMsdSxkLGYscCxoLGcsbSx2O2xldHthbmNob3I6Yixwb3NpdGlvbk1ldGhvZDp5PVwiYWJzb2x1dGVcIixzaWRlOng9XCJib3R0b21cIixzaWRlT2Zmc2V0Onc9MCxhbGlnbjpqPVwiY2VudGVyXCIsYWxpZ25PZmZzZXQ6az0wLGNvbGxpc2lvbkJvdW5kYXJ5OkEsY29sbGlzaW9uUGFkZGluZzpPPTUsc3RpY2t5OlM9ITEsYXJyb3dQYWRkaW5nOl89NSx0cmFja0FuY2hvcjpQPSEwLGtlZXBNb3VudGVkOno9ITEsZmxvYXRpbmdSb290Q29udGV4dDpMLG1vdW50ZWQ6Uixjb2xsaXNpb25Bdm9pZGFuY2U6TixzaGlmdENyb3NzQXhpczpEPSExLG5vZGVJZDpCLGFkYXB0aXZlT3JpZ2luOk19PWUsST1OLnNpZGV8fFwiZmxpcFwiLEg9Ti5hbGlnbnx8XCJmbGlwXCIsVT1OLmZhbGxiYWNrQXhpc1NpZGV8fFwiZW5kXCIsVj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBiP2I6dm9pZCAwLHE9VChWKSwkPVY/cTpiLFo9ZUEoYiksWD1cInJ0bFwiPT09bjYoKSxLPXt0b3A6XCJ0b3BcIixyaWdodDpcInJpZ2h0XCIsYm90dG9tOlwiYm90dG9tXCIsbGVmdDpcImxlZnRcIixcImlubGluZS1lbmRcIjpYP1wibGVmdFwiOlwicmlnaHRcIixcImlubGluZS1zdGFydFwiOlg/XCJyaWdodFwiOlwibGVmdFwifVt4XSxRPVwiY2VudGVyXCI9PT1qP0s6YCR7S30tJHtqfWAsRz17Ym91bmRhcnk6XCJjbGlwcGluZy1hbmNlc3RvcnNcIj09PUE/XCJjbGlwcGluZ0FuY2VzdG9yc1wiOkEscGFkZGluZzpPfSxKPUMudXNlUmVmKG51bGwpLGVuPWVBKHcpLGV0PWVBKGspLGVyPVwiZnVuY3Rpb25cIiE9dHlwZW9mIHc/dzowLGVvPVsobj1lPT57bGV0IG49cjIoZSx4LFgpLHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZW4uY3VycmVudD9lbi5jdXJyZW50KG4pOmVuLmN1cnJlbnQscj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBldC5jdXJyZW50P2V0LmN1cnJlbnQobik6ZXQuY3VycmVudDtyZXR1cm57bWFpbkF4aXM6dCxjcm9zc0F4aXM6cixhbGlnbm1lbnRBeGlzOnJ9fSx0PVtlcixcImZ1bmN0aW9uXCIhPXR5cGVvZiBrP2s6MCxYLHhdLHsuLi4odm9pZCAwPT09KHI9bikmJihyPTApLHtuYW1lOlwib2Zmc2V0XCIsb3B0aW9uczpyLGFzeW5jIGZuKGUpe3ZhciBuLHQ7bGV0e3g6byx5OmEscGxhY2VtZW50OmksbWlkZGxld2FyZURhdGE6bH09ZSxzPWF3YWl0IHJ6KGUscik7cmV0dXJuIGk9PT0obnVsbD09KG49bC5vZmZzZXQpP3ZvaWQgMDpuLnBsYWNlbWVudCkmJm51bGwhPSh0PWwuYXJyb3cpJiZ0LmFsaWdubWVudE9mZnNldD97fTp7eDpvK3MueCx5OmErcy55LGRhdGE6ey4uLnMscGxhY2VtZW50Oml9fX19KSxvcHRpb25zOltuLHRdfSldLGVhPVwibm9uZVwiPT09SCYmXCJzaGlmdFwiIT09SSxlaT0hZWEmJihTfHxEfHxcInNoaWZ0XCI9PT1JKSxlbD1cIm5vbmVcIj09PUk/bnVsbDp7Li4ue25hbWU6XCJmbGlwXCIsb3B0aW9uczppPW89ey4uLkcsbWFpbkF4aXM6IUQmJlwiZmxpcFwiPT09SSxjcm9zc0F4aXM6XCJmbGlwXCI9PT1IJiZcImFsaWdubWVudFwiLGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb246VX0sYXN5bmMgZm4oZSl7dmFyIG4sdCxyLG8sYTtsZXR7cGxhY2VtZW50OmwsbWlkZGxld2FyZURhdGE6cyxyZWN0czpjLGluaXRpYWxQbGFjZW1lbnQ6dSxwbGF0Zm9ybTpkLGVsZW1lbnRzOmZ9PWUse21haW5BeGlzOnA9ITAsY3Jvc3NBeGlzOmg9ITAsZmFsbGJhY2tQbGFjZW1lbnRzOmcsZmFsbGJhY2tTdHJhdGVneTptPVwiYmVzdEZpdFwiLGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb246dj1cIm5vbmVcIixmbGlwQWxpZ25tZW50OmI9ITAsLi4ueX09bmooaSxlKTtpZihudWxsIT0obj1zLmFycm93KSYmbi5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307bGV0IHg9bmsobCksdz1uRSh1KSxqPW5rKHUpPT09dSxrPWF3YWl0IChudWxsPT1kLmlzUlRMP3ZvaWQgMDpkLmlzUlRMKGYuZmxvYXRpbmcpKSxBPWd8fChqfHwhYj9bblIodSldOmZ1bmN0aW9uKGUpe2xldCBuPW5SKGUpO3JldHVybltuXyhlKSxuLG5fKG4pXX0odSkpLE89XCJub25lXCIhPT12OyFnJiZPJiZBLnB1c2goLi4uZnVuY3Rpb24oZSxuLHQscil7bGV0IG89bkEoZSksYT1mdW5jdGlvbihlLG4sdCl7c3dpdGNoKGUpe2Nhc2VcInRvcFwiOmNhc2VcImJvdHRvbVwiOmlmKHQpcmV0dXJuIG4/bno6blA7cmV0dXJuIG4/blA6bno7Y2FzZVwibGVmdFwiOmNhc2VcInJpZ2h0XCI6cmV0dXJuIG4/bkw6blQ7ZGVmYXVsdDpyZXR1cm5bXX19KG5rKGUpLFwic3RhcnRcIj09PXQscik7cmV0dXJuIG8mJihhPWEubWFwKGU9PmUrXCItXCIrbyksbiYmKGE9YS5jb25jYXQoYS5tYXAobl8pKSkpLGF9KHUsYix2LGspKTtsZXQgQz1bdSwuLi5BXSxTPWF3YWl0IHJTKGUseSksRT1bXSxfPShudWxsPT0odD1zLmZsaXApP3ZvaWQgMDp0Lm92ZXJmbG93cyl8fFtdO2lmKHAmJkUucHVzaChTW3hdKSxoKXtsZXQgZT1mdW5jdGlvbihlLG4sdCl7dm9pZCAwPT09dCYmKHQ9ITEpO2xldCByPW5BKGUpLG89bk8obkUoZSkpLGE9bkMobyksaT1cInhcIj09PW8/cj09PSh0P1wiZW5kXCI6XCJzdGFydFwiKT9cInJpZ2h0XCI6XCJsZWZ0XCI6XCJzdGFydFwiPT09cj9cImJvdHRvbVwiOlwidG9wXCI7cmV0dXJuIG4ucmVmZXJlbmNlW2FdPm4uZmxvYXRpbmdbYV0mJihpPW5SKGkpKSxbaSxuUihpKV19KGwsYyxrKTtFLnB1c2goU1tlWzBdXSxTW2VbMV1dKX1pZihfPVsuLi5fLHtwbGFjZW1lbnQ6bCxvdmVyZmxvd3M6RX1dLCFFLmV2ZXJ5KGU9PmU8PTApKXtsZXQgZT0oKG51bGw9PShyPXMuZmxpcCk/dm9pZCAwOnIuaW5kZXgpfHwwKSsxLG49Q1tlXTtpZihuJiYoXCJhbGlnbm1lbnRcIiE9PWh8fHc9PT1uRShuKXx8Xy5ldmVyeShlPT5lLm92ZXJmbG93c1swXT4wJiZuRShlLnBsYWNlbWVudCk9PT13KSkpcmV0dXJue2RhdGE6e2luZGV4OmUsb3ZlcmZsb3dzOl99LHJlc2V0OntwbGFjZW1lbnQ6bn19O2xldCB0PW51bGw9PShvPV8uZmlsdGVyKGU9PmUub3ZlcmZsb3dzWzBdPD0wKS5zb3J0KChlLG4pPT5lLm92ZXJmbG93c1sxXS1uLm92ZXJmbG93c1sxXSlbMF0pP3ZvaWQgMDpvLnBsYWNlbWVudDtpZighdClzd2l0Y2gobSl7Y2FzZVwiYmVzdEZpdFwiOntsZXQgZT1udWxsPT0oYT1fLmZpbHRlcihlPT57aWYoTyl7bGV0IG49bkUoZS5wbGFjZW1lbnQpO3JldHVybiBuPT09d3x8XCJ5XCI9PT1ufXJldHVybiEwfSkubWFwKGU9PltlLnBsYWNlbWVudCxlLm92ZXJmbG93cy5maWx0ZXIoZT0+ZT4wKS5yZWR1Y2UoKGUsbik9PmUrbiwwKV0pLnNvcnQoKGUsbik9PmVbMV0tblsxXSlbMF0pP3ZvaWQgMDphWzBdO2UmJih0PWUpO2JyZWFrfWNhc2VcImluaXRpYWxQbGFjZW1lbnRcIjp0PXV9aWYobCE9PXQpcmV0dXJue3Jlc2V0OntwbGFjZW1lbnQ6dH19fXJldHVybnt9fX0sb3B0aW9uczpbbyxhXX0sZXM9ZWE/bnVsbDoobD1lPT57dmFyIG4sdCxyO2xldCBvPWVRKGUuZWxlbWVudHMuZmxvYXRpbmcpLmRvY3VtZW50RWxlbWVudDtyZXR1cm57Li4uRyxyb290Qm91bmRhcnk6RD97eDowLHk6MCx3aWR0aDpvLmNsaWVudFdpZHRoLGhlaWdodDpvLmNsaWVudEhlaWdodH06dm9pZCAwLG1haW5BeGlzOlwibm9uZVwiIT09SCxjcm9zc0F4aXM6ZWksbGltaXRlcjpTfHxEP3ZvaWQgMDp7Li4uKHZvaWQgMD09PShyPW49KCk9PntpZighSi5jdXJyZW50KXJldHVybnt9O2xldHtoZWlnaHQ6ZX09Si5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybntvZmZzZXQ6ZS8yKyhcIm51bWJlclwiPT10eXBlb2YgTz9POjApfX0pJiYocj17fSkse29wdGlvbnM6cixmbihlKXtsZXR7eDpuLHk6dCxwbGFjZW1lbnQ6byxyZWN0czphLG1pZGRsZXdhcmVEYXRhOml9PWUse29mZnNldDpsPTAsbWFpbkF4aXM6cz0hMCxjcm9zc0F4aXM6Yz0hMH09bmoocixlKSx1PXt4Om4seTp0fSxkPW5FKG8pLGY9bk8oZCkscD11W2ZdLGg9dVtkXSxnPW5qKGwsZSksbT1cIm51bWJlclwiPT10eXBlb2YgZz97bWFpbkF4aXM6Zyxjcm9zc0F4aXM6MH06e21haW5BeGlzOjAsY3Jvc3NBeGlzOjAsLi4uZ307aWYocyl7bGV0IGU9XCJ5XCI9PT1mP1wiaGVpZ2h0XCI6XCJ3aWR0aFwiLG49YS5yZWZlcmVuY2VbZl0tYS5mbG9hdGluZ1tlXSttLm1haW5BeGlzLHQ9YS5yZWZlcmVuY2VbZl0rYS5yZWZlcmVuY2VbZV0tbS5tYWluQXhpcztwPG4/cD1uOnA+dCYmKHA9dCl9aWYoYyl7dmFyIHYsYjtsZXQgZT1cInlcIj09PWY/XCJ3aWR0aFwiOlwiaGVpZ2h0XCIsbj1yUC5oYXMobmsobykpLHQ9YS5yZWZlcmVuY2VbZF0tYS5mbG9hdGluZ1tlXSsobiYmKG51bGw9PSh2PWkub2Zmc2V0KT92b2lkIDA6dltkXSl8fDApKyhuPzA6bS5jcm9zc0F4aXMpLHI9YS5yZWZlcmVuY2VbZF0rYS5yZWZlcmVuY2VbZV0rKG4/MDoobnVsbD09KGI9aS5vZmZzZXQpP3ZvaWQgMDpiW2RdKXx8MCktKG4/bS5jcm9zc0F4aXM6MCk7aDx0P2g9dDpoPnImJihoPXIpfXJldHVybntbZl06cCxbZF06aH19fSksb3B0aW9uczpbbix0XX19fSxzPVtHLFMsRCxPLEhdLHsuLi4odm9pZCAwPT09KGM9bCkmJihjPXt9KSx7bmFtZTpcInNoaWZ0XCIsb3B0aW9uczpjLGFzeW5jIGZuKGUpe2xldHt4Om4seTp0LHBsYWNlbWVudDpyfT1lLHttYWluQXhpczpvPSEwLGNyb3NzQXhpczphPSExLGxpbWl0ZXI6aT17Zm46ZT0+e2xldHt4Om4seTp0fT1lO3JldHVybnt4Om4seTp0fX19LC4uLmx9PW5qKGMsZSkscz17eDpuLHk6dH0sdT1hd2FpdCByUyhlLGwpLGQ9bkUobmsocikpLGY9bk8oZCkscD1zW2ZdLGg9c1tkXTtpZihvKXtsZXQgZT1cInlcIj09PWY/XCJ0b3BcIjpcImxlZnRcIixuPVwieVwiPT09Zj9cImJvdHRvbVwiOlwicmlnaHRcIix0PXArdVtlXSxyPXAtdVtuXTtwPW5tKHQsbmcocCxyKSl9aWYoYSl7bGV0IGU9XCJ5XCI9PT1kP1widG9wXCI6XCJsZWZ0XCIsbj1cInlcIj09PWQ/XCJib3R0b21cIjpcInJpZ2h0XCIsdD1oK3VbZV0scj1oLXVbbl07aD1ubSh0LG5nKGgscikpfWxldCBnPWkuZm4oey4uLmUsW2ZdOnAsW2RdOmh9KTtyZXR1cm57Li4uZyxkYXRhOnt4OmcueC1uLHk6Zy55LXQsZW5hYmxlZDp7W2ZdOm8sW2RdOmF9fX19fSksb3B0aW9uczpbbCxzXX0pO1wic2hpZnRcIj09PUl8fFwic2hpZnRcIj09PUh8fFwiY2VudGVyXCI9PT1qP2VvLnB1c2goZXMsZWwpOmVvLnB1c2goZWwsZXMpLGVvLnB1c2goey4uLntuYW1lOlwic2l6ZVwiLG9wdGlvbnM6Zj11PXsuLi5HLGFwcGx5KHtlbGVtZW50czp7ZmxvYXRpbmc6ZX0scmVjdHM6e3JlZmVyZW5jZTpufSxhdmFpbGFibGVXaWR0aDp0LGF2YWlsYWJsZUhlaWdodDpyfSl7T2JqZWN0LmVudHJpZXMoe1wiLS1hdmFpbGFibGUtd2lkdGhcIjpgJHt0fXB4YCxcIi0tYXZhaWxhYmxlLWhlaWdodFwiOmAke3J9cHhgLFwiLS1hbmNob3Itd2lkdGhcIjpgJHtuLndpZHRofXB4YCxcIi0tYW5jaG9yLWhlaWdodFwiOmAke24uaGVpZ2h0fXB4YH0pLmZvckVhY2goKFtuLHRdKT0+e2Uuc3R5bGUuc2V0UHJvcGVydHkobix0KX0pfX0sYXN5bmMgZm4oZSl7dmFyIG4sdDtsZXQgcixvLHtwbGFjZW1lbnQ6YSxyZWN0czppLHBsYXRmb3JtOmwsZWxlbWVudHM6c309ZSx7YXBwbHk6Yz0oKT0+e30sLi4udX09bmooZixlKSxkPWF3YWl0IHJTKGUsdSkscD1uayhhKSxoPW5BKGEpLGc9XCJ5XCI9PT1uRShhKSx7d2lkdGg6bSxoZWlnaHQ6dn09aS5mbG9hdGluZztcInRvcFwiPT09cHx8XCJib3R0b21cIj09PXA/KHI9cCxvPWg9PT0oYXdhaXQgKG51bGw9PWwuaXNSVEw/dm9pZCAwOmwuaXNSVEwocy5mbG9hdGluZykpP1wic3RhcnRcIjpcImVuZFwiKT9cImxlZnRcIjpcInJpZ2h0XCIpOihvPXAscj1cImVuZFwiPT09aD9cInRvcFwiOlwiYm90dG9tXCIpO2xldCBiPXYtZC50b3AtZC5ib3R0b20seT1tLWQubGVmdC1kLnJpZ2h0LHg9bmcodi1kW3JdLGIpLHc9bmcobS1kW29dLHkpLGo9IWUubWlkZGxld2FyZURhdGEuc2hpZnQsaz14LEE9dztpZihudWxsIT0obj1lLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSYmbi5lbmFibGVkLngmJihBPXkpLG51bGwhPSh0PWUubWlkZGxld2FyZURhdGEuc2hpZnQpJiZ0LmVuYWJsZWQueSYmKGs9YiksaiYmIWgpe2xldCBlPW5tKGQubGVmdCwwKSxuPW5tKGQucmlnaHQsMCksdD1ubShkLnRvcCwwKSxyPW5tKGQuYm90dG9tLDApO2c/QT1tLTIqKDAhPT1lfHwwIT09bj9lK246bm0oZC5sZWZ0LGQucmlnaHQpKTprPXYtMiooMCE9PXR8fDAhPT1yP3QrcjpubShkLnRvcCxkLmJvdHRvbSkpfWF3YWl0IGMoey4uLmUsYXZhaWxhYmxlV2lkdGg6QSxhdmFpbGFibGVIZWlnaHQ6a30pO2xldCBPPWF3YWl0IGwuZ2V0RGltZW5zaW9ucyhzLmZsb2F0aW5nKTtyZXR1cm4gbSE9PU8ud2lkdGh8fHYhPT1PLmhlaWdodD97cmVzZXQ6e3JlY3RzOiEwfX06e319fSxvcHRpb25zOlt1LGRdfSwocD0oKT0+KHtlbGVtZW50OkouY3VycmVudHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxwYWRkaW5nOl99KSxoPVtfXSx7bmFtZTpcImFycm93XCIsb3B0aW9uczpwLGZuKGUpe2xldHtlbGVtZW50Om4scGFkZGluZzp0fT1wKGUpO3JldHVybiBuJiYoe30pLmhhc093blByb3BlcnR5LmNhbGwobixcImN1cnJlbnRcIik/bnVsbCE9bi5jdXJyZW50P3JYKHtlbGVtZW50Om4uY3VycmVudCxwYWRkaW5nOnR9KS5mbihlKTp7fTpuP3JYKHtlbGVtZW50Om4scGFkZGluZzp0fSkuZm4oZSk6e319LG9wdGlvbnM6W3AsaF19KSx7Li4uKHZvaWQgMD09PSh2PWcpJiYodj17fSkse25hbWU6XCJoaWRlXCIsb3B0aW9uczp2LGFzeW5jIGZuKGUpe2xldHtyZWN0czpufT1lLHtzdHJhdGVneTp0PVwicmVmZXJlbmNlSGlkZGVuXCIsLi4ucn09bmoodixlKTtzd2l0Y2godCl7Y2FzZVwicmVmZXJlbmNlSGlkZGVuXCI6e2xldCB0PXJFKGF3YWl0IHJTKGUsey4uLnIsZWxlbWVudENvbnRleHQ6XCJyZWZlcmVuY2VcIn0pLG4ucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czp0LHJlZmVyZW5jZUhpZGRlbjpyXyh0KX19fWNhc2VcImVzY2FwZWRcIjp7bGV0IHQ9ckUoYXdhaXQgclMoZSx7Li4ucixhbHRCb3VuZGFyeTohMH0pLG4uZmxvYXRpbmcpO3JldHVybntkYXRhOntlc2NhcGVkT2Zmc2V0czp0LGVzY2FwZWQ6cl8odCl9fX1kZWZhdWx0OnJldHVybnt9fX19KSxvcHRpb25zOltnLG1dfSx7bmFtZTpcInRyYW5zZm9ybU9yaWdpblwiLGZuKGUpe2xldHtlbGVtZW50czpuLG1pZGRsZXdhcmVEYXRhOnQscGxhY2VtZW50OnIscmVjdHM6byx5OmF9PWUsaT1uayhyKSxsPW5FKGkpLHM9Si5jdXJyZW50LGM9dC5hcnJvdz8ueHx8MCx1PXQuYXJyb3c/Lnl8fDAsZD1zPy5jbGllbnRXaWR0aHx8MCxmPXM/LmNsaWVudEhlaWdodHx8MCxwPWMrZC8yLGg9dStmLzIsZz1NYXRoLmFicyh0LnNoaWZ0Py55fHwwKSxtPW8ucmVmZXJlbmNlLmhlaWdodC8yLHY9Zz4oXCJmdW5jdGlvblwiPT10eXBlb2Ygdz93KHIyKGUseCxYKSk6dyksYj17dG9wOmAke3B9cHggY2FsYygxMDAlICsgJHt3fXB4KWAsYm90dG9tOmAke3B9cHggJHstd31weGAsbGVmdDpgY2FsYygxMDAlICsgJHt3fXB4KSAke2h9cHhgLHJpZ2h0OmAkey13fXB4ICR7aH1weGB9W2ldLHk9YCR7cH1weCAke28ucmVmZXJlbmNlLnkrbS1hfXB4YDtyZXR1cm4gbi5mbG9hdGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdHJhbnNmb3JtLW9yaWdpblwiLGVpJiZcInlcIj09PWwmJnY/eTpiKSx7fX19LE0pO2xldCBlYz1MOyFSJiZMJiYoZWM9ey4uLkwsZWxlbWVudHM6e3JlZmVyZW5jZTpudWxsLGZsb2F0aW5nOm51bGwsZG9tUmVmZXJlbmNlOm51bGx9fSk7bGV0IGV1PUMudXNlTWVtbygoKT0+KHtlbGVtZW50UmVzaXplOlAmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZXNpemVPYnNlcnZlcixsYXlvdXRTaGlmdDpQJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJ9KSxbUF0pLHtyZWZzOmVkLGVsZW1lbnRzOmVmLHg6ZXAseTplaCxtaWRkbGV3YXJlRGF0YTplZyx1cGRhdGU6ZW0scGxhY2VtZW50OmV2LGNvbnRleHQ6ZWIsaXNQb3NpdGlvbmVkOmV5LGZsb2F0aW5nU3R5bGVzOmV4fT1mdW5jdGlvbihlPXt9KXtsZXR7bm9kZUlkOm59PWUsdD1ZKHsuLi5lLGVsZW1lbnRzOntyZWZlcmVuY2U6bnVsbCxmbG9hdGluZzpudWxsLC4uLmUuZWxlbWVudHN9fSkscj1lLnJvb3RDb250ZXh0fHx0LG89ci5lbGVtZW50cyxbYSxpXT1DLnVzZVN0YXRlKG51bGwpLFtsLHNdPUMudXNlU3RhdGUobnVsbCksYz1vPy5kb21SZWZlcmVuY2V8fGEsdT1DLnVzZVJlZihudWxsKSxkPVcoKTtGKCgpPT57YyYmKHUuY3VycmVudD1jKX0sW2NdKTtsZXQgZj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSk7bGV0e3BsYWNlbWVudDpuPVwiYm90dG9tXCIsc3RyYXRlZ3k6dD1cImFic29sdXRlXCIsbWlkZGxld2FyZTpyPVtdLHBsYXRmb3JtOm8sZWxlbWVudHM6e3JlZmVyZW5jZTphLGZsb2F0aW5nOml9PXt9LHRyYW5zZm9ybTpsPSEwLHdoaWxlRWxlbWVudHNNb3VudGVkOnMsb3BlbjpjfT1lLFt1LGRdPUMudXNlU3RhdGUoe3g6MCx5OjAsc3RyYXRlZ3k6dCxwbGFjZW1lbnQ6bixtaWRkbGV3YXJlRGF0YTp7fSxpc1Bvc2l0aW9uZWQ6ITF9KSxbZixwXT1DLnVzZVN0YXRlKHIpO3JRKGYscil8fHAocik7bGV0W2gsZ109Qy51c2VTdGF0ZShudWxsKSxbbSx2XT1DLnVzZVN0YXRlKG51bGwpLGI9Qy51c2VDYWxsYmFjayhlPT57ZSE9PWouY3VycmVudCYmKGouY3VycmVudD1lLGcoZSkpfSxbXSkseT1DLnVzZUNhbGxiYWNrKGU9PntlIT09ay5jdXJyZW50JiYoay5jdXJyZW50PWUsdihlKSl9LFtdKSx4PWF8fGgsdz1pfHxtLGo9Qy51c2VSZWYobnVsbCksaz1DLnVzZVJlZihudWxsKSxBPUMudXNlUmVmKHUpLE89bnVsbCE9cyxTPXIwKHMpLF89cjAobyksUD1yMChjKSx6PUMudXNlQ2FsbGJhY2soKCk9PntpZighai5jdXJyZW50fHwhay5jdXJyZW50KXJldHVybjtsZXQgZT17cGxhY2VtZW50Om4sc3RyYXRlZ3k6dCxtaWRkbGV3YXJlOmZ9O18uY3VycmVudCYmKGUucGxhdGZvcm09Xy5jdXJyZW50KSwoKGUsbix0KT0+e2xldCByPW5ldyBNYXAsbz17cGxhdGZvcm06ciQsLi4udH0sYT17Li4uby5wbGF0Zm9ybSxfYzpyfTtyZXR1cm4gckMoZSxuLHsuLi5vLHBsYXRmb3JtOmF9KX0pKGouY3VycmVudCxrLmN1cnJlbnQsZSkudGhlbihlPT57bGV0IG49ey4uLmUsaXNQb3NpdGlvbmVkOiExIT09UC5jdXJyZW50fTtMLmN1cnJlbnQmJiFyUShBLmN1cnJlbnQsbikmJihBLmN1cnJlbnQ9bixFLmZsdXNoU3luYygoKT0+e2Qobil9KSl9KX0sW2Ysbix0LF8sUF0pO3JLKCgpPT57ITE9PT1jJiZBLmN1cnJlbnQuaXNQb3NpdGlvbmVkJiYoQS5jdXJyZW50LmlzUG9zaXRpb25lZD0hMSxkKGU9Pih7Li4uZSxpc1Bvc2l0aW9uZWQ6ITF9KSkpfSxbY10pO2xldCBMPUMudXNlUmVmKCExKTtySygoKT0+KEwuY3VycmVudD0hMCwoKT0+e0wuY3VycmVudD0hMX0pLFtdKSxySygoKT0+e2lmKHgmJihqLmN1cnJlbnQ9eCksdyYmKGsuY3VycmVudD13KSx4JiZ3KXtpZihTLmN1cnJlbnQpcmV0dXJuIFMuY3VycmVudCh4LHcseik7eigpfX0sW3gsdyx6LFMsT10pO2xldCBUPUMudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6aixmbG9hdGluZzprLHNldFJlZmVyZW5jZTpiLHNldEZsb2F0aW5nOnl9KSxbYix5XSksUj1DLnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOngsZmxvYXRpbmc6d30pLFt4LHddKSxOPUMudXNlTWVtbygoKT0+e2xldCBlPXtwb3NpdGlvbjp0LGxlZnQ6MCx0b3A6MH07aWYoIVIuZmxvYXRpbmcpcmV0dXJuIGU7bGV0IG49ckooUi5mbG9hdGluZyx1LngpLHI9ckooUi5mbG9hdGluZyx1LnkpO3JldHVybiBsP3suLi5lLHRyYW5zZm9ybTpcInRyYW5zbGF0ZShcIituK1wicHgsIFwiK3IrXCJweClcIiwuLi5yRyhSLmZsb2F0aW5nKT49MS41JiZ7d2lsbENoYW5nZTpcInRyYW5zZm9ybVwifX06e3Bvc2l0aW9uOnQsbGVmdDpuLHRvcDpyfX0sW3QsbCxSLmZsb2F0aW5nLHUueCx1LnldKTtyZXR1cm4gQy51c2VNZW1vKCgpPT4oey4uLnUsdXBkYXRlOnoscmVmczpULGVsZW1lbnRzOlIsZmxvYXRpbmdTdHlsZXM6Tn0pLFt1LHosVCxSLE5dKX0oey4uLmUsZWxlbWVudHM6ey4uLm8sLi4ubCYme3JlZmVyZW5jZTpsfX19KSxwPUMudXNlQ2FsbGJhY2soZT0+e2xldCBuPWVlKGUpP3tnZXRCb3VuZGluZ0NsaWVudFJlY3Q6KCk9PmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZ2V0Q2xpZW50UmVjdHM6KCk9PmUuZ2V0Q2xpZW50UmVjdHMoKSxjb250ZXh0RWxlbWVudDplfTplO3MobiksZi5yZWZzLnNldFJlZmVyZW5jZShuKX0sW2YucmVmc10pLGg9Qy51c2VDYWxsYmFjayhlPT57KGVlKGUpfHxudWxsPT09ZSkmJih1LmN1cnJlbnQ9ZSxpKGUpKSwoZWUoZi5yZWZzLnJlZmVyZW5jZS5jdXJyZW50KXx8bnVsbD09PWYucmVmcy5yZWZlcmVuY2UuY3VycmVudHx8bnVsbCE9PWUmJiFlZShlKSkmJmYucmVmcy5zZXRSZWZlcmVuY2UoZSl9LFtmLnJlZnNdKSxnPUMudXNlTWVtbygoKT0+KHsuLi5mLnJlZnMsc2V0UmVmZXJlbmNlOmgsc2V0UG9zaXRpb25SZWZlcmVuY2U6cCxkb21SZWZlcmVuY2U6dX0pLFtmLnJlZnMsaCxwXSksbT1DLnVzZU1lbW8oKCk9Pih7Li4uZi5lbGVtZW50cyxkb21SZWZlcmVuY2U6Y30pLFtmLmVsZW1lbnRzLGNdKSx2PUMudXNlTWVtbygoKT0+KHsuLi5mLC4uLnIscmVmczpnLGVsZW1lbnRzOm0sbm9kZUlkOm59KSxbZixnLG0sbixyXSk7cmV0dXJuIEYoKCk9PntyLmRhdGFSZWYuY3VycmVudC5mbG9hdGluZ0NvbnRleHQ9djtsZXQgZT1kPy5ub2Rlc1JlZi5jdXJyZW50LmZpbmQoZT0+ZS5pZD09PW4pO2UmJihlLmNvbnRleHQ9dil9KSxDLnVzZU1lbW8oKCk9Pih7Li4uZixjb250ZXh0OnYscmVmczpnLGVsZW1lbnRzOm19KSxbZixnLG0sdl0pfSh7cm9vdENvbnRleHQ6ZWMscGxhY2VtZW50OlEsbWlkZGxld2FyZTplbyxzdHJhdGVneTp5LHdoaWxlRWxlbWVudHNNb3VudGVkOno/dm9pZCAwOiguLi5lKT0+clkoLi4uZSxldSksbm9kZUlkOkJ9KSx7c2lkZVg6ZXcsc2lkZVk6ZWp9PWVnLmFkYXB0aXZlT3JpZ2lufHx7fSxlaz1DLnVzZU1lbW8oKCk9Pk0/e3Bvc2l0aW9uOnksW2V3XTpgJHtlcH1weGAsW2VqXTpgJHtlaH1weGB9OmV4LFtNLGV3LGVqLHksZXAsZWgsZXhdKSxlTz1DLnVzZVJlZihudWxsKTtGKCgpPT57aWYoIVIpcmV0dXJuO2xldCBlPVouY3VycmVudCxuPVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZSgpOmUsdD0ocjUobik/bi5jdXJyZW50Om4pfHxudWxsO3QhPT1lTy5jdXJyZW50JiYoZWQuc2V0UG9zaXRpb25SZWZlcmVuY2UodCksZU8uY3VycmVudD10KX0sW1IsZWQsJCxaXSksQy51c2VFZmZlY3QoKCk9PntpZighUilyZXR1cm47bGV0IGU9Wi5jdXJyZW50O1wiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJnI1KGUpJiZlLmN1cnJlbnQhPT1lTy5jdXJyZW50JiYoZWQuc2V0UG9zaXRpb25SZWZlcmVuY2UoZS5jdXJyZW50KSxlTy5jdXJyZW50PWUuY3VycmVudCl9LFtSLGVkLCQsWl0pLEMudXNlRWZmZWN0KCgpPT57aWYoeiYmUiYmZWYuZG9tUmVmZXJlbmNlJiZlZi5mbG9hdGluZylyZXR1cm4gclkoZWYuZG9tUmVmZXJlbmNlLGVmLmZsb2F0aW5nLGVtLGV1KX0sW3osUixlZixlbSxldV0pO2xldCBlQz1yMSh4LG5rKGV2KSxYKSxlUz1uQShldil8fFwiY2VudGVyXCIsZUU9ISFlZy5oaWRlPy5yZWZlcmVuY2VIaWRkZW4sZV89Qy51c2VNZW1vKCgpPT4oe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6ZWcuYXJyb3c/LnksbGVmdDplZy5hcnJvdz8ueH0pLFtlZy5hcnJvd10pLGVQPWVnLmFycm93Py5jZW50ZXJPZmZzZXQhPT0wO3JldHVybiBDLnVzZU1lbW8oKCk9Pih7cG9zaXRpb25lclN0eWxlczplayxhcnJvd1N0eWxlczplXyxhcnJvd1JlZjpKLGFycm93VW5jZW50ZXJlZDplUCxzaWRlOmVDLGFsaWduOmVTLGFuY2hvckhpZGRlbjplRSxyZWZzOmVkLGNvbnRleHQ6ZWIsaXNQb3NpdGlvbmVkOmV5LHVwZGF0ZTplbX0pLFtlayxlXyxKLGVQLGVDLGVTLGVFLGVkLGViLGV5LGVtXSl9ZnVuY3Rpb24gcjUoZSl7cmV0dXJuIG51bGwhPWUmJlwiY3VycmVudFwiaW4gZX1mdW5jdGlvbiByMyhlKXtsZXR7Y2hpbGRyZW46bixlbGVtZW50c1JlZjp0LGxhYmVsc1JlZjpyLG9uTWFwQ2hhbmdlOm99PWUsYT1DLnVzZVJlZigwKSxpPVAocjkpLmN1cnJlbnQscz1QKHI2KS5jdXJyZW50LFtjLHVdPUMudXNlU3RhdGUoMCksZD1DLnVzZVJlZihjKSxmPVQoKGUsbik9PntzLnNldChlLG4/P251bGwpLGQuY3VycmVudCs9MSx1KGQuY3VycmVudCl9KSxwPVQoZT0+e3MuZGVsZXRlKGUpLGQuY3VycmVudCs9MSx1KGQuY3VycmVudCl9KSxoPUMudXNlTWVtbygoKT0+e2xldCBlPW5ldyBNYXA7cmV0dXJuIEFycmF5LmZyb20ocy5rZXlzKCkpLnNvcnQocjgpLmZvckVhY2goKG4sdCk9PntsZXQgcj1zLmdldChuKT8/e307ZS5zZXQobix7Li4ucixpbmRleDp0fSl9KSxlfSxbcyxjXSk7RigoKT0+e2QuY3VycmVudD09PWMmJih0LmN1cnJlbnQubGVuZ3RoIT09aC5zaXplJiYodC5jdXJyZW50Lmxlbmd0aD1oLnNpemUpLHImJnIuY3VycmVudC5sZW5ndGghPT1oLnNpemUmJihyLmN1cnJlbnQubGVuZ3RoPWguc2l6ZSkpLG8/LihoKX0sW28saCx0LHIsYyxkXSk7bGV0IGc9VChlPT4oaS5hZGQoZSksKCk9PntpLmRlbGV0ZShlKX0pKTtGKCgpPT57aS5mb3JFYWNoKGU9PmUoaCkpfSxbaSxoXSk7bGV0IG09Qy51c2VNZW1vKCgpPT4oe3JlZ2lzdGVyOmYsdW5yZWdpc3RlcjpwLHN1YnNjcmliZU1hcENoYW5nZTpnLGVsZW1lbnRzUmVmOnQsbGFiZWxzUmVmOnIsbmV4dEluZGV4UmVmOmF9KSxbZixwLGcsdCxyLGFdKTtyZXR1cm4oMCxsLmpzeCkodEMuUHJvdmlkZXIse3ZhbHVlOm0sY2hpbGRyZW46bn0pfWZ1bmN0aW9uIHI2KCl7cmV0dXJuIG5ldyBNYXB9ZnVuY3Rpb24gcjkoKXtyZXR1cm4gbmV3IFNldH1mdW5jdGlvbiByOChlLG4pe2xldCB0PWUuY29tcGFyZURvY3VtZW50UG9zaXRpb24obik7cmV0dXJuIHQmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkd8fHQmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlk/LTE6dCZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElOR3x8dCZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TPzE6MH1sZXQgcjc9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0IHQse2N1dG91dDpyLC4uLm99PWU7aWYocil7bGV0IGU9cj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD1gcG9seWdvbihcbiAgICAgIDAlIDAlLFxuICAgICAgMTAwJSAwJSxcbiAgICAgIDEwMCUgMTAwJSxcbiAgICAgIDAlIDEwMCUsXG4gICAgICAwJSAwJSxcbiAgICAgICR7ZS5sZWZ0fXB4ICR7ZS50b3B9cHgsXG4gICAgICAke2UubGVmdH1weCAke2UuYm90dG9tfXB4LFxuICAgICAgJHtlLnJpZ2h0fXB4ICR7ZS5ib3R0b219cHgsXG4gICAgICAke2UucmlnaHR9cHggJHtlLnRvcH1weCxcbiAgICAgICR7ZS5sZWZ0fXB4ICR7ZS50b3B9cHhcbiAgICApYH1yZXR1cm4oMCxsLmpzeCkoXCJkaXZcIix7cmVmOm4scm9sZTpcInByZXNlbnRhdGlvblwiLFwiZGF0YS1iYXNlLXVpLWluZXJ0XCI6XCJcIiwuLi5vLHN0eWxlOntwb3NpdGlvbjpcImZpeGVkXCIsaW5zZXQ6MCx1c2VyU2VsZWN0Olwibm9uZVwiLFdlYmtpdFVzZXJTZWxlY3Q6XCJub25lXCIsY2xpcFBhdGg6dH19KX0pLG9lPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe3ZhciB0O2xldHthbmNob3I6cixwb3NpdGlvbk1ldGhvZDpvPVwiYWJzb2x1dGVcIixjbGFzc05hbWU6YSxyZW5kZXI6aSxzaWRlOnMsYWxpZ246YyxzaWRlT2Zmc2V0OnU9MCxhbGlnbk9mZnNldDpkPTAsY29sbGlzaW9uQm91bmRhcnk6Zj1cImNsaXBwaW5nLWFuY2VzdG9yc1wiLGNvbGxpc2lvblBhZGRpbmc6cD01LGFycm93UGFkZGluZzpoPTUsc3RpY2t5Omc9ITEsdHJhY2tBbmNob3I6bT0hMCxjb2xsaXNpb25Bdm9pZGFuY2U6dj1ubywuLi5ifT1lLHtvcGVuOnksc2V0T3Blbjp4LGZsb2F0aW5nUm9vdENvbnRleHQ6dyxzZXRQb3NpdGlvbmVyRWxlbWVudDpqLGl0ZW1Eb21FbGVtZW50czprLGl0ZW1MYWJlbHM6QSxtb3VudGVkOk8sbW9kYWw6UyxsYXN0T3BlbkNoYW5nZVJlYXNvbjpFLHBhcmVudDpfLHNldEhvdmVyRW5hYmxlZDpQLHRyaWdnZXJFbGVtZW50Onp9PW4wKCksTD1mdW5jdGlvbigpe2xldCBlPUMudXNlQ29udGV4dChyaik7aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IDxNZW51LlBvcnRhbD4gaXMgbWlzc2luZy5cIik7cmV0dXJuIGV9KCksVD1mdW5jdGlvbihlKXtsZXQgbj1IKCksdD1XKCkscj1xKCk7cmV0dXJuIEYoKCk9PntpZighbilyZXR1cm47bGV0IGU9e2lkOm4scGFyZW50SWQ6cn07cmV0dXJuIHQ/LmFkZE5vZGUoZSksKCk9Pnt0Py5yZW1vdmVOb2RlKGUpfX0sW3QsbixyXSksbn0oKSxSPXEoKSxOPXRhKCEwKSxEPXIsQj11LE09ZCxJPWM7XCJjb250ZXh0LW1lbnVcIj09PV8udHlwZSYmKEQ9Xy5jb250ZXh0Py5hbmNob3I/P3IsST1lLmFsaWduPz9cInN0YXJ0XCIsTT1lLmFsaWduT2Zmc2V0Pz8yLEI9ZS5zaWRlT2Zmc2V0Pz8tNSk7bGV0IFU9cyxWPUk7XCJtZW51XCI9PT1fLnR5cGU/KFU9VT8/XCJpbmxpbmUtZW5kXCIsVj1WPz9cInN0YXJ0XCIpOlwibWVudWJhclwiPT09Xy50eXBlJiYoVT1VPz9cImJvdHRvbVwiLFY9Vj8/XCJzdGFydFwiKTtsZXQgWj1cImNvbnRleHQtbWVudVwiPT09Xy50eXBlLFk9cjQoe2FuY2hvcjpELGZsb2F0aW5nUm9vdENvbnRleHQ6dyxwb3NpdGlvbk1ldGhvZDpOP1wiZml4ZWRcIjpvLG1vdW50ZWQ6TyxzaWRlOlUsc2lkZU9mZnNldDpCLGFsaWduOlYsYWxpZ25PZmZzZXQ6TSxhcnJvd1BhZGRpbmc6Wj8wOmgsY29sbGlzaW9uQm91bmRhcnk6Zixjb2xsaXNpb25QYWRkaW5nOnAsc3RpY2t5Omcsbm9kZUlkOlQsa2VlcE1vdW50ZWQ6TCx0cmFja0FuY2hvcjptLGNvbGxpc2lvbkF2b2lkYW5jZTp2LHNoaWZ0Q3Jvc3NBeGlzOlp9KSx7ZXZlbnRzOlh9PVcoKSxLPUMudXNlTWVtbygoKT0+e2xldCBlPXt9O3JldHVybiB5fHwoZS5wb2ludGVyRXZlbnRzPVwibm9uZVwiKSx7cm9sZTpcInByZXNlbnRhdGlvblwiLGhpZGRlbjohTyxzdHlsZTp7Li4uWS5wb3NpdGlvbmVyU3R5bGVzLC4uLmV9fX0sW3ksTyxZLnBvc2l0aW9uZXJTdHlsZXNdKTtDLnVzZUVmZmVjdCgoKT0+e2Z1bmN0aW9uIGUoZSl7ZS5vcGVuPyhlLnBhcmVudE5vZGVJZD09PVQmJlAoITEpLGUubm9kZUlkIT09VCYmZS5wYXJlbnROb2RlSWQ9PT1SJiZ4KCExLHZvaWQgMCxcInNpYmxpbmctb3BlblwiKSk6ZS5wYXJlbnROb2RlSWQ9PT1UJiZQKCEwKX1yZXR1cm4gWC5vbihcIm9wZW5jaGFuZ2VcIixlKSwoKT0+e1gub2ZmKFwib3BlbmNoYW5nZVwiLGUpfX0sW1gsVCxSLHgsUF0pLEMudXNlRWZmZWN0KCgpPT57WC5lbWl0KFwib3BlbmNoYW5nZVwiLHtvcGVuOnksbm9kZUlkOlQscGFyZW50Tm9kZUlkOlJ9KX0sW1gseSxULFJdKTtsZXQgUT1DLnVzZU1lbW8oKCk9Pih7b3Blbjp5LHNpZGU6WS5zaWRlLGFsaWduOlkuYWxpZ24sYW5jaG9ySGlkZGVuOlkuYW5jaG9ySGlkZGVuLG5lc3RlZDpcIm1lbnVcIj09PV8udHlwZX0pLFt5LFkuc2lkZSxZLmFsaWduLFkuYW5jaG9ySGlkZGVuLF8udHlwZV0pLEc9Qy51c2VNZW1vKCgpPT4oe3NpZGU6WS5zaWRlLGFsaWduOlkuYWxpZ24sYXJyb3dSZWY6WS5hcnJvd1JlZixhcnJvd1VuY2VudGVyZWQ6WS5hcnJvd1VuY2VudGVyZWQsYXJyb3dTdHlsZXM6WS5hcnJvd1N0eWxlcyxmbG9hdGluZ0NvbnRleHQ6WS5jb250ZXh0fSksW1kuc2lkZSxZLmFsaWduLFkuYXJyb3dSZWYsWS5hcnJvd1VuY2VudGVyZWQsWS5hcnJvd1N0eWxlcyxZLmNvbnRleHRdKSxKPXRqKFwiZGl2XCIsZSx7c3RhdGU6USxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnRWLHJlZjpbbixqXSxwcm9wczp7Li4uSywuLi5ifX0pLGVlPU8mJlwibWVudVwiIT09Xy50eXBlJiYoXCJtZW51YmFyXCIhPT1fLnR5cGUmJlMmJlwidHJpZ2dlci1ob3ZlclwiIT09RXx8XCJtZW51YmFyXCI9PT1fLnR5cGUmJl8uY29udGV4dC5tb2RhbCksZW49bnVsbDtyZXR1cm5cIm1lbnViYXJcIj09PV8udHlwZT9lbj1fLmNvbnRleHQuY29udGVudEVsZW1lbnQ6dm9pZCAwPT09Xy50eXBlJiYoZW49eiksKDAsbC5qc3hzKShyQS5Qcm92aWRlcix7dmFsdWU6RyxjaGlsZHJlbjpbZWUmJigwLGwuanN4KShyNyx7cmVmOlwiY29udGV4dC1tZW51XCI9PT1fLnR5cGV8fFwibmVzdGVkLWNvbnRleHQtbWVudVwiPT09Xy50eXBlP18uY29udGV4dC5pbnRlcm5hbEJhY2tkcm9wUmVmOm51bGwsaW5lcnQ6KHQ9IXksdHc+PTE5P3Q6dD9cInRydWVcIjp2b2lkIDApLGN1dG91dDplbn0pLCgwLGwuanN4KSgkLHtpZDpULGNoaWxkcmVuOigwLGwuanN4KShyMyx7ZWxlbWVudHNSZWY6ayxsYWJlbHNSZWY6QSxjaGlsZHJlbjpKfSl9KV19KX0pLG9uPXtpbmVydDpuZXcgV2Vha01hcCxcImFyaWEtaGlkZGVuXCI6bmV3IFdlYWtNYXAsbm9uZTpuZXcgV2Vha01hcH07ZnVuY3Rpb24gb3QoZSl7cmV0dXJuXCJpbmVydFwiPT09ZT9vbi5pbmVydDpcImFyaWEtaGlkZGVuXCI9PT1lP29uW1wiYXJpYS1oaWRkZW5cIl06b24ubm9uZX1sZXQgb3I9bmV3IFdlYWtTZXQsb289e30sb2E9MCxvaT1lPT5lJiYoZS5ob3N0fHxvaShlLnBhcmVudE5vZGUpKTtmdW5jdGlvbiBvbChlLG49ITEsdD0hMSl7bGV0IHI9ZVEoZVswXSkuYm9keTtyZXR1cm4gZnVuY3Rpb24oZSxuLHQscil7bGV0IG89XCJkYXRhLWJhc2UtdWktaW5lcnRcIixhPXI/XCJpbmVydFwiOnQ/XCJhcmlhLWhpZGRlblwiOm51bGwsaT1lLm1hcChlPT57aWYobi5jb250YWlucyhlKSlyZXR1cm4gZTtsZXQgdD1vaShlKTtyZXR1cm4gbi5jb250YWlucyh0KT90Om51bGx9KS5maWx0ZXIoZT0+bnVsbCE9ZSksbD1uZXcgU2V0LHM9bmV3IFNldChpKSxjPVtdO29vW29dfHwob29bb109bmV3IFdlYWtNYXApO2xldCB1PW9vW29dO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24gZShuKXshKCFufHxsLmhhcyhuKSkmJihsLmFkZChuKSxuLnBhcmVudE5vZGUmJmUobi5wYXJlbnROb2RlKSl9KSxmdW5jdGlvbiBlKG4peyFufHxzLmhhcyhuKXx8W10uZm9yRWFjaC5jYWxsKG4uY2hpbGRyZW4sbj0+e2lmKFwic2NyaXB0XCIhPT1LKG4pKWlmKGwuaGFzKG4pKWUobik7ZWxzZXtsZXQgZT1hP24uZ2V0QXR0cmlidXRlKGEpOm51bGwsdD1udWxsIT09ZSYmXCJmYWxzZVwiIT09ZSxyPW90KGEpLGk9KHIuZ2V0KG4pfHwwKSsxLGw9KHUuZ2V0KG4pfHwwKSsxO3Iuc2V0KG4saSksdS5zZXQobixsKSxjLnB1c2gobiksMT09PWkmJnQmJm9yLmFkZChuKSwxPT09bCYmbi5zZXRBdHRyaWJ1dGUobyxcIlwiKSwhdCYmYSYmbi5zZXRBdHRyaWJ1dGUoYSxcImluZXJ0XCI9PT1hP1wiXCI6XCJ0cnVlXCIpfX0pfShuKSxsLmNsZWFyKCksb2ErPTEsKCk9PntjLmZvckVhY2goZT0+e2xldCBuPW90KGEpLHQ9KG4uZ2V0KGUpfHwwKS0xLHI9KHUuZ2V0KGUpfHwwKS0xO24uc2V0KGUsdCksdS5zZXQoZSxyKSx0fHwoIW9yLmhhcyhlKSYmYSYmZS5yZW1vdmVBdHRyaWJ1dGUoYSksb3IuZGVsZXRlKGUpKSxyfHxlLnJlbW92ZUF0dHJpYnV0ZShvKX0pLChvYS09MSl8fChvbi5pbmVydD1uZXcgV2Vha01hcCxvbltcImFyaWEtaGlkZGVuXCJdPW5ldyBXZWFrTWFwLG9uLm5vbmU9bmV3IFdlYWtNYXAsb3I9bmV3IFdlYWtTZXQsb289e30pfX0oZS5jb25jYXQoQXJyYXkuZnJvbShyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbYXJpYS1saXZlXVwiKSkpLHIsbix0KX1sZXQgb3M9W107ZnVuY3Rpb24gb2MoKXtyZXR1cm4gb3Muc2xpY2UoKS5yZXZlcnNlKCkuZmluZChlPT5lLmlzQ29ubmVjdGVkKX1mdW5jdGlvbiBvdShlLG4pe2lmKCFuLmN1cnJlbnQuaW5jbHVkZXMoXCJmbG9hdGluZ1wiKSYmIWUuZ2V0QXR0cmlidXRlKFwicm9sZVwiKT8uaW5jbHVkZXMoXCJkaWFsb2dcIikpcmV0dXJuO2xldCB0PXJkKCkscj1yYyhlLHQpLmZpbHRlcihlPT57bGV0IG49ZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRhYmluZGV4XCIpfHxcIlwiO3JldHVybiBydShlLHQpfHxlLmhhc0F0dHJpYnV0ZShcImRhdGEtdGFiaW5kZXhcIikmJiFuLnN0YXJ0c1dpdGgoXCItXCIpfSksbz1lLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpO24uY3VycmVudC5pbmNsdWRlcyhcImZsb2F0aW5nXCIpfHwwPT09ci5sZW5ndGg/XCIwXCIhPT1vJiZlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCIwXCIpOihcIi0xXCIhPT1vfHxlLmhhc0F0dHJpYnV0ZShcImRhdGEtdGFiaW5kZXhcIikmJlwiLTFcIiE9PWUuZ2V0QXR0cmlidXRlKFwiZGF0YS10YWJpbmRleFwiKSkmJihlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSxlLnNldEF0dHJpYnV0ZShcImRhdGEtdGFiaW5kZXhcIixcIi0xXCIpKX1sZXQgb2Q9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7cmV0dXJuKDAsbC5qc3gpKFwiYnV0dG9uXCIsey4uLmUsdHlwZTpcImJ1dHRvblwiLHJlZjpuLHRhYkluZGV4Oi0xLHN0eWxlOnQkfSl9KTtmdW5jdGlvbiBvZihlKXtsZXR7Y29udGV4dDpuLGNoaWxkcmVuOnQsZGlzYWJsZWQ6cj0hMSxvcmRlcjpvPVtcImNvbnRlbnRcIl0sZ3VhcmRzOmE9ITAsaW5pdGlhbEZvY3VzOmk9MCxyZXR1cm5Gb2N1czpzPSEwLHJlc3RvcmVGb2N1czpjPSExLG1vZGFsOnU9ITAsdmlzdWFsbHlIaWRkZW5EaXNtaXNzOmQ9ITEsY2xvc2VPbkZvY3VzT3V0OmY9ITAsb3V0c2lkZUVsZW1lbnRzSW5lcnQ6cD0hMSxnZXRJbnNpZGVFbGVtZW50czpoPSgpPT5bXX09ZSx7b3BlbjpnLG9uT3BlbkNoYW5nZTptLGV2ZW50czp2LGRhdGFSZWY6YixlbGVtZW50czp7ZG9tUmVmZXJlbmNlOnksZmxvYXRpbmc6eH19PW4sdz1UKCgpPT5iLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5ub2RlSWQpLGo9VChoKSxrPVwibnVtYmVyXCI9PXR5cGVvZiBpJiZpPDAsQT1lSih5KSYmayxPPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBIVE1MRWxlbWVudCYmXCJpbmVydFwiaW4gSFRNTEVsZW1lbnQucHJvdG90eXBlLFM9IU98fGEsRT0hU3x8TyYmcCxfPWVBKG8pLFA9ZUEoaSksej1lQShzKSxMPVcoKSxSPXJiKCksTj1DLnVzZVJlZihudWxsKSxEPUMudXNlUmVmKG51bGwpLEI9Qy51c2VSZWYoITEpLE09Qy51c2VSZWYoITEpLEk9Qy51c2VSZWYoLTEpLEg9bnVsbCE9UixVPWUwKHgpLFY9VCgoZT1VKT0+ZT9ycyhlLHJkKCkpOltdKSxxPVQoZT0+e2xldCBuPVYoZSk7cmV0dXJuIF8uY3VycmVudC5tYXAoZT0+eSYmXCJyZWZlcmVuY2VcIj09PWU/eTpVJiZcImZsb2F0aW5nXCI9PT1lP1U6bikuZmlsdGVyKEJvb2xlYW4pLmZsYXQoKX0pO0MudXNlRWZmZWN0KCgpPT57aWYocnx8IXUpcmV0dXJuO2Z1bmN0aW9uIGUoZSl7aWYoXCJUYWJcIj09PWUua2V5KXtlWShVLGVaKGVRKFUpKSkmJjA9PT1WKCkubGVuZ3RoJiYhQSYmZUQoZSk7bGV0IG49cSgpLHQ9ZVgoZSk7XCJyZWZlcmVuY2VcIj09PV8uY3VycmVudFswXSYmdD09PXkmJihlRChlKSxlLnNoaWZ0S2V5P25xKG5bbi5sZW5ndGgtMV0pOm5xKG5bMV0pKSxcImZsb2F0aW5nXCI9PT1fLmN1cnJlbnRbMV0mJnQ9PT1VJiZlLnNoaWZ0S2V5JiYoZUQoZSksbnEoblswXSkpfX1sZXQgbj1lUShVKTtyZXR1cm4gbi5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpLCgpPT57bi5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpfX0sW3IseSxVLHUsXyxBLFYscV0pLEMudXNlRWZmZWN0KCgpPT57aWYoIXImJngpcmV0dXJuIHguYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixlKSwoKT0+e3gucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixlKX07ZnVuY3Rpb24gZShlKXtsZXQgbj1lWChlKSx0PVYoKS5pbmRleE9mKG4pOy0xIT09dCYmKEkuY3VycmVudD10KX19LFtyLHgsVl0pLEMudXNlRWZmZWN0KCgpPT57aWYoIXImJmYmJngmJmVuKHkpKXJldHVybiB5LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLG4pLHkuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsZSkseC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIixuKSwoKT0+e3kucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsbikseS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixlKSx4LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLG4pfTtmdW5jdGlvbiBlKCl7TS5jdXJyZW50PSEwLHNldFRpbWVvdXQoKCk9PntNLmN1cnJlbnQ9ITF9KX1mdW5jdGlvbiBuKGUpe2xldCBuPWUucmVsYXRlZFRhcmdldCx0PWUuY3VycmVudFRhcmdldCxyPWVYKGUpO3F1ZXVlTWljcm90YXNrKCgpPT57bGV0IG89dygpLGE9IShlWSh5LG4pfHxlWSh4LG4pfHxlWShuLHgpfHxlWShSPy5wb3J0YWxOb2RlLG4pfHxuPy5oYXNBdHRyaWJ1dGUoZTEoXCJmb2N1cy1ndWFyZFwiKSl8fEwmJihlNihMLm5vZGVzUmVmLmN1cnJlbnQsbykuZmluZChlPT5lWShlLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nLG4pfHxlWShlLmNvbnRleHQ/LmVsZW1lbnRzLmRvbVJlZmVyZW5jZSxuKSl8fGU5KEwubm9kZXNSZWYuY3VycmVudCxvKS5maW5kKGU9PltlLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nLGUwKGUuY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcpXS5pbmNsdWRlcyhuKXx8ZS5jb250ZXh0Py5lbGVtZW50cy5kb21SZWZlcmVuY2U9PT1uKSkpO2lmKHQ9PT15JiZVJiZvdShVLF8pLGMmJnQhPT15JiYhcj8uaXNDb25uZWN0ZWQmJmVaKGVRKFUpKT09PWVRKFUpLmJvZHkpe2VuKFUpJiZVLmZvY3VzKCk7bGV0IGU9SS5jdXJyZW50LG49VigpLHQ9bltlXXx8bltuLmxlbmd0aC0xXXx8VTtlbih0KSYmdC5mb2N1cygpfWlmKGIuY3VycmVudC5pbnNpZGVSZWFjdFRyZWUpe2IuY3VycmVudC5pbnNpZGVSZWFjdFRyZWU9ITE7cmV0dXJufShBfHwhdSkmJm4mJmEmJiFNLmN1cnJlbnQmJm4hPT1vYygpJiYoQi5jdXJyZW50PSEwLG0oITEsZSxcImZvY3VzLW91dFwiKSl9KX19LFtyLHkseCxVLHUsTCxSLG0sZixjLFYsQSx3LF8sYl0pO2xldCAkPUMudXNlUmVmKG51bGwpLFo9Qy51c2VSZWYobnVsbCksWT10YigkLFI/LmJlZm9yZUluc2lkZVJlZiksWD10YihaLFI/LmFmdGVySW5zaWRlUmVmKTtmdW5jdGlvbiBRKGUpe3JldHVybiFyJiZkJiZ1PygwLGwuanN4KShvZCx7cmVmOlwic3RhcnRcIj09PWU/TjpELG9uQ2xpY2s6ZT0+bSghMSxlLm5hdGl2ZUV2ZW50KSxjaGlsZHJlbjpcInN0cmluZ1wiPT10eXBlb2YgZD9kOlwiRGlzbWlzc1wifSk6bnVsbH1DLnVzZUVmZmVjdCgoKT0+e2lmKHJ8fCF4KXJldHVybjtsZXQgZT1BcnJheS5mcm9tKFI/LnBvcnRhbE5vZGU/LnF1ZXJ5U2VsZWN0b3JBbGwoYFske2UxKFwicG9ydGFsXCIpfV1gKXx8W10pLG49TD9lOShMLm5vZGVzUmVmLmN1cnJlbnQsdygpKTpbXSx0PUwmJiF1P24ubWFwKGU9PmUuY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcpOltdLG89W3gsbi5maW5kKGU9PmVKKGUuY29udGV4dD8uZWxlbWVudHMuZG9tUmVmZXJlbmNlfHxudWxsKSk/LmNvbnRleHQ/LmVsZW1lbnRzLmRvbVJlZmVyZW5jZSwuLi5lLC4uLnQsLi4uaigpLE4uY3VycmVudCxELmN1cnJlbnQsJC5jdXJyZW50LFouY3VycmVudCxSPy5iZWZvcmVPdXRzaWRlUmVmLmN1cnJlbnQsUj8uYWZ0ZXJPdXRzaWRlUmVmLmN1cnJlbnQsXy5jdXJyZW50LmluY2x1ZGVzKFwicmVmZXJlbmNlXCIpfHxBP3k6bnVsbF0uZmlsdGVyKGU9Pm51bGwhPWUpLGE9dXx8QT9vbChvLCFFLEUpOm9sKG8pO3JldHVybigpPT57YSgpfX0sW3IseSx4LHUsXyxSLEEsUyxFLEwsdyxqXSksRigoKT0+e2lmKHJ8fCFlbihVKSlyZXR1cm47bGV0IGU9ZVooZVEoVSkpO3F1ZXVlTWljcm90YXNrKCgpPT57bGV0IG49cShVKSx0PVAuY3VycmVudCxyPShcIm51bWJlclwiPT10eXBlb2YgdD9uW3RdOnQuY3VycmVudCl8fFUsbz1lWShVLGUpO2t8fG98fCFnfHxucShyLHtwcmV2ZW50U2Nyb2xsOnI9PT1VfSl9KX0sW3IsZyxVLGsscSxQXSksRigoKT0+e3ZhciBlO2lmKHJ8fCFVKXJldHVybjtsZXQgbj1lUShVKTtmdW5jdGlvbiB0KHtyZWFzb246ZSxldmVudDpuLG5lc3RlZDp0fSl7aWYoW1wiaG92ZXJcIixcInNhZmUtcG9seWdvblwiXS5pbmNsdWRlcyhlKSYmXCJtb3VzZWxlYXZlXCI9PT1uLnR5cGUmJihCLmN1cnJlbnQ9ITApLFwib3V0c2lkZS1wcmVzc1wiPT09ZSlpZih0KUIuY3VycmVudD0hMTtlbHNlIGlmKGVCKG4pfHxlTShuKSlCLmN1cnJlbnQ9ITE7ZWxzZXtsZXQgZT0hMTtkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLmZvY3VzKHtnZXQgcHJldmVudFNjcm9sbCgpe3JldHVybiBlPSEwLCExfX0pLGU/Qi5jdXJyZW50PSExOkIuY3VycmVudD0hMH19ZT1lWihuKSxvcz1vcy5maWx0ZXIoZT0+ZS5pc0Nvbm5lY3RlZCksZSYmXCJib2R5XCIhPT1LKGUpJiYob3MucHVzaChlKSxvcy5sZW5ndGg+MjAmJihvcz1vcy5zbGljZSgtMjApKSksdi5vbihcIm9wZW5jaGFuZ2VcIix0KTtsZXQgbz1uLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3JldHVybiBvLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSxvLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLE9iamVjdC5hc3NpZ24oby5zdHlsZSx0JCksSCYmeSYmeS5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmVuZFwiLG8pLCgpPT57di5vZmYoXCJvcGVuY2hhbmdlXCIsdCk7bGV0IGU9ZVoobikscj1lWSh4LGUpfHxMJiZlNihMLm5vZGVzUmVmLmN1cnJlbnQsdygpLCExKS5zb21lKG49PmVZKG4uY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcsZSkpLGE9ZnVuY3Rpb24oKXtpZihcImJvb2xlYW5cIj09dHlwZW9mIHouY3VycmVudCl7bGV0IGU9eXx8b2MoKTtyZXR1cm4gZSYmZS5pc0Nvbm5lY3RlZD9lOm99cmV0dXJuIHouY3VycmVudC5jdXJyZW50fHxvfSgpO3F1ZXVlTWljcm90YXNrKCgpPT57bGV0IHQ9ZnVuY3Rpb24oZSl7bGV0IG49cmQoKTtyZXR1cm4gcnUoZSxuKT9lOnJzKGUsbilbMF18fGV9KGEpO3ouY3VycmVudCYmIUIuY3VycmVudCYmZW4odCkmJih0PT09ZXx8ZT09PW4uYm9keXx8cikmJnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxvLnJlbW92ZSgpfSl9fSxbcix4LFUseixiLHYsTCxILHksd10pLEMudXNlRWZmZWN0KCgpPT57cXVldWVNaWNyb3Rhc2soKCk9PntCLmN1cnJlbnQ9ITF9KX0sW3JdKSxGKCgpPT57aWYoIXImJlIpcmV0dXJuIFIuc2V0Rm9jdXNNYW5hZ2VyU3RhdGUoe21vZGFsOnUsY2xvc2VPbkZvY3VzT3V0OmYsb3BlbjpnLG9uT3BlbkNoYW5nZTptLGRvbVJlZmVyZW5jZTp5fSksKCk9PntSLnNldEZvY3VzTWFuYWdlclN0YXRlKG51bGwpfX0sW3IsUix1LGcsbSxmLHldKSxGKCgpPT57IXImJlUmJm91KFUsXyl9LFtyLFUsX10pO2xldCBHPSFyJiZTJiYoIXV8fCFBKSYmKEh8fHUpO3JldHVybigwLGwuanN4cykoQy5GcmFnbWVudCx7Y2hpbGRyZW46W0cmJigwLGwuanN4KSh0Wix7XCJkYXRhLXR5cGVcIjpcImluc2lkZVwiLHJlZjpZLG9uRm9jdXM6ZT0+e2lmKHUpe2xldCBlPXEoKTtucShcInJlZmVyZW5jZVwiPT09b1swXT9lWzBdOmVbZS5sZW5ndGgtMV0pfWVsc2UgaWYoUj8ucHJlc2VydmVUYWJPcmRlciYmUi5wb3J0YWxOb2RlKWlmKEIuY3VycmVudD0hMSxyZyhlLFIucG9ydGFsTm9kZSkpe2xldCBlPXJwKHkpO2U/LmZvY3VzKCl9ZWxzZSBSLmJlZm9yZU91dHNpZGVSZWYuY3VycmVudD8uZm9jdXMoKX19KSwhQSYmUShcInN0YXJ0XCIpLHQsUShcImVuZFwiKSxHJiYoMCxsLmpzeCkodFose1wiZGF0YS10eXBlXCI6XCJpbnNpZGVcIixyZWY6WCxvbkZvY3VzOmU9PntpZih1KW5xKHEoKVswXSk7ZWxzZSBpZihSPy5wcmVzZXJ2ZVRhYk9yZGVyJiZSLnBvcnRhbE5vZGUpaWYoZiYmKEIuY3VycmVudD0hMCkscmcoZSxSLnBvcnRhbE5vZGUpKXtsZXQgZT1yaCh5KTtlPy5mb2N1cygpfWVsc2UgUi5hZnRlck91dHNpZGVSZWYuY3VycmVudD8uZm9jdXMoKX19KV19KX1sZXQgb3A9ey4uLnRWLC4uLnRUfSxvaD1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXR7cmVuZGVyOnQsY2xhc3NOYW1lOnIsZmluYWxGb2N1czpvLC4uLmF9PWUse29wZW46aSxzZXRPcGVuOnMscG9wdXBSZWY6Yyx0cmFuc2l0aW9uU3RhdHVzOnUscG9wdXBQcm9wczpkLG1vdW50ZWQ6ZixpbnN0YW50VHlwZTpwLG9uT3BlbkNoYW5nZUNvbXBsZXRlOmgscGFyZW50OmcsbGFzdE9wZW5DaGFuZ2VSZWFzb246bSxyb290SWQ6dn09bjAoKSx7c2lkZTpiLGFsaWduOnksZmxvYXRpbmdDb250ZXh0Onh9PWZ1bmN0aW9uKCl7bGV0IGU9Qy51c2VDb250ZXh0KHJBKTtpZih2b2lkIDA9PT1lKXRocm93IEVycm9yKFwiQmFzZSBVSTogTWVudVBvc2l0aW9uZXJDb250ZXh0IGlzIG1pc3NpbmcuIE1lbnVQb3NpdGlvbmVyIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8TWVudS5Qb3NpdGlvbmVyPi5cIik7cmV0dXJuIGV9KCk7bjUoe29wZW46aSxyZWY6YyxvbkNvbXBsZXRlKCl7aSYmaD8uKCEwKX19KTtsZXR7ZXZlbnRzOnd9PVcoKTtDLnVzZUVmZmVjdCgoKT0+e2Z1bmN0aW9uIGUoZSl7cyghMSxlLmRvbUV2ZW50LGUucmVhc29uKX1yZXR1cm4gdy5vbihcImNsb3NlXCIsZSksKCk9Pnt3Lm9mZihcImNsb3NlXCIsZSl9fSxbdyxzXSk7bGV0IGo9dGooXCJkaXZcIixlLHtzdGF0ZTpDLnVzZU1lbW8oKCk9Pih7dHJhbnNpdGlvblN0YXR1czp1LHNpZGU6YixhbGlnbjp5LG9wZW46aSxuZXN0ZWQ6XCJtZW51XCI9PT1nLnR5cGUsaW5zdGFudDpwfSksW3UsYix5LGksZy50eXBlLHBdKSxyZWY6W24sY10sY3VzdG9tU3R5bGVIb29rTWFwcGluZzpvcCxwcm9wczpbZCxcInN0YXJ0aW5nXCI9PT11P250Om5yLGEse1wiZGF0YS1yb290b3duZXJpZFwiOnZ9XX0pLGs9dm9pZCAwPT09Zy50eXBlfHxcImNvbnRleHQtbWVudVwiPT09Zy50eXBlO3JldHVyblwibWVudWJhclwiPT09Zy50eXBlJiZcIm91dHNpZGUtcHJlc3NcIiE9PW0mJihrPSEwKSwoMCxsLmpzeCkob2Yse2NvbnRleHQ6eCxtb2RhbDohMSxkaXNhYmxlZDohZixyZXR1cm5Gb2N1czpvfHxrLGluaXRpYWxGb2N1czpcIm1lbnVcIj09PWcudHlwZT8tMTowLHJlc3RvcmVGb2N1czohMCxjaGlsZHJlbjpqfSl9KSxvZz1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKSxvbT1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXR7cmVuZGVyOnQsY2xhc3NOYW1lOnIsLi4ub309ZSxbYSxpXT1DLnVzZVN0YXRlKHZvaWQgMCkscz1DLnVzZU1lbW8oKCk9Pih7c2V0TGFiZWxJZDppfSksW2ldKSxjPXRqKFwiZGl2XCIsZSx7cmVmOm4scHJvcHM6e3JvbGU6XCJncm91cFwiLFwiYXJpYS1sYWJlbGxlZGJ5XCI6YSwuLi5vfX0pO3JldHVybigwLGwuanN4KShvZy5Qcm92aWRlcix7dmFsdWU6cyxjaGlsZHJlbjpjfSl9KTtmdW5jdGlvbiBvdihlKXtyZXR1cm4gSChlLFwiYmFzZS11aVwiKX1sZXQgb2I9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e2NsYXNzTmFtZTp0LHJlbmRlcjpyLGlkOm8sLi4uYX09ZSxpPW92KG8pLHtzZXRMYWJlbElkOmx9PWZ1bmN0aW9uKCl7bGV0IGU9Qy51c2VDb250ZXh0KG9nKTtpZih2b2lkIDA9PT1lKXRocm93IEVycm9yKFwiQmFzZSBVSTogTWVudUdyb3VwUm9vdENvbnRleHQgaXMgbWlzc2luZy4gTWVudSBncm91cCBwYXJ0cyBtdXN0IGJlIHVzZWQgd2l0aGluIDxNZW51Lkdyb3VwPi5cIik7cmV0dXJuIGV9KCk7cmV0dXJuIEYoKCk9PihsKGkpLCgpPT57bCh2b2lkIDApfSksW2wsaV0pLHRqKFwiZGl2XCIsZSx7cmVmOm4scHJvcHM6e2lkOmkscm9sZTpcInByZXNlbnRhdGlvblwiLC4uLmF9fSl9KSxveT17dHlwZTpcInJlZ3VsYXItaXRlbVwifSxveD1DLm1lbW8oQy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e2NsYXNzTmFtZTp0LGNsb3NlT25DbGljazpyPSEwLGRpc2FibGVkOm89ITEsaGlnaGxpZ2h0ZWQ6YSxpZDppLG1lbnVFdmVudHM6bCxpdGVtUHJvcHM6cyxyZW5kZXI6YyxhbGxvd01vdXNlVXBUcmlnZ2VyUmVmOnUsdHlwaW5nUmVmOmQsbmF0aXZlQnV0dG9uOmYsLi4ucH09ZSx7Z2V0SXRlbVByb3BzOmgsaXRlbVJlZjpnfT1mdW5jdGlvbihlKXtsZXR7Y2xvc2VPbkNsaWNrOm4sZGlzYWJsZWQ6dD0hMSxoaWdobGlnaHRlZDpyLGlkOm8sbWVudUV2ZW50czphLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6aSx0eXBpbmdSZWY6bCxuYXRpdmVCdXR0b246cyxpdGVtTWV0YWRhdGE6Y309ZSx1PUMudXNlUmVmKG51bGwpLHtnZXRCdXR0b25Qcm9wczpkLGJ1dHRvblJlZjpmfT10cSh7ZGlzYWJsZWQ6dCxmb2N1c2FibGVXaGVuRGlzYWJsZWQ6ITAsbmF0aXZlOnN9KSxwPUMudXNlQ2FsbGJhY2soZT0+dGMoe2lkOm8scm9sZTpcIm1lbnVpdGVtXCIsdGFiSW5kZXg6cj8wOi0xLG9uTW91c2VFbnRlcigpe1wic3VibWVudS10cmlnZ2VyXCI9PT1jLnR5cGUmJmMuc2V0QWN0aXZlKCl9LG9uS2V5VXA6ZT0+e1wiIFwiPT09ZS5rZXkmJmwuY3VycmVudCYmZS5wcmV2ZW50QmFzZVVJSGFuZGxlcigpfSxvbkNsaWNrOmU9PntuJiZhLmVtaXQoXCJjbG9zZVwiLHtkb21FdmVudDplLHJlYXNvbjpcIml0ZW0tcHJlc3NcIn0pfSxvbk1vdXNlVXA6KCk9Pnt1LmN1cnJlbnQmJmkuY3VycmVudCYmXCJyZWd1bGFyLWl0ZW1cIj09PWMudHlwZSYmdS5jdXJyZW50LmNsaWNrKCl9fSxlLGQpLFtvLHIsZCxsLG4sYSxpLGNdKSxoPXRiKHUsZik7cmV0dXJuIEMudXNlTWVtbygoKT0+KHtnZXRJdGVtUHJvcHM6cCxpdGVtUmVmOmh9KSxbcCxoXSl9KHtjbG9zZU9uQ2xpY2s6cixkaXNhYmxlZDpvLGhpZ2hsaWdodGVkOmEsaWQ6aSxtZW51RXZlbnRzOmwsYWxsb3dNb3VzZVVwVHJpZ2dlclJlZjp1LHR5cGluZ1JlZjpkLG5hdGl2ZUJ1dHRvbjpmLGl0ZW1NZXRhZGF0YTpveX0pO3JldHVybiB0aihcImRpdlwiLGUse3N0YXRlOkMudXNlTWVtbygoKT0+KHtkaXNhYmxlZDpvLGhpZ2hsaWdodGVkOmF9KSxbbyxhXSkscmVmOltnLG5dLHByb3BzOltzLHAsaF19KX0pKSxvdz1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXR7aWQ6dCxsYWJlbDpyLG5hdGl2ZUJ1dHRvbjpvPSExLC4uLmF9PWUsaT1DLnVzZVJlZihudWxsKSxzPXRFKHtsYWJlbDpyfSksYz10YihuLHMucmVmLGkpLHtpdGVtUHJvcHM6dSxhY3RpdmVJbmRleDpkLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6Zix0eXBpbmdSZWY6cH09bjAoKSxoPW92KHQpLGc9cy5pbmRleD09PWQse2V2ZW50czptfT1XKCk7cmV0dXJuKDAsbC5qc3gpKG94LHsuLi5hLGlkOmgscmVmOmMsaGlnaGxpZ2h0ZWQ6ZyxtZW51RXZlbnRzOm0saXRlbVByb3BzOnUsYWxsb3dNb3VzZVVwVHJpZ2dlclJlZjpmLHR5cGluZ1JlZjpwLG5hdGl2ZUJ1dHRvbjpvfSl9KTt2YXIgb2o9XCJfX25leHRfYnVpbHRpbl9fXCI7ZnVuY3Rpb24gb2soZSl7cmV0dXJuIGUucmVwbGFjZShuZXcgUmVnRXhwKFwiXlwiLmNvbmNhdChvaikpLFwiXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChcIlwiLmNvbmNhdChcIkBib3VuZGFyeVwiLFwiJFwiKSksXCJcIil9dmFyIG9BPVwiYm91bmRhcnk6XCI7ZnVuY3Rpb24gb08oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChvQSl9dmFyIG9DPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZXJyb3JzL2Rldi10b29scy1pbmRpY2F0b3IvdXRpbHMudHNcIik7ZnVuY3Rpb24gb1MoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG9FKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcjtyPXRbbl0sbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXJ9KX1yZXR1cm4gZX1mdW5jdGlvbiBvXyhlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9ZnVuY3Rpb24gb1AoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG9TKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG9TKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfXZhciBvej1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoZSksdD0wO3Q8ZTt0Kyspblt0XT1hcmd1bWVudHNbdF07cmV0dXJuIGZ1bmN0aW9uKGUpe24uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24oZSk6biYmKG4uY3VycmVudD1lKX0pfX07ZnVuY3Rpb24gb0woZSl7dmFyIG4sdCxyPWUubm9kZVN0YXRlLG89ZS5ib3VuZGFyaWVzLGE9ci5wYWdlUGF0aCxpPXIuYm91bmRhcnlUeXBlLHM9ci5zZXRCb3VuZGFyeVR5cGUsYz1vUCgoMCxDLnVzZVN0YXRlKSghMSksMiksdT1jWzBdLGQ9Y1sxXSxmPW9QKCgwLEMudXNlU3RhdGUpKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJuZXh0anMtcG9ydGFsXCIpLnNoYWRvd1Jvb3R9KSwxKVswXSxwPSgwLEMudXNlUmVmKShmKSxoPSgwLEMudXNlUmVmKShudWxsKSxnPSgwLEMudXNlUmVmKShudWxsKTsoMCxvQy5POCkoZyxoLHUsZnVuY3Rpb24oKXtkKCExKX0sbnVsbD09KG49aC5jdXJyZW50KT92b2lkIDA6bi5vd25lckRvY3VtZW50KTt2YXIgbT1PYmplY3QudmFsdWVzKG8pLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lfSksdj1tP251bGw9PSh0PW0uc3BsaXQoXCIuXCIpKT92b2lkIDA6dC5wb3AoKTpcImpzXCIsYj0oMCxDLnVzZU1lbW8pKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIG49b1AoZSwyKSx0PW5bMF0scj1vaygoblsxXXx8XCJcIikuc3BsaXQoXCIvXCIpLnBvcCgpfHxcIlwiLmNvbmNhdCh0LFwiLlwiKS5jb25jYXQodikpO3JldHVyblt0LHJdfSkpfSxbbyx2XSkseT0oYXx8XCJcIikuc3BsaXQoXCIvXCIpLnBvcCgpfHxcIlwiLHg9b2soaT9cInBhZ2UuXCIuY29uY2F0KHYpOnl8fFwicGFnZS5cIi5jb25jYXQodikpLHc9W3tsYWJlbDpiLmxvYWRpbmcsdmFsdWU6XCJsb2FkaW5nXCIsaWNvbjooMCxsLmpzeCkob1Qse30pLGRpc2FibGVkOiFvLmxvYWRpbmd9LHtsYWJlbDpiLmVycm9yLHZhbHVlOlwiZXJyb3JcIixpY29uOigwLGwuanN4KShvUix7fSksZGlzYWJsZWQ6IW8uZXJyb3J9LHtsYWJlbDpiW1wibm90LWZvdW5kXCJdLHZhbHVlOlwibm90LWZvdW5kXCIsaWNvbjooMCxsLmpzeCkob04se30pLGRpc2FibGVkOiFvW1wibm90LWZvdW5kXCJdfV0saj17bGFiZWw6aT9cIlJlc2V0XCI6eCx2YWx1ZTpcInJlc2V0XCIsaWNvbjooMCxsLmpzeCkob0Qse30pLGRpc2FibGVkOm51bGw9PT1pfSxrPSgwLEMudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBVUkxTZWFyY2hQYXJhbXMoe2ZpbGU6ZS5maWxlUGF0aCxpc0FwcFJlbGF0aXZlUGF0aDpcIjFcIn0pO2ZldGNoKFwiXCIuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEh8fFwiXCIsXCIvX19uZXh0anNfbGF1bmNoLWVkaXRvcj9cIikuY29uY2F0KG4udG9TdHJpbmcoKSkpLmNhdGNoKGNvbnNvbGUud2Fybil9LFtdKSxBPSgwLEMudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlXCJub3QtZm91bmRcIjpjYXNlXCJsb2FkaW5nXCI6Y2FzZVwiZXJyb3JcIjpzKGUpO2JyZWFrO2Nhc2VcInJlc2V0XCI6cyhudWxsKTticmVhaztjYXNlXCJvcGVuLWVkaXRvclwiOmEmJmsoe2ZpbGVQYXRoOmF9KX19LFtzLGEsa10pLE89KDAsQy51c2VNZW1vKShmdW5jdGlvbigpe3JldHVyblwibGF5b3V0XCIhPT1yLnR5cGUmJlwidGVtcGxhdGVcIiE9PXIudHlwZSYmT2JqZWN0LnZhbHVlcyhvKS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZX0pfSxbci50eXBlLG9dKTtyZXR1cm4oMCxsLmpzeHMpKHR2LHtkZWxheTowLG1vZGFsOiExLG9wZW46dSxvbk9wZW5DaGFuZ2U6ZCxjaGlsZHJlbjpbKDAsbC5qc3gpKHRXLHtjbGFzc05hbWU6XCJzZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXJcIixcImRhdGEtbmV4dGpzLWRldi1vdmVybGF5LXNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci1idXR0b25cIjohMCxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIG49b3ooZS5yZWYsaCk7cmV0dXJuKDAsbC5qc3gpKG9NLG9fKG9FKHt9LGUpLHtyZWY6bn0pKX0sZGlzYWJsZWQ6IU99KSwoMCxsLmpzeCkocmsse2NvbnRhaW5lcjpwLGNoaWxkcmVuOigwLGwuanN4KShvZSx7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1wb3NpdGlvbmVyXCIsc2lkZTpcImJvdHRvbVwiLGFsaWduOlwiY2VudGVyXCIsc2lkZU9mZnNldDo2LGFycm93UGFkZGluZzo4LHJlZjpnLGNoaWxkcmVuOigwLGwuanN4cykob2gse2NsYXNzTmFtZTpcInNlZ21lbnQtYm91bmRhcnktZHJvcGRvd25cIixjaGlsZHJlbjpbKDAsbC5qc3hzKShvbSx7Y2hpbGRyZW46WygwLGwuanN4KShvYix7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS1ncm91cC1sYWJlbFwiLGNoaWxkcmVuOlwiVG9nZ2xlIE92ZXJyaWRlc1wifSksdy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuKDAsbC5qc3hzKShvdyx7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBBKGUudmFsdWUpfSxkaXNhYmxlZDplLmRpc2FibGVkLGNoaWxkcmVuOltlLmljb24sZS5sYWJlbF19LGUudmFsdWUpfSldfSksKDAsbC5qc3gpKG9tLHtjaGlsZHJlbjooMCxsLmpzeHMpKG93LHtjbGFzc05hbWU6XCJzZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW1cIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIEEoai52YWx1ZSl9LGRpc2FibGVkOmouZGlzYWJsZWQsY2hpbGRyZW46W2ouaWNvbixqLmxhYmVsXX0sai52YWx1ZSl9KV19KX0pfSldfSl9ZnVuY3Rpb24gb1QoKXtyZXR1cm4oMCxsLmpzeHMpKFwic3ZnXCIse3dpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46WygwLGwuanN4KShcImdcIix7Y2xpcFBhdGg6XCJ1cmwoI2NsaXAwXzI3NTlfMTg2NilcIixjaGlsZHJlbjooMCxsLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTAgMy41QzEzLjU4OTkgMy41IDE2LjUgNi40MTAxNSAxNi41IDEwQzE2LjUgMTMuNTg5OSAxMy41ODk5IDE2LjUgMTAgMTYuNUM2LjQxMDE1IDE2LjUgMy41IDEzLjU4OTkgMy41IDEwQzMuNSA2LjQxMDE1IDYuNDEwMTUgMy41IDEwIDMuNVpNMiAxMEMyIDE0LjQxODMgNS41ODE3MiAxOCAxMCAxOEMxNC40MTgzIDE4IDE4IDE0LjQxODMgMTggMTBDMTggNS41ODE3MiAxNC40MTgzIDIgMTAgMkM1LjU4MTcyIDIgMiA1LjU4MTcyIDIgMTBaTTEwLjc1IDkuNjI0MDJWNkg5LjI1VjkuODc1QzkuMjUgMTAuMTg5OCA5LjM5ODU4IDEwLjQ4NiA5LjY1MDM5IDEwLjY3NDhMMTEuNTQ5OCAxMi4wOTk2TDEyLjE1MDQgMTIuNTQ5OEwxMy4wNDk4IDExLjM0OTZMMTIuNDUwMiAxMC45MDA0TDEwLjc1IDkuNjI0MDJaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSwoMCxsLmpzeCkoXCJkZWZzXCIse2NoaWxkcmVuOigwLGwuanN4KShcImNsaXBQYXRoXCIse2lkOlwiY2xpcDBfMjc1OV8xODY2XCIsY2hpbGRyZW46KDAsbC5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIixmaWxsOlwid2hpdGVcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMiAyKVwifSl9KX0pXX0pfWZ1bmN0aW9uIG9SKCl7cmV0dXJuKDAsbC5qc3hzKShcInN2Z1wiLHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46WygwLGwuanN4KShcImdcIix7Y2xpcFBhdGg6XCJ1cmwoI2NsaXAwXzI3NTlfMTg4MSlcIixjaGlsZHJlbjooMCxsLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMy41IDcuMzA3NjJWMTIuNjkyNEw3LjMwNzYyIDE2LjVIMTIuNjkyNEwxNi41IDEyLjY5MjRWNy4zMDc2MkwxMi42OTI0IDMuNUg3LjMwNzYyTDMuNSA3LjMwNzYyWk0xOCAxMi44OTk0TDE3Ljk5NTEgMTIuOTk4QzE3Ljk3MjQgMTMuMjI3MSAxNy44NzEyIDEzLjQ0MjMgMTcuNzA3IDEzLjYwNjRMMTMuNjA2NCAxNy43MDdMMTMuNTMzMiAxNy43NzM0QzEzLjM4MDYgMTcuODk4NSAxMy4xOTQ0IDE3Ljk3NTcgMTIuOTk4IDE3Ljk5NTFMMTIuODk5NCAxOEg3LjEwMDU5TDcuMDAxOTUgMTcuOTk1MUM2LjgwNTYyIDE3Ljk3NTcgNi42MTk0IDE3Ljg5ODUgNi40NjY4IDE3Ljc3MzRMNi4zOTM1NSAxNy43MDdMMi4yOTI5NyAxMy42MDY0QzIuMTI4ODMgMTMuNDQyMyAyLjAyNzU2IDEzLjIyNzEgMi4wMDQ4OCAxMi45OThMMiAxMi44OTk0VjcuMTAwNTlDMiA2LjgzNTM5IDIuMTA1NDYgNi41ODEwOSAyLjI5Mjk3IDYuMzkzNTVMNi4zOTM1NSAyLjI5Mjk3QzYuNTU3NzEgMi4xMjg4MyA2Ljc3Mjk0IDIuMDI3NTYgNy4wMDE5NSAyLjAwNDg4TDcuMTAwNTkgMkgxMi44OTk0TDEyLjk5OCAyLjAwNDg4QzEzLjIyNzEgMi4wMjc1NiAxMy40NDIzIDIuMTI4ODMgMTMuNjA2NCAyLjI5Mjk3TDE3LjcwNyA2LjM5MzU1QzE3Ljg5NDUgNi41ODEwOSAxOCA2LjgzNTM5IDE4IDcuMTAwNTlWMTIuODk5NFpNOS4yNSA1Ljc1SDEwLjc1TDEwLjc1IDEwLjc1SDkuMjVMOS4yNSA1Ljc1Wk0xMCAxNEMxMC41NTIzIDE0IDExIDEzLjU1MjMgMTEgMTNDMTEgMTIuNDQ3NyAxMC41NTIzIDEyIDEwIDEyQzkuNDQ3NzIgMTIgOSAxMi40NDc3IDkgMTNDOSAxMy41NTIzIDkuNDQ3NzIgMTQgMTAgMTRaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSwoMCxsLmpzeCkoXCJkZWZzXCIse2NoaWxkcmVuOigwLGwuanN4KShcImNsaXBQYXRoXCIse2lkOlwiY2xpcDBfMjc1OV8xODgxXCIsY2hpbGRyZW46KDAsbC5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIixmaWxsOlwid2hpdGVcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMiAyKVwifSl9KX0pXX0pfWZ1bmN0aW9uIG9OKCl7cmV0dXJuKDAsbC5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46KDAsbC5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTEwLjU1ODYgMi41QzExLjEzNDEgMi41MDAwNCAxMS42NTg4IDIuODI5NCAxMS45MDkxIDMuMzQ3NjZMMTcuODA3NiAxNS41NjU0QzE4LjEyNzggMTYuMjI5MiAxNy42NDQyIDE2Ljk5OTcgMTYuOTA3MiAxN0gzLjA5Mjc0QzIuMzU1NzQgMTYuOTk5NyAxLjg3MjEgMTYuMjI5MiAyLjE5MjM1IDE1LjU2NTRMOC4wOTA3OSAzLjM0NzY2QzguMzQxMDkgMi44Mjk0IDguODY1ODMgMi41MDAwNCA5LjQ0MTM3IDIuNUgxMC41NTg2Wk0zLjg5MDU5IDE1LjVIMTYuMTA5M0wxMC41NTg2IDRIOS40NDEzN0wzLjg5MDU5IDE1LjVaTTkuMjQ5OTcgNi43NUgxMC43NUwxMC43NSAxMC43NUg5LjI0OTk3TDkuMjQ5OTcgNi43NVpNOS45OTk5NyAxNEMxMC41NTIzIDE0IDExIDEzLjU1MjMgMTEgMTNDMTEgMTIuNDQ3NyAxMC41NTIzIDEyIDkuOTk5OTcgMTJDOS40NDc2OCAxMiA4Ljk5OTk3IDEyLjQ0NzcgOC45OTk5NyAxM0M4Ljk5OTk3IDEzLjU1MjMgOS40NDc2OCAxNCA5Ljk5OTk3IDE0WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gb0QoKXtyZXR1cm4oMCxsLmpzeCkoXCJzdmdcIix7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOigwLGwuanN4KShcInBhdGhcIix7ZDpcIk05Ljk2NDg0IDNDMTMuODQ2MyAzLjAwMDE4IDE3IDYuMTMwMTIgMTcgMTBDMTcgMTMuODY5OSAxMy44NDYzIDE2Ljk5OTggOS45NjQ4NCAxN0M3LjYyNDA0IDE3IDUuNTQ4NzcgMTUuODYxNyA0LjI3MDUxIDE0LjExMjNMMy44MjgxMiAxMy41MDY4TDUuMDM5MDYgMTIuNjIyMUw1LjQ4MTQ1IDEzLjIyNzVDNi40ODgxNSAxNC42MDUzIDguMTIwOTIgMTUuNSA5Ljk2NDg0IDE1LjVDMTMuMDI1OSAxNS40OTk4IDE1LjUgMTMuMDMzNSAxNS41IDEwQzE1LjUgNi45NjY1NCAxMy4wMjU5IDQuNTAwMTggOS45NjQ4NCA0LjVDNy40MjkwNSA0LjUgNS4yOTU0NCA2LjE5NDI5IDQuNjM4NjcgOC41SDhWMTBIMi43NUMyLjMzNTc5IDEwIDIgOS42NjQyMSAyIDkuMjVWNEgzLjVWNy4yMzczQzQuNTc3ODEgNC43NDM3NiA3LjA2NzQ5IDMgOS45NjQ4NCAzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gb0IoZSl7cmV0dXJuKDAsbC5qc3gpKFwic3ZnXCIsb18ob0Uoe3N0cm9rZUxpbmVqb2luOlwicm91bmRcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCJ9LGUpLHtjaGlsZHJlbjooMCxsLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOC43MDcxIDIuMzk2NDRDOC4zMTY1OCAyLjAwNTkyIDcuNjgzNDEgMi4wMDU5MiA3LjI5Mjg5IDIuMzk2NDRMNC40Njk2NiA1LjIxOTY2TDMuOTM5MzMgNS43NDk5OUw0Ljk5OTk5IDYuODEwNjVMNS41MzAzMiA2LjI4MDMyTDcuOTk5OTkgMy44MTA2NUwxMC40Njk3IDYuMjgwMzJMMTEgNi44MTA2NUwxMi4wNjA3IDUuNzQ5OTlMMTEuNTMwMyA1LjIxOTY2TDguNzA3MSAyLjM5NjQ0Wk01LjUzMDMyIDkuNzE5NjZMNC45OTk5OSA5LjE4OTMzTDMuOTM5MzMgMTAuMjVMNC40Njk2NiAxMC43ODAzTDcuMjkyODkgMTMuNjAzNUM3LjY4MzQxIDEzLjk5NDEgOC4zMTY1OCAxMy45OTQxIDguNzA3MSAxMy42MDM1TDExLjUzMDMgMTAuNzgwM0wxMi4wNjA3IDEwLjI1TDExIDkuMTg5MzNMMTAuNDY5NyA5LjcxOTY2TDcuOTk5OTkgMTIuMTg5M0w1LjUzMDMyIDkuNzE5NjZaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSl9ZnVuY3Rpb24gb00oZSl7cmV0dXJuKDAsbC5qc3gpKFwiYnV0dG9uXCIsb18ob0Uoe30sZSkse2NoaWxkcmVuOigwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHRcIixjaGlsZHJlbjooMCxsLmpzeCkob0Ise2NsYXNzTmFtZTpcInBsdXMtaWNvblwifSl9KX0pKX1sZXQgb0k9Qy5jcmVhdGVDb250ZXh0KHtoYXNQcm92aWRlcjohMSx0aW1lb3V0TXM6MCxkZWxheVJlZjp7Y3VycmVudDowfSxpbml0aWFsRGVsYXlSZWY6e2N1cnJlbnQ6MH0sdGltZW91dDpuZXcgZWosY3VycmVudElkUmVmOntjdXJyZW50Om51bGx9LGN1cnJlbnRDb250ZXh0UmVmOntjdXJyZW50Om51bGx9fSk7ZnVuY3Rpb24gb0goZSl7bGV0e2NoaWxkcmVuOm4sZGVsYXk6dCx0aW1lb3V0TXM6cj0wfT1lLG89Qy51c2VSZWYodCksYT1DLnVzZVJlZih0KSxpPUMudXNlUmVmKG51bGwpLHM9Qy51c2VSZWYobnVsbCksYz1laygpO3JldHVybigwLGwuanN4KShvSS5Qcm92aWRlcix7dmFsdWU6Qy51c2VNZW1vKCgpPT4oe2hhc1Byb3ZpZGVyOiEwLGRlbGF5UmVmOm8saW5pdGlhbERlbGF5UmVmOmEsY3VycmVudElkUmVmOmksdGltZW91dE1zOnIsY3VycmVudENvbnRleHRSZWY6cyx0aW1lb3V0OmN9KSxbcixjXSksY2hpbGRyZW46bn0pfWxldCBvRj1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKSxvVT1mdW5jdGlvbihlKXtsZXR7ZGVsYXk6bixjbG9zZURlbGF5OnQsdGltZW91dDpyPTQwMH09ZSxvPUMudXNlTWVtbygoKT0+KHtkZWxheTpuLGNsb3NlRGVsYXk6dH0pLFtuLHRdKTtyZXR1cm4oMCxsLmpzeCkob0YuUHJvdmlkZXIse3ZhbHVlOm8sY2hpbGRyZW46KDAsbC5qc3gpKG9ILHtkZWxheTp7b3BlbjpuLGNsb3NlOnR9LHRpbWVvdXRNczpyLGNoaWxkcmVuOmUuY2hpbGRyZW59KX0pfSxvVj1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBvcSgpe2xldCBlPUMudXNlQ29udGV4dChvVik7aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IFRvb2x0aXBSb290Q29udGV4dCBpcyBtaXNzaW5nLiBUb29sdGlwIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8VG9vbHRpcC5Sb290Pi5cIik7cmV0dXJuIGV9ZnVuY3Rpb24gb1coZSl7cmV0dXJuIG51bGwhPWUmJm51bGwhPWUuY2xpZW50WH1mdW5jdGlvbiBvJChlKXtsZXR7ZGlzYWJsZWQ6bj0hMSxkZWZhdWx0T3Blbjp0PSExLG9uT3BlbkNoYW5nZTpyLG9wZW46byxkZWxheTphLGNsb3NlRGVsYXk6aSxob3ZlcmFibGU6cz0hMCx0cmFja0N1cnNvckF4aXM6Yz1cIm5vbmVcIixhY3Rpb25zUmVmOnUsb25PcGVuQ2hhbmdlQ29tcGxldGU6ZH09ZSxmPWE/PzYwMCxwPWk/PzAsW2gsZ109Qy51c2VTdGF0ZShudWxsKSxbbSx2XT1DLnVzZVN0YXRlKG51bGwpLFtiLHldPUMudXNlU3RhdGUoKSx4PUMudXNlUmVmKG51bGwpLFt3LGpdPW40KHtjb250cm9sbGVkOm8sZGVmYXVsdDp0LG5hbWU6XCJUb29sdGlwXCIsc3RhdGU6XCJvcGVuXCJ9KSxrPVQociksQT1UKChlLG4sdCk9PntsZXQgcj1cInRyaWdnZXItaG92ZXJcIj09PXQsbz1lJiZcInRyaWdnZXItZm9jdXNcIj09PXQsYT0hZSYmKFwidHJpZ2dlci1wcmVzc1wiPT09dHx8XCJlc2NhcGUta2V5XCI9PT10KTtmdW5jdGlvbiBpKCl7ayhlLG4sdCksaihlKX1yP0UuZmx1c2hTeW5jKGkpOmkoKSxvfHxhP3kobz9cImZvY3VzXCI6XCJkaXNtaXNzXCIpOlwidHJpZ2dlci1ob3ZlclwiPT09dCYmeSh2b2lkIDApfSk7dyYmbiYmQSghMSx2b2lkIDAsXCJkaXNhYmxlZFwiKTtsZXR7bW91bnRlZDpPLHNldE1vdW50ZWQ6Uyx0cmFuc2l0aW9uU3RhdHVzOl99PW4yKHcpLFA9VCgoKT0+e1MoITEpLGQ/LighMSl9KTtuNSh7ZW5hYmxlZDohdSxvcGVuOncscmVmOngsb25Db21wbGV0ZSgpe3d8fFAoKX19KSxDLnVzZUltcGVyYXRpdmVIYW5kbGUodSwoKT0+KHt1bm1vdW50OlB9KSxbUF0pO2xldCB6PVkoe2VsZW1lbnRzOntyZWZlcmVuY2U6aCxmbG9hdGluZzptfSxvcGVuOncsb25PcGVuQ2hhbmdlKGUsbix0KXtBKGUsbix0cih0KSl9fSksTD1DLnVzZUNvbnRleHQob0YpLHtkZWxheVJlZjpSLGlzSW5zdGFudFBoYXNlOk4saGFzUHJvdmlkZXI6RH09ZnVuY3Rpb24oZSxuPXt9KXtsZXR7b3Blbjp0LG9uT3BlbkNoYW5nZTpyLGZsb2F0aW5nSWQ6b309ZSx7ZW5hYmxlZDphPSEwfT1uLHtjdXJyZW50SWRSZWY6aSxkZWxheVJlZjpsLHRpbWVvdXRNczpzLGluaXRpYWxEZWxheVJlZjpjLGN1cnJlbnRDb250ZXh0UmVmOnUsaGFzUHJvdmlkZXI6ZCx0aW1lb3V0OmZ9PUMudXNlQ29udGV4dChvSSksW3AsaF09Qy51c2VTdGF0ZSghMSk7cmV0dXJuIEYoKCk9PntmdW5jdGlvbiBlKCl7aCghMSksdS5jdXJyZW50Py5zZXRJc0luc3RhbnRQaGFzZSghMSksaS5jdXJyZW50PW51bGwsdS5jdXJyZW50PW51bGwsbC5jdXJyZW50PWMuY3VycmVudH1pZihhJiZpLmN1cnJlbnQmJiF0JiZpLmN1cnJlbnQ9PT1vKXtpZihoKCExKSxzKXJldHVybiBmLnN0YXJ0KHMsZSksKCk9PntmLmNsZWFyKCl9O2UoKX19LFthLHQsbyxpLGwscyxjLHUsZl0pLEYoKCk9PntpZighYXx8IXQpcmV0dXJuO2xldCBlPXUuY3VycmVudCxuPWkuY3VycmVudDt1LmN1cnJlbnQ9e29uT3BlbkNoYW5nZTpyLHNldElzSW5zdGFudFBoYXNlOmh9LGkuY3VycmVudD1vLGwuY3VycmVudD17b3BlbjowLGNsb3NlOmU0KGMuY3VycmVudCxcImNsb3NlXCIpfSxudWxsIT09biYmbiE9PW8/KGYuY2xlYXIoKSxoKCEwKSxlPy5zZXRJc0luc3RhbnRQaGFzZSghMCksZT8ub25PcGVuQ2hhbmdlKCExKSk6KGgoITEpLGU/LnNldElzSW5zdGFudFBoYXNlKCExKSl9LFthLHQsbyxyLGksbCxzLGMsdSxmXSksRigoKT0+KCk9Pnt1LmN1cnJlbnQ9bnVsbH0sW3VdKSxDLnVzZU1lbW8oKCk9Pih7aGFzUHJvdmlkZXI6ZCxkZWxheVJlZjpsLGlzSW5zdGFudFBoYXNlOnB9KSxbZCxsLHBdKX0oeiksQj1OP1wiZGVsYXlcIjpiLE09ZTMoeix7ZW5hYmxlZDohbixtb3VzZU9ubHk6ITAsbW92ZTohMSxoYW5kbGVDbG9zZTpzJiZcImJvdGhcIiE9PWM/ZTcoKTpudWxsLHJlc3RNcygpe2xldCBlPUw/LmRlbGF5LG49XCJvYmplY3RcIj09dHlwZW9mIFIuY3VycmVudD9SLmN1cnJlbnQub3Blbjp2b2lkIDAsdD1mO3JldHVybiBEJiYodD0wIT09bj9hPz9lPz9mOjApLHR9LGRlbGF5KCl7bGV0IGU9XCJvYmplY3RcIj09dHlwZW9mIFIuY3VycmVudD9SLmN1cnJlbnQuY2xvc2U6dm9pZCAwLG49cDtyZXR1cm4gbnVsbD09aSYmRCYmKG49ZSkse2Nsb3NlOm59fX0pLEk9bm4oeix7ZW5hYmxlZDohbn0pLHtnZXRSZWZlcmVuY2VQcm9wczpILGdldEZsb2F0aW5nUHJvcHM6VX09bksoW00sSSxuZih6LHtlbmFibGVkOiFuLHJlZmVyZW5jZVByZXNzOiEwfSksZnVuY3Rpb24oZSxuPXt9KXtsZXR7b3Blbjp0LGRhdGFSZWY6cixlbGVtZW50czp7ZmxvYXRpbmc6byxkb21SZWZlcmVuY2U6YX0scmVmczppfT1lLHtlbmFibGVkOmw9ITAsYXhpczpzPVwiYm90aFwiLHg6Yz1udWxsLHk6dT1udWxsfT1uLGQ9Qy51c2VSZWYoITEpLGY9Qy51c2VSZWYobnVsbCksW3AsaF09Qy51c2VTdGF0ZSgpLFtnLG1dPUMudXNlU3RhdGUoW10pLHY9VCgoZSxuKT0+e2lmKCFkLmN1cnJlbnQmJighci5jdXJyZW50Lm9wZW5FdmVudHx8b1coci5jdXJyZW50Lm9wZW5FdmVudCkpKXt2YXIgdDtsZXQgbyxsLGM7aS5zZXRQb3NpdGlvblJlZmVyZW5jZSgodD17eDplLHk6bixheGlzOnMsZGF0YVJlZjpyLHBvaW50ZXJUeXBlOnB9LG89bnVsbCxsPW51bGwsYz0hMSx7Y29udGV4dEVsZW1lbnQ6YXx8dm9pZCAwLGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpe2xldCBlPWE/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfHx7d2lkdGg6MCxoZWlnaHQ6MCx4OjAseTowfSxuPVwieFwiPT09dC5heGlzfHxcImJvdGhcIj09PXQuYXhpcyxyPVwieVwiPT09dC5heGlzfHxcImJvdGhcIj09PXQuYXhpcyxpPVtcIm1vdXNlZW50ZXJcIixcIm1vdXNlbW92ZVwiXS5pbmNsdWRlcyh0LmRhdGFSZWYuY3VycmVudC5vcGVuRXZlbnQ/LnR5cGV8fFwiXCIpJiZcInRvdWNoXCIhPT10LnBvaW50ZXJUeXBlLHM9ZS53aWR0aCx1PWUuaGVpZ2h0LGQ9ZS54LGY9ZS55O3JldHVybiBudWxsPT1vJiZ0LngmJm4mJihvPWUueC10LngpLG51bGw9PWwmJnQueSYmciYmKGw9ZS55LXQueSksZC09b3x8MCxmLT1sfHwwLHM9MCx1PTAsIWN8fGk/KHM9XCJ5XCI9PT10LmF4aXM/ZS53aWR0aDowLHU9XCJ4XCI9PT10LmF4aXM/ZS5oZWlnaHQ6MCxkPW4mJm51bGwhPXQueD90Lng6ZCxmPXImJm51bGwhPXQueT90Lnk6Zik6YyYmIWkmJih1PVwieFwiPT09dC5heGlzP2UuaGVpZ2h0OnUscz1cInlcIj09PXQuYXhpcz9lLndpZHRoOnMpLGM9ITAse3dpZHRoOnMsaGVpZ2h0OnUseDpkLHk6Zix0b3A6ZixyaWdodDpkK3MsYm90dG9tOmYrdSxsZWZ0OmR9fX0pKX19KSxiPVQoZT0+e251bGw9PWMmJm51bGw9PXUmJih0P2YuY3VycmVudHx8bShbXSk6dihlLmNsaWVudFgsZS5jbGllbnRZKSl9KSx5PWVJKHApP286dCx4PUMudXNlQ2FsbGJhY2soKCk9PntpZigheXx8IWx8fG51bGwhPWN8fG51bGwhPXUpcmV0dXJuO2xldCBlPVEobyk7ZnVuY3Rpb24gbih0KXtlWShvLGVYKHQpKT8oZS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsbiksZi5jdXJyZW50PW51bGwpOnYodC5jbGllbnRYLHQuY2xpZW50WSl9aWYoIXIuY3VycmVudC5vcGVuRXZlbnR8fG9XKHIuY3VycmVudC5vcGVuRXZlbnQpKXtlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixuKTtsZXQgdD0oKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG4pLGYuY3VycmVudD1udWxsfTtyZXR1cm4gZi5jdXJyZW50PXQsdH1pLnNldFBvc2l0aW9uUmVmZXJlbmNlKGEpfSxbeSxsLGMsdSxvLHIsaSxhLHZdKTtDLnVzZUVmZmVjdCgoKT0+eCgpLFt4LGddKSxDLnVzZUVmZmVjdCgoKT0+e2wmJiFvJiYoZC5jdXJyZW50PSExKX0sW2wsb10pLEMudXNlRWZmZWN0KCgpPT57IWwmJnQmJihkLmN1cnJlbnQ9ITApfSxbbCx0XSksRigoKT0+e2wmJihudWxsIT1jfHxudWxsIT11KSYmKGQuY3VycmVudD0hMSx2KGMsdSkpfSxbbCxjLHUsdl0pO2xldCB3PUMudXNlTWVtbygoKT0+e2Z1bmN0aW9uIGUoZSl7aChlLnBvaW50ZXJUeXBlKX1yZXR1cm57b25Qb2ludGVyRG93bjplLG9uUG9pbnRlckVudGVyOmUsb25Nb3VzZU1vdmU6Yixvbk1vdXNlRW50ZXI6Yn19LFtiXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+bD97cmVmZXJlbmNlOnd9Ont9LFtsLHddKX0oeix7ZW5hYmxlZDohbiYmXCJub25lXCIhPT1jLGF4aXM6XCJub25lXCI9PT1jP3ZvaWQgMDpjfSldKSxWPUMudXNlTWVtbygoKT0+KHtvcGVuOncsc2V0T3BlbjpBLG1vdW50ZWQ6TyxzZXRNb3VudGVkOlMsc2V0VHJpZ2dlckVsZW1lbnQ6Zyxwb3NpdGlvbmVyRWxlbWVudDptLHNldFBvc2l0aW9uZXJFbGVtZW50OnYscG9wdXBSZWY6eCx0cmlnZ2VyUHJvcHM6SCgpLHBvcHVwUHJvcHM6VSgpLGZsb2F0aW5nUm9vdENvbnRleHQ6eixpbnN0YW50VHlwZTpCLHRyYW5zaXRpb25TdGF0dXM6Xyxvbk9wZW5DaGFuZ2VDb21wbGV0ZTpkfSksW3csQSxPLFMsZyxtLHYseCxILFUseixCLF8sZF0pLHE9Qy51c2VNZW1vKCgpPT4oey4uLlYsZGVsYXk6ZixjbG9zZURlbGF5OnAsdHJhY2tDdXJzb3JBeGlzOmMsaG92ZXJhYmxlOnN9KSxbVixmLHAsYyxzXSk7cmV0dXJuKDAsbC5qc3gpKG9WLlByb3ZpZGVyLHt2YWx1ZTpxLGNoaWxkcmVuOmUuY2hpbGRyZW59KX1sZXQgb1o9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e2NsYXNzTmFtZTp0LHJlbmRlcjpyLC4uLm99PWUse29wZW46YSxzZXRUcmlnZ2VyRWxlbWVudDppLHRyaWdnZXJQcm9wczpsfT1vcSgpO3JldHVybiB0aihcImJ1dHRvblwiLGUse3N0YXRlOkMudXNlTWVtbygoKT0+KHtvcGVuOmF9KSxbYV0pLHJlZjpbbixpXSxwcm9wczpbbCxvXSxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnRGfSl9KSxvWT1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBvWChlKXtsZXQgbj1yeCh7cm9vdDplLnJvb3R9KTtyZXR1cm4gbiYmRS5jcmVhdGVQb3J0YWwoZS5jaGlsZHJlbixuKX1mdW5jdGlvbiBvSyhlKXtsZXR7Y2hpbGRyZW46bixrZWVwTW91bnRlZDp0PSExLGNvbnRhaW5lcjpyfT1lLHttb3VudGVkOm99PW9xKCk7cmV0dXJuIG98fHQ/KDAsbC5qc3gpKG9ZLlByb3ZpZGVyLHt2YWx1ZTp0LGNoaWxkcmVuOigwLGwuanN4KShvWCx7cm9vdDpyLGNoaWxkcmVuOm59KX0pOm51bGx9bGV0IG9RPUMuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIG9HKCl7bGV0IGU9Qy51c2VDb250ZXh0KG9RKTtpZih2b2lkIDA9PT1lKXRocm93IEVycm9yKFwiQmFzZSBVSTogVG9vbHRpcFBvc2l0aW9uZXJDb250ZXh0IGlzIG1pc3NpbmcuIFRvb2x0aXBQb3NpdGlvbmVyIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8VG9vbHRpcC5Qb3NpdGlvbmVyPi5cIik7cmV0dXJuIGV9bGV0IG9KPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe2xldHtyZW5kZXI6dCxjbGFzc05hbWU6cixhbmNob3I6byxwb3NpdGlvbk1ldGhvZDphPVwiYWJzb2x1dGVcIixzaWRlOmk9XCJ0b3BcIixhbGlnbjpzPVwiY2VudGVyXCIsc2lkZU9mZnNldDpjPTAsYWxpZ25PZmZzZXQ6dT0wLGNvbGxpc2lvbkJvdW5kYXJ5OmQ9XCJjbGlwcGluZy1hbmNlc3RvcnNcIixjb2xsaXNpb25QYWRkaW5nOmY9NSxhcnJvd1BhZGRpbmc6cD01LHN0aWNreTpoPSExLHRyYWNrQW5jaG9yOmc9ITAsY29sbGlzaW9uQXZvaWRhbmNlOm09bmEsLi4udn09ZSx7b3BlbjpiLHNldFBvc2l0aW9uZXJFbGVtZW50OnksbW91bnRlZDp4LGZsb2F0aW5nUm9vdENvbnRleHQ6dyx0cmFja0N1cnNvckF4aXM6aixob3ZlcmFibGU6a309b3EoKSxBPXI0KHthbmNob3I6byxwb3NpdGlvbk1ldGhvZDphLGZsb2F0aW5nUm9vdENvbnRleHQ6dyxtb3VudGVkOngsc2lkZTppLHNpZGVPZmZzZXQ6YyxhbGlnbjpzLGFsaWduT2Zmc2V0OnUsY29sbGlzaW9uQm91bmRhcnk6ZCxjb2xsaXNpb25QYWRkaW5nOmYsc3RpY2t5OmgsYXJyb3dQYWRkaW5nOnAsdHJhY2tBbmNob3I6ZyxrZWVwTW91bnRlZDpmdW5jdGlvbigpe2xldCBlPUMudXNlQ29udGV4dChvWSk7aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IDxUb29sdGlwLlBvcnRhbD4gaXMgbWlzc2luZy5cIik7cmV0dXJuIGV9KCksY29sbGlzaW9uQXZvaWRhbmNlOm19KSxPPUMudXNlTWVtbygoKT0+e2xldCBlPXt9O3JldHVybiBiJiZcImJvdGhcIiE9PWomJmt8fChlLnBvaW50ZXJFdmVudHM9XCJub25lXCIpLHtyb2xlOlwicHJlc2VudGF0aW9uXCIsaGlkZGVuOiF4LHN0eWxlOnsuLi5BLnBvc2l0aW9uZXJTdHlsZXMsLi4uZX19fSxbYixqLGsseCxBLnBvc2l0aW9uZXJTdHlsZXNdKSxTPUMudXNlTWVtbygoKT0+KHtwcm9wczpPLC4uLkF9KSxbTyxBXSksRT1DLnVzZU1lbW8oKCk9Pih7b3BlbjpiLHNpZGU6Uy5zaWRlLGFsaWduOlMuYWxpZ24sYW5jaG9ySGlkZGVuOlMuYW5jaG9ySGlkZGVufSksW2IsUy5zaWRlLFMuYWxpZ24sUy5hbmNob3JIaWRkZW5dKSxfPUMudXNlTWVtbygoKT0+KHsuLi5FLGFycm93UmVmOlMuYXJyb3dSZWYsYXJyb3dTdHlsZXM6Uy5hcnJvd1N0eWxlcyxhcnJvd1VuY2VudGVyZWQ6Uy5hcnJvd1VuY2VudGVyZWR9KSxbRSxTLmFycm93UmVmLFMuYXJyb3dTdHlsZXMsUy5hcnJvd1VuY2VudGVyZWRdKSxQPXRqKFwiZGl2XCIsZSx7c3RhdGU6RSxwcm9wczpbUy5wcm9wcyx2XSxyZWY6W24seV0sY3VzdG9tU3R5bGVIb29rTWFwcGluZzp0Vn0pO3JldHVybigwLGwuanN4KShvUS5Qcm92aWRlcix7dmFsdWU6XyxjaGlsZHJlbjpQfSl9KSxvMD17Li4udFYsLi4udFR9LG8xPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe2xldHtjbGFzc05hbWU6dCxyZW5kZXI6ciwuLi5vfT1lLHtvcGVuOmEsaW5zdGFudFR5cGU6aSx0cmFuc2l0aW9uU3RhdHVzOmwscG9wdXBQcm9wczpzLHBvcHVwUmVmOmMsb25PcGVuQ2hhbmdlQ29tcGxldGU6dX09b3EoKSx7c2lkZTpkLGFsaWduOmZ9PW9HKCk7cmV0dXJuIG41KHtvcGVuOmEscmVmOmMsb25Db21wbGV0ZSgpe2EmJnU/LighMCl9fSksdGooXCJkaXZcIixlLHtzdGF0ZTpDLnVzZU1lbW8oKCk9Pih7b3BlbjphLHNpZGU6ZCxhbGlnbjpmLGluc3RhbnQ6aSx0cmFuc2l0aW9uU3RhdHVzOmx9KSxbYSxkLGYsaSxsXSkscmVmOltuLGNdLHByb3BzOltzLFwic3RhcnRpbmdcIj09PWw/bnQ6bnIsb10sY3VzdG9tU3R5bGVIb29rTWFwcGluZzpvMH0pfSksbzI9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e2NsYXNzTmFtZTp0LHJlbmRlcjpyLC4uLm99PWUse29wZW46YSxhcnJvd1JlZjppLHNpZGU6bCxhbGlnbjpzLGFycm93VW5jZW50ZXJlZDpjLGFycm93U3R5bGVzOnV9PW9HKCk7cmV0dXJuIHRqKFwiZGl2XCIsZSx7c3RhdGU6Qy51c2VNZW1vKCgpPT4oe29wZW46YSxzaWRlOmwsYWxpZ246cyx1bmNlbnRlcmVkOmN9KSxbYSxsLHMsY10pLHJlZjpbbixpXSxwcm9wczpbe3N0eWxlOnUsXCJhcmlhLWhpZGRlblwiOiEwfSxvXSxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnRWfSl9KTt2YXIgbzQ9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9jb21wb25lbnRzL3Rvb2x0aXAuY3NzXCIpLG81PXt9O2Z1bmN0aW9uIG8zKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1vNS5zdHlsZVRhZ1RyYW5zZm9ybT15KCksbzUuc2V0QXR0cmlidXRlcz1nKCksbzUuaW5zZXJ0PXAoKSxvNS5kb21BUEk9ZCgpLG81Lmluc2VydFN0eWxlRWxlbWVudD12KCksYygpKG80LlosbzUpLG80LlomJm80LloubG9jYWxzJiZvNC5aLmxvY2Fsczt2YXIgbzY9KDAsQy5mb3J3YXJkUmVmKShmdW5jdGlvbihlLG4pe3ZhciB0LHI9ZS5jbGFzc05hbWUsbz1lLmNoaWxkcmVuLGE9ZS50aXRsZSxpPWUuZGlyZWN0aW9uLHM9dm9pZCAwPT09aT9cInRvcFwiOmksYz1lLmFycm93U2l6ZSx1PXZvaWQgMD09PWM/NjpjLGQ9ZS5vZmZzZXQsZj1lLmJnY29sb3IscD12b2lkIDA9PT1mP1wiIzAwMFwiOmYsaD1lLmNvbG9yLGc9KHQ9KDAsQy51c2VTdGF0ZSkoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm5leHRqcy1wb3J0YWxcIikuc2hhZG93Um9vdH0pLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KHQsMSl8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG8zKGUsMSk7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG8zKGUsbil9fSh0LDEpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKVswXSxtPSgwLEMudXNlUmVmKShnKTtyZXR1cm4gYT8oMCxsLmpzeCkob1Use2NoaWxkcmVuOigwLGwuanN4cykobyQse2RlbGF5OjQwMCxjaGlsZHJlbjpbKDAsbC5qc3gpKG9aLHtyZWY6bixyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIG4sdDtyZXR1cm4oMCxsLmpzeCkoXCJzcGFuXCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByO3I9dFtuXSxuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09cn0pfXJldHVybiBlfSh7fSxlKSx0PXQ9e2NoaWxkcmVuOm99LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfX0pLCgwLGwuanN4KShvSyx7Y29udGFpbmVyOm0sY2hpbGRyZW46KDAsbC5qc3gpKG9KLHtzaWRlOnMsc2lkZU9mZnNldDoodm9pZCAwPT09ZD84OmQpK3UsY2xhc3NOYW1lOlwidG9vbHRpcC1wb3NpdGlvbmVyXCIsc3R5bGU6e1wiLS1hbmNob3Itd2lkdGhcIjpcIlwiLmNvbmNhdCh1LFwicHhcIiksXCItLWFuY2hvci1oZWlnaHRcIjpcIlwiLmNvbmNhdCh1LFwicHhcIil9LGNoaWxkcmVuOigwLGwuanN4cykobzEse2NsYXNzTmFtZTooMCxrLmN4KShcInRvb2x0aXBcIixyKSxzdHlsZTp7YmFja2dyb3VuZENvbG9yOnAsY29sb3I6dm9pZCAwPT09aD9cIiNmZmZcIjpoLFwiLS10b29sdGlwLWJnLWNvbG9yXCI6cCxcIi0tYXJyb3ctc2l6ZVwiOlwiXCIuY29uY2F0KHUsXCJweFwiKX0sY2hpbGRyZW46W2EsKDAsbC5qc3gpKG8yLHtjbGFzc05hbWU6KDAsay5jeCkoXCJ0b29sdGlwLWFycm93XCIsXCJ0b29sdGlwLWFycm93LS1cIi5jb25jYXQocykpLHN0eWxlOntcIi0tYXJyb3ctc2l6ZVwiOlwiXCIuY29uY2F0KHUsXCJweFwiKSxcIi0tdG9vbHRpcC1iZy1jb2xvclwiOnB9fSldfSl9KX0pXX0pfSk6b30pO2Z1bmN0aW9uIG85KGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcjtyPXRbbl0sbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXJ9KX1yZXR1cm4gZX1mdW5jdGlvbiBvOChlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9dmFyIG83PWZ1bmN0aW9uKGUpe3ZhciBuLHQ7cmV0dXJuISEobnVsbD09KG49ZS52YWx1ZSk/dm9pZCAwOm4udHlwZSkmJiEhKG51bGw9PSh0PWUudmFsdWUpP3ZvaWQgMDp0LnBhZ2VQYXRoKX07ZnVuY3Rpb24gYWUoZSl7dmFyIG49ZS5wYWdlO3JldHVybigwLGwuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhclwiLGNoaWxkcmVuOlsoMCxsLmpzeCkoYWEse30pLCgwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhci1wYXRoXCIsY2hpbGRyZW46bn0pXX0pfWZ1bmN0aW9uIGFuKGUpe3ZhciBuPWUuYWN0aXZlQm91bmRhcmllc0NvdW50LHQ9ZS5vbkdsb2JhbFJlc2V0LHI9bj4wO3JldHVybigwLGwuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWZvb3RlclwiLGNoaWxkcmVuOigwLGwuanN4cykoXCJidXR0b25cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uIFwiLmNvbmNhdChyP1wiXCI6XCJzZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b24tLWRpc2FibGVkXCIpLG9uQ2xpY2s6cj90OnZvaWQgMCxkaXNhYmxlZDohcix0eXBlOlwiYnV0dG9uXCIsY2hpbGRyZW46WygwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1mb290ZXItdGV4dFwiLGNoaWxkcmVuOlwiQ2xlYXIgU2VnbWVudCBPdmVycmlkZXNcIn0pLHImJigwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1mb290ZXItYmFkZ2VcIixjaGlsZHJlbjpufSldfSl9KX1mdW5jdGlvbiBhdChlKXt2YXIgbj1lLmlzQXBwUm91dGVyLHQ9ZS5wYWdlLHI9KDAsai5pOCkoKSxvPSgwLEMudXNlTWVtbykoZnVuY3Rpb24oKXtyZXR1cm4gbj9mdW5jdGlvbiBlKG4pe3ZhciB0LHI9MDtyZXR1cm4obnVsbD09KHQ9bi52YWx1ZSk/dm9pZCAwOnQuc2V0Qm91bmRhcnlUeXBlKSYmbnVsbCE9PW4udmFsdWUuYm91bmRhcnlUeXBlJiYhb08obi52YWx1ZS50eXBlKSYmcisrLE9iamVjdC52YWx1ZXMobi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuJiYocis9ZShuKSl9KSxyfShyKTowfSxbcixuXSksYT0oMCxDLnVzZUNhbGxiYWNrKShmdW5jdGlvbigpe24mJmZ1bmN0aW9uIGUobil7dmFyIHQ7KG51bGw9PSh0PW4udmFsdWUpP3ZvaWQgMDp0LnNldEJvdW5kYXJ5VHlwZSkmJm4udmFsdWUuc2V0Qm91bmRhcnlUeXBlKG51bGwpLE9iamVjdC52YWx1ZXMobi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuJiZlKG4pfSl9KHIpfSxbcixuXSk7cmV0dXJuKDAsbC5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNlZ21lbnRzLWV4cGxvcmVyXCI6ITAsY2hpbGRyZW46W24mJigwLGwuanN4KShhZSx7cGFnZTp0fSksKDAsbC5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItY29udGVudFwiLFwiZGF0YS1uZXh0anMtZGV2dG9vbC1zZWdtZW50LWV4cGxvcmVyXCI6ITAsY2hpbGRyZW46bj8oMCxsLmpzeCkoYXIse25vZGU6cixsZXZlbDowLHNlZ21lbnQ6XCJcIn0pOigwLGwuanN4KShcInBcIix7Y2hpbGRyZW46XCJSb3V0ZSBJbmZvIGN1cnJlbnRseSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdGhlIEFwcCBSb3V0ZXIuXCJ9KX0pLG4mJigwLGwuanN4KShhbix7YWN0aXZlQm91bmRhcmllc0NvdW50Om8sb25HbG9iYWxSZXNldDphfSldfSl9ZnVuY3Rpb24gYXIoZSl7dmFyIG49ZS5zZWdtZW50LHQ9ZS5ub2RlLHI9ZS5sZXZlbCxvPU9iamVjdC5rZXlzKHQuY2hpbGRyZW4pLnNvcnQoZnVuY3Rpb24oZSxuKXt2YXIgcj1lLmluY2x1ZGVzKFwiLlwiKSxvPW4uaW5jbHVkZXMoXCIuXCIpO2lmKHImJiFvKXJldHVybiAtMTtpZighciYmbylyZXR1cm4gMTtpZihyJiZvKXt2YXIgYSxpLGwscyxjLHUsZCxmLHA9bnVsbD09KGk9dC5jaGlsZHJlbltlXSl8fG51bGw9PShhPWkudmFsdWUpP3ZvaWQgMDphLnR5cGUsaD1udWxsPT0ocz10LmNoaWxkcmVuW25dKXx8bnVsbD09KGw9cy52YWx1ZSk/dm9pZCAwOmwudHlwZSxnPWZ1bmN0aW9uKGUpe3JldHVybiBlP1wibGF5b3V0XCI9PT1lPzE6XCJ0ZW1wbGF0ZVwiPT09ZT8yOlwicGFnZVwiPT09ZT8zOm9PKGUpPzQ6NTo1fSxtPWcocCksdj1nKGgpO2lmKG0hPT12KXJldHVybiBtLXY7dmFyIGI9KG51bGw9PSh1PXQuY2hpbGRyZW5bZV0pfHxudWxsPT0oYz11LnZhbHVlKT92b2lkIDA6Yy5wYWdlUGF0aCl8fFwiXCIseT0obnVsbD09KGY9dC5jaGlsZHJlbltuXSl8fG51bGw9PShkPWYudmFsdWUpP3ZvaWQgMDpkLnBhZ2VQYXRoKXx8XCJcIjtyZXR1cm4gYi5sb2NhbGVDb21wYXJlKHkpfXJldHVybiBlLmxvY2FsZUNvbXBhcmUobil9KSxhPTAhPT1yfHxuP246XCJhcHBcIixpPVtdLHM9W10sYz0hMCx1PSExLGQ9dm9pZCAwO3RyeXtmb3IodmFyIGYscD1vW1N5bWJvbC5pdGVyYXRvcl0oKTshKGM9KGY9cC5uZXh0KCkpLmRvbmUpO2M9ITApe3ZhciBoPWYudmFsdWUsZz10LmNoaWxkcmVuW2hdO2lmKGcpe2lmKG83KGcpKXtzLnB1c2goaCk7Y29udGludWV9aS5wdXNoKGgpfX19Y2F0Y2goZSl7dT0hMCxkPWV9ZmluYWxseXt0cnl7Y3x8bnVsbD09cC5yZXR1cm58fHAucmV0dXJuKCl9ZmluYWxseXtpZih1KXRocm93IGR9fWZvcih2YXIgbT1udWxsLHY9by5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIGI9dC5jaGlsZHJlbltvW3ZdXTtpZihiJiZiLnZhbHVlKXt2YXIgeT1vTyhiLnZhbHVlLnR5cGUpO2lmKCFtJiYheSl7bT1iO2JyZWFrfX19dmFyIHg9bnVsbCx3PSEwLGo9ITEsQT12b2lkIDA7dHJ5e2Zvcih2YXIgTyxDPW9bU3ltYm9sLml0ZXJhdG9yXSgpOyEodz0oTz1DLm5leHQoKSkuZG9uZSk7dz0hMCl7dmFyIFM9Ty52YWx1ZSxFPXQuY2hpbGRyZW5bU107aWYoRSYmRS52YWx1ZSYmb08oRS52YWx1ZS50eXBlKSl7eD1FO2JyZWFrfX19Y2F0Y2goZSl7aj0hMCxBPWV9ZmluYWxseXt0cnl7d3x8bnVsbD09Qy5yZXR1cm58fEMucmV0dXJuKCl9ZmluYWxseXtpZihqKXRocm93IEF9fW09bXx8eDt2YXIgXz1zLmxlbmd0aD4wLFA9e1wibm90LWZvdW5kXCI6bnVsbCxsb2FkaW5nOm51bGwsZXJyb3I6bnVsbH07cmV0dXJuIHMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmNoaWxkcmVuW2VdO2lmKG4mJm4udmFsdWUmJm9PKG4udmFsdWUudHlwZSkpe3ZhciByPW4udmFsdWUudHlwZS5yZXBsYWNlKG9BLFwiXCIpO3IgaW4gUCYmKFBbcl09bi52YWx1ZS5wYWdlUGF0aHx8bnVsbCl9fSksKDAsbC5qc3hzKShsLkZyYWdtZW50LHtjaGlsZHJlbjpbXyYmKDAsbC5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItaXRlbVwiLFwiZGF0YS1uZXh0anMtZGV2dG9vbC1zZWdtZW50LWV4cGxvcmVyLXNlZ21lbnRcIjpuK1wiLVwiK3IsY2hpbGRyZW46KDAsbC5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItaXRlbS1yb3dcIixzdHlsZTpvOSh7fSx7cGFkZGluZ0xlZnQ6XCJcIi5jb25jYXQoKHIrMSkqOCxcInB4XCIpfSksY2hpbGRyZW46KDAsbC5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lXCIsY2hpbGRyZW46W2EmJigwLGwuanN4cykoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLXBhdGhcIixjaGlsZHJlbjpbYSwoMCxsLmpzeCkoXCJzbWFsbFwiLHtjaGlsZHJlbjpcIi9cIn0pXX0pLHMubGVuZ3RoPjAmJigwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1maWxlc1wiLGNoaWxkcmVuOnMubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY2hpbGRyZW5bZV07aWYoIW58fCFuLnZhbHVlfHxvTyhuLnZhbHVlLnR5cGUpKXJldHVybiBudWxsO3ZhciByPW4udmFsdWUucGFnZVBhdGgsbz1yLnNwbGl0KFwiL1wiKS5wb3AoKXx8XCJcIixhPXIuc3RhcnRzV2l0aChvaiksaT1vayhvKSxzPWE/XCJUaGUgZGVmYXVsdCBOZXh0LmpzIFwiLmNvbmNhdChuLnZhbHVlLnR5cGUsXCIgaXMgYmVpbmcgc2hvd24uIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgcGFnZSBieSBhZGRpbmcgeW91ciBvd24gXCIpLmNvbmNhdChpLFwiIGZpbGUgdG8gdGhlIGFwcC8gZGlyZWN0b3J5LlwiKTpudWxsLGM9bnVsbCE9PW4udmFsdWUuYm91bmRhcnlUeXBlO3JldHVybigwLGwuanN4KShvNix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRvb2x0aXAtLVwiKyhhP1wibGdcIjpcInNtXCIpLGRpcmVjdGlvbjphP1wicmlnaHRcIjpcInRvcFwiLHRpdGxlOnMsb2Zmc2V0OjEyLGJnY29sb3I6XCJ2YXIoLS1jb2xvci1ncmF5LTEwMDApXCIsY29sb3I6XCJ2YXIoLS1jb2xvci1ncmF5LTEwMClcIixjaGlsZHJlbjooMCxsLmpzeHMpKFwic3BhblwiLHtjbGFzc05hbWU6KDAsay5jeCkoXCJzZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWxcIixcInNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tXCIuY29uY2F0KG4udmFsdWUudHlwZSksYSYmXCJzZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLWJ1aWx0aW5cIixjJiZcInNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tb3ZlcnJpZGRlblwiKSxvbkNsaWNrOmZ1bmN0aW9uKCl7dmFyIGU7ZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHtmaWxlOntmaWxlUGF0aDpyfS5maWxlUGF0aCxpc0FwcFJlbGF0aXZlUGF0aDpcIjFcIn0pLGZldGNoKFwiXCIuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEh8fFwiXCIsXCIvX19uZXh0anNfbGF1bmNoLWVkaXRvcj9cIikuY29uY2F0KGUudG9TdHJpbmcoKSkpfSxjaGlsZHJlbjpbKDAsbC5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtdGV4dFwiLGNoaWxkcmVuOml9KSxhPygwLGwuanN4KShhbyx7fSk6KDAsbC5qc3gpKGFpLHtjbGFzc05hbWU6XCJjb2RlLWljb25cIn0pXX0pfSxlKX0pfSksbSYmbS52YWx1ZSYmKDAsbC5qc3gpKG9MLHtub2RlU3RhdGU6bS52YWx1ZSxib3VuZGFyaWVzOlB9KV19KX0pfSksaS5tYXAoZnVuY3Rpb24oZSl7dmFyIG89dC5jaGlsZHJlbltlXTtpZighbylyZXR1cm4gbnVsbDt2YXIgYT1fP2U6bitcIiAvIFwiK2U7cmV0dXJuKDAsbC5qc3gpKGFyLHtzZWdtZW50OmEsbm9kZTpvLGxldmVsOl8/cisxOnJ9LGUpfSldfSl9ZnVuY3Rpb24gYW8oZSl7cmV0dXJuKDAsbC5qc3hzKShcInN2Z1wiLG84KG85KHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHtjaGlsZHJlbjpbKDAsbC5qc3gpKFwicGF0aFwiLHtkOlwiTTE0IDhDMTQgMTEuMzEzNyAxMS4zMTM3IDE0IDggMTRDNC42ODYyOSAxNCAyIDExLjMxMzcgMiA4QzIgNC42ODYyOSA0LjY4NjI5IDIgOCAyQzExLjMxMzcgMiAxNCA0LjY4NjI5IDE0IDhaXCIsZmlsbDpcInZhcigtLWNvbG9yLWdyYXktNDAwKVwifSksKDAsbC5qc3gpKFwicGF0aFwiLHtkOlwiTTcuNzUgN0M4LjMwMjI4IDcuMDAwMDEgOC43NSA3LjQ0NzcyIDguNzUgOFYxMS4yNUg3LjI1VjguNUg2LjI1VjdINy43NVpNOCA0QzguNTUyMjggNCA5IDQuNDQ3NzIgOSA1QzkgNS41NTIyOCA4LjU1MjI4IDYgOCA2QzcuNDQ3NzIgNiA3IDUuNTUyMjggNyA1QzcgNC40NDc3MiA3LjQ0NzcyIDQgOCA0WlwiLGZpbGw6XCJ2YXIoLS1jb2xvci1ncmF5LTkwMClcIn0pXX0pKX1mdW5jdGlvbiBhYSgpe3JldHVybigwLGwuanN4KShcInN2Z1wiLHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcInZhcigtLWNvbG9yLWdyYXktNjAwKVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCxsLmpzeCkoXCJwYXRoXCIse2Q6XCJNNC41IDExLjI1QzQuNSAxMS4zODgxIDQuNjExOTMgMTEuNSA0Ljc1IDExLjVIMTQuNDM5NUwxMS45Mzk1IDlMMTMgNy45Mzk0NUwxNi43ODAzIDExLjcxOTdMMTYuODMyIDExLjc3NjRDMTcuMDcyMyAxMi4wNzA5IDE3LjA1NDkgMTIuNTA1NyAxNi43ODAzIDEyLjc4MDNMMTMgMTYuNTYwNUwxMS45Mzk1IDE1LjVMMTQuNDM5NSAxM0g0Ljc1QzMuNzgzNSAxMyAzIDEyLjIxNjUgMyAxMS4yNVY0LjI1SDQuNVYxMS4yNVpcIn0pfSl9ZnVuY3Rpb24gYWkoZSl7cmV0dXJuKDAsbC5qc3gpKFwic3ZnXCIsbzgobzkoe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSxlKSx7Y2hpbGRyZW46KDAsbC5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTcuMjI3NjMgMTQuMTgxOUwxMC4yMjc2IDIuMTgxOTNMMTAuNDA5NSAxLjQ1NDMyTDguOTU0MzIgMS4wOTA1Mkw4Ljc3MjQyIDEuODE4MTJMNS43NzI0MiAxMy44MTgxTDUuNTkwNTEgMTQuNTQ1N0w3LjA0NTczIDE0LjkwOTVMNy4yMjc2MyAxNC4xODE5Wk0zLjc1MDAyIDEyLjA2MDdMMy4yMTk2OSAxMS41MzA0TDAuMzk2NDcgOC43MDcxM0MwLjAwNTk0NTU5IDguMzE2NjEgMC4wMDU5NDU1OSA3LjY4MzQ0IDAuMzk2NDcgNy4yOTI5MkwzLjIxOTY5IDQuNDY5NjlMMy43NTAwMiAzLjkzOTM2TDQuODEwNjggNS4wMDAwMkw0LjI4MDM1IDUuNTMwMzVMMS44MTA2OCA4LjAwMDAzTDQuMjgwMzUgMTAuNDY5N0w0LjgxMDY4IDExTDMuNzUwMDIgMTIuMDYwN1pNMTIuMjUgMTIuMDYwN0wxMi43ODA0IDExLjUzMDRMMTUuNjAzNiA4LjcwNzEzQzE1Ljk5NDEgOC4zMTY2MSAxNS45OTQxIDcuNjgzNDQgMTUuNjAzNiA3LjI5MjkyTDEyLjc4MDQgNC40Njk2OUwxMi4yNSAzLjkzOTM2TDExLjE4OTQgNS4wMDAwMkwxMS43MTk3IDUuNTMwMzVMMTQuMTg5NCA4LjAwMDAzTDExLjcxOTcgMTAuNDY5N0wxMS4xODk0IDExTDEyLjI1IDEyLjA2MDdaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSl9fSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvaG9va3MvdXNlLWRlbGF5ZWQtcmVuZGVyLnRzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtOOigpPT5pfSk7dmFyIHI9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiKTtmdW5jdGlvbiBvKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBhKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG8oZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gaSgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sdD1hKCgwLHIudXNlU3RhdGUpKGUpLDIpLG89dFswXSxpPXRbMV0sbD1hKCgwLHIudXNlU3RhdGUpKCExKSwyKSxzPWxbMF0sYz1sWzFdLHU9bi5lbnRlckRlbGF5LGQ9dm9pZCAwPT09dT8xOnUsZj1uLmV4aXREZWxheSxwPXZvaWQgMD09PWY/MDpmO3JldHVybigwLHIudXNlRWZmZWN0KShmdW5jdGlvbigpe3ZhciBuLHQ7cmV0dXJuIGU/KGkoITApLGQ8PTA/YyghMCk6bj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YyghMCl9LGQpKTooYyghMSkscDw9MD9pKCExKTp0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpKCExKX0scCkpLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KG4pLGNsZWFyVGltZW91dCh0KX19LFtlLGQscF0pLHttb3VudGVkOm8scmVuZGVyZWQ6c319fSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvc2VnbWVudC1leHBsb3Jlci10cmllLnRzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtfYzooKT0+ZCxpODooKT0+Zix0aDooKT0+dX0pO3ZhciByPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIik7ZnVuY3Rpb24gbyhlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI7cj10W25dLG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT1yfSl9cmV0dXJuIGV9dmFyIGE9bmV3IFNldCxpPWZ1bmN0aW9uKGUpe3JldHVybiBhLmFkZChlKSxmdW5jdGlvbigpe3JldHVybiBhLmRlbGV0ZShlKX19LGw9ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRSb290KCl9LHM9ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRSb290KCl9LGM9ZnVuY3Rpb24oZSl7dmFyIG49ZS5nZXRDaGFyYWN0ZXJzLHQ9dm9pZCAwPT09bj9mdW5jdGlvbihlKXtyZXR1cm5bZV19Om4scj1lLmNvbXBhcmUsaT12b2lkIDA9PT1yP2Z1bmN0aW9uKGUsbil7cmV0dXJuIGU9PT1ufTpyLGw9e3ZhbHVlOnZvaWQgMCxjaGlsZHJlbjp7fX07ZnVuY3Rpb24gcygpe3ZhciBlPSEwLG49ITEsdD12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPWFbU3ltYm9sLml0ZXJhdG9yXSgpOyEoZT0ocj1vLm5leHQoKSkuZG9uZSk7ZT0hMCkoMCxyLnZhbHVlKSgpfWNhdGNoKGUpe249ITAsdD1lfWZpbmFsbHl7dHJ5e2V8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyB0fX19cmV0dXJue2luc2VydDpmdW5jdGlvbihlKXt2YXIgbj1sLHI9dChlKSxhPSEwLGk9ITEsYz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxkPXJbU3ltYm9sLml0ZXJhdG9yXSgpOyEoYT0odT1kLm5leHQoKSkuZG9uZSk7YT0hMCl7dmFyIGY9dS52YWx1ZTtuLmNoaWxkcmVuW2ZdfHwobi5jaGlsZHJlbltmXT17dmFsdWU6dm9pZCAwLGNoaWxkcmVuOnt9fSksbj1uLmNoaWxkcmVuW2ZdfX1jYXRjaChlKXtpPSEwLGM9ZX1maW5hbGx5e3RyeXthfHxudWxsPT1kLnJldHVybnx8ZC5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgY319bi52YWx1ZT1lLGw9byh7fSxsKSxzKCl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgbj1sLHI9dChlKSxhPVtdLGM9ITAsdT0hMCxkPSExLGY9dm9pZCAwO3RyeXtmb3IodmFyIHAsaD1yW1N5bWJvbC5pdGVyYXRvcl0oKTshKHU9KHA9aC5uZXh0KCkpLmRvbmUpO3U9ITApe3ZhciBnPXAudmFsdWU7aWYoIW4uY2hpbGRyZW5bZ10pe2M9ITE7YnJlYWt9YS5wdXNoKG4pLG49bi5jaGlsZHJlbltnXX19Y2F0Y2goZSl7ZD0hMCxmPWV9ZmluYWxseXt0cnl7dXx8bnVsbD09aC5yZXR1cm58fGgucmV0dXJuKCl9ZmluYWxseXtpZihkKXRocm93IGZ9fWlmKGMmJmkobi52YWx1ZSxlKSl7bi52YWx1ZT12b2lkIDA7Zm9yKHZhciBtPWEubGVuZ3RoLTE7bT49MDttLS0pe3ZhciB2PWFbbV0sYj1yW21dOzA9PT1PYmplY3Qua2V5cyh2LmNoaWxkcmVuW2JdLmNoaWxkcmVuKS5sZW5ndGgmJmRlbGV0ZSB2LmNoaWxkcmVuW2JdfWw9byh7fSxsKSxzKCl9fSxnZXRSb290OmZ1bmN0aW9uKCl7cmV0dXJuIGx9fX0oe2NvbXBhcmU6ZnVuY3Rpb24oZSxuKXtyZXR1cm4hIWUmJiEhbiYmZS5wYWdlUGF0aD09PW4ucGFnZVBhdGgmJmUudHlwZT09PW4udHlwZSYmZS5ib3VuZGFyeVR5cGU9PT1uLmJvdW5kYXJ5VHlwZX0sZ2V0Q2hhcmFjdGVyczpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYWdlUGF0aC5zcGxpdChcIi9cIil9fSksdT1jLmluc2VydCxkPWMucmVtb3ZlO2Z1bmN0aW9uIGYoKXtyZXR1cm4oMCxyLnVzZVN5bmNFeHRlcm5hbFN0b3JlKShpLGwscyl9fSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvdXRpbHMvY3gudHNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoZSksdD0wO3Q8ZTt0Kyspblt0XT1hcmd1bWVudHNbdF07cmV0dXJuIG4uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfXQuZChuLHtjeDooKT0+cn0pfX0sX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fPXt9O2Z1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18oZSl7dmFyIG49X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2VdO2lmKHZvaWQgMCE9PW4pcmV0dXJuIG4uZXhwb3J0czt2YXIgdD1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bZV09e2lkOmUsZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bZV0odCx0LmV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyksdC5leHBvcnRzfV9fd2VicGFja19yZXF1aXJlX18ubj1lPT57dmFyIG49ZSYmZS5fX2VzTW9kdWxlPygpPT5lLmRlZmF1bHQ6KCk9PmU7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZChuLHthOm59KSxufSwoKCk9Pnt2YXIgZSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZj9lPT5PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk6ZT0+ZS5fX3Byb3RvX187X193ZWJwYWNrX3JlcXVpcmVfXy50PWZ1bmN0aW9uKHQscil7aWYoMSZyJiYodD10aGlzKHQpKSw4JnJ8fFwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0JiYoNCZyJiZ0Ll9fZXNNb2R1bGV8fDE2JnImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQudGhlbikpcmV0dXJuIHQ7dmFyIG89T2JqZWN0LmNyZWF0ZShudWxsKTtfX3dlYnBhY2tfcmVxdWlyZV9fLnIobyk7dmFyIGE9e307ZT1lfHxbbnVsbCxuKHt9KSxuKFtdKSxuKG4pXTtmb3IodmFyIGk9MiZyJiZ0O1wib2JqZWN0XCI9PXR5cGVvZiBpJiYhfmUuaW5kZXhPZihpKTtpPW4oaSkpT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaSkuZm9yRWFjaChlPT57YVtlXT0oKT0+dFtlXX0pO3JldHVybiBhLmRlZmF1bHQ9KCk9PnQsX193ZWJwYWNrX3JlcXVpcmVfXy5kKG8sYSksb319KSgpLF9fd2VicGFja19yZXF1aXJlX18uZD0oZSxuKT0+e2Zvcih2YXIgdCBpbiBuKV9fd2VicGFja19yZXF1aXJlX18ubyhuLHQpJiYhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGUsdCkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Om5bdF19KX0sX193ZWJwYWNrX3JlcXVpcmVfXy5vPShlLG4pPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSxfX3dlYnBhY2tfcmVxdWlyZV9fLnI9ZT0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LF9fd2VicGFja19yZXF1aXJlX18ubmM9dm9pZCAwO3ZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9O2Zvcih2YXIgX193ZWJwYWNrX2lfXyBpbigoKT0+e1widXNlIHN0cmljdFwiO19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKSxfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXyx7ZGlzcGF0Y2hlcjooKT0+YUgscmVuZGVyQXBwRGV2T3ZlcmxheTooKT0+YVcscmVuZGVyUGFnZXNEZXZPdmVybGF5OigpPT5hJH0pO3ZhciBlLG4sdCxyPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIiksbz1fX3dlYnBhY2tfcmVxdWlyZV9fLm4ociksYT1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIiksaT1fX3dlYnBhY2tfcmVxdWlyZV9fLm4oYSksbD1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvYnVpbGQvd2VicGFjay9sb2FkZXJzL2RldnRvb2wvZGV2dG9vbC1zdHlsZS1pbmplY3QuanNcIikscz1fX3dlYnBhY2tfcmVxdWlyZV9fLm4obCksYz1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCIpLHU9X193ZWJwYWNrX3JlcXVpcmVfXy5uKGMpLGQ9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiKSxmPV9fd2VicGFja19yZXF1aXJlX18ubihkKSxwPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiKSxoPV9fd2VicGFja19yZXF1aXJlX18ubihwKSxnPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZ2xvYmFsLmNzc1wiKSxtPXt9O20uc3R5bGVUYWdUcmFuc2Zvcm09aCgpLG0uc2V0QXR0cmlidXRlcz11KCksbS5pbnNlcnQ9cygpLG0uZG9tQVBJPWkoKSxtLmluc2VydFN0eWxlRWxlbWVudD1mKCksbygpKGcuWixtKSxnLlomJmcuWi5sb2NhbHMmJmcuWi5sb2NhbHM7dmFyIHY9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL3RvYXN0L3N0eWxlLmNzc1wiKSxiPXt9O2Iuc3R5bGVUYWdUcmFuc2Zvcm09aCgpLGIuc2V0QXR0cmlidXRlcz11KCksYi5pbnNlcnQ9cygpLGIuZG9tQVBJPWkoKSxiLmluc2VydFN0eWxlRWxlbWVudD1mKCksbygpKHYuWixiKSx2LlomJnYuWi5sb2NhbHMmJnYuWi5sb2NhbHM7dmFyIHk9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtcnVudGltZS5qc1wiKSx4PV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIik7ZnVuY3Rpb24gdyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9dmFyIGo9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC9zdGFja3RyYWNlLXBhcnNlci9zdGFjay10cmFjZS1wYXJzZXIuY2pzLmpzXCIpLGs9L1xcL19uZXh0KFxcL3N0YXRpY1xcLy4rKS8sQT1TeW1ib2wuZm9yKFwibmV4dC5jb25zb2xlLmVycm9yLmRpZ2VzdFwiKTtmdW5jdGlvbiBPKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiBDKGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX12YXIgUz17U21hbGw6MTYvMTQsTWVkaXVtOjEsTGFyZ2U6MTYvMTh9LEU9XCJzdGF0aWMtaW5kaWNhdG9yXCIsXz1cImJ1aWxkLW9rXCIsUD1cImJ1aWxkLWVycm9yXCIsej1cImJlZm9yZS1mYXN0LXJlZnJlc2hcIixMPVwiZmFzdC1yZWZyZXNoXCIsVD1cInZlcnNpb24taW5mb1wiLFI9XCJ1bmhhbmRsZWQtZXJyb3JcIixOPVwidW5oYW5kbGVkLXJlamVjdGlvblwiLEQ9XCJkZWJ1Zy1pbmZvXCIsQj1cImRldi1pbmRpY2F0b3JcIixNPVwiZXJyb3Itb3ZlcmxheS1vcGVuXCIsST1cImVycm9yLW92ZXJsYXktY2xvc2VcIixIPVwiZXJyb3Itb3ZlcmxheS10b2dnbGVcIixGPVwiYnVpbGRpbmctaW5kaWNhdG9yLXNob3dcIixVPVwiYnVpbGRpbmctaW5kaWNhdG9yLWhpZGVcIixWPVwicmVuZGVyaW5nLWluZGljYXRvci1zaG93XCIscT1cInJlbmRlcmluZy1pbmRpY2F0b3ItaGlkZVwiLFc9XCJkZXZ0b29scy1wYW5lbC1vcGVuXCIsJD1cImRldnRvb2xzLXBhbmVsLWNsb3NlXCIsWj1cImRldnRvb2xzLXBhbmVsLXRvZ2dsZVwiLFk9XCJkZXZ0b29scy1wb3NpdGlvblwiLFg9XCJkZXZ0b29scy1zY2FsZVwiLEs9XCJyZXN0YXJ0LXNlcnZlci1idXR0b25cIixRPVwiX19uZXh0anMtZGV2LXRvb2xzLXRoZW1lXCIsRz1cIl9fbmV4dGpzLWRldi10b29scy1wb3NpdGlvblwiLEo9XCJfX25leHRqcy1kZXYtdG9vbHMtc2NhbGVcIixlZT1cInNlZ21lbnQtZXhwbG9yZXItdXBkYXRlLXJvdXRlLXN0YXRlXCIsZW49L1xccysoYXQgT2JqZWN0XFwucmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lLiopfChyZWFjdF9zdGFja19ib3R0b21fZnJhbWVALiopfChhdCByZWFjdC1zdGFjay1ib3R0b20tZnJhbWUuKil8KHJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZUAuKikvO2Z1bmN0aW9uIGV0KGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplLnNwbGl0KGVuKVswXX12YXIgZXI9KG51bGw9PShlPXByb2Nlc3MuZW52Ll9fTkVYVF9ERVZfSU5ESUNBVE9SKT92b2lkIDA6ZS50b1N0cmluZygpKT09PVwiZmFsc2VcIixlbz17bmV4dElkOjEsYnVpbGRFcnJvcjpudWxsLGVycm9yczpbXSxub3RGb3VuZDohMSxyZW5kZXJpbmdJbmRpY2F0b3I6ITEsc3RhdGljSW5kaWNhdG9yOiExLHNob3dJbmRpY2F0b3I6ITEsZGlzYWJsZURldkluZGljYXRvcjohMSxidWlsZGluZ0luZGljYXRvcjohMSxyZWZyZXNoU3RhdGU6e3R5cGU6XCJpZGxlXCJ9LHZlcnNpb25JbmZvOntpbnN0YWxsZWQ6XCIwLjAuMFwiLHN0YWxlbmVzczpcInVua25vd25cIn0sZGVidWdJbmZvOntkZXZ0b29sc0Zyb250ZW5kVXJsOnZvaWQgMH0saXNEZXZUb29sc1BhbmVsT3BlbjohMSxzaG93UmVzdGFydFNlcnZlckJ1dHRvbjohMSxkZXZUb29sc1Bvc2l0aW9uOlwiYm90dG9tLWxlZnRcIixzY2FsZTpTLk1lZGl1bSxwYWdlOlwiXCJ9LGVhPV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2NsaWVudC5qc1wiKTtmdW5jdGlvbiBlaShlKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KG4+MT9uLTE6MCkscj0xO3I8bjtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTt2YXIgbz1lLmxlbmd0aC0xO3JldHVybihlLnNsaWNlKDAsbykucmVkdWNlKGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZStuK3Rbcl19LFwiXCIpK2Vbb10pLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZyxcIlwiKS5yZXBsYWNlKC9cXHMrL2csXCIgXCIpLnJlcGxhY2UoL1xccyooWzo7LHt9XSlcXHMqL2csXCIkMVwiKS5yZXBsYWNlKC87K30vZyxcIn1cIikudHJpbSgpfWZ1bmN0aW9uIGVsKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgICAgIC8qIGxhdGluLWV4dCAqL1xcbiAgICAgIEBmb250LWZhY2Uge1xcbiAgICAgICAgZm9udC1mYW1pbHk6ICdfX25leHRqcy1HZWlzdCc7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBmb250LXdlaWdodDogNDAwIDYwMDtcXG4gICAgICAgIGZvbnQtZGlzcGxheTogc3dhcDtcXG4gICAgICAgIHNyYzogdXJsKC9fX25leHRqc19mb250L2dlaXN0LWxhdGluLWV4dC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpO1xcbiAgICAgICAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyQkEsIFUrMDJCRC0wMkM1LCBVKzAyQzctMDJDQywgVSswMkNFLTAyRDcsXFxuICAgICAgICAgIFUrMDJERC0wMkZGLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzFEMDAtMURCRiwgVSsxRTAwLTFFOUYsXFxuICAgICAgICAgIFUrMUVGMi0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDMCwgVSsyMTEzLCBVKzJDNjAtMkM3RixcXG4gICAgICAgICAgVStBNzIwLUE3RkY7XFxuICAgICAgfVxcbiAgICAgIC8qIGxhdGluLWV4dCAqL1xcbiAgICAgIEBmb250LWZhY2Uge1xcbiAgICAgICAgZm9udC1mYW1pbHk6ICdfX25leHRqcy1HZWlzdCBNb25vJztcXG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDAgNjAwO1xcbiAgICAgICAgZm9udC1kaXNwbGF5OiBzd2FwO1xcbiAgICAgICAgc3JjOiB1cmwoL19fbmV4dGpzX2ZvbnQvZ2Vpc3QtbW9uby1sYXRpbi1leHQud29mZjIpIGZvcm1hdCgnd29mZjInKTtcXG4gICAgICAgIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LFxcbiAgICAgICAgICBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLFxcbiAgICAgICAgICBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsXFxuICAgICAgICAgIFUrQTcyMC1BN0ZGO1xcbiAgICAgIH1cXG4gICAgICAvKiBsYXRpbiAqL1xcbiAgICAgIEBmb250LWZhY2Uge1xcbiAgICAgICAgZm9udC1mYW1pbHk6ICdfX25leHRqcy1HZWlzdCc7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBmb250LXdlaWdodDogNDAwIDYwMDtcXG4gICAgICAgIGZvbnQtZGlzcGxheTogc3dhcDtcXG4gICAgICAgIHNyYzogdXJsKC9fX25leHRqc19mb250L2dlaXN0LWxhdGluLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7XFxuICAgICAgICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNixcXG4gICAgICAgICAgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMixcXG4gICAgICAgICAgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDtcXG4gICAgICB9XFxuICAgICAgLyogbGF0aW4gKi9cXG4gICAgICBAZm9udC1mYWNlIHtcXG4gICAgICAgIGZvbnQtZmFtaWx5OiAnX19uZXh0anMtR2Vpc3QgTW9ubyc7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBmb250LXdlaWdodDogNDAwIDYwMDtcXG4gICAgICAgIGZvbnQtZGlzcGxheTogc3dhcDtcXG4gICAgICAgIHNyYzogdXJsKC9fX25leHRqc19mb250L2dlaXN0LW1vbm8tbGF0aW4ud29mZjIpIGZvcm1hdCgnd29mZjInKTtcXG4gICAgICAgIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LFxcbiAgICAgICAgICBVKzAyREEsIFUrMDJEQywgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsyMDAwLTIwNkYsIFUrMjBBQywgVSsyMTIyLFxcbiAgICAgICAgICBVKzIxOTEsIFUrMjE5MywgVSsyMjEyLCBVKzIyMTUsIFUrRkVGRiwgVStGRkZEO1xcbiAgICAgIH1cXG4gICAgXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIGVsPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9dmFyIGVzPWZ1bmN0aW9uKCl7cmV0dXJuKDAseC51c2VJbnNlcnRpb25FZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO3JldHVybiBlLnRleHRDb250ZW50PWVpKGVsKCkpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSksZnVuY3Rpb24oKXtkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGUpfX0sW10pLG51bGx9LGVjPV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2luZGV4LmpzXCIpO2Z1bmN0aW9uIGV1KGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBlZChlKXt2YXIgbix0LHI9ZS5jaGlsZHJlbixvPXgudXNlUmVmKG51bGwpLGE9eC51c2VSZWYobnVsbCksaT0obj14LnVzZVN0YXRlKCksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGV1KGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIGV1KGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKVsxXTtyZXR1cm4geC51c2VFZmZlY3QoZnVuY3Rpb24oKXtpZihvLmN1cnJlbnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm5leHRqcy1wb3J0YWxcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSl7dmFyIGU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oUSk7XCJkYXJrXCI9PT1lPyhvLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChcImRhcmtcIiksby5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJsaWdodFwiKSk6XCJsaWdodFwiPT09ZSYmKG8uY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZGFya1wiKSxvLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChcImxpZ2h0XCIpKX1udWxsPT09by5jdXJyZW50LnNoYWRvd1Jvb3QmJihhLmN1cnJlbnQ9by5jdXJyZW50LmF0dGFjaFNoYWRvdyh7bW9kZTpcIm9wZW5cIn0pKSxpKHt9KX0sW10pLGEuY3VycmVudD8oMCxlYy5jcmVhdGVQb3J0YWwpKHIsYS5jdXJyZW50KTpudWxsfWZ1bmN0aW9uIGVmKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgICAgICAgOmhvc3Qge1xcbiAgICAgICAgICAvKiBcXG4gICAgICAgICAgICogQWx0aG91Z2ggdGhlIHN0eWxlIGFwcGxpZWQgdG8gdGhlIHNoYWRvdyBob3N0IGlzIGlzb2xhdGVkLFxcbiAgICAgICAgICAgKiB0aGUgZWxlbWVudCB0aGF0IGF0dGFjaGVkIHRoZSBzaGFkb3cgaG9zdCAoaS5lLiBcXFwibmV4dGpzLXBvcnRhbFxcXCIpXFxuICAgICAgICAgICAqIGlzIHN0aWxsIGFmZmVjdGVkIGJ5IHRoZSBwYXJlbnQncyBzdHlsZSAoZS5nLiBcXFwiYm9keVxcXCIpLiBUaGlzIG1heVxcbiAgICAgICAgICAgKiBvY2N1ciBzdHlsZSBjb25mbGljdHMgbGlrZSBcXFwiZGlzcGxheTogZmxleFxcXCIsIHdpdGggb3RoZXIgY2hpbGRyZW5cXG4gICAgICAgICAgICogZWxlbWVudHMgdGhlcmVmb3JlIGdpdmUgdGhlIHNoYWRvdyBob3N0IGFuIGFic29sdXRlIHBvc2l0aW9uLlxcbiAgICAgICAgICAgKi9cXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcblxcbiAgICAgICAgICAtLWNvbG9yLWZvbnQ6ICM3NTc1NzU7XFxuICAgICAgICAgIC0tY29sb3ItYmFja2Ryb3A6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC44KTtcXG4gICAgICAgICAgLS1jb2xvci1ib3JkZXItc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMTQ1KTtcXG5cXG4gICAgICAgICAgLS1jb2xvci10aXRsZS1jb2xvcjogIzFmMWYxZjtcXG4gICAgICAgICAgLS1jb2xvci1zdGFjay1ub3RlczogIzc3NztcXG5cXG4gICAgICAgICAgLS1jb2xvci1hY2NlbnRzLTE6ICM4MDgwODA7XFxuICAgICAgICAgIC0tY29sb3ItYWNjZW50cy0yOiAjMjIyMjIyO1xcbiAgICAgICAgICAtLWNvbG9yLWFjY2VudHMtMzogIzQwNDA0MDtcXG5cXG4gICAgICAgICAgLS1mb250LXN0YWNrLW1vbm9zcGFjZTogJ19fbmV4dGpzLUdlaXN0IE1vbm8nLCAnR2Vpc3QgTW9ubycsXFxuICAgICAgICAgICAgJ1NGTW9uby1SZWd1bGFyJywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBNZW5sbywgQ291cmllcixcXG4gICAgICAgICAgICBtb25vc3BhY2U7XFxuICAgICAgICAgIC0tZm9udC1zdGFjay1zYW5zOiAnX19uZXh0anMtR2Vpc3QnLCAnR2Vpc3QnLCAtYXBwbGUtc3lzdGVtLFxcbiAgICAgICAgICAgICdTb3VyY2UgU2FucyBQcm8nLCBzYW5zLXNlcmlmO1xcblxcbiAgICAgICAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcXG4gICAgICAgICAgZm9udC12YXJpYW50LWxpZ2F0dXJlczogbm9uZTtcXG5cXG4gICAgICAgICAgLyogVE9ETzogUmVtb3ZlIHJlcGxhY2VkIG9uZXMuICovXFxuICAgICAgICAgIC0tc2hhZG93LXNtOiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTtcXG4gICAgICAgICAgLS1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYigwIDAgMCAvIDAuMSksXFxuICAgICAgICAgICAgMCAxcHggMnB4IC0xcHggcmdiKDAgMCAwIC8gMC4xKTtcXG4gICAgICAgICAgLS1zaGFkb3ctbWQ6IDAgNHB4IDZweCAtMXB4IHJnYigwIDAgMCAvIDAuMSksXFxuICAgICAgICAgICAgMCAycHggNHB4IC0ycHggcmdiKDAgMCAwIC8gMC4xKTtcXG4gICAgICAgICAgLS1zaGFkb3ctbGc6IDAgMTBweCAxNXB4IC0zcHggcmdiKDAgMCAwIC8gMC4xKSxcXG4gICAgICAgICAgICAwIDRweCA2cHggLTRweCByZ2IoMCAwIDAgLyAwLjEpO1xcbiAgICAgICAgICAtLXNoYWRvdy14bDogMCAyMHB4IDI1cHggLTVweCByZ2IoMCAwIDAgLyAwLjEpLFxcbiAgICAgICAgICAgIDAgOHB4IDEwcHggLTZweCByZ2IoMCAwIDAgLyAwLjEpO1xcbiAgICAgICAgICAtLXNoYWRvdy0yeGw6IDAgMjVweCA1MHB4IC0xMnB4IHJnYigwIDAgMCAvIDAuMjUpO1xcbiAgICAgICAgICAtLXNoYWRvdy1pbm5lcjogaW5zZXQgMCAycHggNHB4IDAgcmdiKDAgMCAwIC8gMC4wNSk7XFxuICAgICAgICAgIC0tc2hhZG93LW5vbmU6IDAgMCAjMDAwMDtcXG5cXG4gICAgICAgICAgLS1zaGFkb3ctc21hbGw6IDBweCAycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XFxuICAgICAgICAgIC0tc2hhZG93LW1lbnU6IDBweCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wMiksXFxuICAgICAgICAgICAgMHB4IDRweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMDQpLFxcbiAgICAgICAgICAgIDBweCAxNnB4IDI0cHggLThweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xcblxcbiAgICAgICAgICAtLWZvY3VzLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAgICAgICAgIC0tZm9jdXMtcmluZzogMnB4IHNvbGlkIHZhcigtLWZvY3VzLWNvbG9yKTtcXG5cXG4gICAgICAgICAgLS10aW1pbmctc3dpZnQ6IGN1YmljLWJlemllcigwLjIzLCAwLjg4LCAwLjI2LCAwLjkyKTtcXG4gICAgICAgICAgLS10aW1pbmctb3ZlcmxheTogY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4xKTtcXG4gICAgICAgICAgLyogcHJldHRpZXItaWdub3JlICovXFxuICAgICAgICAgIC0tdGltaW5nLWJvdW5jZTogbGluZWFyKDAgMCUsIDAuMDA1ODcxIDElLCAwLjAyMjA1OCAyJSwgMC4wNDY2MTIgMyUsIDAuMDc3ODIzIDQlLCAwLjExNDE5OSA1JSwgMC4xNTQ0NDEgNiUsIDAuMTk3NDMxIDcuMDAwMDAwMDAwMDAwMDAxJSwgMC4yNDIyMDggOCUsIDAuMjg3OTU5IDklLCAwLjMzMzk5NSAxMCUsIDAuMzc5NzQzIDExJSwgMC40MjQ3MzIgMTIlLCAwLjQ2ODU4IDEzJSwgMC41MTA5ODIgMTQuMDAwMDAwMDAwMDAwMDAyJSwgMC41NTE3MDIgMTUlLCAwLjU5MDU2NCAxNiUsIDAuNjI3NDQ1IDE3JSwgMC42NjIyNjEgMTglLCAwLjY5NDk3MSAxOSUsIDAuNzI1NTYxIDIwJSwgMC43NTQwNDcgMjElLCAwLjc4MDQ2MiAyMiUsIDAuODA0ODYxIDIzJSwgMC44MjczMSAyNCUsIDAuODQ3ODg4IDI1JSwgMC44NjY2NzkgMjYlLCAwLjg4Mzc3NSAyNyUsIDAuODk5MjcyIDI4LjAwMDAwMDAwMDAwMDAwNCUsIDAuOTEzMjY3IDI4Ljk5OTk5OTk5OTk5OTk5NiUsIDAuOTI1ODU2IDMwJSwgMC45MzcxMzcgMzElLCAwLjk0NzIwNSAzMiUsIDAuOTU2MTUzIDMzJSwgMC45NjQwNyAzNCUsIDAuOTcxMDQzIDM1JSwgMC45NzcxNTMgMzYlLCAwLjk4MjQ3OSAzNyUsIDAuOTg3MDk0IDM4JSwgMC45OTEwNjYgMzklLCAwLjk5NDQ2MiA0MCUsIDAuOTk3MzM5IDQxJSwgMC45OTk3NTUgNDIlLCAxLjAwMTc2MSA0MyUsIDEuMDAzNDA0IDQ0JSwgMS4wMDQ3MjcgNDUlLCAxLjAwNTc3IDQ2JSwgMS4wMDY1NjkgNDclLCAxLjAwNzE1NyA0OCUsIDEuMDA3NTYzIDQ5JSwgMS4wMDc4MTMgNTAlLCAxLjAwNzkzMSA1MSUsIDEuMDA3OTM5IDUyJSwgMS4wMDc4NTUgNTMlLCAxLjAwNzY5NyA1NCUsIDEuMDA3NDc3IDU1LjAwMDAwMDAwMDAwMDAxJSwgMS4wMDcyMSA1Ni4wMDAwMDAwMDAwMDAwMSUsIDEuMDA2OTA3IDU2Ljk5OTk5OTk5OTk5OTk5JSwgMS4wMDY1NzYgNTcuOTk5OTk5OTk5OTk5OTklLCAxLjAwNjIyOCA1OSUsIDEuMDA1ODY4IDYwJSwgMS4wMDU1MDMgNjElLCAxLjAwNTEzNyA2MiUsIDEuMDA0Nzc2IDYzJSwgMS4wMDQ0MjIgNjQlLCAxLjAwNDA3OCA2NSUsIDEuMDAzNzQ2IDY2JSwgMS4wMDM0MjkgNjclLCAxLjAwMzEyNyA2OCUsIDEuMDAyODQgNjklLCAxLjAwMjU3MSA3MCUsIDEuMDAyMzE4IDcxJSwgMS4wMDIwODIgNzIlLCAxLjAwMTg2MyA3MyUsIDEuMDAxNjYgNzQlLCAxLjAwMTQ3MyA3NSUsIDEuMDAxMzAxIDc2JSwgMS4wMDExNDMgNzclLCAxLjAwMSA3OCUsIDEuMDAwODY5IDc5JSwgMS4wMDA3NTIgODAlLCAxLjAwMDY0NSA4MSUsIDEuMDAwNTUgODIlLCAxLjAwMDQ2NCA4MyUsIDEuMDAwMzg4IDg0JSwgMS4wMDAzMjEgODUlLCAxLjAwMDI2MSA4NiUsIDEuMDAwMjA5IDg3JSwgMS4wMDAxNjMgODglLCAxLjAwMDEyMyA4OSUsIDEuMDAwMDg4IDkwJSk7XFxuXFxuICAgICAgICAgIC0tcm91bmRlZC1ub25lOiAwcHg7XFxuICAgICAgICAgIC0tcm91bmRlZC1zbTogMnB4O1xcbiAgICAgICAgICAtLXJvdW5kZWQtbWQ6IDRweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLW1kLTI6IDZweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLWxnOiA4cHg7XFxuICAgICAgICAgIC0tcm91bmRlZC14bDogMTJweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLTJ4bDogMTZweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLTN4bDogMjRweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLTR4bDogMzJweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLWZ1bGw6IDk5OTlweDtcXG5cXG4gICAgICAgICAgLyogXFxuICAgICAgICAgICAgVGhpcyB2YWx1ZSBnZXRzIHNldCBmcm9tIHRoZSBEZXYgVG9vbHMgcHJlZmVyZW5jZXMsXFxuICAgICAgICAgICAgYW5kIHdlIHVzZSB0aGUgZm9sbG93aW5nIC0tc2l6ZS0qIHZhcmlhYmxlcyB0byBcXG4gICAgICAgICAgICBzY2FsZSB0aGUgcmVsZXZhbnQgZWxlbWVudHMuXFxuXFxuICAgICAgICAgICAgVGhlIHJlYXNvbiB3aHkgd2UgZG9uJ3QgcmVseSBvbiByZW0gdmFsdWVzIGlzIGJlY2F1c2VcXG4gICAgICAgICAgICBpZiBhbiBhcHAgc2V0cyB0aGVpciByb290IGZvbnQgc2l6ZSB0byBzb21ldGhpbmcgdGlueSwgXFxuICAgICAgICAgICAgaXQgZmVlbHMgdW5leHBlY3RlZCB0byBoYXZlIHRoZSBhcHAgcm9vdCBzaXplIGxlYWsgXFxuICAgICAgICAgICAgaW50byBhIE5leHQuanMgc3VyZmFjZS5cXG5cXG4gICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvZGlzY3Vzc2lvbnMvNzY4MTJcXG4gICAgICAgICAgKi9cXG4gICAgICAgICAgLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlOiBcIixcIjtcXG4gICAgICAgICAgLS1zaXplLTE6IGNhbGMoMXB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMjogY2FsYygycHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0zOiBjYWxjKDNweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTQ6IGNhbGMoNHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtNTogY2FsYyg1cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS02OiBjYWxjKDZweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTc6IGNhbGMoN3B4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtODogY2FsYyg4cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS05OiBjYWxjKDlweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTEwOiBjYWxjKDEwcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0xMTogY2FsYygxMXB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMTI6IGNhbGMoMTJweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTEzOiBjYWxjKDEzcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0xNDogY2FsYygxNHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMTU6IGNhbGMoMTVweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTE2OiBjYWxjKDE2cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0xNzogY2FsYygxN3B4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMTg6IGNhbGMoMThweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTIwOiBjYWxjKDIwcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0yMjogY2FsYygyMnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMjQ6IGNhbGMoMjRweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTI2OiBjYWxjKDI2cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0yODogY2FsYygyOHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMzA6IGNhbGMoMzBweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTMyOiBjYWxjKDMycHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0zNDogY2FsYygzNHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMzY6IGNhbGMoMzZweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTM4OiBjYWxjKDM4cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS00MDogY2FsYyg0MHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtNDI6IGNhbGMoNDJweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTQ0OiBjYWxjKDQ0cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS00NjogY2FsYyg0NnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtNDg6IGNhbGMoNDhweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG5cXG4gICAgICAgICAgQG1lZGlhIHByaW50IHtcXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICBoMSxcXG4gICAgICAgIGgyLFxcbiAgICAgICAgaDMsXFxuICAgICAgICBoNCxcXG4gICAgICAgIGg1LFxcbiAgICAgICAgaDYge1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhIHtcXG4gICAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtOTAwKTtcXG4gICAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtOTAwKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIGVmPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gZXAoZSl7dmFyIG49ZS5zY2FsZTtyZXR1cm4oMCx5LmpzeCkoXCJzdHlsZVwiLHtjaGlsZHJlbjplaShlZigpLFN0cmluZyh2b2lkIDA9PT1uPzE6bikpfSl9ZnVuY3Rpb24gZWgoZSl7aWYoXCJcIj09PWUudHJpbSgpKXRocm93IEVycm9yKFwiY2FuJ3QgZGVjb2RlIGVtcHR5IGhleFwiKTt2YXIgbj1wYXJzZUludChlLDE2KTtpZihpc05hTihuKSl0aHJvdyBFcnJvcihcImludmFsaWQgaGV4OiBgXCIuY29uY2F0KGUsXCJgXCIpKTtyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQobil9dmFyIGVnPS9eX19UVVJCT1BBQ0tfXyhbYS16QS1aMC05XyRdKylfXyQvLGVtPS9odHRwcz86XFwvXFwvW15cXHMvJC4/I10uW15cXHMpJ1wiXSovaSxldj1uZXcgUmVnRXhwKFwiKFwiLmNvbmNhdCgvX19UVVJCT1BBQ0tfX1thLXpBLVowLTlfJF0rX18vZy5zb3VyY2UsXCJ8XFxcXHMrKVwiKSksZWI9ZnVuY3Rpb24oZSl7dmFyIG49ZS50ZXh0LHQ9ZS5tYXRjaGVyLHI9bi5zcGxpdChldik7cmV0dXJuKDAseS5qc3gpKHkuRnJhZ21lbnQse2NoaWxkcmVuOnIubWFwKGZ1bmN0aW9uKGUsbil7aWYoZW0udGVzdChlKSl7dmFyIHI9ZW0uZXhlYyhlKVswXTtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0fHx0KHIpPygwLHkuanN4KSh4LkZyYWdtZW50LHtjaGlsZHJlbjooMCx5LmpzeCkoXCJhXCIse2hyZWY6cix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub3JlZmVycmVyIG5vb3BlbmVyXCIsY2hpbGRyZW46ZX0pfSxcImxpbmstXCIuY29uY2F0KG4pKTplfXRyeXt2YXIgbz1mdW5jdGlvbihlKXt2YXIgbj1lLm1hdGNoKGVnKTtpZighbilyZXR1cm4gZTtmb3IodmFyIHQ9blsxXSxyPVwiXCIsbz0wLGE9XCJcIixpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBsPXRbaV07aWYoMD09PW8pXCJfXCI9PT1sP289MTpcIiRcIj09PWw/bz0yOnIrPWw7ZWxzZSBpZigxPT09bylcIl9cIj09PWw/KHIrPVwiIFwiLG89MCk6XCIkXCI9PT1sPyhyKz1cIl9cIixvPTIpOihyKz1sLG89MCk7ZWxzZSBpZigyPT09bylpZigyPT09YS5sZW5ndGgmJihyKz1laChhKSxhPVwiXCIpLFwiX1wiPT09bCl7aWYoXCJcIiE9PWEpdGhyb3cgRXJyb3IoXCJpbnZhbGlkIGhleDogYFwiLmNvbmNhdChhLFwiYFwiKSk7bz0zfWVsc2UgaWYoXCIkXCI9PT1sKXtpZihcIlwiIT09YSl0aHJvdyBFcnJvcihcImludmFsaWQgaGV4OiBgXCIuY29uY2F0KGEsXCJgXCIpKTtvPTB9ZWxzZSBhKz1sO2Vsc2UgaWYoMz09PW8paWYoXCJfXCI9PT1sKXRocm93IEVycm9yKFwiaW52YWxpZCBoZXg6IGBcIi5jb25jYXQoYStsLFwiYFwiKSk7ZWxzZVwiJFwiPT09bD8ocis9ZWgoYSksYT1cIlwiLG89MCk6YSs9bH1yZXR1cm4gcn0oZSk7aWYobyE9PWUpcmV0dXJuKDAseS5qc3hzKShcImlcIix7Y2hpbGRyZW46W1wie1wiLG8sXCJ9XCJdfSxcImlkZW50LVwiLmNvbmNhdChuKSl9Y2F0Y2godCl7cmV0dXJuKDAseS5qc3hzKShcImlcIix7Y2hpbGRyZW46W1wie1wiLGUsXCIgKGRlY29kaW5nIGZhaWxlZDogXCIsXCJcIit0LFwiKVwiLFwifVwiXX0sXCJpZGVudC1cIi5jb25jYXQobikpfXJldHVybigwLHkuanN4KSh4LkZyYWdtZW50LHtjaGlsZHJlbjplfSxcInRleHQtXCIuY29uY2F0KG4pKX0pfSl9LGV5PVsvXndlYnBhY2staW50ZXJuYWw6XFwvXFwvXFwvKFxcKFtcXHctXStcXClcXC8pPy8sL14od2VicGFjazpcXC9cXC9cXC98d2VicGFjazpcXC9cXC8oX05fRVxcLyk/KShcXChbXFx3LV0rXFwpXFwvKT8vXTtmdW5jdGlvbiBleChlKXt2YXIgbj0hMCx0PSExLHI9dm9pZCAwO3RyeXtmb3IodmFyIG8sYT1leVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPWEubmV4dCgpKS5kb25lKTtuPSEwKXt2YXIgaT1vLnZhbHVlO2lmKGkudGVzdChlKSlyZXR1cm4hMDtlPWUucmVwbGFjZShpLFwiXCIpfX1jYXRjaChlKXt0PSEwLHI9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgcn19cmV0dXJuITF9ZnVuY3Rpb24gZXcoZSl7dmFyIG49ITAsdD0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9ZXlbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1hLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIGk9by52YWx1ZTtlPWUucmVwbGFjZShpLFwiXCIpfX1jYXRjaChlKXt0PSEwLHI9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgcn19cmV0dXJuIGV9ZnVuY3Rpb24gZWooZSxuLHQscixvLGEsaSl7dHJ5e3ZhciBsPWVbYV0oaSkscz1sLnZhbHVlfWNhdGNoKGUpe3QoZSk7cmV0dXJufWwuZG9uZT9uKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9ZnVuY3Rpb24gZWsoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyx0PWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgYT1lLmFwcGx5KG4sdCk7ZnVuY3Rpb24gaShlKXtlaihhLHIsbyxpLGwsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gbChlKXtlaihhLHIsbyxpLGwsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pfX1mdW5jdGlvbiBlQShlLG4pe3ZhciB0LHIsbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LGk9T2JqZWN0LmNyZWF0ZSgoXCJmdW5jdGlvblwiPT10eXBlb2YgSXRlcmF0b3I/SXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpO3JldHVybiBpLm5leHQ9bCgwKSxpLnRocm93PWwoMSksaS5yZXR1cm49bCgyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGM9W2wsc107aWYodCl0aHJvdyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7aSYmKGk9MCxjWzBdJiYoYT0wKSksYTspdHJ5e2lmKHQ9MSxyJiYobz0yJmNbMF0/ci5yZXR1cm46Y1swXT9yLnRocm93fHwoKG89ci5yZXR1cm4pJiZvLmNhbGwociksMCk6ci5uZXh0KSYmIShvPW8uY2FsbChyLGNbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChyPTAsbyYmKGM9WzImY1swXSxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoNj09PWNbMF18fDI9PT1jWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1jWzBdJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7YS5sYWJlbD1jWzFdO2JyZWFrfWlmKDY9PT1jWzBdJiZhLmxhYmVsPG9bMV0pe2EubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmYS5sYWJlbDxvWzJdKXthLmxhYmVsPW9bMl0sYS5vcHMucHVzaChjKTticmVha31vWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9Yz1uLmNhbGwoZSxhKX1jYXRjaChlKXtjPVs2LGVdLHI9MH1maW5hbGx5e3Q9bz0wfWlmKDUmY1swXSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX19ZnVuY3Rpb24gZU8oZSxuKXt2YXIgdDtyZXR1cm5cImZpbGU6Ly9cIj09PWUuZmlsZXx8KG51bGw9PSh0PWUuZmlsZSk/dm9pZCAwOnQubWF0Y2goL2h0dHBzPzpcXC9cXC8vKSk/UHJvbWlzZS5yZXNvbHZlKHtlcnJvcjohMSxyZWFzb246bnVsbCxleHRlcm5hbDohMCxzb3VyY2VTdGFja0ZyYW1lOmUsb3JpZ2luYWxTdGFja0ZyYW1lOm51bGwsb3JpZ2luYWxDb2RlRnJhbWU6bnVsbCxpZ25vcmVkOiEwfSk6ZWsoZnVuY3Rpb24oKXt2YXIgdCxyO3JldHVybiBlQSh0aGlzLGZ1bmN0aW9uKG8pe2lmKFwicmVqZWN0ZWRcIj09PW4uc3RhdHVzKXRocm93IEVycm9yKG4ucmVhc29uKTtyZXR1cm5bMix7ZXJyb3I6ITEscmVhc29uOm51bGwsZXh0ZXJuYWw6ITEsc291cmNlU3RhY2tGcmFtZTplLG9yaWdpbmFsU3RhY2tGcmFtZToocj1uLnZhbHVlKS5vcmlnaW5hbFN0YWNrRnJhbWUsb3JpZ2luYWxDb2RlRnJhbWU6ci5vcmlnaW5hbENvZGVGcmFtZXx8bnVsbCxpZ25vcmVkOihudWxsPT0odD1yLm9yaWdpbmFsU3RhY2tGcmFtZSk/dm9pZCAwOnQuaWdub3JlZCl8fCExfV19KX0pKCkuY2F0Y2goZnVuY3Rpb24obil7dmFyIHQscjtyZXR1cm57ZXJyb3I6ITAscmVhc29uOm51bGwhPShyPW51bGwhPSh0PW51bGw9PW4/dm9pZCAwOm4ubWVzc2FnZSk/dDpudWxsPT1uP3ZvaWQgMDpuLnRvU3RyaW5nKCkpP3I6XCJVbmtub3duIEVycm9yXCIsZXh0ZXJuYWw6ITEsc291cmNlU3RhY2tGcmFtZTplLG9yaWdpbmFsU3RhY2tGcmFtZTpudWxsLG9yaWdpbmFsQ29kZUZyYW1lOm51bGwsaWdub3JlZDohMX19KX1mdW5jdGlvbiBlQyhlLG4sdCl7cmV0dXJuIGVrKGZ1bmN0aW9uKCl7dmFyIHIsbyxhLGk7cmV0dXJuIGVBKHRoaXMsZnVuY3Rpb24obCl7c3dpdGNoKGwubGFiZWwpe2Nhc2UgMDpyPXtmcmFtZXM6ZSxpc1NlcnZlcjpcInNlcnZlclwiPT09bixpc0VkZ2VTZXJ2ZXI6XCJlZGdlLXNlcnZlclwiPT09bixpc0FwcERpcmVjdG9yeTp0fSxvPXZvaWQgMCxhPXZvaWQgMCxsLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBsLnRyeXMucHVzaChbMSwzLCw0XSksWzQsZmV0Y2goXCIvX19uZXh0anNfb3JpZ2luYWwtc3RhY2stZnJhbWVzXCIse21ldGhvZDpcIlBPU1RcIixib2R5OkpTT04uc3RyaW5naWZ5KHIpfSldO2Nhc2UgMjpyZXR1cm4gbz1sLnNlbnQoKSxbMyw0XTtjYXNlIDM6cmV0dXJuIGE9bC5zZW50KCkrXCJcIixbMyw0XTtjYXNlIDQ6aWYoIShvJiZvLm9rJiYyMDQhPT1vLnN0YXR1cykpcmV0dXJuWzMsNl07cmV0dXJuWzQsby5qc29uKCldO2Nhc2UgNTpyZXR1cm4gaT1sLnNlbnQoKSxbMixQcm9taXNlLmFsbChlLm1hcChmdW5jdGlvbihlLG4pe3JldHVybiBlTyhlLGlbbl0pfSkpXTtjYXNlIDY6aWYoIW8pcmV0dXJuWzMsOF07cmV0dXJuWzQsby50ZXh0KCldO2Nhc2UgNzphPWwuc2VudCgpLGwubGFiZWw9ODtjYXNlIDg6cmV0dXJuWzIsUHJvbWlzZS5hbGwoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVPKGUse3N0YXR1czpcInJlamVjdGVkXCIscmVhc29uOlwiRmFpbGVkIHRvIGZldGNoIHRoZSBvcmlnaW5hbCBzdGFjayBmcmFtZXMgXCIuY29uY2F0KGE/XCI6IFwiLmNvbmNhdChhKTpcIlwiKX0pfSkpXX19KX0pKCl9ZnVuY3Rpb24gZVMoZSl7aWYoIWUuZmlsZSlyZXR1cm5cIlwiO3ZhciBuPWV4KGUuZmlsZSksdD1cIlwiO2lmKG4pdD1ldyhlLmZpbGUpO2Vsc2UgdHJ5e3ZhciByLG89bmV3IFVSTChlLmZpbGUpLGE9XCJcIjsobnVsbD09KHI9Z2xvYmFsVGhpcy5sb2NhdGlvbik/dm9pZCAwOnIub3JpZ2luKSE9PW8ub3JpZ2luJiYoXCJudWxsXCI9PT1vLm9yaWdpbj9hKz1vLnByb3RvY29sOmErPW8ub3JpZ2luKSxhKz1vLnBhdGhuYW1lLHQ9ZXcoYSl9Y2F0Y2gobil7dD1ldyhlLmZpbGUpfXJldHVybiFleChlLmZpbGUpJiZudWxsIT1lLmxpbmVOdW1iZXImJnQmJlwiPGFub255bW91cz5cIiE9PWUuZmlsZSYmKG51bGwhPWUuY29sdW1uP3QrPVwiIChcIi5jb25jYXQoZS5saW5lTnVtYmVyLFwiOlwiKS5jb25jYXQoZS5jb2x1bW4sXCIpXCIpOnQrPVwiIChcIi5jb25jYXQoZS5saW5lTnVtYmVyLFwiKVwiKSksdH1mdW5jdGlvbiBlRSgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxuPWUuZmlsZSx0PWUubGluZU51bWJlcixyPWUuY29sdW1uO3JldHVybigwLHgudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKCl7aWYobnVsbCE9biYmbnVsbCE9dCYmbnVsbCE9cil7dmFyIGU9bmV3IFVSTFNlYXJjaFBhcmFtcztlLmFwcGVuZChcImZpbGVcIixuKSxlLmFwcGVuZChcImxpbmVOdW1iZXJcIixTdHJpbmcodCkpLGUuYXBwZW5kKFwiY29sdW1uXCIsU3RyaW5nKHIpKSxzZWxmLmZldGNoKFwiXCIuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEh8fFwiXCIsXCIvX19uZXh0anNfbGF1bmNoLWVkaXRvcj9cIikuY29uY2F0KGUudG9TdHJpbmcoKSkpLnRoZW4oZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBvcGVuIGZpbGUgXCInLmNvbmNhdChuLFwiIChcIikuY29uY2F0KHQsXCI6XCIpLmNvbmNhdChyLCcpXCIgaW4geW91ciBlZGl0b3IuIENhdXNlOicpLGUpfSl9fSxbbix0LHJdKX1mdW5jdGlvbiBlXyhlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZVAoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIGV6KGUpe3JldHVybigwLHkuanN4KShcInN2Z1wiLGVQKGVfKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCJ9LGUpLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixkOlwiTTExLjUgOS43NVYxMS4yNUMxMS41IDExLjM4ODEgMTEuMzg4MSAxMS41IDExLjI1IDExLjVINC43NUM0LjYxMTkzIDExLjUgNC41IDExLjM4ODEgNC41IDExLjI1TDQuNSA0Ljc1QzQuNSA0LjYxMTkzIDQuNjExOTMgNC41IDQuNzUgNC41SDYuMjVIN1YzSDYuMjVINC43NUMzLjc4MzUgMyAzIDMuNzgzNSAzIDQuNzVWMTEuMjVDMyAxMi4yMTY1IDMuNzgzNSAxMyA0Ljc1IDEzSDExLjI1QzEyLjIxNjUgMTMgMTMgMTIuMjE2NSAxMyAxMS4yNVY5Ljc1VjlIMTEuNVY5Ljc1Wk04LjUgM0g5LjI1SDEyLjI0OTVDMTIuNjYzNyAzIDEyLjk5OTUgMy4zMzU3OSAxMi45OTk1IDMuNzVWNi43NVY3LjVIMTEuNDk5NVY2Ljc1VjUuNTYwNjZMOC41MzAzMyA4LjUyOTc4TDggOS4wNjAxMUw2LjkzOTM0IDcuOTk5NDVMNy40Njk2NyA3LjQ2OTEyTDEwLjQzODggNC41SDkuMjVIOC41VjNaXCJ9KX0pKX1mdW5jdGlvbiBlTChlKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIixlUChlXyh7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGhlaWdodDpcIjE2XCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwiLHZpZXdCb3g6XCItNCAtNCAyNCAyNFwiLHdpZHRoOlwiMTZcIn0sZSkse2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk04LjU1ODQ2IDJINy40NDE0OEwxLjg4OTc1IDEzLjVIMTQuMTEwMkw4LjU1ODQ2IDJaTTkuOTA5MjkgMS4zNDc4OEM5LjY1OTAyIDAuODI5NDU2IDkuMTM0MTMgMC41IDguNTU4NDYgMC41SDcuNDQxNDhDNi44NjU4MSAwLjUgNi4zNDA5MiAwLjgyOTQ1NCA2LjA5MDY1IDEuMzQ3ODdMMC4xOTI2MDggMTMuNTY1M0MtMC4xMjc5NDMgMTQuMjI5MyAwLjM1NTgzNSAxNSAxLjA5MzE2IDE1SDE0LjkwNjhDMTUuNjQ0MSAxNSAxNi4xMjc5IDE0LjIyOTMgMTUuODA3MyAxMy41NjUzTDkuOTA5MjkgMS4zNDc4OFpNOC43NDk5NyA0Ljc1VjUuNVY4VjguNzVINy4yNDk5N1Y4VjUuNVY0Ljc1SDguNzQ5OTdaTTcuOTk5OTcgMTJDOC41NTIyNiAxMiA4Ljk5OTk3IDExLjU1MjMgOC45OTk5NyAxMUM4Ljk5OTk3IDEwLjQ0NzcgOC41NTIyNiAxMCA3Ljk5OTk3IDEwQzcuNDQ3NjkgMTAgNi45OTk5NyAxMC40NDc3IDYuOTk5OTcgMTFDNi45OTk5NyAxMS41NTIzIDcuNDQ3NjkgMTIgNy45OTk5NyAxMlpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pKX1mdW5jdGlvbiBlVChlKXt2YXIgbj1lLmxhbmc7aWYoIW4pcmV0dXJuKDAseS5qc3gpKGVCLHt9KTtzd2l0Y2gobi50b0xvd2VyQ2FzZSgpKXtjYXNlXCJqc3hcIjpjYXNlXCJ0c3hcIjpyZXR1cm4oMCx5LmpzeCkoZU0se30pO2Nhc2VcInRzXCI6Y2FzZVwidHlwZXNjcmlwdFwiOnJldHVybigwLHkuanN4KShlRCx7fSk7Y2FzZVwiamF2YXNjcmlwdFwiOmNhc2VcImpzXCI6Y2FzZVwibWpzXCI6cmV0dXJuKDAseS5qc3gpKGVOLHt9KTtjYXNlXCJqc29uXCI6cmV0dXJuKDAseS5qc3gpKGVSLHt9KTtkZWZhdWx0OnJldHVybigwLHkuanN4KShlQix7fSl9fWZ1bmN0aW9uIGVSKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse2NsaXBSdWxlOlwiZXZlbm9kZFwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxMzIxLjQ1IDEzMzMuMzNcIix3aWR0aDpcIjE2XCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTIyMS4zNyA2MTguNDRoNzU3Ljk0VjQwNS4xNUg3NTUuMTRjLTIzLjUgMC01Ni4zMi0xMi43NC03MS44Mi0yOC4yNC0xNS41LTE1LjUtMjUtNDMuNDctMjUtNjYuOTdWODIuODlIODguMzljLTEuOTkgMC0zLjQ5IDEtNC40OSAyLTEuNSAxLTIgMi41LTIgNC41djExNTUuMDRjMCAxLjUgMSAzLjUgMiA0LjUgMSAxLjQ5IDMgMS45OSA0LjQ5IDEuOTlIOTcyLjhjMiAwIDEuODktLjk5IDIuODktMS45OSAxLjUtMSAzLjYxLTMgMy42MS00LjV2LTEyMS4wOUgyMjEuMzZjLTQ0Ljk2IDAtODItMzYuOS04Mi04MS45OVY3MDAuNDRjMC00NS4xIDM2LjktODIgODItODJ6bTEyNi41MSAxMTcuNDdoNzUuMjR2MTQ2LjYxYzAgMzAuNzktMi40NCA1NC4yMy03LjMzIDcwLjMxLTQuOTIgMTYuMDMtMTQuOCAyOS42Ny0yOS42NSA0MC44NS0xNC44NiAxMS4xMi0zMy45MSAxNi43Mi01Ny4wNSAxNi43Mi0yNC41MyAwLTQzLjUxLTMuNzEtNTYuOTQtMTEuMDYtMTMuNS03LjM2LTIzLjg5LTE4LjEtMzEuMjMtMzIuMy03LjM1LTE0LjE0LTExLjY5LTMxLjY3LTEyLjk5LTUyLjUzbDcxLjUtMTAuODFjLjExIDExLjgxIDEuMDcgMjAuNjEgMi44MSAyNi4zMyAxLjc2IDUuNzggNC43NSAxMC4zNyA5IDEzLjk1IDIuODcgMi4zMyA2Ljk0IDMuNDYgMTIuMjUgMy40NiA4LjQgMCAxNC41OC0zLjQ2IDE4LjUzLTEwLjM3IDMuOS02LjkyIDUuODctMTguNiA1Ljg3LTM1VjczNS45MnptMTEyLjc3IDE4MC42N2w3MS4xNy00Ljk3YzEuNTQgMTIuODEgNC42OSAyMi42MiA5LjQ0IDI5LjI4IDcuNzQgMTAuODggMTguNzQgMTYuMzQgMzMuMDkgMTYuMzQgMTAuNjggMCAxOC45My0yLjc2IDI0LjY4LTguMzYgNS44MS01LjU4IDguNy0xMi4wNyA4LjctMTkuNDEgMC02Ljk3LTIuNzEtMTMuMjYtOC4yLTE4Ljc5LTUuNDctNS41My0xOC4yMy0xMC42OC0zOC4yOC0xNS42NS0zMi44OS04LjE3LTU2LjI3LTE5LjEtNzAuMjYtMzIuNzQtMTQuMTItMTMuNTctMjEuMTgtMzAuOTItMjEuMTgtNTIuMDMgMC0xMy44MyAzLjYxLTI2Ljg5IDEwLjg1LTM5LjIxIDcuMjItMTIuMzggMTguMDctMjIuMDYgMzIuNTktMjkuMDkgMTQuNTItNy4wNCAzNC40LTEwLjU2IDU5LjY1LTEwLjU2IDMxIDAgNTQuNjIgNi40MSA3MC44OCAxOS4yOSAxNi4yOCAxMi44MSAyNS45MiAzMy4yNCAyOS4wNCA2MS4yN2wtNzAuNSA0LjY1Yy0xLjg3LTEyLjI1LTUuODEtMjEuMTctMTEuODEtMjYuNy02LjA1LTUuNi0xNC4zNS04LjM2LTI0LjktOC4zNi04LjcxIDAtMTUuMzEgMi4wNy0xOS43MyA2LjE2LTQuNCA0LjA5LTYuNTkgOS4xMi02LjU5IDE1LjAyIDAgNC4yNyAxLjgxIDguMTEgNS4zNyAxMS41NyAzLjQ1IDMuNTkgMTEuOCA2Ljg1IDI1LjAyIDkuOTMgMzIuNzUgNy44NiA1Ni4yIDE1Ljg0IDcwLjMxIDIzLjg3IDE0LjE4IDguMDUgMjQuNTIgMTcuOTggMzAuOTYgMjkuOTIgNi40NCAxMS44OCA5LjY2IDI1LjIgOS42NiAzOS45NiAwIDE3LjI5LTQuMyAzMy4yNC0xMi44OCA0Ny44OS04LjYzIDE0LjU4LTIwLjYxIDI1LjctMzYuMDggMzMuMjQtMTUuNDEgNy41NC0zNC44NSAxMS4zMS01OC4zMyAxMS4zMS00MS4yNCAwLTY5LjgxLTguODYtODUuNjgtMjYuNTItMTUuODgtMTcuNjUtMjQuODUtNDAuMDktMjYuOTYtNjcuM3ptMjQ4Ljc0LTQ1LjVjMC00NC4wNSAxMS4wMi03OC4zNiAzMy4wOS0xMDIuODcgMjIuMDktMjQuNTcgNTIuODItMzYuODIgOTIuMjQtMzYuODIgNDAuMzggMCA3MS41IDEyLjA3IDkzLjM0IDM2LjEzIDIxLjg2IDI0LjEzIDMyLjc3IDU3Ljk0IDMyLjc3IDEwMS4zNyAwIDMxLjU0LTQuNzUgNTcuMzYtMTQuMyA3Ny41NC05LjU0IDIwLjE4LTIzLjM3IDM1Ljg5LTQxLjQgNDcuMTMtMTguMDcgMTEuMjQtNDAuNTUgMTYuODQtNjcuNDggMTYuODQtMjcuMzMgMC00OS45OS00LjgzLTY3Ljk0LTE0LjUyLTE3LjkyLTkuNzQtMzIuNDktMjUuMDctNDMuNjItNDYuMDYtMTEuMTMtMjAuOTItMTYuNzItNDcuMTktMTYuNzItNzguNzR6bTc0Ljg5LjE5YzAgMjcuMjEgNC41NyA0Ni44MSAxMy42OCA1OC42OCA5LjEzIDExLjg4IDIxLjU3IDE3Ljg1IDM3LjI2IDE3Ljg1IDE2LjEgMCAyOC42NS01Ljg0IDM3LjQ1LTE3LjQ3IDguODctMTEuNjggMTMuMjgtMzIuNTQgMTMuMjgtNjIuNzcgMC0yNS4zOS00LjYzLTQzLjkyLTEzLjg0LTU1LjYxLTkuMjYtMTEuNzYtMjEuNzUtMTcuNi0zNy41Ni0xNy42LTE1LjEzIDAtMjcuMzQgNS45Ny0zNi40OSAxNy44NS05LjIxIDExLjg4LTEzLjc4IDMxLjYxLTEzLjc4IDU5LjA3em0yMDkuMDgtMTM1LjM2aDY5Ljk5bDkwLjk4IDE0OS4wNVY3MzUuOTFoNzAuODN2MjY5Ljk2aC03MC44M2wtOTAuNDgtMTQ4LjI0djE0OC4yNGgtNzAuNDlWNzM1Ljkxem02Ny43MS0xMTcuNDdoMTc4LjM3YzQ1LjEgMCA4MiAzNy4wNCA4MiA4MnYzNDAuOTFjMCA0NC45Ni0zNy4wMyA4MS45OS04MiA4MS45OWgtMTc4LjM3djE0N2MwIDE3LjUtNi45OSAzMi45OS0xOC41IDQ0LjUtMTEuNSAxMS40OS0yNyAxOC41LTQ0LjUgMTguNUg2Mi45N2MtMTcuNSAwLTMyLjk5LTctNDQuNS0xOC41LTExLjQ5LTExLjUtMTguNS0yNy0xOC41LTQ0LjVWNjMuNDljMC0xNy41IDctMzMgMTguNS00NC41UzQ1Ljk3LjQ5IDYyLjk3LjQ5SDcwMC4xYzEuNS0uNSAzLS41IDQuNS0uNSA3IDAgMTQgMyAxOSA3LjQ5aDFjMSAuNSAxLjUgMSAyLjUgMmwzMjUuNDYgMzI5LjQ3YzUuNSA1LjUgOS41IDEzIDkuNSAyMS41IDAgMi41LS41IDQuNS0xIDd2MjUwLjk4ek03MzIuNjEgMzAzLjQ3Vjk2Ljk5bDIzMi40OCAyMzUuNDdINzYxLjZjLTcuOTkgMC0xNC45OS0zLjUtMjAuNS04LjQ5LTQuOTktNS04LjQ5LTEyLjUtOC40OS0yMC41elwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gZU4oKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDUwIDUwXCIsd2lkdGg6XCIxNlwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNIDQzLjMzNTkzOCA0IEwgNi42Njc5NjkgNCBDIDUuMTk1MzEzIDQgNCA1LjE5NTMxMyA0IDYuNjY3OTY5IEwgNCA0My4zMzIwMzEgQyA0IDQ0LjgwNDY4OCA1LjE5NTMxMyA0NiA2LjY2Nzk2OSA0NiBMIDQzLjMzMjAzMSA0NiBDIDQ0LjgwNDY4OCA0NiA0NiA0NC44MDQ2ODggNDYgNDMuMzM1OTM4IEwgNDYgNi42Njc5NjkgQyA0NiA1LjE5NTMxMyA0NC44MDQ2ODggNCA0My4zMzU5MzggNCBaIE0gMjcgMzYuMTgzNTk0IEMgMjcgNDAuMTc5Njg4IDI0LjY1NjI1IDQyIDIxLjIzNDM3NSA0MiBDIDE4LjE0MDYyNSA0MiAxNS45MTAxNTYgMzkuOTI1NzgxIDE1IDM4IEwgMTguMTQ0NTMxIDM2LjA5NzY1NiBDIDE4Ljc1IDM3LjE3MTg3NSAxOS42NzE4NzUgMzggMjEgMzggQyAyMi4yNjk1MzEgMzggMjMgMzcuNTAzOTA2IDIzIDM1LjU3NDIxOSBMIDIzIDIzIEwgMjcgMjMgWiBNIDM1LjY3NTc4MSA0MiBDIDMyLjEzMjgxMyA0MiAzMC4xMjEwOTQgNDAuMjE0ODQ0IDI5IDM4IEwgMzIgMzYgQyAzMi44MTY0MDYgMzcuMzM1OTM4IDMzLjcwNzAzMSAzOC42MTMyODEgMzUuNTg5ODQ0IDM4LjYxMzI4MSBDIDM3LjE3MTg3NSAzOC42MTMyODEgMzggMzcuODI0MjE5IDM4IDM2LjczMDQ2OSBDIDM4IDM1LjQyNTc4MSAzNy4xNDA2MjUgMzQuOTYwOTM4IDM1LjQwMjM0NCAzNC4xOTkyMTkgTCAzNC40NDkyMTkgMzMuNzg5MDYzIEMgMzEuNjk1MzEzIDMyLjYxNzE4OCAyOS44NjMyODEgMzEuMTQ4NDM4IDI5Ljg2MzI4MSAyOC4wMzkwNjMgQyAyOS44NjMyODEgMjUuMTc5Njg4IDMyLjA0Njg3NSAyMyAzNS40NTMxMjUgMjMgQyAzNy44Nzg5MDYgMjMgMzkuNjIxMDk0IDIzLjg0Mzc1IDQwLjg3ODkwNiAyNi4wNTQ2ODggTCAzNy45MTAxNTYgMjcuOTY0ODQ0IEMgMzcuMjUzOTA2IDI2Ljc4OTA2MyAzNi41NTA3ODEgMjYuMzI4MTI1IDM1LjQ1MzEyNSAyNi4zMjgxMjUgQyAzNC4zMzU5MzggMjYuMzI4MTI1IDMzLjYyODkwNiAyNy4wMzkwNjMgMzMuNjI4OTA2IDI3Ljk2NDg0NCBDIDMzLjYyODkwNiAyOS4xMDkzNzUgMzQuMzM1OTM4IDI5LjU3MDMxMyAzNS45NzI2NTYgMzAuMjgxMjUgTCAzNi45MjU3ODEgMzAuNjkxNDA2IEMgNDAuMTcxODc1IDMyLjA3ODEyNSA0MiAzMy40OTYwOTQgNDIgMzYuNjgzNTk0IEMgNDIgNDAuMTE3MTg4IDM5LjMwMDc4MSA0MiAzNS42NzU3ODEgNDIgWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gZUQoKXtyZXR1cm4oMCx5LmpzeHMpKFwic3ZnXCIse2ZpbGw6XCJub25lXCIsaGVpZ2h0OlwiMTRcIix2aWV3Qm94OlwiMCAwIDUxMiA1MTJcIix3aWR0aDpcIjE0XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJyZWN0XCIse2ZpbGw6XCJjdXJyZW50Q29sb3JcIixoZWlnaHQ6XCI1MTJcIixyeDpcIjUwXCIsd2lkdGg6XCI1MTJcIn0pLCgwLHkuanN4KShcInJlY3RcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGhlaWdodDpcIjUxMlwiLHJ4OlwiNTBcIix3aWR0aDpcIjUxMlwifSksKDAseS5qc3gpKFwicGF0aFwiLHtjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwibTMxNi45MzkgNDA3LjQyNHY1MC4wNjFjOC4xMzggNC4xNzIgMTcuNzYzIDcuMyAyOC44NzUgOS4zODZzMjIuODIzIDMuMTI5IDM1LjEzNSAzLjEyOWMxMS45OTkgMCAyMy4zOTctMS4xNDcgMzQuMTk2LTMuNDQyIDEwLjc5OS0yLjI5NCAyMC4yNjgtNi4wNzUgMjguNDA2LTExLjM0MiA4LjEzOC01LjI2NiAxNC41ODEtMTIuMTUgMTkuMzI4LTIwLjY1czcuMTIxLTE5LjAwNyA3LjEyMS0zMS41MjJjMC05LjA3NC0xLjM1Ni0xNy4wMjYtNC4wNjktMjMuODU3cy02LjYyNS0xMi45MDYtMTEuNzM4LTE4LjIyNWMtNS4xMTItNS4zMTktMTEuMjQyLTEwLjA5MS0xOC4zODktMTQuMzE1cy0xNS4yMDctOC4yMTMtMjQuMTgtMTEuOTY3Yy02LjU3My0yLjcxMi0xMi40NjgtNS4zNDUtMTcuNjg1LTcuOS01LjIxNy0yLjU1Ni05LjY1MS01LjE2My0xMy4zMDMtNy44MjItMy42NTItMi42Ni02LjQ2OS01LjQ3Ni04LjQ1MS04LjQ0OC0xLjk4Mi0yLjk3My0yLjk3NC02LjMzNi0yLjk3NC0xMC4wOTEgMC0zLjQ0MS44ODctNi41NDQgMi42NjEtOS4zMDhzNC4yNzgtNS4xMzYgNy41MTItNy4xMThjMy4yMzUtMS45ODEgNy4xOTktMy41MiAxMS44OTQtNC42MTUgNC42OTYtMS4wOTUgOS45MTItMS42NDIgMTUuNjUxLTEuNjQyIDQuMTczIDAgOC41ODEuMzEzIDEzLjIyNC45MzggNC42NDMuNjI2IDkuMzEyIDEuNTkxIDE0LjAwOCAyLjg5NCA0LjY5NSAxLjMwNCA5LjI1OSAyLjk0NyAxMy42OTQgNC45MjggNC40MzQgMS45ODIgOC41MjkgNC4yNzYgMTIuMjg1IDYuODg0di00Ni43NzZjLTcuNjE2LTIuOTItMTUuOTM3LTUuMDg0LTI0Ljk2Mi02LjQ5MnMtMTkuMzgxLTIuMTEyLTMxLjA2Ni0yLjExMmMtMTEuODk1IDAtMjMuMTYzIDEuMjc4LTMzLjgwNSAzLjgzM3MtMjAuMDA2IDYuNTQ0LTI4LjA5MyAxMS45NjdjLTguMDg2IDUuNDI0LTE0LjQ3NiAxMi4zMzMtMTkuMTcxIDIwLjcyOS00LjY5NSA4LjM5NS03LjA0MyAxOC40MzMtNy4wNDMgMzAuMTE0IDAgMTQuOTE0IDQuMzA0IDI3LjYzOCAxMi45MTIgMzguMTcyIDguNjA3IDEwLjUzMyAyMS42NzUgMTkuNDUgMzkuMjA0IDI2Ljc1MSA2Ljg4NiAyLjgxNiAxMy4zMDMgNS41NzkgMTkuMjUgOC4yOTFzMTEuMDg2IDUuNTI4IDE1LjQxNSA4LjQ0OGM0LjMzIDIuOTIgNy43NDcgNi4xMDEgMTAuMjUyIDkuNTQzIDIuNTA0IDMuNDQxIDMuNzU2IDcuMzUyIDMuNzU2IDExLjczMyAwIDMuMjMzLS43ODMgNi4yMzEtMi4zNDggOC45OTVzLTMuOTM5IDUuMTYyLTcuMTIxIDcuMTk2LTcuMTQ3IDMuNjI0LTExLjg5NCA0Ljc3MWMtNC43NDggMS4xNDgtMTAuMzAzIDEuNzIxLTE2LjY2OCAxLjcyMS0xMC44NTEgMC0yMS41OTctMS45MDMtMzIuMjQtNS43MS0xMC42NDItMy44MDYtMjAuNTAyLTkuNTE2LTI5LjU3OS0xNy4xM3ptLTg0LjE1OS0xMjMuMzQyaDY0LjIydi00MS4wODJoLTE3OXY0MS4wODJoNjMuOTA2djE4Mi45MThoNTAuODc0elwiLGZpbGw6XCJ2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMClcIixmaWxsUnVsZTpcImV2ZW5vZGRcIn0pXX0pfWZ1bmN0aW9uIGVCKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNC41IDd2N2EyLjUgMi41IDAgMCAxLTIuNSAyLjVINEEyLjUgMi41IDAgMCAxIDEuNSAxNFYuNWg3LjU4NmExIDEgMCAwIDEgLjcwNy4yOTNsNC40MTQgNC40MTRhMSAxIDAgMCAxIC4yOTMuNzA3Vjd6TTEzIDd2N2ExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMVYyaDV2NWg1ek05LjUgMi42MjFWNS41aDIuODc5TDkuNSAyLjYyMXpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIGVNKCl7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLHtoZWlnaHQ6XCIxNlwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsd2lkdGg6XCIxNlwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJnXCIse2NsaXBQYXRoOlwidXJsKCNmaWxlX3JlYWN0X2NsaXAwXzg3Ml8zMTgzKVwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk00LjUgMS45Mzc4MkM0LjcwMTI5IDEuODIxNjEgNC45OTQ3MiAxLjc4NTggNS40MTMxNSAxLjkxMDUzQzUuODMyOTggMi4wMzU2NyA2LjMzMTM5IDIuMzEwNzMgNi44NzYyNyAyLjczOTQ4QzcuMDExMzYgMi44NDU3OCA3LjE0ODAzIDIuOTYwNTIgNy4yODU3MyAzLjA4MzMxQzYuODYyMTcgMy41MzQ0NiA2LjQ0MjM5IDQuMDQzNTggNi4wMzc1MiA0LjYwMDkyQzUuMzUyNDMgNC42NzI4OCA0LjcwMTY0IDQuNzgxODYgNC4wOTkxNiA0LjkyMzA5QzQuMDYxNjcgNC43NDI0NCA0LjAzMDY0IDQuNTY2NzEgNC4wMDYxMiA0LjM5NjU2QzMuOTA3MjUgMy43MTAzMSAzLjkxODI1IDMuMTQxMTQgNC4wMTk3OSAyLjcxNDk5QzQuMTIwOTkgMi4yOTAyNSA0LjI5ODcxIDIuMDU0MDQgNC41IDEuOTM3ODJaTTcuNDk0NjYgMS45NTM2MUM3LjY2MjI1IDIuMDg1NDggNy44MzA5MiAyLjIyODA0IDcuOTk5OTkgMi4zODA2N0M4LjE2OTA2IDIuMjI4MDQgOC4zMzc3MyAyLjA4NTQ4IDguNTA1MzIgMS45NTM2MUM5LjEwOTIxIDEuNDc4NDIgOS43MTk4MiAxLjEyNTQ5IDEwLjMwMTIgMC45NTIyMDJDMTAuODgzOSAwLjc3ODQ5NiAxMS40ODM4IDAuNzczOCAxMiAxLjA3MThDMTIuNTE2MSAxLjM2OTggMTIuODEyIDEuODkxNjkgMTIuOTUzIDIuNDgzMjJDMTMuMDkzNiAzLjA3MzMzIDEzLjA5MzIgMy43Nzg1OCAxMi45ODM2IDQuNTM5MTdDMTIuOTUzMiA0Ljc1MDI0IDEyLjkxNDEgNC45Njc2IDEyLjg2NjUgNS4xOTAzNEMxMy4wODMyIDUuMjYwNDQgMTMuMjkxIDUuMzM1MjQgMTMuNDg5IDUuNDE0NDRDMTQuMjAyNSA1LjY5OTgzIDE0LjgxMzQgNi4wNTIxNyAxNS4yNTQyIDYuNDY4OTlDMTUuNjk2IDYuODg2OCAxNiA3LjQwNCAxNiA4QzE2IDguNTk2IDE1LjY5NiA5LjExMzE5IDE1LjI1NDIgOS41MzEwMUMxNC44MTM0IDkuOTQ3ODMgMTQuMjAyNSAxMC4zMDAyIDEzLjQ4OSAxMC41ODU2QzEzLjI5MSAxMC42NjQ4IDEzLjA4MzIgMTAuNzM5NiAxMi44NjY1IDEwLjgwOTdDMTIuOTE0MSAxMS4wMzI0IDEyLjk1MzIgMTEuMjQ5OCAxMi45ODM3IDExLjQ2MDhDMTMuMDkzMiAxMi4yMjE0IDEzLjA5MzYgMTIuOTI2NyAxMi45NTMgMTMuNTE2OEMxMi44MTIgMTQuMTA4MyAxMi41MTYxIDE0LjYzMDIgMTIgMTQuOTI4MkMxMS40ODM5IDE1LjIyNjIgMTAuODgzOSAxNS4yMjE1IDEwLjMwMTIgMTUuMDQ3OEM5LjcxOTg0IDE0Ljg3NDUgOS4xMDkyMyAxNC41MjE2IDguNTA1MzQgMTQuMDQ2NEM4LjMzNzc1IDEzLjkxNDUgOC4xNjkwNiAxMy43NzE5IDcuOTk5OTkgMTMuNjE5M0M3LjgzMDkxIDEzLjc3MTkgNy42NjIyMyAxMy45MTQ1IDcuNDk0NjQgMTQuMDQ2NEM2Ljg5MDc1IDE0LjUyMTYgNi4yODAxNCAxNC44NzQ1IDUuNjk4NzkgMTUuMDQ3OEM1LjExNjA1IDE1LjIyMTUgNC41MTYxMyAxNS4yMjYyIDMuOTk5OTggMTQuOTI4MkMzLjQ4MzgzIDE0LjYzMDIgMy4xODc5NCAxNC4xMDgzIDMuMDQ3IDEzLjUxNjhDMi45MDY0IDEyLjkyNjcgMi45MDY3NCAxMi4yMjE0IDMuMDE2MzIgMTEuNDYwOEMzLjA0NjczIDExLjI0OTggMy4wODU4NiAxMS4wMzI0IDMuMTMzNTEgMTAuODA5N0MyLjkxNjc5IDEwLjczOTUgMi43MDkgMTAuNjY0OCAyLjUxMSAxMC41ODU2QzEuNzk3NTIgMTAuMzAwMiAxLjE4NjU4IDkuOTQ3ODMgMC43NDU4MzMgOS41MzEwMUMwLjMwNDAyOCA5LjExMzE5IDAgOC41OTYgMCA4QzAgNy40MDQgMC4zMDQwMjggNi44ODY4IDAuNzQ1ODMzIDYuNDY4OTlDMS4xODY1OCA2LjA1MjE3IDEuNzk3NTIgNS42OTk4MyAyLjUxMSA1LjQxNDQ0QzIuNzA5IDUuMzM1MjQgMi45MTY4IDUuMjYwNDQgMy4xMzM1MiA1LjE5MDM0QzMuMDg1ODcgNC45Njc2IDMuMDQ2NzUgNC43NTAyNCAzLjAxNjM0IDQuNTM5MTdDMi45MDY3NiAzLjc3ODU4IDIuOTA2NDIgMy4wNzMzMiAzLjA0NzAyIDIuNDgzMjFDMy4xODc5NiAxLjg5MTY5IDMuNDgzODUgMS4zNjk4IDQgMS4wNzE4QzQuNTE2MTUgMC43NzM3OTggNS4xMTYwNyAwLjc3ODQ5NSA1LjY5ODgxIDAuOTUyMjAxQzYuMjgwMTYgMS4xMjU0OSA2Ljg5MDc3IDEuNDc4NDEgNy40OTQ2NiAxLjk1MzYxWk03LjM2NzQ3IDQuNTEwMjVDNy41NzczNSA0LjI1MTk0IDcuNzg4ODEgNC4wMDkyNyA3Ljk5OTk5IDMuNzgzNTZDOC4yMTExNyA0LjAwOTI3IDguNDIyNjMgNC4yNTE5NCA4LjYzMjUxIDQuNTEwMjVDOC40MjM2OSA0LjUwMzQ2IDguMjEyNzQgNC41IDggNC41QzcuNzg3MjUgNC41IDcuNTc2MyA0LjUwMzQ1IDcuMzY3NDcgNC41MTAyNVpNOC43MTQyNSAzLjA4MzMxQzkuMTM3ODEgMy41MzQ0NyA5LjU1NzU5IDQuMDQzNTggOS45NjI0NiA0LjYwMDkyQzEwLjY0NzUgNC42NzI4OCAxMS4yOTgzIDQuNzgxODYgMTEuOTAwOCA0LjkyMzA5QzExLjkzODMgNC43NDI0NCAxMS45NjkzIDQuNTY2NzEgMTEuOTkzOSA0LjM5NjU3QzEyLjA5MjcgMy43MTAzMSAxMi4wODE3IDMuMTQxMTQgMTEuOTgwMiAyLjcxNDk5QzExLjg3OSAyLjI5MDI1IDExLjcwMTMgMi4wNTQwNCAxMS41IDEuOTM3ODJDMTEuMjk4NyAxLjgyMTYxIDExLjAwNTMgMS43ODU4IDEwLjU4NjggMS45MTA1M0MxMC4xNjcgMi4wMzU2OCA5LjY2ODU5IDIuMzEwNzMgOS4xMjM3MSAyLjczOTQ4QzguOTg4NjIgMi44NDU3OCA4Ljg1MTk2IDIuOTYwNTIgOC43MTQyNSAzLjA4MzMxWk04IDUuNUM4LjQ4NDMzIDUuNSA4Ljk1NjM4IDUuNTE4ODUgOS40MTE4OCA1LjU1NDU2QzkuNjcwNTYgNS45MzExOCA5LjkyMjkgNi4zMzA1NiAxMC4xNjUxIDYuNzVDMTAuNDA3MiA3LjE2OTQ0IDEwLjYyNjkgNy41ODc2NiAxMC44MjM3IDcuOTk5OThDMTAuNjI2OSA4LjQxMjMyIDEwLjQwNzIgOC44MzA1NSAxMC4xNjUgOS4yNUM5LjkyMjg4IDkuNjY5NDQgOS42NzA1MyAxMC4wNjg4IDkuNDExODUgMTAuNDQ1NEM4Ljk1NjM2IDEwLjQ4MTIgOC40ODQzMiAxMC41IDggMTAuNUM3LjUxNTY3IDEwLjUgNy4wNDM2MyAxMC40ODEyIDYuNTg4MTMgMTAuNDQ1NEM2LjMyOTQ1IDEwLjA2ODggNi4wNzcxIDkuNjY5NDQgNS44MzQ5NCA5LjI1QzUuNTkyNzcgOC44MzA1NSA1LjM3MzA2IDguNDEyMzIgNS4xNzYyNCA3Ljk5OTk4QzUuMzczMDYgNy41ODc2NSA1LjU5Mjc1IDcuMTY5NDQgNS44MzQ5MiA2Ljc1QzYuMDc3MDggNi4zMzA1NiA2LjMyOTQyIDUuOTMxMTggNi41ODgxIDUuNTU0NTZDNy4wNDM2MSA1LjUxODg0IDcuNTE1NjYgNS41IDggNS41Wk0xMS4wMzExIDYuMjVDMTEuMTM3NSA2LjQzNDIzIDExLjIzOTkgNi42MTg2NCAxMS4zMzg1IDYuODAyODdDMTEuNDU3MiA2LjQ5MTk3IDExLjU2MTYgNi4xODc1MiAxMS42NTE1IDUuODkxNzhDMTEuMzUwNSA1LjgyMTc1IDExLjAzNDYgNS43NTk5NiAxMC43MDYgNS43MDczNkMxMC44MTYzIDUuODg0OCAxMC45MjQ3IDYuMDY1NzYgMTEuMDMxMSA2LjI1Wk0xMS4wMzExIDkuNzVDMTEuMTM3NCA5LjU2NTc2IDExLjIzOTkgOS4zODEzMyAxMS4zMzg1IDkuMTk3MDlDMTEuNDU3MiA5LjUwODAxIDExLjU2MTcgOS44MTI0NiAxMS42NTE1IDEwLjEwODJDMTEuMzUwNSAxMC4xNzgyIDExLjAzNDYgMTAuMjQgMTAuNzA1OSAxMC4yOTI2QzEwLjgxNjIgMTAuMTE1MiAxMC45MjQ3IDkuOTM0MjQgMTEuMDMxMSA5Ljc1Wk0xMS45MjQ5IDcuOTk5OThDMTIuMjA1MSA4LjYyOTI3IDEyLjQzNjIgOS4yNDczOCAxMi42MTUxIDkuODM5NzdDMTIuNzkwMyA5Ljc4MTkxIDEyLjk1OCA5LjcyMDkyIDEzLjExNzYgOS42NTcwOEMxMy43NjE0IDkuMzk5NTggMTQuMjQ4OCA5LjEwNTQ3IDE0LjU2NzEgOC44MDQ0NkMxNC44ODQzIDguNTA0NDUgMTUgOC4yMzI0MyAxNSA4QzE1IDcuNzY3NTcgMTQuODg0MyA3LjQ5NTU1IDE0LjU2NzEgNy4xOTU1NEMxNC4yNDg4IDYuODk0NTMgMTMuNzYxNCA2LjYwMDQyIDEzLjExNzYgNi4zNDI5MkMxMi45NTggNi4yNzkwNyAxMi43OTAzIDYuMjE4MDggMTIuNjE1MSA2LjE2MDIyQzEyLjQzNjIgNi43NTI2IDEyLjIwNTEgNy4zNzA2OSAxMS45MjQ5IDcuOTk5OThaTTkuOTYyNDQgMTEuMzk5MUMxMC42NDc1IDExLjMyNzEgMTEuMjk4MyAxMS4yMTgxIDExLjkwMDggMTEuMDc2OUMxMS45MzgzIDExLjI1NzYgMTEuOTY5NCAxMS40MzMzIDExLjk5MzkgMTEuNjAzNEMxMi4wOTI4IDEyLjI4OTcgMTIuMDgxNyAxMi44NTg5IDExLjk4MDIgMTMuMjg1QzExLjg3OSAxMy43MDk4IDExLjcwMTMgMTMuOTQ2IDExLjUgMTQuMDYyMkMxMS4yOTg3IDE0LjE3ODQgMTEuMDA1MyAxNC4yMTQyIDEwLjU4NjggMTQuMDg5NUMxMC4xNjcgMTMuOTY0MyA5LjY2ODYxIDEzLjY4OTMgOS4xMjM3MyAxMy4yNjA1QzguOTg4NjMgMTMuMTU0MiA4Ljg1MTk2IDEzLjAzOTUgOC43MTQyNCAxMi45MTY3QzkuMTM3OCAxMi40NjU1IDkuNTU3NTggMTEuOTU2NCA5Ljk2MjQ0IDExLjM5OTFaTTguNjMyNDkgMTEuNDg5OEM4LjQyMjYyIDExLjc0ODEgOC4yMTExNiAxMS45OTA3IDcuOTk5OTkgMTIuMjE2NEM3Ljc4ODgxIDExLjk5MDcgNy41NzczNyAxMS43NDgxIDcuMzY3NDkgMTEuNDg5N0M3LjU3NjMxIDExLjQ5NjUgNy43ODcyNiAxMS41IDggMTEuNUM4LjIxMjczIDExLjUgOC40MjM2NyAxMS40OTY1IDguNjMyNDkgMTEuNDg5OFpNNC45Njg5MSA5Ljc1QzUuMDc1MjggOS45MzQyNCA1LjE4Mzc1IDEwLjExNTIgNS4yOTQwNCAxMC4yOTI2QzQuOTY1NCAxMC4yNCA0LjY0OTUxIDEwLjE3ODIgNC4zNDg0NCAxMC4xMDgyQzQuNDM4MzMgOS44MTI0NiA0LjU0Mjc2IDkuNTA4IDQuNjYxNTIgOS4xOTcwOEM0Ljc2MDA1IDkuMzgxMzMgNC44NjI1NCA5LjU2NTc1IDQuOTY4OTEgOS43NVpNNi4wMzc1NCAxMS4zOTkxQzUuMzUyNDQgMTEuMzI3MSA0LjcwMTYzIDExLjIxODEgNC4wOTkxNCAxMS4wNzY5QzQuMDYxNjUgMTEuMjU3NiA0LjAzMDYyIDExLjQzMzMgNC4wMDYxIDExLjYwMzRDMy45MDcyMyAxMi4yODk3IDMuOTE4MjMgMTIuODU4OSA0LjAxOTc3IDEzLjI4NUM0LjEyMDk3IDEzLjcwOTggNC4yOTg2OSAxMy45NDYgNC40OTk5OCAxNC4wNjIyQzQuNzAxMjcgMTQuMTc4NCA0Ljk5NDcgMTQuMjE0MiA1LjQxMzEzIDE0LjA4OTVDNS44MzI5NiAxMy45NjQzIDYuMzMxMzcgMTMuNjg5MyA2Ljg3NjI1IDEzLjI2MDVDNy4wMTEzNSAxMy4xNTQyIDcuMTQ4MDIgMTMuMDM5NSA3LjI4NTczIDEyLjkxNjdDNi44NjIxNyAxMi40NjU1IDYuNDQyNCAxMS45NTY0IDYuMDM3NTQgMTEuMzk5MVpNNC4wNzUwNyA3Ljk5OTk4QzMuNzk0ODQgOC42MjkyNyAzLjU2MzgxIDkuMjQ3MzcgMy4zODQ4OSA5LjgzOTc3QzMuMjA5NjkgOS43ODE5MSAzLjA0MiA5LjcyMDkyIDIuODgyMzkgOS42NTcwOEMyLjIzODY0IDkuMzk5NTggMS43NTEyMyA5LjEwNTQ3IDEuNDMyOTQgOC44MDQ0NkMxLjExNTcxIDguNTA0NDUgMSA4LjIzMjQzIDEgOEMxIDcuNzY3NTcgMS4xMTU3MSA3LjQ5NTU1IDEuNDMyOTQgNy4xOTU1NEMxLjc1MTIzIDYuODk0NTMgMi4yMzg2NCA2LjYwMDQyIDIuODgyMzkgNi4zNDI5MkMzLjA0MiA2LjI3OTA3IDMuMjA5NyA2LjIxODA4IDMuMzg0OSA2LjE2MDIyQzMuNTYzODMgNi43NTI2MSAzLjc5NDg0IDcuMzcwNjkgNC4wNzUwNyA3Ljk5OTk4Wk00LjY2MTUyIDYuODAyODdDNC41NDI3NyA2LjQ5MTk3IDQuNDM4MzUgNi4xODc1MiA0LjM0ODQ2IDUuODkxNzhDNC42NDk1MiA1LjgyMTc1IDQuOTY1MzkgNS43NTk5NiA1LjI5NDAyIDUuNzA3MzZDNS4xODM3MyA1Ljg4NDggNS4wNzUyNiA2LjA2NTc2IDQuOTY4ODkgNi4yNUM0Ljg2MjUzIDYuNDM0MjMgNC43NjAwNSA2LjYxODY0IDQuNjYxNTIgNi44MDI4N1pNOS4yNSA4QzkuMjUgOC42OTAzNiA4LjY5MDM2IDkuMjUgOCA5LjI1QzcuMzA5NjQgOS4yNSA2Ljc1IDguNjkwMzYgNi43NSA4QzYuNzUgNy4zMDk2NSA3LjMwOTY0IDYuNzUgOCA2Ljc1QzguNjkwMzYgNi43NSA5LjI1IDcuMzA5NjUgOS4yNSA4WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksKDAseS5qc3gpKFwiZGVmc1wiLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJjbGlwUGF0aFwiLHtpZDpcImZpbGVfcmVhY3RfY2xpcDBfODcyXzMxODNcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJyZWN0XCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLGZpbGw6XCJ3aGl0ZVwifSl9KX0pXX0pfXZhciBlST1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9kaXN0L2NvbXBpbGVkL2Fuc2VyL2luZGV4LmpzXCIpLGVIPV9fd2VicGFja19yZXF1aXJlX18ubihlSSksZUY9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpL2luZGV4LmpzXCIpLGVVPV9fd2VicGFja19yZXF1aXJlX18ubihlRik7ZnVuY3Rpb24gZVYoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIGVxKGUpe3ZhciBuLHQ9ZS5zdGFja0ZyYW1lLHI9ZS5jb2RlRnJhbWUsbz0oMCx4LnVzZU1lbW8pKGZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4oZnVuY3Rpb24oZSl7dmFyIG49ZUgoKS5hbnNpVG9Kc29uKGUse2pzb246ITAsdXNlX2NsYXNzZXM6ITAscmVtb3ZlX2VtcHR5OiEwfSksdD1bXSxyPVtdLG89ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBsLHM9bltTeW1ib2wuaXRlcmF0b3JdKCk7IShvPShsPXMubmV4dCgpKS5kb25lKTtvPSEwKXt2YXIgYz1sLnZhbHVlO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBjLmNvbnRlbnQmJmMuY29udGVudC5pbmNsdWRlcyhcIlxcblwiKSlmb3IodmFyIHU9Yy5jb250ZW50LnNwbGl0KFwiXFxuXCIpLGQ9MDtkPHUubGVuZ3RoO2QrKyl7dmFyIGY9dVtkXTtmJiZyLnB1c2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfShmdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt9LGMpLHtjb250ZW50OmZ9KSksZDx1Lmxlbmd0aC0xJiYodC5wdXNoKHIpLHI9W10pfWVsc2Ugci5wdXNoKGMpfX1jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXtvfHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19cmV0dXJuIHIubGVuZ3RoPjAmJnQucHVzaChyKSx0fSkoKG49KGU9ci5zcGxpdCgvXFxyP1xcbi9nKSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09L14+PyArXFxkKyArXFx8IFsgXSsvLmV4ZWMoZVUoKShlKSk/bnVsbDovXj4/ICtcXGQrICtcXHwgKCAqKS8uZXhlYyhlVSgpKGUpKX0pLmZpbHRlcihCb29sZWFuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucG9wKCl9KS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtyZXR1cm4gaXNOYU4oZSk/bi5sZW5ndGg6TWF0aC5taW4oZSxuLmxlbmd0aCl9LE5hTikpPjE/ZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm5+KHQ9ZS5pbmRleE9mKFwifFwiKSk/ZS5zdWJzdHJpbmcoMCx0KStlLnN1YnN0cmluZyh0KS5yZXBsYWNlKFwiXlxcXFwge1wiLmNvbmNhdChuLFwifVwiKSxcIlwiKTplfSkuam9pbihcIlxcblwiKTplLmpvaW4oXCJcXG5cIikpLm1hcChmdW5jdGlvbihlKXt2YXIgbixyLG8sYSxpLGwscyxjLHU7cmV0dXJue2xpbmU6ZSxwYXJzZWRMaW5lOihuPWUscj10LCgobnVsbD09KG89blswXSk/dm9pZCAwOm8uY29udGVudCk9PT1cIj5cInx8KG51bGw9PShhPW5bMF0pP3ZvaWQgMDphLmNvbnRlbnQpPT09XCIgXCIpJiYocz1udWxsPT0obD1uWzFdKXx8bnVsbD09KHU9bC5jb250ZW50KXx8bnVsbD09KGM9dS5yZXBsYWNlKFwifFwiLFwiXCIpKT92b2lkIDA6Yy50cmltKCkpLHtsaW5lTnVtYmVyOnMsaXNFcnJvcmVkTGluZTpzPT09KG51bGw9PShpPXIubGluZU51bWJlcik/dm9pZCAwOmkudG9TdHJpbmcoKSl9KX19KX0sW3IsdF0pLGE9ZUUoe2ZpbGU6dC5maWxlLGxpbmVOdW1iZXI6dC5saW5lTnVtYmVyLGNvbHVtbjp0LmNvbHVtbn0pLGk9bnVsbD09dHx8bnVsbD09KG49dC5maWxlKT92b2lkIDA6bi5zcGxpdChcIi5cIikucG9wKCk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZVwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1oZWFkZXJcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWxpbmtcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWljb25cIixjaGlsZHJlbjooMCx5LmpzeCkoZVQse2xhbmc6aX0pfSksKDAseS5qc3hzKShcInNwYW5cIix7XCJkYXRhLXRleHRcIjohMCxjaGlsZHJlbjpbZVModCksXCIgQFwiLFwiIFwiLCgwLHkuanN4KShlYix7dGV4dDp0Lm1ldGhvZE5hbWV9KV19KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6XCJPcGVuIGluIGVkaXRvclwiLFwiZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmstc291cmNlLWZpbGVcIjohMCxvbkNsaWNrOmEsY2hpbGRyZW46KDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWljb25cIixcImRhdGEtaWNvblwiOlwicmlnaHRcIixjaGlsZHJlbjooMCx5LmpzeCkoZXose3dpZHRoOjE2LGhlaWdodDoxNn0pfSl9KV19KX0pLCgwLHkuanN4KShcInByZVwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLXByZVwiLGNoaWxkcmVuOigwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWxpbmVzXCIsY2hpbGRyZW46by5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89ZS5saW5lLGE9ZS5wYXJzZWRMaW5lLGk9YS5saW5lTnVtYmVyLGw9YS5pc0Vycm9yZWRMaW5lLHM9e307cmV0dXJuIGkmJihzW1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLWxpbmVcIl09aSksbCYmKHNbXCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtbGluZS0tZXJyb3JlZFwiXT0hMCksKDAseS5qc3gpKFwiZGl2XCIsKHQ9ZVYoe30scykscj1yPXtjaGlsZHJlbjpvLm1hcChmdW5jdGlvbihlLG4pe3JldHVybigwLHkuanN4KShcInNwYW5cIix7c3R5bGU6ZVYoe2NvbG9yOmUuZmc/XCJ2YXIoLS1jb2xvci1cIi5jb25jYXQoZS5mZyxcIilcIik6dm9pZCAwfSxcImJvbGRcIj09PWUuZGVjb3JhdGlvbj97Zm9udFdlaWdodDo1MDB9OlwiaXRhbGljXCI9PT1lLmRlY29yYXRpb24/e2ZvbnRTdHlsZTpcIml0YWxpY1wifTp2b2lkIDApLGNoaWxkcmVuOmUuY29udGVudH0sXCJmcmFtZS1cIi5jb25jYXQobikpfSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QocikpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSksdCksXCJsaW5lLVwiLmNvbmNhdChuKSl9KX0pfSldfSl9ZnVuY3Rpb24gZVcoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfXZhciBlJD1bXCJbZGF0YS1uZXh0LW1hcmtdXCIsXCJbZGF0YS1pc3N1ZXMtb3Blbl1cIixcIiNuZXh0anMtZGV2LXRvb2xzLW1lbnVcIixcIltkYXRhLW5leHRqcy1lcnJvci1vdmVybGF5LW5hdl1cIixcIltkYXRhLWluZm8tcG9wb3Zlcl1cIixcIltkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1vdmVybGF5XVwiLFwiW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlcl1cIixcIltkYXRhLW5leHRqcy1lcnJvci1vdmVybGF5LWZvb3Rlcl1cIl0sZVo9ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLG8sYSxpLGwscz1lLmNoaWxkcmVuLGM9ZS5jbGFzc05hbWUsdT1lLm9uQ2xvc2UsZD1lW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLGY9ZVtcImFyaWEtZGVzY3JpYmVkYnlcIl0scD0oZS5kaWFsb2dSZXNpemVyUmVmLGZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiLFwiY2xhc3NOYW1lXCIsXCJvbkNsb3NlXCIsXCJhcmlhLWxhYmVsbGVkYnlcIixcImFyaWEtZGVzY3JpYmVkYnlcIixcImRpYWxvZ1Jlc2l6ZXJSZWZcIl0pKSxoPXgudXNlUmVmKG51bGwpLGc9KG49eC51c2VTdGF0ZShcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50Lmhhc0ZvY3VzKCk/XCJkaWFsb2dcIjp2b2lkIDApLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlVyhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBlVyhlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksbT1nWzBdLHY9Z1sxXTtyZXR1cm4gcj1oLmN1cnJlbnQsbz1lJCxhPWZ1bmN0aW9uKGUpe3JldHVybiBlLnByZXZlbnREZWZhdWx0KCksbnVsbD09dT92b2lkIDA6dSgpfSx4LnVzZUVmZmVjdChmdW5jdGlvbigpe2lmKG51bGwhPXImJm51bGwhPWEpe3ZhciBlPWZ1bmN0aW9uKGUpeyEoIXJ8fHIuY29udGFpbnMoZS50YXJnZXQpKSYmKG8uc29tZShmdW5jdGlvbihuKXtyZXR1cm4gZS50YXJnZXQuY2xvc2VzdChuKX0pfHxhKGUpKX0sbj1yLmdldFJvb3ROb2RlKCk7cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixlKSxuLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLGUse3Bhc3NpdmU6ITF9KSxmdW5jdGlvbigpe24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixlKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLGUpfX19LFthLHIsb10pLHgudXNlRWZmZWN0KGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt2KGRvY3VtZW50Lmhhc0ZvY3VzKCk/XCJkaWFsb2dcIjp2b2lkIDApfTtpZihudWxsIT1oLmN1cnJlbnQpcmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIixlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIixlKSxmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIixlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixlKX19LFtdKSx4LnVzZUVmZmVjdChmdW5jdGlvbigpe3ZhciBlLG4sdD1oLmN1cnJlbnQscj1udWxsPT10P3ZvaWQgMDp0LmdldFJvb3ROb2RlKCksbz0oZT1yLG51bGwhPShuPVNoYWRvd1Jvb3QpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5oYXNJbnN0YW5jZV0/ISFuW1N5bWJvbC5oYXNJbnN0YW5jZV0oZSk6ZSBpbnN0YW5jZW9mIG4pP251bGw9PXI/dm9pZCAwOnIuYWN0aXZlRWxlbWVudDpudWxsO3JldHVybiBudWxsPT10fHx0LmZvY3VzKCksZnVuY3Rpb24oKXtudWxsPT10fHx0LmJsdXIoKSxudWxsPT1vfHxvLmZvY3VzKCl9fSxbXSksKDAseS5qc3gpKFwiZGl2XCIsKGk9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7cmVmOmgsdGFiSW5kZXg6LTEsXCJkYXRhLW5leHRqcy1kaWFsb2dcIjohMCxyb2xlOm0sXCJhcmlhLWxhYmVsbGVkYnlcIjpkLFwiYXJpYS1kZXNjcmliZWRieVwiOmYsXCJhcmlhLW1vZGFsXCI6XCJ0cnVlXCIsY2xhc3NOYW1lOmMsb25LZXlEb3duOmZ1bmN0aW9uKGUpe1wiRXNjYXBlXCI9PT1lLmtleSYmKG51bGw9PXV8fHUoKSl9fSxwKSxsPWw9e2NoaWxkcmVuOnN9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsZSkpfSksaSkpfSxlWT1mdW5jdGlvbihlKXt2YXIgbix0LHI9ZS5jaGlsZHJlbixvPWUuY2xhc3NOYW1lLGE9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcImNoaWxkcmVuXCIsXCJjbGFzc05hbWVcIl0pO3JldHVybigwLHkuanN4KShcImRpdlwiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe1wiZGF0YS1uZXh0anMtZGlhbG9nLWJvZHlcIjohMCxjbGFzc05hbWU6b30sYSksdD10PXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX0sZVg9ZnVuY3Rpb24oZSl7dmFyIG4sdCxyPWUuY2hpbGRyZW4sbz1lLmNsYXNzTmFtZSxhPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiLFwiY2xhc3NOYW1lXCJdKTtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImRhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XCI6ITAsY2xhc3NOYW1lOm99LGEpLHQ9dD17Y2hpbGRyZW46cn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9O2Z1bmN0aW9uIGVLKGUpe3ZhciBuLHQ7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyXCI6ITB9LGUpLHQ9dD17Y2hpbGRyZW46ZS5jaGlsZHJlbn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gZVEoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLXJvb3RdIHtcXG4gICAgLS1uZXh0LWRpYWxvZy1yYWRpdXM6IHZhcigtLXJvdW5kZWQteGwpO1xcbiAgICAtLW5leHQtZGlhbG9nLW1heC13aWR0aDogOTYwcHg7XFxuICAgIC0tbmV4dC1kaWFsb2ctcm93LXBhZGRpbmc6IDE2cHg7XFxuICAgIC0tbmV4dC1kaWFsb2ctcGFkZGluZzogMTJweDtcXG4gICAgLS1uZXh0LWRpYWxvZy1ub3RjaC1oZWlnaHQ6IDQycHg7XFxuICAgIC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoOiAxcHg7XFxuXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA1NnB4KTtcXG4gICAgbWF4LXdpZHRoOiB2YXIoLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGgpO1xcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBzY2FsZTogMC45NztcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogc2NhbGUsIG9wYWNpdHk7XFxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXRyYW5zaXRpb24tZHVyYXRpb24pO1xcbiAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tdGltaW5nLW92ZXJsYXkpO1xcblxcbiAgICAmW2RhdGEtcmVuZGVyZWQ9J3RydWUnXSB7XFxuICAgICAgb3BhY2l0eTogMTtcXG4gICAgICBzY2FsZTogMTtcXG4gICAgfVxcblxcbiAgICBbZGF0YS1uZXh0anMtc2Nyb2xsLWZhZGVyXVtkYXRhLXNpZGU9J3RvcCddIHtcXG4gICAgICBsZWZ0OiAxcHg7XFxuICAgICAgdG9wOiBjYWxjKFxcbiAgICAgICAgdmFyKC0tbmV4dC1kaWFsb2ctbm90Y2gtaGVpZ2h0KSArIHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aClcXG4gICAgICApO1xcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1uZXh0LWRpYWxvZy1wYWRkaW5nKSk7XFxuICAgICAgb3BhY2l0eTogMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZ10ge1xcbiAgICBvdXRsaW5lOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZ10sXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nXSAqIHtcXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xcbiAgICAgIHdpZHRoOiA2cHg7XFxuICAgICAgaGVpZ2h0OiA2cHg7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDFyZW0gMXJlbTtcXG4gICAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgICB9XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7XFxuICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgfVxcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDFyZW0gMXJlbTtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFyZW07XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS01MDApO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKiBQbGFjZSBvdmVyZmxvdzogaGlkZGVuIG9uIHRoaXMgc28gd2UgY2FuIGJyZWFrIG91dCBmcm9tIFtkYXRhLW5leHRqcy1kaWFsb2ddICovXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLXNpemVyXSB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wXSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tdHJhbnNpdGlvbi1kdXJhdGlvbikgdmFyKC0tdGltaW5nLW92ZXJsYXkpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XSB7XFxuICAgIG1hcmdpbjogOHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XVtkYXRhLXJlbmRlcmVkPSd0cnVlJ11cXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcF0ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSB7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHBhZGRpbmc6IHZhcigtLW5leHQtZGlhbG9nLXBhZGRpbmcpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSA+IFtkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyXSB7XFxuICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWNvbnRlbnRdID4gW2RhdGEtbmV4dGpzLWRpYWxvZy1ib2R5XSB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgZmxleDogMSAxIGF1dG87XFxuICB9XFxuXFxuICBAbWVkaWEgKG1heC1oZWlnaHQ6IDgxMnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDE1cHgpO1xcbiAgICB9XFxuICB9XFxuXFxuICBAbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1yb290XSB7XFxuICAgICAgLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGg6IDU0MHB4O1xcbiAgICB9XFxuICB9XFxuXFxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1yb290XSB7XFxuICAgICAgLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGg6IDcyMHB4O1xcbiAgICB9XFxuICB9XFxuXFxuICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1yb290XSB7XFxuICAgICAgLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGg6IDk2MHB4O1xcbiAgICB9XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIGVRPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9dmFyIGVHPWVpKGVRKCkpLGVKPV9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3V0aWxzL2N4LnRzXCIpO2Z1bmN0aW9uIGUwKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBlMShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZTIoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIGU0KGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlMChlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBlMChlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX12YXIgZTU9XCJmdW5jdGlvblwiPT10eXBlb2YgeC51c2VBY3Rpb25TdGF0ZT9mdW5jdGlvbihlKXt2YXIgbj1lNCh4LnVzZUFjdGlvblN0YXRlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuXCJyZXNldFwiPT09dD97c3RhdGU6XCJpbml0aWFsXCJ9OlwiY29weVwiPT09dD9uYXZpZ2F0b3IuY2xpcGJvYXJkP25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGUpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm57c3RhdGU6XCJzdWNjZXNzXCJ9fSxmdW5jdGlvbihlKXtyZXR1cm57c3RhdGU6XCJlcnJvclwiLGVycm9yOmV9fSk6e3N0YXRlOlwiZXJyb3JcIixlcnJvcjpcIkNvcHkgdG8gY2xpcGJvYXJkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCJ9Om59LHtzdGF0ZTpcImluaXRpYWxcIn0pLDMpLHQ9blswXSxyPW5bMV0sbz1uWzJdO3JldHVyblt0LGZ1bmN0aW9uKCl7eC5zdGFydFRyYW5zaXRpb24oZnVuY3Rpb24oKXtyKFwiY29weVwiKX0pfSx4LnVzZUNhbGxiYWNrKGZ1bmN0aW9uKCl7cihcInJlc2V0XCIpfSxbcl0pLG9dfTpmdW5jdGlvbihlKXt2YXIgbj1lNCh4LnVzZVJlZHVjZXIoZnVuY3Rpb24oZSxuKXtyZXR1cm5cInJlc2V0XCI9PT1uLnR5cGU/e3N0YXRlOlwiaW5pdGlhbFwifTpcImNvcGllZFwiPT09bi50eXBlP3tzdGF0ZTpcInN1Y2Nlc3NcIn06XCJjb3B5aW5nXCI9PT1uLnR5cGU/e3N0YXRlOlwicGVuZGluZ1wifTpcImVycm9yXCI9PT1uLnR5cGU/e3N0YXRlOlwiZXJyb3JcIixlcnJvcjpuLmVycm9yfTplfSx7c3RhdGU6XCJpbml0aWFsXCJ9KSwyKSx0PW5bMF0scj1uWzFdLG89eC51c2VDYWxsYmFjayhmdW5jdGlvbigpe3Ioe3R5cGU6XCJyZXNldFwifSl9LFtdKSxhPVwicGVuZGluZ1wiPT09dC5zdGF0ZTtyZXR1cm5bdCxmdW5jdGlvbigpe2F8fChuYXZpZ2F0b3IuY2xpcGJvYXJkPyhyKHt0eXBlOlwiY29weWluZ1wifSksbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZSkudGhlbihmdW5jdGlvbigpe3Ioe3R5cGU6XCJjb3BpZWRcIn0pfSxmdW5jdGlvbihlKXtyKHt0eXBlOlwiZXJyb3JcIixlcnJvcjplfSl9KSk6cih7dHlwZTpcImVycm9yXCIsZXJyb3I6XCJDb3B5IHRvIGNsaXBib2FyZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwifSkpfSxvLGFdfTtmdW5jdGlvbiBlMyhlKXt2YXIgbj1lLmFjdGlvbkxhYmVsLHQ9ZS5zdWNjZXNzTGFiZWwscj1lLmNvbnRlbnQsbz1lLmljb24sYT1lLmRpc2FibGVkLGk9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcImFjdGlvbkxhYmVsXCIsXCJzdWNjZXNzTGFiZWxcIixcImNvbnRlbnRcIixcImljb25cIixcImRpc2FibGVkXCJdKSxsPWU0KGU1KHIpLDQpLHM9bFswXSxjPWxbMV0sdT1sWzJdLGQ9bFszXSxmPVwiZXJyb3JcIj09PXMuc3RhdGU/cy5lcnJvcjpudWxsO3gudXNlRWZmZWN0KGZ1bmN0aW9uKCl7bnVsbCE9PWYmJmNvbnNvbGUud2FybihmKX0sW2ZdKSx4LnVzZUVmZmVjdChmdW5jdGlvbigpe2lmKFwic3VjY2Vzc1wiPT09cy5zdGF0ZSl7dmFyIGU9c2V0VGltZW91dChmdW5jdGlvbigpe3UoKX0sMmUzKTtyZXR1cm4gZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZSl9fX0sW2Qscy5zdGF0ZSx1XSk7dmFyIHA9IW5hdmlnYXRvci5jbGlwYm9hcmR8fGR8fGF8fCEhZixoPVwic3VjY2Vzc1wiPT09cy5zdGF0ZT90Om4sZz1cInN1Y2Nlc3NcIj09PXMuc3RhdGU/KDAseS5qc3gpKGU5LHt9KTpvfHwoMCx5LmpzeCkoZTYse3dpZHRoOjE0LGhlaWdodDoxNCxjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXRvb2xiYXItYnV0dG9uLWljb25cIn0pO3JldHVybigwLHkuanN4cykoXCJidXR0b25cIixlMihlMSh7fSxpKSx7dHlwZTpcImJ1dHRvblwiLHRpdGxlOmgsXCJhcmlhLWxhYmVsXCI6aCxcImFyaWEtZGlzYWJsZWRcIjpwLGRpc2FibGVkOnAsXCJkYXRhLW5leHRqcy1jb3B5LWJ1dHRvblwiOiEwLGNsYXNzTmFtZTooMCxlSi5jeCkoaS5jbGFzc05hbWUsXCJuZXh0anMtZGF0YS1jb3B5LWJ1dHRvblwiLFwibmV4dGpzLWRhdGEtY29weS1idXR0b24tLVwiLmNvbmNhdChzLnN0YXRlKSksb25DbGljazpmdW5jdGlvbigpe3B8fGMoKX0sY2hpbGRyZW46W2csXCJlcnJvclwiPT09cy5zdGF0ZT9cIiBcIi5jb25jYXQocy5lcnJvcik6bnVsbF19KSl9ZnVuY3Rpb24gZTYoZSl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIsZTIoZTEoe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSkse2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0yLjQwNi40MzhjLS44NDUgMC0xLjUzMS42ODUtMS41MzEgMS41M3Y2LjU2M2MwIC44NDYuNjg2IDEuNTMxIDEuNTMxIDEuNTMxSDMuOTM3VjguNzVIMi40MDZhLjIxOS4yMTkgMCAwIDEtLjIxOS0uMjE5VjEuOTdjMC0uMTIxLjA5OC0uMjE5LjIyLS4yMTloNC44MTJjLjEyIDAgLjIxOC4wOTguMjE4LjIxOXYuNjU2SDguNzV2LS42NTZjMC0uODQ2LS42ODYtMS41MzItMS41MzEtMS41MzJIMi40MDZ6bTQuMzc1IDMuNWMtLjg0NSAwLTEuNTMxLjY4NS0xLjUzMSAxLjUzdjYuNTYzYzAgLjg0Ni42ODYgMS41MzEgMS41MzEgMS41MzFoNC44MTNjLjg0NSAwIDEuNTMxLS42ODUgMS41MzEtMS41M1Y1LjQ2OGMwLS44NDYtLjY4Ni0xLjUzMi0xLjUzMS0xLjUzMkg2Ljc4em0tLjIxOCAxLjUzYzAtLjEyLjA5Ny0uMjE4LjIxOC0uMjE4aDQuODEzYy4xMiAwIC4yMTkuMDk4LjIxOS4yMTl2Ni41NjJjMCAuMTIxLS4wOTguMjE5LS4yMi4yMTlINi43ODJhLjIxOS4yMTkgMCAwIDEtLjIxOC0uMjE5VjUuNDd6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSl9ZnVuY3Rpb24gZTkoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIix4bGlua1RpdGxlOlwiY29waWVkXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixmaWxsOlwiY3VycmVudENvbG9yXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEzLjc4IDQuMjJhLjc1Ljc1IDAgMCAxIDAgMS4wNmwtNy4yNSA3LjI1YS43NS43NSAwIDAgMS0xLjA2IDBMMi4yMiA5LjI4YS43NTEuNzUxIDAgMCAxIC4wMTgtMS4wNDIuNzUxLjc1MSAwIDAgMSAxLjA0Mi0uMDE4TDYgMTAuOTRsNi43Mi02LjcyYS43NS43NSAwIDAgMSAxLjA2IDBaXCJ9KX0pfWZ1bmN0aW9uIGU4KGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiBlNyhlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9dmFyIG5lPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4hMTt2YXIgZT1cImNocm9tZVwiaW4gd2luZG93JiZ3aW5kb3cuY2hyb21lLG49d2luZG93Lm5hdmlnYXRvci52ZW5kb3I7cmV0dXJuIG51bGwhPWUmJlwiR29vZ2xlIEluYy5cIj09PW59KCk7ZnVuY3Rpb24gbm4oZSl7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLGU3KGU4KHt3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIix2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHtjaGlsZHJlbjpbKDAseS5qc3gpKFwibWFza1wiLHtpZDpcIm5vZGVqc19pY29uX21hc2tfYVwiLHN0eWxlOnttYXNrVHlwZTpcImx1bWluYW5jZVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIwXCIseTpcIjBcIix3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNNi42Ny4wODkgMS4yMDUgMy4yNTZhLjY2My42NjMgMCAwIDAtLjMzLjU3M3Y2LjMzOWMwIC4yMzcuMTI2LjQ1NS4zMy41NzRsNS40NjYgMy4xN2EuNjYuNjYgMCAwIDAgLjY2IDBsNS40NjUtMy4xN2EuNjY0LjY2NCAwIDAgMCAuMzI5LS41NzRWMy44MjlhLjY2My42NjMgMCAwIDAtLjMzLS41NzNMNy4zMy4wODlhLjY2My42NjMgMCAwIDAtLjY2MSAwXCIsZmlsbDpcIiNmZmZcIn0pfSksKDAseS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2EpXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTE4LjY0OCAyLjcxNyAzLjI0OC00Ljg2LTQuNjQ4IDExLjMxbDE1LjQgNy41OCA3Ljg5Ni0xNi4xNzR6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2IpXCJ9KX0pLCgwLHkuanN4KShcIm1hc2tcIix7aWQ6XCJub2RlanNfaWNvbl9tYXNrX2NcIixzdHlsZTp7bWFza1R5cGU6XCJsdW1pbmFuY2VcIn0sbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiMVwiLHk6XCIwXCIsd2lkdGg6XCIxMlwiLGhlaWdodDpcIjE0XCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEuMDEgMTAuNTdhLjY2My42NjMgMCAwIDAgLjE5NS4xN2w0LjY4OCAyLjcyLjc4MS40NWEuNjYuNjYgMCAwIDAgLjUxLjA2M2w1Ljc2NC0xMC41OTdhLjY1My42NTMgMCAwIDAtLjE1My0uMTIyTDkuMjE2IDEuMTggNy4zMjUuMDg3YS42ODguNjg4IDAgMCAwLS4xNzEtLjA3TDEuMDEgMTAuNTd6XCIsZmlsbDpcIiNmZmZcIn0pfSksKDAseS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2MpXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTS01LjY0NyA0Ljk1OCA1LjIyNiAxOS43MzRsMTQuMzgtMTAuNjY3TDguNzM0LTUuNzEtNS42NDcgNC45NTh6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2QpXCJ9KX0pLCgwLHkuanN4cykoXCJnXCIse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJtYXNrXCIse2lkOlwibm9kZWpzX2ljb25fbWFza19lXCIsc3R5bGU6e21hc2tUeXBlOlwibHVtaW5hbmNlXCJ9LG1hc2tVbml0czpcInVzZXJTcGFjZU9uVXNlXCIseDpcIjFcIix5OlwiMFwiLHdpZHRoOlwiMTNcIixoZWlnaHQ6XCIxNFwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk02LjkzNC4wMDRBLjY2NS42NjUgMCAwIDAgNi42Ny4wOUwxLjIyIDMuMjQ3bDUuODc3IDEwLjc0NmEuNjU1LjY1NSAwIDAgMCAuMjM1LS4wOGw1LjQ2NS0zLjE3YS42NjUuNjY1IDAgMCAwIC4zMTktLjQ1M0w3LjEyNi4wMTVhLjY4NC42ODQgMCAwIDAtLjE4OS0uMDFcIixmaWxsOlwiI2ZmZlwifSl9KSwoMCx5LmpzeCkoXCJnXCIse21hc2s6XCJ1cmwoI25vZGVqc19pY29uX21hc2tfZSlcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMS4yMi4wMDJ2MTMuOTkyaDExLjg5NFYuMDAySDEuMjJ6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2YpXCJ9KX0pXX0pLCgwLHkuanN4cykoXCJkZWZzXCIse2NoaWxkcmVuOlsoMCx5LmpzeHMpKFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJub2RlanNfaWNvbl9saW5lYXJfZ3JhZGllbnRfYlwiLHgxOlwiMTAuOTQzXCIseTE6XCItMS4wODRcIix4MjpcIjIuOTk3XCIseTI6XCIxNS4wNjJcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuM1wiLHN0b3BDb2xvcjpcIiMzRTg2M0RcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjVcIixzdG9wQ29sb3I6XCIjNTU5MzRGXCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi44XCIsc3RvcENvbG9yOlwiIzVBQUQ0NVwifSldfSksKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2RcIix4MTpcIi0uMTQ1XCIseTE6XCIxMi40MzFcIix4MjpcIjE0LjI3N1wiLHkyOlwiMS44MThcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuNTdcIixzdG9wQ29sb3I6XCIjM0U4NjNEXCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi43MlwiLHN0b3BDb2xvcjpcIiM2MTk4NTdcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMVwiLHN0b3BDb2xvcjpcIiM3NkFDNjRcIn0pXX0pLCgwLHkuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9mXCIseDE6XCIxLjIyNVwiLHkxOlwiNi45OThcIix4MjpcIjEzLjExNlwiLHkyOlwiNi45OThcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuMTZcIixzdG9wQ29sb3I6XCIjNkJCRjQ3XCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi4zOFwiLHN0b3BDb2xvcjpcIiM3OUI0NjFcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjQ3XCIsc3RvcENvbG9yOlwiIzc1QUM2NFwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuN1wiLHN0b3BDb2xvcjpcIiM2NTlFNUFcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjlcIixzdG9wQ29sb3I6XCIjM0U4NjNEXCJ9KV19KV19KV19KSl9ZnVuY3Rpb24gbnQoZSl7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLGU3KGU4KHt3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIix2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHtjaGlsZHJlbjpbKDAseS5qc3gpKFwibWFza1wiLHtpZDpcIm5vZGVqc19pY29uX21hc2tfYVwiLHN0eWxlOnttYXNrVHlwZTpcImx1bWluYW5jZVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIwXCIseTpcIjBcIix3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNNi42Ny4wODkgMS4yMDUgMy4yNTZhLjY2My42NjMgMCAwIDAtLjMzLjU3M3Y2LjMzOWMwIC4yMzcuMTI2LjQ1NS4zMy41NzRsNS40NjYgMy4xN2EuNjYuNjYgMCAwIDAgLjY2IDBsNS40NjUtMy4xN2EuNjY0LjY2NCAwIDAgMCAuMzI5LS41NzRWMy44MjlhLjY2My42NjMgMCAwIDAtLjMzLS41NzNMNy4zMy4wODlhLjY2My42NjMgMCAwIDAtLjY2MSAwXCIsZmlsbDpcIiNmZmZcIn0pfSksKDAseS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2EpXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTE4LjY0OCAyLjcxNyAzLjI0OC00Ljg2LTQuNjQ2IDExLjMxbDE1LjM5OSA3LjU4IDcuODk2LTE2LjE3NHpcIixmaWxsOlwidXJsKCNub2RlanNfaWNvbl9saW5lYXJfZ3JhZGllbnRfYilcIn0pfSksKDAseS5qc3gpKFwibWFza1wiLHtpZDpcIm5vZGVqc19pY29uX21hc2tfY1wiLHN0eWxlOnttYXNrVHlwZTpcImx1bWluYW5jZVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIxXCIseTpcIjBcIix3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTVcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMS4wMSAxMC41NzFhLjY2LjY2IDAgMCAwIC4xOTUuMTcybDQuNjg4IDIuNzE4Ljc4MS40NTFhLjY2LjY2IDAgMCAwIC41MS4wNjNsNS43NjQtMTAuNTk3YS42NTMuNjUzIDAgMCAwLS4xNTMtLjEyMkw5LjIxNiAxLjE4MSA3LjMyNS4wOWEuNjg4LjY4OCAwIDAgMC0uMTcxLS4wN0wxLjAxIDEwLjU3MnpcIixmaWxsOlwiI2ZmZlwifSl9KSwoMCx5LmpzeCkoXCJnXCIse21hc2s6XCJ1cmwoI25vZGVqc19pY29uX21hc2tfYylcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNLTUuNjQ3IDQuOTYgNS4yMjYgMTkuNzM2IDE5LjYwNiA5LjA3IDguNzM0LTUuNzA3LTUuNjQ3IDQuOTZ6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2QpXCJ9KX0pLCgwLHkuanN4cykoXCJnXCIse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJtYXNrXCIse2lkOlwibm9kZWpzX2ljb25fbWFza19lXCIsc3R5bGU6e21hc2tUeXBlOlwibHVtaW5hbmNlXCJ9LG1hc2tVbml0czpcInVzZXJTcGFjZU9uVXNlXCIseDpcIjFcIix5OlwiMFwiLHdpZHRoOlwiMTNcIixoZWlnaHQ6XCIxNFwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk02LjkzNS4wMDNhLjY2NS42NjUgMCAwIDAtLjI2NC4wODVsLTUuNDUgMy4xNTggNS44NzcgMTAuNzQ3YS42NTMuNjUzIDAgMCAwIC4yMzUtLjA4Mmw1LjQ2NS0zLjE3YS42NjUuNjY1IDAgMCAwIC4zMTktLjQ1Mkw3LjEyNy4wMTRhLjY4NC42ODQgMCAwIDAtLjE4OS0uMDFcIixmaWxsOlwiI2ZmZlwifSl9KSwoMCx5LmpzeCkoXCJnXCIse21hc2s6XCJ1cmwoI25vZGVqc19pY29uX21hc2tfZSlcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMS4yMjIuMDAxdjEzLjk5MmgxMS44OTNWMEgxLjIyMnpcIixmaWxsOlwidXJsKCNub2RlanNfaWNvbl9saW5lYXJfZ3JhZGllbnRfZilcIn0pfSldfSksKDAseS5qc3hzKShcImRlZnNcIix7Y2hpbGRyZW46WygwLHkuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9iXCIseDE6XCIxMC45NDRcIix5MTpcIi0xLjA4NFwiLHgyOlwiMi45OTdcIix5MjpcIjE1LjA2MlwiLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi4zXCIsc3RvcENvbG9yOlwiIzY3Njc2N1wifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuNVwiLHN0b3BDb2xvcjpcIiM4NTg1ODVcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjhcIixzdG9wQ29sb3I6XCIjOTg5QTk4XCJ9KV19KSwoMCx5LmpzeHMpKFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJub2RlanNfaWNvbl9saW5lYXJfZ3JhZGllbnRfZFwiLHgxOlwiLS4xNDVcIix5MTpcIjEyLjQzM1wiLHgyOlwiMTQuMjc3XCIseTI6XCIxLjgxOVwiLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi41N1wiLHN0b3BDb2xvcjpcIiM3NDc0NzRcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjcyXCIsc3RvcENvbG9yOlwiIzcwNzA3MFwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIxXCIsc3RvcENvbG9yOlwiIzkyOTI5MlwifSldfSksKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2ZcIix4MTpcIjEuMjI2XCIseTE6XCI2Ljk5N1wiLHgyOlwiMTMuMTE3XCIseTI6XCI2Ljk5N1wiLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi4xNlwiLHN0b3BDb2xvcjpcIiM4Nzg3ODdcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjM4XCIsc3RvcENvbG9yOlwiI0E5QTlBOVwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuNDdcIixzdG9wQ29sb3I6XCIjQTVBNUE1XCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi43XCIsc3RvcENvbG9yOlwiIzhGOEY4RlwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuOVwiLHN0b3BDb2xvcjpcIiM2MjYyNjJcIn0pXX0pXX0pXX0pKX12YXIgbnI9XCJMZWFybiBtb3JlIGFib3V0IGVuYWJsaW5nIE5vZGUuanMgaW5zcGVjdG9yIGZvciBzZXJ2ZXIgY29kZSB3aXRoIENocm9tZSBEZXZUb29sc1wiO2Z1bmN0aW9uIG5vKGUpe3ZhciBuPWUuZGV2dG9vbHNGcm9udGVuZFVybHx8XCJcIjtyZXR1cm4gbiYmbmU/KDAseS5qc3gpKGUzLHtcImRhdGEtbmV4dGpzLWRhdGEtcnVudGltZS1lcnJvci1jb3B5LWRldnRvb2xzLXVybFwiOiEwLGNsYXNzTmFtZTpcIm5vZGVqcy1pbnNwZWN0b3ItYnV0dG9uXCIsYWN0aW9uTGFiZWw6XCJDb3B5IENocm9tZSBEZXZUb29scyBVUkxcIixzdWNjZXNzTGFiZWw6XCJDb3BpZWRcIixjb250ZW50Om4saWNvbjooMCx5LmpzeCkobm4se2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktdG9vbGJhci1idXR0b24taWNvblwiLHdpZHRoOjE0LGhlaWdodDoxNH0pfSk6KDAseS5qc3gpKFwiYVwiLHt0aXRsZTpucixcImFyaWEtbGFiZWxcIjpucixjbGFzc05hbWU6XCJub2RlanMtaW5zcGVjdG9yLWJ1dHRvblwiLGhyZWY6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9jb25maWd1cmluZy9kZWJ1Z2dpbmcjc2VydmVyLXNpZGUtY29kZVwiLHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixjaGlsZHJlbjooMCx5LmpzeCkobnQse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktdG9vbGJhci1idXR0b24taWNvblwiLHdpZHRoOjE0LGhlaWdodDoxNH0pfSl9ZnVuY3Rpb24gbmEoZSl7dmFyIG49ZS5lcnJvcjtyZXR1cm4oMCx5LmpzeCkoZTMse1wiZGF0YS1uZXh0anMtZGF0YS1ydW50aW1lLWVycm9yLWNvcHktc3RhY2tcIjohMCxjbGFzc05hbWU6XCJjb3B5LXN0YWNrLXRyYWNlLWJ1dHRvblwiLGFjdGlvbkxhYmVsOlwiQ29weSBTdGFjayBUcmFjZVwiLHN1Y2Nlc3NMYWJlbDpcIlN0YWNrIFRyYWNlIENvcGllZFwiLGNvbnRlbnQ6bi5zdGFja3x8XCJcIixkaXNhYmxlZDohbi5zdGFja30pfWZ1bmN0aW9uIG5pKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBubChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIG5zKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9ZnVuY3Rpb24gbmMoZSxuKXtyZXR1cm4gbmwoZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fG5kKGUsbil8fG5zKCl9ZnVuY3Rpb24gbnUoZSl7cmV0dXJuIG5sKGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bmQoZSl8fG5zKCl9ZnVuY3Rpb24gbmQoZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbmkoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbmkoZSxuKX19dmFyIG5mPVwiaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9oeWRyYXRpb24tbWlzbWF0Y2hcIixucD1cImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3JlYWN0LWh5ZHJhdGlvbi1lcnJvclwiLG5oPVsvXkluIEhUTUwsICguKz8pIGNhbm5vdCBiZSBhIGNoaWxkIG9mIDwoLis/KT5cXC4oLiopXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yXFwuKC4qKS8sL15JbiBIVE1MLCAoLis/KSBjYW5ub3QgYmUgYSBkZXNjZW5kYW50IG9mIDwoLis/KT5cXC5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3JcXC4oLiopLywvXkluIEhUTUwsIHRleHQgbm9kZXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCguKz8pPlxcLlxcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvclxcLi8sL15JbiBIVE1MLCB3aGl0ZXNwYWNlIHRleHQgbm9kZXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCguKz8pPlxcLiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIGVhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlXFwuXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yXFwuL107ZnVuY3Rpb24gbmcoZSl7cmV0dXJuIG5oLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIG4udGVzdChlKX0pfXZhciBubT1bXCJodHRwczovL25leHRqcy5vcmdcIixcImh0dHBzOi8vcmVhY3QuZGV2XCJdO2Z1bmN0aW9uIG52KGUpe3JldHVybiBubS5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBlLnN0YXJ0c1dpdGgobil9KX1mdW5jdGlvbiBuYihlKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgbix0LHIsbz0obj1lLHQ9bnYscj1BcnJheS5mcm9tKG4ubWF0Y2hBbGwoL2h0dHBzPzpcXC9cXC9bXlxccy8kLj8jXS5bXlxccyknXCJdKi9naSksZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KSx0P3IuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfSk6cik7aWYoMD09PW8ubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPW9bMF07cmV0dXJuIGE9PT1uZj9ucDphfShlLmVycm9yTWVzc2FnZSk7cmV0dXJuIG4/KDAseS5qc3gpKFwiYVwiLHt0aXRsZTpcIkdvIHRvIHJlbGF0ZWQgZG9jdW1lbnRhdGlvblwiLFwiYXJpYS1sYWJlbFwiOlwiR28gdG8gcmVsYXRlZCBkb2N1bWVudGF0aW9uXCIsY2xhc3NOYW1lOlwiZG9jcy1saW5rLWJ1dHRvblwiLGhyZWY6bix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsY2hpbGRyZW46KDAseS5qc3gpKG55LHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXRvb2xiYXItYnV0dG9uLWljb25cIix3aWR0aDoxNCxoZWlnaHQ6MTR9KX0pOigwLHkuanN4KShcImJ1dHRvblwiLHt0aXRsZTpcIk5vIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBmb3VuZFwiLFwiYXJpYS1sYWJlbFwiOlwiTm8gcmVsYXRlZCBkb2N1bWVudGF0aW9uIGZvdW5kXCIsY2xhc3NOYW1lOlwiZG9jcy1saW5rLWJ1dHRvblwiLGRpc2FibGVkOiEwLGNoaWxkcmVuOigwLHkuanN4KShueSx7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS10b29sYmFyLWJ1dHRvbi1pY29uXCIsd2lkdGg6MTQsaGVpZ2h0OjE0fSl9KX1mdW5jdGlvbiBueShlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMCAuODc1aDQuMzc1QzUuNDQ4Ljg3NSA2LjQwMSAxLjM5IDcgMi4xODdBMy4yNzYgMy4yNzYgMCAwIDEgOS42MjUuODc1SDE0djExLjE1Nkg5LjRjLS41MjIgMC0xLjAyMy4yMDgtMS4zOTIuNTc3bC0uNTQ0LjU0M2gtLjkyOGwtLjU0NC0uNTQzYy0uMzY5LS4zNy0uODctLjU3Ny0xLjM5Mi0uNTc3SDBWLjg3NXptNi4zNDQgMy4yODFhMS45NjkgMS45NjkgMCAwIDAtMS45NjktMS45NjhIMS4zMTJ2OC41M0g0LjZjLjYyMiAwIDEuMjI1LjE3NyAxLjc0NC41MDJWNC4xNTZ6bTEuMzEyIDcuMDY0VjQuMTU2YzAtMS4wODcuODgyLTEuOTY4IDEuOTY5LTEuOTY4aDMuMDYzdjguNTNIOS40Yy0uNjIyIDAtMS4yMjUuMTc3LTEuNzQ0LjUwMnpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gbngoZSl7dmFyIG49ZS5lcnJvcix0PWUuZGVidWdJbmZvLHI9ZS5mZWVkYmFja0J1dHRvbjtyZXR1cm4oMCx5LmpzeHMpKFwic3BhblwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXRvb2xiYXJcIixjaGlsZHJlbjpbciwoMCx5LmpzeCkobmEse2Vycm9yOm59KSwoMCx5LmpzeCkobmIse2Vycm9yTWVzc2FnZTpuLm1lc3NhZ2V9KSwoMCx5LmpzeCkobm8se2RldnRvb2xzRnJvbnRlbmRVcmw6bnVsbD09dD92b2lkIDA6dC5kZXZ0b29sc0Zyb250ZW5kVXJsfSldfSl9ZnVuY3Rpb24gbncoZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2xhc3NOYW1lOlwidGh1bWJzLXVwLWljb25cIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJnXCIse2lkOlwidGh1bWItdXAtMTZcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2lkOlwiVW5pb25cIixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTYuODk1MzEgMi4yMzk1OUM2LjcyOTg0IDIuMTIxNCA2LjUgMi4yMzk2OCA2LjUgMi40NDMwM1Y1LjI0OTg5QzYuNSA2LjIxNjM5IDUuNzE2NSA2Ljk5OTg5IDQuNzUgNi45OTk4OUgyLjVWMTMuNDk5OUgxMi4xODg0QzEyLjc2MiAxMy40OTk5IDEzLjI2MiAxMy4xMDk1IDEzLjQwMTEgMTIuNTUzMUwxNC40MDExIDguNTUzMDZDMTQuNTk4NCA3Ljc2NDEyIDE0LjAwMTcgNi45OTk4OSAxMy4xODg0IDYuOTk5ODlIOS4yNUg4LjVWNi4yNDk4OVYzLjUxNDQ2QzguNSAzLjQzMzcyIDguNDYxMDEgMy4zNTc5NSA4LjM5NTMxIDMuMzExMDJMNi44OTUzMSAyLjIzOTU5Wk01IDIuNDQzMDNDNSAxLjAxOTYzIDYuNjA4OSAwLjE5MTY1NiA3Ljc2NzE3IDEuMDE4OTlMOS4yNjcxNyAyLjA5MDQyQzkuNzI3MDYgMi40MTg5MiAxMCAyLjk0OTI5IDEwIDMuNTE0NDZWNS40OTk4OUgxMy4xODg0QzE0Ljk3NzUgNS40OTk4OSAxNi4yOTAzIDcuMTgxMjEgMTUuODU2MyA4LjkxNjg2TDE0Ljg1NjMgMTIuOTE2OUMxNC41NTAzIDE0LjE0MTEgMTMuNDUwMyAxNC45OTk5IDEyLjE4ODQgMTQuOTk5OUgxLjc1SDFWMTQuMjQ5OVY2LjI0OTg5VjUuNDk5ODlIMS43NUg0Ljc1QzQuODg4MDcgNS40OTk4OSA1IDUuMzg3OTYgNSA1LjI0OTg5VjIuNDQzMDNaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gbmooZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2xhc3NOYW1lOlwidGh1bWJzLWRvd24taWNvblwifSxlKSx0PXQ9e2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01Ljg5NTMxIDEyLjc2MDNDNS43Mjk4NCAxMi44Nzg1IDUuNSAxMi43NjAyIDUuNSAxMi41NTY5VjkuNzVDNS41IDguNzgzNSA0LjcxNjUgOCAzLjc1IDhIMS41VjEuNUgxMS4xODg0QzExLjc2MiAxLjUgMTIuMjYyIDEuODkwMzcgMTIuNDAxMSAyLjQ0NjgzTDEzLjQwMTEgNi40NDY4M0MxMy41OTg0IDcuMjM1NzYgMTMuMDAxNyA4IDEyLjE4ODQgOEg4LjI1SDcuNVY4Ljc1VjExLjQ4NTRDNy41IDExLjU2NjIgNy40NjEwMSAxMS42NDE5IDcuMzk1MzEgMTEuNjg4OUw1Ljg5NTMxIDEyLjc2MDNaTTQgMTIuNTU2OUM0IDEzLjk4MDMgNS42MDg5IDE0LjgwODIgNi43NjcxNyAxMy45ODA5TDguMjY3MTcgMTIuOTA5NUM4LjcyNzA2IDEyLjU4MSA5IDEyLjA1MDYgOSAxMS40ODU0VjkuNUgxMi4xODg0QzEzLjk3NzUgOS41IDE1LjI5MDMgNy44MTg2OCAxNC44NTYzIDYuMDgzMDNMMTMuODU2MyAyLjA4MzAzQzEzLjU1MDMgMC44NTg4MTYgMTIuNDUwMyAwIDExLjE4ODQgMEgwLjc1SDBWMC43NVY4Ljc1VjkuNUgwLjc1SDMuNzVDMy44ODgwNyA5LjUgNCA5LjYxMTkzIDQgOS43NVYxMi41NTY5WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiBuayhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gbkEoZSxuLHQscixvLGEsaSl7dHJ5e3ZhciBsPWVbYV0oaSkscz1sLnZhbHVlfWNhdGNoKGUpe3QoZSk7cmV0dXJufWwuZG9uZT9uKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9ZnVuY3Rpb24gbk8oZSxuLHQpe3JldHVybiBuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6dCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09dCxlfWZ1bmN0aW9uIG5DKGUpe3ZhciBuLHQscj1lLmVycm9yQ29kZSxvPWUuY2xhc3NOYW1lLGE9KG49KDAseC51c2VTdGF0ZSkoe30pLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBuayhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBuayhlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksaT1hWzBdLGw9YVsxXSxzPWlbcl0sYz1wcm9jZXNzLmVudi5fX05FWFRfVEVMRU1FVFJZX0RJU0FCTEVELHU9KDAseC51c2VDYWxsYmFjaykoZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuKG49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG8sYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZvWzBdKXRocm93IG9bMV07cmV0dXJuIG9bMV19LHRyeXM6W10sb3BzOltdfSxpPU9iamVjdC5jcmVhdGUoKFwiZnVuY3Rpb25cIj09dHlwZW9mIEl0ZXJhdG9yP0l0ZXJhdG9yOk9iamVjdCkucHJvdG90eXBlKTtyZXR1cm4gaS5uZXh0PWwoMCksaS50aHJvdz1sKDEpLGkucmV0dXJuPWwoMiksXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYoaVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxpO2Z1bmN0aW9uIGwobCl7cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBjPVtsLHNdO2lmKHQpdGhyb3cgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO2kmJihpPTAsY1swXSYmKGE9MCkpLGE7KXRyeXtpZih0PTEsciYmKG89MiZjWzBdP3IucmV0dXJuOmNbMF0/ci50aHJvd3x8KChvPXIucmV0dXJuKSYmby5jYWxsKHIpLDApOnIubmV4dCkmJiEobz1vLmNhbGwocixjWzFdKSkuZG9uZSlyZXR1cm4gbztzd2l0Y2gocj0wLG8mJihjPVsyJmNbMF0sby52YWx1ZV0pLGNbMF0pe2Nhc2UgMDpjYXNlIDE6bz1jO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpjWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKysscj1jWzFdLGM9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobz0obz1hLnRyeXMpLmxlbmd0aD4wJiZvW28ubGVuZ3RoLTFdKSYmKDY9PT1jWzBdfHwyPT09Y1swXSkpe2E9MDtjb250aW51ZX1pZigzPT09Y1swXSYmKCFvfHxjWzFdPm9bMF0mJmNbMV08b1szXSkpe2EubGFiZWw9Y1sxXTticmVha31pZig2PT09Y1swXSYmYS5sYWJlbDxvWzFdKXthLmxhYmVsPW9bMV0sbz1jO2JyZWFrfWlmKG8mJmEubGFiZWw8b1syXSl7YS5sYWJlbD1vWzJdLGEub3BzLnB1c2goYyk7YnJlYWt9b1syXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfWM9bi5jYWxsKGUsYSl9Y2F0Y2goZSl7Yz1bNixlXSxyPTB9ZmluYWxseXt0PW89MH1pZig1JmNbMF0pdGhyb3cgY1sxXTtyZXR1cm57dmFsdWU6Y1swXT9jWzFdOnZvaWQgMCxkb25lOiEwfX19fSh0aGlzLGZ1bmN0aW9uKG4pe3N3aXRjaChuLmxhYmVsKXtjYXNlIDA6bChmdW5jdGlvbihuKXt2YXIgdCxvO3JldHVybiB0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXtuTyhlLG4sdFtuXSl9KX1yZXR1cm4gZX0oe30sbiksbz1udWxsIT0obz1uTyh7fSxyLGUpKT9vOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobykpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobykpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sZSkpfSksdH0pLG4ubGFiZWw9MTtjYXNlIDE6cmV0dXJuIG4udHJ5cy5wdXNoKFsxLDMsLDRdKSxbNCxmZXRjaChcIlwiLmNvbmNhdChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIfHxcIlwiLFwiL19fbmV4dGpzX2Vycm9yX2ZlZWRiYWNrP1wiKS5jb25jYXQobmV3IFVSTFNlYXJjaFBhcmFtcyh7ZXJyb3JDb2RlOnIsd2FzSGVscGZ1bDplLnRvU3RyaW5nKCl9KSkpXTtjYXNlIDI6cmV0dXJuIG4uc2VudCgpLm9rfHxjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHJlY29yZCBmZWVkYmFjayBvbiB0aGUgc2VydmVyLlwiKSxbMyw0XTtjYXNlIDM6cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcmVjb3JkIGZlZWRiYWNrOlwiLG4uc2VudCgpKSxbMyw0XTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSxmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7dmFyIGE9bi5hcHBseShlLHQpO2Z1bmN0aW9uIGkoZSl7bkEoYSxyLG8saSxsLFwibmV4dFwiLGUpfWZ1bmN0aW9uIGwoZSl7bkEoYSxyLG8saSxsLFwidGhyb3dcIixlKX1pKHZvaWQgMCl9KX0pKCl9LFtyXSk7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTooMCxlSi5jeCkoXCJlcnJvci1mZWVkYmFja1wiLG8pLHJvbGU6XCJyZWdpb25cIixcImFyaWEtbGFiZWxcIjpcIkVycm9yIGZlZWRiYWNrXCIsY2hpbGRyZW46dm9pZCAwIT09cz8oMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcImVycm9yLWZlZWRiYWNrLXRoYW5rc1wiLHJvbGU6XCJzdGF0dXNcIixcImFyaWEtbGl2ZVwiOlwicG9saXRlXCIsY2hpbGRyZW46XCJUaGFua3MgZm9yIHlvdXIgZmVlZGJhY2shXCJ9KTooMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJwXCIse2NoaWxkcmVuOigwLHkuanN4KShcImFcIix7aHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy90ZWxlbWV0cnkjZXJyb3ItZmVlZGJhY2tcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsdGFyZ2V0OlwiX2JsYW5rXCIsY2hpbGRyZW46XCJXYXMgdGhpcyBoZWxwZnVsP1wifSl9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWRpc2FibGVkXCI6Yz9cInRydWVcIjp2b2lkIDAsXCJhcmlhLWxhYmVsXCI6XCJNYXJrIGFzIGhlbHBmdWxcIixvbkNsaWNrOmM/dm9pZCAwOmZ1bmN0aW9uKCl7cmV0dXJuIHUoITApfSxjbGFzc05hbWU6KDAsZUouY3gpKFwiZmVlZGJhY2stYnV0dG9uXCIsITA9PT1zJiZcInZvdGVkXCIpLHRpdGxlOmM/XCJGZWVkYmFjayBkaXNhYmxlZCBkdWUgdG8gc2V0dGluZyBORVhUX1RFTEVNRVRSWV9ESVNBQkxFRFwiOnZvaWQgMCx0eXBlOlwiYnV0dG9uXCIsY2hpbGRyZW46KDAseS5qc3gpKG53LHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9KX0pLCgwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGlzYWJsZWRcIjpjP1widHJ1ZVwiOnZvaWQgMCxcImFyaWEtbGFiZWxcIjpcIk1hcmsgYXMgbm90IGhlbHBmdWxcIixvbkNsaWNrOmM/dm9pZCAwOmZ1bmN0aW9uKCl7cmV0dXJuIHUoITEpfSxjbGFzc05hbWU6KDAsZUouY3gpKFwiZmVlZGJhY2stYnV0dG9uXCIsITE9PT1zJiZcInZvdGVkXCIpLHRpdGxlOmM/XCJGZWVkYmFjayBkaXNhYmxlZCBkdWUgdG8gc2V0dGluZyBORVhUX1RFTEVNRVRSWV9ESVNBQkxFRFwiOnZvaWQgMCx0eXBlOlwiYnV0dG9uXCIsY2hpbGRyZW46KDAseS5qc3gpKG5qLHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsc3R5bGU6e3RyYW5zbGF0ZTpcIjFweCAxcHhcIn19KX0pXX0pfSl9ZnVuY3Rpb24gblMoZSl7dmFyIG49ZS5lcnJvckNvZGU7cmV0dXJuKDAseS5qc3gpKFwiZm9vdGVyXCIse1wiZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1mb290ZXJcIjohMCxjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LWZvb3RlclwiLGNoaWxkcmVuOm4/KDAseS5qc3gpKG5DLHtjbGFzc05hbWU6XCJlcnJvci1mZWVkYmFja1wiLGVycm9yQ29kZTpufSk6bnVsbH0pfXZhciBuRT1cIlxcbiAgLmVycm9yLW92ZXJsYXktZm9vdGVyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcblxcbiAgICBnYXA6IDhweDtcXG4gICAgcGFkZGluZzogMTJweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgfVxcblxcbiAgLmVycm9yLWZlZWRiYWNrIHtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuXFxuICAgIHAge1xcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgICBtYXJnaW46IDA7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFwiLmNvbmNhdChcIlxcbiAgLmVycm9yLWZlZWRiYWNrIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICB9XFxuXFxuICAuZXJyb3ItZmVlZGJhY2stdGhhbmtzIHtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZy1yaWdodDogNHB4OyAvKiBUbyBtYXRjaCB0aGUgNHB4IGlubmVyIHBhZGRpbmcgb2YgdGhlIHRodW1icyB1cCBhbmQgZG93biBpY29ucyAqL1xcbiAgfVxcblxcbiAgLmZlZWRiYWNrLWJ1dHRvbiB7XFxuICAgIGJhY2tncm91bmQ6IG5vbmU7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZCk7XFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgIH1cXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0xMDApO1xcbiAgICB9XFxuXFxuICAgICY6YWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTIwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5mZWVkYmFjay1idXR0b25bYXJpYS1kaXNhYmxlZD0ndHJ1ZSddIHtcXG4gICAgb3BhY2l0eTogMC43O1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgfVxcblxcbiAgLmZlZWRiYWNrLWJ1dHRvbi52b3RlZCB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMjAwKTtcXG4gIH1cXG5cXG4gIC50aHVtYnMtdXAtaWNvbixcXG4gIC50aHVtYnMtZG93bi1pY29uIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMTYpO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgfVxcblwiLFwiXFxuXCIpO2Z1bmN0aW9uIG5fKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBuUChlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbl8oZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbl8oZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbnooZSl7dmFyIG49ZS5lcnJvck1lc3NhZ2UsdD1uUCgoMCx4LnVzZVN0YXRlKSghMSksMikscj10WzBdLG89dFsxXSxhPW5QKCgwLHgudXNlU3RhdGUpKCExKSwyKSxpPWFbMF0sbD1hWzFdLHM9KDAseC51c2VSZWYpKG51bGwpO3JldHVybigwLHgudXNlTGF5b3V0RWZmZWN0KShmdW5jdGlvbigpe3MuY3VycmVudCYmbChzLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0PjIwMCl9LFtuXSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfd3JhcHBlclwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJwXCIse3JlZjpzLGlkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2Rlc2NcIixjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzYyBcIi5jb25jYXQoaSYmIXI/XCJ0cnVuY2F0ZWRcIjpcIlwiKSxjaGlsZHJlbjpufSksaSYmIXImJigwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZ3JhZGllbnRfb3ZlcmxheVwifSksKDAseS5qc3gpKFwiYnV0dG9uXCIse29uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbyghMCl9LGNsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19leHBhbmRfYnV0dG9uXCIsXCJhcmlhLWV4cGFuZGVkXCI6cixcImFyaWEtY29udHJvbHNcIjpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19kZXNjXCIsY2hpbGRyZW46XCJTaG93IE1vcmVcIn0pXX0pXX0pfWZ1bmN0aW9uIG5MKGUpe3ZhciBuPWUuZXJyb3JUeXBlO3JldHVybigwLHkuanN4KShcInNwYW5cIix7aWQ6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfbGFiZWxcIixjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfbGFiZWxcIixjaGlsZHJlbjpufSl9ZnVuY3Rpb24gblQoZSl7dmFyIG49ZS50aXRsZSx0PWUuY2xhc3NOYW1lO3JldHVybigwLHkuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJhcmlhLWxhYmVsXCI6bixjbGFzc05hbWU6dCxjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOS4yNDk5NiAxMi4wNjA4TDguNzE5NjMgMTEuNTMwNEw1Ljg5NjQxIDguNzA3MjJDNS41MDU4OCA4LjMxNjcgNS41MDU4OCA3LjY4MzUzIDUuODk2NDEgNy4yOTMwMUw4LjcxOTYzIDQuNDY5NzhMOS4yNDk5NiAzLjkzOTQ1TDEwLjMxMDYgNS4wMDAxMUw5Ljc4MDI5IDUuNTMwNDRMNy4zMTA2MiA4LjAwMDExTDkuNzgwMjkgMTAuNDY5OEwxMC4zMTA2IDExLjAwMDFMOS4yNDk5NiAxMi4wNjA4WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gblIoZSl7dmFyIG49ZS50aXRsZSx0PWUuY2xhc3NOYW1lO3JldHVybigwLHkuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2xhc3NOYW1lOnQsXCJhcmlhLWxhYmVsXCI6bixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNi43NTAxMSAzLjkzOTQ1TDcuMjgwNDQgNC40Njk3OEwxMC4xMDM3IDcuMjkzMDFDMTAuNDk0MiA3LjY4MzUzIDEwLjQ5NDIgOC4zMTY3IDEwLjEwMzcgOC43MDcyMkw3LjI4MDQ0IDExLjUzMDRMNi43NTAxMSAxMi4wNjA4TDUuNjg5NDUgMTEuMDAwMUw2LjIxOTc4IDEwLjQ2OThMOC42ODk0NSA4LjAwMDExTDYuMjE5NzggNS41MzA0NEw1LjY4OTQ1IDUuMDAwMTFMNi43NTAxMSAzLjkzOTQ1WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gbk4oZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG5EKGUpe3ZhciBuLHQscj1lLnJ1bnRpbWVFcnJvcnMsbz1lLmFjdGl2ZUlkeCxhPWUub25BY3RpdmVJbmRleENoYW5nZSxpPSgwLHgudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKCl7cmV0dXJuKDAseC5zdGFydFRyYW5zaXRpb24pKGZ1bmN0aW9uKCl7bz4wJiZhKE1hdGgubWF4KDAsby0xKSl9KX0sW28sYV0pLGw9KDAseC51c2VDYWxsYmFjaykoZnVuY3Rpb24oKXtyZXR1cm4oMCx4LnN0YXJ0VHJhbnNpdGlvbikoZnVuY3Rpb24oKXtvPHIubGVuZ3RoLTEmJmEoTWF0aC5tYXgoMCxNYXRoLm1pbihyLmxlbmd0aC0xLG8rMSkpKX0pfSxbbyxyLmxlbmd0aCxhXSkscz0oMCx4LnVzZVJlZikobnVsbCksYz0oMCx4LnVzZVJlZikobnVsbCksdT0obj0oMCx4LnVzZVN0YXRlKShudWxsKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbk4oZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbk4oZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGQ9dVswXSxmPXVbMV0scD0oMCx4LnVzZUNhbGxiYWNrKShmdW5jdGlvbihlKXtmKGUpfSxbXSk7cmV0dXJuKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7XCJBcnJvd0xlZnRcIj09PWUua2V5PyhlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxpJiZpKCkpOlwiQXJyb3dSaWdodFwiPT09ZS5rZXkmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxsJiZsKCkpfTtpZihudWxsIT1kKXt2YXIgbj1kLmdldFJvb3ROb2RlKCksdD1zZWxmLmRvY3VtZW50O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSksbiE9PXQmJnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSxmdW5jdGlvbigpe24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSxuIT09dCYmdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpfX19LFtkLGwsaV0pLCgwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe2lmKG51bGwhPWQpe3ZhciBlLG4sdD1kLmdldFJvb3ROb2RlKCk7aWYoZT10LG51bGwhPShuPVNoYWRvd1Jvb3QpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5oYXNJbnN0YW5jZV0/ISFuW1N5bWJvbC5oYXNJbnN0YW5jZV0oZSk6ZSBpbnN0YW5jZW9mIG4pe3ZhciBhPXQuYWN0aXZlRWxlbWVudDswPT09bz9zLmN1cnJlbnQmJmE9PT1zLmN1cnJlbnQmJnMuY3VycmVudC5ibHVyKCk6bz09PXIubGVuZ3RoLTEmJmMuY3VycmVudCYmYT09PWMuY3VycmVudCYmYy5jdXJyZW50LmJsdXIoKX19fSxbZCxvLHIubGVuZ3RoXSksKDAseS5qc3hzKShcIm5hdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXBhZ2luYXRpb24gZGlhbG9nLWV4Y2x1ZGUtY2xvc2luZy1mcm9tLW91dHNpZGUtY2xpY2tcIixyZWY6cCxjaGlsZHJlbjpbKDAseS5qc3gpKFwiYnV0dG9uXCIse3JlZjpzLHR5cGU6XCJidXR0b25cIixkaXNhYmxlZDowPT09byxcImFyaWEtZGlzYWJsZWRcIjowPT09byxvbkNsaWNrOmksXCJkYXRhLW5leHRqcy1kaWFsb2ctZXJyb3ItcHJldmlvdXNcIjohMCxjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXBhZ2luYXRpb24tYnV0dG9uXCIsY2hpbGRyZW46KDAseS5qc3gpKG5ULHt0aXRsZTpcInByZXZpb3VzXCIsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uLWJ1dHRvbi1pY29uXCJ9KX0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uLWNvdW50XCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtZGlhbG9nLWVycm9yLWluZGV4XCI6byxjaGlsZHJlbjpbbysxLFwiL1wiXX0pLCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyLXRvdGFsLWNvdW50XCI6ITAsY2hpbGRyZW46ci5sZW5ndGh8fDF9KV19KSwoMCx5LmpzeCkoXCJidXR0b25cIix7cmVmOmMsdHlwZTpcImJ1dHRvblwiLGRpc2FibGVkOm8+PXIubGVuZ3RoLTEsXCJhcmlhLWRpc2FibGVkXCI6bz49ci5sZW5ndGgtMSxvbkNsaWNrOmwsXCJkYXRhLW5leHRqcy1kaWFsb2ctZXJyb3ItbmV4dFwiOiEwLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1idXR0b25cIixjaGlsZHJlbjooMCx5LmpzeCkoblIse3RpdGxlOlwibmV4dFwiLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1idXR0b24taWNvblwifSl9KV19KX1mdW5jdGlvbiBuQihlKXt2YXIgbj1lLmluc3RhbGxlZCx0PWUuc3RhbGVuZXNzLHI9ZS5leHBlY3RlZCxvPVwiXCIsYT1cIlwiLGk9XCJcIixsPVwiTmV4dC5qcyBcIi5jb25jYXQobik7c3dpdGNoKHQpe2Nhc2VcIm5ld2VyLXRoYW4tbnBtXCI6Y2FzZVwiZnJlc2hcIjpvPWwsYT1cIkxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiBpcyBkZXRlY3RlZCAoXCIuY29uY2F0KG4sXCIpLlwiKSxpPVwiZnJlc2hcIjticmVhaztjYXNlXCJzdGFsZS1wYXRjaFwiOmNhc2VcInN0YWxlLW1pbm9yXCI6bz1cIlwiLmNvbmNhdChsLFwiIChzdGFsZSlcIiksYT1cIlRoZXJlIGlzIGEgbmV3ZXIgdmVyc2lvbiAoXCIuY29uY2F0KHIsXCIpIGF2YWlsYWJsZSwgdXBncmFkZSByZWNvbW1lbmRlZCEgXCIpLGk9XCJzdGFsZVwiO2JyZWFrO2Nhc2VcInN0YWxlLW1ham9yXCI6bz1cIlwiLmNvbmNhdChsLFwiIChvdXRkYXRlZClcIiksYT1cIkFuIG91dGRhdGVkIHZlcnNpb24gZGV0ZWN0ZWQgKGxhdGVzdCBpcyBcIi5jb25jYXQocixcIiksIHVwZ3JhZGUgaXMgaGlnaGx5IHJlY29tbWVuZGVkIVwiKSxpPVwib3V0ZGF0ZWRcIjticmVhaztjYXNlXCJzdGFsZS1wcmVyZWxlYXNlXCI6bz1cIlwiLmNvbmNhdChsLFwiIChzdGFsZSlcIiksYT1cIlRoZXJlIGlzIGEgbmV3ZXIgY2FuYXJ5IHZlcnNpb24gKFwiLmNvbmNhdChyLFwiKSBhdmFpbGFibGUsIHBsZWFzZSB1cGdyYWRlISBcIiksaT1cInN0YWxlXCI7YnJlYWs7Y2FzZVwidW5rbm93blwiOm89XCJcIi5jb25jYXQobCxcIiAodW5rbm93bilcIiksYT1cIk5vIE5leHQuanMgdmVyc2lvbiBkYXRhIHdhcyBmb3VuZC5cIixpPVwidW5rbm93blwifXJldHVybnt0ZXh0Om8saW5kaWNhdG9yQ2xhc3M6aSx0aXRsZTphfX1mdW5jdGlvbiBuTShlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJjaXJjbGVcIix7Y3g6XCI3XCIsY3k6XCI3XCIscjpcIjUuNVwiLHN0cm9rZVdpZHRoOlwiM1wifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIG5JKGUpe3ZhciBuPWUudmVyc2lvbkluZm8sdD1lLmJ1bmRsZXJOYW1lLHI9bi5zdGFsZW5lc3Msbz1uQihuKSxhPW8udGV4dCxpPW8uaW5kaWNhdG9yQ2xhc3MsbD1vLnRpdGxlLHM9XCJUdXJib3BhY2tcIj09PXQ7cmV0dXJuIHIuc3RhcnRzV2l0aChcInN0YWxlXCIpPygwLHkuanN4cykoXCJhXCIse2NsYXNzTmFtZTpcIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMgZGlhbG9nLWV4Y2x1ZGUtY2xvc2luZy1mcm9tLW91dHNpZGUtY2xpY2tcIix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsaHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3ZlcnNpb24tc3RhbGVuZXNzXCIsY2hpbGRyZW46WygwLHkuanN4KShuTSx7Y2xhc3NOYW1lOigwLGVKLmN4KShcInZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvclwiLGkpfSksKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLXZlcnNpb24tY2hlY2tlclwiOiEwLHRpdGxlOmwsY2hpbGRyZW46YX0pLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOigwLGVKLmN4KShzJiZcInR1cmJvcGFjay10ZXh0XCIpLGNoaWxkcmVuOnR9KV19KTooMCx5LmpzeHMpKFwic3BhblwiLHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIGRpYWxvZy1leGNsdWRlLWNsb3NpbmctZnJvbS1vdXRzaWRlLWNsaWNrXCIsY2hpbGRyZW46WygwLHkuanN4KShuTSx7Y2xhc3NOYW1lOigwLGVKLmN4KShcInZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvclwiLGkpfSksKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLXZlcnNpb24tY2hlY2tlclwiOiEwLHRpdGxlOmwsY2hpbGRyZW46YX0pLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOigwLGVKLmN4KShzJiZcInR1cmJvcGFjay10ZXh0XCIpLGNoaWxkcmVuOnR9KV19KX1mdW5jdGlvbiBuSChlKXt2YXIgbj1lLnJ1bnRpbWVFcnJvcnMsdD1lLmFjdGl2ZUlkeCxyPWUuc2V0QWN0aXZlSW5kZXgsbz1lLnZlcnNpb25JbmZvLGE9cHJvY2Vzcy5lbnYuX19ORVhUX0JVTkRMRVJ8fFwiV2VicGFja1wiO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1lcnJvci1vdmVybGF5LW5hdlwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkobkYse3NpZGU6XCJsZWZ0XCIsY2hpbGRyZW46KDAseS5qc3gpKG5ELHtydW50aW1lRXJyb3JzOm51bGwhPW4/bjpbXSxhY3RpdmVJZHg6bnVsbCE9dD90OjAsb25BY3RpdmVJbmRleENoYW5nZTpudWxsIT1yP3I6ZnVuY3Rpb24oKXt9fSl9KSxvJiYoMCx5LmpzeCkobkYse3NpZGU6XCJyaWdodFwiLGNoaWxkcmVuOigwLHkuanN4KShuSSx7dmVyc2lvbkluZm86byxidW5kbGVyTmFtZTphfSl9KV19KX1mdW5jdGlvbiBuRihlKXt2YXIgbj1lLmNoaWxkcmVuLHQ9ZS5zaWRlO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1ub3RjaFwiLFwiZGF0YS1zaWRlXCI6dm9pZCAwPT09dD9cImxlZnRcIjp0LGNoaWxkcmVuOltuLCgwLHkuanN4KShuVSx7fSldfSl9ZnVuY3Rpb24gblUoKXtyZXR1cm4oMCx5LmpzeHMpKFwic3ZnXCIse3dpZHRoOlwiNjBcIixoZWlnaHQ6XCI0MlwiLHZpZXdCb3g6XCIwIDAgNjAgNDJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LW5vdGNoLXRhaWxcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwibWFza1wiLHtpZDpcImVycm9yX292ZXJsYXlfbmF2X21hc2swXzI2NjdfMTQ2ODdcIixzdHlsZTp7bWFza1R5cGU6XCJhbHBoYVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIwXCIseTpcIi0xXCIsd2lkdGg6XCI2MFwiLGhlaWdodDpcIjQzXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJtYXNrXCIse2lkOlwiZXJyb3Jfb3ZlcmxheV9uYXZfcGF0aF8xX291dHNpZGVfMV8yNjY3XzE0Njg3XCIsbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiMFwiLHk6XCItMVwiLHdpZHRoOlwiNjBcIixoZWlnaHQ6XCI0M1wiLGZpbGw6XCJibGFja1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJyZWN0XCIse2ZpbGw6XCJ3aGl0ZVwiLHk6XCItMVwiLHdpZHRoOlwiNjBcIixoZWlnaHQ6XCI0M1wifSksKDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEgMEw4LjA3ODMgMEMxNS43NzIgMCAyMi43ODM2IDQuNDEzMjQgMjYuMTExIDExLjM1MDFMMzQuODg4OSAyOS42NDk4QzM4LjIxNjQgMzYuNTg2OCA0NS4yMjggNDEgNTIuOTIxNyA0MUg2MEgxTDEgMFpcIn0pXX0pLCgwLHkuanN4KShcInBhdGhcIix7ZDpcIk0xIDBMOC4wNzgzIDBDMTUuNzcyIDAgMjIuNzgzNiA0LjQxMzI0IDI2LjExMSAxMS4zNTAxTDM0Ljg4ODkgMjkuNjQ5OEMzOC4yMTY0IDM2LjU4NjggNDUuMjI4IDQxIDUyLjkyMTcgNDFINjBIMUwxIDBaXCIsZmlsbDpcIndoaXRlXCJ9KSwoMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMSAwVi0xSDBWMEwxIDBaTTEgNDFIMFY0MkgxVjQxWk0zNC44ODg5IDI5LjY0OThMMzMuOTg3MyAzMC4wODIzTDM0Ljg4ODkgMjkuNjQ5OFpNMjYuMTExIDExLjM1MDFMMjcuMDEyNyAxMC45MTc3TDI2LjExMSAxMS4zNTAxWk0xIDFIOC4wNzgzVi0xSDFWMVpNNjAgNDBIMVY0Mkg2MFY0MFpNMiA0MVYwTDAgMEwwIDQxSDJaTTI1LjIwOTQgMTEuNzgyNkwzMy45ODczIDMwLjA4MjNMMzUuNzkwNiAyOS4yMTc0TDI3LjAxMjcgMTAuOTE3N0wyNS4yMDk0IDExLjc4MjZaTTUyLjkyMTcgNDJINjBWNDBINTIuOTIxN1Y0MlpNMzMuOTg3MyAzMC4wODIzQzM3LjQ4MTEgMzcuMzY2MSA0NC44NDMzIDQyIDUyLjkyMTcgNDJWNDBDNDUuNjEyNyA0MCAzOC45NTE3IDM1LjgwNzQgMzUuNzkwNiAyOS4yMTc0TDMzLjk4NzMgMzAuMDgyM1pNOC4wNzgzIDFDMTUuMzg3MyAxIDIyLjA0ODMgNS4xOTI1NyAyNS4yMDk0IDExLjc4MjZMMjcuMDEyNyAxMC45MTc3QzIzLjUxODggMy42MzM5IDE2LjE1NjcgLTEgOC4wNzgzIC0xVjFaXCIsZmlsbDpcImJsYWNrXCIsbWFzazpcInVybCgjZXJyb3Jfb3ZlcmxheV9uYXZfcGF0aF8xX291dHNpZGVfMV8yNjY3XzE0Njg3KVwifSldfSksKDAseS5qc3hzKShcImdcIix7bWFzazpcInVybCgjZXJyb3Jfb3ZlcmxheV9uYXZfbWFzazBfMjY2N18xNDY4NylcIixjaGlsZHJlbjpbKDAseS5qc3hzKShcIm1hc2tcIix7aWQ6XCJlcnJvcl9vdmVybGF5X25hdl9wYXRoXzNfb3V0c2lkZV8yXzI2NjdfMTQ2ODdcIixtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCItMVwiLHk6XCIwLjAyNDQxNDFcIix3aWR0aDpcIjYwXCIsaGVpZ2h0OlwiNDNcIixmaWxsOlwiYmxhY2tcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicmVjdFwiLHtmaWxsOlwid2hpdGVcIix4OlwiLTFcIix5OlwiMC4wMjQ0MTQxXCIsd2lkdGg6XCI2MFwiLGhlaWdodDpcIjQzXCJ9KSwoMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMCAxLjAyNDQxSDcuMDc4M0MxNC43NzIgMS4wMjQ0MSAyMS43ODM2IDUuNDM3NjUgMjUuMTExIDEyLjM3NDZMMzMuODg4OSAzMC42NzQzQzM3LjIxNjQgMzcuNjExMiA0NC4yMjggNDIuMDI0NCA1MS45MjE3IDQyLjAyNDRINTlIMEwwIDEuMDI0NDFaXCJ9KV19KSwoMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMCAxLjAyNDQxSDcuMDc4M0MxNC43NzIgMS4wMjQ0MSAyMS43ODM2IDUuNDM3NjUgMjUuMTExIDEyLjM3NDZMMzMuODg4OSAzMC42NzQzQzM3LjIxNjQgMzcuNjExMiA0NC4yMjggNDIuMDI0NCA1MS45MjE3IDQyLjAyNDRINTlIMEwwIDEuMDI0NDFaXCIsZmlsbDpcInZhcigtLWJhY2tncm91bmQtY29sb3IpXCJ9KSwoMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMCAxLjAyNDQxTDAgMC4wMjQ0MTQxSC0xVjEuMDI0NDFIMFpNMCA0Mi4wMjQ0SC0xVjQzLjAyNDRIMEwwIDQyLjAyNDRaTTMzLjg4ODkgMzAuNjc0M0wzMi45ODczIDMxLjEwNjhMMzMuODg4OSAzMC42NzQzWk0yNS4xMTEgMTIuMzc0NkwyNi4wMTI3IDExLjk0MjFMMjUuMTExIDEyLjM3NDZaTTAgMi4wMjQ0MUg3LjA3ODNWMC4wMjQ0MTQxSDBMMCAyLjAyNDQxWk01OSA0MS4wMjQ0SDBMMCA0My4wMjQ0SDU5VjQxLjAyNDRaTTEgNDIuMDI0NEwxIDEuMDI0NDFILTFMLTEgNDIuMDI0NEgxWk0yNC4yMDk0IDEyLjgwNzFMMzIuOTg3MyAzMS4xMDY4TDM0Ljc5MDYgMzAuMjQxOEwyNi4wMTI3IDExLjk0MjFMMjQuMjA5NCAxMi44MDcxWk01MS45MjE3IDQzLjAyNDRINTlWNDEuMDI0NEg1MS45MjE3VjQzLjAyNDRaTTMyLjk4NzMgMzEuMTA2OEMzNi40ODExIDM4LjM5MDUgNDMuODQzMyA0My4wMjQ0IDUxLjkyMTcgNDMuMDI0NFY0MS4wMjQ0QzQ0LjYxMjcgNDEuMDI0NCAzNy45NTE3IDM2LjgzMTggMzQuNzkwNiAzMC4yNDE4TDMyLjk4NzMgMzEuMTA2OFpNNy4wNzgzIDIuMDI0NDFDMTQuMzg3MyAyLjAyNDQxIDIxLjA0ODMgNi4yMTY5OSAyNC4yMDk0IDEyLjgwNzFMMjYuMDEyNyAxMS45NDIxQzIyLjUxODggNC42NTgzMSAxNS4xNTY3IDAuMDI0NDE0MSA3LjA3ODMgMC4wMjQ0MTQxVjIuMDI0NDFaXCIsZmlsbDpcInZhcigtLXN0cm9rZS1jb2xvcilcIixtYXNrOlwidXJsKCNlcnJvcl9vdmVybGF5X25hdl9wYXRoXzNfb3V0c2lkZV8yXzI2NjdfMTQ2ODcpXCJ9KV19KV19KX1mdW5jdGlvbiBuVihlKXt2YXIgbix0LHI9ZS5jaGlsZHJlbixvPWUub25DbG9zZSxhPWUuZm9vdGVyLGk9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcImNoaWxkcmVuXCIsXCJvbkNsb3NlXCIsXCJmb290ZXJcIl0pO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1kaWFsb2ctY29udGFpbmVyXCIsY2hpbGRyZW46WygwLHkuanN4KShlWiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImFyaWEtbGFiZWxsZWRieVwiOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzY1wiLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktZGlhbG9nLXNjcm9sbFwiLG9uQ2xvc2U6b30saSksdD10PXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKSxhXX0pfWZ1bmN0aW9uIG5xKGUpe3ZhciBuPWUuY2hpbGRyZW47cmV0dXJuKDAseS5qc3gpKGVLLHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXJcIixjaGlsZHJlbjpufSl9ZnVuY3Rpb24gblcoZSl7dmFyIG49ZS5jaGlsZHJlbjtyZXR1cm4oMCx5LmpzeCkoZVkse2NsYXNzTmFtZTpcIm5leHRqcy1jb250YWluZXItZXJyb3JzLWJvZHlcIixjaGlsZHJlbjpufSl9dmFyIG4kPTAsblo9ZnVuY3Rpb24oZSl7dmFyIHIsbyxhPWUuY2xhc3NOYW1lLGk9ZS5jaGlsZHJlbixsPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjbGFzc05hbWVcIixcImNoaWxkcmVuXCJdKTtyZXR1cm4geC51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe2lmKCEobiQrKz4wKSl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2U+MCYmKG49ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQsZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9XCJcIi5jb25jYXQoZSxcInB4XCIpKSx0PWRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3csZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwifX0pLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpezAhPT1uJCYmMD09LS1uJCYmKHZvaWQgMCE9PW4mJihkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD1uLG49dm9pZCAwKSx2b2lkIDAhPT10JiYoZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz10LHQ9dm9pZCAwKSl9KX19LFtdKSwoMCx5LmpzeCkoXCJkaXZcIiwocj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImRhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XCI6ITAsY2xhc3NOYW1lOmF9LGwpLG89bz17Y2hpbGRyZW46aX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChvKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobyxlKSl9KSxyKSl9O2Z1bmN0aW9uIG5ZKGUpe3ZhciBuLHQscj1lLmNoaWxkcmVuLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcImNoaWxkcmVuXCJdKTtyZXR1cm4oMCx5LmpzeCkoblosKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7fSxvKSx0PXQ9e2NoaWxkcmVuOnJ9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIG5YKGUpe3ZhciBuPU1hdGgubWluKGUuZXJyb3JDb3VudC1lLmFjdGl2ZUlkeC0xLDIpO3JldHVybigwLHkuanN4KShcImRpdlwiLHtcImFyaWEtaGlkZGVuXCI6ITAsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2tcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLXN0YWNrXCIsXCJkYXRhLXN0YWNrLWNvdW50XCI6bixjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyIGVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTFcIixjaGlsZHJlbjpcIjFcIn0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllciBlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllci0yXCIsY2hpbGRyZW46XCIyXCJ9KV19KX0pfWZ1bmN0aW9uIG5LKGUpe3ZhciBuPWUuZW52aXJvbm1lbnROYW1lO3JldHVybigwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1lbnZpcm9ubWVudC1uYW1lLWxhYmVsXCI6ITAsY2hpbGRyZW46bn0pfXZhciBuUT1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL3V0aWxzLnRzXCIpLG5HPSgwLHguZm9yd2FyZFJlZikoZnVuY3Rpb24oZSxuKXt2YXIgdD1lLnN0b3Ascj1lLmJsdXIsbz1lLnNpZGUsYT1lLnN0eWxlLGk9ZS5oZWlnaHQ7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIse3JlZjpuLFwiYXJpYS1oaWRkZW5cIjohMCxcImRhdGEtbmV4dGpzLXNjcm9sbC1mYWRlclwiOiEwLGNsYXNzTmFtZTpcIm5leHRqcy1zY3JvbGwtZmFkZXJcIixcImRhdGEtc2lkZVwiOm8sc3R5bGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCItLXN0b3BcIjp0LFwiLS1ibHVyXCI6cixcIi0taGVpZ2h0XCI6XCJcIi5jb25jYXQoaSxcInB4XCIpfSxhKX0pfSk7ZnVuY3Rpb24gbkooZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG4wKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBuSihlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBuSihlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX12YXIgbjE9KDAseC5mb3J3YXJkUmVmKShmdW5jdGlvbihlLG4pe3ZhciB0LHIsbyxhLGksbCxzLGMsdSxkLGY9ZS5jaGlsZHJlbixwPWUubWVhc3VyZSxoPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiLFwibWVhc3VyZVwiXSksZz0oMCx4LnVzZVJlZikobnVsbCksbT1uMCgodD1nLHI9cCxhPShvPW4wKCgwLHgudXNlU3RhdGUpKDApLDIpKVswXSxpPW9bMV0scz0obD1uMCgoMCx4LnVzZVN0YXRlKSghMCksMikpWzBdLGM9bFsxXSwoMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXtpZihyKXt2YXIgZSxuPXQuY3VycmVudDtpZihuKXt2YXIgbz1uZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24obil7dmFyIHQ9bjAobiwxKVswXS5jb250ZW50UmVjdDtjbGVhclRpbWVvdXQoZSksZT13aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2MoITEpfSwxMDApLGkodC5oZWlnaHQpfSk7cmV0dXJuIG8ub2JzZXJ2ZShuKSxmdW5jdGlvbigpe3JldHVybiBvLmRpc2Nvbm5lY3QoKX19fX0sW3JdKSxbYSxzXSksMiksdj1tWzBdLGI9bVsxXTtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIiwodT1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt9LGgpLGQ9ZD17cmVmOm4sc3R5bGU6e2hlaWdodDpiP1wiYXV0b1wiOnYsdHJhbnNpdGlvbjpcImhlaWdodCAyNTBtcyB2YXIoLS10aW1pbmctc3dpZnQpXCJ9LGNoaWxkcmVuOigwLHkuanN4KShcImRpdlwiLHtyZWY6ZyxjaGlsZHJlbjpmfSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QoZCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsZSkpfSksdSkpfSk7ZnVuY3Rpb24gbjIoZSl7dmFyIG49ZS5maXhlZCx0PWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJmaXhlZFwiXSk7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIsZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3BcIjohMCxcImRhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcC1maXhlZFwiOiEhbnx8dm9pZCAwfSx0KSl9ZnVuY3Rpb24gbjQoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG41KGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiBuMyhlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9ZnVuY3Rpb24gbjYoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG40KGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG40KGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIG45KGUpe3ZhciBuPWUuZXJyb3JNZXNzYWdlLHQ9ZS5lcnJvclR5cGUscj1lLmNoaWxkcmVuLG89ZS5lcnJvckNvZGUsYT1lLmVycm9yQ291bnQsaT1lLmVycm9yLGw9ZS5kZWJ1Z0luZm8scz1lLmlzQnVpbGRFcnJvcixjPWUub25DbG9zZSx1PWUudmVyc2lvbkluZm8sZD1lLnJ1bnRpbWVFcnJvcnMsZj1lLmFjdGl2ZUlkeCxwPWUuc2V0QWN0aXZlSW5kZXgsaD1lLmlzVHVyYm9wYWNrLGc9ZS5kaWFsb2dSZXNpemVyUmVmLG09ZS5yZW5kZXJlZCx2PXZvaWQgMD09PW18fG0sYj1lLnRyYW5zaXRpb25EdXJhdGlvbk1zLHc9e1wiZGF0YS1yZW5kZXJlZFwiOnYsc3R5bGU6e1wiLS10cmFuc2l0aW9uLWR1cmF0aW9uXCI6XCJcIi5jb25jYXQoYixcIm1zXCIpfX0saj1uNih4LnVzZVN0YXRlKCEhYiksMiksaz1qWzBdLEE9alsxXSxPPXgudXNlUmVmKG51bGwpLEM9ISFvLFM9eC51c2VSZWYobnVsbCk7cmV0dXJuKDAsblEuUDUpKFMsbnVsbCx2KSwoMCx5LmpzeHMpKG5ZLG4zKG41KHt9LHcpLHtjaGlsZHJlbjpbKDAseS5qc3gpKG4yLHtmaXhlZDpzfSksKDAseS5qc3hzKShcImRpdlwiLG4zKG41KHtcImRhdGEtbmV4dGpzLWRpYWxvZy1yb290XCI6ITAsb25UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciBuPWUucHJvcGVydHlOYW1lLHQ9ZS50YXJnZXQ7XCJzY2FsZVwiPT09biYmdD09PVMuY3VycmVudCYmQSghMSl9LHJlZjpTfSx3KSx7Y2hpbGRyZW46WygwLHkuanN4KShuSCx7cnVudGltZUVycm9yczpkLGFjdGl2ZUlkeDpmLHNldEFjdGl2ZUluZGV4OnAsdmVyc2lvbkluZm86dSxpc1R1cmJvcGFjazpofSksKDAseS5qc3hzKShuVix7b25DbG9zZTpjLGRpYWxvZ1Jlc2l6ZXJSZWY6ZyxcImRhdGEtaGFzLWZvb3RlclwiOkMsb25TY3JvbGw6ZnVuY3Rpb24oZSl7aWYoTy5jdXJyZW50KXt2YXIgbix0LHI9KG49ZS5jdXJyZW50VGFyZ2V0LnNjcm9sbFRvcC8xNyxNYXRoLm1pbihNYXRoLm1heChuLCh0PW42KFswLDFdLDIpKVswXSksdFsxXSkpO08uY3VycmVudC5zdHlsZS5vcGFjaXR5PVN0cmluZyhyKX19LGZvb3RlcjpDJiYoMCx5LmpzeCkoblMse2Vycm9yQ29kZTpvfSksY2hpbGRyZW46WygwLHkuanN4KShuMSx7cmVmOmcsbWVhc3VyZTohayxcImRhdGEtbmV4dGpzLWRpYWxvZy1zaXplclwiOiEwLGNoaWxkcmVuOigwLHkuanN4cykoZVgse2NoaWxkcmVuOlsoMCx5LmpzeHMpKG5xLHtjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2Vycm9yX3RpdGxlXCIsXCJkYXRhLW5leHRqcy1lcnJvci1jb2RlXCI6byxjaGlsZHJlbjpbKDAseS5qc3hzKShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1lcnJvci1sYWJlbC1ncm91cFwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkobkwse2Vycm9yVHlwZTp0fSksaS5lbnZpcm9ubWVudE5hbWUmJigwLHkuanN4KShuSyx7ZW52aXJvbm1lbnROYW1lOmkuZW52aXJvbm1lbnROYW1lfSldfSksKDAseS5qc3gpKG54LHtlcnJvcjppLGRlYnVnSW5mbzpsfSldfSksKDAseS5qc3gpKG56LHtlcnJvck1lc3NhZ2U6bn0pXX0pLCgwLHkuanN4KShuVyx7Y2hpbGRyZW46cn0pXX0pfSksKDAseS5qc3gpKG5YLHtlcnJvckNvdW50OmEsYWN0aXZlSWR4Om51bGwhPWY/ZjowfSldfSksKDAseS5qc3gpKG5HLHtyZWY6TyxzaWRlOlwidG9wXCIsc3RvcDpcIjUwJVwiLGJsdXI6XCI0cHhcIixoZWlnaHQ6NDh9KV19KSldfSkpfXZhciBuOD1cIlxcbiAgXCIuY29uY2F0KFwiXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXldIHtcXG4gICAgcGFkZGluZzogaW5pdGlhbDtcXG4gICAgdG9wOiAxMHZoO1xcbiAgfVxcblwiLFwiXFxuICBcIikuY29uY2F0KFwiXFxuICAuZXJyb3Itb3ZlcmxheS1kaWFsb2ctY29udGFpbmVyIHtcXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gICAgYm9yZGVyOiB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogMCAwIHZhcigtLW5leHQtZGlhbG9nLXJhZGl1cykgdmFyKC0tbmV4dC1kaWFsb2ctcmFkaXVzKTtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1lbnUpO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS1kaWFsb2ctc2Nyb2xsIHtcXG4gICAgb3ZlcmZsb3cteTogYXV0bztcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgfVxcblwiLFwiXFxuICBcIikuY29uY2F0KFwiXFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciA+IGgxIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTIwKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjQpO1xcbiAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgbWFyZ2luOiBjYWxjKDE2cHggKiAxLjUpIDA7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10aXRsZS1oMSk7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyIHNtYWxsIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudHMtMSk7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNnB4O1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciBzbWFsbCA+IHNwYW4ge1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciA+IGRpdiA+IHNtYWxsIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBtYXJnaW4tdG9wOiA0cHg7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyID4gcCA+IGEge1xcbiAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyXFxuICAgID4gLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogMTZweDtcXG4gICAgcmlnaHQ6IDE2cHg7XFxuICB9XFxuXCIsXCJcXG4gIFwiKS5jb25jYXQoXCJcIixcIlxcblxcbiAgXCIpLmNvbmNhdChcIlxcbiAgW2RhdGEtbmV4dGpzLWVycm9yLW92ZXJsYXktbmF2XSB7XFxuICAgIC0tc3Ryb2tlLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIC0tYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFxuICAgIHdpZHRoOiAxMDAlO1xcblxcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHotaW5kZXg6IDI7XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIHRyYW5zbGF0ZTogdmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKSB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpO1xcbiAgICBtYXgtd2lkdGg6IHZhcigtLW5leHQtZGlhbG9nLW1heC13aWR0aCk7XFxuXFxuICAgIC5lcnJvci1vdmVybGF5LW5vdGNoIHtcXG4gICAgICB0cmFuc2xhdGU6IGNhbGModmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKSAqIC0xKTtcXG4gICAgICB3aWR0aDogYXV0bztcXG4gICAgICBoZWlnaHQ6IHZhcigtLW5leHQtZGlhbG9nLW5vdGNoLWhlaWdodCk7XFxuICAgICAgcGFkZGluZzogMTJweDtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKTtcXG4gICAgICBib3JkZXI6IHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tc3Ryb2tlLWNvbG9yKTtcXG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXG4gICAgICAmW2RhdGEtc2lkZT0nbGVmdCddIHtcXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZXh0LWRpYWxvZy1yYWRpdXMpIDAgMCAwO1xcblxcbiAgICAgICAgLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCB7XFxuICAgICAgICAgIHJpZ2h0OiAtNTRweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgID4gKjpub3QoLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCkge1xcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xMHB4O1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICAmW2RhdGEtc2lkZT0ncmlnaHQnXSB7XFxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLW5leHQtZGlhbG9nLXJhZGl1cykgMCAwO1xcblxcbiAgICAgICAgLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCB7XFxuICAgICAgICAgIGxlZnQ6IC01NHB4O1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTgwZGVnKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgID4gKjpub3QoLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCkge1xcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLTEycHg7XFxuICAgICAgICB9XFxuICAgICAgfVxcblxcbiAgICAgIC5lcnJvci1vdmVybGF5LW5vdGNoLXRhaWwge1xcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgdG9wOiBjYWxjKHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCkgKiAtMSk7XFxuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gICAgICAgIHotaW5kZXg6IC0xO1xcbiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgKyB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xcbiAgICBbZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1uYXZdIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKTtcXG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZXh0LWRpYWxvZy1yYWRpdXMpIHZhcigtLW5leHQtZGlhbG9nLXJhZGl1cykgMCAwO1xcbiAgICAgIGJvcmRlcjogdmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1zdHJva2UtY29sb3IpO1xcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICB0cmFuc2xhdGU6IDAgdmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKTtcXG4gICAgICBcXG4gICAgICAuZXJyb3Itb3ZlcmxheS1ub3RjaCB7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgICAgICAgYm9yZGVyOiAwO1xcblxcbiAgICAgICAgJltkYXRhLXNpZGU9XFxcImxlZnRcXFwiXSwgJltkYXRhLXNpZGU9XFxcInJpZ2h0XFxcIl0ge1xcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCB7XFxuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIsXCJcXG4gIFwiKS5jb25jYXQoXCJcXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfbGFiZWwge1xcbiAgICBwYWRkaW5nOiAycHggNnB4O1xcbiAgICBtYXJnaW46IDA7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQtMik7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXJlZC0xMDApO1xcbiAgICBmb250LXdlaWdodDogNjAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcmVkLTkwMCk7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gIH1cXG5cIixcIlxcbiAgXCIpLmNvbmNhdChcIlxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc193cmFwcGVyIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgfVxcblxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19kZXNjIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBtYXJnaW4tbGVmdDogNHB4O1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcmVkLTkwMCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGxldHRlci1zcGFjaW5nOiAtMC4zMnB4O1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XFxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG4gIH1cXG5cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzYy50cnVuY2F0ZWQge1xcbiAgICBtYXgtaGVpZ2h0OiAyMDBweDtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIH1cXG5cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZ3JhZGllbnRfb3ZlcmxheSB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgaGVpZ2h0OiA4NXB4O1xcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgICAgMTgwZGVnLFxcbiAgICAgIHJnYmEoMjUwLCAyNTAsIDI1MCwgMCkgMCUsXFxuICAgICAgdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApIDEwMCVcXG4gICAgKTtcXG4gIH1cXG5cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZXhwYW5kX2J1dHRvbiB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiAxMHB4O1xcbiAgICBsZWZ0OiA1MCU7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogNnB4IDhweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xcbiAgICBib3gtc2hhZG93OlxcbiAgICAgIDBweCAycHggMnB4IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMTAwKSxcXG4gICAgICAwcHggOHB4IDhweCAtOHB4IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEzKTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZTtcXG4gIH1cXG5cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZXhwYW5kX2J1dHRvbjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gIH1cXG5cIixcIlxcbiAgXCIpLmNvbmNhdChcIlxcbiAgLmVycm9yLW92ZXJsYXktdG9vbGJhciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGdhcDogNnB4O1xcbiAgfVxcblxcbiAgLm5vZGVqcy1pbnNwZWN0b3ItYnV0dG9uLFxcbiAgLmNvcHktc3RhY2stdHJhY2UtYnV0dG9uLFxcbiAgLmRvY3MtbGluay1idXR0b24ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMjgpO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjgpO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtYWxsKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNCk7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE0KTtcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgfVxcblxcbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTEwMCk7XFxuICAgIH1cXG5cXG4gICAgJjpub3QoOmRpc2FibGVkKTphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMjAwKTtcXG4gICAgfVxcblxcbiAgICAmOmRpc2FibGVkIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktdG9vbGJhci1idXR0b24taWNvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICB9XFxuXCIsXCJcXG5cXG4gIFtkYXRhLW5leHRqcy1lcnJvci1sYWJlbC1ncm91cF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG4gIH1cXG5cIik7ZnVuY3Rpb24gbjcoZSl7dmFyIG4sdCxyPWUuZmlsZSxvPWUubG9jYXRpb24sYT1lRSh7ZmlsZTpyLGxpbmVOdW1iZXI6bnVsbCE9KG49bnVsbD09bz92b2lkIDA6by5saW5lKT9uOjEsY29sdW1uOm51bGwhPSh0PW51bGw9PW8/dm9pZCAwOm8uY29sdW1uKT90OjB9KTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmtcIjohMCxcImRhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLWltcG9ydC10cmFjZVwiOiEwLHJvbGU6XCJsaW5rXCIsb25DbGljazphLHRpdGxlOlwiQ2xpY2sgdG8gb3BlbiBpbiB5b3VyIGVkaXRvclwiLGNoaWxkcmVuOltyLG8/XCI6XCIuY29uY2F0KG8ubGluZSxcIjpcIikuY29uY2F0KG8uY29sdW1uKTpudWxsLCgwLHkuanN4cykoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLHN0cm9rZVdpZHRoOlwiMlwiLHN0cm9rZUxpbmVjYXA6XCJyb3VuZFwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDZcIn0pLCgwLHkuanN4KShcInBvbHlsaW5lXCIse3BvaW50czpcIjE1IDMgMjEgMyAyMSA5XCJ9KSwoMCx5LmpzeCkoXCJsaW5lXCIse3gxOlwiMTBcIix5MTpcIjE0XCIseDI6XCIyMVwiLHkyOlwiM1wifSldfSldfSl9ZnVuY3Rpb24gdGUoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfXZhciB0bj1mdW5jdGlvbihlKXt2YXIgbix0LHIsbyxhLGksbCxzLGMsdSxkPWUuY29udGVudCxmPXgudXNlTWVtbyhmdW5jdGlvbigpe3ZhciBlLG4sdDtyZXR1cm4gbj1mdW5jdGlvbihlKXt2YXIgbix0LHI9ZS5zaGlmdCgpO2lmKCFyKXJldHVybiBudWxsO3ZhciBvPShuPXIuc3BsaXQoXCI6XCIsMyksdD0zLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMyl8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHRlKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHRlKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxhPW9bMF0saT1vWzFdLGw9b1syXSxzPU51bWJlcihpKSxjPU51bWJlcihsKSx1PSFOdW1iZXIuaXNOYU4ocykmJiFOdW1iZXIuaXNOYU4oYyk7cmV0dXJue2ZpbGVOYW1lOnU/YTpyLGxvY2F0aW9uOnU/e2xpbmU6cyxjb2x1bW46Y306dm9pZCAwfX0oZT1kLnNwbGl0KFwiXFxuXCIpKSx0PWZ1bmN0aW9uKGUpe2lmKGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4vUmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3I6Ly50ZXN0KGUpfSl8fGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4vSW1wb3J0IHRyYWNlIGZvciByZXF1ZXN0ZWQgbW9kdWxlOi8udGVzdChlKX0pKXtmb3IodmFyIG49W107Ly4rXFwuLisvLnRlc3QoZVtlLmxlbmd0aC0xXSkmJiFlW2UubGVuZ3RoLTFdLmluY2x1ZGVzKFwiOlwiKTspe3ZhciB0PWUucG9wKCkudHJpbSgpO24udW5zaGlmdCh0KX1yZXR1cm4gbn1yZXR1cm5bXX0oZSkse2ZpbGU6bixzb3VyY2U6ZS5qb2luKFwiXFxuXCIpLGltcG9ydFRyYWNlRmlsZXM6dH19LFtkXSkscD1mLmZpbGUsaD1mLnNvdXJjZSxnPWYuaW1wb3J0VHJhY2VGaWxlcyxtPXgudXNlTWVtbyhmdW5jdGlvbigpe3JldHVybiBlSCgpLmFuc2lUb0pzb24oaCx7anNvbjohMCx1c2VfY2xhc3NlczohMCxyZW1vdmVfZW1wdHk6ITB9KX0sW2hdKSx2PWVFKHtmaWxlOm51bGw9PXA/dm9pZCAwOnAuZmlsZU5hbWUsbGluZU51bWJlcjpudWxsIT0oaT1udWxsPT1wfHxudWxsPT0obj1wLmxvY2F0aW9uKT92b2lkIDA6bi5saW5lKT9pOjEsY29sdW1uOm51bGwhPShsPW51bGw9PXB8fG51bGw9PSh0PXAubG9jYXRpb24pP3ZvaWQgMDp0LmNvbHVtbik/bDowfSksYj17ZmlsZTpudWxsIT0ocz1udWxsPT1wP3ZvaWQgMDpwLmZpbGVOYW1lKT9zOm51bGwsbWV0aG9kTmFtZTpcIlwiLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOm51bGwhPShjPW51bGw9PXB8fG51bGw9PShyPXAubG9jYXRpb24pP3ZvaWQgMDpyLmxpbmUpP2M6bnVsbCxjb2x1bW46bnVsbCE9KHU9bnVsbD09cHx8bnVsbD09KG89cC5sb2NhdGlvbik/dm9pZCAwOm8uY29sdW1uKT91Om51bGx9LHc9bnVsbD09Ynx8bnVsbD09KGE9Yi5maWxlKT92b2lkIDA6YS5zcGxpdChcIi5cIikucG9wKCk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZVwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1oZWFkZXJcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtbGlua1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtaWNvblwiLGNoaWxkcmVuOigwLHkuanN4KShlVCx7bGFuZzp3fSl9KSwoMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS10ZXh0XCI6ITAsY2hpbGRyZW46ZVMoYil9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6XCJPcGVuIGluIGVkaXRvclwiLFwiZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmstc291cmNlLWZpbGVcIjohMCxvbkNsaWNrOnYsY2hpbGRyZW46KDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWljb25cIixcImRhdGEtaWNvblwiOlwicmlnaHRcIixjaGlsZHJlbjooMCx5LmpzeCkoZXose3dpZHRoOjE2LGhlaWdodDoxNn0pfSl9KV19KX0pLCgwLHkuanN4KShcInByZVwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLXByZVwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1saW5lc1wiLGNoaWxkcmVuOlttLm1hcChmdW5jdGlvbihlLG4pe3JldHVybigwLHkuanN4KShcInNwYW5cIix7c3R5bGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7Y29sb3I6ZS5mZz9cInZhcigtLWNvbG9yLVwiLmNvbmNhdChlLmZnLFwiKVwiKTp2b2lkIDB9LFwiYm9sZFwiPT09ZS5kZWNvcmF0aW9uP3tmb250V2VpZ2h0OjUwMH06XCJpdGFsaWNcIj09PWUuZGVjb3JhdGlvbj97Zm9udFN0eWxlOlwiaXRhbGljXCJ9OnZvaWQgMCksY2hpbGRyZW46KDAseS5qc3gpKGViLHt0ZXh0OmUuY29udGVudH0pfSxcInRlcm1pbmFsLWVudHJ5LVwiLmNvbmNhdChuKSl9KSxnLm1hcChmdW5jdGlvbihlKXtyZXR1cm4oMCx5LmpzeCkobjcse2lzU291cmNlRmlsZTohMSxmaWxlOmV9LGUpfSldfSl9KV19KX0sdHQ9ZnVuY3Rpb24oZSl7dmFyIG49ZS5zcGxpdChcIlxcblwiKTtyZXR1cm4gZVUoKShuWzFdfHxcIlwiKS5yZXBsYWNlKC9eRXJyb3I6IC8sXCJcIil9LHRyPWZ1bmN0aW9uKGUpe3ZhciBuLHQscj1lLm1lc3NhZ2Usbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wibWVzc2FnZVwiXSksYT0oMCx4LnVzZUNhbGxiYWNrKShmdW5jdGlvbigpe30sW10pLGk9RXJyb3IociksbD0oMCx4LnVzZU1lbW8pKGZ1bmN0aW9uKCl7cmV0dXJuIHR0KHIpfHxcIkZhaWxlZCB0byBjb21waWxlXCJ9LFtyXSk7cmV0dXJuKDAseS5qc3gpKG45LChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe2Vycm9yVHlwZTpcIkJ1aWxkIEVycm9yXCIsZXJyb3JNZXNzYWdlOmwsb25DbG9zZTphLGVycm9yOml9LG8pLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKHRuLHtjb250ZW50OnJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9LHRvPWZ1bmN0aW9uKGUpe3ZhciBuLHQ9ZS5mcmFtZSxyPW51bGwhPShuPXQub3JpZ2luYWxTdGFja0ZyYW1lKT9uOnQuc291cmNlU3RhY2tGcmFtZSxvPSEhdC5vcmlnaW5hbENvZGVGcmFtZSxhPWVFKG8/e2ZpbGU6ci5maWxlLGxpbmVOdW1iZXI6ci5saW5lTnVtYmVyLGNvbHVtbjpyLmNvbHVtbn06dm9pZCAwKSxpPWVTKHIpO3JldHVybiBpPygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lXCI6ITAsXCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lLW5vLXNvdXJjZVwiOiFvLFwiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZS1pZ25vcmVkXCI6dC5pZ25vcmVkLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImNhbGwtc3RhY2stZnJhbWUtbWV0aG9kLW5hbWVcIixjaGlsZHJlbjpbKDAseS5qc3gpKGViLHt0ZXh0OnIubWV0aG9kTmFtZX0pLG8mJigwLHkuanN4KShcImJ1dHRvblwiLHtvbkNsaWNrOmEsY2xhc3NOYW1lOlwib3Blbi1pbi1lZGl0b3ItYnV0dG9uXCIsXCJhcmlhLWxhYmVsXCI6XCJPcGVuIFwiLmNvbmNhdChyLm1ldGhvZE5hbWUsXCIgaW4gZWRpdG9yXCIpLGNoaWxkcmVuOigwLHkuanN4KShleix7d2lkdGg6MTYsaGVpZ2h0OjE2fSl9KSx0LmVycm9yPygwLHkuanN4KShcImJ1dHRvblwiLHtjbGFzc05hbWU6XCJzb3VyY2UtbWFwcGluZy1lcnJvci1idXR0b25cIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IodC5yZWFzb24pfSx0aXRsZTpcIlNvdXJjZW1hcHBpbmcgZmFpbGVkLiBDbGljayB0byBsb2cgY2F1c2Ugb2YgZXJyb3IuXCIsY2hpbGRyZW46KDAseS5qc3gpKGVMLHt3aWR0aDoxNixoZWlnaHQ6MTZ9KX0pOm51bGxdfSksKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJjYWxsLXN0YWNrLWZyYW1lLWZpbGUtc291cmNlXCIsXCJkYXRhLWhhcy1zb3VyY2VcIjpvLGNoaWxkcmVuOml9KV19KTpudWxsfTtmdW5jdGlvbiB0YSgpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTguNzA3MjIgMi4zOTY0MUM4LjMxNjcgMi4wMDU4OCA3LjY4MzUzIDIuMDA1ODggNy4yOTMwMSAyLjM5NjQxTDQuNDY5NzggNS4yMTk2M0wzLjkzOTQ1IDUuNzQ5OTZMNS4wMDAxMSA2LjgxMDYyTDUuNTMwNDQgNi4yODAyOUw4LjAwMDExIDMuODEwNjJMMTAuNDY5OCA2LjI4MDI5TDExLjAwMDEgNi44MTA2MkwxMi4wNjA4IDUuNzQ5OTZMMTEuNTMwNCA1LjIxOTYzTDguNzA3MjIgMi4zOTY0MVpNNS41MzA0NCA5LjcxOTYzTDUuMDAwMTEgOS4xODkzTDMuOTM5NDUgMTAuMjVMNC40Njk3OCAxMC43ODAzTDcuMjkzMDEgMTMuNjAzNUM3LjY4MzUzIDEzLjk5NCA4LjMxNjcgMTMuOTk0IDguNzA3MjIgMTMuNjAzNUwxMS41MzA0IDEwLjc4MDNMMTIuMDYwOCAxMC4yNUwxMS4wMDAxIDkuMTg5M0wxMC40Njk4IDkuNzE5NjNMOC4wMDAxMSAxMi4xODkzTDUuNTMwNDQgOS43MTk2M1pcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIHRpKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stY29udGFpbmVyXSB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgbWFyZ2luLXRvcDogOHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2staGVhZGVyXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgbWluLWhlaWdodDogdmFyKC0tc2l6ZS0yOCk7XFxuICAgIHBhZGRpbmc6IDhweCA4cHggMTJweCA0cHg7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stdGl0bGVdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG5cXG4gICAgbWFyZ2luOiAwO1xcblxcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvdW50XSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcblxcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIGdhcDogNHB4O1xcblxcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTEpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuXFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWlnbm9yZWQtbGlzdC10b2dnbGUtYnV0dG9uXSB7XFxuICAgIGFsbDogdW5zZXQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogNnB4O1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gICAgcGFkZGluZzogNHB4IDZweDtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtNnB4O1xcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDE1MG1zIGVhc2U7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgfVxcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIHRpPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gdGwoZSl7dmFyIG49ZS5mcmFtZXMsdD1lLmlzSWdub3JlTGlzdE9wZW4scj1lLmlnbm9yZWRGcmFtZXNUYWxseSxvPWUub25Ub2dnbGVJZ25vcmVMaXN0O3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvbnRhaW5lclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcInBcIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLXRpdGxlXCI6ITAsY2hpbGRyZW46W1wiQ2FsbCBTdGFjayBcIiwoMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb3VudFwiOiEwLGNoaWxkcmVuOm4ubGVuZ3RofSldfSkscj4wJiYoMCx5LmpzeHMpKFwiYnV0dG9uXCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1pZ25vcmVkLWxpc3QtdG9nZ2xlLWJ1dHRvblwiOnQsb25DbGljazpvLGNoaWxkcmVuOltcIlwiLmNvbmNhdCh0P1wiSGlkZVwiOlwiU2hvd1wiLFwiIFwiKS5jb25jYXQocixcIiBpZ25vcmUtbGlzdGVkIGZyYW1lKHMpXCIpLCgwLHkuanN4KSh0YSx7fSldfSldfSksbi5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm4hZS5pZ25vcmVkfHx0PygwLHkuanN4KSh0byx7ZnJhbWU6ZX0sbik6bnVsbH0pXX0pfXZhciB0cz1laSh0aSgpKTtmdW5jdGlvbiB0YyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gdHUoZSl7dmFyIG4sdCxyPWUuZnJhbWVzLG89ZS5kaWFsb2dSZXNpemVyUmVmLGE9KDAseC51c2VSZWYpKE5hTiksaT0obj0oMCx4LnVzZVN0YXRlKSghMSksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHRjKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHRjKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxsPWlbMF0scz1pWzFdLGM9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybiByLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBlKyArISFuLmlnbm9yZWR9LDApfSxbcl0pO3JldHVybigwLHkuanN4KSh0bCx7ZnJhbWVzOnIsaXNJZ25vcmVMaXN0T3BlbjpsLG9uVG9nZ2xlSWdub3JlTGlzdDpmdW5jdGlvbigpe3ZhciBlPW51bGw9PW8/dm9pZCAwOm8uY3VycmVudDtpZihlKXt2YXIgbj0obnVsbD09ZT92b2lkIDA6ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkuaGVpZ2h0O2EuY3VycmVudHx8KGEuY3VycmVudD1uKSxsPyhlLnN0eWxlLmhlaWdodD1cIlwiLmNvbmNhdChhLmN1cnJlbnQsXCJweFwiKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsZnVuY3Rpb24gbigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIixuKSxzKCExKX0pKTpzKCEwKX19LGlnbm9yZWRGcmFtZXNUYWxseTpjfSl9ZnVuY3Rpb24gdGQoKXt2YXIgZSxuLHQ9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSkuY29sbGFwc2VkO3JldHVybigwLHkuanN4KShcInN2Z1wiLChlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jaGV2cm9uLWljb25cIjohMCxcImRhdGEtY29sbGFwc2VkXCI6dCx3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIixmaWxsOlwibm9uZVwifSxcImJvb2xlYW5cIj09dHlwZW9mIHQ/e3N0eWxlOnt0cmFuc2Zvcm06dD92b2lkIDA6XCJyb3RhdGUoOTBkZWcpXCJ9fTp7fSksbj1uPXtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse3N0eWxlOntmaWxsOlwidmFyKC0tY29sb3ItZm9udClcIn0sZmlsbFJ1bGU6XCJldmVub2RkXCIsZDpcIm02Ljc1IDMuOTQuNTMuNTMgMi44MjQgMi44MjNhMSAxIDAgMCAxIDAgMS40MTRMNy4yOCAxMS41M2wtLjUzLjUzTDUuNjkgMTFsLjUzLS41M0w4LjY5IDggNi4yMiA1LjUzIDUuNjkgNWwxLjA2LTEuMDZaXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlKSl9ZnVuY3Rpb24gdGYoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHRwKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0ZihlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiB0ZihlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiB0aChlKXt2YXIgbj1lLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZix0PXRwKCgwLHgudXNlU3RhdGUpKCEwKSwyKSxyPXRbMF0sbz10WzFdLGE9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBuLnNwbGl0KFwiXFxuXCIpLmZvckVhY2goZnVuY3Rpb24obix0KXt2YXIgcixvLGE9XCIrXCI9PT1uWzBdfHxcIi1cIj09PW5bMF0saT1cIj5cIj09PW5bMF0sbD1hfHxpLHM9bD9uWzBdOlwiXCIsYz1sP24uaW5kZXhPZihzKTotMSx1PXRwKGw/W24uc2xpY2UoMCxjKSxuLnNsaWNlKGMrMSldOltuLFwiXCJdLDIpLGQ9dVswXSxmPXVbMV07YT9lLnB1c2goKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZVwiOiEwLFwiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZlwiOlwiK1wiPT09cz9cImFkZFwiOlwicmVtb3ZlXCIsY2hpbGRyZW46KDAseS5qc3hzKShcInNwYW5cIix7Y2hpbGRyZW46W2QsKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXCI6ITAsY2hpbGRyZW46c30pLGYsXCJcXG5cIl19KX0sXCJjb21wLWRpZmZcIit0KSk6ZS5wdXNoKCgwLHkuanN4cykoXCJzcGFuXCIsKHI9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmVcIjohMH0saT97XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1kaWZmXCI6XCJlcnJvclwifTp2b2lkIDApLG89bz17Y2hpbGRyZW46W2QsKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXCI6ITAsY2hpbGRyZW46c30pLGYsXCJcXG5cIl19LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobykpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobykpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sZSkpfSksciksXCJjb21wLWRpZmZcIit0KSl9KSxlfSxbbl0pO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sXCI6ITAsXCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWNvbGxhcHNlXCI6cixjaGlsZHJlbjpbKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1leHBhbmRlZFwiOiFyLFwiYXJpYS1sYWJlbFwiOlwiY29tcGxldGUgQ29tcG9uZW50IFN0YWNrXCIsXCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWNvbGxhcHNlLWJ1dHRvblwiOiEwLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbyghcil9LGNoaWxkcmVuOigwLHkuanN4KSh0ZCx7Y29sbGFwc2VkOnJ9KX0pLCgwLHkuanN4KShcInByZVwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2NvbXBvbmVudC1zdGFja1wiLGNoaWxkcmVuOigwLHkuanN4KShcImNvZGVcIix7Y2hpbGRyZW46YX0pfSldfSl9dmFyIHRnPVN5bWJvbC5mb3IoXCJOZXh0anNFcnJvclwiKTtmdW5jdGlvbiB0bShlKXtyZXR1cm4gZVt0Z118fG51bGx9ZnVuY3Rpb24gdHYoZSxuLHQscixvLGEsaSl7dHJ5e3ZhciBsPWVbYV0oaSkscz1sLnZhbHVlfWNhdGNoKGUpe3QoZSk7cmV0dXJufWwuZG9uZT9uKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9ZnVuY3Rpb24gdGIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyx0PWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgYT1lLmFwcGx5KG4sdCk7ZnVuY3Rpb24gaShlKXt0dihhLHIsbyxpLGwsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gbChlKXt0dihhLHIsbyxpLGwsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pfX1mdW5jdGlvbiB0eShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gdHgoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIHR3KGUsbil7dmFyIHQscixvLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX0saT1PYmplY3QuY3JlYXRlKChcImZ1bmN0aW9uXCI9PXR5cGVvZiBJdGVyYXRvcj9JdGVyYXRvcjpPYmplY3QpLnByb3RvdHlwZSk7cmV0dXJuIGkubmV4dD1sKDApLGkudGhyb3c9bCgxKSxpLnJldHVybj1sKDIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiBsKGwpe3JldHVybiBmdW5jdGlvbihzKXt2YXIgYz1bbCxzXTtpZih0KXRocm93IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtpJiYoaT0wLGNbMF0mJihhPTApKSxhOyl0cnl7aWYodD0xLHImJihvPTImY1swXT9yLnJldHVybjpjWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYoYz1bMiZjWzBdLG8udmFsdWVdKSxjWzBdKXtjYXNlIDA6Y2FzZSAxOm89YzticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6Y1sxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9Y1sxXSxjPVswXTtjb250aW51ZTtjYXNlIDc6Yz1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG89KG89YS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSkmJig2PT09Y1swXXx8Mj09PWNbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWNbMF0mJighb3x8Y1sxXT5vWzBdJiZjWzFdPG9bM10pKXthLmxhYmVsPWNbMV07YnJlYWt9aWYoNj09PWNbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89YzticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGMpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1jPW4uY2FsbChlLGEpfWNhdGNoKGUpe2M9WzYsZV0scj0wfWZpbmFsbHl7dD1vPTB9aWYoNSZjWzBdKXRocm93IGNbMV07cmV0dXJue3ZhbHVlOmNbMF0/Y1sxXTp2b2lkIDAsZG9uZTohMH19fX12YXIgdGo9ZnVuY3Rpb24oZSl7aWYoXCJ1c2VcImluIHgpe3ZhciBuPWUuZnJhbWVzO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4pdGhyb3cgRXJyb3IoXCJJbnZhcmlhbnQ6IGZyYW1lcyBtdXN0IGJlIGEgZnVuY3Rpb24gd2hlbiB0aGUgUmVhY3QgdmVyc2lvbiBoYXMgUmVhY3QudXNlLiBUaGlzIGlzIGEgYnVnIGluIE5leHQuanMuXCIpO3JldHVybiB4LnVzZShuKCkpfWlmKCFBcnJheS5pc0FycmF5KGUuZnJhbWVzKSl0aHJvdyBFcnJvcihcIkludmFyaWFudDogZnJhbWVzIG11c3QgYmUgYW4gYXJyYXkgd2hlbiB0aGUgUmVhY3QgdmVyc2lvbiBkb2VzIG5vdCBoYXZlIFJlYWN0LnVzZS4gVGhpcyBpcyBhIGJ1ZyBpbiBOZXh0LmpzLlwiKTtyZXR1cm4gZS5mcmFtZXN9O2Z1bmN0aW9uIHRrKGUpe3ZhciBuPWUuZXJyb3IsdD1lLmRpYWxvZ1Jlc2l6ZXJSZWYscj10aihuKSxvPSgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXt2YXIgZSxuPXIuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiFlLmlnbm9yZWQmJiEhZS5vcmlnaW5hbENvZGVGcmFtZSYmISFlLm9yaWdpbmFsU3RhY2tGcmFtZX0pO3JldHVybiBudWxsIT0oZT1yW25dKT9lOm51bGx9LFtyXSk7cmV0dXJuKDAseS5qc3hzKSh5LkZyYWdtZW50LHtjaGlsZHJlbjpbbyYmKDAseS5qc3gpKGVxLHtzdGFja0ZyYW1lOm8ub3JpZ2luYWxTdGFja0ZyYW1lLGNvZGVGcmFtZTpvLm9yaWdpbmFsQ29kZUZyYW1lfSksci5sZW5ndGg+MCYmKDAseS5qc3gpKHR1LHtkaWFsb2dSZXNpemVyUmVmOnQsZnJhbWVzOnJ9KV19KX12YXIgdEE9XCJcXG4gIFwiLmNvbmNhdChcIlxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWxdIHtcXG4gICAgcGFkZGluZzogOHB4IDA7XFxuICAgIG1hcmdpbjogOHB4IDA7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itc3ludGF4LWNvbnN0YW50KTtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuMzNlbTsgLyogMTZweCBpbiAxMnB4IGZvbnQgc2l6ZSAqL1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZV0ge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XFxuICAgIGxpbmUtaGVpZ2h0OiBjYWxjKDUgLyAzKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1kaWZmPSdlcnJvciddIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYW1iZXItMTAwKTtcXG4gICAgYm94LXNoYWRvdzogMnB4IDAgMCAwIHZhcigtLWNvbG9yLWFtYmVyLTkwMCkgaW5zZXQ7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtY29sbGFwc2UtYnV0dG9uXSB7XFxuICAgIGFsbDogdW5zZXQ7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMnB4O1xcbiAgICAmOmZvY3VzIHtcXG4gICAgICBvdXRsaW5lOiBub25lO1xcbiAgICB9XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0nYWRkJ10ge1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmVlbi0zMDApO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXSB7XFxuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDI0cHggKiAtMSk7XFxuICAgIG1hcmdpbi1yaWdodDogMjRweDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1kaWZmPSdhZGQnXVxcbiAgICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1saW5lLXNpZ25dIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyZWVuLTkwMCk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0ncmVtb3ZlJ10ge1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1yZWQtMzAwKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1kaWZmPSdyZW1vdmUnXVxcbiAgICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1saW5lLXNpZ25dIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXJlZC05MDApO1xcbiAgICBtYXJnaW4tbGVmdDogY2FsYygyNHB4ICogLTEpO1xcbiAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0nZXJyb3InXVxcbiAgICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1saW5lLXNpZ25dIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTkwMCk7XFxuICB9XFxuICBcXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1oaW50XSB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgZm9udC1zaXplOiAwO1xcbiAgICBoZWlnaHQ6IDA7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tdGFnLWFkamFjZW50PSdmYWxzZSddIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudHMtMSk7XFxuICB9XFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19jb21wb25lbnQtc3RhY2sge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1jb2xsYXBzZT0ndHJ1ZSddXFxuICAgIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2NvbXBvbmVudC1zdGFja1xcbiAgICBjb2RlIHtcXG4gICAgbWF4LWhlaWdodDogMTIwcHg7XFxuICAgIG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20scmdiYSgwLDAsMCwwKSAwJSxibGFjayAxMCUpO1xcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcXG4gIH1cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2NvbXBvbmVudC1zdGFjayBjb2RlIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xcbiAgICBvdmVyZmxvdy15OiBoaWRkZW47XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZl0ge1xcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogY2VudGVyO1xcbiAgfVxcbiAgLmVycm9yLW92ZXJsYXktaHlkcmF0aW9uLWVycm9yLWRpZmYtcGx1cy1pY29uIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyZWVuLTkwMCk7XFxuICB9XFxuICAuZXJyb3Itb3ZlcmxheS1oeWRyYXRpb24tZXJyb3ItZGlmZi1taW51cy1pY29uIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXJlZC05MDApO1xcbiAgfVxcblwiLFwiXFxuXCIpO2Z1bmN0aW9uIHRPKGUpe3JldHVybiBlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sP1wic3ltYm9sXCI6dHlwZW9mIGV9ZnVuY3Rpb24gdEMoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHRTKGUpe3ZhciBuLHQscixvLGEsaT1lLnJ1bnRpbWVFcnJvcnMsbD1lLmdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzLHM9KHI9KDAseC51c2VTdGF0ZSkoMCksbz0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHIpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KHIsMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHRDKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHRDKGUsbil9fShyLG8pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxjPXNbMF0sdT1zWzFdLGQ9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybiAwPT09aS5sZW5ndGh9LFtpLmxlbmd0aF0pLGY9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3ZhciBlO3JldHVybiBudWxsIT0oZT1pW2NdKT9lOm51bGx9LFtjLGldKSxwPShuPW51bGw9PWY/dm9pZCAwOmYuZXJyb3IsdD1sLCgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1uKXJldHVybiB0TDt2YXIgZSxyLG8sYT10KG4pO2lmKG51bGwhPT1hKXJldHVybntoeWRyYXRpb25XYXJuaW5nOm51bGwhPShyPWEud2FybmluZyk/cjpudWxsLG5vdGVzOm51bGwscmVhY3RPdXRwdXRDb21wb25lbnREaWZmOm51bGwhPShvPWEucmVhY3RPdXRwdXRDb21wb25lbnREaWZmKT9vOm51bGx9O2lmKCEobmcoKGU9bikubWVzc2FnZSl8fC9IeWRyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHNlcnZlciByZW5kZXJlZCAodGV4dHxIVE1MKSBkaWRuJ3QgbWF0Y2ggdGhlIGNsaWVudFxcLi8udGVzdChlLm1lc3NhZ2UpfHwvQSB0cmVlIGh5ZHJhdGVkIGJ1dCBzb21lIGF0dHJpYnV0ZXMgb2YgdGhlIHNlcnZlciByZW5kZXJlZCBIVE1MIGRpZG4ndCBtYXRjaCB0aGUgY2xpZW50IHByb3BlcnRpZXMuLy50ZXN0KGUubWVzc2FnZSkpKXJldHVybiB0TDt2YXIgaT1mdW5jdGlvbihlKXt2YXIgbj1lLm1lc3NhZ2U7aWYobmcobikpe3ZhciB0PW5jKG4uc3BsaXQoXCJcXG5cXG5cIiksMikscj10WzBdLG89dFsxXSxhPSh2b2lkIDA9PT1vP1wiXCI6bykudHJpbSgpO3JldHVybnttZXNzYWdlOlwiXCI9PT1hP24udHJpbSgpOnIudHJpbSgpLGRpZmY6YSxub3RlczpudWxsfX12YXIgaT1uYyhuLnNwbGl0KFwiXCIuY29uY2F0KG5mKSksMiksbD1pWzBdLHM9aVsxXSxjPWwudHJpbSgpO2lmKHZvaWQgMCE9PXMmJnMubGVuZ3RoPjEpe3ZhciB1PVtdO3Muc3BsaXQoXCJcXG5cIikuZm9yRWFjaChmdW5jdGlvbihlKXtcIlwiIT09ZS50cmltKCkmJihlLnRyaW0oKS5zdGFydHNXaXRoKFwiYXQgXCIpfHx1LnB1c2goZSkpfSk7dmFyIGQ9bnUoYy5zcGxpdChcIlxcblxcblwiKSksZj1kWzBdLHA9ZC5zbGljZSgxKTtyZXR1cm57bWVzc2FnZTpmLGRpZmY6dS5qb2luKFwiXFxuXCIpLG5vdGVzOnAuam9pbihcIlxcblxcblwiKXx8bnVsbH19dmFyIGg9bnUoYy5zcGxpdChcIlxcblxcblwiKSk7cmV0dXJue21lc3NhZ2U6aFswXSxkaWZmOm51bGwsbm90ZXM6aC5zbGljZSgxKS5qb2luKFwiXFxuXFxuXCIpfX0obiksbD1pLm1lc3NhZ2Uscz1pLm5vdGVzLGM9aS5kaWZmO3JldHVybiBudWxsPT09bD90TDp7aHlkcmF0aW9uV2FybmluZzpsLG5vdGVzOnMscmVhY3RPdXRwdXRDb21wb25lbnREaWZmOmN9fSxbbix0XSkpO2lmKGR8fCFmKXJldHVybntpc0xvYWRpbmc6ZCxhY3RpdmVJZHg6YyxzZXRBY3RpdmVJbmRleDp1LGFjdGl2ZUVycm9yOm51bGwsZXJyb3JEZXRhaWxzOm51bGwsZXJyb3JDb2RlOm51bGwsZXJyb3JUeXBlOm51bGwsbm90ZXM6bnVsbCxoeWRyYXRpb25XYXJuaW5nOm51bGx9O3ZhciBoPWYuZXJyb3IsZz0odm9pZCAwPT09KGE9aCk/XCJ1bmRlZmluZWRcIjp0TyhhKSk9PT1cIm9iamVjdFwiJiZudWxsIT09YSYmXCJfX05FWFRfRVJST1JfQ09ERVwiaW4gYSYmXCJzdHJpbmdcIj09dHlwZW9mIGEuX19ORVhUX0VSUk9SX0NPREU/YS5fX05FWFRfRVJST1JfQ09ERToodm9pZCAwPT09YT9cInVuZGVmaW5lZFwiOnRPKGEpKT09PVwib2JqZWN0XCImJm51bGwhPT1hJiZcImRpZ2VzdFwiaW4gYSYmXCJzdHJpbmdcIj09dHlwZW9mIGEuZGlnZXN0P2EuZGlnZXN0LnNwbGl0KFwiQFwiKS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoXCJFXCIpfSk6dm9pZCAwLG09dHooaCxmLnR5cGUpLHY9cC5ub3RlcyxiPXAuaHlkcmF0aW9uV2FybmluZztyZXR1cm57aXNMb2FkaW5nOmQsYWN0aXZlSWR4OmMsc2V0QWN0aXZlSW5kZXg6dSxhY3RpdmVFcnJvcjpmLGVycm9yRGV0YWlsczpwLGVycm9yQ29kZTpnLGVycm9yVHlwZTptLG5vdGVzOnYsaHlkcmF0aW9uV2FybmluZzpifX1mdW5jdGlvbiB0RShlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwiaHR0cHM6Ly9uZXh0anMub3JnXCIpfWZ1bmN0aW9uIHRfKGUpe3ZhciBuPWUubWVzc2FnZTtyZXR1cm4oMCx5LmpzeCkoZWIse3RleHQ6bixtYXRjaGVyOnRFfSl9ZnVuY3Rpb24gdFAoZSl7dmFyIG49ZS5lcnJvcix0PVwiZW52aXJvbm1lbnROYW1lXCJpbiBuP24uZW52aXJvbm1lbnROYW1lOlwiXCIscj10P1wiWyBcIi5jb25jYXQodCxcIiBdIFwiKTpcIlwiLG89bi5tZXNzYWdlO3JldHVybiBvLnN0YXJ0c1dpdGgocikmJihvPW8uc2xpY2Uoci5sZW5ndGgpKSwoMCx5LmpzeCkoeS5GcmFnbWVudCx7Y2hpbGRyZW46KDAseS5qc3gpKGViLHt0ZXh0Om8sbWF0Y2hlcjp0RX0pfSl9ZnVuY3Rpb24gdHooZSxuKXtyZXR1cm5cInJlY292ZXJhYmxlXCI9PT1uP1wiUmVjb3ZlcmFibGUgXCIuY29uY2F0KGUubmFtZSk6XCJjb25zb2xlXCI9PT1uP1wiQ29uc29sZSBcIi5jb25jYXQoZS5uYW1lKTpcIlJ1bnRpbWUgXCIuY29uY2F0KGUubmFtZSl9dmFyIHRMPXtoeWRyYXRpb25XYXJuaW5nOm51bGwsbm90ZXM6bnVsbCxyZWFjdE91dHB1dENvbXBvbmVudERpZmY6bnVsbH07ZnVuY3Rpb24gdFQoZSl7dmFyIG4sdCxyPWUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsbz1lLnJ1bnRpbWVFcnJvcnMsYT1lLmRlYnVnSW5mbyxpPWUub25DbG9zZSxsPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsc1wiLFwicnVudGltZUVycm9yc1wiLFwiZGVidWdJbmZvXCIsXCJvbkNsb3NlXCJdKSxzPSgwLHgudXNlUmVmKShudWxsKSxjPXRTKHtydW50aW1lRXJyb3JzOm8sZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6cn0pLHU9Yy5pc0xvYWRpbmcsZD1jLmVycm9yQ29kZSxmPWMuZXJyb3JUeXBlLHA9Yy5ub3RlcyxoPWMuaHlkcmF0aW9uV2FybmluZyxnPWMuYWN0aXZlSWR4LG09Yy5lcnJvckRldGFpbHMsdj1jLmFjdGl2ZUVycm9yLGI9Yy5zZXRBY3RpdmVJbmRleDtpZih1KXJldHVybigwLHkuanN4KShuWix7Y2hpbGRyZW46KDAseS5qc3gpKG4yLHt9KX0pO2lmKCF2KXJldHVybiBudWxsO3ZhciB3PXYuZXJyb3Isaj1bXCJzZXJ2ZXJcIixcImVkZ2Utc2VydmVyXCJdLmluY2x1ZGVzKHRtKHcpfHxcIlwiKTtyZXR1cm4oMCx5LmpzeHMpKG45LChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe2Vycm9yQ29kZTpkLGVycm9yVHlwZTpmLGVycm9yTWVzc2FnZTpoPygwLHkuanN4KSh0Xyx7bWVzc2FnZTpofSk6KDAseS5qc3gpKHRQLHtlcnJvcjp3fSksb25DbG9zZTpqP3ZvaWQgMDppLGRlYnVnSW5mbzphLGVycm9yOncscnVudGltZUVycm9yczpvLGFjdGl2ZUlkeDpnLHNldEFjdGl2ZUluZGV4OmIsZGlhbG9nUmVzaXplclJlZjpzfSxsKSx0PXQ9e2NoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktbm90ZXMtY29udGFpbmVyXCIsY2hpbGRyZW46W3A/KDAseS5qc3gpKHkuRnJhZ21lbnQse2NoaWxkcmVuOigwLHkuanN4KShcInBcIix7aWQ6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX25vdGVzXCIsY2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19ub3Rlc1wiLGNoaWxkcmVuOnB9KX0pOm51bGwsaD8oMCx5LmpzeCkoXCJwXCIse2lkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19saW5rXCIsY2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19saW5rXCIsY2hpbGRyZW46KDAseS5qc3gpKGViLHt0ZXh0OlwiU2VlIG1vcmUgaW5mbyBoZXJlOiBcIi5jb25jYXQobnApfSl9KTpudWxsXX0pLG0ucmVhY3RPdXRwdXRDb21wb25lbnREaWZmPygwLHkuanN4KSh0aCx7cmVhY3RPdXRwdXRDb21wb25lbnREaWZmOm0ucmVhY3RPdXRwdXRDb21wb25lbnREaWZmfHxcIlwifSk6bnVsbCwoMCx5LmpzeCkoeC5TdXNwZW5zZSx7ZmFsbGJhY2s6KDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZXJyb3Itc3VzcGVuZGVkXCI6ITB9KSxjaGlsZHJlbjooMCx5LmpzeCkodGsse2Vycm9yOnYsZGlhbG9nUmVzaXplclJlZjpzfSx2LmlkLnRvU3RyaW5nKCkpfSldfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX12YXIgdFI9eC5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPWUub25DbGljayxhPWUuY2hpbGRyZW4saT1lLmNsYXNzTmFtZSxsPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJvbkNsaWNrXCIsXCJjaGlsZHJlblwiLFwiY2xhc3NOYW1lXCJdKTtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIiwodD1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt9LGwpLHI9cj17cmVmOm4sb25DbGljazpmdW5jdGlvbihlKXtyZXR1cm4gZS50YXJnZXQuY2xvc2VzdChcImFcIil8fGUucHJldmVudERlZmF1bHQoKSxudWxsPT1vP3ZvaWQgMDpvKCl9LGNsYXNzTmFtZTooMCxlSi5jeCkoXCJuZXh0anMtdG9hc3RcIixpKSxjaGlsZHJlbjphfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHIpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpKX0pLHQpKX0pO2Z1bmN0aW9uIHROKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiB0RChlKXt2YXIgbix0LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjc1MCxvPShuPSgwLHgudXNlU3RhdGUpKCExKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gdE4oZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gdE4oZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGE9b1swXSxpPW9bMV0sbD0oMCx4LnVzZVJlZikobnVsbCkscz0oMCx4LnVzZVJlZikobnVsbCk7cmV0dXJuKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7aWYocy5jdXJyZW50JiYoY2xlYXJUaW1lb3V0KHMuY3VycmVudCkscy5jdXJyZW50PW51bGwpLGUpbnVsbD09PWwuY3VycmVudCYmKGwuY3VycmVudD1EYXRlLm5vdygpKSxpKCEwKTtlbHNlIGlmKG51bGw9PT1sLmN1cnJlbnQpaSghMSk7ZWxzZXt2YXIgbj1EYXRlLm5vdygpLWwuY3VycmVudCx0PXIqTWF0aC5jZWlsKG4vciktbjt0PjA/cy5jdXJyZW50PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpKCExKSxsLmN1cnJlbnQ9bnVsbH0sdCk6KGkoITEpLGwuY3VycmVudD1udWxsKX1yZXR1cm4gZnVuY3Rpb24oKXtzLmN1cnJlbnQmJmNsZWFyVGltZW91dChzLmN1cnJlbnQpfX0sW2Uscl0pLGF9ZnVuY3Rpb24gdEIoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHRNKGUpe3ZhciBuLHQscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxvPSgwLHgudXNlUmVmKShudWxsKSxhPShuPSgwLHgudXNlU3RhdGUpKCExKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gdEIoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gdEIoZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGk9YVswXSxsPWFbMV07cmV0dXJuKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7aWYoZT4wKXt2YXIgbj1vLmN1cnJlbnQ/RGF0ZS5ub3coKS1vLmN1cnJlbnQ6LTE7aWYoby5jdXJyZW50PURhdGUubm93KCksIShuPD1yKSl7bCghMCk7dmFyIHQ9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtsKCExKX0scik7cmV0dXJuIGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHQpfX19fSxbZSxyXSksaX1mdW5jdGlvbiB0SShlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gdEgoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHRJKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHRJKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHRGKGUpe3ZhciBuPXRIKCgwLHgudXNlU3RhdGUpKDApLDIpLHQ9blswXSxyPW5bMV07cmV0dXJuKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIG49ZS5jdXJyZW50O2lmKG4pe3ZhciB0PW5ldyBSZXNpemVPYnNlcnZlcihmdW5jdGlvbihlKXtyKHRIKGUsMSlbMF0uY29udGVudFJlY3Qud2lkdGgpfSk7cmV0dXJuIHQub2JzZXJ2ZShuKSxmdW5jdGlvbigpe3JldHVybiB0LmRpc2Nvbm5lY3QoKX19fSxbZV0pLHR9ZnVuY3Rpb24gdFUoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHRWKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiB0cShlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9ZnVuY3Rpb24gdFcoZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfWZ1bmN0aW9uIHQkKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0VShlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiB0VShlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiB0Wigpe3ZhciBlLG4sdD0oZT1bXCJcXG4gICAgICAgICAgW2RhdGEtbmV4dC1iYWRnZS1yb290XSB7XFxuICAgICAgICAgICAgLS10aW1pbmc6IGN1YmljLWJlemllcigwLjIzLCAwLjg4LCAwLjI2LCAwLjkyKTtcXG4gICAgICAgICAgICAtLWR1cmF0aW9uLWxvbmc6IDI1MG1zO1xcbiAgICAgICAgICAgIC0tY29sb3Itb3V0ZXItYm9yZGVyOiAjMTcxNzE3O1xcbiAgICAgICAgICAgIC0tY29sb3ItaW5uZXItYm9yZGVyOiBoc2xhKDAsIDAlLCAxMDAlLCAwLjE0KTtcXG4gICAgICAgICAgICAtLWNvbG9yLWhvdmVyLWFscGhhLXN1YnRsZTogaHNsYSgwLCAwJSwgMTAwJSwgMC4xMyk7XFxuICAgICAgICAgICAgLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4yKTtcXG4gICAgICAgICAgICAtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yLTI6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMjUpO1xcbiAgICAgICAgICAgIC0tbWFyay1zaXplOiBjYWxjKHZhcigtLXNpemUpIC0gdmFyKC0tc2l6ZS0yKSAqIDIpO1xcblxcbiAgICAgICAgICAgIC0tZm9jdXMtY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtODAwKTtcXG4gICAgICAgICAgICAtLWZvY3VzLXJpbmc6IDJweCBzb2xpZCB2YXIoLS1mb2N1cy1jb2xvcik7XFxuXFxuICAgICAgICAgICAgJjpoYXMoW2RhdGEtbmV4dC1iYWRnZV1bZGF0YS1lcnJvcj0ndHJ1ZSddKSB7XFxuICAgICAgICAgICAgICAtLWZvY3VzLWNvbG9yOiAjZmZmO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1kaXNhYmxlZC1pY29uXSB7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDRweDtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1uZXh0LWJhZGdlXSB7XFxuICAgICAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUpO1xcbiAgICAgICAgICAgIGhlaWdodDogdmFyKC0tc2l6ZSk7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7XFxuICAgICAgICAgICAgYm94LXNoYWRvdzpcXG4gICAgICAgICAgICAgIDAgMCAwIDFweCB2YXIoLS1jb2xvci1vdXRlci1ib3JkZXIpLFxcbiAgICAgICAgICAgICAgaW5zZXQgMCAwIDAgMXB4IHZhcigtLWNvbG9yLWlubmVyLWJvcmRlciksXFxuICAgICAgICAgICAgICAwcHggMTZweCAzMnB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjI0KTtcXG4gICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNDhweCk7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgc2NhbGU6IDE7XFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgICAgICB3aWxsLWNoYW5nZTogc2NhbGUsIGJveC1zaGFkb3csIHdpZHRoLCBiYWNrZ3JvdW5kO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb246XFxuICAgICAgICAgICAgICBzY2FsZSB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgdmFyKC0tdGltaW5nKSxcXG4gICAgICAgICAgICAgIHdpZHRoIHZhcigtLWR1cmF0aW9uLWxvbmcpIHZhcigtLXRpbWluZyksXFxuICAgICAgICAgICAgICBib3gtc2hhZG93IHZhcigtLWR1cmF0aW9uLWxvbmcpIHZhcigtLXRpbWluZyksXFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLXNob3J0KSBlYXNlO1xcblxcbiAgICAgICAgICAgICY6YWN0aXZlW2RhdGEtZXJyb3I9J2ZhbHNlJ10ge1xcbiAgICAgICAgICAgICAgc2NhbGU6IDAuOTU7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICZbZGF0YS1hbmltYXRlPSd0cnVlJ106bm90KDpob3Zlcikge1xcbiAgICAgICAgICAgICAgc2NhbGU6IDEuMDI7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICZbZGF0YS1lcnJvcj0nZmFsc2UnXTpoYXMoW2RhdGEtbmV4dC1tYXJrXTpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAzcHg7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICZbZGF0YS1lcnJvcj0ndHJ1ZSddIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNjYTJhMzA7XFxuICAgICAgICAgICAgICAtLWNvbG9yLWlubmVyLWJvcmRlcjogI2U1NDg0ZDtcXG5cXG4gICAgICAgICAgICAgIFtkYXRhLW5leHQtbWFya10ge1xcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvcik7XFxuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwcHg7XFxuXFxuICAgICAgICAgICAgICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3ItMik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJltkYXRhLWVycm9yLWV4cGFuZGVkPSdmYWxzZSddW2RhdGEtZXJyb3I9J3RydWUnXSB+IFtkYXRhLWRvdF0ge1xcbiAgICAgICAgICAgICAgc2NhbGU6IDE7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgID4gZGl2IHtcXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb2xsYXBzZV06Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzXTpoYXMoW2RhdGEtaXNzdWVzLW9wZW5dOmZvY3VzLXZpc2libGUpIHtcXG4gICAgICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1kb3RdIHtcXG4gICAgICAgICAgICBjb250ZW50OiAnJztcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tc2l6ZS04KTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtOCk7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcXG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggdmFyKC0tY29sb3Itb3V0ZXItYm9yZGVyKTtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICAgIHRvcDogMnB4O1xcbiAgICAgICAgICAgIHJpZ2h0OiAwcHg7XFxuICAgICAgICAgICAgc2NhbGU6IDA7XFxuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogc2NhbGUgMjAwbXMgdmFyKC0tdGltaW5nKTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1kdXJhdGlvbi1zaG9ydCk7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzXSB7XFxuICAgICAgICAgICAgLS1wYWRkaW5nLWxlZnQ6IDhweDtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGdhcDogMnB4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7XFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgICAgICAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0zMik7XFxuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLXNob3J0KSBlYXNlO1xcblxcbiAgICAgICAgICAgICY6aGFzKFtkYXRhLWlzc3Vlcy1vcGVuXTpob3Zlcikge1xcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3IpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmOmhhcyhbZGF0YS1pc3N1ZXMtY29sbGFwc2VdKSB7XFxuICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBjYWxjKHZhcigtLXBhZGRpbmctbGVmdCkgLyAyKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgW2RhdGEtY3Jvc3NdIHtcXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZTogMHB4IC0xcHg7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlcy1vcGVuXSB7XFxuICAgICAgICAgICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEzKTtcXG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7XFxuICAgICAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGdhcDogMnB4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTM2KTtcXG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICAgICAgICAgIHotaW5kZXg6IDI7XFxuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG5cXG4gICAgICAgICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvbGxhcHNlXSB7XFxuICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtMjQpO1xcbiAgICAgICAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLXNob3J0KSBlYXNlO1xcblxcbiAgICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3IpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1jcm9zc10ge1xcbiAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTIpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLW5leHQtbWFya10ge1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1tYXJrLXNpemUpO1xcbiAgICAgICAgICAgIGhlaWdodDogdmFyKC0tbWFyay1zaXplKTtcXG4gICAgICAgICAgICBtYXJnaW46IDAgMnB4O1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tbG9uZykgdmFyKC0tdGltaW5nKTtcXG5cXG4gICAgICAgICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ob3Zlci1hbHBoYS1zdWJ0bGUpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBzdmcge1xcbiAgICAgICAgICAgICAgZmxleC1zaHJpbms6IDA7XFxuICAgICAgICAgICAgICB3aWR0aDogdmFyKC0tc2l6ZS00MCk7XFxuICAgICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtNDApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtYW5pbWF0aW9uXSB7XFxuICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcXG4gICAgICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyIGNlbnRlcjtcXG4gICAgICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xcblxcbiAgICAgICAgICAgICZbZGF0YS1hbmltYXRlPSdmYWxzZSddIHtcXG4gICAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1leGl0XSxcXG4gICAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1lbnRlcl0ge1xcbiAgICAgICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDBtcztcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgPiAqIHtcXG4gICAgICAgICAgICAgIGdyaWQtYXJlYTogMSAvIDE7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1leGl0XSB7XFxuICAgICAgICAgICAgICBhbmltYXRpb246IGZhZGVPdXQgMzAwbXMgdmFyKC0tdGltaW5nKSBmb3J3YXJkcztcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWVudGVyXSB7XFxuICAgICAgICAgICAgICBhbmltYXRpb246IGZhZGVJbiAzMDBtcyB2YXIoLS10aW1pbmcpIGZvcndhcmRzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtcGx1cmFsXSB7XFxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgICAgICAgICZbZGF0YS1hbmltYXRlPSd0cnVlJ10ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMzAwbXMgdmFyKC0tdGltaW5nKSBmb3J3YXJkcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgLnBhdGgwIHtcXG4gICAgICAgICAgICBhbmltYXRpb246IGRyYXcwIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgLnBhdGgxIHtcXG4gICAgICAgICAgICBhbmltYXRpb246IGRyYXcxIDEuNXMgZWFzZS1vdXQgaW5maW5pdGU7XFxuICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwLjNzO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIC5wYXVzZWQge1xcbiAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZUluIHtcXG4gICAgICAgICAgICAwJSB7XFxuICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgICAgICAgZmlsdGVyOiBibHVyKDJweCk7XFxuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xcbiAgICAgICAgICAgICAgZmlsdGVyOiBibHVyKDBweCk7XFxuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZU91dCB7XFxuICAgICAgICAgICAgMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigwcHgpO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAxMDAlIHtcXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEycHgpO1xcbiAgICAgICAgICAgICAgZmlsdGVyOiBibHVyKDJweCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBrZXlmcmFtZXMgZHJhdzAge1xcbiAgICAgICAgICAgIDAlLFxcbiAgICAgICAgICAgIDI1JSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogLTI5LjY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDI1JSxcXG4gICAgICAgICAgICA1MCUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDUwJSxcXG4gICAgICAgICAgICA3NSUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDc1JSxcXG4gICAgICAgICAgICAxMDAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAyOS42O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGRyYXcxIHtcXG4gICAgICAgICAgICAwJSxcXG4gICAgICAgICAgICAyMCUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMS42O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAyMCUsXFxuICAgICAgICAgICAgNTAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA1MCUsXFxuICAgICAgICAgICAgNzUlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA3NSUsXFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMTEuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKSB7XFxuICAgICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWV4aXRdLFxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1lbnRlcl0sXFxuICAgICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LXBsdXJhbF0ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwbXMgIWltcG9ydGFudDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIFwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiB0Wj1mdW5jdGlvbigpe3JldHVybiB0fSx0fXZhciB0WT0oMCx4LmZvcndhcmRSZWYpKGZ1bmN0aW9uKGUsbil7dmFyIHQ9ZS5kaXNhYmxlZCxyPWUuaXNzdWVDb3VudCxvPWUuaXNEZXZCdWlsZGluZyxhPWUuaXNEZXZSZW5kZXJpbmcsaT1lLmlzQnVpbGRFcnJvcixsPWUub25UcmlnZ2VyQ2xpY2sscz1lLnRvZ2dsZUVycm9yT3ZlcmxheSxjPWUuc2NhbGUsdT10VyhlLFtcImRpc2FibGVkXCIsXCJpc3N1ZUNvdW50XCIsXCJpc0RldkJ1aWxkaW5nXCIsXCJpc0RldlJlbmRlcmluZ1wiLFwiaXNCdWlsZEVycm9yXCIsXCJvblRyaWdnZXJDbGlja1wiLFwidG9nZ2xlRXJyb3JPdmVybGF5XCIsXCJzY2FsZVwiXSksZD1yPjAsZj10JCgoMCx4LnVzZVN0YXRlKShkKSwyKSxwPWZbMF0saD1mWzFdLGc9dCQoKDAseC51c2VTdGF0ZSkoITEpLDIpLG09Z1swXSx2PWdbMV0sYj10TShyLDE1MCksdz0oMCx4LnVzZVJlZikobnVsbCksaj0oMCx4LnVzZVJlZikobnVsbCksaz10RihqKSxBPXREKG98fGEpLE89cHx8dDtyZXR1cm4oMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXtoKGQpfSxbZF0pLCgwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHQtYmFkZ2Utcm9vdFwiOiEwLHN0eWxlOntcIi0tc2l6ZVwiOlwiXCIuY29uY2F0KDM2Lyh2b2lkIDA9PT1jPzE6YyksXCJweFwiKSxcIi0tZHVyYXRpb24tc2hvcnRcIjpcIlwiLmNvbmNhdCgxNTAsXCJtc1wiKSxkaXNwbGF5OnQmJighZHx8bSk/XCJub25lXCI6XCJibG9ja1wifSxjaGlsZHJlbjpbKDAseS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZWkodFooKSl9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHQtYmFkZ2VcIjohMCxcImRhdGEtZXJyb3JcIjpkLFwiZGF0YS1lcnJvci1leHBhbmRlZFwiOk8sXCJkYXRhLWFuaW1hdGVcIjpiLHN0eWxlOnt3aWR0aDowPT09az9cImF1dG9cIjprfSxjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse3JlZjpqLGNoaWxkcmVuOlshdCYmKDAseS5qc3gpKFwiYnV0dG9uXCIsdHEodFYoe3JlZjpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoZSksdD0wO3Q8ZTt0Kyspblt0XT1hcmd1bWVudHNbdF07dmFyIHI9bi5maWx0ZXIoQm9vbGVhbik7cmV0dXJuIHIubGVuZ3RoPD0xP3JbMF18fG51bGw6ZnVuY3Rpb24oZSl7dmFyIG49ITAsdD0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGk9cltTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPWkubmV4dCgpKS5kb25lKTtuPSEwKXt2YXIgbD1hLnZhbHVlO1wiZnVuY3Rpb25cIj09dHlwZW9mIGw/bChlKTpsJiYobC5jdXJyZW50PWUpfX1jYXRjaChlKXt0PSEwLG89ZX1maW5hbGx5e3RyeXtufHxudWxsPT1pLnJldHVybnx8aS5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgb319fX0odyxuKSxcImRhdGEtbmV4dC1tYXJrXCI6ITAsXCJkYXRhLW5leHQtbWFyay1sb2FkaW5nXCI6QSxvbkNsaWNrOmx9LHUpLHtjaGlsZHJlbjooMCx5LmpzeCkodEsse2lzTG9hZGluZzpBLGlzRGV2QnVpbGRpbmc6b30pfSkpLE8mJigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLWlzc3Vlc1wiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiYnV0dG9uXCIse1wiZGF0YS1pc3N1ZXMtb3BlblwiOiEwLFwiYXJpYS1sYWJlbFwiOlwiT3BlbiBpc3N1ZXMgb3ZlcmxheVwiLG9uQ2xpY2s6cyxjaGlsZHJlbjpbdCYmKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1kaXNhYmxlZC1pY29uXCI6ITAsY2hpbGRyZW46KDAseS5qc3gpKHRRLHt9KX0pLCgwLHkuanN4KSh0WCx7YW5pbWF0ZTpiLFwiZGF0YS1pc3N1ZXMtY291bnQtYW5pbWF0aW9uXCI6ITAsY2hpbGRyZW46cn0sciksXCIgXCIsKDAseS5qc3hzKShcImRpdlwiLHtjaGlsZHJlbjpbXCJJc3N1ZVwiLHI+MSYmKDAseS5qc3gpKFwic3BhblwiLHtcImFyaWEtaGlkZGVuXCI6ITAsXCJkYXRhLWlzc3Vlcy1jb3VudC1wbHVyYWxcIjohMCxcImRhdGEtYW5pbWF0ZVwiOmImJjI9PT1yLGNoaWxkcmVuOlwic1wifSldfSldfSksIWkmJigwLHkuanN4KShcImJ1dHRvblwiLHtcImRhdGEtaXNzdWVzLWNvbGxhcHNlXCI6ITAsXCJhcmlhLWxhYmVsXCI6XCJDb2xsYXBzZSBpc3N1ZXMgYmFkZ2VcIixvbkNsaWNrOmZ1bmN0aW9uKCl7dmFyIGU7dD92KCEwKTpoKCExKSxudWxsPT0oZT13LmN1cnJlbnQpfHxlLmZvY3VzKCl9LGNoaWxkcmVuOigwLHkuanN4KSh0Ryx7XCJkYXRhLWNyb3NzXCI6ITB9KX0pXX0pXX0pfSksKDAseS5qc3gpKFwiZGl2XCIse1wiYXJpYS1oaWRkZW5cIjohMCxcImRhdGEtZG90XCI6ITB9KV19KX0pO2Z1bmN0aW9uIHRYKGUpe3ZhciBuPWUuY2hpbGRyZW4sdD1lLmFuaW1hdGUscj10VyhlLFtcImNoaWxkcmVuXCIsXCJhbmltYXRlXCJdKTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIsdHEodFYoe30scikse1wiZGF0YS1hbmltYXRlXCI6dm9pZCAwPT09dHx8dCxjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse1wiYXJpYS1oaWRkZW5cIjohMCxcImRhdGEtaXNzdWVzLWNvdW50LWV4aXRcIjohMCxjaGlsZHJlbjpuLTF9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLWlzc3Vlcy1jb3VudFwiOiEwLFwiZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJcIjohMCxjaGlsZHJlbjpufSldfSkpfWZ1bmN0aW9uIHRLKGUpe3ZhciBuPWUuaXNMb2FkaW5nLHQ9ZS5pc0RldkJ1aWxkaW5nP1wicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCI6XCJ3aGl0ZVwiO3JldHVybigwLHkuanN4cykoXCJzdmdcIix7d2lkdGg6XCI0MFwiLGhlaWdodDpcIjQwXCIsdmlld0JveDpcIjAgMCA0MCA0MFwiLGZpbGw6XCJub25lXCIsXCJkYXRhLW5leHQtbWFyay1sb2FkaW5nXCI6bixjaGlsZHJlbjpbKDAseS5qc3hzKShcImdcIix7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDguNSwgMTMpXCIsY2hpbGRyZW46WygwLHkuanN4KShcInBhdGhcIix7Y2xhc3NOYW1lOm4/XCJwYXRoMFwiOlwicGF1c2VkXCIsZDpcIk0xMy4zIDE1LjIgTDIuMzQgMSBWMTIuNlwiLGZpbGw6XCJub25lXCIsc3Ryb2tlOlwidXJsKCNuZXh0X2xvZ29fcGFpbnQwX2xpbmVhcl8xMzU3XzEwODUzKVwiLHN0cm9rZVdpZHRoOlwiMS44NlwiLG1hc2s6XCJ1cmwoI25leHRfbG9nb19tYXNrMClcIixzdHJva2VEYXNoYXJyYXk6XCIyOS42XCIsc3Ryb2tlRGFzaG9mZnNldDpcIjI5LjZcIn0pLCgwLHkuanN4KShcInBhdGhcIix7Y2xhc3NOYW1lOm4/XCJwYXRoMVwiOlwicGF1c2VkXCIsZDpcIk0xMS44MjUgMS41IFYxMy4xXCIsc3Ryb2tlV2lkdGg6XCIxLjg2XCIsc3Ryb2tlOlwidXJsKCNuZXh0X2xvZ29fcGFpbnQxX2xpbmVhcl8xMzU3XzEwODUzKVwiLHN0cm9rZURhc2hhcnJheTpcIjExLjZcIixzdHJva2VEYXNob2Zmc2V0OlwiMTEuNlwifSldfSksKDAseS5qc3hzKShcImRlZnNcIix7Y2hpbGRyZW46WygwLHkuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5leHRfbG9nb19wYWludDBfbGluZWFyXzEzNTdfMTA4NTNcIix4MTpcIjkuOTU1NTVcIix5MTpcIjExLjEyMjZcIix4MjpcIjE1LjQ3NzhcIix5MjpcIjE3Ljk2NzFcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtzdG9wQ29sb3I6dH0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMC42MDQwNzJcIixzdG9wQ29sb3I6dCxzdG9wT3BhY2l0eTpcIjBcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMVwiLHN0b3BDb2xvcjp0LHN0b3BPcGFjaXR5OlwiMFwifSldfSksKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibmV4dF9sb2dvX3BhaW50MV9saW5lYXJfMTM1N18xMDg1M1wiLHgxOlwiMTEuODIyMlwiLHkxOlwiMS40MDAzOVwiLHgyOlwiMTEuNzkxXCIseTI6XCI5LjYyNTQyXCIsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY2hpbGRyZW46WygwLHkuanN4KShcInN0b3BcIix7c3RvcENvbG9yOnR9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIjFcIixzdG9wQ29sb3I6dCxzdG9wT3BhY2l0eTpcIjBcIn0pXX0pLCgwLHkuanN4cykoXCJtYXNrXCIse2lkOlwibmV4dF9sb2dvX21hc2swXCIsY2hpbGRyZW46WygwLHkuanN4KShcInJlY3RcIix7d2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwiLGZpbGw6XCJ3aGl0ZVwifSksKDAseS5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjVcIixoZWlnaHQ6XCIxLjVcIixmaWxsOlwiYmxhY2tcIn0pXX0pXX0pXX0pfWZ1bmN0aW9uIHRRKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMy45ODA3MSAxLjEyNUwxLjEyNSAzLjk4MDcxTDEuMTI1IDguMDE5MjlMMy45ODA3MSAxMC44NzVIOC4wMTkyOUwxMC44NzUgOC4wMTkyOVYzLjk4MDcxTDguMDE5MjkgMS4xMjVIMy45ODA3MVpNMy44MjUzOCAwQzMuNjI2NDcgMCAzLjQzNTcgMC4wNzkwMTc2IDMuMjk1MDUgMC4yMTk2N0wwLjIxOTY3IDMuMjk1MDVDMC4wNzkwMTc2IDMuNDM1NyAwIDMuNjI2NDcgMCAzLjgyNTM4VjguMTc0NjJDMCA4LjM3MzUzIDAuMDc5MDE3OCA4LjU2NDMgMC4yMTk2NyA4LjcwNDk1TDMuMjk1MDUgMTEuNzgwM0MzLjQzNTcgMTEuOTIxIDMuNjI2NDcgMTIgMy44MjUzOCAxMkg4LjE3NDYyQzguMzczNTMgMTIgOC41NjQzIDExLjkyMSA4LjcwNDk1IDExLjc4MDNMMTEuNzgwMyA4LjcwNDk1QzExLjkyMSA4LjU2NDMgMTIgOC4zNzM1MyAxMiA4LjE3NDYyVjMuODI1MzhDMTIgMy42MjY0NyAxMS45MjEgMy40MzU3IDExLjc4MDMgMy4yOTUwNUw4LjcwNDk1IDAuMjE5NjdDOC41NjQzIDAuMDc5MDE3NyA4LjM3MzUzIDAgOC4xNzQ2MiAwSDMuODI1MzhaTTYuNTYyNSAyLjgxMjVWMy4zNzVWNlY2LjU2MjVINS40Mzc1VjZWMy4zNzVWMi44MTI1SDYuNTYyNVpNNiA5QzYuNDE0MjEgOSA2Ljc1IDguNjY0MjEgNi43NSA4LjI1QzYuNzUgNy44MzU3OSA2LjQxNDIxIDcuNSA2IDcuNUM1LjU4NTc5IDcuNSA1LjI1IDcuODM1NzkgNS4yNSA4LjI1QzUuMjUgOC42NjQyMSA1LjU4NTc5IDkgNiA5WlwiLGZpbGw6XCIjRUFFQUVBXCJ9KX0pfWZ1bmN0aW9uIHRHKGUpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHRxKHRWKHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMy4wODg4OSAxMS44Mzg0TDIuNjI0ODYgMTIuMzAyNEwxLjY5Njc4IDExLjM3NDRMMi4xNjA4MiAxMC45MTAzTDYuMDcxNzggNi45OTkzN0wyLjE2MDgyIDMuMDg4NDFMMS42OTY3OCAyLjYyNDM3TDIuNjI0ODYgMS42OTYyOUwzLjA4ODg5IDIuMTYwMzNMNi45OTk4NiA2LjA3MTI5TDEwLjkxMDggMi4xNjAzM0wxMS4zNzQ5IDEuNjk2MjlMMTIuMzAyOSAyLjYyNDM3TDExLjgzODkgMy4wODg0MUw3LjkyNzkzIDYuOTk5MzdMMTEuODM4OSAxMC45MTAzTDEyLjMwMjkgMTEuMzc0NEwxMS4zNzQ5IDEyLjMwMjRMMTAuOTEwOCAxMS44Mzg0TDYuOTk5ODYgNy45Mjc0NEwzLjA4ODg5IDExLjgzODRaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSl9dmFyIHRKPV9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2hvb2tzL3VzZS1kZWxheWVkLXJlbmRlci50c1wiKSx0MD1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL2Rldi10b29scy1pbmZvL2Rldi10b29scy1pbmZvLnRzeFwiKTtmdW5jdGlvbiB0MShlKXt2YXIgbix0O3JldHVybigwLHkuanN4cykodDAueCwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt0aXRsZTpcIlR1cmJvcGFja1wiLGxlYXJuTW9yZUxpbms6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS90dXJib3BhY2tcIn0sZSksdD10PXtjaGlsZHJlbjpbKDAseS5qc3hzKShcImFydGljbGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tYXJ0aWNsZVwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJUdXJib3BhY2sgaXMgYW4gaW5jcmVtZW50YWwgYnVuZGxlciBvcHRpbWl6ZWQgZm9yIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQsIHdyaXR0ZW4gaW4gUnVzdCwgYW5kIGJ1aWx0IGludG8gTmV4dC5qcy4gVHVyYm9wYWNrIGNhbiBiZSB1c2VkIGluIE5leHQuanMgaW4gYm90aCB0aGVcIixcIiBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcInBhZ2VzXCJ9KSxcIiBhbmRcIixcIiBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcImFwcFwifSksXCIgZGlyZWN0b3JpZXMgZm9yIGZhc3RlciBsb2NhbCBkZXZlbG9wbWVudC5cIl19KSwoMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJUbyBlbmFibGUgVHVyYm9wYWNrLCB1c2UgdGhlXCIsXCIgXCIsKDAseS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46XCItLXR1cmJvcGFja1wifSksXCIgZmxhZyB3aGVuIHJ1bm5pbmcgdGhlIE5leHQuanMgZGV2ZWxvcG1lbnQgc2VydmVyLlwiXX0pXX0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWNvbnRhaW5lclwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9ja1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkoZTMse2FjdGlvbkxhYmVsOlwiQ29weSBOZXh0LmpzIFR1cmJvcGFjayBDb21tYW5kXCIsc3VjY2Vzc0xhYmVsOlwiTmV4dC5qcyBUdXJib3BhY2sgQ29tbWFuZCBDb3BpZWRcIixjb250ZW50OlwiLS10dXJib3BhY2tcIixjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb3B5LWJ1dHRvblwifSksKDAseS5qc3gpKFwicHJlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stcHJlXCIsY2hpbGRyZW46KDAseS5qc3hzKShcImNvZGVcIix7Y2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpcIiAgXCJ9KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46XCJ7XCJ9KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOltcIiAgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24ta2V5XCIsY2hpbGRyZW46J1wic2NyaXB0c1wiJ30pLFwiOiBcIixcIntcIl19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZSBkZXYtdG9vbHMtaW5mby1oaWdobGlnaHRcIixjaGlsZHJlbjpbXCIgICAgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24ta2V5XCIsY2hpbGRyZW46J1wiZGV2XCInfSksXCI6XCIsXCIgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24tdmFsdWVcIixjaGlsZHJlbjonXCJuZXh0IGRldiAtLXR1cmJvcGFja1wiJ30pLFwiLFwiXX0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46W1wiICAgIFwiLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLWtleVwiLGNoaWxkcmVuOidcImJ1aWxkXCInfSksXCI6XCIsXCIgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24tdmFsdWVcIixjaGlsZHJlbjonXCJuZXh0IGJ1aWxkXCInfSksXCIsXCJdfSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpbXCIgICAgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24ta2V5XCIsY2hpbGRyZW46J1wic3RhcnRcIid9KSxcIjpcIixcIiBcIiwoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi12YWx1ZVwiLGNoaWxkcmVuOidcIm5leHQgc3RhcnRcIid9KSxcIixcIl19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOltcIiAgICBcIiwoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi1rZXlcIixjaGlsZHJlbjonXCJsaW50XCInfSksXCI6XCIsXCIgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24tdmFsdWVcIixjaGlsZHJlbjonXCJuZXh0IGxpbnRcIid9KV19KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46XCIgIH1cIn0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpcIn1cIn0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpcIiAgXCJ9KV19KX0pXX0pfSldfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiB0MihlKXt2YXIgbj1lLnJvdXRlclR5cGU7cmV0dXJuKDAseS5qc3hzKShcImFydGljbGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tYXJ0aWNsZVwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJUaGUgcGF0aFwiLFwiIFwiLCgwLHkuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOndpbmRvdy5sb2NhdGlvbi5wYXRobmFtZX0pLFwiIFwiLCdpcyBtYXJrZWQgYXMgXCJzdGF0aWNcIiBzaW5jZSBpdCB3aWxsIGJlIHByZXJlbmRlcmVkIGR1cmluZyB0aGUgYnVpbGQgdGltZS4nXX0pLCgwLHkuanN4cykoXCJwXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXBhcmFncmFwaFwiLGNoaWxkcmVuOltcIldpdGggU3RhdGljIFJlbmRlcmluZywgcm91dGVzIGFyZSByZW5kZXJlZCBhdCBidWlsZCB0aW1lLCBvciBpbiB0aGUgYmFja2dyb3VuZCBhZnRlclwiLFwiIFwiLCgwLHkuanN4KShcImFcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tbGlua1wiLGhyZWY6XCJwYWdlc1wiPT09bj9cImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vZGF0YS1mZXRjaGluZy9pbmNyZW1lbnRhbC1zdGF0aWMtcmVnZW5lcmF0aW9uXCI6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL2luY3JlbWVudGFsLXN0YXRpYy1yZWdlbmVyYXRpb25cIix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsY2hpbGRyZW46XCJkYXRhIHJldmFsaWRhdGlvblwifSksXCIuXCJdfSksKDAseS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpcIlN0YXRpYyByZW5kZXJpbmcgaXMgdXNlZnVsIHdoZW4gYSByb3V0ZSBoYXMgZGF0YSB0aGF0IGlzIG5vdCBwZXJzb25hbGl6ZWQgdG8gdGhlIHVzZXIgYW5kIGNhbiBiZSBrbm93biBhdCBidWlsZCB0aW1lLCBzdWNoIGFzIGEgc3RhdGljIGJsb2cgcG9zdCBvciBhIHByb2R1Y3QgcGFnZS5cIn0pXX0pfWZ1bmN0aW9uIHQ0KGUpe3ZhciBuPWUucm91dGVyVHlwZTtyZXR1cm4oMCx5LmpzeHMpKFwiYXJ0aWNsZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1hcnRpY2xlXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJwXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXBhcmFncmFwaFwiLGNoaWxkcmVuOltcIlRoZSBwYXRoXCIsXCIgXCIsKDAseS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfSksXCIgXCIsJ2lzIG1hcmtlZCBhcyBcImR5bmFtaWNcIiBzaW5jZSBpdCB3aWxsIGJlIHJlbmRlcmVkIGZvciBlYWNoIHVzZXIgYXQnLFwiIFwiLCgwLHkuanN4KShcInN0cm9uZ1wiLHtjaGlsZHJlbjpcInJlcXVlc3QgdGltZVwifSksXCIuXCJdfSksKDAseS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpcIkR5bmFtaWMgcmVuZGVyaW5nIGlzIHVzZWZ1bCB3aGVuIGEgcm91dGUgaGFzIGRhdGEgdGhhdCBpcyBwZXJzb25hbGl6ZWQgdG8gdGhlIHVzZXIgb3IgaGFzIGluZm9ybWF0aW9uIHRoYXQgY2FuIG9ubHkgYmUga25vd24gYXQgcmVxdWVzdCB0aW1lLCBzdWNoIGFzIGNvb2tpZXMgb3IgdGhlIFVSTCdzIHNlYXJjaCBwYXJhbXMuXCJ9KSxcInBhZ2VzXCI9PT1uPygwLHkuanN4cykoXCJwXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXBhZ3JhcGhcIixjaGlsZHJlbjpbXCJFeHBvcnRpbmcgdGhlXCIsXCIgXCIsKDAseS5qc3gpKFwiYVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1saW5rXCIsaHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vZGF0YS1mZXRjaGluZy9nZXQtc2VydmVyLXNpZGUtcHJvcHNcIix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsY2hpbGRyZW46XCJnZXRTZXJ2ZXJTaWRlUHJvcHNcIn0pLFwiIFwiLFwiZnVuY3Rpb24gd2lsbCBvcHQgdGhlIHJvdXRlIGludG8gZHluYW1pYyByZW5kZXJpbmcuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNlcnZlciBvbiBldmVyeSByZXF1ZXN0LlwiXX0pOigwLHkuanN4cykoXCJwXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXBhcmFncmFwaFwiLGNoaWxkcmVuOltcIkR1cmluZyByZW5kZXJpbmcsIGlmIGFcIixcIiBcIiwoMCx5LmpzeCkoXCJhXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWxpbmtcIixocmVmOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3NlcnZlci1jb21wb25lbnRzI2R5bmFtaWMtYXBpc1wiLHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixjaGlsZHJlbjpcIkR5bmFtaWMgQVBJXCJ9KSxcIiBcIixcIm9yIGFcIixcIiBcIiwoMCx5LmpzeCkoXCJhXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWxpbmtcIixocmVmOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL2ZldGNoXCIsdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9vcGVuZXIgbm9yZWZlcnJlclwiLGNoaWxkcmVuOlwiZmV0Y2hcIn0pLFwiIFwiLFwib3B0aW9uIG9mXCIsXCIgXCIsKDAseS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46XCJ7IGNhY2hlOiAnbm8tc3RvcmUnIH1cIn0pLFwiIFwiLFwiaXMgZGlzY292ZXJlZCwgTmV4dC5qcyB3aWxsIHN3aXRjaCB0byBkeW5hbWljYWxseSByZW5kZXJpbmcgdGhlIHdob2xlIHJvdXRlLlwiXX0pXX0pfXZhciB0NT17cGFnZXM6e3N0YXRpYzpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3N0YXRpYy1zaXRlLWdlbmVyYXRpb25cIixkeW5hbWljOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvcGFnZXMvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc2VydmVyLXNpZGUtcmVuZGVyaW5nXCJ9LGFwcDp7c3RhdGljOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3NlcnZlci1jb21wb25lbnRzI3N0YXRpYy1yZW5kZXJpbmctZGVmYXVsdFwiLGR5bmFtaWM6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc2VydmVyLWNvbXBvbmVudHMjZHluYW1pYy1yZW5kZXJpbmdcIn19O2Z1bmN0aW9uIHQzKGUpe3ZhciBuLHQscj1lLnJvdXRlVHlwZSxvPWUucm91dGVyVHlwZSxhPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJyb3V0ZVR5cGVcIixcInJvdXRlclR5cGVcIl0pLGk9XCJTdGF0aWNcIj09PXIsbD1pP3Q1W29dLnN0YXRpYzp0NVtvXS5keW5hbWljO3JldHVybigwLHkuanN4KSh0MC54LChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3RpdGxlOlwiXCIuY29uY2F0KHIsXCIgUm91dGVcIiksbGVhcm5Nb3JlTGluazpsfSxhKSx0PXQ9e2NoaWxkcmVuOmk/KDAseS5qc3gpKHQyLHtyb3V0ZXJUeXBlOm99KTooMCx5LmpzeCkodDQse3JvdXRlclR5cGU6b30pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiB0Nigpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJub25lXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiY3VycmVudENvbG9yXCIsZmlsbFJ1bGU6XCJldmVub2RkXCIsZDpcIm05LjcgMy43MzYuMDQ1LS4yMzZoLjUxbC4wNDQuMjM2YTIuMDI0IDIuMDI0IDAgMCAwIDEuMzM0IDEuNTM2Yy4xOS4wNjYuMzc1LjE0My41NTQuMjMuNjE4LjMwMSAxLjM5OC4yOSAyLjAzLS4xNDNsLjE5OS0uMTM2LjM2LjM2MS0uMTM1LjE5OWEyLjAyNCAyLjAyNCAwIDAgMC0uMTQzIDIuMDNjLjA4Ny4xNzkuMTY0LjM2NC4yMy41NTQuMjI0LjY1Ljc4MyAxLjE5MiAxLjUzNiAxLjMzNGwuMjM2LjA0NHYuNTFsLS4yMzYuMDQ0YTIuMDI0IDIuMDI0IDAgMCAwLTEuNTM2IDEuMzM0IDQuOTUgNC45NSAwIDAgMS0uMjMuNTU0IDIuMDI0IDIuMDI0IDAgMCAwIC4xNDMgMi4wM2wuMTM2LjE5OS0uMzYxLjM2LS4xOTktLjEzNWEyLjAyNCAyLjAyNCAwIDAgMC0yLjAzLS4xNDNjLS4xNzkuMDg3LS4zNjQuMTY0LS41NTQuMjNhMi4wMjQgMi4wMjQgMCAwIDAtMS4zMzQgMS41MzZsLS4wNDQuMjM2aC0uNTFsLS4wNDQtLjIzNmEyLjAyNCAyLjAyNCAwIDAgMC0xLjMzNC0xLjUzNiA0Ljk1MiA0Ljk1MiAwIDAgMS0uNTU0LS4yMyAyLjAyNCAyLjAyNCAwIDAgMC0yLjAzLjE0M2wtLjE5OS4xMzYtLjM2LS4zNjEuMTM1LS4xOTlhMi4wMjQgMi4wMjQgMCAwIDAgLjE0My0yLjAzIDQuOTU4IDQuOTU4IDAgMCAxLS4yMy0uNTU0IDIuMDI0IDIuMDI0IDAgMCAwLTEuNTM2LTEuMzM0bC0uMjM2LS4wNDR2LS41MWwuMjM2LS4wNDRhMi4wMjQgMi4wMjQgMCAwIDAgMS41MzYtMS4zMzQgNC45NiA0Ljk2IDAgMCAxIC4yMy0uNTU0IDIuMDI0IDIuMDI0IDAgMCAwLS4xNDMtMi4wM2wtLjEzNi0uMTk5LjM2MS0uMzYuMTk5LjEzNWEyLjAyNCAyLjAyNCAwIDAgMCAyLjAzLjE0M2MuMTc5LS4wODcuMzY0LS4xNjQuNTU0LS4yM2EyLjAyNCAyLjAyNCAwIDAgMCAxLjMzNC0xLjUzNlpNOC41IDJoM2wuMjc0IDEuNDZjLjAzNC4xODUuMTcuMzMzLjM0OC4zOTQuMjQ4LjA4Ni40OS4xODYuNzIyLjMuMTcuMDgyLjM3LjA3NC41MjYtLjAzM2wxLjIyNi0uODM5IDIuMTIyIDIuMTIyLS44NCAxLjIyNmEuNTI0LjUyNCAwIDAgMC0uMDMyLjUyNmMuMTE0LjIzMy4yMTQuNDc0LjMuNzIyLjA2MS4xNzcuMjEuMzE0LjM5NC4zNDhMMTggOC41djNsLTEuNDYuMjc0YS41MjQuNTI0IDAgMCAwLS4zOTQuMzQ4IDYuNDcgNi40NyAwIDAgMS0uMy43MjIuNTI0LjUyNCAwIDAgMCAuMDMzLjUyNmwuODM5IDEuMjI2LTIuMTIyIDIuMTIyLTEuMjI2LS44NGEuNTI0LjUyNCAwIDAgMC0uNTI2LS4wMzIgNi40NzcgNi40NzcgMCAwIDEtLjcyMi4zLjUyNC41MjQgMCAwIDAtLjM0OC4zOTRMMTEuNSAxOGgtM2wtLjI3NC0xLjQ2YS41MjQuNTI0IDAgMCAwLS4zNDgtLjM5NCA2LjQ3NyA2LjQ3NyAwIDAgMS0uNzIyLS4zLjUyNC41MjQgMCAwIDAtLjUyNi4wMzNsLTEuMjI2LjgzOS0yLjEyMi0yLjEyMi44NC0xLjIyNmEuNTI0LjUyNCAwIDAgMCAuMDMyLS41MjYgNi40NTMgNi40NTMgMCAwIDEtLjMtLjcyMi41MjQuNTI0IDAgMCAwLS4zOTQtLjM0OEwyIDExLjV2LTNsMS40Ni0uMjc0YS41MjQuNTI0IDAgMCAwIC4zOTQtLjM0OGMuMDg2LS4yNDguMTg2LS40OS4zLS43MjJhLjUyNC41MjQgMCAwIDAtLjAzMy0uNTI2bC0uODM5LTEuMjI2IDIuMTIyLTIuMTIyIDEuMjI2Ljg0YS41MjQuNTI0IDAgMCAwIC41MjYuMDMyIDYuNDYgNi40NiAwIDAgMSAuNzIyLS4zLjUyNC41MjQgMCAwIDAgLjM0OC0uMzk0TDguNSAyWm0zIDhhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDBabTEuNSAwYTMgMyAwIDEgMS02IDAgMyAzIDAgMCAxIDYgMFpcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pfSl9ZnVuY3Rpb24gdDkoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLGZpbGw6XCJub25lXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiY3VycmVudENvbG9yXCIsZmlsbFJ1bGU6XCJldmVub2RkXCIsZDpcIm0uMTkxIDIuMDYzLjU2LjQ5OCAxMy41IDEyIC41NjEuNDk4Ljk5Ny0xLjEyMS0uNTYtLjQ5OC0xLjgxLTEuNjA4IDIuODgtMy4zNDJ2LS45OGwtMy4yMDQtMy43MkMxMC42NDUuOTIzIDYuMzY1LjY4NiAzLjU5NCAzLjA4TDEuNzQ4IDEuNDQgMS4xODguOTQuMTkgMi4wNjNaTTE0Ljc2MSA4bC0yLjQ0MiAyLjgzNi0xLjY1LTEuNDY2YTMuMDAxIDMuMDAxIDAgMCAwLTQuMzQyLTMuODZsLTEuNi0xLjQyMmE1LjI1MyA1LjI1MyAwIDAgMSA3LjI1MS42ODJMMTQuNzYgOFpNNy41MjYgNi41NzZsMS45NDIgMS43MjdhMS40OTkgMS40OTkgMCAwIDAtMS45NDItMS43MjdabS03Ljg0NS45MzUgMS43MjItMiAxLjEzNy45NzlMMS4yNCA4bDIuNzgyIDMuMjNBNS4yNSA1LjI1IDAgMCAwIDkuOSAxMi43MDNsLjU0IDEuNGE2Ljc1MSA2Ljc1MSAwIDAgMS03LjU1NS0xLjg5MkwtLjMxOCA4LjQ5di0uOThaXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KX0pfWZ1bmN0aW9uIHQ4KCl7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyMFwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIsY2hpbGRyZW46WygwLHkuanN4KShcImdcIix7Y2xpcFBhdGg6XCJ1cmwoI2xpZ2h0X2ljb25fY2xpcF9wYXRoKVwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOC43NS43NVYwaC0xLjV2MmgxLjVWLjc1Wk0zLjI2IDQuMzJsLS41My0uNTMtLjM1NC0uMzUzLS41My0uNTMgMS4wNi0xLjA2MS41My41My4zNTQuMzU0LjUzLjUzLTEuMDYgMS4wNlptOC40Mi0xLjA2LjUzLS41My4zNTMtLjM1NC41My0uNTMgMS4wNjEgMS4wNi0uNTMuNTMtLjM1NC4zNTQtLjUzLjUzLTEuMDYtMS4wNlpNOCAxMS4yNWEzLjI1IDMuMjUgMCAxIDAgMC02LjUgMy4yNSAzLjI1IDAgMCAwIDAgNi41Wm0wIDEuNWE0Ljc1IDQuNzUgMCAxIDAgMC05LjUgNC43NSA0Ljc1IDAgMCAwIDAgOS41Wm02LTUuNWgydjEuNWgtMnYtMS41Wm0tMTMuMjUgMEgwdjEuNWgydi0xLjVILjc1Wm0xLjYyIDUuMzItLjUzLjUzIDEuMDYgMS4wNi41My0uNTMuMzU0LS4zNTMuNTMtLjUzLTEuMDYtMS4wNjEtLjUzLjUzLS4zNTQuMzU0Wm0xMC4yIDEuMDYuNTMuNTMgMS4wNi0xLjA2LS41My0uNTMtLjM1NC0uMzU0LS41My0uNTMtMS4wNiAxLjA2LjUzLjUzLjM1My4zNTRaTTguNzUgMTR2MmgtMS41di0yaDEuNVpcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pfSksKDAseS5qc3gpKFwiZGVmc1wiLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJjbGlwUGF0aFwiLHtpZDpcImxpZ2h0X2ljb25fY2xpcF9wYXRoXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiY3VycmVudENvbG9yXCIsZDpcIk0wIDBoMTZ2MTZIMHpcIn0pfSl9KV19KX1mdW5jdGlvbiB0Nygpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHtcImRhdGEtdGVzdGlkXCI6XCJnZWlzdC1pY29uXCIsaGVpZ2h0OlwiMTZcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMS41IDguMDAwMDVDMS41IDUuNTMwODkgMi45OTE5OCAzLjQwOTMyIDUuMTIzNDkgMi40ODg4OUM0Ljg4MTM2IDMuMTk4NTggNC43NSAzLjk1OTM2IDQuNzUgNC43NTAxQzQuNzUgOC42MTYwOSA3Ljg4NDAxIDExLjc1MDEgMTEuNzUgMTEuNzUwMUMxMS44OTk1IDExLjc1MDEgMTIuMDQ4IDExLjc0NTQgMTIuMTk1MyAxMS43MzYxQzExLjA5NTUgMTMuMTE2NCA5LjQwMDQ3IDE0LjAwMDEgNy41IDE0LjAwMDFDNC4xODYyOSAxNC4wMDAxIDEuNSAxMS4zMTM4IDEuNSA4LjAwMDA1Wk02LjQxNzA2IDAuNTc3NzU5QzIuNzg3ODQgMS4xMDMxIDAgNC4yMjUzNiAwIDguMDAwMDVDMCAxMi4xNDIyIDMuMzU3ODYgMTUuNTAwMSA3LjUgMTUuNTAwMUMxMC41Nzk4IDE1LjUwMDEgMTMuMjI0NCAxMy42NDM4IDE0LjM3OTIgMTAuOTkyMUwxMy40NTg4IDkuOTc5N0MxMi45MjE4IDEwLjE1NSAxMi4zNDc4IDEwLjI1MDEgMTEuNzUgMTAuMjUwMUM4LjcxMjQzIDEwLjI1MDEgNi4yNSA3Ljc4NzY3IDYuMjUgNC43NTAxQzYuMjUgMy42MzQzMSA2LjU4MTQ2IDIuNTk4MjMgNy4xNTExMSAxLjczMjE3TDYuNDE3MDYgMC41Nzc3NTlaTTEzLjI1IDFWMS43NVYyLjc1TDE0LjI1IDIuNzVIMTVWNC4yNUgxNC4yNUgxMy4yNVY1LjI1VjZIMTEuNzVWNS4yNVY0LjI1SDEwLjc1TDEwIDQuMjVWMi43NUgxMC43NUwxMS43NSAyLjc1VjEuNzVWMUgxMy4yNVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIHJlKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGw6XCJjdXJyZW50Q29sb3JcIixmaWxsUnVsZTpcImV2ZW5vZGRcIixkOlwiTTAgMmExIDEgMCAwIDEgMS0xaDE0YTEgMSAwIDAgMSAxIDF2OC41YTEgMSAwIDAgMS0xIDFIOC43NXYzaDEuNzVWMTZoLTV2LTEuNWgxLjc1di0zSDFhMSAxIDAgMCAxLTEtMVYyWm0xLjUuNVYxMGgxM1YyLjVoLTEzWlwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSl9KX1mdW5jdGlvbiBybihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gcnQoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJuKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHJuKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfXZhciBycj1wcm9jZXNzLmVudi5fX05FWFRfREVWX0lORElDQVRPUl9QT1NJVElPTnx8XCJib3R0b20tbGVmdFwiLHJvPVwiX19uZXh0anNfaGlkZV9zaG9ydGN1dFwiO2Z1bmN0aW9uIHJhKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiByaShlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8cnMoZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBybChlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gcmEoZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8cnMoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHJzKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJhKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHJhKGUsbil9fWZ1bmN0aW9uIHJjKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgLnNob3J0Y3V0LXJlY29yZGVyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGdhcDogOHB4O1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLXNhbnMpO1xcblxcbiAgICAuc2hvcnRjdXQtcmVjb3JkZXItYnV0dG9uIHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgZ2FwOiA0cHg7XFxuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWNvbG9yLWdyYXktNTAwKTtcXG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWxnKTtcXG4gICAgICBwYWRkaW5nOiA2cHggOHB4O1xcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICAgICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMTUwbXMgdmFyKC0tdGltaW5nLXN3aWZ0KTtcXG5cXG4gICAgICAmW2RhdGEtaGFzLXNob3J0Y3V0PSd0cnVlJ10ge1xcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcblxcbiAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS01MDApO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICAmOmhvdmVyIHtcXG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS02MDApO1xcbiAgICAgIH1cXG5cXG4gICAgICAmOjpwbGFjZWhvbGRlciB7XFxuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICAgIH1cXG5cXG4gICAgICAmW2RhdGEtcHJpc3RpbmU9J2ZhbHNlJ106OnBsYWNlaG9sZGVyIHtcXG4gICAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgICB9XFxuXFxuICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGtiZCB7XFxuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICAgICAgbWluLXdpZHRoOiAyMHB4O1xcbiAgICAgIGhlaWdodDogMjBweDtcXG4gICAgICBmb250LXNpemU6IDE0cHg7XFxuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcblxcbiAgICAgICZbZGF0YS1zeW1ib2w9J2ZhbHNlJ10ge1xcbiAgICAgICAgcGFkZGluZzogMCA0cHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC5zaG9ydGN1dC1yZWNvcmRlci1jbGVhci1idXR0b24ge1xcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgICB3aWR0aDogMjBweDtcXG4gICAgICBoZWlnaHQ6IDIwcHg7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDE1MG1zIHZhcigtLXRpbWluZy1zd2lmdCk7XFxuXFxuICAgICAgJjpob3ZlciB7XFxuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICAgICAgfVxcblxcbiAgICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICB9XFxuXFxuICAgICAgc3ZnIHtcXG4gICAgICAgIHdpZHRoOiAxNHB4O1xcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblxcbiAgLnNob3J0Y3V0LXJlY29yZGVyLWtleXMge1xcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogMnB4O1xcbiAgfVxcblxcbiAgLnNob3J0Y3V0LXJlY29yZGVyLXRvb2x0aXAge1xcbiAgICAtLWdhcDogOHB4O1xcbiAgICAtLWJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBwYWRkaW5nOiA0cHggOHB4O1xcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiBjYWxjKDEwMCUgKyB2YXIoLS1nYXApKTtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICBzY2FsZTogMC45NjtcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgIHRyYW5zaXRpb246XFxuICAgICAgb3BhY2l0eSAxNTBtcyB2YXIoLS10aW1pbmctc3dpZnQpLFxcbiAgICAgIHNjYWxlIDE1MG1zIHZhcigtLXRpbWluZy1zd2lmdCk7XFxuXFxuICAgICZbZGF0YS1zaG93PSd0cnVlJ10ge1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgc2NhbGU6IDE7XFxuICAgIH1cXG5cXG4gICAgc3ZnIHtcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbiAgICAgIGJvdHRvbTogLTZweDtcXG4gICAgICBsZWZ0OiA1MCU7XFxuICAgIH1cXG5cXG4gICAgLnNob3J0Y3V0LXJlY29yZGVyLXN0YXR1cyB7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGdhcDogNnB4O1xcbiAgICB9XFxuXFxuICAgIC5zaG9ydGN1dC1yZWNvcmRlci1zdGF0dXMtaWNvbiB7XFxuICAgICAgd2lkdGg6IDdweDtcXG4gICAgICBoZWlnaHQ6IDdweDtcXG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgZmxleC1zaHJpbms6IDA7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcmVkLTcwMCk7XFxuXFxuICAgICAgJltkYXRhLXN1Y2Nlc3M9J3RydWUnXSB7XFxuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmVlbi03MDApO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiByYz1mdW5jdGlvbigpe3JldHVybiB0fSx0fXZhciBydT1bXCJNZXRhXCIsXCJDb250cm9sXCIsXCJDdHJsXCIsXCJBbHRcIixcIk9wdGlvblwiLFwiU2hpZnRcIl07ZnVuY3Rpb24gcmQoZSl7dmFyIG49ZS52YWx1ZSx0PWUub25DaGFuZ2Uscj1yaSgoMCx4LnVzZVN0YXRlKSghMSksMiksbz1yWzBdLGE9clsxXSxpPXJpKCgwLHgudXNlU3RhdGUpKG51bGwhPW4/bjpbXSksMiksbD1pWzBdLHM9aVsxXSxjPXJpKCgwLHgudXNlU3RhdGUpKCExKSwyKSx1PWNbMF0sZD1jWzFdLGY9KDAseC51c2VSZWYpKG51bGwpLHA9KDAseC51c2VSZWYpKG51bGwpLGg9ISFufHxsLmxlbmd0aD4wO2Z1bmN0aW9uIGcoKXt2YXIgZTtudWxsPT0oZT1wLmN1cnJlbnQpfHxlLmZvY3VzKCkscyhbXSksZCghMSksc2V0VGltZW91dChmdW5jdGlvbigpe2EoITApfSksdChudWxsKX1mdW5jdGlvbiBtKCl7dmFyIGU7Zi5jdXJyZW50JiZjbGVhclRpbWVvdXQoZi5jdXJyZW50KSxhKCEwKSxudWxsPT0oZT1wLmN1cnJlbnQpfHxlLmZvY3VzKCl9cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJzaG9ydGN1dC1yZWNvcmRlclwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiYnV0dG9uXCIse2NsYXNzTmFtZTpcInNob3J0Y3V0LXJlY29yZGVyLWJ1dHRvblwiLHJlZjpwLG9uQ2xpY2s6bSxvbkZvY3VzOm0sb25CbHVyOmZ1bmN0aW9uKCl7ZCghMSksYSghMSl9LG9uS2V5RG93bjpmdW5jdGlvbihlKXtlLnRhcmdldD09PXAuY3VycmVudCYmXCJUYWJcIiE9PWUua2V5JiYoZi5jdXJyZW50JiZjbGVhclRpbWVvdXQoZi5jdXJyZW50KSxvfHxhKCEwKSwzIT09bC5sZW5ndGgmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxzKGZ1bmN0aW9uKHQpe2lmKHQuaW5jbHVkZXMoZS5rZXkpKXJldHVybiB0O2lmKCFydS5pbmNsdWRlcyhlLmtleSkpe3ZhciByPXQuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiFydS5pbmNsdWRlcyhlKX0pO2lmKC0xIT09cil7dmFyIG89cmwodCk7cmV0dXJuIG9bcl09ZS5rZXksbihvKSxvfXZhciBhPXJsKHQpLmNvbmNhdChbZS5rZXldKTtyZXR1cm4gbihhKSxhfWZvcih2YXIgaT1ybCh0KSxsPXJ1LmluZGV4T2YoZS5rZXkpLHM9MCxjPTA7YzxpLmxlbmd0aDtjKyspaWYocnUuaW5jbHVkZXMoaVtjXSkpe2lmKGw8cnUuaW5kZXhPZihpW2NdKSl7cz1jO2JyZWFrfXM9YysxfWVsc2UgYnJlYWs7cmV0dXJuIGkuc3BsaWNlKHMsMCxlLmtleSksbihpKSxpfSkpKTtmdW5jdGlvbiBuKGUpe2YuY3VycmVudD13aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2QoITApLHQoZS5qb2luKFwiK1wiKSksZi5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YSghMSl9LDFlMyl9LDE4MCl9fSxcImRhdGEtaGFzLXNob3J0Y3V0XCI6aCxcImRhdGEtc2hvcnRjdXQtcmVjb3JkZXJcIjpcInRydWVcIixjaGlsZHJlbjpbaD8oMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2hvcnRjdXQtcmVjb3JkZXIta2V5c1wiLGNoaWxkcmVuOmwubWFwKGZ1bmN0aW9uKGUpe3JldHVybigwLHkuanN4KShycCx7Y2hpbGRyZW46ZX0sZSl9KX0pOlwiUmVjb3JkIFNob3J0Y3V0XCIsaCYmKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNob3J0Y3V0LXJlY29yZGVyLWNsZWFyLWJ1dHRvblwiLHJvbGU6XCJidXR0b25cIixvbkNsaWNrOmcsb25Gb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX0sb25LZXlEb3duOmZ1bmN0aW9uKGUpeyhcIkVudGVyXCI9PT1lLmtleXx8XCIgXCI9PT1lLmtleSkmJihnKCksZS5zdG9wUHJvcGFnYXRpb24oKSl9LFwiYXJpYS1sYWJlbFwiOlwiQ2xlYXIgc2hvcnRjdXRcIix0YWJJbmRleDowLGNoaWxkcmVuOigwLHkuanN4KShyZyx7fSl9KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNob3J0Y3V0LXJlY29yZGVyLXRvb2x0aXBcIixcImRhdGEtc2hvd1wiOm8sY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2hvcnRjdXQtcmVjb3JkZXItc3RhdHVzXCIsY2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJzaG9ydGN1dC1yZWNvcmRlci1zdGF0dXMtaWNvblwiLFwiZGF0YS1zdWNjZXNzXCI6dX0pLHU/XCJTaG9ydGN1dCBzZXRcIjpcIlJlY29yZGluZ1wiXX0pLCgwLHkuanN4KShyZix7fSldfSldfSl9ZnVuY3Rpb24gcmYoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7ZmlsbDpcIm5vbmVcIixoZWlnaHQ6XCI2XCIsdmlld0JveDpcIjAgMCAxNCA2XCIsd2lkdGg6XCIxNFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMTMuODI4NCAwSDAuMTcxNTdDMC43MDIwMDMgMCAxLjIxMDcxIDAuMjEwNzE0IDEuNTg1NzggMC41ODU3ODdMNS41ODU3OCA0LjU4NTc5QzYuMzY2ODMgNS4zNjY4NCA3LjYzMzE2IDUuMzY2ODMgOC40MTQyMSA0LjU4NTc5TDEyLjQxNDIgMC41ODU3ODZDMTIuNzg5MyAwLjIxMDcxNCAxMy4yOTggMCAxMy44Mjg0IDBaXCIsZmlsbDpcInZhcigtLWJhY2tncm91bmQpXCJ9KX0pfWZ1bmN0aW9uIHJwKGUpe3ZhciBuPWUuY2hpbGRyZW4sdD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZVwiTWV0YVwiOnJldHVybigwLHkuanN4KShyaCx7fSk7Y2FzZVwiQWx0XCI6Y2FzZVwiT3B0aW9uXCI6cmV0dXJuXCLijKVcIjtjYXNlXCJDb250cm9sXCI6Y2FzZVwiQ3RybFwiOnJldHVyblwiQ3RybFwiO2Nhc2VcIlNoaWZ0XCI6cmV0dXJuXCLih6dcIjtjYXNlXCJFbnRlclwiOnJldHVyblwi4o+OXCI7Y2FzZVwiRXNjYXBlXCI6Y2FzZVwiRXNjXCI6cmV0dXJuXCJFc2NcIjtjYXNlXCIgXCI6Y2FzZVwiU3BhY2VcIjpjYXNlXCJTcGFjZWJhclwiOnJldHVyblwiU3BhY2VcIjtjYXNlXCJBcnJvd1VwXCI6cmV0dXJuXCLihpFcIjtjYXNlXCJBcnJvd0Rvd25cIjpyZXR1cm5cIuKGk1wiO2Nhc2VcIkFycm93TGVmdFwiOnJldHVyblwi4oaQXCI7Y2FzZVwiQXJyb3dSaWdodFwiOnJldHVyblwi4oaSXCI7Y2FzZVwiVGFiXCI6cmV0dXJuXCJUYWJcIjtjYXNlXCJCYWNrc3BhY2VcIjpyZXR1cm5cIuKMq1wiO2Nhc2VcIkRlbGV0ZVwiOnJldHVyblwi4oymXCI7ZGVmYXVsdDppZigxPT09bi5sZW5ndGgpcmV0dXJuIG4udG9VcHBlckNhc2UoKTtyZXR1cm4gbn19KG4pLHI9XCJzdHJpbmdcIj09dHlwZW9mIHQmJjE9PT10Lmxlbmd0aDtyZXR1cm4oMCx5LmpzeCkoXCJrYmRcIix7XCJkYXRhLXN5bWJvbFwiOnIsY2hpbGRyZW46dH0pfWZ1bmN0aW9uIHJoKCl7dmFyIGU9cmkoKDAseC51c2VTdGF0ZSkoXCJcXHhhMFwiKSwyKSxuPWVbMF0sdD1lWzFdLHI9cnYoL15NYWMvKXx8cnYoL15pUGhvbmUvKXx8cnYoL15pUGFkLyl8fHJ2KC9eTWFjLykmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4xO3JldHVybigwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpeyEwPT09ciYmdChcIuKMmFwiKSwhMT09PXImJnQoXCJDdHJsXCIpfSxbcl0pLCgwLHkuanN4KShcInNwYW5cIix7c3R5bGU6e21pbldpZHRoOlwiMWVtXCIsZGlzcGxheTpcImlubGluZS1ibG9ja1wifSxjaGlsZHJlbjpufSl9ZnVuY3Rpb24gcmcoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTIuNDY5NyAxMy41MzAzTDEzIDE0LjA2MDdMMTQuMDYwNyAxM0wxMy41MzAzIDEyLjQ2OTdMOS4wNjA2NSA3Ljk5OTk5TDEzLjUzMDMgMy41MzAzMkwxNC4wNjA3IDIuOTk5OTlMMTMgMS45MzkzM0wxMi40Njk3IDIuNDY5NjZMNy45OTk5OSA2LjkzOTMzTDMuNTMwMzIgMi40Njk2NkwyLjk5OTk5IDEuOTM5MzNMMS45MzkzMyAyLjk5OTk5TDIuNDY5NjYgMy41MzAzMkw2LjkzOTMzIDcuOTk5OTlMMi40Njk2NiAxMi40Njk3TDEuOTM5MzMgMTNMMi45OTk5OSAxNC4wNjA3TDMuNTMwMzIgMTMuNTMwM0w3Ljk5OTk5IDkuMDYwNjVMMTIuNDY5NyAxMy41MzAzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9dmFyIHJtPWVpKHJjKCkpO2Z1bmN0aW9uIHJ2KGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJm51bGwhPXdpbmRvdy5uYXZpZ2F0b3I/ZS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pOnZvaWQgMH1mdW5jdGlvbiByYihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gcnkoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIHJ4KGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX1mdW5jdGlvbiBydyhlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99ZnVuY3Rpb24gcmooZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJiKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHJiKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHJrKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgLnByZWZlcmVuY2VzLWNvbnRhaW5lciB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAgIC5wcmVmZXJlbmNlcy1jb250YWluZXIge1xcbiAgICAgIHdpZHRoOiA0ODBweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLnByZWZlcmVuY2Utc2VjdGlvbjpmaXJzdC1jaGlsZCB7XFxuICAgIHBhZGRpbmctdG9wOiAwO1xcbiAgfVxcblxcbiAgLnByZWZlcmVuY2Utc2VjdGlvbiB7XFxuICAgIHBhZGRpbmc6IDEycHggMDtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDI0cHg7XFxuICB9XFxuXFxuICAucHJlZmVyZW5jZS1zZWN0aW9uOmxhc3QtY2hpbGQge1xcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xcbiAgfVxcblxcbiAgLnByZWZlcmVuY2UtaGVhZGVyIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgZmxleDogMTtcXG4gIH1cXG5cXG4gIC5wcmVmZXJlbmNlLWhlYWRlciBsYWJlbCB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuXFxuICAucHJlZmVyZW5jZS1kZXNjcmlwdGlvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIC5zZWxlY3QtYnV0dG9uLFxcbiAgLmFjdGlvbi1idXR0b24ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbGcpO1xcbiAgICBmb250LXdlaWdodDogNDAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgcGFkZGluZzogNnB4IDhweDtcXG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDE1MG1zIHZhcigtLXRpbWluZy1zd2lmdCk7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS01MDApO1xcbiAgICB9XFxuXFxuICAgIHN2ZyB7XFxuICAgICAgd2lkdGg6IDE0cHg7XFxuICAgICAgaGVpZ2h0OiAxNHB4O1xcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgICB9XFxuICB9XFxuXFxuICAuc2VsZWN0LWJ1dHRvbiB7XFxuICAgICY6Zm9jdXMtd2l0aGluIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcXG4gICAgfVxcblxcbiAgICBzZWxlY3Qge1xcbiAgICAgIGFsbDogdW5zZXQ7XFxuICAgIH1cXG5cXG4gICAgb3B0aW9uIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIDpnbG9iYWwoLmljb24pIHtcXG4gICAgd2lkdGg6IDE4cHg7XFxuICAgIGhlaWdodDogMThweDtcXG4gICAgY29sb3I6ICM2NjY7XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIHJrPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gckEoZSl7dmFyIG4sdD1lLnNldFBvc2l0aW9uLHI9ZS5wb3NpdGlvbixvPWUuaGlkZSxhPWUuc2NhbGUsaT1lLnNldFNjYWxlLGw9ZS5oaWRlU2hvcnRjdXQscz1lLnNldEhpZGVTaG9ydGN1dCxjPXJ3KGUsW1wic2V0UG9zaXRpb25cIixcInBvc2l0aW9uXCIsXCJoaWRlXCIsXCJzY2FsZVwiLFwic2V0U2NhbGVcIixcImhpZGVTaG9ydGN1dFwiLFwic2V0SGlkZVNob3J0Y3V0XCJdKSx1PXJqKCgwLHgudXNlU3RhdGUpKGZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGxvY2FsU3RvcmFnZSlyZXR1cm5cInN5c3RlbVwiO3ZhciBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKFEpO3JldHVyblwiZGFya1wiPT09ZXx8XCJsaWdodFwiPT09ZT9lOlwic3lzdGVtXCJ9KCkpLDIpLGQ9dVswXSxmPXVbMV07ZnVuY3Rpb24gcChlKXt2YXIgbj1cIi9fX25leHRqc19yZXN0YXJ0X2RldlwiO2UmJihuPVwiL19fbmV4dGpzX3Jlc3RhcnRfZGV2P2ludmFsaWRhdGVQZXJzaXN0ZW50Q2FjaGVcIiksZmV0Y2gobix7bWV0aG9kOlwiUE9TVFwifSkudGhlbihmdW5jdGlvbigpe30pfXJldHVybigwLHkuanN4cykodDAueCxyeChyeSh7dGl0bGU6XCJQcmVmZXJlbmNlc1wifSxjKSx7Y2hpbGRyZW46WygwLHkuanN4KShcImgyXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXNlY3Rpb24tdGl0bGVcIixjaGlsZHJlbjpcIkdlbmVyYWxcIn0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZXMtY29udGFpbmVyXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1zZWN0aW9uXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aHRtbEZvcjpcInRoZW1lXCIsY2hpbGRyZW46XCJUaGVtZVwifSksKDAseS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46XCJTZWxlY3QgeW91ciB0aGVtZSBwcmVmZXJlbmNlLlwifSldfSksKDAseS5qc3hzKShyTyx7aWQ6XCJ0aGVtZVwiLG5hbWU6XCJ0aGVtZVwiLHByZWZpeDooMCx5LmpzeCkockMse3RoZW1lOmR9KSx2YWx1ZTpkLG9uQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJuZXh0anMtcG9ydGFsXCIpO2lmKG4pe2lmKGYoZS50YXJnZXQudmFsdWUpLFwic3lzdGVtXCI9PT1lLnRhcmdldC52YWx1ZSl7bi5jbGFzc0xpc3QucmVtb3ZlKFwiZGFya1wiKSxuLmNsYXNzTGlzdC5yZW1vdmUoXCJsaWdodFwiKSxsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShRKTtyZXR1cm59XCJkYXJrXCI9PT1lLnRhcmdldC52YWx1ZT8obi5jbGFzc0xpc3QuYWRkKFwiZGFya1wiKSxuLmNsYXNzTGlzdC5yZW1vdmUoXCJsaWdodFwiKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShRLFwiZGFya1wiKSk6KG4uY2xhc3NMaXN0LnJlbW92ZShcImRhcmtcIiksbi5jbGFzc0xpc3QuYWRkKFwibGlnaHRcIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oUSxcImxpZ2h0XCIpKX19LGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJzeXN0ZW1cIixjaGlsZHJlbjpcIlN5c3RlbVwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwibGlnaHRcIixjaGlsZHJlbjpcIkxpZ2h0XCJ9KSwoMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJkYXJrXCIsY2hpbGRyZW46XCJEYXJrXCJ9KV19KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2h0bWxGb3I6XCJwb3NpdGlvblwiLGNoaWxkcmVuOlwiUG9zaXRpb25cIn0pLCgwLHkuanN4KShcInBcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1kZXNjcmlwdGlvblwiLGNoaWxkcmVuOlwiQWRqdXN0IHRoZSBwbGFjZW1lbnQgb2YgeW91ciBkZXYgdG9vbHMuXCJ9KV19KSwoMCx5LmpzeHMpKHJPLHtpZDpcInBvc2l0aW9uXCIsbmFtZTpcInBvc2l0aW9uXCIsdmFsdWU6cixvbkNoYW5nZTpmdW5jdGlvbihlKXt0KGUudGFyZ2V0LnZhbHVlKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShHLGUudGFyZ2V0LnZhbHVlKX0sY2hpbGRyZW46WygwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImJvdHRvbS1sZWZ0XCIsY2hpbGRyZW46XCJCb3R0b20gTGVmdFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwiYm90dG9tLXJpZ2h0XCIsY2hpbGRyZW46XCJCb3R0b20gUmlnaHRcIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcInRvcC1sZWZ0XCIsY2hpbGRyZW46XCJUb3AgTGVmdFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwidG9wLXJpZ2h0XCIsY2hpbGRyZW46XCJUb3AgUmlnaHRcIn0pXX0pXX0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1zZWN0aW9uXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aHRtbEZvcjpcInNpemVcIixjaGlsZHJlbjpcIlNpemVcIn0pLCgwLHkuanN4KShcInBcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1kZXNjcmlwdGlvblwiLGNoaWxkcmVuOlwiQWRqdXN0IHRoZSBzaXplIG9mIHlvdXIgZGV2IHRvb2xzLlwifSldfSksKDAseS5qc3gpKHJPLHtpZDpcInNpemVcIixuYW1lOlwic2l6ZVwiLHZhbHVlOmEsb25DaGFuZ2U6ZnVuY3Rpb24oZSl7aShOdW1iZXIoZS50YXJnZXQudmFsdWUpKX0sY2hpbGRyZW46T2JqZWN0LmVudHJpZXMoUykubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPXJqKGUsMiksdD1uWzBdLHI9blsxXTtyZXR1cm4oMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6cixjaGlsZHJlbjp0fSx0KX0pfSldfSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLXNlY3Rpb25cIixjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWhlYWRlclwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtpZDpcImhpZGUtZGV2LXRvb2xzXCIsY2hpbGRyZW46XCJIaWRlIERldiBUb29scyBmb3IgdGhpcyBzZXNzaW9uXCJ9KSwoMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIkhpZGUgRGV2IFRvb2xzIHVudGlsIHlvdSByZXN0YXJ0IHlvdXIgZGV2IHNlcnZlciwgb3IgMSBkYXkuXCJ9KV19KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1jb250cm9sXCIsY2hpbGRyZW46KDAseS5qc3hzKShcImJ1dHRvblwiLHtcImFyaWEtZGVzY3JpYmVkYnlcIjpcImhpZGUtZGV2LXRvb2xzXCIsbmFtZTpcImhpZGUtZGV2LXRvb2xzXCIsXCJkYXRhLWhpZGUtZGV2LXRvb2xzXCI6ITAsY2xhc3NOYW1lOlwiYWN0aW9uLWJ1dHRvblwiLG9uQ2xpY2s6byxjaGlsZHJlbjpbKDAseS5qc3gpKHQ5LHt9KSwoMCx5LmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOlwiSGlkZVwifSldfSl9KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2lkOlwiaGlkZS1kZXYtdG9vbHNcIixjaGlsZHJlbjpcIkhpZGUgRGV2IFRvb2xzIHNob3J0Y3V0XCJ9KSwoMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIlNldCBhIGN1c3RvbSBrZXlib2FyZCBzaG9ydGN1dCB0byB0b2dnbGUgdmlzaWJpbGl0eS5cIn0pXX0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWNvbnRyb2xcIixjaGlsZHJlbjooMCx5LmpzeCkocmQse3ZhbHVlOm51bGwhPShuPW51bGw9PWw/dm9pZCAwOmwuc3BsaXQoXCIrXCIpKT9uOm51bGwsb25DaGFuZ2U6c30pfSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7Y2hpbGRyZW46XCJEaXNhYmxlIERldiBUb29scyBmb3IgdGhpcyBwcm9qZWN0XCJ9KSwoMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46W1wiVG8gZGlzYWJsZSB0aGlzIFVJIGNvbXBsZXRlbHksIHNldFwiLFwiIFwiLCgwLHkuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOlwiZGV2SW5kaWNhdG9yczogZmFsc2VcIn0pLFwiIFwiLFwiaW4geW91ciBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcIm5leHQuY29uZmlnXCJ9KSxcIiBcIixcImZpbGUuXCJdfSldfSl9KV19KSwoMCx5LmpzeCkoXCJoMlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1zZWN0aW9uLXRpdGxlXCIsY2hpbGRyZW46XCJEZXZlbG9wbWVudCBTZXJ2ZXJcIn0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlcy1jb250YWluZXJcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2lkOlwicmVzdGFydC1kZXYtc2VydmVyXCIsY2hpbGRyZW46XCJSZXN0YXJ0IERldiBTZXJ2ZXJcIn0pLCgwLHkuanN4KShcInBcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1kZXNjcmlwdGlvblwiLGNoaWxkcmVuOlwiUmVzdGFydHMgdGhlIGRldmVsb3BtZW50IHNlcnZlciB3aXRob3V0IG5lZWRpbmcgdG8gbGVhdmUgdGhlIGJyb3dzZXIuXCJ9KV19KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1jb250cm9sXCIsY2hpbGRyZW46KDAseS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1kZXNjcmliZWRieVwiOlwicmVzdGFydC1kZXYtc2VydmVyXCIsdGl0bGU6XCJSZXN0YXJ0cyB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyIHdpdGhvdXQgbmVlZGluZyB0byBsZWF2ZSB0aGUgYnJvd3Nlci5cIixuYW1lOlwicmVzdGFydC1kZXYtc2VydmVyXCIsXCJkYXRhLXJlc3RhcnQtZGV2LXNlcnZlclwiOiEwLGNsYXNzTmFtZTpcImFjdGlvbi1idXR0b25cIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHAoITEpfSxjaGlsZHJlbjooMCx5LmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOlwiUmVzdGFydFwifSl9KX0pXX0pfSkscHJvY2Vzcy5lbnYuX19ORVhUX0JVTkRMRVJfSEFTX1BFUlNJU1RFTlRfQ0FDSEU/KDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2VzLWNvbnRhaW5lclwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1zZWN0aW9uXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aWQ6XCJyZXNldC1idW5kbGVyLWNhY2hlXCIsY2hpbGRyZW46XCJSZXNldCBCdW5kbGVyIENhY2hlXCJ9KSwoMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIkNsZWFycyB0aGUgYnVuZGxlciBjYWNoZSBhbmQgcmVzdGFydHMgdGhlIGRldiBzZXJ2ZXIuIEhlbHBmdWwgaWYgeW91IGFyZSBzZWVpbmcgc3RhbGUgZXJyb3JzIG9yIGNoYW5nZXMgYXJlIG5vdCBhcHBlYXJpbmcuXCJ9KV19KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1jb250cm9sXCIsY2hpbGRyZW46KDAseS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1kZXNjcmliZWRieVwiOlwicmVzZXQtYnVuZGxlci1jYWNoZVwiLHRpdGxlOlwiQ2xlYXJzIHRoZSBidW5kbGVyIGNhY2hlIGFuZCByZXN0YXJ0cyB0aGUgZGV2IHNlcnZlci4gSGVscGZ1bCBpZiB5b3UgYXJlIHNlZWluZyBzdGFsZSBlcnJvcnMgb3IgY2hhbmdlcyBhcmUgbm90IGFwcGVhcmluZy5cIixuYW1lOlwicmVzZXQtYnVuZGxlci1jYWNoZVwiLFwiZGF0YS1yZXNldC1idW5kbGVyLWNhY2hlXCI6ITAsY2xhc3NOYW1lOlwiYWN0aW9uLWJ1dHRvblwiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gcCghMCl9LGNoaWxkcmVuOigwLHkuanN4KShcInNwYW5cIix7Y2hpbGRyZW46XCJSZXNldCBDYWNoZVwifSl9KX0pXX0pfSk6bnVsbF19KSl9ZnVuY3Rpb24gck8oZSl7dmFyIG49ZS5jaGlsZHJlbix0PWUucHJlZml4LHI9cncoZSxbXCJjaGlsZHJlblwiLFwicHJlZml4XCJdKTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlbGVjdC1idXR0b25cIixjaGlsZHJlbjpbdCwoMCx5LmpzeCkoXCJzZWxlY3RcIixyeChyeSh7fSxyKSx7Y2hpbGRyZW46bn0pKSwoMCx5LmpzeCkockUse30pXX0pfWZ1bmN0aW9uIHJDKGUpe3N3aXRjaChlLnRoZW1lKXtjYXNlXCJzeXN0ZW1cIjpyZXR1cm4oMCx5LmpzeCkocmUse30pO2Nhc2VcImRhcmtcIjpyZXR1cm4oMCx5LmpzeCkodDcse30pO2Nhc2VcImxpZ2h0XCI6cmV0dXJuKDAseS5qc3gpKHQ4LHt9KTtkZWZhdWx0OnJldHVybiBudWxsfX12YXIgclM9ZWkocmsoKSk7ZnVuY3Rpb24gckUoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLFwiYXJpYS1oaWRkZW5cIjohMCxjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTQuMDYwNyA1LjQ5OTk5TDEzLjUzMDMgNi4wMzAzMkw4LjcwNzEgMTAuODUzNUM4LjMxNjU4IDExLjI0NDEgNy42ODM0MSAxMS4yNDQxIDcuMjkyODkgMTAuODUzNUwyLjQ2OTY2IDYuMDMwMzJMMS45MzkzMyA1LjQ5OTk5TDIuOTk5OTkgNC40MzkzM0wzLjUzMDMyIDQuOTY5NjZMNy45OTk5OSA5LjQzOTMzTDEyLjQ2OTcgNC45Njk2NkwxMyA0LjQzOTMzTDE0LjA2MDcgNS40OTk5OVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIHJfKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiByUChlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gcnooZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIHJMKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb31mdW5jdGlvbiByVChlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gcl8oZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8clIoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHJSKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJfKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHJfKGUsbil9fWZ1bmN0aW9uIHJOKGUpe3ZhciBuPWUuY2hpbGRyZW4sdD1lLnBhZGRpbmcscj1lLnBvc2l0aW9uLG89ZS5zZXRQb3NpdGlvbixhPWUub25EcmFnU3RhcnQsaT1lLmRyYWdIYW5kbGVTZWxlY3RvcixsPWUuZGlzYWJsZURyYWcscz1yTChlLFtcImNoaWxkcmVuXCIsXCJwYWRkaW5nXCIsXCJwb3NpdGlvblwiLFwic2V0UG9zaXRpb25cIixcIm9uRHJhZ1N0YXJ0XCIsXCJkcmFnSGFuZGxlU2VsZWN0b3JcIixcImRpc2FibGVEcmFnXCJdKSxjPWZ1bmN0aW9uKGUpe3ZhciBuPSgwLHgudXNlUmVmKShudWxsKSx0PSgwLHgudXNlUmVmKSh7c3RhdGU6XCJpZGxlXCJ9KSxyPSgwLHgudXNlUmVmKShudWxsKSxvPSgwLHgudXNlUmVmKSh7eDowLHk6MH0pLGE9KDAseC51c2VSZWYpKHt4OjAseTowfSksaT0oMCx4LnVzZVJlZikoMCksbD0oMCx4LnVzZVJlZikoW10pLHM9KDAseC51c2VDYWxsYmFjaykoZnVuY3Rpb24oKXt2YXIgZSxvO1wiZHJhZ1wiPT09dC5jdXJyZW50LnN0YXRlJiYobnVsbD09KG89bi5jdXJyZW50KXx8by5yZWxlYXNlUG9pbnRlckNhcHR1cmUodC5jdXJyZW50LnBvaW50ZXJJZCkpLHQuY3VycmVudD1cImRyYWdcIj09PXQuY3VycmVudC5zdGF0ZT97c3RhdGU6XCJkcmFnLWVuZFwifTp7c3RhdGU6XCJpZGxlXCJ9LG51bGwhPT1yLmN1cnJlbnQmJihyLmN1cnJlbnQoKSxyLmN1cnJlbnQ9bnVsbCksbC5jdXJyZW50PVtdLG51bGw9PShlPW4uY3VycmVudCl8fGUuY2xhc3NMaXN0LnJlbW92ZShcImRldi10b29scy1ncmFiYmluZ1wiKX0sW10pO2Z1bmN0aW9uIGMoZSl7bi5jdXJyZW50JiYoYS5jdXJyZW50PWUsbi5jdXJyZW50LnN0eWxlLnRyYW5zbGF0ZT1cIlwiLmNvbmNhdChlLngsXCJweCBcIikuY29uY2F0KGUueSxcInB4XCIpKX1mdW5jdGlvbiB1KGUpe2lmKFwiZHJhZy1lbmRcIj09PXQuY3VycmVudC5zdGF0ZSl7dmFyIHI7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdC5jdXJyZW50PXtzdGF0ZTpcImlkbGVcIn0sbnVsbD09KHI9bi5jdXJyZW50KXx8ci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix1KX19ZnVuY3Rpb24gZChyKXtpZihcInByZXNzXCI9PT10LmN1cnJlbnQuc3RhdGUpe3ZhciBzLHUsZCxmLHA9ci5jbGllbnRYLW8uY3VycmVudC54LGg9ci5jbGllbnRZLW8uY3VycmVudC55O01hdGguc3FydChwKnAraCpoKT49ZS50aHJlc2hvbGQmJih0LmN1cnJlbnQ9e3N0YXRlOlwiZHJhZ1wiLHBvaW50ZXJJZDpyLnBvaW50ZXJJZH0sbnVsbD09KHU9bi5jdXJyZW50KXx8dS5zZXRQb2ludGVyQ2FwdHVyZShyLnBvaW50ZXJJZCksbnVsbD09KGQ9bi5jdXJyZW50KXx8ZC5jbGFzc0xpc3QuYWRkKFwiZGV2LXRvb2xzLWdyYWJiaW5nXCIpLG51bGw9PShmPWUub25EcmFnU3RhcnQpfHxmLmNhbGwoZSkpfWlmKFwiZHJhZ1wiPT09dC5jdXJyZW50LnN0YXRlKXt2YXIgZz17eDpyLmNsaWVudFgseTpyLmNsaWVudFl9LG09Zy54LW8uY3VycmVudC54LHY9Zy55LW8uY3VycmVudC55O28uY3VycmVudD1nLGMoe3g6YS5jdXJyZW50LngrbSx5OmEuY3VycmVudC55K3Z9KTt2YXIgYj1EYXRlLm5vdygpO2ItaS5jdXJyZW50Pj0xMCYmKGwuY3VycmVudD1yVChsLmN1cnJlbnQuc2xpY2UoLTUpKS5jb25jYXQoW3twb3NpdGlvbjpnLHRpbWVzdGFtcDpifV0pKSxpLmN1cnJlbnQ9YixudWxsPT0ocz1lLm9uRHJhZyl8fHMuY2FsbChlLGEuY3VycmVudCl9fWZ1bmN0aW9uIGYoKXt2YXIgbix0PWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJue3g6MCx5OjB9O3ZhciBuPWVbMF0sdD1lW2UubGVuZ3RoLTFdLHI9dC50aW1lc3RhbXAtbi50aW1lc3RhbXA7cmV0dXJuIDA9PT1yP3t4OjAseTowfTp7eDoxZTMqKCh0LnBvc2l0aW9uLngtbi5wb3NpdGlvbi54KS9yKSx5OjFlMyooKHQucG9zaXRpb24ueS1uLnBvc2l0aW9uLnkpL3IpfX0obC5jdXJyZW50KTtzKCksbnVsbD09KG49ZS5vbkRyYWdFbmQpfHxuLmNhbGwoZSxhLmN1cnJlbnQsdCl9cmV0dXJuKDAseC51c2VMYXlvdXRFZmZlY3QpKGZ1bmN0aW9uKCl7ZS5kaXNhYmxlZCYmcygpfSxbcyxlLmRpc2FibGVkXSkse3JlZjpuLG9uUG9pbnRlckRvd246ZnVuY3Rpb24oYSl7dmFyIGksbDswPT09YS5idXR0b24mJihsPWEudGFyZ2V0LCghZS5kcmFnSGFuZGxlU2VsZWN0b3J8fCFuLmN1cnJlbnR8fCFsfHxsLm1hdGNoZXMmJmwubWF0Y2hlcyhlLmRyYWdIYW5kbGVTZWxlY3RvcikpJiYoby5jdXJyZW50PXt4OmEuY2xpZW50WCx5OmEuY2xpZW50WX0sdC5jdXJyZW50PXtzdGF0ZTpcInByZXNzXCJ9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIixkKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLGYpLG51bGwhPT1yLmN1cnJlbnQmJihyLmN1cnJlbnQoKSxyLmN1cnJlbnQ9bnVsbCksci5jdXJyZW50PWZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLGQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsZil9LG51bGw9PShpPW4uY3VycmVudCl8fGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdSkpKX0sYW5pbWF0ZTpmdW5jdGlvbih0KXt2YXIgcj1uLmN1cnJlbnQ7bnVsbCE9PXImJihyLnN0eWxlLnRyYW5zaXRpb249XCJ0cmFuc2xhdGUgNDkxLjIybXMgdmFyKC0tdGltaW5nLWJvdW5jZSlcIixyLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsZnVuY3Rpb24gbihvKXtpZihcInRyYW5zbGF0ZVwiPT09by5wcm9wZXJ0eU5hbWUpe3ZhciBpO251bGw9PShpPWUub25BbmltYXRpb25FbmQpfHxpLmNhbGwoZSx0KSxhLmN1cnJlbnQ9e3g6MCx5OjB9LHIuc3R5bGUudHJhbnNpdGlvbj1cIlwiLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIixuKX19KSxjKHQudHJhbnNsYXRpb24pKX19fSh7ZGlzYWJsZWQ6dm9pZCAwIT09bCYmbCx0aHJlc2hvbGQ6NSxvbkRyYWdTdGFydDphLG9uRHJhZ0VuZDpmdW5jdGlvbihlLG4pe3ZhciBvLGEsaSxsLHMsYyxmLHAsaCxnLG0sdixiLHkseCx3LGosayxBO2lmKDA9PT1NYXRoLnNxcnQoZS54KmUueCtlLnkqZS55KSl7bnVsbD09KG89dS5jdXJyZW50KXx8by5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInRyYW5zbGF0ZVwiKTtyZXR1cm59ZCgoeT0oYT17eDplLngrckQobi54KSx5OmUueStyRChuLnkpfSkueCx4PWEueSxqPU9iamVjdC5lbnRyaWVzKHc9KHA9Mip0LGg9KG51bGw9PShjPXUuY3VycmVudCk/dm9pZCAwOmMub2Zmc2V0V2lkdGgpfHwwLGc9KG51bGw9PShmPXUuY3VycmVudCk/dm9pZCAwOmYub2Zmc2V0SGVpZ2h0KXx8MCxtPXdpbmRvdy5pbm5lcldpZHRoLWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCx7XCJ0b3AtbGVmdFwiOnt4OjAtKHY9KGw9KGk9cikuaW5jbHVkZXMoXCJyaWdodFwiKSxzPWkuaW5jbHVkZXMoXCJib3R0b21cIikse3g6bD93aW5kb3cuaW5uZXJXaWR0aC1tLXAtaDowLHk6cz93aW5kb3cuaW5uZXJIZWlnaHQtcC1nOjB9KSkueCx5OjAtdi55fSxcInRvcC1yaWdodFwiOnt4OndpbmRvdy5pbm5lcldpZHRoLW0tcC1oLXYueCx5OjAtdi55fSxcImJvdHRvbS1sZWZ0XCI6e3g6MC12LngseTp3aW5kb3cuaW5uZXJIZWlnaHQtcC1nLXYueX0sXCJib3R0b20tcmlnaHRcIjp7eDp3aW5kb3cuaW5uZXJXaWR0aC1tLXAtaC12LngseTp3aW5kb3cuaW5uZXJIZWlnaHQtcC1nLXYueX19KSkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuLHQscj0odD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG49ZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8clIobix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksbz1yWzBdLGE9clsxXTtyZXR1cm57a2V5Om8sZGlzdGFuY2U6TWF0aC5zcXJ0KE1hdGgucG93KHktYS54LDIpK01hdGgucG93KHgtYS55LDIpKX19KSxrPShiPU1hdGgpLm1pbi5hcHBseShiLHJUKGoubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc3RhbmNlfSkpKSwoQT1qLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzdGFuY2U9PT1rfSkpP3t0cmFuc2xhdGlvbjp3W0Eua2V5XSxjb3JuZXI6QS5rZXl9Ontjb3JuZXI6cix0cmFuc2xhdGlvbjp3W3JdfSkpfSxvbkFuaW1hdGlvbkVuZDpmdW5jdGlvbihlKXt2YXIgbj1lLmNvcm5lcjtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU7bnVsbD09KGU9dS5jdXJyZW50KXx8ZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInRyYW5zbGF0ZVwiKSxvKG4pfSl9LGRyYWdIYW5kbGVTZWxlY3RvcjppfSksdT1jLnJlZixkPWMuYW5pbWF0ZSxmPXJMKGMsW1wicmVmXCIsXCJhbmltYXRlXCJdKTtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIixyeihyUChyeihyUCh7fSxzKSx7cmVmOnV9KSxmKSx7c3R5bGU6e3RvdWNoQWN0aW9uOlwibm9uZVwifSxjaGlsZHJlbjpufSkpfWZ1bmN0aW9uIHJEKGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTouOTk5O3JldHVybiBlLzFlMypuLygxLW4pfWZ1bmN0aW9uIHJCKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiByTShlLG4sdCl7cmV0dXJuIG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT10LGV9ZnVuY3Rpb24gckkoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JNKGUsbix0W25dKX0pfXJldHVybiBlfWZ1bmN0aW9uIHJIKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb31mdW5jdGlvbiByRihlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gckIoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gckIoZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gclUoZSl7dmFyIG49ZS5zdGF0ZSx0PWUuZXJyb3JDb3VudCxyPWUuaXNCdWlsZEVycm9yLG89ckgoZSxbXCJzdGF0ZVwiLFwiZXJyb3JDb3VudFwiLFwiaXNCdWlsZEVycm9yXCJdKSxhPXJGKCgwLHgudXNlU3RhdGUpKCEwKSwyKSxpPWFbMF0sbD1hWzFdO3JldHVybigwLHkuanN4KShyJCxySSh7cm91dGVyVHlwZTpuLnJvdXRlclR5cGUsc2VtdmVyOm4udmVyc2lvbkluZm8uaW5zdGFsbGVkLGlzc3VlQ291bnQ6dCxpc0RldkJ1aWxkaW5nOm4uYnVpbGRpbmdJbmRpY2F0b3IsaXNEZXZSZW5kZXJpbmc6bi5yZW5kZXJpbmdJbmRpY2F0b3IsaXNTdGF0aWNSb3V0ZTpuLnN0YXRpY0luZGljYXRvcixoaWRlOmZ1bmN0aW9uKCl7bCghMSksZmV0Y2goXCIvX19uZXh0anNfZGlzYWJsZV9kZXZfaW5kaWNhdG9yXCIse21ldGhvZDpcIlBPU1RcIn0pfSx0b2dnbGVWaXNpYmlsaXR5OmZ1bmN0aW9uKCl7bCghaSl9LGlzVHVyYm9wYWNrOiEhcHJvY2Vzcy5lbnYuVFVSQk9QQUNLLGRpc2FibGVkOm4uZGlzYWJsZURldkluZGljYXRvcnx8IWksaXNCdWlsZEVycm9yOnIscGFnZTpuLnBhZ2V9LG8pKX12YXIgclY9KDAseC5jcmVhdGVDb250ZXh0KSh7fSkscnE9e1Jvb3Q6XCJyb290XCIsVHVyYm86XCJ0dXJib1wiLFJvdXRlOlwicm91dGVcIixQcmVmZXJlbmNlczpcInByZWZlcmVuY2VzXCIsU2VnbWVudEV4cGxvcmVyOlwic2VnbWVudC1leHBsb3JlclwifSxyVz1wcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9TRUdNRU5UX0VYUExPUkVSP19fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZXJyb3JzL2Rldi10b29scy1pbmRpY2F0b3IvZGV2LXRvb2xzLWluZm8vc2VnbWVudHMtZXhwbG9yZXIudHN4XCIpLlc6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07ZnVuY3Rpb24gciQoZSl7dmFyIG4sdCxyLG8sYSxpLGwscz1lLnJvdXRlclR5cGUsYz1lLmRpc2FibGVkLHU9ZS5pc3N1ZUNvdW50LGQ9ZS5pc0RldkJ1aWxkaW5nLGY9ZS5pc0RldlJlbmRlcmluZyxwPWUuaXNTdGF0aWNSb3V0ZSxoPWUuaXNUdXJib3BhY2ssZz1lLmlzQnVpbGRFcnJvcixtPWUuaGlkZSx2PWUudG9nZ2xlVmlzaWJpbGl0eSxiPWUuZGlzcGF0Y2gsdz1lLnNjYWxlLGo9ZS5zZXRTY2FsZSxrPWUucGFnZSxBPSgwLHgudXNlUmVmKShudWxsKSxPPSgwLHgudXNlUmVmKShudWxsKSxDPSgwLHgudXNlUmVmKShudWxsKSxTPXJGKCgwLHgudXNlU3RhdGUpKG51bGwpLDIpLEU9U1swXSxfPVNbMV0sUD1yRigoMCx4LnVzZVN0YXRlKShcInVuZGVmaW5lZFwiIT10eXBlb2YgbG9jYWxTdG9yYWdlJiZsb2NhbFN0b3JhZ2UuZ2V0SXRlbShHKT9sb2NhbFN0b3JhZ2UuZ2V0SXRlbShHKTpyciksMiksej1QWzBdLEw9UFsxXSxUPXJGKCgwLHgudXNlU3RhdGUpKC0xKSwyKSxSPVRbMF0sTj1UWzFdLEQ9ckYoKHQ9KG49cnQoKDAseC51c2VTdGF0ZSkoZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgbG9jYWxTdG9yYWdlKXJldHVybiBudWxsO3ZhciBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKHJvKTtyZXR1cm4gZXx8bnVsbH0oKSksMikpWzBdLHI9blsxXSxbdCxmdW5jdGlvbihlKXtyKGUpLG51bGw9PT1lP2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHJvKTpsb2NhbFN0b3JhZ2Uuc2V0SXRlbShybyxlKX1dKSwyKSxCPURbMF0sST1EWzFdLEY9RT09PXJxLlJvb3QsVT1FPT09cnEuVHVyYm8sVj1FPT09cnEuUm91dGUscT1FPT09cnEuUHJlZmVyZW5jZXMsVz1FPT09cnEuU2VnbWVudEV4cGxvcmVyLCQ9KDAsdEouTikoRix7ZW50ZXJEZWxheTowLGV4aXREZWxheTpuUS5LN30pLFo9JC5tb3VudGVkLFk9JC5yZW5kZXJlZDtmdW5jdGlvbiBYKGUpe2lmKFwiZmlyc3RcIj09PWUpcmV0dXJuIHZvaWQgc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlLG49bnVsbD09KGU9Ty5jdXJyZW50KT92b2lkIDA6ZS5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cIm1lbnVpdGVtXCJdJyk7biYmWChOdW1iZXIoblswXS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWluZGV4XCIpKSl9KTtpZihcImxhc3RcIj09PWUpcmV0dXJuIHZvaWQgc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlLG49bnVsbD09KGU9Ty5jdXJyZW50KT92b2lkIDA6ZS5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cIm1lbnVpdGVtXCJdJyk7biYmWChuLmxlbmd0aC0xKX0pO3ZhciBuLHQ9bnVsbD09KG49Ty5jdXJyZW50KT92b2lkIDA6bi5xdWVyeVNlbGVjdG9yKCdbZGF0YS1pbmRleD1cIicuY29uY2F0KGUsJ1wiXScpKTt0JiYoTihlKSxudWxsPT10fHx0LmZvY3VzKCkpfWZ1bmN0aW9uIEsoKXtfKHJxLlJvb3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtYKFIpfSxuUS5LNyl9ZnVuY3Rpb24gUSgpe18oZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1ycS5Sb290P251bGw6ZX0pfSgwLG5RLlA1KShPLEMsRiksKDAsblEuTzgpKE8sQyxaLFEpLG89Qj9yTSh7fSxCLGZ1bmN0aW9uKCl7digpO3ZhciBlPUEuY3VycmVudDtlJiYoZS5kYXRhc2V0LmhpZGRlbj1cInRydWVcIj09PWUuZGF0YXNldC5oaWRkZW4/XCJmYWxzZVwiOlwidHJ1ZVwiKX0pOnt9LGE9QywoMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtpZihuPWEsISh0PSgwLG5RLnZZKShuLmN1cnJlbnQpKXx8XCJ0cnVlXCIhPT10LmNvbnRlbnRFZGl0YWJsZSYmXCJJTlBVVFwiIT09dC50YWdOYW1lJiZcIlRFWFRBUkVBXCIhPT10LnRhZ05hbWUmJlwiU0VMRUNUXCIhPT10LnRhZ05hbWUmJlwidHJ1ZVwiIT09dC5kYXRhc2V0W1wic2hvcnRjdXQtcmVjb3JkZXJcIl18fHQuaGFzQXR0cmlidXRlKFwicmVhZG9ubHlcIikpe3ZhciBuLHQscj1bXTtlLm1ldGFLZXkmJnIucHVzaChcIk1ldGFcIiksZS5jdHJsS2V5JiZyLnB1c2goXCJDb250cm9sXCIpLGUuYWx0S2V5JiZyLnB1c2goXCJBbHRcIiksZS5zaGlmdEtleSYmci5wdXNoKFwiU2hpZnRcIiksXCJNZXRhXCIhPT1lLmtleSYmXCJDb250cm9sXCIhPT1lLmtleSYmXCJBbHRcIiE9PWUua2V5JiZcIlNoaWZ0XCIhPT1lLmtleSYmci5wdXNoKGUua2V5KTt2YXIgaT1yLmpvaW4oXCIrXCIpO29baV0mJihlLnByZXZlbnREZWZhdWx0KCksb1tpXSgpKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKX19LFtvXSksKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7aWYobnVsbD09PUUpe3ZhciBlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtOKC0xKX0sblEuSzcpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQoZSl9fX0sW0VdKTt2YXIgSj1yRih6LnNwbGl0KFwiLVwiLDIpLDIpLGVlPUpbMF0sZW49SlsxXSxldD0ock0oaT17fSxlZSxcImNhbGMoMTAwJSArIDhweClcIiksck0oaSxlbiwwKSxpKTtyZXR1cm4oMCx5LmpzeHMpKHRSLHtyZWY6QSxcImRhdGEtbmV4dGpzLXRvYXN0XCI6ITAsc3R5bGU6KHJNKGw9e1wiLS1hbmltYXRlLW91dC1kdXJhdGlvbi1tc1wiOlwiXCIuY29uY2F0KG5RLks3LFwibXNcIiksXCItLWFuaW1hdGUtb3V0LXRpbWluZy1mdW5jdGlvblwiOm5RLnVELGJveFNoYWRvdzpcIm5vbmVcIn0sZWUsXCJcIi5jb25jYXQoMjAsXCJweFwiKSksck0obCxlbixcIlwiLmNvbmNhdCgyMCxcInB4XCIpKSxsKSxjaGlsZHJlbjpbKDAseS5qc3gpKHJOLHtwYWRkaW5nOjIwLG9uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIF8obnVsbCl9LHBvc2l0aW9uOnosc2V0UG9zaXRpb246ZnVuY3Rpb24oZSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oRyxlKSxMKGUpfSxjaGlsZHJlbjooMCx5LmpzeCkodFkse3JlZjpDLFwiYXJpYS1oYXNwb3B1cFwiOlwibWVudVwiLFwiYXJpYS1leHBhbmRlZFwiOkYsXCJhcmlhLWNvbnRyb2xzXCI6XCJuZXh0anMtZGV2LXRvb2xzLW1lbnVcIixcImFyaWEtbGFiZWxcIjpcIlwiLmNvbmNhdChGP1wiQ2xvc2VcIjpcIk9wZW5cIixcIiBOZXh0LmpzIERldiBUb29sc1wiKSxcImRhdGEtbmV4dGpzLWRldi10b29scy1idXR0b25cIjohMCxkaXNhYmxlZDpjLGlzc3VlQ291bnQ6dSxvblRyaWdnZXJDbGljazpmdW5jdGlvbigpe0U9PT1ycS5Sb290P18obnVsbCk6KF8ocnEuUm9vdCksc2V0VGltZW91dChmdW5jdGlvbigpe1goXCJmaXJzdFwiKX0pKX0sdG9nZ2xlRXJyb3JPdmVybGF5OmZ1bmN0aW9uKCl7Yih7dHlwZTpIfSl9LGlzRGV2QnVpbGRpbmc6ZCxpc0RldlJlbmRlcmluZzpmLGlzQnVpbGRFcnJvcjpnLHNjYWxlOnd9KX0pLCgwLHkuanN4KSh0Myx7aXNPcGVuOlYsY2xvc2U6Syx0cmlnZ2VyUmVmOkMsc3R5bGU6ZXQscm91dGVyVHlwZTpzLHJvdXRlVHlwZTpwP1wiU3RhdGljXCI6XCJEeW5hbWljXCJ9KSwoMCx5LmpzeCkodDEse2lzT3BlbjpVLGNsb3NlOkssdHJpZ2dlclJlZjpDLHN0eWxlOmV0fSksKDAseS5qc3gpKHJBLHtpc09wZW46cSxjbG9zZTpLLHRyaWdnZXJSZWY6QyxzdHlsZTpldCxoaWRlOmZ1bmN0aW9uKCl7XyhudWxsKSxtKCl9LHNldFBvc2l0aW9uOkwscG9zaXRpb246eixzY2FsZTp3LHNldFNjYWxlOmosaGlkZVNob3J0Y3V0OkIsc2V0SGlkZVNob3J0Y3V0Okl9KSxwcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9TRUdNRU5UX0VYUExPUkVSPygwLHkuanN4KShyVyx7aXNPcGVuOlcsY2xvc2U6Syx0cmlnZ2VyUmVmOkMsc3R5bGU6ZXQscm91dGVyVHlwZTpzLHBhZ2U6a30pOm51bGwsWiYmKDAseS5qc3gpKFwiZGl2XCIse3JlZjpPLGlkOlwibmV4dGpzLWRldi10b29scy1tZW51XCIscm9sZTpcIm1lbnVcIixkaXI6XCJsdHJcIixcImFyaWEtb3JpZW50YXRpb25cIjpcInZlcnRpY2FsXCIsXCJhcmlhLWxhYmVsXCI6XCJOZXh0LmpzIERldiBUb29scyBJdGVtc1wiLHRhYkluZGV4Oi0xLGNsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItbWVudVwiLG9uS2V5RG93bjpmdW5jdGlvbihlKXtzd2l0Y2goZS5wcmV2ZW50RGVmYXVsdCgpLGUua2V5KXtjYXNlXCJBcnJvd0Rvd25cIjpYKFIrMSk7YnJlYWs7Y2FzZVwiQXJyb3dVcFwiOlgoUi0xKTticmVhaztjYXNlXCJIb21lXCI6WChcImZpcnN0XCIpO2JyZWFrO2Nhc2VcIkVuZFwiOlgoXCJsYXN0XCIpfX0sXCJkYXRhLXJlbmRlcmVkXCI6WSxzdHlsZTpldCxjaGlsZHJlbjooMCx5LmpzeHMpKHJWLlByb3ZpZGVyLHt2YWx1ZTp7Y2xvc2VNZW51OlEsc2VsZWN0ZWRJbmRleDpSLHNldFNlbGVjdGVkSW5kZXg6Tn0sY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZGljYXRvci1pbm5lclwiLGNoaWxkcmVuOlt1PjAmJigwLHkuanN4KShyWSx7dGl0bGU6XCJcIi5jb25jYXQodSxcIiBcIikuY29uY2F0KDE9PT11P1wiaXNzdWVcIjpcImlzc3Vlc1wiLFwiIGZvdW5kLiBDbGljayB0byB2aWV3IGRldGFpbHMgaW4gdGhlIGRldiBvdmVybGF5LlwiKSxpbmRleDowLGxhYmVsOlwiSXNzdWVzXCIsdmFsdWU6KDAseS5qc3gpKHJYLHtjaGlsZHJlbjp1fSksb25DbGljazpmdW5jdGlvbigpe18obnVsbCksdT4wJiZiKHt0eXBlOk19KX19KSwoMCx5LmpzeCkoclkse3RpdGxlOlwiQ3VycmVudCByb3V0ZSBpcyBcIi5jb25jYXQocD9cInN0YXRpY1wiOlwiZHluYW1pY1wiLFwiLlwiKSxsYWJlbDpcIlJvdXRlXCIsaW5kZXg6MSx2YWx1ZTpwP1wiU3RhdGljXCI6XCJEeW5hbWljXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBfKHJxLlJvdXRlKX0sXCJkYXRhLW5leHRqcy1yb3V0ZS10eXBlXCI6cD9cInN0YXRpY1wiOlwiZHluYW1pY1wifSksaD8oMCx5LmpzeCkoclkse3RpdGxlOlwiVHVyYm9wYWNrIGlzIGVuYWJsZWQuXCIsbGFiZWw6XCJUdXJib3BhY2tcIix2YWx1ZTpcIkVuYWJsZWRcIn0pOigwLHkuanN4KShyWSx7aW5kZXg6Mix0aXRsZTpcIkxlYXJuIGFib3V0IFR1cmJvcGFjayBhbmQgaG93IHRvIGVuYWJsZSBpdCBpbiB5b3VyIGFwcGxpY2F0aW9uLlwiLGxhYmVsOlwiVHJ5IFR1cmJvcGFja1wiLHZhbHVlOigwLHkuanN4KShyWix7fSksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBfKHJxLlR1cmJvKX19KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItZm9vdGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShyWSx7XCJkYXRhLXByZWZlcmVuY2VzXCI6ITAsbGFiZWw6XCJQcmVmZXJlbmNlc1wiLHZhbHVlOigwLHkuanN4KSh0Nix7fSksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBfKHJxLlByZWZlcmVuY2VzKX0saW5kZXg6aD8yOjN9KSxwcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9TRUdNRU5UX0VYUExPUkVSPygwLHkuanN4KShyWSx7XCJkYXRhLXNlZ21lbnQtZXhwbG9yZXJcIjohMCxsYWJlbDpcIlJvdXRlIEluZm9cIix2YWx1ZTooMCx5LmpzeCkoclose30pLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gXyhycS5TZWdtZW50RXhwbG9yZXIpfSxpbmRleDpoPzM6NH0pOm51bGxdfSldfSl9KV19KX1mdW5jdGlvbiByWigpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiIzY2NlwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS41MDAxMSAxLjkzOTQ1TDYuMDMwNDQgMi40Njk3OEwxMC44NTM3IDcuMjkzQzExLjI0NDIgNy42ODM1MyAxMS4yNDQyIDguMzE2NjkgMTAuODUzNyA4LjcwNzIyTDYuMDMwNDQgMTMuNTMwNEw1LjUwMDExIDE0LjA2MDhMNC40Mzk0NSAxMy4wMDAxTDQuOTY5NzggMTIuNDY5OEw5LjQzOTQ1IDguMDAwMTFMNC45Njk3OCAzLjUzMDQ0TDQuNDM5NDUgMy4wMDAxMUw1LjUwMDExIDEuOTM5NDVaXCJ9KX0pfWZ1bmN0aW9uIHJZKGUpe3ZhciBuLHQscj1lLmluZGV4LG89ZS5sYWJlbCxhPWUudmFsdWUsaT1lLm9uQ2xpY2ssbD1lLmhyZWYscz1ySChlLFtcImluZGV4XCIsXCJsYWJlbFwiLFwidmFsdWVcIixcIm9uQ2xpY2tcIixcImhyZWZcIl0pLGM9XCJmdW5jdGlvblwiPT10eXBlb2YgaXx8XCJzdHJpbmdcIj09dHlwZW9mIGwsdT0oMCx4LnVzZUNvbnRleHQpKHJWKSxkPXUuY2xvc2VNZW51LGY9dS5zZWxlY3RlZEluZGV4LHA9dS5zZXRTZWxlY3RlZEluZGV4LGg9Zj09PXI7ZnVuY3Rpb24gZygpe2MmJihudWxsPT1pfHxpKCksZCgpLGwmJndpbmRvdy5vcGVuKGwsXCJfYmxhbmtcIixcIm5vb3BlbmVyLCBub3JlZmVycmVyXCIpKX1yZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIsKG49ckkoe2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItaXRlbVwiLFwiZGF0YS1pbmRleFwiOnIsXCJkYXRhLXNlbGVjdGVkXCI6aCxvbkNsaWNrOmcsb25Nb3VzZU1vdmU6ZnVuY3Rpb24oKXtjJiZ2b2lkIDAhPT1yJiZmIT09ciYmcChyKX0sb25Nb3VzZUxlYXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHAoLTEpfSxvbktleURvd246ZnVuY3Rpb24oZSl7KFwiRW50ZXJcIj09PWUua2V5fHxcIiBcIj09PWUua2V5KSYmZygpfSxyb2xlOmM/XCJtZW51aXRlbVwiOnZvaWQgMCx0YWJJbmRleDpoPzA6LTF9LHMpLHQ9dD17Y2hpbGRyZW46WygwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZGljYXRvci1sYWJlbFwiLGNoaWxkcmVuOm99KSwoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItdmFsdWVcIixjaGlsZHJlbjphfSldfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiByWChlKXt2YXIgbj1lLmNoaWxkcmVuO3JldHVybigwLHkuanN4cykoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItaXNzdWUtY291bnRcIixcImRhdGEtaGFzLWlzc3Vlc1wiOm4+MCxjaGlsZHJlbjpbKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5kaWNhdG9yLWlzc3VlLWNvdW50LWluZGljYXRvclwifSksbl19KX1mdW5jdGlvbiBySyhlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTQuMzA5NjkgOC4zNzg5MUgyLjM4NzgyQzIuOTgwNSAxMC4zNjQ3IDQuODIxODggMTEuODEyNCA3LjAwMDEyIDExLjgxMjVDOC44MTk3NyAxMS44MTI0IDEwLjQwNDMgMTAuODAyNCAxMS4yMjI4IDkuMzA5NTdMMTEuNTM4MiA4LjczNDM4TDEyLjY4OTYgOS4zNjUyM0wxMi4zNzQxIDkuOTQwNDNMMTIuMTY4MSAxMC4yODkxQzExLjA4MTUgMTEuOTkzIDkuMTczMjQgMTMuMTI0OSA3LjAwMDEyIDEzLjEyNUM0LjQyMjA3IDEzLjEyNDkgMi4yMTc0NyAxMS41MzIyIDEuMzEzNiA5LjI3NzM0VjExLjM3NUgwLjAwMTA5ODYzVjcuNzIyNjZMMC4wMTQ3NzA1IDcuNTg5ODRDMC4wNzYwMzA0IDcuMjkwODkgMC4zNDAyNzggNy4wNjY0MSAwLjY1NzM0OSA3LjA2NjQxSDQuMzA5NjlWOC4zNzg5MVpNNy4wMDAxMiAwLjg3NUM5LjU3Njg1IDAuODc1MTE4IDExLjc4MTkgMi40NjU2OSAxMi42ODY2IDQuNzE4NzVWMi42MjVIMTMuOTk5MVY2LjI3NzM0QzEzLjk5OTEgNi42Mzk3NCAxMy43MDUzIDYuOTMzNTQgMTMuMzQyOSA2LjkzMzU5SDkuNjg5NThWNS42MjEwOUgxMS42MTE1QzExLjAxODYgMy42MzU2IDkuMTc4MTMgMi4xODc2MyA3LjAwMDEyIDIuMTg3NUM1LjE3MTMxIDIuMTg3NTcgMy41Nzk1OSAzLjIwNzcxIDIuNzY0NzcgNC43MTI4OUwyLjQ1MjI3IDUuMjkwMDRMMS4yOTc5NyA0LjY2NTA0TDEuNjEwNDcgNC4wODc4OUMyLjY0NTQ3IDIuMTc2MDUgNC42NzA1MiAwLjg3NTA2OCA3LjAwMDEyIDAuODc1WlwiLGZpbGw6XCIjQTM1MjAwXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gclEoZSl7cmV0dXJuIGUuc2hvd0J1dHRvbj8oMCx5LmpzeHMpKFwiYnV0dG9uXCIse2NsYXNzTmFtZTpcInJlc3RhcnQtZGV2LXNlcnZlci1idXR0b25cIixvbkNsaWNrOmZ1bmN0aW9uKCl7ZmV0Y2goXCIvX19uZXh0anNfcmVzdGFydF9kZXY/aW52YWxpZGF0ZVBlcnNpc3RlbnRDYWNoZVwiLHttZXRob2Q6XCJQT1NUXCJ9KS50aGVuKGZ1bmN0aW9uKCl7fSl9LHRpdGxlOlwiQ2xlYXJzIHRoZSBidW5kbGVyIGNhY2hlIGFuZCByZXN0YXJ0cyB0aGUgZGV2IHNlcnZlci4gSGVscGZ1bCBpZiB5b3UgYXJlIHNlZWluZyBzdGFsZSBlcnJvcnMgb3IgY2hhbmdlcyBhcmUgbm90IGFwcGVhcmluZy5cIixjaGlsZHJlbjpbKDAseS5qc3gpKHJLLHt3aWR0aDoxNCxoZWlnaHQ6MTR9KSxcIkNsZWFyIEJ1bmRsZXIgQ2FjaGUgJiBSZXN0YXJ0XCJdfSk6bnVsbH1mdW5jdGlvbiByRygpe3ZhciBlLG4sdD0oZT1bXCJcXG4gIFtkYXRhLW5leHRqcy12ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3I9J2ZyZXNoJ10ge1xcbiAgICBmaWxsOiB2YXIoLS1jb2xvci1ncmVlbi04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLWdyZWVuLTMwMCk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtdmVyc2lvbi1zdGFsZW5lc3MtaW5kaWNhdG9yPSdzdGFsZSddIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItYW1iZXItODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLXZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvcj0nb3V0ZGF0ZWQnXSB7XFxuICAgIGZpbGw6IHZhcigtLWNvbG9yLXJlZC04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLXJlZC0zMDApO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLXZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvcj0ndW5rbm93biddIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItZ3JheS04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gckc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBySihlKXt2YXIgbj1lLnZlcnNpb25JbmZvLHQ9bi5zdGFsZW5lc3Mscj1uQihuKSxvPXIudGV4dCxhPXIuaW5kaWNhdG9yQ2xhc3MsaT1yLnRpdGxlO3JldHVybiB0LnN0YXJ0c1dpdGgoXCJzdGFsZVwiKT8oMCx5LmpzeHMpKFwiYVwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWJcIjohMCx0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsaHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3ZlcnNpb24tc3RhbGVuZXNzXCIsdGl0bGU6aSxjaGlsZHJlbjpbKDAseS5qc3gpKG5NLHtcImRhdGEtbmV4dGpzLXZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvclwiOmF9KSwoMCx5LmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOm99KV19KTooMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZm9vdGVyLXRhYlwiOiEwLHRpdGxlOmksY2hpbGRyZW46WygwLHkuanN4KShuTSx7XCJkYXRhLW5leHRqcy12ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3JcIjphfSksKDAseS5qc3gpKFwic3BhblwiLHtjaGlsZHJlbjpvfSldfSl9dmFyIHIwPWVpKHJHKCkpO2Z1bmN0aW9uIHIxKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlcl0ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogMCAwIHZhcigtLXJvdW5kZWQteGwpIHZhcigtLXJvdW5kZWQteGwpO1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZm9vdGVyLXRhYi1ncm91cF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogMTJweDtcXG4gICAgZ2FwOiA4cHg7XFxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XFxuICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG5cXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiAxMnB4O1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItYnVuZGxlci1uYW1lPSdUVVJCT1BBQ0snXSB7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICB0byByaWdodCxcXG4gICAgICB2YXIoLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQpIDAlLFxcbiAgICAgIHZhcigtLWNvbG9yLXR1cmJvcGFjay10ZXh0LWJsdWUpIDEwMCVcXG4gICAgKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xcbiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcXG4gICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiByMT1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIHIyKGUpe3ZhciBuPWUudmVyc2lvbkluZm8sdD1lLmlzRHJhZ2dhYmxlLHI9ZS5zaG93UmVzdGFydFNlcnZlckJ1dHRvbixvPShwcm9jZXNzLmVudi5fX05FWFRfQlVORExFUnx8XCJXRUJQQUNLXCIpLnRvVXBwZXJDYXNlKCk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3RlclwiOiEwLFwiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZHJhZ2dhYmxlXCI6dCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItZ3JvdXBcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKHJKLHt2ZXJzaW9uSW5mbzpufSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItYnVuZGxlci1uYW1lXCI6byxjaGlsZHJlbjpvfSksKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItYnVuZGxlci1zdGF0dXNcIjohMCxjaGlsZHJlbjpcImVuYWJsZWRcIn0pXX0pXX0pLHImJigwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItZ3JvdXBcIjohMCxjaGlsZHJlbjooMCx5LmpzeCkoclEse3Nob3dCdXR0b246ITB9KX0pXX0pfXZhciByND1laShyMSgpKTtmdW5jdGlvbiByNShlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixcImFyaWEtaGlkZGVuXCI6ITB9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTE0LjA2MDcgNS40OTk5OUwxMy41MzAzIDYuMDMwMzJMOC43MDcxIDEwLjg1MzVDOC4zMTY1OCAxMS4yNDQxIDcuNjgzNDEgMTEuMjQ0MSA3LjI5Mjg5IDEwLjg1MzVMMi40Njk2NiA2LjAzMDMyTDEuOTM5MzMgNS40OTk5OUwyLjk5OTk5IDQuNDM5MzNMMy41MzAzMiA0Ljk2OTY2TDcuOTk5OTkgOS40MzkzM0wxMi40Njk3IDQuOTY5NjZMMTMgNC40MzkzM0wxNC4wNjA3IDUuNDk5OTlaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIHIzKGUpe3ZhciBuLHQscj1lLmNoaWxkcmVuLG89ZS5wcmVmaXgsYT1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wiY2hpbGRyZW5cIixcInByZWZpeFwiXSk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLXNlbGVjdFwiOiEwLGNoaWxkcmVuOltvLCgwLHkuanN4KShcInNlbGVjdFwiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe30sYSksdD10PXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKSwoMCx5LmpzeCkocjUse3dpZHRoOjE2LGhlaWdodDoxNn0pXX0pfWZ1bmN0aW9uIHI2KGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiByOShlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gcjYoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gcjYoZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gcjgoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3NdIHtcXG4gICAgcGFkZGluZzogMTZweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXTpmaXJzdC1jaGlsZCB7XFxuICAgIHBhZGRpbmctdG9wOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb25dIHtcXG4gICAgcGFkZGluZzogMTJweCAwO1xcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogMjRweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXTpsYXN0LWNoaWxkIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDA7XFxuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXJdIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgZmxleDogMTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlcl0gbGFiZWwge1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tZGVzY3JpcHRpb25dIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLXNlbGVjdF0sXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1hY3Rpb24tYnV0dG9uXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogOHB4O1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1sZyk7XFxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBwYWRkaW5nOiA2cHggOHB4O1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1zZWxlY3RdIHtcXG4gICAgJjpmb2N1cy13aXRoaW4ge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICB9XFxuXFxuICAgIHNlbGVjdCB7XFxuICAgICAgYWxsOiB1bnNldDtcXG4gICAgfVxcblxcbiAgICBvcHRpb24ge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgOmdsb2JhbCguaWNvbikge1xcbiAgICB3aWR0aDogMThweDtcXG4gICAgaGVpZ2h0OiAxOHB4O1xcbiAgICBjb2xvcjogIzY2NjtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gcjg9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiByNyhlKXtzd2l0Y2goZS50aGVtZSl7Y2FzZVwic3lzdGVtXCI6cmV0dXJuKDAseS5qc3gpKHJlLHt9KTtjYXNlXCJkYXJrXCI6cmV0dXJuKDAseS5qc3gpKHQ3LHt9KTtjYXNlXCJsaWdodFwiOnJldHVybigwLHkuanN4KSh0OCx7fSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gb2UoZSl7dmFyIG49ZS5kZXZUb29sc1Bvc2l0aW9uLHQ9ZS5zY2FsZSxyPWUuaGFuZGxlUG9zaXRpb25DaGFuZ2Usbz1lLmhhbmRsZVNjYWxlQ2hhbmdlLGE9cjkoKDAseC51c2VTdGF0ZSkoZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgbG9jYWxTdG9yYWdlKXJldHVyblwic3lzdGVtXCI7dmFyIGU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oUSk7cmV0dXJuXCJkYXJrXCI9PT1lfHxcImxpZ2h0XCI9PT1lP2U6XCJzeXN0ZW1cIn0oKSksMiksaT1hWzBdLGw9YVsxXTtmdW5jdGlvbiBzKGUpe3ZhciBuPVwiL19fbmV4dGpzX3Jlc3RhcnRfZGV2XCI7ZSYmKG49XCIvX19uZXh0anNfcmVzdGFydF9kZXY/aW52YWxpZGF0ZVBlcnNpc3RlbnRDYWNoZVwiKSxmZXRjaChuLHttZXRob2Q6XCJQT1NUXCJ9KS50aGVuKGZ1bmN0aW9uKCl7fSl9cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtodG1sRm9yOlwidGhlbWVcIixjaGlsZHJlbjpcIlRoZW1lXCJ9KSwoMCx5LmpzeCkoXCJwXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjcmlwdGlvblwiOiEwLGNoaWxkcmVuOlwiU2VsZWN0IHlvdXIgdGhlbWUgcHJlZmVyZW5jZS5cIn0pXX0pLCgwLHkuanN4cykocjMse2lkOlwidGhlbWVcIixuYW1lOlwidGhlbWVcIixwcmVmaXg6KDAseS5qc3gpKHI3LHt0aGVtZTppfSksdmFsdWU6aSxvbkNoYW5nZTpmdW5jdGlvbihlKXt2YXIgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibmV4dGpzLXBvcnRhbFwiKTtpZihuKXtpZihsKGUudGFyZ2V0LnZhbHVlKSxcInN5c3RlbVwiPT09ZS50YXJnZXQudmFsdWUpe24uY2xhc3NMaXN0LnJlbW92ZShcImRhcmtcIiksbi5jbGFzc0xpc3QucmVtb3ZlKFwibGlnaHRcIiksbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oUSk7cmV0dXJufVwiZGFya1wiPT09ZS50YXJnZXQudmFsdWU/KG4uY2xhc3NMaXN0LmFkZChcImRhcmtcIiksbi5jbGFzc0xpc3QucmVtb3ZlKFwibGlnaHRcIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oUSxcImRhcmtcIikpOihuLmNsYXNzTGlzdC5yZW1vdmUoXCJkYXJrXCIpLG4uY2xhc3NMaXN0LmFkZChcImxpZ2h0XCIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKFEsXCJsaWdodFwiKSl9fSxjaGlsZHJlbjpbKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwic3lzdGVtXCIsY2hpbGRyZW46XCJTeXN0ZW1cIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImxpZ2h0XCIsY2hpbGRyZW46XCJMaWdodFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwiZGFya1wiLGNoaWxkcmVuOlwiRGFya1wifSldfSldfSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb25cIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24taGVhZGVyXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2h0bWxGb3I6XCJwb3NpdGlvblwiLGNoaWxkcmVuOlwiUG9zaXRpb25cIn0pLCgwLHkuanN4KShcInBcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWRlc2NyaXB0aW9uXCI6ITAsY2hpbGRyZW46XCJBZGp1c3QgdGhlIHBsYWNlbWVudCBvZiB5b3VyIGRldiB0b29scy5cIn0pXX0pLCgwLHkuanN4cykocjMse2lkOlwicG9zaXRpb25cIixuYW1lOlwicG9zaXRpb25cIix2YWx1ZTpuLG9uQ2hhbmdlOnIsY2hpbGRyZW46WygwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImJvdHRvbS1sZWZ0XCIsY2hpbGRyZW46XCJCb3R0b20gTGVmdFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwiYm90dG9tLXJpZ2h0XCIsY2hpbGRyZW46XCJCb3R0b20gUmlnaHRcIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcInRvcC1sZWZ0XCIsY2hpbGRyZW46XCJUb3AgTGVmdFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwidG9wLXJpZ2h0XCIsY2hpbGRyZW46XCJUb3AgUmlnaHRcIn0pXX0pXX0pLCgwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtodG1sRm9yOlwic2l6ZVwiLGNoaWxkcmVuOlwiU2l6ZVwifSksKDAseS5qc3gpKFwicFwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tZGVzY3JpcHRpb25cIjohMCxjaGlsZHJlbjpcIkFkanVzdCB0aGUgc2l6ZSBvZiB5b3VyIGRldiB0b29scy5cIn0pXX0pLCgwLHkuanN4KShyMyx7aWQ6XCJzaXplXCIsbmFtZTpcInNpemVcIix2YWx1ZTp0LG9uQ2hhbmdlOm8sY2hpbGRyZW46T2JqZWN0LmVudHJpZXMoUykubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPXI5KGUsMiksdD1uWzBdLHI9blsxXTtyZXR1cm4oMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6cixjaGlsZHJlbjp0fSx0KX0pfSldfSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb25cIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24taGVhZGVyXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2lkOlwiaGlkZS1kZXYtdG9vbHNcIixjaGlsZHJlbjpcIkhpZGUgRGV2IFRvb2xzIGZvciB0aGlzIHNlc3Npb25cIn0pLCgwLHkuanN4KShcInBcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWRlc2NyaXB0aW9uXCI6ITAsY2hpbGRyZW46XCJIaWRlIERldiBUb29scyB1bnRpbCB5b3UgcmVzdGFydCB5b3VyIGRldiBzZXJ2ZXIsIG9yIDEgZGF5LlwifSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOigwLHkuanN4cykoXCJidXR0b25cIix7XCJhcmlhLWRlc2NyaWJlZGJ5XCI6XCJoaWRlLWRldi10b29sc1wiLG5hbWU6XCJoaWRlLWRldi10b29sc1wiLFwiZGF0YS1oaWRlLWRldi10b29sc1wiOiEwLFwiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1hY3Rpb24tYnV0dG9uXCI6ITAsb25DbGljazpmdW5jdGlvbigpe2ZldGNoKFwiL19fbmV4dGpzX2Rpc2FibGVfZGV2X2luZGljYXRvclwiLHttZXRob2Q6XCJQT1NUXCJ9KX0sY2hpbGRyZW46WygwLHkuanN4KSh0OSx7fSksKDAseS5qc3gpKFwic3BhblwiLHtjaGlsZHJlbjpcIkhpZGVcIn0pXX0pfSldfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvblwiOiEwLGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtjaGlsZHJlbjpcIkRpc2FibGUgRGV2IFRvb2xzIGZvciB0aGlzIHByb2plY3RcIn0pLCgwLHkuanN4cykoXCJwXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjcmlwdGlvblwiOiEwLGNoaWxkcmVuOltcIlRvIGRpc2FibGUgdGhpcyBVSSBjb21wbGV0ZWx5LCBzZXRcIixcIiBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcImRldkluZGljYXRvcnM6IGZhbHNlXCJ9KSxcIiBpbiB5b3VyIFwiLCgwLHkuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOlwibmV4dC5jb25maWdcIn0pLFwiIGZpbGUuXCJdfSldfSl9KSwoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvblwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aWQ6XCJyZXN0YXJ0LWRldi1zZXJ2ZXJcIixjaGlsZHJlbjpcIlJlc3RhcnQgRGV2IFNlcnZlclwifSksKDAseS5qc3gpKFwicFwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tZGVzY3JpcHRpb25cIjohMCxjaGlsZHJlbjpcIlJlc3RhcnRzIHRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIgd2l0aG91dCBuZWVkaW5nIHRvIGxlYXZlIHRoZSBicm93c2VyLlwifSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOigwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGVzY3JpYmVkYnlcIjpcInJlc3RhcnQtZGV2LXNlcnZlclwiLHRpdGxlOlwiUmVzdGFydHMgdGhlIGRldmVsb3BtZW50IHNlcnZlciB3aXRob3V0IG5lZWRpbmcgdG8gbGVhdmUgdGhlIGJyb3dzZXIuXCIsbmFtZTpcInJlc3RhcnQtZGV2LXNlcnZlclwiLFwiZGF0YS1yZXN0YXJ0LWRldi1zZXJ2ZXJcIjohMCxcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tYWN0aW9uLWJ1dHRvblwiOiEwLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gcyghMSl9LGNoaWxkcmVuOigwLHkuanN4KShcInNwYW5cIix7Y2hpbGRyZW46XCJSZXN0YXJ0XCJ9KX0pfSldfSkscHJvY2Vzcy5lbnYuX19ORVhUX1RVUkJPUEFDS19QRVJTSVNURU5UX0NBQ0hFPygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtpZDpcInJlc2V0LWJ1bmRsZXItY2FjaGVcIixjaGlsZHJlbjpcIlJlc2V0IEJ1bmRsZXIgQ2FjaGVcIn0pLCgwLHkuanN4KShcInBcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWRlc2NyaXB0aW9uXCI6ITAsY2hpbGRyZW46XCJDbGVhcnMgdGhlIGJ1bmRsZXIgY2FjaGUgYW5kIHJlc3RhcnRzIHRoZSBkZXYgc2VydmVyLiBIZWxwZnVsIGlmIHlvdSBhcmUgc2VlaW5nIHN0YWxlIGVycm9ycyBvciBjaGFuZ2VzIGFyZSBub3QgYXBwZWFyaW5nLlwifSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOigwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGVzY3JpYmVkYnlcIjpcInJlc2V0LWJ1bmRsZXItY2FjaGVcIix0aXRsZTpcIkNsZWFycyB0aGUgYnVuZGxlciBjYWNoZSBhbmQgcmVzdGFydHMgdGhlIGRldiBzZXJ2ZXIuIEhlbHBmdWwgaWYgeW91IGFyZSBzZWVpbmcgc3RhbGUgZXJyb3JzIG9yIGNoYW5nZXMgYXJlIG5vdCBhcHBlYXJpbmcuXCIsbmFtZTpcInJlc2V0LWJ1bmRsZXItY2FjaGVcIixcImRhdGEtcmVzZXQtYnVuZGxlci1jYWNoZVwiOiEwLFwiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1hY3Rpb24tYnV0dG9uXCI6ITAsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBzKCEwKX0sY2hpbGRyZW46KDAseS5qc3gpKFwic3BhblwiLHtjaGlsZHJlbjpcIlJlc2V0IENhY2hlXCJ9KX0pfSldfSk6bnVsbF19KX12YXIgb249ZWkocjgoKSk7ZnVuY3Rpb24gb3QoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLXNrZWxldG9uLWJhcl0ge1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTIpO1xcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxcbiAgICAgIDkwZGVnLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSAyNSUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0xMDApIDUwJSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgNzUlXFxuICAgICk7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSAxMDAlO1xcbiAgICBhbmltYXRpb246IHNrZWxldG9uLXNoaW1tZXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc2tlbGV0b24tYmFyPScxJ10ge1xcbiAgICB3aWR0aDogNzUlO1xcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLXNrZWxldG9uLWJhcj0nMiddIHtcXG4gICAgd2lkdGg6IDM2LjUlO1xcbiAgfVxcblxcbiAgQGtleWZyYW1lcyBza2VsZXRvbi1zaGltbWVyIHtcXG4gICAgMCUge1xcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMDAlIDA7XFxuICAgIH1cXG4gICAgMTAwJSB7XFxuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMjAwJSAwO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKiBSZXNwZWN0IHVzZXIncyBtb3Rpb24gcHJlZmVyZW5jZXMgKi9cXG4gIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAgIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc2tlbGV0b24tYmFyPScxJ10sXFxuICAgIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc2tlbGV0b24tYmFyPScyJ10ge1xcbiAgICAgIGFuaW1hdGlvbjogbm9uZTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICAgIH1cXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvcigpe3JldHVybigwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1za2VsZXRvbi1iYXJcIjpcIjFcIn0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1za2VsZXRvbi1iYXJcIjpcIjJcIn0pXX0pfXZhciBvbz1laShvdCgpKTtmdW5jdGlvbiBvYSgpe3ZhciBlLG4sdD0oZT1bXCJcXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgZ2FwOiA0cHg7XFxuICAgIHBhZGRpbmc6IDhweDtcXG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcblxcbiAgICBAbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcXG4gICAgICBtYXgtd2lkdGg6IDExMnB4O1xcbiAgICB9XFxuXFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgICAgIG1heC13aWR0aDogMTM4cHg7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG5cXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAgICAgbWF4LXdpZHRoOiAxNzIuNXB4O1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICB9XFxuXFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgICAgIG1heC13aWR0aDogMjMwcHg7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWVdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgcGFkZGluZzogMTBweCA4cHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbGcpO1xcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZS1pbi1vdXQ7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG4gICAgfVxcblxcbiAgICAmOmFjdGl2ZSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0zMDApO1xcbiAgICB9XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLWFjdGl2ZT0ndHJ1ZSddIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1lcnJvci10eXBlXSB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc291cmNlXSB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEzKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTgpO1xcbiAgfVxcblxcbiAgLyogRWxsaXBzaXMgZm9yIGxvbmcgc3RhY2sgZnJhbWUgc291cmNlIG9yIHNtYWxsIGRldmljZXMuICovXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLWVycm9yLXR5cGVdLFxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1zb3VyY2VdIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb2E9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvaShlKXt2YXIgbj1lLnJ1bnRpbWVFcnJvcnMsdD1lLmFjdGl2ZUlkeCxyPWUuc2V0QWN0aXZlSW5kZXg7cmV0dXJuIDA9PT1uLmxlbmd0aD9udWxsOigwLHkuanN4KShcImFzaWRlXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyXCI6ITAsY2hpbGRyZW46bi5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgbz1uPT09dDtyZXR1cm4oMCx5LmpzeCkob3Mse3J1bnRpbWVFcnJvcjplLGlkeDpuLGlzQWN0aXZlOm8sc2V0QWN0aXZlSW5kZXg6cn0sbil9KX0pfXZhciBvbD0oMCx4Lm1lbW8pKGZ1bmN0aW9uKGUpe3ZhciBuPWUucnVudGltZUVycm9yLHQ9dGoobikscj0oMCx4LnVzZU1lbW8pKGZ1bmN0aW9uKCl7dmFyIGUsbj10LmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4hZS5pZ25vcmVkJiYhIWUub3JpZ2luYWxDb2RlRnJhbWUmJiEhZS5vcmlnaW5hbFN0YWNrRnJhbWV9KTtyZXR1cm4gbnVsbCE9KGU9dFtuXSk/ZTpudWxsfSxbdF0pO2lmKCEobnVsbD09cj92b2lkIDA6ci5vcmlnaW5hbFN0YWNrRnJhbWUpKXJldHVybiBudWxsO3ZhciBvPXR6KG4uZXJyb3Isbi50eXBlKSxhPWVTKHIub3JpZ2luYWxTdGFja0ZyYW1lKTtyZXR1cm4oMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLWVycm9yLXR5cGVcIjohMCxjaGlsZHJlbjpvfSksKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1zb3VyY2VcIjohMCxjaGlsZHJlbjphfSldfSl9KSxvcz0oMCx4Lm1lbW8pKGZ1bmN0aW9uKGUpe3ZhciBuPWUucnVudGltZUVycm9yLHQ9ZS5pZHgscj1lLmlzQWN0aXZlLG89ZS5zZXRBY3RpdmVJbmRleDtyZXR1cm4oMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWVcIjohMCxcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1hY3RpdmVcIjpyLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0KX0sY2hpbGRyZW46KDAseS5qc3gpKHguU3VzcGVuc2Use2ZhbGxiYWNrOigwLHkuanN4KShvcix7fSksY2hpbGRyZW46KDAseS5qc3gpKG9sLHtydW50aW1lRXJyb3I6bn0pfSl9KX0pLG9jPWVpKG9hKCkpO2Z1bmN0aW9uIG91KCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbl0ge1xcbiAgICBtYXJnaW46IDhweCAwO1xcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1oZWFkZXJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogMTJweDtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7XFxuICAgIGdhcDogNnB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1pY29uXSB7XFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgICAgOTBkZWcsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDI1JSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTEwMCkgNTAlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSA3NSVcXG4gICAgKTtcXG4gICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDEwMCU7XFxuICAgIGFuaW1hdGlvbjogc2tlbGV0b24tc2hpbW1lciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24taGVhZGVyLWJhcl0ge1xcbiAgICB3aWR0aDogNDIuOSU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWJ1dHRvbl0ge1xcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICA5MGRlZyxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgMjUlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMTAwKSA1MCUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDc1JVxcbiAgICApO1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMCUgMTAwJTtcXG4gICAgYW5pbWF0aW9uOiBza2VsZXRvbi1zaGltbWVyIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XFxuICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1jb250ZW50XSB7XFxuICAgIHBhZGRpbmc6IDEycHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmVdIHtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICA5MGRlZyxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgMjUlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMTAwKSA1MCUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDc1JVxcbiAgICApO1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMCUgMTAwJTtcXG4gICAgYW5pbWF0aW9uOiBza2VsZXRvbi1zaGltbWVyIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XFxuICAgIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tbGluZV06bGFzdC1jaGlsZCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmUtMV0ge1xcbiAgICB3aWR0aDogMzIuNSU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmUtMl0ge1xcbiAgICB3aWR0aDogNTYuOCU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmUtM10ge1xcbiAgICB3aWR0aDogMjkuNiU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb250YWluZXJdIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBtYXJnaW4tdG9wOiA4cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb3VudC1za2VsZXRvbl0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMjApO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgICAgOTBkZWcsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDI1JSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTEwMCkgNTAlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSA3NSVcXG4gICAgKTtcXG4gICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDEwMCU7XFxuICAgIGFuaW1hdGlvbjogc2tlbGV0b24tc2hpbW1lciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2staWdub3JlZC1saXN0LXRvZ2dsZS1idXR0b24tc2tlbGV0b25dIHtcXG4gICAgYWxsOiB1bnNldDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgICBwYWRkaW5nOiA0cHggNnB4O1xcbiAgICBtYXJnaW4tcmlnaHQ6IC02cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1za2VsZXRvbi1iYXJdIHtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTEyKTtcXG4gICAgd2lkdGg6IDE0OHB4O1xcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxcbiAgICAgIDkwZGVnLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSAyNSUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0xMDApIDUwJSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgNzUlXFxuICAgICk7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSAxMDAlO1xcbiAgICBhbmltYXRpb246IHNrZWxldG9uLXNoaW1tZXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcXG4gIH1cXG5cXG4gIEBrZXlmcmFtZXMgc2tlbGV0b24tc2hpbW1lciB7XFxuICAgIDAlIHtcXG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjAwJSAwO1xcbiAgICB9XFxuICAgIDEwMCUge1xcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLyogUmVzcGVjdCB1c2VyJ3MgbW90aW9uIHByZWZlcmVuY2VzICovXFxuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWljb25dLFxcbiAgICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWhlYWRlci1iYXJdLFxcbiAgICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWJ1dHRvbl0sXFxuICAgIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tbGluZV0sXFxuICAgIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvdW50LXNrZWxldG9uXSxcXG4gICAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stc2tlbGV0b24tYmFyXSB7XFxuICAgICAgYW5pbWF0aW9uOiBub25lO1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG4gICAgfVxcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBvdT1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIG9kKCl7cmV0dXJuKDAseS5qc3hzKSh5LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvblwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24taWNvblwiOiEwfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmVcIjohMCxcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1oZWFkZXItYmFyXCI6ITB9KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWNvbnRlbnRcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmVcIjohMCxcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lLTFcIjohMH0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lXCI6ITAsXCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tbGluZS0yXCI6ITB9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tbGluZVwiOiEwLFwiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmUtM1wiOiEwfSldfSldfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb250YWluZXJcIjohMCxjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcInBcIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLXRpdGxlXCI6ITAsY2hpbGRyZW46W1wiQ2FsbCBTdGFja1wiLFwiIFwiLCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvdW50XCI6ITAsXCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvdW50LXNrZWxldG9uXCI6ITB9KV19KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWlnbm9yZWQtbGlzdC10b2dnbGUtYnV0dG9uXCI6ITAsXCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWlnbm9yZWQtbGlzdC10b2dnbGUtYnV0dG9uLXNrZWxldG9uXCI6ITAsXCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLGNoaWxkcmVuOigwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stc2tlbGV0b24tYmFyXCI6ITB9KX0pXX0pfSldfSl9dmFyIG9mPWVpKG91KCkpO2Z1bmN0aW9uIG9wKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBvaChlLG4sdCxyLG8sYSxpKXt0cnl7dmFyIGw9ZVthXShpKSxzPWwudmFsdWV9Y2F0Y2goZSl7dChlKTtyZXR1cm59bC5kb25lP24ocyk6UHJvbWlzZS5yZXNvbHZlKHMpLnRoZW4ocixvKX1mdW5jdGlvbiBvZyhlLG4sdCl7cmV0dXJuIG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT10LGV9ZnVuY3Rpb24gb20oKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtaXNzdWUtZmVlZGJhY2stYnV0dG9uLWdyb3VwXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc21hbGwpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWlzc3VlLWZlZWRiYWNrLWJ1dHRvbi1ncm91cF0gYnV0dG9uIHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1pc3N1ZS1mZWVkYmFjay1idXR0b24tZ3JvdXBdIGJ1dHRvbjpmaXJzdC1jaGlsZCB7XFxuICAgIHBhZGRpbmc6IDRweCAzcHggNHB4IDVweDtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKSAwIDAgdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1pc3N1ZS1mZWVkYmFjay1idXR0b24tZ3JvdXBdIGJ1dHRvbjpsYXN0LWNoaWxkIHtcXG4gICAgcGFkZGluZzogNHB4IDVweCA0cHggM3B4O1xcbiAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLXJvdW5kZWQtZnVsbCkgdmFyKC0tcm91bmRlZC1mdWxsKSAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWlzc3VlLWZlZWRiYWNrLXNlcGFyYXRvcl0ge1xcbiAgICB3aWR0aDogMXB4O1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb209ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvdihlKXt2YXIgbix0LHI9ZS5lcnJvckNvZGUsbz0obj0oMCx4LnVzZVN0YXRlKSh7fSksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG9wKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG9wKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxhPW9bMF0saT1vWzFdLGw9YVtyXSxzPXByb2Nlc3MuZW52Ll9fTkVYVF9URUxFTUVUUllfRElTQUJMRUQsYz0oMCx4LnVzZUNhbGxiYWNrKShmdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4obj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciB0LHIsbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LGk9T2JqZWN0LmNyZWF0ZSgoXCJmdW5jdGlvblwiPT10eXBlb2YgSXRlcmF0b3I/SXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpO3JldHVybiBpLm5leHQ9bCgwKSxpLnRocm93PWwoMSksaS5yZXR1cm49bCgyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGM9W2wsc107aWYodCl0aHJvdyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7aSYmKGk9MCxjWzBdJiYoYT0wKSksYTspdHJ5e2lmKHQ9MSxyJiYobz0yJmNbMF0/ci5yZXR1cm46Y1swXT9yLnRocm93fHwoKG89ci5yZXR1cm4pJiZvLmNhbGwociksMCk6ci5uZXh0KSYmIShvPW8uY2FsbChyLGNbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChyPTAsbyYmKGM9WzImY1swXSxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoNj09PWNbMF18fDI9PT1jWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1jWzBdJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7YS5sYWJlbD1jWzFdO2JyZWFrfWlmKDY9PT1jWzBdJiZhLmxhYmVsPG9bMV0pe2EubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmYS5sYWJlbDxvWzJdKXthLmxhYmVsPW9bMl0sYS5vcHMucHVzaChjKTticmVha31vWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9Yz1uLmNhbGwoZSxhKX1jYXRjaChlKXtjPVs2LGVdLHI9MH1maW5hbGx5e3Q9bz0wfWlmKDUmY1swXSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX19KHRoaXMsZnVuY3Rpb24obil7c3dpdGNoKG4ubGFiZWwpe2Nhc2UgMDppKGZ1bmN0aW9uKG4pe3ZhciB0LG87cmV0dXJuIHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe29nKGUsbix0W25dKX0pfXJldHVybiBlfSh7fSxuKSxvPW51bGwhPShvPW9nKHt9LHIsZSkpP286e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChvKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobyxlKSl9KSx0fSksbi5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gbi50cnlzLnB1c2goWzEsMywsNF0pLFs0LGZldGNoKFwiXCIuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEh8fFwiXCIsXCIvX19uZXh0anNfZXJyb3JfZmVlZGJhY2s/XCIpLmNvbmNhdChuZXcgVVJMU2VhcmNoUGFyYW1zKHtlcnJvckNvZGU6cix3YXNIZWxwZnVsOmUudG9TdHJpbmcoKX0pKSldO2Nhc2UgMjpyZXR1cm4gbi5zZW50KCkub2t8fGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcmVjb3JkIGZlZWRiYWNrIG9uIHRoZSBzZXJ2ZXIuXCIpLFszLDRdO2Nhc2UgMzpyZXR1cm4gY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byByZWNvcmQgZmVlZGJhY2s6XCIsbi5zZW50KCkpLFszLDRdO2Nhc2UgNDpyZXR1cm5bMl19fSl9LGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgYT1uLmFwcGx5KGUsdCk7ZnVuY3Rpb24gaShlKXtvaChhLHIsbyxpLGwsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gbChlKXtvaChhLHIsbyxpLGwsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pfSkoKX0sW3JdKTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtaXNzdWUtZmVlZGJhY2stYnV0dG9uLWdyb3VwXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGlzYWJsZWRcIjpzP1widHJ1ZVwiOnZvaWQgMCxcImFyaWEtbGFiZWxcIjpcIk1hcmsgYXMgaGVscGZ1bFwiLG9uQ2xpY2s6cz92b2lkIDA6ZnVuY3Rpb24oKXtyZXR1cm4gYyghMCl9LGNsYXNzTmFtZTooMCxlSi5jeCkoXCJmZWVkYmFjay1idXR0b25cIiwhMD09PWwmJlwidm90ZWRcIiksdGl0bGU6cz9cIkZlZWRiYWNrIGRpc2FibGVkIGR1ZSB0byBzZXR0aW5nIE5FWFRfVEVMRU1FVFJZX0RJU0FCTEVEXCI6dm9pZCAwLHR5cGU6XCJidXR0b25cIixjaGlsZHJlbjooMCx5LmpzeCkobncse1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtaXNzdWUtZmVlZGJhY2stc2VwYXJhdG9yXCI6ITB9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWRpc2FibGVkXCI6cz9cInRydWVcIjp2b2lkIDAsXCJhcmlhLWxhYmVsXCI6XCJNYXJrIGFzIG5vdCBoZWxwZnVsXCIsb25DbGljazpzP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiBjKCExKX0sY2xhc3NOYW1lOigwLGVKLmN4KShcImZlZWRiYWNrLWJ1dHRvblwiLCExPT09bCYmXCJ2b3RlZFwiKSx0aXRsZTpzP1wiRmVlZGJhY2sgZGlzYWJsZWQgZHVlIHRvIHNldHRpbmcgTkVYVF9URUxFTUVUUllfRElTQUJMRURcIjp2b2lkIDAsdHlwZTpcImJ1dHRvblwiLGNoaWxkcmVuOigwLHkuanN4KShuaix7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLHN0eWxlOnt0cmFuc2xhdGU6XCIxcHggMXB4XCJ9fSl9KV19KX12YXIgb2I9ZWkob20oKSk7ZnVuY3Rpb24gb3koKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1jb250ZW50LWxheW91dF0ge1xcbiAgICBmbGV4OiAxO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgICBwYWRkaW5nOiAxNHB4O1xcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBveT1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIG94KGUpe3ZhciBuPWUuZXJyb3IsdD1lLmVycm9yVHlwZSxyPWUubWVzc2FnZSxvPWUuZGVidWdJbmZvLGE9ZS5jaGlsZHJlbixpPWUuZXJyb3JDb2RlLGw9ZS5lbnZpcm9ubWVudE5hbWU7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtY29udGVudC1sYXlvdXRcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2Vycm9yX3RpdGxlXCIsXCJkYXRhLW5leHRqcy1lcnJvci1jb2RlXCI6aSxjaGlsZHJlbjpbKDAseS5qc3hzKShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1lcnJvci1sYWJlbC1ncm91cFwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkobkwse2Vycm9yVHlwZTp0fSksbCYmKDAseS5qc3gpKG5LLHtlbnZpcm9ubWVudE5hbWU6bH0pXX0pLCgwLHkuanN4KShueCx7ZXJyb3I6bixkZWJ1Z0luZm86byxmZWVkYmFja0J1dHRvbjppJiYoMCx5LmpzeCkob3Yse2Vycm9yQ29kZTppfSl9KV19KSwoMCx5LmpzeCkobnose2Vycm9yTWVzc2FnZTpyfSldfSksYV19KX12YXIgb3c9ZWkob3koKSk7ZnVuY3Rpb24gb2ooZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEyIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTMuOTgwNzEgMS4xMjVMMS4xMjUgMy45ODA3MUwxLjEyNSA4LjAxOTI5TDMuOTgwNzEgMTAuODc1SDguMDE5MjlMMTAuODc1IDguMDE5MjlWMy45ODA3MUw4LjAxOTI5IDEuMTI1SDMuOTgwNzFaTTMuODI1MzggMEMzLjYyNjQ3IDAgMy40MzU3IDAuMDc5MDE3NiAzLjI5NTA1IDAuMjE5NjdMMC4yMTk2NyAzLjI5NTA1QzAuMDc5MDE3NiAzLjQzNTcgMCAzLjYyNjQ3IDAgMy44MjUzOFY4LjE3NDYyQzAgOC4zNzM1MyAwLjA3OTAxNzggOC41NjQzIDAuMjE5NjcgOC43MDQ5NUwzLjI5NTA1IDExLjc4MDNDMy40MzU3IDExLjkyMSAzLjYyNjQ3IDEyIDMuODI1MzggMTJIOC4xNzQ2MkM4LjM3MzUzIDEyIDguNTY0MyAxMS45MjEgOC43MDQ5NSAxMS43ODAzTDExLjc4MDMgOC43MDQ5NUMxMS45MjEgOC41NjQzIDEyIDguMzczNTMgMTIgOC4xNzQ2MlYzLjgyNTM4QzEyIDMuNjI2NDcgMTEuOTIxIDMuNDM1NyAxMS43ODAzIDMuMjk1MDVMOC43MDQ5NSAwLjIxOTY3QzguNTY0MyAwLjA3OTAxNzcgOC4zNzM1MyAwIDguMTc0NjIgMEgzLjgyNTM4Wk02LjU2MjUgMi44MTI1VjMuMzc1VjZWNi41NjI1SDUuNDM3NVY2VjMuMzc1VjIuODEyNUg2LjU2MjVaTTYgOUM2LjQxNDIxIDkgNi43NSA4LjY2NDIxIDYuNzUgOC4yNUM2Ljc1IDcuODM1NzkgNi40MTQyMSA3LjUgNiA3LjVDNS41ODU3OSA3LjUgNS4yNSA3LjgzNTc5IDUuMjUgOC4yNUM1LjI1IDguNjY0MjEgNS41ODU3OSA5IDYgOVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gb2soKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1lbXB0eV0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4OiAxO1xcbiAgICBwYWRkaW5nOiAxMnB4O1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktY29udGVudF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgZmxleDogMTtcXG4gICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNTAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktaWNvbl0ge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbiAgICBwYWRkaW5nOiA4cHg7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xcblxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktdGl0bGVdIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtc2l6ZTogMTZweDtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTIwKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLWVtcHR5LXN1YnRpdGxlXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogMTRweDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTIxKTtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb2s9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvQSgpe3JldHVybigwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHlcIjohMCxjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1lbXB0eS1jb250ZW50XCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktaWNvblwiOiEwLGNoaWxkcmVuOigwLHkuanN4KShvaix7d2lkdGg6MTYsaGVpZ2h0OjE2fSl9KSwoMCx5LmpzeCkoXCJoM1wiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktdGl0bGVcIjohMCxjaGlsZHJlbjpcIk5vIElzc3VlcyBGb3VuZFwifSksKDAseS5qc3gpKFwicFwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktc3VidGl0bGVcIjohMCxjaGlsZHJlbjpcIklzc3VlcyB3aWxsIGFwcGVhciBoZXJlIHdoZW4gdGhleSBvY2N1ci5cIn0pXX0pfSl9dmFyIG9PPWVpKG9rKCkpO2Z1bmN0aW9uIG9DKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBvUygpe3ZhciBlLG4sdD0oZT1bXCJcIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb1M9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvRShlKXt2YXIgbj1lLm5vdGVzLHQ9ZS5idWlsZEVycm9yLHI9ZS5oeWRyYXRpb25XYXJuaW5nLG89ZS5lcnJvckRldGFpbHMsYT1lLmFjdGl2ZUVycm9yLGk9ZS5lcnJvclR5cGUsbD1lLmRlYnVnSW5mbyxzPWUuZXJyb3JDb2RlO3JldHVybiB0PygwLHkuanN4KShveix7bWVzc2FnZTp0LGRlYnVnSW5mbzpsfSk6KDAseS5qc3gpKG9fLHtub3RlczpuLGh5ZHJhdGlvbldhcm5pbmc6cixlcnJvckRldGFpbHM6byxhY3RpdmVFcnJvcjphLGVycm9yVHlwZTppLGRlYnVnSW5mbzpsLGVycm9yQ29kZTpzfSl9ZnVuY3Rpb24gb18oZSl7dmFyIG49ZS5ub3Rlcyx0PWUuaHlkcmF0aW9uV2FybmluZyxyPWUuZXJyb3JEZXRhaWxzLG89ZS5hY3RpdmVFcnJvcixhPWUuZXJyb3JUeXBlLGk9ZS5kZWJ1Z0luZm8sbD1lLmVycm9yQ29kZTtyZXR1cm4gbyYmYT8oMCx5LmpzeHMpKG94LHtlcnJvcjpvLmVycm9yLGVycm9yVHlwZTphLG1lc3NhZ2U6by5lcnJvci5tZXNzYWdlLGRlYnVnSW5mbzppLGVycm9yQ29kZTpsLGVudmlyb25tZW50TmFtZTpvLmVycm9yLmVudmlyb25tZW50TmFtZSxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LW5vdGVzLWNvbnRhaW5lclwiLGNoaWxkcmVuOltuPygwLHkuanN4KSh5LkZyYWdtZW50LHtjaGlsZHJlbjooMCx5LmpzeCkoXCJwXCIse2lkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19ub3Rlc1wiLGNsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbm90ZXNcIixjaGlsZHJlbjpufSl9KTpudWxsLHQ/KDAseS5qc3gpKFwicFwiLHtpZDpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbGlua1wiLGNsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbGlua1wiLGNoaWxkcmVuOigwLHkuanN4KShlYix7dGV4dDpcIlNlZSBtb3JlIGluZm8gaGVyZTogXCIuY29uY2F0KG5wKX0pfSk6bnVsbF19KSwobnVsbD09cj92b2lkIDA6ci5yZWFjdE91dHB1dENvbXBvbmVudERpZmYpPygwLHkuanN4KSh0aCx7cmVhY3RPdXRwdXRDb21wb25lbnREaWZmOnIucmVhY3RPdXRwdXRDb21wb25lbnREaWZmfHxcIlwifSk6bnVsbCwoMCx5LmpzeCkoeC5TdXNwZW5zZSx7ZmFsbGJhY2s6KDAseS5qc3gpKG9kLHt9KSxjaGlsZHJlbjooMCx5LmpzeCkob1Ase2Vycm9yOm99LG8uaWQudG9TdHJpbmcoKSl9KV19KTooMCx5LmpzeCkob0Ese30pfWZ1bmN0aW9uIG9QKGUpe3ZhciBuLHQscj1lLmVycm9yLG89KG49KDAseC51c2VTdGF0ZSkoITEpLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvQyhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBvQyhlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksYT1vWzBdLGk9b1sxXSxsPXRqKHIpLHM9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybiBsLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBlKyArISFuLmlnbm9yZWR9LDApfSxbbF0pLGM9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3ZhciBlLG49bC5maW5kSW5kZXgoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaWdub3JlZCYmISFlLm9yaWdpbmFsQ29kZUZyYW1lJiYhIWUub3JpZ2luYWxTdGFja0ZyYW1lfSk7cmV0dXJuIG51bGwhPShlPWxbbl0pP2U6bnVsbH0sW2xdKTtyZXR1cm4oMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOltjJiZjLm9yaWdpbmFsU3RhY2tGcmFtZSYmYy5vcmlnaW5hbENvZGVGcmFtZSYmKDAseS5qc3gpKGVxLHtzdGFja0ZyYW1lOmMub3JpZ2luYWxTdGFja0ZyYW1lLGNvZGVGcmFtZTpjLm9yaWdpbmFsQ29kZUZyYW1lfSksbC5sZW5ndGg+MCYmKDAseS5qc3gpKHRsLHtmcmFtZXM6bCxpc0lnbm9yZUxpc3RPcGVuOmEsb25Ub2dnbGVJZ25vcmVMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoIWEpfSxpZ25vcmVkRnJhbWVzVGFsbHk6c30pXX0pfWZ1bmN0aW9uIG96KGUpe3ZhciBuPWUubWVzc2FnZSx0PWUuZGVidWdJbmZvLHI9RXJyb3Iobiksbz0oMCx4LnVzZU1lbW8pKGZ1bmN0aW9uKCl7cmV0dXJuIHR0KG4pfHxcIkZhaWxlZCB0byBjb21waWxlXCJ9LFtuXSk7cmV0dXJuKDAseS5qc3gpKG94LHtlcnJvclR5cGU6XCJCdWlsZCBFcnJvclwiLGVycm9yOnIsbWVzc2FnZTpvLGRlYnVnSW5mbzp0LGNoaWxkcmVuOigwLHkuanN4KSh0bix7Y29udGVudDpufSl9KX12YXIgb0w9ZWkob1MoKSk7ZnVuY3Rpb24gb1QoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlc10ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4OiAxO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBvVD1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIG9SKGUpe3ZhciBuPWUuZGVidWdJbmZvLHQ9ZS5ydW50aW1lRXJyb3JzLHI9ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyxvPWUuYnVpbGRFcnJvcixhPXRTKHtydW50aW1lRXJyb3JzOnQsZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6cn0pLGk9YS5lcnJvckNvZGUsbD1hLmVycm9yVHlwZSxzPWEuaHlkcmF0aW9uV2FybmluZyxjPWEuYWN0aXZlRXJyb3IsdT1hLmFjdGl2ZUlkeCxkPWEuc2V0QWN0aXZlSW5kZXgsZj1hLm5vdGVzLHA9YS5lcnJvckRldGFpbHM7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXNcIjohMCxjaGlsZHJlbjpbbz9udWxsOigwLHkuanN4KShvaSx7cnVudGltZUVycm9yczp0LGVycm9yVHlwZTpsLGFjdGl2ZUlkeDp1LHNldEFjdGl2ZUluZGV4OmR9KSwoMCx5LmpzeCkob0Use2J1aWxkRXJyb3I6byxub3RlczpmLGh5ZHJhdGlvbldhcm5pbmc6cyxlcnJvckRldGFpbHM6cCxhY3RpdmVFcnJvcjpjLGVycm9yVHlwZTpsLGRlYnVnSW5mbzpuLGVycm9yQ29kZTppfSldfSl9dmFyIG9OPWVpKG9UKCkpLG9EPXByb2Nlc3MuZW52Ll9fTkVYVF9ERVZUT09MX1NFR01FTlRfRVhQTE9SRVI/X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9vdmVydmlldy9zZWdtZW50LWV4cGxvcmVyLnRzeFwiKS51OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O2Z1bmN0aW9uIG9CKGUpe3ZhciBuPWUucm91dGVyVHlwZSx0PWUucGFnZTtyZXR1cm4oMCx5LmpzeCkob0Qse2lzQXBwUm91dGVyOlwiYXBwXCI9PT1uLHBhZ2U6dH0pfWZ1bmN0aW9uIG9NKGUpe3ZhciBuPWUucm91dGVyVHlwZSx0PWUucGFnZTtyZXR1cm4oMCx5LmpzeCkob0Ise3JvdXRlclR5cGU6bixwYWdlOnR9KX1mdW5jdGlvbiBvSShlKXt2YXIgbj1lLmFjdGl2ZVRhYix0PWUuZGV2VG9vbHNQb3NpdGlvbixyPWUuc2NhbGUsbz1lLnJvdXRlclR5cGUsYT1lLmhhbmRsZVBvc2l0aW9uQ2hhbmdlLGk9ZS5oYW5kbGVTY2FsZUNoYW5nZSxsPWUuZGVidWdJbmZvLHM9ZS5ydW50aW1lRXJyb3JzLGM9ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyx1PWUuYnVpbGRFcnJvcixkPWUucGFnZTtzd2l0Y2gobil7Y2FzZVwic2V0dGluZ3NcIjpyZXR1cm4oMCx5LmpzeCkob2Use2RldlRvb2xzUG9zaXRpb246dCxzY2FsZTpyLGhhbmRsZVBvc2l0aW9uQ2hhbmdlOmEsaGFuZGxlU2NhbGVDaGFuZ2U6aX0pO2Nhc2VcInJvdXRlXCI6cmV0dXJuKDAseS5qc3gpKG9NLHtyb3V0ZXJUeXBlOm8scGFnZTpkfSk7Y2FzZVwiaXNzdWVzXCI6cmV0dXJuKDAseS5qc3gpKG9SLHtkZWJ1Z0luZm86bCxydW50aW1lRXJyb3JzOnMsZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6YyxidWlsZEVycm9yOnV9KTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBvSChlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMy4wODg4OSAxMS44Mzg0TDIuNjI0ODYgMTIuMzAyNEwxLjY5Njc4IDExLjM3NDRMMi4xNjA4MiAxMC45MTAzTDYuMDcxNzggNi45OTkzN0wyLjE2MDgyIDMuMDg4NDFMMS42OTY3OCAyLjYyNDM3TDIuNjI0ODYgMS42OTYyOUwzLjA4ODg5IDIuMTYwMzNMNi45OTk4NiA2LjA3MTI5TDEwLjkxMDggMi4xNjAzM0wxMS4zNzQ5IDEuNjk2MjlMMTIuMzAyOSAyLjYyNDM3TDExLjgzODkgMy4wODg0MUw3LjkyNzkzIDYuOTk5MzdMMTEuODM4OSAxMC45MTAzTDEyLjMwMjkgMTEuMzc0NEwxMS4zNzQ5IDEyLjMwMjRMMTAuOTEwOCAxMS44Mzg0TDYuOTk5ODYgNy45Mjc0NEwzLjA4ODg5IDExLjgzODRaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIG9GKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBvVShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gb1YoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIG9xKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb31mdW5jdGlvbiBvVyhlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gb0YoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gb0YoZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbyQoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICAgICAgICAgIFtkYXRhLW5leHQtYmFkZ2Utcm9vdF0ge1xcbiAgICAgICAgICAgIC0tdGltaW5nOiBjdWJpYy1iZXppZXIoMC4yMywgMC44OCwgMC4yNiwgMC45Mik7XFxuICAgICAgICAgICAgLS1kdXJhdGlvbi1sb25nOiAyNTBtcztcXG4gICAgICAgICAgICAtLWNvbG9yLW91dGVyLWJvcmRlcjogIzE3MTcxNztcXG4gICAgICAgICAgICAtLWNvbG9yLWlubmVyLWJvcmRlcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4xNCk7XFxuICAgICAgICAgICAgLS1jb2xvci1ob3Zlci1hbHBoYS1zdWJ0bGU6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMTMpO1xcbiAgICAgICAgICAgIC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3I6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMik7XFxuICAgICAgICAgICAgLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvci0yOiBoc2xhKDAsIDAlLCAxMDAlLCAwLjI1KTtcXG4gICAgICAgICAgICAtLW1hcmstc2l6ZTogY2FsYyh2YXIoLS1zaXplKSAtIHZhcigtLXNpemUtMikgKiAyKTtcXG5cXG4gICAgICAgICAgICAtLWZvY3VzLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAgICAgICAgICAgLS1mb2N1cy1yaW5nOiAycHggc29saWQgdmFyKC0tZm9jdXMtY29sb3IpO1xcblxcbiAgICAgICAgICAgICY6aGFzKFtkYXRhLW5leHQtYmFkZ2VdW2RhdGEtZXJyb3I9J3RydWUnXSkge1xcbiAgICAgICAgICAgICAgLS1mb2N1cy1jb2xvcjogI2ZmZjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtZGlzYWJsZWQtaWNvbl0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtbmV4dC1iYWRnZV0ge1xcbiAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbiAgICAgICAgICAgIGJveC1zaGFkb3c6XFxuICAgICAgICAgICAgICAwIDAgMCAxcHggdmFyKC0tY29sb3Itb3V0ZXItYm9yZGVyKSxcXG4gICAgICAgICAgICAgIGluc2V0IDAgMCAwIDFweCB2YXIoLS1jb2xvci1pbm5lci1ib3JkZXIpLFxcbiAgICAgICAgICAgICAgMHB4IDE2cHggMzJweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7XFxuICAgICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDQ4cHgpO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHNjYWxlOiAxO1xcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICAgICAgd2lsbC1jaGFuZ2U6IHNjYWxlLCBib3gtc2hhZG93LCB3aWR0aCwgYmFja2dyb3VuZDtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOlxcbiAgICAgICAgICAgICAgc2NhbGUgdmFyKC0tZHVyYXRpb24tc2hvcnQpIHZhcigtLXRpbWluZyksXFxuICAgICAgICAgICAgICB3aWR0aCB2YXIoLS1kdXJhdGlvbi1sb25nKSB2YXIoLS10aW1pbmcpLFxcbiAgICAgICAgICAgICAgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1sb25nKSB2YXIoLS10aW1pbmcpLFxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmFjdGl2ZVtkYXRhLWVycm9yPSdmYWxzZSddIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAwLjk1O1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0ndHJ1ZSddOm5vdCg6aG92ZXIpIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAxLjAyO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtZXJyb3I9J2ZhbHNlJ106aGFzKFtkYXRhLW5leHQtbWFya106Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogM3B4O1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtZXJyb3I9J3RydWUnXSB7XFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjY2EyYTMwO1xcbiAgICAgICAgICAgICAgLS1jb2xvci1pbm5lci1ib3JkZXI6ICNlNTQ4NGQ7XFxuXFxuICAgICAgICAgICAgICBbZGF0YS1uZXh0LW1hcmtdIHtcXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3IpO1xcbiAgICAgICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogMHB4O1xcblxcbiAgICAgICAgICAgICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yLTIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICZbZGF0YS1lcnJvci1leHBhbmRlZD0nZmFsc2UnXVtkYXRhLWVycm9yPSd0cnVlJ10gfiBbZGF0YS1kb3RdIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAxO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICA+IGRpdiB7XFxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtY29sbGFwc2VdOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlc106aGFzKFtkYXRhLWlzc3Vlcy1vcGVuXTpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtZG90XSB7XFxuICAgICAgICAgICAgY29udGVudDogJyc7XFxuICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtOCk7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTgpO1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XFxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHZhcigtLWNvbG9yLW91dGVyLWJvcmRlcik7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgICAgICB0b3A6IDJweDtcXG4gICAgICAgICAgICByaWdodDogMHB4O1xcbiAgICAgICAgICAgIHNjYWxlOiAwO1xcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHNjYWxlIDIwMG1zIHZhcigtLXRpbWluZyk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tZHVyYXRpb24tc2hvcnQpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlc10ge1xcbiAgICAgICAgICAgIC0tcGFkZGluZy1sZWZ0OiA4cHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBnYXA6IDJweDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMzIpO1xcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmhhcyhbZGF0YS1pc3N1ZXMtb3Blbl06aG92ZXIpIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJjpoYXMoW2RhdGEtaXNzdWVzLWNvbGxhcHNlXSkge1xcbiAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogY2FsYyh2YXIoLS1wYWRkaW5nLWxlZnQpIC8gMik7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIFtkYXRhLWNyb3NzXSB7XFxuICAgICAgICAgICAgICB0cmFuc2xhdGU6IDBweCAtMXB4O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtb3Blbl0ge1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMyk7XFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xcbiAgICAgICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBnYXA6IDJweDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0zNik7XFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgICAgICAgICB6LWluZGV4OiAyO1xcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuXFxuICAgICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb2xsYXBzZV0ge1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjQpO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmhvdmVyIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtY3Jvc3NdIHtcXG4gICAgICAgICAgICBjb2xvcjogI2ZmZjtcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xMik7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTEyKTtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1uZXh0LW1hcmtdIHtcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tbWFyay1zaXplKTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLW1hcmstc2l6ZSk7XFxuICAgICAgICAgICAgbWFyZ2luOiAwIDJweDtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWxvbmcpIHZhcigtLXRpbWluZyk7XFxuXFxuICAgICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtc3VidGxlKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgc3ZnIHtcXG4gICAgICAgICAgICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtNDApO1xcbiAgICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTQwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWFuaW1hdGlvbl0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgICAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlciBjZW50ZXI7XFxuICAgICAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcXG5cXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0nZmFsc2UnXSB7XFxuICAgICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZXhpdF0sXFxuICAgICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJdIHtcXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwbXM7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgID4gKiB7XFxuICAgICAgICAgICAgICBncmlkLWFyZWE6IDEgLyAxO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZXhpdF0ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlT3V0IDMwMG1zIHZhcigtLXRpbWluZykgZm9yd2FyZHM7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1lbnRlcl0ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMzAwbXMgdmFyKC0tdGltaW5nKSBmb3J3YXJkcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LXBsdXJhbF0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0ndHJ1ZSddIHtcXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDMwMG1zIHZhcigtLXRpbWluZykgZm9yd2FyZHM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIC5wYXRoMCB7XFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBkcmF3MCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIC5wYXRoMSB7XFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBkcmF3MSAxLjVzIGVhc2Utb3V0IGluZmluaXRlO1xcbiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMC4zcztcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICAucGF1c2VkIHtcXG4gICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7XFxuICAgICAgICAgICAgMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigycHgpO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDEwMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigwcHgpO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGZhZGVPdXQge1xcbiAgICAgICAgICAgIDAlIHtcXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgICAgICAgICBmaWx0ZXI6IGJsdXIoMHB4KTtcXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMnB4KTtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigycHgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGRyYXcwIHtcXG4gICAgICAgICAgICAwJSxcXG4gICAgICAgICAgICAyNSUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0yOS42O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAyNSUsXFxuICAgICAgICAgICAgNTAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA1MCUsXFxuICAgICAgICAgICAgNzUlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA3NSUsXFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMjkuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgQGtleWZyYW1lcyBkcmF3MSB7XFxuICAgICAgICAgICAgMCUsXFxuICAgICAgICAgICAgMjAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTEuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMjAlLFxcbiAgICAgICAgICAgIDUwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgNTAlLFxcbiAgICAgICAgICAgIDc1JSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgNzUlLFxcbiAgICAgICAgICAgIDEwMCUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDExLjY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbikge1xcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1leGl0XSxcXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJdLFxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1wbHVyYWxdIHtcXG4gICAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMG1zICFpbXBvcnRhbnQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICBcIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gbyQ9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvWihlKXt2YXIgbj1lLmRpc2FibGVkLHQ9ZS5pc3N1ZUNvdW50LHI9ZS5pc0RldkJ1aWxkaW5nLG89ZS5pc0RldlJlbmRlcmluZyxhPWUuaXNCdWlsZEVycm9yLGk9ZS5vblRyaWdnZXJDbGljayxsPWUudG9nZ2xlRXJyb3JPdmVybGF5LHM9ZS5zY2FsZSxjPW9xKGUsW1wiZGlzYWJsZWRcIixcImlzc3VlQ291bnRcIixcImlzRGV2QnVpbGRpbmdcIixcImlzRGV2UmVuZGVyaW5nXCIsXCJpc0J1aWxkRXJyb3JcIixcIm9uVHJpZ2dlckNsaWNrXCIsXCJ0b2dnbGVFcnJvck92ZXJsYXlcIixcInNjYWxlXCJdKSx1PXQ+MCxkPW9XKCgwLHgudXNlU3RhdGUpKHUpLDIpLGY9ZFswXSxwPWRbMV0saD1vVygoMCx4LnVzZVN0YXRlKSghMSksMiksZz1oWzBdLG09aFsxXSx2PXRNKHQsMTUwKSxiPSgwLHgudXNlUmVmKShudWxsKSx3PSgwLHgudXNlUmVmKShudWxsKSxqPXRGKHcpLGs9dEQocnx8byksQT1mfHxuO3JldHVybigwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe3AodSl9LFt1XSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dC1iYWRnZS1yb290XCI6ITAsc3R5bGU6e1wiLS1zaXplXCI6XCJcIi5jb25jYXQoMzYvKHZvaWQgMD09PXM/MTpzKSxcInB4XCIpLFwiLS1kdXJhdGlvbi1zaG9ydFwiOlwiXCIuY29uY2F0KDE1MCxcIm1zXCIpLGRpc3BsYXk6biYmKCF1fHxnKT9cIm5vbmVcIjpcImJsb2NrXCJ9LGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdHlsZVwiLHtjaGlsZHJlbjplaShvJCgpKX0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dC1iYWRnZVwiOiEwLFwiZGF0YS1lcnJvclwiOnUsXCJkYXRhLWVycm9yLWV4cGFuZGVkXCI6QSxcImRhdGEtYW5pbWF0ZVwiOnYsc3R5bGU6e3dpZHRoOjA9PT1qP1wiYXV0b1wiOmp9LGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7cmVmOncsY2hpbGRyZW46WyFuJiYoMCx5LmpzeCkoXCJidXR0b25cIixvVihvVSh7cmVmOmIsXCJkYXRhLW5leHQtbWFya1wiOiEwLFwiZGF0YS1uZXh0LW1hcmstbG9hZGluZ1wiOmssb25DbGljazppfSxjKSx7Y2hpbGRyZW46KDAseS5qc3gpKG9YLHtpc0xvYWRpbmc6ayxpc0RldkJ1aWxkaW5nOnJ9KX0pKSxBJiYoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1pc3N1ZXNcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImJ1dHRvblwiLHtcImRhdGEtaXNzdWVzLW9wZW5cIjohMCxcImFyaWEtbGFiZWxcIjpcIk9wZW4gaXNzdWVzIG92ZXJsYXlcIixvbkNsaWNrOmwsY2hpbGRyZW46W24mJigwLHkuanN4KShcImRpdlwiLHtcImRhdGEtZGlzYWJsZWQtaWNvblwiOiEwLGNoaWxkcmVuOigwLHkuanN4KShvaix7fSl9KSwoMCx5LmpzeCkob1kse2FuaW1hdGU6dixcImRhdGEtaXNzdWVzLWNvdW50LWFuaW1hdGlvblwiOiEwLGNoaWxkcmVuOnR9LHQpLFwiIFwiLCgwLHkuanN4cykoXCJkaXZcIix7Y2hpbGRyZW46W1wiSXNzdWVcIix0PjEmJigwLHkuanN4KShcInNwYW5cIix7XCJhcmlhLWhpZGRlblwiOiEwLFwiZGF0YS1pc3N1ZXMtY291bnQtcGx1cmFsXCI6ITAsXCJkYXRhLWFuaW1hdGVcIjp2JiYyPT09dCxjaGlsZHJlbjpcInNcIn0pXX0pXX0pLCFhJiYoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLWlzc3Vlcy1jb2xsYXBzZVwiOiEwLFwiYXJpYS1sYWJlbFwiOlwiQ29sbGFwc2UgaXNzdWVzIGJhZGdlXCIsb25DbGljazpmdW5jdGlvbigpe3ZhciBlO24/bSghMCk6cCghMSksbnVsbD09KGU9Yi5jdXJyZW50KXx8ZS5mb2N1cygpfSxjaGlsZHJlbjooMCx5LmpzeCkob0gse1wiZGF0YS1jcm9zc1wiOiEwfSl9KV19KV19KX0pLCgwLHkuanN4KShcImRpdlwiLHtcImFyaWEtaGlkZGVuXCI6ITAsXCJkYXRhLWRvdFwiOiEwfSldfSl9ZnVuY3Rpb24gb1koZSl7dmFyIG49ZS5jaGlsZHJlbix0PWUuYW5pbWF0ZSxyPW9xKGUsW1wiY2hpbGRyZW5cIixcImFuaW1hdGVcIl0pO3JldHVybigwLHkuanN4cykoXCJkaXZcIixvVihvVSh7fSxyKSx7XCJkYXRhLWFuaW1hdGVcIjp2b2lkIDA9PT10fHx0LGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7XCJhcmlhLWhpZGRlblwiOiEwLFwiZGF0YS1pc3N1ZXMtY291bnQtZXhpdFwiOiEwLGNoaWxkcmVuOm4tMX0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtaXNzdWVzLWNvdW50XCI6ITAsXCJkYXRhLWlzc3Vlcy1jb3VudC1lbnRlclwiOiEwLGNoaWxkcmVuOm59KV19KSl9ZnVuY3Rpb24gb1goZSl7dmFyIG49ZS5pc0xvYWRpbmcsdD1lLmlzRGV2QnVpbGRpbmc/XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNylcIjpcIndoaXRlXCI7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLHt3aWR0aDpcIjQwXCIsaGVpZ2h0OlwiNDBcIix2aWV3Qm94OlwiMCAwIDQwIDQwXCIsZmlsbDpcIm5vbmVcIixcImRhdGEtbmV4dC1tYXJrLWxvYWRpbmdcIjpuLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZ1wiLHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoOC41LCAxMylcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicGF0aFwiLHtjbGFzc05hbWU6bj9cInBhdGgwXCI6XCJwYXVzZWRcIixkOlwiTTEzLjMgMTUuMiBMMi4zNCAxIFYxMi42XCIsZmlsbDpcIm5vbmVcIixzdHJva2U6XCJ1cmwoI25leHRfbG9nb19wYWludDBfbGluZWFyXzEzNTdfMTA4NTMpXCIsc3Ryb2tlV2lkdGg6XCIxLjg2XCIsbWFzazpcInVybCgjbmV4dF9sb2dvX21hc2swKVwiLHN0cm9rZURhc2hhcnJheTpcIjI5LjZcIixzdHJva2VEYXNob2Zmc2V0OlwiMjkuNlwifSksKDAseS5qc3gpKFwicGF0aFwiLHtjbGFzc05hbWU6bj9cInBhdGgxXCI6XCJwYXVzZWRcIixkOlwiTTExLjgyNSAxLjUgVjEzLjFcIixzdHJva2VXaWR0aDpcIjEuODZcIixzdHJva2U6XCJ1cmwoI25leHRfbG9nb19wYWludDFfbGluZWFyXzEzNTdfMTA4NTMpXCIsc3Ryb2tlRGFzaGFycmF5OlwiMTEuNlwiLHN0cm9rZURhc2hvZmZzZXQ6XCIxMS42XCJ9KV19KSwoMCx5LmpzeHMpKFwiZGVmc1wiLHtjaGlsZHJlbjpbKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibmV4dF9sb2dvX3BhaW50MF9saW5lYXJfMTM1N18xMDg1M1wiLHgxOlwiOS45NTU1NVwiLHkxOlwiMTEuMTIyNlwiLHgyOlwiMTUuNDc3OFwiLHkyOlwiMTcuOTY3MVwiLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdG9wXCIse3N0b3BDb2xvcjp0fSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIwLjYwNDA3MlwiLHN0b3BDb2xvcjp0LHN0b3BPcGFjaXR5OlwiMFwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIxXCIsc3RvcENvbG9yOnQsc3RvcE9wYWNpdHk6XCIwXCJ9KV19KSwoMCx5LmpzeHMpKFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJuZXh0X2xvZ29fcGFpbnQxX2xpbmVhcl8xMzU3XzEwODUzXCIseDE6XCIxMS44MjIyXCIseTE6XCIxLjQwMDM5XCIseDI6XCIxMS43OTFcIix5MjpcIjkuNjI1NDJcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtzdG9wQ29sb3I6dH0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMVwiLHN0b3BDb2xvcjp0LHN0b3BPcGFjaXR5OlwiMFwifSldfSksKDAseS5qc3hzKShcIm1hc2tcIix7aWQ6XCJuZXh0X2xvZ29fbWFzazBcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCIsZmlsbDpcIndoaXRlXCJ9KSwoMCx5LmpzeCkoXCJyZWN0XCIse3dpZHRoOlwiNVwiLGhlaWdodDpcIjEuNVwiLGZpbGw6XCJibGFja1wifSldfSldfSldfSl9ZnVuY3Rpb24gb0soZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG9RKGUsbix0KXtyZXR1cm4gbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXQsZX1mdW5jdGlvbiBvRyhlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gb0soZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gb0soZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gb0ooZSl7dmFyIG4sdD1lLnN0YXRlLHI9ZS5kaXNwYXRjaCxvPWUuZXJyb3JDb3VudCxhPWUuaXNCdWlsZEVycm9yLGk9b0coKDAseC51c2VTdGF0ZSkoITEpLDIpLGw9aVswXSxzPWlbMV0sYz1vRyh0LmRldlRvb2xzUG9zaXRpb24uc3BsaXQoXCItXCIsMiksMiksdT1jWzBdLGQ9Y1sxXTtyZXR1cm4oMCx5LmpzeCkodFIse1wiZGF0YS1uZXh0anMtdG9hc3RcIjohMCxzdHlsZToob1Eobj17XCItLWFuaW1hdGUtb3V0LWR1cmF0aW9uLW1zXCI6XCJcIi5jb25jYXQoblEuSzcsXCJtc1wiKSxcIi0tYW5pbWF0ZS1vdXQtdGltaW5nLWZ1bmN0aW9uXCI6blEudUQsYm94U2hhZG93Olwibm9uZVwifSx1LFwiXCIuY29uY2F0KDIwLFwicHhcIikpLG9RKG4sZCxcIlwiLmNvbmNhdCgyMCxcInB4XCIpKSxvUShuLFwidmlzaWJpbGl0eVwiLHQuaXNEZXZUb29sc1BhbmVsT3Blbnx8dC5pc0Vycm9yT3ZlcmxheU9wZW4/XCJoaWRkZW5cIjpcInZpc2libGVcIiksbiksY2hpbGRyZW46KDAseS5qc3gpKHJOLHtwYWRkaW5nOjIwLG9uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHMoITEpfSxwb3NpdGlvbjp0LmRldlRvb2xzUG9zaXRpb24sc2V0UG9zaXRpb246ZnVuY3Rpb24oZSl7cih7dHlwZTpZLGRldlRvb2xzUG9zaXRpb246ZX0pLGxvY2FsU3RvcmFnZS5zZXRJdGVtKEcsZSl9LGNoaWxkcmVuOigwLHkuanN4KShvWix7XCJhcmlhLWhhc3BvcHVwXCI6XCJtZW51XCIsXCJhcmlhLWV4cGFuZGVkXCI6bCxcImFyaWEtY29udHJvbHNcIjpcIm5leHRqcy1kZXYtdG9vbHMtbWVudVwiLFwiYXJpYS1sYWJlbFwiOlwiXCIuY29uY2F0KGw/XCJDbG9zZVwiOlwiT3BlblwiLFwiIE5leHQuanMgRGV2IFRvb2xzXCIpLFwiZGF0YS1uZXh0anMtZGV2LXRvb2xzLWJ1dHRvblwiOiEwLGRpc2FibGVkOnQuZGlzYWJsZURldkluZGljYXRvcixpc3N1ZUNvdW50Om8sb25UcmlnZ2VyQ2xpY2s6ZnVuY3Rpb24oKXtyKHt0eXBlOlp9KX0sdG9nZ2xlRXJyb3JPdmVybGF5OmZ1bmN0aW9uKCl7cih7dHlwZTpNfSkscih7dHlwZTpXfSl9LGlzRGV2QnVpbGRpbmc6dC5idWlsZGluZ0luZGljYXRvcixpc0RldlJlbmRlcmluZzp0LnJlbmRlcmluZ0luZGljYXRvcixpc0J1aWxkRXJyb3I6YSxzY2FsZTp0LnNjYWxlfSl9KX0pfWZ1bmN0aW9uIG8wKGUpe3ZhciBuLHQ7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwifSxlKSx0PXQ9e2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk0xNSAxNEMxNSAxNC41NTIzIDE0LjU1MjMgMTUgMTQgMTVIMTBWMTMuNUgxMy41VjEwSDE1VjE0Wk0yLjUgMTMuNDk5SDZWMTQuOTk5SDJDMS40NDc3MiAxNC45OTkgMSAxNC41NTEzIDEgMTMuOTk5VjkuOTk5MDJIMi41VjEzLjQ5OVpNNiAyLjVIMi41VjZIMVYyQzEgMS40NDc3MiAxLjQ0NzcyIDEgMiAxSDZWMi41Wk0xNCAxQzE0LjU1MjMgMSAxNSAxLjQ0NzcyIDE1IDJWNkgxMy41VjIuNUgxMFYxSDE0WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiBvMShlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMSA2VjQuNUg0LjVWMUg2VjVDNiA1LjU1MjI4IDUuNTUyMjggNiA1IDZIMVpNMTEuNSAxSDEwVjVDMTAgNS41NTIyOCAxMC40NDc3IDYgMTEgNkgxNVY0LjVIMTEuNVYxWk0xNS4wNCAxMS41VjEwSDExQzEwLjQ0NzcgMTAgMTAgMTAuNDQ3NyAxMCAxMVYxNUgxMS41VjExLjVIMTUuMDRaTTQuNSAxNUg2VjExQzYgMTAuNDQ3NyA1LjU1MjI4IDEwIDUgMTBIMVYxMS41SDQuNVYxNVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gbzIoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfXZhciBvND1cIm5leHRqcy1kZXZ0b29scy1kaW1lbnNpb25zXCIsbzU9KDAseC5jcmVhdGVDb250ZXh0KShudWxsKSxvMz1mdW5jdGlvbihlKXt2YXIgbj0uOTUqd2luZG93LmlubmVyV2lkdGgsdD0uOTUqd2luZG93LmlubmVySGVpZ2h0O3JldHVybnt3aWR0aDpNYXRoLm1pbihuLE1hdGgubWF4KGUubWluV2lkdGgsZS53aWR0aCkpLGhlaWdodDpNYXRoLm1pbih0LE1hdGgubWF4KGUubWluSGVpZ2h0LGUuaGVpZ2h0KSl9fSxvNj1mdW5jdGlvbigpe3ZhciBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKG80KTtpZighZSlyZXR1cm4gbnVsbDt0cnl7dmFyIG4sdD1KU09OLnBhcnNlKGUpO2lmKCh2b2lkIDA9PT10P1widW5kZWZpbmVkXCI6KG49dCkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm4uY29uc3RydWN0b3I9PT1TeW1ib2w/XCJzeW1ib2xcIjp0eXBlb2Ygbik9PVwib2JqZWN0XCImJm51bGwhPT10JiZcIm51bWJlclwiPT10eXBlb2YgdC53aWR0aCYmXCJudW1iZXJcIj09dHlwZW9mIHQuaGVpZ2h0KXJldHVybnt3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH07cmV0dXJuIG51bGx9Y2F0Y2goZSl7cmV0dXJuIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG80KSxudWxsfX0sbzk9ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLG8sYT1lLnZhbHVlLGk9ZS5jaGlsZHJlbixsPW51bGwhPShyPWEubWluV2lkdGgpP3I6MTAwLHM9bnVsbCE9KG89YS5taW5IZWlnaHQpP286ODAsYz0obj0oMCx4LnVzZVN0YXRlKShudWxsKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbzIoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbzIoZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLHU9Y1swXSxkPWNbMV07cmV0dXJuKDAseC51c2VMYXlvdXRFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtpZihhLnJlc2l6ZVJlZi5jdXJyZW50KXt2YXIgZT1vNigpO2lmKGUpe3ZhciBuLHQscj1vMygobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt9LGUpLHQ9dD17bWluV2lkdGg6bnVsbCE9bD9sOjEwMCxtaW5IZWlnaHQ6bnVsbCE9cz9zOjgwfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKSxvPXIuaGVpZ2h0LGk9ci53aWR0aDthLnJlc2l6ZVJlZi5jdXJyZW50LnN0eWxlLndpZHRoPVwiXCIuY29uY2F0KGksXCJweFwiKSxhLnJlc2l6ZVJlZi5jdXJyZW50LnN0eWxlLmhlaWdodD1cIlwiLmNvbmNhdChvLFwicHhcIil9fX07cmV0dXJuIGUoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsZSl9fSxbYS5yZXNpemVSZWYsbCxzXSksKDAseS5qc3gpKG81LlByb3ZpZGVyLHt2YWx1ZTp7cmVzaXplUmVmOmEucmVzaXplUmVmLG1pbldpZHRoOmwsbWluSGVpZ2h0OnMsZGV2VG9vbHNQb3NpdGlvbjphLmRldlRvb2xzUG9zaXRpb24sZHJhZ2dpbmdEaXJlY3Rpb246dSxzZXREcmFnZ2luZ0RpcmVjdGlvbjpkfSxjaGlsZHJlbjppfSl9LG84PWZ1bmN0aW9uKCl7dmFyIGU9KDAseC51c2VDb250ZXh0KShvNSk7aWYoIWUpdGhyb3cgRXJyb3IoXCJ1c2VSZXNpemUgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc2l6ZSBwcm92aWRlclwiKTtyZXR1cm4gZX0sbzc9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2RldnRvb2xzLXBhbmVsL3Jlc2l6ZS9yZXNpemUtaGFuZGxlLmNzc1wiKSxhZT17fTtmdW5jdGlvbiBhbihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9YWUuc3R5bGVUYWdUcmFuc2Zvcm09aCgpLGFlLnNldEF0dHJpYnV0ZXM9dSgpLGFlLmluc2VydD1zKCksYWUuZG9tQVBJPWkoKSxhZS5pbnNlcnRTdHlsZUVsZW1lbnQ9ZigpLG8oKShvNy5aLGFlKSxvNy5aJiZvNy5aLmxvY2FscyYmbzcuWi5sb2NhbHM7dmFyIGF0PWZ1bmN0aW9uKGUpe3ZhciBuLHQscj1lLmRpcmVjdGlvbixvPW84KCksYT1vLnJlc2l6ZVJlZixpPW8ubWluV2lkdGgsbD1vLm1pbkhlaWdodCxzPW8uZGV2VG9vbHNQb3NpdGlvbixjPW8uZHJhZ2dpbmdEaXJlY3Rpb24sdT1vLnNldERyYWdnaW5nRGlyZWN0aW9uLGQ9KG49KDAseC51c2VTdGF0ZSkoe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGFuKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIGFuKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxmPWRbMF0scD1kWzFdO2lmKCgwLHgudXNlTGF5b3V0RWZmZWN0KShmdW5jdGlvbigpe2lmKGEuY3VycmVudCl7dmFyIGU9YS5jdXJyZW50LG49d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSk7cCh7dG9wOnBhcnNlRmxvYXQobi5ib3JkZXJUb3BXaWR0aCl8fDAscmlnaHQ6cGFyc2VGbG9hdChuLmJvcmRlclJpZ2h0V2lkdGgpfHwwLGJvdHRvbTpwYXJzZUZsb2F0KG4uYm9yZGVyQm90dG9tV2lkdGgpfHwwLGxlZnQ6cGFyc2VGbG9hdChuLmJvcmRlckxlZnRXaWR0aCl8fDB9KX19LFthXSksISghcy5zcGxpdChcIi1cIikuaW5jbHVkZXMocikmJighci5pbmNsdWRlcyhcIi1cIil8fHI9PT1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZVwidG9wLWxlZnRcIjpyZXR1cm5cImJvdHRvbS1yaWdodFwiO2Nhc2VcInRvcC1yaWdodFwiOnJldHVyblwiYm90dG9tLWxlZnRcIjtjYXNlXCJib3R0b20tbGVmdFwiOnJldHVyblwidG9wLXJpZ2h0XCI7Y2FzZVwiYm90dG9tLXJpZ2h0XCI6cmV0dXJuXCJ0b3AtbGVmdFwiO2RlZmF1bHQ6cmV0dXJuIG51bGx9fShzKSkpKXJldHVybiBudWxsO3ZhciBoPWYubGVmdCtmLnJpZ2h0LGc9Zi50b3ArZi5ib3R0b20sbT1yLmluY2x1ZGVzKFwiLVwiKTtyZXR1cm4oMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVzaXplLWNvbnRhaW5lciBcIi5jb25jYXQocixcIiBcIikuY29uY2F0KGMmJmMhPT1yP1wibm8taG92ZXJcIjpcIlwiKSxvbk1vdXNlRG93bjpmdW5jdGlvbihlKXtpZihlLnByZXZlbnREZWZhdWx0KCksYS5jdXJyZW50KXt1KHIpO3ZhciBuPWEuY3VycmVudCx0PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1uLm9mZnNldExlZnQscz1uLm9mZnNldFRvcCxjPWUuY2xpZW50WCxkPWUuY2xpZW50WSxmPWZ1bmN0aW9uKGUpe3ZhciBhPWFyKHIsZS5jbGllbnRYLWMsZS5jbGllbnRZLWQsdCxvLHMsaSxsKSx1PWEubmV3V2lkdGgsZj1hLm5ld0hlaWdodCxwPWEubmV3TGVmdCxoPWEubmV3VG9wO24uc3R5bGUud2lkdGg9XCJcIi5jb25jYXQodSxcInB4XCIpLG4uc3R5bGUuaGVpZ2h0PVwiXCIuY29uY2F0KGYsXCJweFwiKSwoci5pbmNsdWRlcyhcImxlZnRcIil8fFwibGVmdFwiPT09cikmJihuLnN0eWxlLmxlZnQ9XCJcIi5jb25jYXQocCxcInB4XCIpKSwoci5pbmNsdWRlcyhcInRvcFwiKXx8XCJ0b3BcIj09PXIpJiYobi5zdHlsZS50b3A9XCJcIi5jb25jYXQoaCxcInB4XCIpKX0scD1mdW5jdGlvbigpe3UobnVsbCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLGYpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIscCk7dmFyIGU9YS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ZS53aWR0aCx0PWUuaGVpZ2h0O2xvY2FsU3RvcmFnZS5zZXRJdGVtKFwibmV4dGpzLWRldnRvb2xzLWRpbWVuc2lvbnNcIixKU09OLnN0cmluZ2lmeSh7d2lkdGg6bixoZWlnaHQ6dH0pKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLGYpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIscCl9fX0pLCFtJiYoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVzaXplLWxpbmUgXCIuY29uY2F0KHIsXCIgXCIpLmNvbmNhdChjPT09cj9cImRyYWdnaW5nXCI6XCJcIiksc3R5bGU6e1wiLS1ib3JkZXItaG9yaXpvbnRhbFwiOlwiXCIuY29uY2F0KGgsXCJweFwiKSxcIi0tYm9yZGVyLXZlcnRpY2FsXCI6XCJcIi5jb25jYXQoZyxcInB4XCIpLFwiLS1ib3JkZXItdG9wXCI6XCJcIi5jb25jYXQoZi50b3AsXCJweFwiKSxcIi0tYm9yZGVyLXJpZ2h0XCI6XCJcIi5jb25jYXQoZi5yaWdodCxcInB4XCIpLFwiLS1ib3JkZXItYm90dG9tXCI6XCJcIi5jb25jYXQoZi5ib3R0b20sXCJweFwiKSxcIi0tYm9yZGVyLWxlZnRcIjpcIlwiLmNvbmNhdChmLmxlZnQsXCJweFwiKX19KV19KX0sYXI9ZnVuY3Rpb24oZSxuLHQscixvLGEsaSxsKXt2YXIgcz0uOTUqd2luZG93LmlubmVyV2lkdGgsYz0uOTUqd2luZG93LmlubmVySGVpZ2h0O3N3aXRjaChlKXtjYXNlXCJyaWdodFwiOnJldHVybntuZXdXaWR0aDpNYXRoLm1pbihzLE1hdGgubWF4KGksci53aWR0aCtuKSksbmV3SGVpZ2h0OnIuaGVpZ2h0LG5ld0xlZnQ6byxuZXdUb3A6YX07Y2FzZVwibGVmdFwiOnZhciB1PU1hdGgubWluKHMsTWF0aC5tYXgoaSxyLndpZHRoLW4pKSxkPXUtci53aWR0aDtyZXR1cm57bmV3V2lkdGg6dSxuZXdIZWlnaHQ6ci5oZWlnaHQsbmV3TGVmdDpvLWQsbmV3VG9wOmF9O2Nhc2VcImJvdHRvbVwiOnJldHVybntuZXdXaWR0aDpyLndpZHRoLG5ld0hlaWdodDpNYXRoLm1pbihjLE1hdGgubWF4KGwsci5oZWlnaHQrdCkpLG5ld0xlZnQ6byxuZXdUb3A6YX07Y2FzZVwidG9wXCI6dmFyIGY9TWF0aC5taW4oYyxNYXRoLm1heChsLHIuaGVpZ2h0LXQpKSxwPWYtci5oZWlnaHQ7cmV0dXJue25ld1dpZHRoOnIud2lkdGgsbmV3SGVpZ2h0OmYsbmV3TGVmdDpvLG5ld1RvcDphLXB9O2Nhc2VcInRvcC1sZWZ0XCI6dmFyIGg9TWF0aC5taW4ocyxNYXRoLm1heChpLHIud2lkdGgtbikpLGc9TWF0aC5taW4oYyxNYXRoLm1heChsLHIuaGVpZ2h0LXQpKSxtPWgtci53aWR0aCx2PWctci5oZWlnaHQ7cmV0dXJue25ld1dpZHRoOmgsbmV3SGVpZ2h0OmcsbmV3TGVmdDpvLW0sbmV3VG9wOmEtdn07Y2FzZVwidG9wLXJpZ2h0XCI6dmFyIGI9TWF0aC5taW4oYyxNYXRoLm1heChsLHIuaGVpZ2h0LXQpKSx5PWItci5oZWlnaHQ7cmV0dXJue25ld1dpZHRoOk1hdGgubWluKHMsTWF0aC5tYXgoaSxyLndpZHRoK24pKSxuZXdIZWlnaHQ6YixuZXdMZWZ0Om8sbmV3VG9wOmEteX07Y2FzZVwiYm90dG9tLWxlZnRcIjp2YXIgeD1NYXRoLm1pbihzLE1hdGgubWF4KGksci53aWR0aC1uKSksdz14LXIud2lkdGg7cmV0dXJue25ld1dpZHRoOngsbmV3SGVpZ2h0Ok1hdGgubWluKGMsTWF0aC5tYXgobCxyLmhlaWdodCt0KSksbmV3TGVmdDpvLXcsbmV3VG9wOmF9O2Nhc2VcImJvdHRvbS1yaWdodFwiOnJldHVybntuZXdXaWR0aDpNYXRoLm1pbihzLE1hdGgubWF4KGksci53aWR0aCtuKSksbmV3SGVpZ2h0Ok1hdGgubWluKGMsTWF0aC5tYXgobCxyLmhlaWdodCt0KSksbmV3TGVmdDpvLG5ld1RvcDphfTtkZWZhdWx0OnJldHVybiBudWxsfX07ZnVuY3Rpb24gYW8oZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIGFhKGUsbix0KXtyZXR1cm4gbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXQsZX1mdW5jdGlvbiBhaShlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gYW8oZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gYW8oZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gYWwoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICAvKiBUT0RPOiBCZXR0ZXIgb3ZlcnJpZGUgZGlhbG9nIGhlYWRlciBzdHlsZS4gVGhpcyBjb25mbGljdHMgd2l0aCBpc3N1ZXMgdGFiIGNvbnRlbnQuICovXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZGlhbG9nLWhlYWRlcl0ge1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRpYWxvZy1jb250ZW50XSB7XFxuICAgIGZsZXg6IDE7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIG1pbi1oZWlnaHQ6IDA7IC8vIHdoYXQgYWxsb3dzIGNvbnRlbnQgdG8gb3ZlcmZsb3dcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1kaWFsb2ctYm9keV0ge1xcbiAgICBmbGV4OiAxO1xcbiAgICBvdmVyZmxvdzogYXV0bztcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1vdmVybGF5XSB7XFxuICAgIG1hcmdpbjogYXV0bztcXG4gICAgd2lkdGg6IDUyNXB4O1xcbiAgICBoZWlnaHQ6IDM3NXB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLW92ZXJsYXktYmFja2Ryb3BdIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLW92ZXJsYXktYmFja2Ryb3A9J3RydWUnXSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZHJhZ2dhYmxlXSB7XFxuICAgIC8qIEZvciByZXNwb25zaXZlbmVzcyAqL1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRpYWxvZ10ge1xcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQteGwpO1xcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbGcpO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIG1pbi13aWR0aDogNDAwcHg7XFxuICAgIG1pbi1oZWlnaHQ6IDM1MHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlcl0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyLXRhYi1ncm91cF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBwYWRkaW5nOiA4cHg7XFxuICAgIGdhcDogNnB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gICAgcGFkZGluZzogNHB4IDEycHg7XFxuICAgIGZvbnQtc2l6ZTogMTRweDtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyMDBtcyBlYXNlO1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICAgIH1cXG5cXG4gICAgJjphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWI9J3RydWUnXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyLXRhYi1pc3N1ZXMtYmFkZ2VdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXJlZC00MDApO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcmVkLTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogMTFweDtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgcGFkZGluZzogMnB4IDZweDtcXG4gICAgd2lkdGg6IDIwcHg7XFxuICAgIGhlaWdodDogMjBweDtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItYWN0aW9uLWJ1dHRvbi1ncm91cF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDRweDtcXG4gICAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci1hY3Rpb24tYnV0dG9uXSB7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIHBhZGRpbmc6IDZweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgY29sb3I7XFxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDIwMG1zO1xcbiAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIH1cXG5cXG4gICAgJjphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRyYWdnYWJsZT0ndHJ1ZSddIHtcXG4gICAgY3Vyc29yOiBtb3ZlO1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgJiA+ICoge1xcbiAgICAgIGN1cnNvcjogYXV0bztcXG4gICAgICAvKiB1c2VyLXNlbGVjdDogYXV0bzsgZm9sbG93cyB0aGUgcGFyZW50IChwYXJlbnQgbm9uZSAtPiBjaGlsZCBub25lKSwgc28gcmVzZXQgdGhlIGRpcmVjdCBjaGlsZCB0byB0ZXh0ICovXFxuICAgICAgdXNlci1zZWxlY3Q6IHRleHQ7XFxuICAgIH1cXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBhcyhlKXt2YXIgbix0LHIsbyxhLGksbD1lLnN0YXRlLHM9ZS5kaXNwYXRjaCxjPWUuaXNzdWVDb3VudCx1PWUucnVudGltZUVycm9ycyxkPWUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsZj1haSgobj1cIl9fbmV4dGpzLWRldnRvb2xzLWFjdGl2ZS10YWJcIix0PVwiaXNzdWVzXCIsbz0ocj1haSgoMCx4LnVzZVN0YXRlKShmdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZXNzaW9uU3RvcmFnZSl7dmFyIGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShuKTtyZXR1cm4gbnVsbCE9ZT9lOnR9cmV0dXJuIHR9KSwyKSlbMF0sYT1yWzFdLCgwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe1widW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZXNzaW9uU3RvcmFnZSYmc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShuLG8pfSxbbixvXSksW28sYV0pLDIpLHA9ZlswXSxoPWZbMV0sZz1haSgoMCx4LnVzZVN0YXRlKSghMSksMiksbT1nWzBdLHY9Z1sxXSxiPWFpKCgwLHgudXNlU3RhdGUpKCExKSwyKSx3PWJbMF0saj1iWzFdLGs9KDAseC51c2VSZWYpKG51bGwpO2wuaXNFcnJvck92ZXJsYXlPcGVuIT09dyYmKGwuaXNFcnJvck92ZXJsYXlPcGVuJiYodighMCksaChcImlzc3Vlc1wiKSksaihsLmlzRXJyb3JPdmVybGF5T3BlbikpO3ZhciBBPWFpKGwuZGV2VG9vbHNQb3NpdGlvbi5zcGxpdChcIi1cIiwyKSwyKSxPPUFbMF0sQz1BWzFdLFM9ZnVuY3Rpb24oKXtzKHt0eXBlOiR9KSxzKHt0eXBlOkl9KX07cmV0dXJuKDAseS5qc3gpKG85LHt2YWx1ZTp7cmVzaXplUmVmOmssbWluV2lkdGg6NDAwLG1pbkhlaWdodDozNTAsZGV2VG9vbHNQb3NpdGlvbjpsLmRldlRvb2xzUG9zaXRpb259LGNoaWxkcmVuOigwLHkuanN4cykoblose3JlZjprLFwiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtb3ZlcmxheVwiOiEwLHN0eWxlOm0/e306KGFhKGk9e30sTyxcIlwiLmNvbmNhdCgyMCxcInB4XCIpKSxhYShpLEMsXCJcIi5jb25jYXQoMjAsXCJweFwiKSksYWEoaSxcInRvcFwiPT09Tz9cImJvdHRvbVwiOlwidG9wXCIsXCJhdXRvXCIpLGFhKGksXCJsZWZ0XCI9PT1DP1wicmlnaHRcIjpcImxlZnRcIixcImF1dG9cIiksaSksY2hpbGRyZW46WygwLHkuanN4KShuMix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1vdmVybGF5LWJhY2tkcm9wXCI6bSxvbkNsaWNrOlN9KSwoMCx5LmpzeCkock4se1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZHJhZ2dhYmxlXCI6ITAscGFkZGluZzoyMCxvbkRyYWdTdGFydDpmdW5jdGlvbigpe30scG9zaXRpb246bC5kZXZUb29sc1Bvc2l0aW9uLHNldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKEcsZSkscyh7dHlwZTpZLGRldlRvb2xzUG9zaXRpb246ZX0pfSxkcmFnSGFuZGxlU2VsZWN0b3I6XCJbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyXSwgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlcl1cIixkaXNhYmxlRHJhZzptLGNoaWxkcmVuOigwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4cykoZVose1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZGlhbG9nXCI6ITAsXCJhcmlhLWxhYmVsbGVkYnlcIjpcIm5leHRqc19fY29udGFpbmVyX2Rldl90b29sc19wYW5lbF9sYWJlbFwiLFwiYXJpYS1kZXNjcmliZWRieVwiOlwibmV4dGpzX19jb250YWluZXJfZGV2X3Rvb2xzX3BhbmVsX2Rlc2NcIixvbkNsb3NlOlMsY2hpbGRyZW46WygwLHkuanN4cykoZVgse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZGlhbG9nLWNvbnRlbnRcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKGVLLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRpYWxvZy1oZWFkZXJcIjohMCxjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyXCI6ITAsXCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1kcmFnZ2FibGVcIjohbSxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWItZ3JvdXBcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImJ1dHRvblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWJcIjpcImlzc3Vlc1wiPT09cCxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGgoXCJpc3N1ZXNcIil9LGNoaWxkcmVuOltcIklzc3Vlc1wiLGM+MD8oMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyLXRhYi1pc3N1ZXMtYmFkZ2VcIjohMCxjaGlsZHJlbjpjfSk6bnVsbF19KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItdGFiXCI6XCJyb3V0ZVwiPT09cCxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGgoXCJyb3V0ZVwiKX0sY2hpbGRyZW46XCJSb3V0ZSBJbmZvXCJ9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItdGFiXCI6XCJzZXR0aW5nc1wiPT09cCxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGgoXCJzZXR0aW5nc1wiKX0sY2hpbGRyZW46XCJTZXR0aW5nc1wifSldfSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci1hY3Rpb24tYnV0dG9uLWdyb3VwXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImJ1dHRvblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci1hY3Rpb24tYnV0dG9uXCI6ITAsb25DbGljazpmdW5jdGlvbigpe3YoZnVuY3Rpb24oZSl7cmV0dXJuIWV9KSxzKHt0eXBlOkl9KX0sY2hpbGRyZW46bT8oMCx5LmpzeCkobzEse3dpZHRoOjE2LGhlaWdodDoxNn0pOigwLHkuanN4KShvMCx7d2lkdGg6MTYsaGVpZ2h0OjE2fSl9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItYWN0aW9uLWJ1dHRvblwiOiEwLG9uQ2xpY2s6UyxjaGlsZHJlbjooMCx5LmpzeCkob0gse3dpZHRoOjE2LGhlaWdodDoxNn0pfSldfSldfSl9KSwoMCx5LmpzeCkoZVkse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZGlhbG9nLWJvZHlcIjohMCxjaGlsZHJlbjooMCx5LmpzeCkob0kse3BhZ2U6bC5wYWdlLGFjdGl2ZVRhYjpwLGRldlRvb2xzUG9zaXRpb246bC5kZXZUb29sc1Bvc2l0aW9uLHNjYWxlOmwuc2NhbGUscm91dGVyVHlwZTpsLnJvdXRlclR5cGUsaGFuZGxlUG9zaXRpb25DaGFuZ2U6ZnVuY3Rpb24oZSl7cyh7dHlwZTpZLGRldlRvb2xzUG9zaXRpb246ZS50YXJnZXQudmFsdWV9KSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShHLGUudGFyZ2V0LnZhbHVlKX0saGFuZGxlU2NhbGVDaGFuZ2U6ZnVuY3Rpb24oZSl7cyh7dHlwZTpYLHNjYWxlOk51bWJlcihlLnRhcmdldC52YWx1ZSl9KSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShKLGUudGFyZ2V0LnZhbHVlKX0sZGVidWdJbmZvOmwuZGVidWdJbmZvLHJ1bnRpbWVFcnJvcnM6dSxnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsczpkLGJ1aWxkRXJyb3I6bC5idWlsZEVycm9yfSl9KV19KSwoMCx5LmpzeCkocjIse3ZlcnNpb25JbmZvOmwudmVyc2lvbkluZm8saXNEcmFnZ2FibGU6IW0sc2hvd1Jlc3RhcnRTZXJ2ZXJCdXR0b246bC5zaG93UmVzdGFydFNlcnZlckJ1dHRvbn0pXX0pLCFtJiYoMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoYXQse2RpcmVjdGlvbjpcInRvcFwifSksKDAseS5qc3gpKGF0LHtkaXJlY3Rpb246XCJyaWdodFwifSksKDAseS5qc3gpKGF0LHtkaXJlY3Rpb246XCJib3R0b21cIn0pLCgwLHkuanN4KShhdCx7ZGlyZWN0aW9uOlwibGVmdFwifSksKDAseS5qc3gpKGF0LHtkaXJlY3Rpb246XCJ0b3AtbGVmdFwifSksKDAseS5qc3gpKGF0LHtkaXJlY3Rpb246XCJ0b3AtcmlnaHRcIn0pLCgwLHkuanN4KShhdCx7ZGlyZWN0aW9uOlwiYm90dG9tLWxlZnRcIn0pLCgwLHkuanN4KShhdCx7ZGlyZWN0aW9uOlwiYm90dG9tLXJpZ2h0XCJ9KV19KV19KX0pXX0pfSl9dmFyIGFjPWVpKGFsKCkpO2Z1bmN0aW9uIGF1KCl7dmFyIGUsbix0PShlPVtcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICBcIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gYXU9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBhZCgpe3JldHVybigwLHkuanN4KShcInN0eWxlXCIse2NoaWxkcmVuOmVpKGF1KCksXCJcXG4gIC5uZXh0anMtZGF0YS1jb3B5LWJ1dHRvbiB7XFxuICAgIGNvbG9yOiBpbmhlcml0O1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuICB9XFxuICAubmV4dGpzLWRhdGEtY29weS1idXR0b246ZGlzYWJsZWQge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICB9XFxuICAubmV4dGpzLWRhdGEtY29weS1idXR0b24tLWluaXRpYWw6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICB9XFxuICAubmV4dGpzLWRhdGEtY29weS1idXR0b24tLWVycm9yOm5vdCg6ZGlzYWJsZWQpLFxcbiAgLm5leHRqcy1kYXRhLWNvcHktYnV0dG9uLS1lcnJvcjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLXJlZCk7XFxuICB9XFxuICAubmV4dGpzLWRhdGEtY29weS1idXR0b24tLXN1Y2Nlc3M6bm90KDpkaXNhYmxlZCkge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1ncmVlbik7XFxuICB9XFxuXCIsJ1xcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWUtbm8tc291cmNlXSB7XFxuICAgIHBhZGRpbmc6IDZweCA4cHg7XFxuICAgIG1hcmdpbi1ib3R0b206IDRweDtcXG5cXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1sZyk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZS1uby1zb3VyY2VdOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWUtaWdub3JlZD1cInRydWVcIl0ge1xcbiAgICBvcGFjaXR5OiAwLjY7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV0ge1xcbiAgICB1c2VyLXNlbGVjdDogdGV4dDtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuXFxuICAgIHVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgICAtbW96LXVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgICAtbXMtdXNlci1zZWxlY3Q6IHRleHQ7XFxuXFxuICAgIHBhZGRpbmc6IDZweCA4cHg7XFxuXFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbGcpO1xcbiAgfVxcblxcbiAgLmNhbGwtc3RhY2stZnJhbWUtbWV0aG9kLW5hbWUge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDRweDtcXG5cXG4gICAgbWFyZ2luLWJvdHRvbTogNHB4O1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcblxcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2cHgpO1xcbiAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNnB4KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLm9wZW4taW4tZWRpdG9yLWJ1dHRvbiwgLnNvdXJjZS1tYXBwaW5nLWVycm9yLWJ1dHRvbiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICBwYWRkaW5nOiA0cHg7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1mb250KTtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmNhbGwtc3RhY2stZnJhbWUtZmlsZS1zb3VyY2Uge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICB9XFxuJyx0cyxcIlxcbiAgW2RhdGEtbmV4dGpzLWVudmlyb25tZW50LW5hbWUtbGFiZWxdIHtcXG4gICAgcGFkZGluZzogMnB4IDZweDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gIH1cXG5cIixcIlxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XSB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgdG9wOiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICAvKiBzZWNvbmRhcnkgei1pbmRleCwgLTEgdGhhbiB0b2FzdCB6LWluZGV4ICovXFxuICAgIHotaW5kZXg6IDIxNDc0ODM2NDY7XFxuXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgcGFkZGluZzogMTB2aCAxNXB4IDA7XFxuICB9XFxuXFxuICBAbWVkaWEgKG1heC1oZWlnaHQ6IDgxMnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICAgIHBhZGRpbmc6IDE1cHggMTVweCAwO1xcbiAgICB9XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wXSB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgdG9wOiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZHJvcCk7XFxuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG4gICAgei1pbmRleDogLTE7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wLWZpeGVkXSB7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XFxuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xcbiAgfVxcblwiLGVHLG44LG5FLFwiXFxuICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zdGFjay1sYXllci1oZWlnaHQpO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC14bCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgdHJhbnNpdGlvbjpcXG4gICAgICB0cmFuc2xhdGUgMzUwbXMgdmFyKC0tdGltaW5nLXN3aWZ0KSxcXG4gICAgICBib3gtc2hhZG93IDM1MG1zIHZhcigtLXRpbWluZy1zd2lmdCk7XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMSB7XFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1zaXplLTI0KSk7XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMiB7XFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1zaXplLTQ4KSk7XFxuICAgIHotaW5kZXg6IC0xO1xcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiAtMXB4O1xcbiAgICBoZWlnaHQ6IDA7XFxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLXN0YWNrIHtcXG4gICAgLS1zdGFjay1sYXllci1oZWlnaHQ6IDQ0cHg7XFxuICAgIC0tc3RhY2stbGF5ZXItaGVpZ2h0LWhhbGY6IGNhbGModmFyKC0tc3RhY2stbGF5ZXItaGVpZ2h0KSAvIDIpO1xcbiAgICAtLXN0YWNrLWxheWVyLXRyaW06IDEzcHg7XFxuICAgIC0tc2hhZG93OiAwcHggMC45MjVweCAwLjkyNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDIpLFxcbiAgICAgIDBweCAzLjdweCA3LjRweCAtMy43cHggcmdiYSgwLCAwLCAwLCAwLjA0KSxcXG4gICAgICAwcHggMTQuOHB4IDIyLjJweCAtNy40cHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcXG5cXG4gICAgZGlzcGxheTogZ3JpZDtcXG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlciBjZW50ZXI7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHotaW5kZXg6IC0xO1xcbiAgICBtYXgtd2lkdGg6IHZhcigtLW5leHQtZGlhbG9nLW1heC13aWR0aCk7XFxuXFxuICAgIC5lcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllciB7XFxuICAgICAgZ3JpZC1hcmVhOiAxIC8gMTtcXG4gICAgICAvKiBIaWRlICovXFxuICAgICAgdHJhbnNsYXRlOiAwIGNhbGModmFyKC0tc3RhY2stbGF5ZXItaGVpZ2h0KSAqIC0xKTtcXG4gICAgfVxcblxcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzEnXSxcXG4gICAgJltkYXRhLXN0YWNrLWNvdW50PScyJ10ge1xcbiAgICAgIC5lcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllci0xIHtcXG4gICAgICAgIHRyYW5zbGF0ZTogMFxcbiAgICAgICAgICBjYWxjKHZhcigtLXN0YWNrLWxheWVyLWhlaWdodC1oYWxmKSAqIC0xIC0gdmFyKC0tc3RhY2stbGF5ZXItdHJpbSkpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzInXSB7XFxuICAgICAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTIge1xcbiAgICAgICAgdHJhbnNsYXRlOiAwIGNhbGModmFyKC0tc3RhY2stbGF5ZXItdHJpbSkgKiAtMSAqIDIpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvKiBPbmx5IHRoZSBib3R0b20gc3RhY2sgc2hvdWxkIGhhdmUgdGhlIHNoYWRvdyAqL1xcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzEnXSAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMSB7XFxuICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93KTtcXG4gICAgfVxcblxcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzInXSB7XFxuICAgICAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTIge1xcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93KTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIixcIlxcbiAgLmVycm9yLW92ZXJsYXktcGFnaW5hdGlvbiB7XFxuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuICAgIHdpZHRoOiBmaXQtY29udGVudDtcXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LXBhZ2luYXRpb24tY291bnQge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LXBhZ2luYXRpb24tYnV0dG9uIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0zMDApO1xcbiAgICBmbGV4LXNocmluazogMDtcXG5cXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgIH1cXG5cXG4gICAgJjpub3QoOmRpc2FibGVkKTphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktNTAwKTtcXG4gICAgfVxcblxcbiAgICAmOmRpc2FibGVkIHtcXG4gICAgICBvcGFjaXR5OiAwLjU7XFxuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1idXR0b24taWNvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgfVxcblwiLCdcXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdIHtcXG4gICAgLS1jb2RlLWZyYW1lLXBhZGRpbmc6IDEycHg7XFxuICAgIC0tY29kZS1mcmFtZS1saW5lLWhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWNvZGUtZnJhbWUtbGluZS1oZWlnaHQpO1xcbiAgICBtYXJnaW46IDhweCAwO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5rLFxcbiAgLmNvZGUtZnJhbWUtcHJlIHtcXG4gICAgcGFkZGluZzogdmFyKC0tY29kZS1mcmFtZS1wYWRkaW5nKTtcXG4gIH1cXG5cXG4gIC5jb2RlLWZyYW1lLWxpbmsgc3ZnIHtcXG4gICAgZmxleC1zaHJpbms6IDA7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5lcyB7XFxuICAgIG1pbi13aWR0aDogbWF4LWNvbnRlbnQ7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5rIFtkYXRhLXRleHRdIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgIG1hcmdpbjogYXV0byA2cHg7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1oZWFkZXIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMDBtcyBlYXNlLW91dDtcXG4gICAgYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICB9XFxuXFxuICBbZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmstc291cmNlLWZpbGVdIHtcXG4gICAgcGFkZGluZzogNHB4O1xcbiAgICBtYXJnaW46IC00cHggMCAtNHB4IGF1dG87XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcblxcbiAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV06OnNlbGVjdGlvbixcXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdICo6OnNlbGVjdGlvbiB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktc2VsZWN0aW9uKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdICo6bm90KGEpIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1saW5lXVtkYXRhLW5leHRqcy1jb2RlZnJhbWUtbGluZS0tZXJyb3JlZD1cInRydWVcIl0ge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGlzb2xhdGlvbjogaXNvbGF0ZTtcXG5cXG4gICAgPiBzcGFuIHsgXFxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAgIHotaW5kZXg6IDE7XFxuICAgIH1cXG5cXG4gICAgJjo6YWZ0ZXIge1xcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XFxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIHZhcigtLWNvZGUtZnJhbWUtcGFkZGluZykgKiAyKTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLWNvZGUtZnJhbWUtbGluZS1oZWlnaHQpO1xcbiAgICAgIGxlZnQ6IGNhbGMoLTEgKiB2YXIoLS1jb2RlLWZyYW1lLXBhZGRpbmcpKTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1yZWQtMjAwKTtcXG4gICAgICBib3gtc2hhZG93OiAycHggMCAwIDAgdmFyKC0tY29sb3ItcmVkLTkwMCkgaW5zZXQ7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB9XFxuICB9XFxuXFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSA+ICoge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5rIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBvdXRsaW5lOiAwO1xcbiAgfVxcbiAgLmNvZGUtZnJhbWUtbGluayBbZGF0YS1pY29uPVxcJ3JpZ2h0XFwnXSB7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gZGl2ID4gcHJlIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gc3ZnIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gIH1cXG4nLFwiXFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdOjpzZWxlY3Rpb24sXFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdICo6OnNlbGVjdGlvbiB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktc2VsZWN0aW9uKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gKiB7XFxuICAgIGNvbG9yOiBpbmhlcml0O1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gPiBkaXYgPiBwIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gPiBkaXYgPiBwOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXSBkaXYgPiBwcmUge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB9XFxuXCIsXCJcXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGlua10gc3ZnIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XFxuICB9XFxuICBbZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmtdIHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgfVxcbiAgW2RhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rXTpob3ZlciB7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIH1cXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGluay1pbXBvcnQtdHJhY2VdIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2cHg7XFxuICB9XFxuXCIsXCJcIixcIlxcbiAgLm5leHRqcy1lcnJvci13aXRoLXN0YXRpYyB7XFxuICAgIGJvdHRvbTogY2FsYygxNnB4ICogNC41KTtcXG4gIH1cXG4gIHAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19saW5rIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gIH1cXG4gIHAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19ub3RlcyB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1zdGFjay1ub3Rlcyk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtYm9keSA+IGgyOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgbWFyZ2luLXRvcDogY2FsYygxNnB4ICsgOHB4KTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1ib2R5ID4gaDIge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGl0bGUtY29sb3IpO1xcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0yMCk7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWVycm9ycy1wYXJlbnQge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2U7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWVycm9ycy1wYXJlbnQ6aG92ZXIge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWVycm9ycyB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzID4gc3ZnIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWhpZGUtYnV0dG9uIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI0cHg7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYmFja2dyb3VuZDogbm9uZTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktYnJpZ2h0LXdoaXRlKTtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjI1cyBlYXNlO1xcbiAgICBvcGFjaXR5OiAwLjc7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWhpZGUtYnV0dG9uOmhvdmVyIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2Vycm9yX3RpdGxlIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBtYXJnaW4tYm90dG9tOiAxNHB4O1xcbiAgfVxcbiAgLmVycm9yLW92ZXJsYXktbm90ZXMtY29udGFpbmVyIHtcXG4gICAgbWFyZ2luOiA4cHggMnB4O1xcbiAgfVxcbiAgLmVycm9yLW92ZXJsYXktbm90ZXMtY29udGFpbmVyIHAge1xcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuICB9XFxuXCIsdEEsXCJcXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIHtcXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDRweDtcXG5cXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI2KTtcXG4gICAgcGFkZGluZzogNnB4IDhweCA2cHggNnB4O1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtYWxsKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG5cXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgfVxcblxcbiAgYS5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC52ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3IuZnJlc2gge1xcbiAgICBmaWxsOiB2YXIoLS1jb2xvci1ncmVlbi04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLWdyZWVuLTMwMCk7XFxuICB9XFxuICAudmVyc2lvbi1zdGFsZW5lc3MtaW5kaWNhdG9yLnN0YWxlIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItYW1iZXItODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xcbiAgfVxcbiAgLnZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvci5vdXRkYXRlZCB7XFxuICAgIGZpbGw6IHZhcigtLWNvbG9yLXJlZC04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLXJlZC0zMDApO1xcbiAgfVxcbiAgLnZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvci51bmtub3duIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItZ3JheS04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gIH1cXG5cXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzID4gLnR1cmJvcGFjay10ZXh0IHtcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxcbiAgICAgIHRvIHJpZ2h0LFxcbiAgICAgIHZhcigtLWNvbG9yLXR1cmJvcGFjay10ZXh0LXJlZCkgMCUsXFxuICAgICAgdmFyKC0tY29sb3ItdHVyYm9wYWNrLXRleHQtYmx1ZSkgMTAwJVxcbiAgICApO1xcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XFxuICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xcbiAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICB9XFxuXCIsXCJcXG4gIC5yZXN0YXJ0LWRldi1zZXJ2ZXItYnV0dG9uIHtcXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDRweDtcXG4gICAgbWFyZ2luOiAwIDEycHg7XFxuXFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNik7XFxuICAgIHBhZGRpbmc6IDZweCA4cHggNnB4IDZweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYW1iZXItMTAwKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc21hbGwpO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcblxcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW1iZXItOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgfVxcblwiLFwiXFxuICBbZGF0YS1uZXh0anMtdG9hc3RdIHtcXG4gICAgJltkYXRhLWhpZGRlbj0ndHJ1ZSddIHtcXG4gICAgICBkaXNwbGF5OiBub25lO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZGljYXRvci1tZW51IHtcXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1lbnUpO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLXhsKTtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcXG4gICAgei1pbmRleDogMztcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgb3V0bGluZTogMDtcXG4gICAgbWluLXdpZHRoOiAyNDhweDtcXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1hbmltYXRlLW91dC1kdXJhdGlvbi1tcylcXG4gICAgICB2YXIoLS1hbmltYXRlLW91dC10aW1pbmctZnVuY3Rpb24pO1xcblxcbiAgICAmW2RhdGEtcmVuZGVyZWQ9J3RydWUnXSB7XFxuICAgICAgb3BhY2l0eTogMTtcXG4gICAgICBzY2FsZTogMTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmRpY2F0b3ItaW5uZXIge1xcbiAgICBwYWRkaW5nOiA2cHg7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmRpY2F0b3ItaXRlbSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIHBhZGRpbmc6IDhweCA2cHg7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0zNik7XFxuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7XFxuICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZTogMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmRpY2F0b3ItZm9vdGVyIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbiAgICBwYWRkaW5nOiA2cHg7XFxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmRpY2F0b3ItaXRlbVtkYXRhLXNlbGVjdGVkPSd0cnVlJ10ge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLWxhYmVsIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLXZhbHVlIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLWlzc3VlLWNvdW50IHtcXG4gICAgLS1jb2xvci1wcmltYXJ5OiB2YXIoLS1jb2xvci1ncmF5LTgwMCk7XFxuICAgIC0tY29sb3Itc2Vjb25kYXJ5OiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG4gICAgbWluLXdpZHRoOiB2YXIoLS1zaXplLTQwKTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbWFsbCk7XFxuICAgIHBhZGRpbmc6IDJweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDEyOHB4O1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTMpO1xcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xcblxcbiAgICAmW2RhdGEtaGFzLWlzc3Vlcz0ndHJ1ZSddIHtcXG4gICAgICAtLWNvbG9yLXByaW1hcnk6IHZhcigtLWNvbG9yLXJlZC04MDApO1xcbiAgICAgIC0tY29sb3Itc2Vjb25kYXJ5OiB2YXIoLS1jb2xvci1yZWQtMTAwKTtcXG4gICAgfVxcblxcbiAgICAuZGV2LXRvb2xzLWluZGljYXRvci1pc3N1ZS1jb3VudC1pbmRpY2F0b3Ige1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTgpO1xcbiAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS04KTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcXG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tY29sb3Itc2Vjb25kYXJ5KTtcXG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLXNob3J0Y3V0IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZ2FwOiA0cHg7XFxuXFxuICAgIGtiZCB7XFxuICAgICAgd2lkdGg6IHZhcigtLXNpemUtMjApO1xcbiAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQpO1xcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWdyYWJiaW5nIHtcXG4gICAgY3Vyc29yOiBncmFiYmluZztcXG5cXG4gICAgPiAqIHtcXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gICAgfVxcbiAgfVxcblwiLHQwLmcsXCJcXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgcGFkZGluZzogMnB4IDRweDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTMpO1xcbiAgICB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2stY29udGFpbmVyIHtcXG4gICAgcGFkZGluZzogNnB4O1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2sge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgICBtaW4td2lkdGg6IDMyNnB4O1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2stcHJlIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvcHktYnV0dG9uIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcblxcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcmlnaHQ6IDhweDtcXG4gICAgdG9wOiA4cHg7XFxuICAgIHBhZGRpbmc6IDRweDtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMjQpO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmUge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gICAgcGFkZGluZzogMCAxNnB4O1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZS5kZXYtdG9vbHMtaW5mby1oaWdobGlnaHQge1xcbiAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHZhcigtLWNvbG9yLWJsdWUtOTAwKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmx1ZS00MDApO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi1rZXkge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itc3ludGF4LWtleXdvcmQpO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi12YWx1ZSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1zeW50YXgtbGluayk7XFxuICB9XFxuXCIsXCJcIixyUywnXFxuICAubmV4dGpzLXNjcm9sbC1mYWRlciB7XFxuICAgIC0tYmx1cjogMXB4O1xcbiAgICAtLXN0b3A6IDI1JTtcXG4gICAgLS1oZWlnaHQ6IDE1MHB4O1xcbiAgICAtLWNvbG9yLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xcbiAgICBsZWZ0OiAwO1xcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIodmFyKC0tYmx1cikpO1xcblxcbiAgICAmW2RhdGEtc2lkZT1cInRvcFwiXSB7XFxuICAgICAgdG9wOiAwO1xcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHRyYW5zcGFyZW50LCB2YXIoLS1jb2xvci1iZykpO1xcbiAgICAgIG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNvbG9yLWJnKSB2YXIoLS1zdG9wKSwgdHJhbnNwYXJlbnQpO1xcbiAgICB9XFxuICB9XFxuJyxhYyxyNCxyMCxvbixvTixvTyxvYyxvbyxvTCxvdyxvYixvZixybSl9KX1mdW5jdGlvbiBhZigpe3ZhciBlLG4sdD0oZT1bXCJcXG4gICAgICAgIDpob3N0IHtcXG4gICAgICAgICAgYWxsOiBpbml0aWFsO1xcblxcbiAgICAgICAgICAvKiB0aGUgZGlyZWN0aW9uIHByb3BlcnR5IGlzIG5vdCByZXNldCBieSAnYWxsJyAqL1xcbiAgICAgICAgICBkaXJlY3Rpb246IGx0cjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8qIVxcbiAgICAgICAgICogQm9vdHN0cmFwIFJlYm9vdCB2NC40LjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXFxuICAgICAgICAgKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFRoZSBCb290c3RyYXAgQXV0aG9yc1xcbiAgICAgICAgICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXFxuICAgICAgICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxcbiAgICAgICAgICogRm9ya2VkIGZyb20gTm9ybWFsaXplLmNzcywgbGljZW5zZWQgTUlUIChodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXFxuICAgICAgICAgKi9cXG4gICAgICAgICosXFxuICAgICAgICAqOjpiZWZvcmUsXFxuICAgICAgICAqOjphZnRlciB7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA6aG9zdCB7XFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogMS4xNTtcXG4gICAgICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xcbiAgICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhcnRpY2xlLFxcbiAgICAgICAgYXNpZGUsXFxuICAgICAgICBmaWdjYXB0aW9uLFxcbiAgICAgICAgZmlndXJlLFxcbiAgICAgICAgZm9vdGVyLFxcbiAgICAgICAgaGVhZGVyLFxcbiAgICAgICAgaGdyb3VwLFxcbiAgICAgICAgbWFpbixcXG4gICAgICAgIG5hdixcXG4gICAgICAgIHNlY3Rpb24ge1xcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIDpob3N0IHtcXG4gICAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sXFxuICAgICAgICAgICAgJ0hlbHZldGljYSBOZXVlJywgQXJpYWwsICdOb3RvIFNhbnMnLCBzYW5zLXNlcmlmLFxcbiAgICAgICAgICAgICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnLFxcbiAgICAgICAgICAgICdOb3RvIENvbG9yIEVtb2ppJztcXG4gICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xcbiAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogMS41O1xcbiAgICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItZm9udCk7XFxuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA6aG9zdDpub3QoYnV0dG9uKSB7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBbdGFiaW5kZXg9Jy0xJ106Zm9jdXM6bm90KDpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgICAgIG91dGxpbmU6IDAgIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGhyIHtcXG4gICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICAgICAgICAgIGhlaWdodDogMDtcXG4gICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBoMSxcXG4gICAgICAgIGgyLFxcbiAgICAgICAgaDMsXFxuICAgICAgICBoNCxcXG4gICAgICAgIGg1LFxcbiAgICAgICAgaDYge1xcbiAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBwIHtcXG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGFiYnJbdGl0bGVdLFxcbiAgICAgICAgYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICAgICAgICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgICAgICAgICBjdXJzb3I6IGhlbHA7XFxuICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XFxuICAgICAgICAgIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBub25lO1xcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb24tc2tpcC1pbms6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhZGRyZXNzIHtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9sLFxcbiAgICAgICAgdWwsXFxuICAgICAgICBkbCB7XFxuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBvbCBvbCxcXG4gICAgICAgIHVsIHVsLFxcbiAgICAgICAgb2wgdWwsXFxuICAgICAgICB1bCBvbCB7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBkdCB7XFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBkZCB7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcXG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBibG9ja3F1b3RlIHtcXG4gICAgICAgICAgbWFyZ2luOiAwIDAgMTZweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGIsXFxuICAgICAgICBzdHJvbmcge1xcbiAgICAgICAgICBmb250LXdlaWdodDogYm9sZGVyO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgc21hbGwge1xcbiAgICAgICAgICBmb250LXNpemU6IDgwJTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHN1YixcXG4gICAgICAgIHN1cCB7XFxuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgICAgZm9udC1zaXplOiA3NSU7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAwO1xcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzdWIge1xcbiAgICAgICAgICBib3R0b206IC0wLjI1ZW07XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzdXAge1xcbiAgICAgICAgICB0b3A6IC0wLjVlbTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGEge1xcbiAgICAgICAgICBjb2xvcjogIzAwN2JmZjtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGE6aG92ZXIge1xcbiAgICAgICAgICBjb2xvcjogIzAwNTZiMztcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhOm5vdChbaHJlZl0pIHtcXG4gICAgICAgICAgY29sb3I6IGluaGVyaXQ7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGE6bm90KFtocmVmXSk6aG92ZXIge1xcbiAgICAgICAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcHJlLFxcbiAgICAgICAgY29kZSxcXG4gICAgICAgIGtiZCxcXG4gICAgICAgIHNhbXAge1xcbiAgICAgICAgICBmb250LWZhbWlseTogU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLFxcbiAgICAgICAgICAgICdMaWJlcmF0aW9uIE1vbm8nLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuICAgICAgICAgIGZvbnQtc2l6ZTogMWVtO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcHJlIHtcXG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XFxuICAgICAgICB9XFxuXFxuICAgICAgICBmaWd1cmUge1xcbiAgICAgICAgICBtYXJnaW46IDAgMCAxNnB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW1nIHtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gICAgICAgICAgYm9yZGVyLXN0eWxlOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgc3ZnIHtcXG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRhYmxlIHtcXG4gICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGNhcHRpb24ge1xcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMTJweDtcXG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEycHg7XFxuICAgICAgICAgIGNvbG9yOiAjNmM3NTdkO1xcbiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICAgICAgICBjYXB0aW9uLXNpZGU6IGJvdHRvbTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRoIHtcXG4gICAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxhYmVsIHtcXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBidXR0b24ge1xcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgICAgICAgICBib3JkZXI6IDA7XFxuICAgICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcXG4gICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uOmZvY3VzIHtcXG4gICAgICAgICAgb3V0bGluZTogMXB4IGRvdHRlZDtcXG4gICAgICAgICAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uOmZvY3VzOm5vdCg6Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICBvdXRsaW5lOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW5wdXQsXFxuICAgICAgICBidXR0b24sXFxuICAgICAgICBzZWxlY3QsXFxuICAgICAgICBvcHRncm91cCxcXG4gICAgICAgIHRleHRhcmVhIHtcXG4gICAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gICAgICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbixcXG4gICAgICAgIGlucHV0IHtcXG4gICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBidXR0b24sXFxuICAgICAgICBzZWxlY3Qge1xcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHNlbGVjdCB7XFxuICAgICAgICAgIHdvcmQtd3JhcDogbm9ybWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uLFxcbiAgICAgICAgW3R5cGU9J2J1dHRvbiddLFxcbiAgICAgICAgW3R5cGU9J3Jlc2V0J10sXFxuICAgICAgICBbdHlwZT0nc3VibWl0J10ge1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbjpub3QoOmRpc2FibGVkKSxcXG4gICAgICAgIFt0eXBlPSdidXR0b24nXTpub3QoOmRpc2FibGVkKSxcXG4gICAgICAgIFt0eXBlPSdyZXNldCddOm5vdCg6ZGlzYWJsZWQpLFxcbiAgICAgICAgW3R5cGU9J3N1Ym1pdCddOm5vdCg6ZGlzYWJsZWQpIHtcXG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxcbiAgICAgICAgW3R5cGU9J2J1dHRvbiddOjotbW96LWZvY3VzLWlubmVyLFxcbiAgICAgICAgW3R5cGU9J3Jlc2V0J106Oi1tb3otZm9jdXMtaW5uZXIsXFxuICAgICAgICBbdHlwZT0nc3VibWl0J106Oi1tb3otZm9jdXMtaW5uZXIge1xcbiAgICAgICAgICBwYWRkaW5nOiAwO1xcbiAgICAgICAgICBib3JkZXItc3R5bGU6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpbnB1dFt0eXBlPSdyYWRpbyddLFxcbiAgICAgICAgaW5wdXRbdHlwZT0nY2hlY2tib3gnXSB7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpbnB1dFt0eXBlPSdkYXRlJ10sXFxuICAgICAgICBpbnB1dFt0eXBlPSd0aW1lJ10sXFxuICAgICAgICBpbnB1dFt0eXBlPSdkYXRldGltZS1sb2NhbCddLFxcbiAgICAgICAgaW5wdXRbdHlwZT0nbW9udGgnXSB7XFxuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbGlzdGJveDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRleHRhcmVhIHtcXG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XFxuICAgICAgICAgIHJlc2l6ZTogdmVydGljYWw7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBmaWVsZHNldCB7XFxuICAgICAgICAgIG1pbi13aWR0aDogMDtcXG4gICAgICAgICAgcGFkZGluZzogMDtcXG4gICAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgICBib3JkZXI6IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsZWdlbmQge1xcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcXG4gICAgICAgICAgcGFkZGluZzogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgICAgICAgICBmb250LXNpemU6IDI0cHg7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgICAgICAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHByb2dyZXNzIHtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgW3R5cGU9J251bWJlciddOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxcbiAgICAgICAgW3R5cGU9J251bWJlciddOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcXG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgW3R5cGU9J3NlYXJjaCddIHtcXG4gICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XFxuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xcbiAgICAgICAgICBmb250OiBpbmhlcml0O1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG91dHB1dCB7XFxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHN1bW1hcnkge1xcbiAgICAgICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XFxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRlbXBsYXRlIHtcXG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFtoaWRkZW5dIHtcXG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgIFwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBhZj1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIGFwKCl7cmV0dXJuKDAseS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZWkoYWYoKSl9KX1mdW5jdGlvbiBhaCgpe3ZhciBlLG4sdD0oZT1bJ1xcbiAgICAgICAgOmhvc3Qge1xcbiAgICAgICAgICAvKiBcXG4gICAgICAgICAgICogQ0FVVElPTjogVEhJUyBJUyBBIFdPUktBUk9VTkQhXFxuICAgICAgICAgICAqIEZvciBub3csIHdlIHVzZSBAYmFiZWwvY29kZS1mcmFtZSB0byBwYXJzZSB0aGUgY29kZSBmcmFtZSB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IG9wdGlvbiB0byBjaGFuZ2UgdGhlIGNvbG9yLlxcbiAgICAgICAgICAgKiB4LXJlZjogaHR0cHM6Ly9naXRodWIuY29tL2JhYmVsL2JhYmVsL2Jsb2IvZWZhNTIzMjRmZjgzNWI3OTRjNDgwODBmMTQ4NzdiNmNhZjMyY2QxNS9wYWNrYWdlcy9iYWJlbC1jb2RlLWZyYW1lL3NyYy9kZWZzLnRzI0w0MC1MNTRcXG4gICAgICAgICAgICogU28sIHdlIGRvIGEgd29ya2Fyb3VuZCBtYXBwaW5nIHRvIGNoYW5nZSB0aGUgY29sb3IgbWF0Y2hpbmcgdGhlIHRoZW1lLlxcbiAgICAgICAgICAgKlxcbiAgICAgICAgICAgKiBGb3IgZXhhbXBsZSwgaW4gQGJhYmVsL2NvZGUtZnJhbWUsIHRoZSBcImtleXdvcmRcIiBpcyBtYXBwZWQgdG8gQU5TSSBcImN5YW5cIi5cXG4gICAgICAgICAgICogV2Ugd2FudCB0aGUgXCJrZXl3b3JkXCIgdG8gdXNlIHRoZSBcInN5bnRheC1rZXl3b3JkXCIgY29sb3IgaW4gdGhlIHRoZW1lLlxcbiAgICAgICAgICAgKiBTbywgd2UgbWFwIHRoZSBcImN5YW5cIiB0byB0aGUgXCJzeW50YXgta2V5d29yZFwiIGluIHRoZSB0aGVtZS5cXG4gICAgICAgICAgICovXFxuICAgICAgICAgIC8qIGN5YW46IGtleXdvcmQgKi9cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWN5YW46IHZhcigtLWNvbG9yLXN5bnRheC1rZXl3b3JkKTtcXG4gICAgICAgICAgLyogeWVsbG93OiBjYXBpdGFsaXplZCwganN4SWRlbnRpZmllciwgcHVuY3R1YXRpb24gKi9cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLXllbGxvdzogdmFyKC0tY29sb3Itc3ludGF4LWZ1bmN0aW9uKTtcXG4gICAgICAgICAgLyogbWFnZW50YTogbnVtYmVyLCByZWdleCAqL1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktbWFnZW50YTogdmFyKC0tY29sb3Itc3ludGF4LWtleXdvcmQpO1xcbiAgICAgICAgICAvKiBncmVlbjogc3RyaW5nICovXFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1ncmVlbjogdmFyKC0tY29sb3Itc3ludGF4LXN0cmluZyk7XFxuICAgICAgICAgIC8qIGdyYXkgKGJyaWdodCBibGFjayk6IGNvbW1lbnQsIGd1dHRlciAqL1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWJsYWNrOiB2YXIoLS1jb2xvci1zeW50YXgtY29tbWVudCk7XFxuXFxuICAgICAgICAgIC8qIEFuc2kgLSBUZW1wb3JhcnkgKi9cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLXNlbGVjdGlvbjogdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0zMDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWZnOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcblxcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktd2hpdGU6IHZhcigtLWNvbG9yLWdyYXktNzAwKTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJsYWNrOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1ibHVlOiB2YXIoLS1jb2xvci1ibHVlLTcwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1yZWQ6IHZhcigtLWNvbG9yLXJlZC03MDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LXdoaXRlOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWJsdWU6IHZhcigtLWNvbG9yLWJsdWUtODAwKTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1jeWFuOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtZ3JlZW46IHZhcigtLWNvbG9yLWdyZWVuLTgwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtbWFnZW50YTogdmFyKC0tY29sb3ItYmx1ZS04MDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LXJlZDogdmFyKC0tY29sb3ItcmVkLTgwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQteWVsbG93OiB2YXIoLS1jb2xvci1hbWJlci05MDApO1xcblxcbiAgICAgICAgICAvKiBCYWNrZ3JvdW5kIExpZ2h0ICovXFxuICAgICAgICAgIC0tY29sb3ItYmFja2dyb3VuZC0xMDA6ICNmZmZmZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmFja2dyb3VuZC0yMDA6ICNmYWZhZmE7XFxuXFxuICAgICAgICAgIC8qIFN5bnRheCBMaWdodCAqL1xcbiAgICAgICAgICAtLWNvbG9yLXN5bnRheC1jb21tZW50OiAjNTQ1NDU0O1xcbiAgICAgICAgICAtLWNvbG9yLXN5bnRheC1jb25zdGFudDogIzE3MTcxNztcXG4gICAgICAgICAgLS1jb2xvci1zeW50YXgtZnVuY3Rpb246ICMwMDU0YWQ7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LWtleXdvcmQ6ICNhNTE4NTA7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LWxpbms6ICMwNjYwNTY7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LXBhcmFtZXRlcjogIzhmM2UwMDtcXG4gICAgICAgICAgLS1jb2xvci1zeW50YXgtcHVuY3R1YXRpb246ICMxNzE3MTc7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LXN0cmluZzogIzAzNjE1NztcXG4gICAgICAgICAgLS1jb2xvci1zeW50YXgtc3RyaW5nLWV4cHJlc3Npb246ICMwNjYwNTY7XFxuXFxuICAgICAgICAgIC8qIEdyYXkgU2NhbGUgTGlnaHQgKi9cXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTEwMDogI2YyZjJmMjtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTIwMDogI2ViZWJlYjtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTMwMDogI2U2ZTZlNjtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTQwMDogI2VhZWFlYTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTUwMDogI2M5YzljOTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTYwMDogI2E4YThhODtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTcwMDogIzhmOGY4ZjtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTgwMDogIzdkN2Q3ZDtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTkwMDogIzY2NjY2NjtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTEwMDA6ICMxNzE3MTc7XFxuXFxuICAgICAgICAgIC8qIEdyYXkgQWxwaGEgU2NhbGUgTGlnaHQgKi9cXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTEwMDogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTIwMDogcmdiYSgwLCAwLCAwLCAwLjA4MSk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS0zMDA6IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTQwMDogcmdiYSgwLCAwLCAwLCAwLjA4KTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTUwMDogcmdiYSgwLCAwLCAwLCAwLjIxKTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTYwMDogcmdiYSgwLCAwLCAwLCAwLjM0KTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTcwMDogcmdiYSgwLCAwLCAwLCAwLjQ0KTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTgwMDogcmdiYSgwLCAwLCAwLCAwLjUxKTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTkwMDogcmdiYSgwLCAwLCAwLCAwLjYwNSk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS0xMDAwOiByZ2JhKDAsIDAsIDAsIDAuOTEpO1xcblxcbiAgICAgICAgICAvKiBCbHVlIFNjYWxlIExpZ2h0ICovXFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS0xMDA6ICNmMGY3ZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS0yMDA6ICNlZGY2ZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS0zMDA6ICNlMWYwZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS00MDA6ICNjZGU3ZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS01MDA6ICM5OWNlZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS02MDA6ICM1MmFlZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS03MDA6ICMwMDcwZjM7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS04MDA6ICMwMDYwZDE7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS05MDA6ICMwMDY3ZDY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS0xMDAwOiAjMDAyNWFkO1xcblxcbiAgICAgICAgICAvKiBSZWQgU2NhbGUgTGlnaHQgKi9cXG4gICAgICAgICAgLS1jb2xvci1yZWQtMTAwOiAjZmZmMGYwO1xcbiAgICAgICAgICAtLWNvbG9yLXJlZC0yMDA6ICNmZmViZWI7XFxuICAgICAgICAgIC0tY29sb3ItcmVkLTMwMDogI2ZmZTVlNTtcXG4gICAgICAgICAgLS1jb2xvci1yZWQtNDAwOiAjZmRkOGQ4O1xcbiAgICAgICAgICAtLWNvbG9yLXJlZC01MDA6ICNmOGJhYmE7XFxuICAgICAgICAgIC0tY29sb3ItcmVkLTYwMDogI2Y4NzI3NDtcXG4gICAgICAgICAgLS1jb2xvci1yZWQtNzAwOiAjZTU0ODRkO1xcbiAgICAgICAgICAtLWNvbG9yLXJlZC04MDA6ICNkYTMwMzY7XFxuICAgICAgICAgIC0tY29sb3ItcmVkLTkwMDogI2NhMmEzMDtcXG4gICAgICAgICAgLS1jb2xvci1yZWQtMTAwMDogIzM4MTMxNjtcXG5cXG4gICAgICAgICAgLyogQW1iZXIgU2NhbGUgTGlnaHQgKi9cXG4gICAgICAgICAgLS1jb2xvci1hbWJlci0xMDA6ICNmZmY2ZTU7XFxuICAgICAgICAgIC0tY29sb3ItYW1iZXItMjAwOiAjZmZmNGQ1O1xcbiAgICAgICAgICAtLWNvbG9yLWFtYmVyLTMwMDogI2ZlZjBjZDtcXG4gICAgICAgICAgLS1jb2xvci1hbWJlci00MDA6ICNmZmRkYmY7XFxuICAgICAgICAgIC0tY29sb3ItYW1iZXItNTAwOiAjZmZjOTZiO1xcbiAgICAgICAgICAtLWNvbG9yLWFtYmVyLTYwMDogI2Y1YjA0NztcXG4gICAgICAgICAgLS1jb2xvci1hbWJlci03MDA6ICNmZmIyMjQ7XFxuICAgICAgICAgIC0tY29sb3ItYW1iZXItODAwOiAjZmY5OTBhO1xcbiAgICAgICAgICAtLWNvbG9yLWFtYmVyLTkwMDogI2EzNTIwMDtcXG4gICAgICAgICAgLS1jb2xvci1hbWJlci0xMDAwOiAjNGUyMDA5O1xcblxcbiAgICAgICAgICAvKiBHcmVlbiBTY2FsZSBMaWdodCAqL1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTEwMDogI2VmZmJlZjtcXG4gICAgICAgICAgLS1jb2xvci1ncmVlbi0yMDA6ICNlYWZhZWE7XFxuICAgICAgICAgIC0tY29sb3ItZ3JlZW4tMzAwOiAjZGNmNmRjO1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTQwMDogI2M4ZjFjOTtcXG4gICAgICAgICAgLS1jb2xvci1ncmVlbi01MDA6ICM5OWU1OWY7XFxuICAgICAgICAgIC0tY29sb3ItZ3JlZW4tNjAwOiAjNmNkYTc2O1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTcwMDogIzQ2YTc1ODtcXG4gICAgICAgICAgLS1jb2xvci1ncmVlbi04MDA6ICMzODhlNGE7XFxuICAgICAgICAgIC0tY29sb3ItZ3JlZW4tOTAwOiAjMjk3YzNiO1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTEwMDA6ICMxODMxMWU7XFxuXFxuICAgICAgICAgIC8qIFR1cmJvcGFjayBMaWdodCAtIFRlbXBvcmFyeSAqL1xcbiAgICAgICAgICAtLWNvbG9yLXR1cmJvcGFjay10ZXh0LXJlZDogI2ZmMWU1NjtcXG4gICAgICAgICAgLS1jb2xvci10dXJib3BhY2stdGV4dC1ibHVlOiAjMDA5NmZmO1xcbiAgICAgICAgICAtLWNvbG9yLXR1cmJvcGFjay1ib3JkZXItcmVkOiAjZjBhZGJlO1xcbiAgICAgICAgICAtLWNvbG9yLXR1cmJvcGFjay1ib3JkZXItYmx1ZTogI2FkY2NlYTtcXG4gICAgICAgICAgLS1jb2xvci10dXJib3BhY2stYmFja2dyb3VuZC1yZWQ6ICNmZmY3Zjk7XFxuICAgICAgICAgIC0tY29sb3ItdHVyYm9wYWNrLWJhY2tncm91bmQtYmx1ZTogI2Y2ZmJmZjtcXG4gICAgICAgIH1cXG4gICAgICAnXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBhaD1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIGFnKCl7cmV0dXJuKDAseS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZWkoYWgoKSl9KX1mdW5jdGlvbiBhbShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gYXYoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIGFiKGUpe3ZhciBuPWUuc3RhdGUsdD1lLmRpc3BhdGNoLHI9ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyxvPWUucnVudGltZUVycm9ycyxhPWUuZXJyb3JDb3VudCxpPSEhcHJvY2Vzcy5lbnYuVFVSQk9QQUNLLGw9KDAsdEouTikobi5pc0Vycm9yT3ZlcmxheU9wZW4se2V4aXREZWxheToyMDB9KSxzPWwubW91bnRlZCxjPXtyZW5kZXJlZDpsLnJlbmRlcmVkLHRyYW5zaXRpb25EdXJhdGlvbk1zOjIwMCxpc1R1cmJvcGFjazppLHZlcnNpb25JbmZvOm4udmVyc2lvbkluZm8sZXJyb3JDb3VudDphfTtyZXR1cm4gbnVsbCE9PW4uYnVpbGRFcnJvcj8oMCx5LmpzeCkodHIsYXYoYW0oe30sYykse21lc3NhZ2U6bi5idWlsZEVycm9yLHJlbmRlcmVkOiEwfSkpOm8ubGVuZ3RoJiZzPygwLHkuanN4KSh0VCxhdihhbSh7fSxjKSx7ZGVidWdJbmZvOm4uZGVidWdJbmZvLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOnIscnVudGltZUVycm9yczpvLG9uQ2xvc2U6ZnVuY3Rpb24oKXt0KHt0eXBlOkl9KX19KSk6KDAseS5qc3gpKHguU3VzcGVuc2Use30pfWZ1bmN0aW9uIGF5KGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBheChlLG4sdCl7cmV0dXJuIG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT10LGV9ZnVuY3Rpb24gYXcoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe2F4KGUsbix0W25dKX0pfXJldHVybiBlfWZ1bmN0aW9uIGFqKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBheShlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBheShlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX12YXIgYWs9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhdGUuYnVpbGRFcnJvcj8oMCx5LmpzeCkoYU8sYXcoe30sZSkpOigwLHkuanN4KShhQSxhdyh7fSxlKSl9LGFBPWZ1bmN0aW9uKGUpe3ZhciBuLHQscixvPWUuY2hpbGRyZW4sYT1lLnN0YXRlLGk9ZS5pc0FwcERpcixsPWUuZGlzcGF0Y2gscz1hLmVycm9ycyxjPWFqKCgwLHgudXNlU3RhdGUpKHt9KSwyKSx1PWNbMF0sZD1jWzFdLGY9YWooKDAseC51c2VNZW1vKShmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPW51bGwsdD0wO3Q8cy5sZW5ndGg7Kyt0KXt2YXIgcj1zW3RdLG89ci5pZDtpZihvIGluIHUpe2UucHVzaCh1W29dKTtjb250aW51ZX1uPXI7YnJlYWt9cmV0dXJuW2Usbl19LFtzLHVdKSwyKSxwPWZbMF0saD1mWzFdO3JldHVybiB0PShuPXtlcnJvcnM6cyxkaXNwYXRjaDpsfSkuZXJyb3JzLHI9bi5kaXNwYXRjaCwoMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXt2YXIgZSxuLG89KG51bGw9PShlPXByb2Nlc3MuZW52Ll9fTkVYVF9CVU5ETEVSKT92b2lkIDA6ZS50b1VwcGVyQ2FzZSgpKT09PVwiVFVSQk9QQUNLXCImJnByb2Nlc3MuZW52Ll9fTkVYVF9CVU5ETEVSX0hBU19QRVJTSVNURU5UX0NBQ0hFLGE9bnVsbD09KG49dFswXSk/dm9pZCAwOm4uZXJyb3I7aWYobyYmYSl7dmFyIGk9XCJfX25leHRfZXJyb3Jfb3ZlcmxheTpcIi5jb25jYXQod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFwiOlwiKS5jb25jYXQoYS5tZXNzYWdlKTtyKHt0eXBlOkssc2hvd1Jlc3RhcnRTZXJ2ZXJCdXR0b246XCIxXCI9PT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGkpfSk7dmFyIGw9ZnVuY3Rpb24oKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGksXCIxXCIpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIixsKSxmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsbCl9fXIoe3R5cGU6SyxzaG93UmVzdGFydFNlcnZlckJ1dHRvbjohMX0pfSxbdCxyXSksKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7aWYobnVsbCE9aCl7dmFyIGUsbix0PSEwO3JldHVybihlPWgsbj1pLHRiKGZ1bmN0aW9uKCl7dmFyIHQscixvLGEsaTtyZXR1cm4gdHcodGhpcyxmdW5jdGlvbihsKXtzd2l0Y2gobC5sYWJlbCl7Y2FzZSAwOnZhciBzLGM7aWYodD17aWQ6ZS5pZCxydW50aW1lOiEwLGVycm9yOmUuZXJyb3IsdHlwZTplLnR5cGV9LCEoXCJ1c2VcImluIHgpKXJldHVyblszLDFdO3JldHVybiByPXR4KHR5KHt9LHQpLHtmcmFtZXM6KGM9KHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGIoZnVuY3Rpb24oKXtyZXR1cm4gdHcodGhpcyxmdW5jdGlvbih0KXtzd2l0Y2godC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGVDKGUuZnJhbWVzLHRtKGUuZXJyb3IpLG4pXTtjYXNlIDE6cmV0dXJuWzIsdC5zZW50KCldfX0pfSkoKX0pKCksZnVuY3Rpb24oKXtyZXR1cm4gY30pfSksdm9pZCAwIT09ZS5jb21wb25lbnRTdGFja0ZyYW1lcyYmKHIuY29tcG9uZW50U3RhY2tGcmFtZXM9ZS5jb21wb25lbnRTdGFja0ZyYW1lcyksWzIscl07Y2FzZSAxOnJldHVybiBhPVt0eSh7fSx0KV0saT17fSxbNCxlQyhlLmZyYW1lcyx0bShlLmVycm9yKSxuKV07Y2FzZSAyOnJldHVybiBvPXR4LmFwcGx5KHZvaWQgMCxhLmNvbmNhdChbKGkuZnJhbWVzPWwuc2VudCgpLGkpXSkpLHZvaWQgMCE9PWUuY29tcG9uZW50U3RhY2tGcmFtZXMmJihvLmNvbXBvbmVudFN0YWNrRnJhbWVzPWUuY29tcG9uZW50U3RhY2tGcmFtZXMpLFsyLG9dO2Nhc2UgMzpyZXR1cm5bMl19fSl9KSgpKS50aGVuKGZ1bmN0aW9uKGUpe3QmJmQoZnVuY3Rpb24obil7dmFyIHQscjtyZXR1cm4gdD1hdyh7fSxuKSxyPW51bGwhPShyPWF4KHt9LGUuaWQsZSkpP3I6e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChyKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSx0fSl9KSxmdW5jdGlvbigpe3Q9ITF9fX0sW2gsaV0pLG8oe3J1bnRpbWVFcnJvcnM6cCx0b3RhbEVycm9yQ291bnQ6cy5sZW5ndGh9KX0sYU89ZnVuY3Rpb24oZSl7cmV0dXJuKDAsZS5jaGlsZHJlbikoe3J1bnRpbWVFcnJvcnM6W10sdG90YWxFcnJvckNvdW50OjF9KX07ZnVuY3Rpb24gYUMoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICAgICAgOmhvc3QoLmRhcmspIHtcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgIH1cXG5cXG4gICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XFxuICAgICAgICA6aG9zdCg6bm90KC5saWdodCkpIHtcXG4gICAgICAgICAgXCIsXCJcXG4gICAgICAgICAgXCIsXCJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIFwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBhQz1mdW5jdGlvbigpe3JldHVybiB0fSx0fXZhciBhUz1cIlxcbiAgLyogQmFja2dyb3VuZCBEYXJrICovXFxuICAtLWNvbG9yLWJhY2tncm91bmQtMTAwOiAjMGEwYTBhO1xcbiAgLS1jb2xvci1iYWNrZ3JvdW5kLTIwMDogIzAwMDAwMDtcXG5cXG4gIC8qIFN5bnRheCBEYXJrICovXFxuICAtLWNvbG9yLXN5bnRheC1jb21tZW50OiAjYTBhMGEwO1xcbiAgLS1jb2xvci1zeW50YXgtY29uc3RhbnQ6ICNlZGVkZWQ7XFxuICAtLWNvbG9yLXN5bnRheC1mdW5jdGlvbjogIzUyYTlmZjtcXG4gIC0tY29sb3Itc3ludGF4LWtleXdvcmQ6ICNmNzZlOTk7XFxuICAtLWNvbG9yLXN5bnRheC1saW5rOiAjMGFjNWIyO1xcbiAgLS1jb2xvci1zeW50YXgtcGFyYW1ldGVyOiAjZjFhMTBkO1xcbiAgLS1jb2xvci1zeW50YXgtcHVuY3R1YXRpb246ICNlZGVkZWQ7XFxuICAtLWNvbG9yLXN5bnRheC1zdHJpbmc6ICMwYWM1YjI7XFxuICAtLWNvbG9yLXN5bnRheC1zdHJpbmctZXhwcmVzc2lvbjogIzBhYzViMjtcXG5cXG4gIC8qIEdyYXkgU2NhbGUgRGFyayAqL1xcbiAgLS1jb2xvci1ncmF5LTEwMDogIzFhMWExYTtcXG4gIC0tY29sb3ItZ3JheS0yMDA6ICMxZjFmMWY7XFxuICAtLWNvbG9yLWdyYXktMzAwOiAjMjkyOTI5O1xcbiAgLS1jb2xvci1ncmF5LTQwMDogIzJlMmUyZTtcXG4gIC0tY29sb3ItZ3JheS01MDA6ICM0NTQ1NDU7XFxuICAtLWNvbG9yLWdyYXktNjAwOiAjODc4Nzg3O1xcbiAgLS1jb2xvci1ncmF5LTcwMDogIzhmOGY4ZjtcXG4gIC0tY29sb3ItZ3JheS04MDA6ICM3ZDdkN2Q7XFxuICAtLWNvbG9yLWdyYXktOTAwOiAjYTBhMGEwO1xcbiAgLS1jb2xvci1ncmF5LTEwMDA6ICNlZGVkZWQ7XFxuXFxuICAvKiBHcmF5IEFscGhhIFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItZ3JheS1hbHBoYS0xMDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNjYpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTIwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4Nyk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtMzAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTI1KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS00MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNDUpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTUwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzOSk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtNjAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTA2KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS03MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtODAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDcpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTkwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYxKTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS0xMDAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIzKTtcXG5cXG4gIC8qIEJsdWUgU2NhbGUgRGFyayAqL1xcbiAgLS1jb2xvci1ibHVlLTEwMDogIzBmMWIyZDtcXG4gIC0tY29sb3ItYmx1ZS0yMDA6ICMxMDI0M2U7XFxuICAtLWNvbG9yLWJsdWUtMzAwOiAjMGYzMDU4O1xcbiAgLS1jb2xvci1ibHVlLTQwMDogIzBkMzg2ODtcXG4gIC0tY29sb3ItYmx1ZS01MDA6ICMwYTQ0ODE7XFxuICAtLWNvbG9yLWJsdWUtNjAwOiAjMDA5MWZmO1xcbiAgLS1jb2xvci1ibHVlLTcwMDogIzAwNzBmMztcXG4gIC0tY29sb3ItYmx1ZS04MDA6ICMwMDYwZDE7XFxuICAtLWNvbG9yLWJsdWUtOTAwOiAjNTJhOWZmO1xcbiAgLS1jb2xvci1ibHVlLTEwMDA6ICNlYWY2ZmY7XFxuXFxuICAvKiBSZWQgU2NhbGUgRGFyayAqL1xcbiAgLS1jb2xvci1yZWQtMTAwOiAjMmExMzE0O1xcbiAgLS1jb2xvci1yZWQtMjAwOiAjM2QxNzE5O1xcbiAgLS1jb2xvci1yZWQtMzAwOiAjNTUxYTFlO1xcbiAgLS1jb2xvci1yZWQtNDAwOiAjNjcxZTIyO1xcbiAgLS1jb2xvci1yZWQtNTAwOiAjODIyMDI1O1xcbiAgLS1jb2xvci1yZWQtNjAwOiAjZTU0ODRkO1xcbiAgLS1jb2xvci1yZWQtNzAwOiAjZTU0ODRkO1xcbiAgLS1jb2xvci1yZWQtODAwOiAjZGEzMDM2O1xcbiAgLS1jb2xvci1yZWQtOTAwOiAjZmY2MzY5O1xcbiAgLS1jb2xvci1yZWQtMTAwMDogI2ZmZWNlZTtcXG5cXG4gIC8qIEFtYmVyIFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItYW1iZXItMTAwOiAjMjcxNzAwO1xcbiAgLS1jb2xvci1hbWJlci0yMDA6ICMzNDFjMDA7XFxuICAtLWNvbG9yLWFtYmVyLTMwMDogIzRhMjkwMDtcXG4gIC0tY29sb3ItYW1iZXItNDAwOiAjNTczMzAwO1xcbiAgLS1jb2xvci1hbWJlci01MDA6ICM2OTNmMDU7XFxuICAtLWNvbG9yLWFtYmVyLTYwMDogI2U3OWMxMztcXG4gIC0tY29sb3ItYW1iZXItNzAwOiAjZmZiMjI0O1xcbiAgLS1jb2xvci1hbWJlci04MDA6ICNmZjk5MGE7XFxuICAtLWNvbG9yLWFtYmVyLTkwMDogI2YxYTEwZDtcXG4gIC0tY29sb3ItYW1iZXItMTAwMDogI2ZlZjNkZDtcXG5cXG4gIC8qIEdyZWVuIFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItZ3JlZW4tMTAwOiAjMGIyMjExO1xcbiAgLS1jb2xvci1ncmVlbi0yMDA6ICMwZjJjMTc7XFxuICAtLWNvbG9yLWdyZWVuLTMwMDogIzExMzUxYjtcXG4gIC0tY29sb3ItZ3JlZW4tNDAwOiAjMGM0NjFiO1xcbiAgLS1jb2xvci1ncmVlbi01MDA6ICMxMjY0Mjc7XFxuICAtLWNvbG9yLWdyZWVuLTYwMDogIzFhOTMzODtcXG4gIC0tY29sb3ItZ3JlZW4tNzAwOiAjNDZhNzU4O1xcbiAgLS1jb2xvci1ncmVlbi04MDA6ICMzODhlNGE7XFxuICAtLWNvbG9yLWdyZWVuLTkwMDogIzYzYzE3NDtcXG4gIC0tY29sb3ItZ3JlZW4tMTAwMDogI2U1ZmJlYjtcXG5cXG4gIC8qIFR1cmJvcGFjayBEYXJrIC0gVGVtcG9yYXJ5ICovXFxuICAtLWNvbG9yLXR1cmJvcGFjay10ZXh0LXJlZDogI2ZmNmQ5MjtcXG4gIC0tY29sb3ItdHVyYm9wYWNrLXRleHQtYmx1ZTogIzQ1YjJmZjtcXG4gIC0tY29sb3ItdHVyYm9wYWNrLWJvcmRlci1yZWQ6ICM2ZTI5M2I7XFxuICAtLWNvbG9yLXR1cmJvcGFjay1ib3JkZXItYmx1ZTogIzI4NGY4MDtcXG4gIC0tY29sb3ItdHVyYm9wYWNrLWJhY2tncm91bmQtcmVkOiAjMjUwZDEyO1xcbiAgLS1jb2xvci10dXJib3BhY2stYmFja2dyb3VuZC1ibHVlOiAjMGExNzIzO1xcblwiLGFFPVwiXFxuICAtLWNvbG9yLWZvbnQ6IHdoaXRlO1xcbiAgLS1jb2xvci1iYWNrZHJvcDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbiAgLS1jb2xvci1ib3JkZXItc2hhZG93OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQ1KTtcXG5cXG4gIC0tY29sb3ItdGl0bGUtY29sb3I6ICNmYWZhZmE7XFxuICAtLWNvbG9yLXN0YWNrLW5vdGVzOiAjYTlhOWE5O1xcblwiO2Z1bmN0aW9uIGFfKCl7cmV0dXJuKDAseS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZWkoYUMoKSxhRSxhUyxhRSxhUyl9KX1mdW5jdGlvbiBhUChlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gYXooZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGFQKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIGFQKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIGFMKGUpe3ZhciBuLHQscixvPWUuc3RhdGUsYT1lLmRpc3BhdGNoLGk9ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyxsPWF6KCh0PShuPXJ0KCgwLHgudXNlU3RhdGUpKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2UmJmxvY2FsU3RvcmFnZS5nZXRJdGVtKEopP051bWJlcihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShKKSk6Uy5NZWRpdW0pLDIpKVswXSxyPW5bMV0sW3QsZnVuY3Rpb24oZSl7cihlKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShKLFN0cmluZyhlKSl9XSksMikscz1sWzBdLGM9bFsxXSx1PWF6KCgwLHgudXNlU3RhdGUpKCExKSwyKSxkPXVbMF0sZj11WzFdLHA9bnVsbCE9PW8uYnVpbGRFcnJvcjtyZXR1cm4gcHJvY2Vzcy5lbnYuX19ORVhUX0RFVlRPT0xfTkVXX1BBTkVMX1VJJiZwIT09ZCYmKHAmJihhKHt0eXBlOld9KSxhKHt0eXBlOk19KSksZihwKSksKDAseS5qc3hzKShlZCx7Y2hpbGRyZW46WygwLHkuanN4KShhcCx7fSksKDAseS5qc3gpKGVwLHtzY2FsZTpwcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9ORVdfUEFORUxfVUk/by5zY2FsZTpzfSksKDAseS5qc3gpKGFnLHt9KSwoMCx5LmpzeCkoYWQse30pLCgwLHkuanN4KShhXyx7fSksKDAseS5qc3gpKGFrLHtzdGF0ZTpvLGRpc3BhdGNoOmEsaXNBcHBEaXI6ITAsY2hpbGRyZW46ZnVuY3Rpb24oZSl7dmFyIG49ZS5ydW50aW1lRXJyb3JzLHQ9ZS50b3RhbEVycm9yQ291bnQ7cmV0dXJuKDAseS5qc3gpKHkuRnJhZ21lbnQse2NoaWxkcmVuOm8uc2hvd0luZGljYXRvciYmKHByb2Nlc3MuZW52Ll9fTkVYVF9ERVZUT09MX05FV19QQU5FTF9VST8oMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkob0ose3N0YXRlOm8sZGlzcGF0Y2g6YSxlcnJvckNvdW50OnQsaXNCdWlsZEVycm9yOnB9KSwoby5pc0RldlRvb2xzUGFuZWxPcGVufHxvLmlzRXJyb3JPdmVybGF5T3BlbikmJigwLHkuanN4KShhcyx7c3RhdGU6byxkaXNwYXRjaDphLGlzc3VlQ291bnQ6dCxydW50aW1lRXJyb3JzOm4sZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6aX0pXX0pOigwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4KShyVSx7c2NhbGU6cyxzZXRTY2FsZTpjLHN0YXRlOm8sZGlzcGF0Y2g6YSxlcnJvckNvdW50OnQsaXNCdWlsZEVycm9yOnB9KSwoMCx5LmpzeCkoYWIse3N0YXRlOm8sZGlzcGF0Y2g6YSxnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsczppLHJ1bnRpbWVFcnJvcnM6bixlcnJvckNvdW50OnR9KV19KSl9KX19KV19KX12YXIgYVQ9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvc2VnbWVudC1leHBsb3Jlci10cmllLnRzXCIpO2Z1bmN0aW9uIGFSKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBhTihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gYVIoZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8YUQoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIGFEKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGFSKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIGFSKGUsbil9fXZhciBhQj1udWxsLGFNPVtdO2Z1bmN0aW9uIGFJKGUpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkobikscj0wO3I8bjtyKyspdFtyXT1hcmd1bWVudHNbcl07YUI/ZS5hcHBseSh2b2lkIDAsW2FCXS5jb25jYXQoYU4odCkpKTphTS5wdXNoKGZ1bmN0aW9uKG4pe2UuYXBwbHkodm9pZCAwLFtuXS5jb25jYXQoYU4odCkpKX0pfX12YXIgYUg9e29uQnVpbGRPazphSShmdW5jdGlvbihlKXtlKHt0eXBlOl99KX0pLG9uQnVpbGRFcnJvcjphSShmdW5jdGlvbihlLG4pe2Uoe3R5cGU6UCxtZXNzYWdlOm59KX0pLG9uQmVmb3JlUmVmcmVzaDphSShmdW5jdGlvbihlKXtlKHt0eXBlOnp9KX0pLG9uUmVmcmVzaDphSShmdW5jdGlvbihlKXtlKHt0eXBlOkx9KX0pLG9uVmVyc2lvbkluZm86YUkoZnVuY3Rpb24oZSxuKXtlKHt0eXBlOlQsdmVyc2lvbkluZm86bn0pfSksb25TdGF0aWNJbmRpY2F0b3I6YUkoZnVuY3Rpb24oZSxuKXtlKHt0eXBlOkUsc3RhdGljSW5kaWNhdG9yOm59KX0pLG9uRGVidWdJbmZvOmFJKGZ1bmN0aW9uKGUsbil7ZSh7dHlwZTpELGRlYnVnSW5mbzpufSl9KSxvbkRldkluZGljYXRvcjphSShmdW5jdGlvbihlLG4pe2Uoe3R5cGU6QixkZXZJbmRpY2F0b3I6bn0pfSksb25VbmhhbmRsZWRFcnJvcjphSShmdW5jdGlvbihlLG4pe2Uoe3R5cGU6UixyZWFzb246bn0pfSksb25VbmhhbmRsZWRSZWplY3Rpb246YUkoZnVuY3Rpb24oZSxuKXtlKHt0eXBlOk4scmVhc29uOm59KX0pLG9wZW5FcnJvck92ZXJsYXk6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTpNfSl9KSxjbG9zZUVycm9yT3ZlcmxheTphSShmdW5jdGlvbihlKXtlKHt0eXBlOkl9KX0pLHRvZ2dsZUVycm9yT3ZlcmxheTphSShmdW5jdGlvbihlKXtlKHt0eXBlOkh9KX0pLGJ1aWxkaW5nSW5kaWNhdG9ySGlkZTphSShmdW5jdGlvbihlKXtlKHt0eXBlOlV9KX0pLGJ1aWxkaW5nSW5kaWNhdG9yU2hvdzphSShmdW5jdGlvbihlKXtlKHt0eXBlOkZ9KX0pLHJlbmRlcmluZ0luZGljYXRvckhpZGU6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTpxfSl9KSxyZW5kZXJpbmdJbmRpY2F0b3JTaG93OmFJKGZ1bmN0aW9uKGUpe2Uoe3R5cGU6Vn0pfSksc2VnbWVudEV4cGxvcmVyTm9kZUFkZDphSShmdW5jdGlvbihlLG4peygwLGFULnRoKShuKX0pLHNlZ21lbnRFeHBsb3Jlck5vZGVSZW1vdmU6YUkoZnVuY3Rpb24oZSxuKXsoMCxhVC5fYykobil9KSxzZWdtZW50RXhwbG9yZXJVcGRhdGVSb3V0ZVN0YXRlOmFJKGZ1bmN0aW9uKGUsbil7ZSh7dHlwZTplZSxwYWdlOm59KX0pfTtmdW5jdGlvbiBhRihlKXt2YXIgbix0LHI9ZS5nZXRDb21wb25lbnRTdGFjayxvPWUuZ2V0T3duZXJTdGFjayxhPWUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsaT1lLmlzUmVjb3ZlcmFibGVFcnJvcixsPShuPWZ1bmN0aW9uKGUsbix0LHIpe3ZhciBvO2Z1bmN0aW9uIGEoZSxvLGEpe3ZhciBpLGw9bihhKSxzPXZvaWQgMD09PWw/dm9pZCAwOmZ1bmN0aW9uKGUpe3ZhciBuPVtdLHQ9ITAscj0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGk9ZS50cmltKCkuc3BsaXQoXCJcXG5cIilbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0oYT1pLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGw9YS52YWx1ZSxzPS9hdCAoW14gXSspKCBcXCgoLiopXFwpKT8vLmV4ZWMobCk7aWYobnVsbD09cz92b2lkIDA6c1sxXSl7dmFyIGM9c1sxXSx1PXNbM107aWYoIXUpe24ucHVzaCh7Y2FuT3BlbkluRWRpdG9yOiExLGNvbXBvbmVudDpjfSk7Y29udGludWV9aWYobnVsbD09dT92b2lkIDA6dS5pbmNsdWRlcyhcIm5leHQvZGlzdFwiKSlicmVhazt2YXIgZD1mdW5jdGlvbihlKXt2YXIgbix0LHIsbyxhPShyPWUpLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpP1wiZmlsZVwiOnIuaW5jbHVkZXMoXCJ3ZWJwYWNrLWludGVybmFsOi8vXCIpP1wid2VicGFjay1pbnRlcm5hbFwiOnIuc3RhcnRzV2l0aChcImh0dHA6Ly9cIil8fHIuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpP1wiaHR0cFwiOnIuc3RhcnRzV2l0aChcIi8vXCIpP1wicHJvdG9jb2wtcmVsYXRpdmVcIjpcInVua25vd25cIixpPW51bGw9PWU/dm9pZCAwOmUucmVwbGFjZSgvXih3ZWJwYWNrLWludGVybmFsOlxcL1xcL1xcL3xmaWxlOlxcL1xcLykoXFwoLipcXClcXC8pPy8sXCJcIiksbD0obj1udWxsIT0obz1udWxsPT1pP3ZvaWQgMDppLm1hdGNoKC9eKC4rKTooXFxkKyk6KFxcZCspLykpP286W10sdD00LGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sNCl8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHcoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gdyhlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSkscz1sWzFdLGM9bFsyXSx1PWxbM107c3dpdGNoKGEpe2Nhc2VcImZpbGVcIjpjYXNlXCJ3ZWJwYWNrLWludGVybmFsXCI6cmV0dXJue2Nhbk9wZW5JbkVkaXRvcjohMCxmaWxlOnMsbGluZU51bWJlcjpjP051bWJlcihjKTp2b2lkIDAsY29sdW1uOnU/TnVtYmVyKHUpOnZvaWQgMH07ZGVmYXVsdDpyZXR1cm57Y2FuT3BlbkluRWRpdG9yOiExfX19KHUpO24ucHVzaChmdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtjb21wb25lbnQ6Y30sZCkpfX19Y2F0Y2goZSl7cj0hMCxvPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09aS5yZXR1cm58fGkucmV0dXJuKCl9ZmluYWxseXtpZihyKXRocm93IG99fXJldHVybiBufShsKSxjPXQoYSksdT1mdW5jdGlvbihlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cHJvY2Vzcy5lbnYuX19ORVhUX0RJU1RfRElSO3JldHVybiBlPyhlPWUuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmluY2x1ZGVzKFwiKGV2YWwgXCIpJiYoZT1lLnJlcGxhY2UoL2V2YWwgY29kZS9nLFwiZXZhbFwiKS5yZXBsYWNlKC9cXChldmFsIGF0IFteKCldKiBcXCgvLFwiKGZpbGU6Ly9cIikucmVwbGFjZSgvXFwpLC4qJC9nLFwiKVwiKSksZX0pLmpvaW4oXCJcXG5cIiksKDAsai5wYXJzZSkoZSkubWFwKGZ1bmN0aW9uKGUpe3RyeXt2YXIgdD1uZXcgVVJMKGUuZmlsZSkscj1rLmV4ZWModC5wYXRobmFtZSk7aWYocil7dmFyIG8sYT1udWxsPT1ufHxudWxsPT0obz1uLnJlcGxhY2UoL1xcXFwvZyxcIi9cIikpP3ZvaWQgMDpvLnJlcGxhY2UoL1xcLyQvLFwiXCIpO2EmJihlLmZpbGU9XCJmaWxlOi8vXCIrYS5jb25jYXQoci5wb3AoKSkrdC5zZWFyY2gpfX1jYXRjaChlKXt9cmV0dXJuIGV9KSk6W119KChhLnN0YWNrfHxcIlwiKSsoY3x8XCJcIikpLGQ9e2lkOm8sZXJyb3I6YSxmcmFtZXM6dSxjb21wb25lbnRTdGFja0ZyYW1lczpzLHR5cGU6cihhKT9cInJlY292ZXJhYmxlXCI6KGk9YSkmJlwiTkVYVF9DT05TT0xFX0VSUk9SXCI9PT1pW0FdP1wiY29uc29sZVwiOlwicnVudGltZVwifSxmPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yLnN0YWNrIT09ZC5lcnJvci5zdGFjayYmZXQoZS5lcnJvci5zdGFjaykhPT1ldChkLmVycm9yLnN0YWNrKXx8dChlLmVycm9yKSE9PXQoZC5lcnJvcil9KTtyZXR1cm4gZi5sZW5ndGg9PT1lLmxlbmd0aD8oZi5wdXNoKGQpLGYpOmV9cmV0dXJuKDAseC51c2VSZWR1Y2VyKShmdW5jdGlvbihlLG4pe3N3aXRjaChuLnR5cGUpe2Nhc2UgRDpyZXR1cm4gQyhPKHt9LGUpLHtkZWJ1Z0luZm86bi5kZWJ1Z0luZm99KTtjYXNlIEU6cmV0dXJuIEMoTyh7fSxlKSx7c3RhdGljSW5kaWNhdG9yOm4uc3RhdGljSW5kaWNhdG9yfSk7Y2FzZSBfOnJldHVybiBDKE8oe30sZSkse2J1aWxkRXJyb3I6bnVsbH0pO2Nhc2UgUDpyZXR1cm4gQyhPKHt9LGUpLHtidWlsZEVycm9yOm4ubWVzc2FnZX0pO2Nhc2UgejpyZXR1cm4gQyhPKHt9LGUpLHtyZWZyZXNoU3RhdGU6e3R5cGU6XCJwZW5kaW5nXCIsZXJyb3JzOltdfX0pO2Nhc2UgTDpyZXR1cm4gQyhPKHt9LGUpLHtidWlsZEVycm9yOm51bGwsZXJyb3JzOlwicGVuZGluZ1wiPT09ZS5yZWZyZXNoU3RhdGUudHlwZT9lLnJlZnJlc2hTdGF0ZS5lcnJvcnM6W10scmVmcmVzaFN0YXRlOnt0eXBlOlwiaWRsZVwifX0pO2Nhc2UgUjpjYXNlIE46c3dpdGNoKGUucmVmcmVzaFN0YXRlLnR5cGUpe2Nhc2VcImlkbGVcIjpyZXR1cm4gQyhPKHt9LGUpLHtuZXh0SWQ6ZS5uZXh0SWQrMSxlcnJvcnM6YShlLmVycm9ycyxlLm5leHRJZCxuLnJlYXNvbil9KTtjYXNlXCJwZW5kaW5nXCI6cmV0dXJuIEMoTyh7fSxlKSx7bmV4dElkOmUubmV4dElkKzEscmVmcmVzaFN0YXRlOkMoTyh7fSxlLnJlZnJlc2hTdGF0ZSkse2Vycm9yczphKGUuZXJyb3JzLGUubmV4dElkLG4ucmVhc29uKX0pfSk7ZGVmYXVsdDpyZXR1cm4gZX1jYXNlIFQ6cmV0dXJuIEMoTyh7fSxlKSx7dmVyc2lvbkluZm86bi52ZXJzaW9uSW5mb30pO2Nhc2UgQjpyZXR1cm4gQyhPKHt9LGUpLHtzaG93SW5kaWNhdG9yOiEwLGRpc2FibGVEZXZJbmRpY2F0b3I6ZXJ8fCEhbi5kZXZJbmRpY2F0b3IuZGlzYWJsZWRVbnRpbH0pO2Nhc2UgTTpyZXR1cm4gQyhPKHt9LGUpLHtpc0Vycm9yT3ZlcmxheU9wZW46ITB9KTtjYXNlIEk6cmV0dXJuIEMoTyh7fSxlKSx7aXNFcnJvck92ZXJsYXlPcGVuOiExfSk7Y2FzZSBIOnJldHVybiBDKE8oe30sZSkse2lzRXJyb3JPdmVybGF5T3BlbjohZS5pc0Vycm9yT3ZlcmxheU9wZW59KTtjYXNlIEY6cmV0dXJuIEMoTyh7fSxlKSx7YnVpbGRpbmdJbmRpY2F0b3I6ITB9KTtjYXNlIFU6cmV0dXJuIEMoTyh7fSxlKSx7YnVpbGRpbmdJbmRpY2F0b3I6ITF9KTtjYXNlIFY6cmV0dXJuIEMoTyh7fSxlKSx7cmVuZGVyaW5nSW5kaWNhdG9yOiEwfSk7Y2FzZSBxOnJldHVybiBDKE8oe30sZSkse3JlbmRlcmluZ0luZGljYXRvcjohMX0pO2Nhc2UgVzpyZXR1cm4gQyhPKHt9LGUpLHtpc0RldlRvb2xzUGFuZWxPcGVuOiEwfSk7Y2FzZSAkOnJldHVybiBDKE8oe30sZSkse2lzRGV2VG9vbHNQYW5lbE9wZW46ITF9KTtjYXNlIFo6cmV0dXJuIEMoTyh7fSxlKSx7aXNEZXZUb29sc1BhbmVsT3BlbjohZS5pc0RldlRvb2xzUGFuZWxPcGVufSk7Y2FzZSBZOnJldHVybiBDKE8oe30sZSkse2RldlRvb2xzUG9zaXRpb246bi5kZXZUb29sc1Bvc2l0aW9ufSk7Y2FzZSBYOnJldHVybiBDKE8oe30sZSkse3NjYWxlOm4uc2NhbGV9KTtjYXNlIGVlOnJldHVybiBDKE8oe30sZSkse3BhZ2U6bi5wYWdlfSk7Y2FzZSBLOnJldHVybiBDKE8oe30sZSkse3Nob3dSZXN0YXJ0U2VydmVyQnV0dG9uOm4uc2hvd1Jlc3RhcnRTZXJ2ZXJCdXR0b259KTtkZWZhdWx0OnJldHVybiBlfX0sKG89ZSxDKE8oe30sZW8pLHtpc0Vycm9yT3ZlcmxheU9wZW46XCJwYWdlc1wiPT09byxyb3V0ZXJUeXBlOm99KSkpfShlLnJvdXRlclR5cGUscixvLGkpLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxhRChuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxzPWxbMF0sYz1sWzFdO3JldHVybigwLHgudXNlSW5zZXJ0aW9uRWZmZWN0KShmdW5jdGlvbigpe2FCPWM7dmFyIGU9c2V0VGltZW91dChmdW5jdGlvbigpeyFmdW5jdGlvbihlKXt0cnl7dmFyIG49ITAsdD0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9YU1bU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1hLm5leHQoKSkuZG9uZSk7bj0hMCkoMCxvLnZhbHVlKShlKX1jYXRjaChlKXt0PSEwLHI9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgcn19fWZpbmFsbHl7YU0ubGVuZ3RoPTB9fShjKX0pO3JldHVybiBmdW5jdGlvbigpe2FCPW51bGwsY2xlYXJUaW1lb3V0KGUpfX0sW10pLCgwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4KShlcyx7fSksKDAseS5qc3gpKGFMLHtzdGF0ZTpzLGRpc3BhdGNoOmMsZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6YX0pXX0pfXZhciBhVT0hMSxhVj0hMTtmdW5jdGlvbiBhcSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIGFXKGUsbix0KXtpZihhVSl0aHJvdyBFcnJvcihcIk5leHQgRGV2VG9vbHM6IFBhZ2VzIERldiBPdmVybGF5IGlzIGFscmVhZHkgbW91bnRlZC4gVGhpcyBpcyBhIGJ1ZyBpbiBOZXh0LmpzXCIpO2lmKCFhVil7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtyLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiLHIuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHIuc2V0QXR0cmlidXRlKFwiZGF0YS1uZXh0anMtZGV2LW92ZXJsYXlcIixcInRydWVcIik7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm5leHRqcy1wb3J0YWxcIik7ci5hcHBlbmRDaGlsZChvKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpO3ZhciBhPSgwLGVhLmNyZWF0ZVJvb3QpKG8se2lkZW50aWZpZXJQcmVmaXg6XCJuZHQtXCJ9KTsoMCx4LnN0YXJ0VHJhbnNpdGlvbikoZnVuY3Rpb24oKXthLnJlbmRlcigoMCx5LmpzeCkoYUYse2dldENvbXBvbmVudFN0YWNrOmUsZ2V0T3duZXJTdGFjazpuLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOmFxLGlzUmVjb3ZlcmFibGVFcnJvcjp0LHJvdXRlclR5cGU6XCJhcHBcIn0pKX0pLGFWPSEwfX1mdW5jdGlvbiBhJChlLG4sdCxyKXtpZihhVil0aHJvdyBFcnJvcihcIk5leHQgRGV2VG9vbHM6IEFwcCBEZXYgT3ZlcmxheSBpcyBhbHJlYWR5IG1vdW50ZWQuIFRoaXMgaXMgYSBidWcgaW4gTmV4dC5qc1wiKTtpZighYVUpe3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJuZXh0anMtcG9ydGFsXCIpO28uc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe3ZhciBuPSEwLHQ9ITEscj12b2lkIDA7dHJ5e2Zvcih2YXIgYSxpPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0oYT1pLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIGw9YS52YWx1ZTtpZihcImNoaWxkTGlzdFwiPT09bC50eXBlKXt2YXIgcz0hMCxjPSExLHU9dm9pZCAwO3RyeXtmb3IodmFyIGQsZj1sLnJlbW92ZWROb2Rlc1tTeW1ib2wuaXRlcmF0b3JdKCk7IShzPShkPWYubmV4dCgpKS5kb25lKTtzPSEwKWQudmFsdWU9PT1vJiZkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG8pfWNhdGNoKGUpe2M9ITAsdT1lfWZpbmFsbHl7dHJ5e3N8fG51bGw9PWYucmV0dXJufHxmLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyB1fX19fX1jYXRjaChlKXt0PSEwLHI9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1pLnJldHVybnx8aS5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgcn19fSkub2JzZXJ2ZShkb2N1bWVudC5ib2R5LHtjaGlsZExpc3Q6ITB9KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG8pO3ZhciBhPSgwLGVhLmNyZWF0ZVJvb3QpKG8pOygwLHguc3RhcnRUcmFuc2l0aW9uKShmdW5jdGlvbigpe2EucmVuZGVyKCgwLHkuanN4KShhRix7Z2V0Q29tcG9uZW50U3RhY2s6ZSxnZXRPd25lclN0YWNrOm4sZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6dCxpc1JlY292ZXJhYmxlRXJyb3I6cixyb3V0ZXJUeXBlOlwicGFnZXNcIn0pKX0pLGFVPSEwfX19KSgpLGV4cG9ydHMuZGlzcGF0Y2hlcj1fX3dlYnBhY2tfZXhwb3J0c19fLmRpc3BhdGNoZXIsZXhwb3J0cy5yZW5kZXJBcHBEZXZPdmVybGF5PV9fd2VicGFja19leHBvcnRzX18ucmVuZGVyQXBwRGV2T3ZlcmxheSxleHBvcnRzLnJlbmRlclBhZ2VzRGV2T3ZlcmxheT1fX3dlYnBhY2tfZXhwb3J0c19fLnJlbmRlclBhZ2VzRGV2T3ZlcmxheSxfX3dlYnBhY2tfZXhwb3J0c19fKS0xPT09W1wiZGlzcGF0Y2hlclwiLFwicmVuZGVyQXBwRGV2T3ZlcmxheVwiLFwicmVuZGVyUGFnZXNEZXZPdmVybGF5XCJdLmluZGV4T2YoX193ZWJwYWNrX2lfXykmJihleHBvcnRzW19fd2VicGFja19pX19dPV9fd2VicGFja19leHBvcnRzX19bX193ZWJwYWNrX2lfX10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/compiled/next-devtools/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js ***!
|
||
\******************************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\n true &&\n (function () {\n function typeOf(object) {\n if (\"object\" === typeof object && null !== object) {\n var $$typeof = object.$$typeof;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (((object = object.type), object)) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n case REACT_VIEW_TRANSITION_TYPE:\n return object;\n default:\n switch (((object = object && object.$$typeof), object)) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n }\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n exports.ContextConsumer = REACT_CONSUMER_TYPE;\n exports.ContextProvider = REACT_CONTEXT_TYPE;\n exports.Element = REACT_ELEMENT_TYPE;\n exports.ForwardRef = REACT_FORWARD_REF_TYPE;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Lazy = REACT_LAZY_TYPE;\n exports.Memo = REACT_MEMO_TYPE;\n exports.Portal = REACT_PORTAL_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n exports.isContextConsumer = function (object) {\n return typeOf(object) === REACT_CONSUMER_TYPE;\n };\n exports.isContextProvider = function (object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n };\n exports.isElement = function (object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n };\n exports.isForwardRef = function (object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n };\n exports.isFragment = function (object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n };\n exports.isLazy = function (object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n };\n exports.isMemo = function (object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n };\n exports.isPortal = function (object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n };\n exports.isProfiler = function (object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n };\n exports.isStrictMode = function (object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n };\n exports.isSuspense = function (object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n };\n exports.isSuspenseList = function (object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n };\n exports.isValidElementType = function (type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n };\n exports.typeOf = typeOf;\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTtBQUNiLEtBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx1QkFBdUI7QUFDM0IsSUFBSSx1QkFBdUI7QUFDM0IsSUFBSSxlQUFlO0FBQ25CLElBQUksa0JBQWtCO0FBQ3RCLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksWUFBWTtBQUNoQixJQUFJLFlBQVk7QUFDaEIsSUFBSSxjQUFjO0FBQ2xCLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksa0JBQWtCO0FBQ3RCLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksb0JBQW9CO0FBQ3hCLElBQUkseUJBQXlCO0FBQzdCO0FBQ0E7QUFDQSxJQUFJLHlCQUF5QjtBQUM3QjtBQUNBO0FBQ0EsSUFBSSxpQkFBaUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBLElBQUksa0JBQWtCO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLGNBQWM7QUFDbEI7QUFDQTtBQUNBLElBQUksY0FBYztBQUNsQjtBQUNBO0FBQ0EsSUFBSSxnQkFBZ0I7QUFDcEI7QUFDQTtBQUNBLElBQUksa0JBQWtCO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLG9CQUFvQjtBQUN4QjtBQUNBO0FBQ0EsSUFBSSxrQkFBa0I7QUFDdEI7QUFDQTtBQUNBLElBQUksc0JBQXNCO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLDBCQUEwQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksY0FBYztBQUNsQixHQUFHIiwic291cmNlcyI6WyJEOlxcZG9uZ3l1bi1wcm9qZWN0c1xcdHdvXFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXGNvbXBpbGVkXFxyZWFjdC1pc1xcY2pzXFxyZWFjdC1pcy5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9iamVjdCAmJiBudWxsICE9PSBvYmplY3QpIHtcbiAgICAgICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICBzd2l0Y2ggKCgob2JqZWN0ID0gb2JqZWN0LnR5cGUpLCBvYmplY3QpKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfVklFV19UUkFOU0lUSU9OX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKCgob2JqZWN0ID0gb2JqZWN0ICYmIG9iamVjdC4kJHR5cGVvZiksIG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICAgIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gICAgICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICAgICAgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgICAgIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgICAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICAgIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICAgICAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gICAgICBSRUFDVF9WSUVXX1RSQU5TSVRJT05fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC52aWV3X3RyYW5zaXRpb25cIiksXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIik7XG4gICAgZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05TVU1FUl9UWVBFO1xuICAgIGV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xuICAgIGV4cG9ydHMuRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgICBleHBvcnRzLkZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xuICAgIGV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuICAgIGV4cG9ydHMuTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbiAgICBleHBvcnRzLk1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG4gICAgZXhwb3J0cy5Qb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbiAgICBleHBvcnRzLlByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgICBleHBvcnRzLlN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuICAgIGV4cG9ydHMuU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICAgIGV4cG9ydHMuU3VzcGVuc2VMaXN0ID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICAgIGV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlNVTUVSX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzRWxlbWVudCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcbiAgICAgICAgbnVsbCAhPT0gb2JqZWN0ICYmXG4gICAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICApO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzRnJhZ21lbnQgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzTGF6eSA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc01lbW8gPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNQb3J0YWwgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc1Byb2ZpbGVyID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzU3VzcGVuc2UgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzU3VzcGVuc2VMaXN0ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUgfHxcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fFxuICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8XG4gICAgICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlNVTUVSX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgfHxcbiAgICAgICAgICAgIHZvaWQgMCAhPT0gdHlwZS5nZXRNb2R1bGVJZCkpXG4gICAgICAgID8gITBcbiAgICAgICAgOiAhMTtcbiAgICB9O1xuICAgIGV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/compiled/react-is/index.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-is/index.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"(pages-dir-browser)/./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLHVLQUF5RDtBQUMzRCIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxjb21waWxlZFxccmVhY3QtaXNcXGluZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/compiled/react-is/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/compiled/safe-stable-stringify/index.js":
|
||
/*!************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/safe-stable-stringify/index.js ***!
|
||
\************************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){\"use strict\";var e={879:function(e,t){const{hasOwnProperty:n}=Object.prototype;const r=configure();r.configure=configure;r.stringify=r;r.default=r;t.stringify=r;t.configure=configure;e.exports=r;const i=/[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/;function strEscape(e){if(e.length<5e3&&!i.test(e)){return`\"${e}\"`}return JSON.stringify(e)}function sort(e,t){if(e.length>200||t){return e.sort(t)}for(let t=1;t<e.length;t++){const n=e[t];let r=t;while(r!==0&&e[r-1]>n){e[r]=e[r-1];r--}e[r]=n}return e}const f=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function isTypedArrayWithEntries(e){return f.call(e)!==undefined&&e.length!==0}function stringifyTypedArray(e,t,n){if(e.length<n){n=e.length}const r=t===\",\"?\"\":\" \";let i=`\"0\":${r}${e[0]}`;for(let f=1;f<n;f++){i+=`${t}\"${f}\":${r}${e[f]}`}return i}function getCircularValueOption(e){if(n.call(e,\"circularValue\")){const t=e.circularValue;if(typeof t===\"string\"){return`\"${t}\"`}if(t==null){return t}if(t===Error||t===TypeError){return{toString(){throw new TypeError(\"Converting circular structure to JSON\")}}}throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')}return'\"[Circular]\"'}function getDeterministicOption(e){let t;if(n.call(e,\"deterministic\")){t=e.deterministic;if(typeof t!==\"boolean\"&&typeof t!==\"function\"){throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')}}return t===undefined?true:t}function getBooleanOption(e,t){let r;if(n.call(e,t)){r=e[t];if(typeof r!==\"boolean\"){throw new TypeError(`The \"${t}\" argument must be of type boolean`)}}return r===undefined?true:r}function getPositiveIntegerOption(e,t){let r;if(n.call(e,t)){r=e[t];if(typeof r!==\"number\"){throw new TypeError(`The \"${t}\" argument must be of type number`)}if(!Number.isInteger(r)){throw new TypeError(`The \"${t}\" argument must be an integer`)}if(r<1){throw new RangeError(`The \"${t}\" argument must be >= 1`)}}return r===undefined?Infinity:r}function getItemCount(e){if(e===1){return\"1 item\"}return`${e} items`}function getUniqueReplacerSet(e){const t=new Set;for(const n of e){if(typeof n===\"string\"||typeof n===\"number\"){t.add(String(n))}}return t}function getStrictOption(e){if(n.call(e,\"strict\")){const t=e.strict;if(typeof t!==\"boolean\"){throw new TypeError('The \"strict\" argument must be of type boolean')}if(t){return e=>{let t=`Object can not safely be stringified. Received type ${typeof e}`;if(typeof e!==\"function\")t+=` (${e.toString()})`;throw new Error(t)}}}}function configure(e){e={...e};const t=getStrictOption(e);if(t){if(e.bigint===undefined){e.bigint=false}if(!(\"circularValue\"in e)){e.circularValue=Error}}const n=getCircularValueOption(e);const r=getBooleanOption(e,\"bigint\");const i=getDeterministicOption(e);const f=typeof i===\"function\"?i:undefined;const u=getPositiveIntegerOption(e,\"maximumDepth\");const o=getPositiveIntegerOption(e,\"maximumBreadth\");function stringifyFnReplacer(e,s,l,c,a,g){let p=s[e];if(typeof p===\"object\"&&p!==null&&typeof p.toJSON===\"function\"){p=p.toJSON(e)}p=c.call(s,e,p);switch(typeof p){case\"string\":return strEscape(p);case\"object\":{if(p===null){return\"null\"}if(l.indexOf(p)!==-1){return n}let e=\"\";let t=\",\";const r=g;if(Array.isArray(p)){if(p.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(p);if(a!==\"\"){g+=a;e+=`\\n${g}`;t=`,\\n${g}`}const n=Math.min(p.length,o);let i=0;for(;i<n-1;i++){const n=stringifyFnReplacer(String(i),p,l,c,a,g);e+=n!==undefined?n:\"null\";e+=t}const f=stringifyFnReplacer(String(i),p,l,c,a,g);e+=f!==undefined?f:\"null\";if(p.length-1>o){const n=p.length-o-1;e+=`${t}\"... ${getItemCount(n)} not stringified\"`}if(a!==\"\"){e+=`\\n${r}`}l.pop();return`[${e}]`}let s=Object.keys(p);const y=s.length;if(y===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}let d=\"\";let h=\"\";if(a!==\"\"){g+=a;t=`,\\n${g}`;d=\" \"}const $=Math.min(y,o);if(i&&!isTypedArrayWithEntries(p)){s=sort(s,f)}l.push(p);for(let n=0;n<$;n++){const r=s[n];const i=stringifyFnReplacer(r,p,l,c,a,g);if(i!==undefined){e+=`${h}${strEscape(r)}:${d}${i}`;h=t}}if(y>o){const n=y-o;e+=`${h}\"...\":${d}\"${getItemCount(n)} not stringified\"`;h=t}if(a!==\"\"&&h.length>1){e=`\\n${g}${e}\\n${r}`}l.pop();return`{${e}}`}case\"number\":return isFinite(p)?String(p):t?t(p):\"null\";case\"boolean\":return p===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(p)}default:return t?t(p):undefined}}function stringifyArrayReplacer(e,i,f,s,l,c){if(typeof i===\"object\"&&i!==null&&typeof i.toJSON===\"function\"){i=i.toJSON(e)}switch(typeof i){case\"string\":return strEscape(i);case\"object\":{if(i===null){return\"null\"}if(f.indexOf(i)!==-1){return n}const e=c;let t=\"\";let r=\",\";if(Array.isArray(i)){if(i.length===0){return\"[]\"}if(u<f.length+1){return'\"[Array]\"'}f.push(i);if(l!==\"\"){c+=l;t+=`\\n${c}`;r=`,\\n${c}`}const n=Math.min(i.length,o);let a=0;for(;a<n-1;a++){const e=stringifyArrayReplacer(String(a),i[a],f,s,l,c);t+=e!==undefined?e:\"null\";t+=r}const g=stringifyArrayReplacer(String(a),i[a],f,s,l,c);t+=g!==undefined?g:\"null\";if(i.length-1>o){const e=i.length-o-1;t+=`${r}\"... ${getItemCount(e)} not stringified\"`}if(l!==\"\"){t+=`\\n${e}`}f.pop();return`[${t}]`}f.push(i);let a=\"\";if(l!==\"\"){c+=l;r=`,\\n${c}`;a=\" \"}let g=\"\";for(const e of s){const n=stringifyArrayReplacer(e,i[e],f,s,l,c);if(n!==undefined){t+=`${g}${strEscape(e)}:${a}${n}`;g=r}}if(l!==\"\"&&g.length>1){t=`\\n${c}${t}\\n${e}`}f.pop();return`{${t}}`}case\"number\":return isFinite(i)?String(i):t?t(i):\"null\";case\"boolean\":return i===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(i)}default:return t?t(i):undefined}}function stringifyIndent(e,s,l,c,a){switch(typeof s){case\"string\":return strEscape(s);case\"object\":{if(s===null){return\"null\"}if(typeof s.toJSON===\"function\"){s=s.toJSON(e);if(typeof s!==\"object\"){return stringifyIndent(e,s,l,c,a)}if(s===null){return\"null\"}}if(l.indexOf(s)!==-1){return n}const t=a;if(Array.isArray(s)){if(s.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(s);a+=c;let e=`\\n${a}`;const n=`,\\n${a}`;const r=Math.min(s.length,o);let i=0;for(;i<r-1;i++){const t=stringifyIndent(String(i),s[i],l,c,a);e+=t!==undefined?t:\"null\";e+=n}const f=stringifyIndent(String(i),s[i],l,c,a);e+=f!==undefined?f:\"null\";if(s.length-1>o){const t=s.length-o-1;e+=`${n}\"... ${getItemCount(t)} not stringified\"`}e+=`\\n${t}`;l.pop();return`[${e}]`}let r=Object.keys(s);const g=r.length;if(g===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}a+=c;const p=`,\\n${a}`;let y=\"\";let d=\"\";let h=Math.min(g,o);if(isTypedArrayWithEntries(s)){y+=stringifyTypedArray(s,p,o);r=r.slice(s.length);h-=s.length;d=p}if(i){r=sort(r,f)}l.push(s);for(let e=0;e<h;e++){const t=r[e];const n=stringifyIndent(t,s[t],l,c,a);if(n!==undefined){y+=`${d}${strEscape(t)}: ${n}`;d=p}}if(g>o){const e=g-o;y+=`${d}\"...\": \"${getItemCount(e)} not stringified\"`;d=p}if(d!==\"\"){y=`\\n${a}${y}\\n${t}`}l.pop();return`{${y}}`}case\"number\":return isFinite(s)?String(s):t?t(s):\"null\";case\"boolean\":return s===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(s)}default:return t?t(s):undefined}}function stringifySimple(e,s,l){switch(typeof s){case\"string\":return strEscape(s);case\"object\":{if(s===null){return\"null\"}if(typeof s.toJSON===\"function\"){s=s.toJSON(e);if(typeof s!==\"object\"){return stringifySimple(e,s,l)}if(s===null){return\"null\"}}if(l.indexOf(s)!==-1){return n}let t=\"\";const r=s.length!==undefined;if(r&&Array.isArray(s)){if(s.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(s);const e=Math.min(s.length,o);let n=0;for(;n<e-1;n++){const e=stringifySimple(String(n),s[n],l);t+=e!==undefined?e:\"null\";t+=\",\"}const r=stringifySimple(String(n),s[n],l);t+=r!==undefined?r:\"null\";if(s.length-1>o){const e=s.length-o-1;t+=`,\"... ${getItemCount(e)} not stringified\"`}l.pop();return`[${t}]`}let c=Object.keys(s);const a=c.length;if(a===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}let g=\"\";let p=Math.min(a,o);if(r&&isTypedArrayWithEntries(s)){t+=stringifyTypedArray(s,\",\",o);c=c.slice(s.length);p-=s.length;g=\",\"}if(i){c=sort(c,f)}l.push(s);for(let e=0;e<p;e++){const n=c[e];const r=stringifySimple(n,s[n],l);if(r!==undefined){t+=`${g}${strEscape(n)}:${r}`;g=\",\"}}if(a>o){const e=a-o;t+=`${g}\"...\":\"${getItemCount(e)} not stringified\"`}l.pop();return`{${t}}`}case\"number\":return isFinite(s)?String(s):t?t(s):\"null\";case\"boolean\":return s===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(s)}default:return t?t(s):undefined}}function stringify(e,t,n){if(arguments.length>1){let r=\"\";if(typeof n===\"number\"){r=\" \".repeat(Math.min(n,10))}else if(typeof n===\"string\"){r=n.slice(0,10)}if(t!=null){if(typeof t===\"function\"){return stringifyFnReplacer(\"\",{\"\":e},[],t,r,\"\")}if(Array.isArray(t)){return stringifyArrayReplacer(\"\",e,[],getUniqueReplacerSet(t),r,\"\")}}if(r.length!==0){return stringifyIndent(\"\",e,[],r,\"\")}}return stringifySimple(\"\",e,[])}return stringify}}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var i=t[n]={exports:{}};var f=true;try{e[n](i,i.exports,__nccwpck_require__);f=false}finally{if(f)delete t[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n=__nccwpck_require__(879);module.exports=n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc2FmZS1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLGFBQWEsT0FBTyxrQkFBa0IsTUFBTSxpQkFBaUIsa0JBQWtCLG9CQUFvQixzQkFBc0IsY0FBYyxZQUFZLGNBQWMsc0JBQXNCLFlBQVksbURBQW1ELHNCQUFzQiw2QkFBNkIsVUFBVSxFQUFFLEdBQUcseUJBQXlCLG1CQUFtQixvQkFBb0IsaUJBQWlCLFlBQVksV0FBVyxLQUFLLGFBQWEsUUFBUSx1QkFBdUIsWUFBWSxJQUFJLE9BQU8sU0FBUyw0SEFBNEgsb0NBQW9DLDJDQUEyQyxvQ0FBb0MsZUFBZSxXQUFXLHVCQUF1QixhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxJQUFJLEtBQUssTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxtQ0FBbUMsOEJBQThCLHdCQUF3Qix3QkFBd0IsVUFBVSxFQUFFLEdBQUcsWUFBWSxTQUFTLDZCQUE2QixPQUFPLFdBQVcsK0RBQStELDBHQUEwRyxxQkFBcUIsbUNBQW1DLE1BQU0sOEJBQThCLGtCQUFrQixnREFBZ0Qsb0dBQW9HLDRCQUE0QiwrQkFBK0IsTUFBTSxnQkFBZ0IsT0FBTyx5QkFBeUIsNEJBQTRCLEVBQUUsc0NBQXNDLDRCQUE0Qix1Q0FBdUMsTUFBTSxnQkFBZ0IsT0FBTyx3QkFBd0IsNEJBQTRCLEVBQUUsb0NBQW9DLHlCQUF5Qiw0QkFBNEIsRUFBRSxnQ0FBZ0MsUUFBUSw2QkFBNkIsRUFBRSwyQkFBMkIsZ0NBQWdDLHlCQUF5QixVQUFVLGVBQWUsU0FBUyxHQUFHLE9BQU8saUNBQWlDLGdCQUFnQixrQkFBa0IsNkNBQTZDLGtCQUFrQixTQUFTLDRCQUE0Qix1QkFBdUIsaUJBQWlCLHlCQUF5QixxRUFBcUUsTUFBTSxXQUFXLDZEQUE2RCxTQUFTLEVBQUUsaUNBQWlD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LGlCQUFpQiIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxjb21waWxlZFxcc2FmZS1zdGFibGUtc3RyaW5naWZ5XFxpbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgZT17ODc5OmZ1bmN0aW9uKGUsdCl7Y29uc3R7aGFzT3duUHJvcGVydHk6bn09T2JqZWN0LnByb3RvdHlwZTtjb25zdCByPWNvbmZpZ3VyZSgpO3IuY29uZmlndXJlPWNvbmZpZ3VyZTtyLnN0cmluZ2lmeT1yO3IuZGVmYXVsdD1yO3Quc3RyaW5naWZ5PXI7dC5jb25maWd1cmU9Y29uZmlndXJlO2UuZXhwb3J0cz1yO2NvbnN0IGk9L1tcXHUwMDAwLVxcdTAwMWZcXHUwMDIyXFx1MDA1Y1xcdWQ4MDAtXFx1ZGZmZl0vO2Z1bmN0aW9uIHN0ckVzY2FwZShlKXtpZihlLmxlbmd0aDw1ZTMmJiFpLnRlc3QoZSkpe3JldHVybmBcIiR7ZX1cImB9cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIHNvcnQoZSx0KXtpZihlLmxlbmd0aD4yMDB8fHQpe3JldHVybiBlLnNvcnQodCl9Zm9yKGxldCB0PTE7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG49ZVt0XTtsZXQgcj10O3doaWxlKHIhPT0wJiZlW3ItMV0+bil7ZVtyXT1lW3ItMV07ci0tfWVbcl09bn1yZXR1cm4gZX1jb25zdCBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgSW50OEFycmF5KSksU3ltYm9sLnRvU3RyaW5nVGFnKS5nZXQ7ZnVuY3Rpb24gaXNUeXBlZEFycmF5V2l0aEVudHJpZXMoZSl7cmV0dXJuIGYuY2FsbChlKSE9PXVuZGVmaW5lZCYmZS5sZW5ndGghPT0wfWZ1bmN0aW9uIHN0cmluZ2lmeVR5cGVkQXJyYXkoZSx0LG4pe2lmKGUubGVuZ3RoPG4pe249ZS5sZW5ndGh9Y29uc3Qgcj10PT09XCIsXCI/XCJcIjpcIiBcIjtsZXQgaT1gXCIwXCI6JHtyfSR7ZVswXX1gO2ZvcihsZXQgZj0xO2Y8bjtmKyspe2krPWAke3R9XCIke2Z9XCI6JHtyfSR7ZVtmXX1gfXJldHVybiBpfWZ1bmN0aW9uIGdldENpcmN1bGFyVmFsdWVPcHRpb24oZSl7aWYobi5jYWxsKGUsXCJjaXJjdWxhclZhbHVlXCIpKXtjb25zdCB0PWUuY2lyY3VsYXJWYWx1ZTtpZih0eXBlb2YgdD09PVwic3RyaW5nXCIpe3JldHVybmBcIiR7dH1cImB9aWYodD09bnVsbCl7cmV0dXJuIHR9aWYodD09PUVycm9yfHx0PT09VHlwZUVycm9yKXtyZXR1cm57dG9TdHJpbmcoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTlwiKX19fXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNpcmN1bGFyVmFsdWVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIHRoZSB2YWx1ZSBudWxsIG9yIHVuZGVmaW5lZCcpfXJldHVybidcIltDaXJjdWxhcl1cIid9ZnVuY3Rpb24gZ2V0RGV0ZXJtaW5pc3RpY09wdGlvbihlKXtsZXQgdDtpZihuLmNhbGwoZSxcImRldGVybWluaXN0aWNcIikpe3Q9ZS5kZXRlcm1pbmlzdGljO2lmKHR5cGVvZiB0IT09XCJib29sZWFuXCImJnR5cGVvZiB0IT09XCJmdW5jdGlvblwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJkZXRlcm1pbmlzdGljXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgY29tcGFyYXRvciBmdW5jdGlvbicpfX1yZXR1cm4gdD09PXVuZGVmaW5lZD90cnVlOnR9ZnVuY3Rpb24gZ2V0Qm9vbGVhbk9wdGlvbihlLHQpe2xldCByO2lmKG4uY2FsbChlLHQpKXtyPWVbdF07aWYodHlwZW9mIHIhPT1cImJvb2xlYW5cIil7dGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHt0fVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBib29sZWFuYCl9fXJldHVybiByPT09dW5kZWZpbmVkP3RydWU6cn1mdW5jdGlvbiBnZXRQb3NpdGl2ZUludGVnZXJPcHRpb24oZSx0KXtsZXQgcjtpZihuLmNhbGwoZSx0KSl7cj1lW3RdO2lmKHR5cGVvZiByIT09XCJudW1iZXJcIil7dGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHt0fVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXJgKX1pZighTnVtYmVyLmlzSW50ZWdlcihyKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHt0fVwiIGFyZ3VtZW50IG11c3QgYmUgYW4gaW50ZWdlcmApfWlmKHI8MSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBcIiR7dH1cIiBhcmd1bWVudCBtdXN0IGJlID49IDFgKX19cmV0dXJuIHI9PT11bmRlZmluZWQ/SW5maW5pdHk6cn1mdW5jdGlvbiBnZXRJdGVtQ291bnQoZSl7aWYoZT09PTEpe3JldHVyblwiMSBpdGVtXCJ9cmV0dXJuYCR7ZX0gaXRlbXNgfWZ1bmN0aW9uIGdldFVuaXF1ZVJlcGxhY2VyU2V0KGUpe2NvbnN0IHQ9bmV3IFNldDtmb3IoY29uc3QgbiBvZiBlKXtpZih0eXBlb2Ygbj09PVwic3RyaW5nXCJ8fHR5cGVvZiBuPT09XCJudW1iZXJcIil7dC5hZGQoU3RyaW5nKG4pKX19cmV0dXJuIHR9ZnVuY3Rpb24gZ2V0U3RyaWN0T3B0aW9uKGUpe2lmKG4uY2FsbChlLFwic3RyaWN0XCIpKXtjb25zdCB0PWUuc3RyaWN0O2lmKHR5cGVvZiB0IT09XCJib29sZWFuXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmljdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBib29sZWFuJyl9aWYodCl7cmV0dXJuIGU9PntsZXQgdD1gT2JqZWN0IGNhbiBub3Qgc2FmZWx5IGJlIHN0cmluZ2lmaWVkLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGV9YDtpZih0eXBlb2YgZSE9PVwiZnVuY3Rpb25cIil0Kz1gICgke2UudG9TdHJpbmcoKX0pYDt0aHJvdyBuZXcgRXJyb3IodCl9fX19ZnVuY3Rpb24gY29uZmlndXJlKGUpe2U9ey4uLmV9O2NvbnN0IHQ9Z2V0U3RyaWN0T3B0aW9uKGUpO2lmKHQpe2lmKGUuYmlnaW50PT09dW5kZWZpbmVkKXtlLmJpZ2ludD1mYWxzZX1pZighKFwiY2lyY3VsYXJWYWx1ZVwiaW4gZSkpe2UuY2lyY3VsYXJWYWx1ZT1FcnJvcn19Y29uc3Qgbj1nZXRDaXJjdWxhclZhbHVlT3B0aW9uKGUpO2NvbnN0IHI9Z2V0Qm9vbGVhbk9wdGlvbihlLFwiYmlnaW50XCIpO2NvbnN0IGk9Z2V0RGV0ZXJtaW5pc3RpY09wdGlvbihlKTtjb25zdCBmPXR5cGVvZiBpPT09XCJmdW5jdGlvblwiP2k6dW5kZWZpbmVkO2NvbnN0IHU9Z2V0UG9zaXRpdmVJbnRlZ2VyT3B0aW9uKGUsXCJtYXhpbXVtRGVwdGhcIik7Y29uc3Qgbz1nZXRQb3NpdGl2ZUludGVnZXJPcHRpb24oZSxcIm1heGltdW1CcmVhZHRoXCIpO2Z1bmN0aW9uIHN0cmluZ2lmeUZuUmVwbGFjZXIoZSxzLGwsYyxhLGcpe2xldCBwPXNbZV07aWYodHlwZW9mIHA9PT1cIm9iamVjdFwiJiZwIT09bnVsbCYmdHlwZW9mIHAudG9KU09OPT09XCJmdW5jdGlvblwiKXtwPXAudG9KU09OKGUpfXA9Yy5jYWxsKHMsZSxwKTtzd2l0Y2godHlwZW9mIHApe2Nhc2VcInN0cmluZ1wiOnJldHVybiBzdHJFc2NhcGUocCk7Y2FzZVwib2JqZWN0XCI6e2lmKHA9PT1udWxsKXtyZXR1cm5cIm51bGxcIn1pZihsLmluZGV4T2YocCkhPT0tMSl7cmV0dXJuIG59bGV0IGU9XCJcIjtsZXQgdD1cIixcIjtjb25zdCByPWc7aWYoQXJyYXkuaXNBcnJheShwKSl7aWYocC5sZW5ndGg9PT0wKXtyZXR1cm5cIltdXCJ9aWYodTxsLmxlbmd0aCsxKXtyZXR1cm4nXCJbQXJyYXldXCInfWwucHVzaChwKTtpZihhIT09XCJcIil7Zys9YTtlKz1gXFxuJHtnfWA7dD1gLFxcbiR7Z31gfWNvbnN0IG49TWF0aC5taW4ocC5sZW5ndGgsbyk7bGV0IGk9MDtmb3IoO2k8bi0xO2krKyl7Y29uc3Qgbj1zdHJpbmdpZnlGblJlcGxhY2VyKFN0cmluZyhpKSxwLGwsYyxhLGcpO2UrPW4hPT11bmRlZmluZWQ/bjpcIm51bGxcIjtlKz10fWNvbnN0IGY9c3RyaW5naWZ5Rm5SZXBsYWNlcihTdHJpbmcoaSkscCxsLGMsYSxnKTtlKz1mIT09dW5kZWZpbmVkP2Y6XCJudWxsXCI7aWYocC5sZW5ndGgtMT5vKXtjb25zdCBuPXAubGVuZ3RoLW8tMTtlKz1gJHt0fVwiLi4uICR7Z2V0SXRlbUNvdW50KG4pfSBub3Qgc3RyaW5naWZpZWRcImB9aWYoYSE9PVwiXCIpe2UrPWBcXG4ke3J9YH1sLnBvcCgpO3JldHVybmBbJHtlfV1gfWxldCBzPU9iamVjdC5rZXlzKHApO2NvbnN0IHk9cy5sZW5ndGg7aWYoeT09PTApe3JldHVyblwie31cIn1pZih1PGwubGVuZ3RoKzEpe3JldHVybidcIltPYmplY3RdXCInfWxldCBkPVwiXCI7bGV0IGg9XCJcIjtpZihhIT09XCJcIil7Zys9YTt0PWAsXFxuJHtnfWA7ZD1cIiBcIn1jb25zdCAkPU1hdGgubWluKHksbyk7aWYoaSYmIWlzVHlwZWRBcnJheVdpdGhFbnRyaWVzKHApKXtzPXNvcnQocyxmKX1sLnB1c2gocCk7Zm9yKGxldCBuPTA7bjwkO24rKyl7Y29uc3Qgcj1zW25dO2NvbnN0IGk9c3RyaW5naWZ5Rm5SZXBsYWNlcihyLHAsbCxjLGEsZyk7aWYoaSE9PXVuZGVmaW5lZCl7ZSs9YCR7aH0ke3N0ckVzY2FwZShyKX06JHtkfSR7aX1gO2g9dH19aWYoeT5vKXtjb25zdCBuPXktbztlKz1gJHtofVwiLi4uXCI6JHtkfVwiJHtnZXRJdGVtQ291bnQobil9IG5vdCBzdHJpbmdpZmllZFwiYDtoPXR9aWYoYSE9PVwiXCImJmgubGVuZ3RoPjEpe2U9YFxcbiR7Z30ke2V9XFxuJHtyfWB9bC5wb3AoKTtyZXR1cm5geyR7ZX19YH1jYXNlXCJudW1iZXJcIjpyZXR1cm4gaXNGaW5pdGUocCk/U3RyaW5nKHApOnQ/dChwKTpcIm51bGxcIjtjYXNlXCJib29sZWFuXCI6cmV0dXJuIHA9PT10cnVlP1widHJ1ZVwiOlwiZmFsc2VcIjtjYXNlXCJ1bmRlZmluZWRcIjpyZXR1cm4gdW5kZWZpbmVkO2Nhc2VcImJpZ2ludFwiOmlmKHIpe3JldHVybiBTdHJpbmcocCl9ZGVmYXVsdDpyZXR1cm4gdD90KHApOnVuZGVmaW5lZH19ZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXlSZXBsYWNlcihlLGksZixzLGwsYyl7aWYodHlwZW9mIGk9PT1cIm9iamVjdFwiJiZpIT09bnVsbCYmdHlwZW9mIGkudG9KU09OPT09XCJmdW5jdGlvblwiKXtpPWkudG9KU09OKGUpfXN3aXRjaCh0eXBlb2YgaSl7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIHN0ckVzY2FwZShpKTtjYXNlXCJvYmplY3RcIjp7aWYoaT09PW51bGwpe3JldHVyblwibnVsbFwifWlmKGYuaW5kZXhPZihpKSE9PS0xKXtyZXR1cm4gbn1jb25zdCBlPWM7bGV0IHQ9XCJcIjtsZXQgcj1cIixcIjtpZihBcnJheS5pc0FycmF5KGkpKXtpZihpLmxlbmd0aD09PTApe3JldHVyblwiW11cIn1pZih1PGYubGVuZ3RoKzEpe3JldHVybidcIltBcnJheV1cIid9Zi5wdXNoKGkpO2lmKGwhPT1cIlwiKXtjKz1sO3QrPWBcXG4ke2N9YDtyPWAsXFxuJHtjfWB9Y29uc3Qgbj1NYXRoLm1pbihpLmxlbmd0aCxvKTtsZXQgYT0wO2Zvcig7YTxuLTE7YSsrKXtjb25zdCBlPXN0cmluZ2lmeUFycmF5UmVwbGFjZXIoU3RyaW5nKGEpLGlbYV0sZixzLGwsYyk7dCs9ZSE9PXVuZGVmaW5lZD9lOlwibnVsbFwiO3QrPXJ9Y29uc3QgZz1zdHJpbmdpZnlBcnJheVJlcGxhY2VyKFN0cmluZyhhKSxpW2FdLGYscyxsLGMpO3QrPWchPT11bmRlZmluZWQ/ZzpcIm51bGxcIjtpZihpLmxlbmd0aC0xPm8pe2NvbnN0IGU9aS5sZW5ndGgtby0xO3QrPWAke3J9XCIuLi4gJHtnZXRJdGVtQ291bnQoZSl9IG5vdCBzdHJpbmdpZmllZFwiYH1pZihsIT09XCJcIil7dCs9YFxcbiR7ZX1gfWYucG9wKCk7cmV0dXJuYFske3R9XWB9Zi5wdXNoKGkpO2xldCBhPVwiXCI7aWYobCE9PVwiXCIpe2MrPWw7cj1gLFxcbiR7Y31gO2E9XCIgXCJ9bGV0IGc9XCJcIjtmb3IoY29uc3QgZSBvZiBzKXtjb25zdCBuPXN0cmluZ2lmeUFycmF5UmVwbGFjZXIoZSxpW2VdLGYscyxsLGMpO2lmKG4hPT11bmRlZmluZWQpe3QrPWAke2d9JHtzdHJFc2NhcGUoZSl9OiR7YX0ke259YDtnPXJ9fWlmKGwhPT1cIlwiJiZnLmxlbmd0aD4xKXt0PWBcXG4ke2N9JHt0fVxcbiR7ZX1gfWYucG9wKCk7cmV0dXJuYHske3R9fWB9Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzRmluaXRlKGkpP1N0cmluZyhpKTp0P3QoaSk6XCJudWxsXCI7Y2FzZVwiYm9vbGVhblwiOnJldHVybiBpPT09dHJ1ZT9cInRydWVcIjpcImZhbHNlXCI7Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIHVuZGVmaW5lZDtjYXNlXCJiaWdpbnRcIjppZihyKXtyZXR1cm4gU3RyaW5nKGkpfWRlZmF1bHQ6cmV0dXJuIHQ/dChpKTp1bmRlZmluZWR9fWZ1bmN0aW9uIHN0cmluZ2lmeUluZGVudChlLHMsbCxjLGEpe3N3aXRjaCh0eXBlb2Ygcyl7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIHN0ckVzY2FwZShzKTtjYXNlXCJvYmplY3RcIjp7aWYocz09PW51bGwpe3JldHVyblwibnVsbFwifWlmKHR5cGVvZiBzLnRvSlNPTj09PVwiZnVuY3Rpb25cIil7cz1zLnRvSlNPTihlKTtpZih0eXBlb2YgcyE9PVwib2JqZWN0XCIpe3JldHVybiBzdHJpbmdpZnlJbmRlbnQoZSxzLGwsYyxhKX1pZihzPT09bnVsbCl7cmV0dXJuXCJudWxsXCJ9fWlmKGwuaW5kZXhPZihzKSE9PS0xKXtyZXR1cm4gbn1jb25zdCB0PWE7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYocy5sZW5ndGg9PT0wKXtyZXR1cm5cIltdXCJ9aWYodTxsLmxlbmd0aCsxKXtyZXR1cm4nXCJbQXJyYXldXCInfWwucHVzaChzKTthKz1jO2xldCBlPWBcXG4ke2F9YDtjb25zdCBuPWAsXFxuJHthfWA7Y29uc3Qgcj1NYXRoLm1pbihzLmxlbmd0aCxvKTtsZXQgaT0wO2Zvcig7aTxyLTE7aSsrKXtjb25zdCB0PXN0cmluZ2lmeUluZGVudChTdHJpbmcoaSksc1tpXSxsLGMsYSk7ZSs9dCE9PXVuZGVmaW5lZD90OlwibnVsbFwiO2UrPW59Y29uc3QgZj1zdHJpbmdpZnlJbmRlbnQoU3RyaW5nKGkpLHNbaV0sbCxjLGEpO2UrPWYhPT11bmRlZmluZWQ/ZjpcIm51bGxcIjtpZihzLmxlbmd0aC0xPm8pe2NvbnN0IHQ9cy5sZW5ndGgtby0xO2UrPWAke259XCIuLi4gJHtnZXRJdGVtQ291bnQodCl9IG5vdCBzdHJpbmdpZmllZFwiYH1lKz1gXFxuJHt0fWA7bC5wb3AoKTtyZXR1cm5gWyR7ZX1dYH1sZXQgcj1PYmplY3Qua2V5cyhzKTtjb25zdCBnPXIubGVuZ3RoO2lmKGc9PT0wKXtyZXR1cm5cInt9XCJ9aWYodTxsLmxlbmd0aCsxKXtyZXR1cm4nXCJbT2JqZWN0XVwiJ31hKz1jO2NvbnN0IHA9YCxcXG4ke2F9YDtsZXQgeT1cIlwiO2xldCBkPVwiXCI7bGV0IGg9TWF0aC5taW4oZyxvKTtpZihpc1R5cGVkQXJyYXlXaXRoRW50cmllcyhzKSl7eSs9c3RyaW5naWZ5VHlwZWRBcnJheShzLHAsbyk7cj1yLnNsaWNlKHMubGVuZ3RoKTtoLT1zLmxlbmd0aDtkPXB9aWYoaSl7cj1zb3J0KHIsZil9bC5wdXNoKHMpO2ZvcihsZXQgZT0wO2U8aDtlKyspe2NvbnN0IHQ9cltlXTtjb25zdCBuPXN0cmluZ2lmeUluZGVudCh0LHNbdF0sbCxjLGEpO2lmKG4hPT11bmRlZmluZWQpe3krPWAke2R9JHtzdHJFc2NhcGUodCl9OiAke259YDtkPXB9fWlmKGc+byl7Y29uc3QgZT1nLW87eSs9YCR7ZH1cIi4uLlwiOiBcIiR7Z2V0SXRlbUNvdW50KGUpfSBub3Qgc3RyaW5naWZpZWRcImA7ZD1wfWlmKGQhPT1cIlwiKXt5PWBcXG4ke2F9JHt5fVxcbiR7dH1gfWwucG9wKCk7cmV0dXJuYHske3l9fWB9Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzRmluaXRlKHMpP1N0cmluZyhzKTp0P3Qocyk6XCJudWxsXCI7Y2FzZVwiYm9vbGVhblwiOnJldHVybiBzPT09dHJ1ZT9cInRydWVcIjpcImZhbHNlXCI7Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIHVuZGVmaW5lZDtjYXNlXCJiaWdpbnRcIjppZihyKXtyZXR1cm4gU3RyaW5nKHMpfWRlZmF1bHQ6cmV0dXJuIHQ/dChzKTp1bmRlZmluZWR9fWZ1bmN0aW9uIHN0cmluZ2lmeVNpbXBsZShlLHMsbCl7c3dpdGNoKHR5cGVvZiBzKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gc3RyRXNjYXBlKHMpO2Nhc2VcIm9iamVjdFwiOntpZihzPT09bnVsbCl7cmV0dXJuXCJudWxsXCJ9aWYodHlwZW9mIHMudG9KU09OPT09XCJmdW5jdGlvblwiKXtzPXMudG9KU09OKGUpO2lmKHR5cGVvZiBzIT09XCJvYmplY3RcIil7cmV0dXJuIHN0cmluZ2lmeVNpbXBsZShlLHMsbCl9aWYocz09PW51bGwpe3JldHVyblwibnVsbFwifX1pZihsLmluZGV4T2YocykhPT0tMSl7cmV0dXJuIG59bGV0IHQ9XCJcIjtjb25zdCByPXMubGVuZ3RoIT09dW5kZWZpbmVkO2lmKHImJkFycmF5LmlzQXJyYXkocykpe2lmKHMubGVuZ3RoPT09MCl7cmV0dXJuXCJbXVwifWlmKHU8bC5sZW5ndGgrMSl7cmV0dXJuJ1wiW0FycmF5XVwiJ31sLnB1c2gocyk7Y29uc3QgZT1NYXRoLm1pbihzLmxlbmd0aCxvKTtsZXQgbj0wO2Zvcig7bjxlLTE7bisrKXtjb25zdCBlPXN0cmluZ2lmeVNpbXBsZShTdHJpbmcobiksc1tuXSxsKTt0Kz1lIT09dW5kZWZpbmVkP2U6XCJudWxsXCI7dCs9XCIsXCJ9Y29uc3Qgcj1zdHJpbmdpZnlTaW1wbGUoU3RyaW5nKG4pLHNbbl0sbCk7dCs9ciE9PXVuZGVmaW5lZD9yOlwibnVsbFwiO2lmKHMubGVuZ3RoLTE+byl7Y29uc3QgZT1zLmxlbmd0aC1vLTE7dCs9YCxcIi4uLiAke2dldEl0ZW1Db3VudChlKX0gbm90IHN0cmluZ2lmaWVkXCJgfWwucG9wKCk7cmV0dXJuYFske3R9XWB9bGV0IGM9T2JqZWN0LmtleXMocyk7Y29uc3QgYT1jLmxlbmd0aDtpZihhPT09MCl7cmV0dXJuXCJ7fVwifWlmKHU8bC5sZW5ndGgrMSl7cmV0dXJuJ1wiW09iamVjdF1cIid9bGV0IGc9XCJcIjtsZXQgcD1NYXRoLm1pbihhLG8pO2lmKHImJmlzVHlwZWRBcnJheVdpdGhFbnRyaWVzKHMpKXt0Kz1zdHJpbmdpZnlUeXBlZEFycmF5KHMsXCIsXCIsbyk7Yz1jLnNsaWNlKHMubGVuZ3RoKTtwLT1zLmxlbmd0aDtnPVwiLFwifWlmKGkpe2M9c29ydChjLGYpfWwucHVzaChzKTtmb3IobGV0IGU9MDtlPHA7ZSsrKXtjb25zdCBuPWNbZV07Y29uc3Qgcj1zdHJpbmdpZnlTaW1wbGUobixzW25dLGwpO2lmKHIhPT11bmRlZmluZWQpe3QrPWAke2d9JHtzdHJFc2NhcGUobil9OiR7cn1gO2c9XCIsXCJ9fWlmKGE+byl7Y29uc3QgZT1hLW87dCs9YCR7Z31cIi4uLlwiOlwiJHtnZXRJdGVtQ291bnQoZSl9IG5vdCBzdHJpbmdpZmllZFwiYH1sLnBvcCgpO3JldHVybmB7JHt0fX1gfWNhc2VcIm51bWJlclwiOnJldHVybiBpc0Zpbml0ZShzKT9TdHJpbmcocyk6dD90KHMpOlwibnVsbFwiO2Nhc2VcImJvb2xlYW5cIjpyZXR1cm4gcz09PXRydWU/XCJ0cnVlXCI6XCJmYWxzZVwiO2Nhc2VcInVuZGVmaW5lZFwiOnJldHVybiB1bmRlZmluZWQ7Y2FzZVwiYmlnaW50XCI6aWYocil7cmV0dXJuIFN0cmluZyhzKX1kZWZhdWx0OnJldHVybiB0P3Qocyk6dW5kZWZpbmVkfX1mdW5jdGlvbiBzdHJpbmdpZnkoZSx0LG4pe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7bGV0IHI9XCJcIjtpZih0eXBlb2Ygbj09PVwibnVtYmVyXCIpe3I9XCIgXCIucmVwZWF0KE1hdGgubWluKG4sMTApKX1lbHNlIGlmKHR5cGVvZiBuPT09XCJzdHJpbmdcIil7cj1uLnNsaWNlKDAsMTApfWlmKHQhPW51bGwpe2lmKHR5cGVvZiB0PT09XCJmdW5jdGlvblwiKXtyZXR1cm4gc3RyaW5naWZ5Rm5SZXBsYWNlcihcIlwiLHtcIlwiOmV9LFtdLHQscixcIlwiKX1pZihBcnJheS5pc0FycmF5KHQpKXtyZXR1cm4gc3RyaW5naWZ5QXJyYXlSZXBsYWNlcihcIlwiLGUsW10sZ2V0VW5pcXVlUmVwbGFjZXJTZXQodCkscixcIlwiKX19aWYoci5sZW5ndGghPT0wKXtyZXR1cm4gc3RyaW5naWZ5SW5kZW50KFwiXCIsZSxbXSxyLFwiXCIpfX1yZXR1cm4gc3RyaW5naWZ5U2ltcGxlKFwiXCIsZSxbXSl9cmV0dXJuIHN0cmluZ2lmeX19fTt2YXIgdD17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKG4pe3ZhciByPXRbbl07aWYociE9PXVuZGVmaW5lZCl7cmV0dXJuIHIuZXhwb3J0c312YXIgaT10W25dPXtleHBvcnRzOnt9fTt2YXIgZj10cnVlO3RyeXtlW25dKGksaS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO2Y9ZmFsc2V9ZmluYWxseXtpZihmKWRlbGV0ZSB0W25dfXJldHVybiBpLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciBuPV9fbmNjd3Bja19yZXF1aXJlX18oODc5KTttb2R1bGUuZXhwb3J0cz1ufSkoKTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/compiled/safe-stable-stringify/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;Object.defineProperty(r,\"__esModule\",{value:true});var n=\"<unknown>\";function parse(e){var r=e.split(\"\\n\");return r.reduce((function(e,r){var n=parseChrome(r)||parseWinjs(r)||parseGecko(r)||parseNode(r)||parseJSC(r);if(n){e.push(n)}return e}),[])}var a=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|webpack-internal|rsc|turbopack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;var l=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;function parseChrome(e){var r=a.exec(e);if(!r){return null}var u=r[2]&&r[2].indexOf(\"native\")===0;var t=r[2]&&r[2].indexOf(\"eval\")===0;var i=l.exec(r[2]);if(t&&i!=null){r[2]=i[1];r[3]=i[2];r[4]=i[3]}return{file:!u?r[2]:null,methodName:r[1]||n,arguments:u?[r[2]]:[],lineNumber:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}var u=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|webpack-internal|rsc|turbopack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseWinjs(e){var r=u.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}var t=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|webpack-internal|rsc|turbopack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;var i=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;function parseGecko(e){var r=t.exec(e);if(!r){return null}var a=r[3]&&r[3].indexOf(\" > eval\")>-1;var l=i.exec(r[3]);if(a&&l!=null){r[3]=l[1];r[4]=l[2];r[5]=null}return{file:r[3],methodName:r[1]||n,arguments:r[2]?r[2].split(\",\"):[],lineNumber:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}var s=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;function parseJSC(e){var r=s.exec(e);if(!r){return null}return{file:r[3],methodName:r[1]||n,arguments:[],lineNumber:+r[4],column:r[5]?+r[5]:null}}var c=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseNode(e){var r=c.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}r.parse=parse})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RhY2t0cmFjZS1wYXJzZXIvc3RhY2stdHJhY2UtcGFyc2VyLmNqcy5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxhQUFhLG1FQUFtRSxTQUFTLEtBQUssU0FBUyxNQUFNLFFBQVEsc0NBQXNDLFdBQVcsRUFBRSxrQkFBa0Isa0JBQWtCLG9CQUFvQiwrQkFBK0IsOEVBQThFLE1BQU0sVUFBVSxTQUFTLE1BQU0saUxBQWlMLHNDQUFzQyx3QkFBd0IsZ0JBQWdCLE9BQU8sWUFBWSx1Q0FBdUMscUNBQXFDLG1CQUFtQixlQUFlLFVBQVUsVUFBVSxVQUFVLE9BQU8sOEdBQThHLHFKQUFxSix1QkFBdUIsZ0JBQWdCLE9BQU8sWUFBWSxPQUFPLG1GQUFtRix1S0FBdUssc0RBQXNELHVCQUF1QixnQkFBZ0IsT0FBTyxZQUFZLHVDQUF1QyxtQkFBbUIsZUFBZSxVQUFVLFVBQVUsVUFBVSxPQUFPLGtIQUFrSCxxRUFBcUUscUJBQXFCLGdCQUFnQixPQUFPLFlBQVksT0FBTyxtRkFBbUYsc0dBQXNHLHNCQUFzQixnQkFBZ0IsT0FBTyxZQUFZLE9BQU8sbUZBQW1GLGNBQWMsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcY29tcGlsZWRcXHN0YWNrdHJhY2UtcGFyc2VyXFxzdGFjay10cmFjZS1wYXJzZXIuY2pzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO2lmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgZT17fTsoKCk9Pnt2YXIgcj1lO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dmFyIG49XCI8dW5rbm93bj5cIjtmdW5jdGlvbiBwYXJzZShlKXt2YXIgcj1lLnNwbGl0KFwiXFxuXCIpO3JldHVybiByLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXt2YXIgbj1wYXJzZUNocm9tZShyKXx8cGFyc2VXaW5qcyhyKXx8cGFyc2VHZWNrbyhyKXx8cGFyc2VOb2RlKHIpfHxwYXJzZUpTQyhyKTtpZihuKXtlLnB1c2gobil9cmV0dXJuIGV9KSxbXSl9dmFyIGE9L15cXHMqYXQgKC4qPykgP1xcKCgoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZS1leHRlbnNpb258bmF0aXZlfGV2YWx8d2VicGFja3x3ZWJwYWNrLWludGVybmFsfHJzY3x0dXJib3BhY2t8PGFub255bW91cz58XFwvfFthLXpdOlxcXFx8XFxcXFxcXFwpLio/KSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xcKT9cXHMqJC9pO3ZhciBsPS9cXCgoXFxTKikoPzo6KFxcZCspKSg/OjooXFxkKykpXFwpLztmdW5jdGlvbiBwYXJzZUNocm9tZShlKXt2YXIgcj1hLmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXZhciB1PXJbMl0mJnJbMl0uaW5kZXhPZihcIm5hdGl2ZVwiKT09PTA7dmFyIHQ9clsyXSYmclsyXS5pbmRleE9mKFwiZXZhbFwiKT09PTA7dmFyIGk9bC5leGVjKHJbMl0pO2lmKHQmJmkhPW51bGwpe3JbMl09aVsxXTtyWzNdPWlbMl07cls0XT1pWzNdfXJldHVybntmaWxlOiF1P3JbMl06bnVsbCxtZXRob2ROYW1lOnJbMV18fG4sYXJndW1lbnRzOnU/W3JbMl1dOltdLGxpbmVOdW1iZXI6clszXT8rclszXTpudWxsLGNvbHVtbjpyWzRdPytyWzRdOm51bGx9fXZhciB1PS9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT8uKykgKT9cXCg/KCg/OmZpbGV8bXMtYXBweHxodHRwcz98d2VicGFja3x3ZWJwYWNrLWludGVybmFsfHJzY3x0dXJib3BhY2t8YmxvYik6Lio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZVdpbmpzKGUpe3ZhciByPXUuZXhlYyhlKTtpZighcil7cmV0dXJuIG51bGx9cmV0dXJue2ZpbGU6clsyXSxtZXRob2ROYW1lOnJbMV18fG4sYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K3JbM10sY29sdW1uOnJbNF0/K3JbNF06bnVsbH19dmFyIHQ9L15cXHMqKC4qPykoPzpcXCgoLio/KVxcKSk/KD86XnxAKSgoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZXx3ZWJwYWNrfHdlYnBhY2staW50ZXJuYWx8cnNjfHR1cmJvcGFja3xyZXNvdXJjZXxcXFtuYXRpdmUpLio/fFteQF0qYnVuZGxlKSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xccyokL2k7dmFyIGk9LyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2k7ZnVuY3Rpb24gcGFyc2VHZWNrbyhlKXt2YXIgcj10LmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXZhciBhPXJbM10mJnJbM10uaW5kZXhPZihcIiA+IGV2YWxcIik+LTE7dmFyIGw9aS5leGVjKHJbM10pO2lmKGEmJmwhPW51bGwpe3JbM109bFsxXTtyWzRdPWxbMl07cls1XT1udWxsfXJldHVybntmaWxlOnJbM10sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpyWzJdP3JbMl0uc3BsaXQoXCIsXCIpOltdLGxpbmVOdW1iZXI6cls0XT8rcls0XTpudWxsLGNvbHVtbjpyWzVdPytyWzVdOm51bGx9fXZhciBzPS9eXFxzKig/OihbXkBdKikoPzpcXCgoLio/KVxcKSk/QCk/KFxcUy4qPyk6KFxcZCspKD86OihcXGQrKSk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZUpTQyhlKXt2YXIgcj1zLmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXJldHVybntmaWxlOnJbM10sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOityWzRdLGNvbHVtbjpyWzVdPytyWzVdOm51bGx9fXZhciBjPS9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT9bXlxcXFwvXSsoPzogXFxbYXMgXFxTK1xcXSk/KSApP1xcKD8oLio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZU5vZGUoZSl7dmFyIHI9Yy5leGVjKGUpO2lmKCFyKXtyZXR1cm4gbnVsbH1yZXR1cm57ZmlsZTpyWzJdLG1ldGhvZE5hbWU6clsxXXx8bixhcmd1bWVudHM6W10sbGluZU51bWJlcjorclszXSxjb2x1bW46cls0XT8rcls0XTpudWxsfX1yLnBhcnNlPXBhcnNlfSkoKTttb2R1bGUuZXhwb3J0cz1lfSkoKTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/strip-ansi/index.js ***!
|
||
\*************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n\n(()=>{\n \"use strict\";\n var e = {\n 511: (e)=>{\n e.exports = function() {\n let { onlyFirst: e = false } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n const r = [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"\n ].join(\"|\");\n return new RegExp(r, e ? undefined : \"g\");\n };\n },\n 532: (e, r, _)=>{\n const t = _(511);\n e.exports = (e)=>typeof e === \"string\" ? e.replace(t(), \"\") : e;\n }\n };\n var r = {};\n function __nccwpck_require__(_) {\n var t = r[_];\n if (t !== undefined) {\n return t.exports;\n }\n var a = r[_] = {\n exports: {}\n };\n var n = true;\n try {\n e[_](a, a.exports, __nccwpck_require__);\n n = false;\n } finally{\n if (n) delete r[_];\n }\n return a.exports;\n }\n if (typeof __nccwpck_require__ !== \"undefined\") __nccwpck_require__.ab = __dirname + \"/\";\n var _ = __nccwpck_require__(532);\n module.exports = _;\n})();\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOztBQUFDO0lBQUs7SUFBYSxJQUFJQSxJQUFFO1FBQUMsS0FBSUEsQ0FBQUE7WUFBSUEsRUFBRUMsT0FBTyxHQUFDO29CQUFDLEVBQUNDLFdBQVVGLElBQUUsS0FBSyxFQUFDLG9FQUFDLENBQUM7Z0JBQUssTUFBTUcsSUFBRTtvQkFBQztvQkFBK0g7aUJBQTJELENBQUNDLElBQUksQ0FBQztnQkFBSyxPQUFPLElBQUlDLE9BQU9GLEdBQUVILElBQUVNLFlBQVU7WUFBSTtRQUFDO1FBQUUsS0FBSSxDQUFDTixHQUFFRyxHQUFFSTtZQUFLLE1BQU1DLElBQUVELEVBQUU7WUFBS1AsRUFBRUMsT0FBTyxHQUFDRCxDQUFBQSxJQUFHLE9BQU9BLE1BQUksV0FBU0EsRUFBRVMsT0FBTyxDQUFDRCxLQUFJLE1BQUlSO1FBQUM7SUFBQztJQUFFLElBQUlHLElBQUUsQ0FBQztJQUFFLFNBQVNPLG9CQUFvQkgsQ0FBQztRQUFFLElBQUlDLElBQUVMLENBQUMsQ0FBQ0ksRUFBRTtRQUFDLElBQUdDLE1BQUlGLFdBQVU7WUFBQyxPQUFPRSxFQUFFUCxPQUFPO1FBQUE7UUFBQyxJQUFJVSxJQUFFUixDQUFDLENBQUNJLEVBQUUsR0FBQztZQUFDTixTQUFRLENBQUM7UUFBQztRQUFFLElBQUlXLElBQUU7UUFBSyxJQUFHO1lBQUNaLENBQUMsQ0FBQ08sRUFBRSxDQUFDSSxHQUFFQSxFQUFFVixPQUFPLEVBQUNTO1lBQXFCRSxJQUFFO1FBQUssU0FBUTtZQUFDLElBQUdBLEdBQUUsT0FBT1QsQ0FBQyxDQUFDSSxFQUFFO1FBQUE7UUFBQyxPQUFPSSxFQUFFVixPQUFPO0lBQUE7SUFBQyxJQUFHLE9BQU9TLHdCQUFzQixhQUFZQSxvQkFBb0JHLEVBQUUsR0FBQ0MsU0FBU0EsR0FBQztJQUFJLElBQUlQLElBQUVHLG9CQUFvQjtJQUFLSyxPQUFPZCxPQUFPLEdBQUNNO0FBQUMiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcY29tcGlsZWRcXHN0cmlwLWFuc2lcXGluZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO3ZhciBlPXs1MTE6ZT0+e2UuZXhwb3J0cz0oe29ubHlGaXJzdDplPWZhbHNlfT17fSk9Pntjb25zdCByPVtcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNylcIixcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpXCJdLmpvaW4oXCJ8XCIpO3JldHVybiBuZXcgUmVnRXhwKHIsZT91bmRlZmluZWQ6XCJnXCIpfX0sNTMyOihlLHIsXyk9Pntjb25zdCB0PV8oNTExKTtlLmV4cG9ydHM9ZT0+dHlwZW9mIGU9PT1cInN0cmluZ1wiP2UucmVwbGFjZSh0KCksXCJcIik6ZX19O3ZhciByPXt9O2Z1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18oXyl7dmFyIHQ9cltfXTtpZih0IT09dW5kZWZpbmVkKXtyZXR1cm4gdC5leHBvcnRzfXZhciBhPXJbX109e2V4cG9ydHM6e319O3ZhciBuPXRydWU7dHJ5e2VbX10oYSxhLmV4cG9ydHMsX19uY2N3cGNrX3JlcXVpcmVfXyk7bj1mYWxzZX1maW5hbGx5e2lmKG4pZGVsZXRlIHJbX119cmV0dXJuIGEuZXhwb3J0c31pZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIF89X19uY2N3cGNrX3JlcXVpcmVfXyg1MzIpO21vZHVsZS5leHBvcnRzPV99KSgpOyJdLCJuYW1lcyI6WyJlIiwiZXhwb3J0cyIsIm9ubHlGaXJzdCIsInIiLCJqb2luIiwiUmVnRXhwIiwidW5kZWZpbmVkIiwiXyIsInQiLCJyZXBsYWNlIiwiX19uY2N3cGNrX3JlcXVpcmVfXyIsImEiLCJuIiwiYWIiLCJfX2Rpcm5hbWUiLCJtb2R1bGUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/lib/constants.js":
|
||
/*!*************************************************!*\
|
||
!*** ./node_modules/next/dist/lib/constants.js ***!
|
||
\*************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ACTION_SUFFIX: function() {\n return ACTION_SUFFIX;\n },\n APP_DIR_ALIAS: function() {\n return APP_DIR_ALIAS;\n },\n CACHE_ONE_YEAR: function() {\n return CACHE_ONE_YEAR;\n },\n DOT_NEXT_ALIAS: function() {\n return DOT_NEXT_ALIAS;\n },\n ESLINT_DEFAULT_DIRS: function() {\n return ESLINT_DEFAULT_DIRS;\n },\n GSP_NO_RETURNED_VALUE: function() {\n return GSP_NO_RETURNED_VALUE;\n },\n GSSP_COMPONENT_MEMBER_ERROR: function() {\n return GSSP_COMPONENT_MEMBER_ERROR;\n },\n GSSP_NO_RETURNED_VALUE: function() {\n return GSSP_NO_RETURNED_VALUE;\n },\n INFINITE_CACHE: function() {\n return INFINITE_CACHE;\n },\n INSTRUMENTATION_HOOK_FILENAME: function() {\n return INSTRUMENTATION_HOOK_FILENAME;\n },\n MATCHED_PATH_HEADER: function() {\n return MATCHED_PATH_HEADER;\n },\n MIDDLEWARE_FILENAME: function() {\n return MIDDLEWARE_FILENAME;\n },\n MIDDLEWARE_LOCATION_REGEXP: function() {\n return MIDDLEWARE_LOCATION_REGEXP;\n },\n NEXT_BODY_SUFFIX: function() {\n return NEXT_BODY_SUFFIX;\n },\n NEXT_CACHE_IMPLICIT_TAG_ID: function() {\n return NEXT_CACHE_IMPLICIT_TAG_ID;\n },\n NEXT_CACHE_REVALIDATED_TAGS_HEADER: function() {\n return NEXT_CACHE_REVALIDATED_TAGS_HEADER;\n },\n NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: function() {\n return NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER;\n },\n NEXT_CACHE_SOFT_TAG_MAX_LENGTH: function() {\n return NEXT_CACHE_SOFT_TAG_MAX_LENGTH;\n },\n NEXT_CACHE_TAGS_HEADER: function() {\n return NEXT_CACHE_TAGS_HEADER;\n },\n NEXT_CACHE_TAG_MAX_ITEMS: function() {\n return NEXT_CACHE_TAG_MAX_ITEMS;\n },\n NEXT_CACHE_TAG_MAX_LENGTH: function() {\n return NEXT_CACHE_TAG_MAX_LENGTH;\n },\n NEXT_DATA_SUFFIX: function() {\n return NEXT_DATA_SUFFIX;\n },\n NEXT_INTERCEPTION_MARKER_PREFIX: function() {\n return NEXT_INTERCEPTION_MARKER_PREFIX;\n },\n NEXT_META_SUFFIX: function() {\n return NEXT_META_SUFFIX;\n },\n NEXT_QUERY_PARAM_PREFIX: function() {\n return NEXT_QUERY_PARAM_PREFIX;\n },\n NEXT_RESUME_HEADER: function() {\n return NEXT_RESUME_HEADER;\n },\n NON_STANDARD_NODE_ENV: function() {\n return NON_STANDARD_NODE_ENV;\n },\n PAGES_DIR_ALIAS: function() {\n return PAGES_DIR_ALIAS;\n },\n PRERENDER_REVALIDATE_HEADER: function() {\n return PRERENDER_REVALIDATE_HEADER;\n },\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: function() {\n return PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER;\n },\n PUBLIC_DIR_MIDDLEWARE_CONFLICT: function() {\n return PUBLIC_DIR_MIDDLEWARE_CONFLICT;\n },\n ROOT_DIR_ALIAS: function() {\n return ROOT_DIR_ALIAS;\n },\n RSC_ACTION_CLIENT_WRAPPER_ALIAS: function() {\n return RSC_ACTION_CLIENT_WRAPPER_ALIAS;\n },\n RSC_ACTION_ENCRYPTION_ALIAS: function() {\n return RSC_ACTION_ENCRYPTION_ALIAS;\n },\n RSC_ACTION_PROXY_ALIAS: function() {\n return RSC_ACTION_PROXY_ALIAS;\n },\n RSC_ACTION_VALIDATE_ALIAS: function() {\n return RSC_ACTION_VALIDATE_ALIAS;\n },\n RSC_CACHE_WRAPPER_ALIAS: function() {\n return RSC_CACHE_WRAPPER_ALIAS;\n },\n RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: function() {\n return RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS;\n },\n RSC_MOD_REF_PROXY_ALIAS: function() {\n return RSC_MOD_REF_PROXY_ALIAS;\n },\n RSC_PREFETCH_SUFFIX: function() {\n return RSC_PREFETCH_SUFFIX;\n },\n RSC_SEGMENTS_DIR_SUFFIX: function() {\n return RSC_SEGMENTS_DIR_SUFFIX;\n },\n RSC_SEGMENT_SUFFIX: function() {\n return RSC_SEGMENT_SUFFIX;\n },\n RSC_SUFFIX: function() {\n return RSC_SUFFIX;\n },\n SERVER_PROPS_EXPORT_ERROR: function() {\n return SERVER_PROPS_EXPORT_ERROR;\n },\n SERVER_PROPS_GET_INIT_PROPS_CONFLICT: function() {\n return SERVER_PROPS_GET_INIT_PROPS_CONFLICT;\n },\n SERVER_PROPS_SSG_CONFLICT: function() {\n return SERVER_PROPS_SSG_CONFLICT;\n },\n SERVER_RUNTIME: function() {\n return SERVER_RUNTIME;\n },\n SSG_FALLBACK_EXPORT_ERROR: function() {\n return SSG_FALLBACK_EXPORT_ERROR;\n },\n SSG_GET_INITIAL_PROPS_CONFLICT: function() {\n return SSG_GET_INITIAL_PROPS_CONFLICT;\n },\n STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: function() {\n return STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR;\n },\n UNSTABLE_REVALIDATE_RENAME_ERROR: function() {\n return UNSTABLE_REVALIDATE_RENAME_ERROR;\n },\n WEBPACK_LAYERS: function() {\n return WEBPACK_LAYERS;\n },\n WEBPACK_RESOURCE_QUERIES: function() {\n return WEBPACK_RESOURCE_QUERIES;\n }\n});\nconst NEXT_QUERY_PARAM_PREFIX = 'nxtP';\nconst NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI';\nconst MATCHED_PATH_HEADER = 'x-matched-path';\nconst PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate';\nconst PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = 'x-prerender-revalidate-if-generated';\nconst RSC_PREFETCH_SUFFIX = '.prefetch.rsc';\nconst RSC_SEGMENTS_DIR_SUFFIX = '.segments';\nconst RSC_SEGMENT_SUFFIX = '.segment.rsc';\nconst RSC_SUFFIX = '.rsc';\nconst ACTION_SUFFIX = '.action';\nconst NEXT_DATA_SUFFIX = '.json';\nconst NEXT_META_SUFFIX = '.meta';\nconst NEXT_BODY_SUFFIX = '.body';\nconst NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags';\nconst NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags';\nconst NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = 'x-next-revalidate-tag-token';\nconst NEXT_RESUME_HEADER = 'next-resume';\nconst NEXT_CACHE_TAG_MAX_ITEMS = 128;\nconst NEXT_CACHE_TAG_MAX_LENGTH = 256;\nconst NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024;\nconst NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_';\nconst CACHE_ONE_YEAR = 31536000;\nconst INFINITE_CACHE = 0xfffffffe;\nconst MIDDLEWARE_FILENAME = 'middleware';\nconst MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`;\nconst INSTRUMENTATION_HOOK_FILENAME = 'instrumentation';\nconst PAGES_DIR_ALIAS = 'private-next-pages';\nconst DOT_NEXT_ALIAS = 'private-dot-next';\nconst ROOT_DIR_ALIAS = 'private-next-root-dir';\nconst APP_DIR_ALIAS = 'private-next-app-dir';\nconst RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy';\nconst RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate';\nconst RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference';\nconst RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper';\nconst RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS = 'private-next-rsc-track-dynamic-import';\nconst RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption';\nconst RSC_ACTION_CLIENT_WRAPPER_ALIAS = 'private-next-rsc-action-client-wrapper';\nconst PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`;\nconst SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`;\nconst SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`;\nconst SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`;\nconst STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`;\nconst SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`;\nconst GSP_NO_RETURNED_VALUE = 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?';\nconst GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?';\nconst UNSTABLE_REVALIDATE_RENAME_ERROR = 'The `unstable_revalidate` property is available for general use.\\n' + 'Please use `revalidate` instead.';\nconst GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`;\nconst NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`;\nconst SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`;\nconst ESLINT_DEFAULT_DIRS = [\n 'app',\n 'pages',\n 'components',\n 'lib',\n 'src'\n];\nconst SERVER_RUNTIME = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs'\n};\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */ const WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */ shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */ reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */ serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */ actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */ apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */ apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */ middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */ instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */ edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */ appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */ pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */ pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */ pagesDirNode: 'pages-dir-node'\n};\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser\n ]\n }\n};\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__'\n};\n\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FzREw7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLG9CQUFvQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxsaWJcXGNvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFDVElPTl9TVUZGSVg6IG51bGwsXG4gICAgQVBQX0RJUl9BTElBUzogbnVsbCxcbiAgICBDQUNIRV9PTkVfWUVBUjogbnVsbCxcbiAgICBET1RfTkVYVF9BTElBUzogbnVsbCxcbiAgICBFU0xJTlRfREVGQVVMVF9ESVJTOiBudWxsLFxuICAgIEdTUF9OT19SRVRVUk5FRF9WQUxVRTogbnVsbCxcbiAgICBHU1NQX0NPTVBPTkVOVF9NRU1CRVJfRVJST1I6IG51bGwsXG4gICAgR1NTUF9OT19SRVRVUk5FRF9WQUxVRTogbnVsbCxcbiAgICBJTkZJTklURV9DQUNIRTogbnVsbCxcbiAgICBJTlNUUlVNRU5UQVRJT05fSE9PS19GSUxFTkFNRTogbnVsbCxcbiAgICBNQVRDSEVEX1BBVEhfSEVBREVSOiBudWxsLFxuICAgIE1JRERMRVdBUkVfRklMRU5BTUU6IG51bGwsXG4gICAgTUlERExFV0FSRV9MT0NBVElPTl9SRUdFWFA6IG51bGwsXG4gICAgTkVYVF9CT0RZX1NVRkZJWDogbnVsbCxcbiAgICBORVhUX0NBQ0hFX0lNUExJQ0lUX1RBR19JRDogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1JFVkFMSURBVEVEX1RBR1NfSEVBREVSOiBudWxsLFxuICAgIE5FWFRfQ0FDSEVfUkVWQUxJREFURV9UQUdfVE9LRU5fSEVBREVSOiBudWxsLFxuICAgIE5FWFRfQ0FDSEVfU09GVF9UQUdfTUFYX0xFTkdUSDogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1RBR1NfSEVBREVSOiBudWxsLFxuICAgIE5FWFRfQ0FDSEVfVEFHX01BWF9JVEVNUzogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1RBR19NQVhfTEVOR1RIOiBudWxsLFxuICAgIE5FWFRfREFUQV9TVUZGSVg6IG51bGwsXG4gICAgTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWDogbnVsbCxcbiAgICBORVhUX01FVEFfU1VGRklYOiBudWxsLFxuICAgIE5FWFRfUVVFUllfUEFSQU1fUFJFRklYOiBudWxsLFxuICAgIE5FWFRfUkVTVU1FX0hFQURFUjogbnVsbCxcbiAgICBOT05fU1RBTkRBUkRfTk9ERV9FTlY6IG51bGwsXG4gICAgUEFHRVNfRElSX0FMSUFTOiBudWxsLFxuICAgIFBSRVJFTkRFUl9SRVZBTElEQVRFX0hFQURFUjogbnVsbCxcbiAgICBQUkVSRU5ERVJfUkVWQUxJREFURV9PTkxZX0dFTkVSQVRFRF9IRUFERVI6IG51bGwsXG4gICAgUFVCTElDX0RJUl9NSURETEVXQVJFX0NPTkZMSUNUOiBudWxsLFxuICAgIFJPT1RfRElSX0FMSUFTOiBudWxsLFxuICAgIFJTQ19BQ1RJT05fQ0xJRU5UX1dSQVBQRVJfQUxJQVM6IG51bGwsXG4gICAgUlNDX0FDVElPTl9FTkNSWVBUSU9OX0FMSUFTOiBudWxsLFxuICAgIFJTQ19BQ1RJT05fUFJPWFlfQUxJQVM6IG51bGwsXG4gICAgUlNDX0FDVElPTl9WQUxJREFURV9BTElBUzogbnVsbCxcbiAgICBSU0NfQ0FDSEVfV1JBUFBFUl9BTElBUzogbnVsbCxcbiAgICBSU0NfRFlOQU1JQ19JTVBPUlRfV1JBUFBFUl9BTElBUzogbnVsbCxcbiAgICBSU0NfTU9EX1JFRl9QUk9YWV9BTElBUzogbnVsbCxcbiAgICBSU0NfUFJFRkVUQ0hfU1VGRklYOiBudWxsLFxuICAgIFJTQ19TRUdNRU5UU19ESVJfU1VGRklYOiBudWxsLFxuICAgIFJTQ19TRUdNRU5UX1NVRkZJWDogbnVsbCxcbiAgICBSU0NfU1VGRklYOiBudWxsLFxuICAgIFNFUlZFUl9QUk9QU19FWFBPUlRfRVJST1I6IG51bGwsXG4gICAgU0VSVkVSX1BST1BTX0dFVF9JTklUX1BST1BTX0NPTkZMSUNUOiBudWxsLFxuICAgIFNFUlZFUl9QUk9QU19TU0dfQ09ORkxJQ1Q6IG51bGwsXG4gICAgU0VSVkVSX1JVTlRJTUU6IG51bGwsXG4gICAgU1NHX0ZBTExCQUNLX0VYUE9SVF9FUlJPUjogbnVsbCxcbiAgICBTU0dfR0VUX0lOSVRJQUxfUFJPUFNfQ09ORkxJQ1Q6IG51bGwsXG4gICAgU1RBVElDX1NUQVRVU19QQUdFX0dFVF9JTklUSUFMX1BST1BTX0VSUk9SOiBudWxsLFxuICAgIFVOU1RBQkxFX1JFVkFMSURBVEVfUkVOQU1FX0VSUk9SOiBudWxsLFxuICAgIFdFQlBBQ0tfTEFZRVJTOiBudWxsLFxuICAgIFdFQlBBQ0tfUkVTT1VSQ0VfUVVFUklFUzogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBBQ1RJT05fU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9TVUZGSVg7XG4gICAgfSxcbiAgICBBUFBfRElSX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFQUF9ESVJfQUxJQVM7XG4gICAgfSxcbiAgICBDQUNIRV9PTkVfWUVBUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDQUNIRV9PTkVfWUVBUjtcbiAgICB9LFxuICAgIERPVF9ORVhUX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIERPVF9ORVhUX0FMSUFTO1xuICAgIH0sXG4gICAgRVNMSU5UX0RFRkFVTFRfRElSUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBFU0xJTlRfREVGQVVMVF9ESVJTO1xuICAgIH0sXG4gICAgR1NQX05PX1JFVFVSTkVEX1ZBTFVFOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEdTUF9OT19SRVRVUk5FRF9WQUxVRTtcbiAgICB9LFxuICAgIEdTU1BfQ09NUE9ORU5UX01FTUJFUl9FUlJPUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBHU1NQX0NPTVBPTkVOVF9NRU1CRVJfRVJST1I7XG4gICAgfSxcbiAgICBHU1NQX05PX1JFVFVSTkVEX1ZBTFVFOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEdTU1BfTk9fUkVUVVJORURfVkFMVUU7XG4gICAgfSxcbiAgICBJTkZJTklURV9DQUNIRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBJTkZJTklURV9DQUNIRTtcbiAgICB9LFxuICAgIElOU1RSVU1FTlRBVElPTl9IT09LX0ZJTEVOQU1FOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIElOU1RSVU1FTlRBVElPTl9IT09LX0ZJTEVOQU1FO1xuICAgIH0sXG4gICAgTUFUQ0hFRF9QQVRIX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNQVRDSEVEX1BBVEhfSEVBREVSO1xuICAgIH0sXG4gICAgTUlERExFV0FSRV9GSUxFTkFNRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNSURETEVXQVJFX0ZJTEVOQU1FO1xuICAgIH0sXG4gICAgTUlERExFV0FSRV9MT0NBVElPTl9SRUdFWFA6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTUlERExFV0FSRV9MT0NBVElPTl9SRUdFWFA7XG4gICAgfSxcbiAgICBORVhUX0JPRFlfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQk9EWV9TVUZGSVg7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX0lNUExJQ0lUX1RBR19JRDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0NBQ0hFX0lNUExJQ0lUX1RBR19JRDtcbiAgICB9LFxuICAgIE5FWFRfQ0FDSEVfUkVWQUxJREFURURfVEFHU19IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9DQUNIRV9SRVZBTElEQVRFRF9UQUdTX0hFQURFUjtcbiAgICB9LFxuICAgIE5FWFRfQ0FDSEVfUkVWQUxJREFURV9UQUdfVE9LRU5fSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQ0FDSEVfUkVWQUxJREFURV9UQUdfVE9LRU5fSEVBREVSO1xuICAgIH0sXG4gICAgTkVYVF9DQUNIRV9TT0ZUX1RBR19NQVhfTEVOR1RIOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQ0FDSEVfU09GVF9UQUdfTUFYX0xFTkdUSDtcbiAgICB9LFxuICAgIE5FWFRfQ0FDSEVfVEFHU19IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9DQUNIRV9UQUdTX0hFQURFUjtcbiAgICB9LFxuICAgIE5FWFRfQ0FDSEVfVEFHX01BWF9JVEVNUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0NBQ0hFX1RBR19NQVhfSVRFTVM7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1RBR19NQVhfTEVOR1RIOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQ0FDSEVfVEFHX01BWF9MRU5HVEg7XG4gICAgfSxcbiAgICBORVhUX0RBVEFfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfREFUQV9TVUZGSVg7XG4gICAgfSxcbiAgICBORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfSU5URVJDRVBUSU9OX01BUktFUl9QUkVGSVg7XG4gICAgfSxcbiAgICBORVhUX01FVEFfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfTUVUQV9TVUZGSVg7XG4gICAgfSxcbiAgICBORVhUX1FVRVJZX1BBUkFNX1BSRUZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX1FVRVJZX1BBUkFNX1BSRUZJWDtcbiAgICB9LFxuICAgIE5FWFRfUkVTVU1FX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX1JFU1VNRV9IRUFERVI7XG4gICAgfSxcbiAgICBOT05fU1RBTkRBUkRfTk9ERV9FTlY6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTk9OX1NUQU5EQVJEX05PREVfRU5WO1xuICAgIH0sXG4gICAgUEFHRVNfRElSX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBBR0VTX0RJUl9BTElBUztcbiAgICB9LFxuICAgIFBSRVJFTkRFUl9SRVZBTElEQVRFX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQUkVSRU5ERVJfUkVWQUxJREFURV9IRUFERVI7XG4gICAgfSxcbiAgICBQUkVSRU5ERVJfUkVWQUxJREFURV9PTkxZX0dFTkVSQVRFRF9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUFJFUkVOREVSX1JFVkFMSURBVEVfT05MWV9HRU5FUkFURURfSEVBREVSO1xuICAgIH0sXG4gICAgUFVCTElDX0RJUl9NSURETEVXQVJFX0NPTkZMSUNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBVQkxJQ19ESVJfTUlERExFV0FSRV9DT05GTElDVDtcbiAgICB9LFxuICAgIFJPT1RfRElSX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJPT1RfRElSX0FMSUFTO1xuICAgIH0sXG4gICAgUlNDX0FDVElPTl9DTElFTlRfV1JBUFBFUl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfQUNUSU9OX0NMSUVOVF9XUkFQUEVSX0FMSUFTO1xuICAgIH0sXG4gICAgUlNDX0FDVElPTl9FTkNSWVBUSU9OX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19BQ1RJT05fRU5DUllQVElPTl9BTElBUztcbiAgICB9LFxuICAgIFJTQ19BQ1RJT05fUFJPWFlfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX0FDVElPTl9QUk9YWV9BTElBUztcbiAgICB9LFxuICAgIFJTQ19BQ1RJT05fVkFMSURBVEVfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX0FDVElPTl9WQUxJREFURV9BTElBUztcbiAgICB9LFxuICAgIFJTQ19DQUNIRV9XUkFQUEVSX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19DQUNIRV9XUkFQUEVSX0FMSUFTO1xuICAgIH0sXG4gICAgUlNDX0RZTkFNSUNfSU1QT1JUX1dSQVBQRVJfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX0RZTkFNSUNfSU1QT1JUX1dSQVBQRVJfQUxJQVM7XG4gICAgfSxcbiAgICBSU0NfTU9EX1JFRl9QUk9YWV9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfTU9EX1JFRl9QUk9YWV9BTElBUztcbiAgICB9LFxuICAgIFJTQ19QUkVGRVRDSF9TVUZGSVg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX1BSRUZFVENIX1NVRkZJWDtcbiAgICB9LFxuICAgIFJTQ19TRUdNRU5UU19ESVJfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19TRUdNRU5UU19ESVJfU1VGRklYO1xuICAgIH0sXG4gICAgUlNDX1NFR01FTlRfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19TRUdNRU5UX1NVRkZJWDtcbiAgICB9LFxuICAgIFJTQ19TVUZGSVg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX1NVRkZJWDtcbiAgICB9LFxuICAgIFNFUlZFUl9QUk9QU19FWFBPUlRfRVJST1I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU0VSVkVSX1BST1BTX0VYUE9SVF9FUlJPUjtcbiAgICB9LFxuICAgIFNFUlZFUl9QUk9QU19HRVRfSU5JVF9QUk9QU19DT05GTElDVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTRVJWRVJfUFJPUFNfR0VUX0lOSVRfUFJPUFNfQ09ORkxJQ1Q7XG4gICAgfSxcbiAgICBTRVJWRVJfUFJPUFNfU1NHX0NPTkZMSUNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNFUlZFUl9QUk9QU19TU0dfQ09ORkxJQ1Q7XG4gICAgfSxcbiAgICBTRVJWRVJfUlVOVElNRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTRVJWRVJfUlVOVElNRTtcbiAgICB9LFxuICAgIFNTR19GQUxMQkFDS19FWFBPUlRfRVJST1I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1NHX0ZBTExCQUNLX0VYUE9SVF9FUlJPUjtcbiAgICB9LFxuICAgIFNTR19HRVRfSU5JVElBTF9QUk9QU19DT05GTElDVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTU0dfR0VUX0lOSVRJQUxfUFJPUFNfQ09ORkxJQ1Q7XG4gICAgfSxcbiAgICBTVEFUSUNfU1RBVFVTX1BBR0VfR0VUX0lOSVRJQUxfUFJPUFNfRVJST1I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1RBVElDX1NUQVRVU19QQUdFX0dFVF9JTklUSUFMX1BST1BTX0VSUk9SO1xuICAgIH0sXG4gICAgVU5TVEFCTEVfUkVWQUxJREFURV9SRU5BTUVfRVJST1I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gVU5TVEFCTEVfUkVWQUxJREFURV9SRU5BTUVfRVJST1I7XG4gICAgfSxcbiAgICBXRUJQQUNLX0xBWUVSUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBXRUJQQUNLX0xBWUVSUztcbiAgICB9LFxuICAgIFdFQlBBQ0tfUkVTT1VSQ0VfUVVFUklFUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBXRUJQQUNLX1JFU09VUkNFX1FVRVJJRVM7XG4gICAgfVxufSk7XG5jb25zdCBORVhUX1FVRVJZX1BBUkFNX1BSRUZJWCA9ICdueHRQJztcbmNvbnN0IE5FWFRfSU5URVJDRVBUSU9OX01BUktFUl9QUkVGSVggPSAnbnh0SSc7XG5jb25zdCBNQVRDSEVEX1BBVEhfSEVBREVSID0gJ3gtbWF0Y2hlZC1wYXRoJztcbmNvbnN0IFBSRVJFTkRFUl9SRVZBTElEQVRFX0hFQURFUiA9ICd4LXByZXJlbmRlci1yZXZhbGlkYXRlJztcbmNvbnN0IFBSRVJFTkRFUl9SRVZBTElEQVRFX09OTFlfR0VORVJBVEVEX0hFQURFUiA9ICd4LXByZXJlbmRlci1yZXZhbGlkYXRlLWlmLWdlbmVyYXRlZCc7XG5jb25zdCBSU0NfUFJFRkVUQ0hfU1VGRklYID0gJy5wcmVmZXRjaC5yc2MnO1xuY29uc3QgUlNDX1NFR01FTlRTX0RJUl9TVUZGSVggPSAnLnNlZ21lbnRzJztcbmNvbnN0IFJTQ19TRUdNRU5UX1NVRkZJWCA9ICcuc2VnbWVudC5yc2MnO1xuY29uc3QgUlNDX1NVRkZJWCA9ICcucnNjJztcbmNvbnN0IEFDVElPTl9TVUZGSVggPSAnLmFjdGlvbic7XG5jb25zdCBORVhUX0RBVEFfU1VGRklYID0gJy5qc29uJztcbmNvbnN0IE5FWFRfTUVUQV9TVUZGSVggPSAnLm1ldGEnO1xuY29uc3QgTkVYVF9CT0RZX1NVRkZJWCA9ICcuYm9keSc7XG5jb25zdCBORVhUX0NBQ0hFX1RBR1NfSEVBREVSID0gJ3gtbmV4dC1jYWNoZS10YWdzJztcbmNvbnN0IE5FWFRfQ0FDSEVfUkVWQUxJREFURURfVEFHU19IRUFERVIgPSAneC1uZXh0LXJldmFsaWRhdGVkLXRhZ3MnO1xuY29uc3QgTkVYVF9DQUNIRV9SRVZBTElEQVRFX1RBR19UT0tFTl9IRUFERVIgPSAneC1uZXh0LXJldmFsaWRhdGUtdGFnLXRva2VuJztcbmNvbnN0IE5FWFRfUkVTVU1FX0hFQURFUiA9ICduZXh0LXJlc3VtZSc7XG5jb25zdCBORVhUX0NBQ0hFX1RBR19NQVhfSVRFTVMgPSAxMjg7XG5jb25zdCBORVhUX0NBQ0hFX1RBR19NQVhfTEVOR1RIID0gMjU2O1xuY29uc3QgTkVYVF9DQUNIRV9TT0ZUX1RBR19NQVhfTEVOR1RIID0gMTAyNDtcbmNvbnN0IE5FWFRfQ0FDSEVfSU1QTElDSVRfVEFHX0lEID0gJ19OX1RfJztcbmNvbnN0IENBQ0hFX09ORV9ZRUFSID0gMzE1MzYwMDA7XG5jb25zdCBJTkZJTklURV9DQUNIRSA9IDB4ZmZmZmZmZmU7XG5jb25zdCBNSURETEVXQVJFX0ZJTEVOQU1FID0gJ21pZGRsZXdhcmUnO1xuY29uc3QgTUlERExFV0FSRV9MT0NBVElPTl9SRUdFWFAgPSBgKD86c3JjLyk/JHtNSURETEVXQVJFX0ZJTEVOQU1FfWA7XG5jb25zdCBJTlNUUlVNRU5UQVRJT05fSE9PS19GSUxFTkFNRSA9ICdpbnN0cnVtZW50YXRpb24nO1xuY29uc3QgUEFHRVNfRElSX0FMSUFTID0gJ3ByaXZhdGUtbmV4dC1wYWdlcyc7XG5jb25zdCBET1RfTkVYVF9BTElBUyA9ICdwcml2YXRlLWRvdC1uZXh0JztcbmNvbnN0IFJPT1RfRElSX0FMSUFTID0gJ3ByaXZhdGUtbmV4dC1yb290LWRpcic7XG5jb25zdCBBUFBfRElSX0FMSUFTID0gJ3ByaXZhdGUtbmV4dC1hcHAtZGlyJztcbmNvbnN0IFJTQ19NT0RfUkVGX1BST1hZX0FMSUFTID0gJ3ByaXZhdGUtbmV4dC1yc2MtbW9kLXJlZi1wcm94eSc7XG5jb25zdCBSU0NfQUNUSU9OX1ZBTElEQVRFX0FMSUFTID0gJ3ByaXZhdGUtbmV4dC1yc2MtYWN0aW9uLXZhbGlkYXRlJztcbmNvbnN0IFJTQ19BQ1RJT05fUFJPWFlfQUxJQVMgPSAncHJpdmF0ZS1uZXh0LXJzYy1zZXJ2ZXItcmVmZXJlbmNlJztcbmNvbnN0IFJTQ19DQUNIRV9XUkFQUEVSX0FMSUFTID0gJ3ByaXZhdGUtbmV4dC1yc2MtY2FjaGUtd3JhcHBlcic7XG5jb25zdCBSU0NfRFlOQU1JQ19JTVBPUlRfV1JBUFBFUl9BTElBUyA9ICdwcml2YXRlLW5leHQtcnNjLXRyYWNrLWR5bmFtaWMtaW1wb3J0JztcbmNvbnN0IFJTQ19BQ1RJT05fRU5DUllQVElPTl9BTElBUyA9ICdwcml2YXRlLW5leHQtcnNjLWFjdGlvbi1lbmNyeXB0aW9uJztcbmNvbnN0IFJTQ19BQ1RJT05fQ0xJRU5UX1dSQVBQRVJfQUxJQVMgPSAncHJpdmF0ZS1uZXh0LXJzYy1hY3Rpb24tY2xpZW50LXdyYXBwZXInO1xuY29uc3QgUFVCTElDX0RJUl9NSURETEVXQVJFX0NPTkZMSUNUID0gYFlvdSBjYW4gbm90IGhhdmUgYSAnX25leHQnIGZvbGRlciBpbnNpZGUgb2YgeW91ciBwdWJsaWMgZm9sZGVyLiBUaGlzIGNvbmZsaWN0cyB3aXRoIHRoZSBpbnRlcm5hbCAnL19uZXh0JyByb3V0ZS4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvcHVibGljLW5leHQtZm9sZGVyLWNvbmZsaWN0YDtcbmNvbnN0IFNTR19HRVRfSU5JVElBTF9QUk9QU19DT05GTElDVCA9IGBZb3UgY2FuIG5vdCB1c2UgZ2V0SW5pdGlhbFByb3BzIHdpdGggZ2V0U3RhdGljUHJvcHMuIFRvIHVzZSBTU0csIHBsZWFzZSByZW1vdmUgeW91ciBnZXRJbml0aWFsUHJvcHNgO1xuY29uc3QgU0VSVkVSX1BST1BTX0dFVF9JTklUX1BST1BTX0NPTkZMSUNUID0gYFlvdSBjYW4gbm90IHVzZSBnZXRJbml0aWFsUHJvcHMgd2l0aCBnZXRTZXJ2ZXJTaWRlUHJvcHMuIFBsZWFzZSByZW1vdmUgZ2V0SW5pdGlhbFByb3BzLmA7XG5jb25zdCBTRVJWRVJfUFJPUFNfU1NHX0NPTkZMSUNUID0gYFlvdSBjYW4gbm90IHVzZSBnZXRTdGF0aWNQcm9wcyBvciBnZXRTdGF0aWNQYXRocyB3aXRoIGdldFNlcnZlclNpZGVQcm9wcy4gVG8gdXNlIFNTRywgcGxlYXNlIHJlbW92ZSBnZXRTZXJ2ZXJTaWRlUHJvcHNgO1xuY29uc3QgU1RBVElDX1NUQVRVU19QQUdFX0dFVF9JTklUSUFMX1BST1BTX0VSUk9SID0gYGNhbiBub3QgaGF2ZSBnZXRJbml0aWFsUHJvcHMvZ2V0U2VydmVyU2lkZVByb3BzLCBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy80MDQtZ2V0LWluaXRpYWwtcHJvcHNgO1xuY29uc3QgU0VSVkVSX1BST1BTX0VYUE9SVF9FUlJPUiA9IGBwYWdlcyB3aXRoIFxcYGdldFNlcnZlclNpZGVQcm9wc1xcYCBjYW4gbm90IGJlIGV4cG9ydGVkLiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2dzc3AtZXhwb3J0YDtcbmNvbnN0IEdTUF9OT19SRVRVUk5FRF9WQUxVRSA9ICdZb3VyIGBnZXRTdGF0aWNQcm9wc2AgZnVuY3Rpb24gZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0LiBEaWQgeW91IGZvcmdldCB0byBhZGQgYSBgcmV0dXJuYD8nO1xuY29uc3QgR1NTUF9OT19SRVRVUk5FRF9WQUxVRSA9ICdZb3VyIGBnZXRTZXJ2ZXJTaWRlUHJvcHNgIGZ1bmN0aW9uIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdC4gRGlkIHlvdSBmb3JnZXQgdG8gYWRkIGEgYHJldHVybmA/JztcbmNvbnN0IFVOU1RBQkxFX1JFVkFMSURBVEVfUkVOQU1FX0VSUk9SID0gJ1RoZSBgdW5zdGFibGVfcmV2YWxpZGF0ZWAgcHJvcGVydHkgaXMgYXZhaWxhYmxlIGZvciBnZW5lcmFsIHVzZS5cXG4nICsgJ1BsZWFzZSB1c2UgYHJldmFsaWRhdGVgIGluc3RlYWQuJztcbmNvbnN0IEdTU1BfQ09NUE9ORU5UX01FTUJFUl9FUlJPUiA9IGBjYW4gbm90IGJlIGF0dGFjaGVkIHRvIGEgcGFnZSdzIGNvbXBvbmVudCBhbmQgbXVzdCBiZSBleHBvcnRlZCBmcm9tIHRoZSBwYWdlLiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2dzc3AtY29tcG9uZW50LW1lbWJlcmA7XG5jb25zdCBOT05fU1RBTkRBUkRfTk9ERV9FTlYgPSBgWW91IGFyZSB1c2luZyBhIG5vbi1zdGFuZGFyZCBcIk5PREVfRU5WXCIgdmFsdWUgaW4geW91ciBlbnZpcm9ubWVudC4gVGhpcyBjcmVhdGVzIGluY29uc2lzdGVuY2llcyBpbiB0aGUgcHJvamVjdCBhbmQgaXMgc3Ryb25nbHkgYWR2aXNlZCBhZ2FpbnN0LiBSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25vbi1zdGFuZGFyZC1ub2RlLWVudmA7XG5jb25zdCBTU0dfRkFMTEJBQ0tfRVhQT1JUX0VSUk9SID0gYFBhZ2VzIHdpdGggXFxgZmFsbGJhY2tcXGAgZW5hYmxlZCBpbiBcXGBnZXRTdGF0aWNQYXRoc1xcYCBjYW4gbm90IGJlIGV4cG9ydGVkLiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3NzZy1mYWxsYmFjay10cnVlLWV4cG9ydGA7XG5jb25zdCBFU0xJTlRfREVGQVVMVF9ESVJTID0gW1xuICAgICdhcHAnLFxuICAgICdwYWdlcycsXG4gICAgJ2NvbXBvbmVudHMnLFxuICAgICdsaWInLFxuICAgICdzcmMnXG5dO1xuY29uc3QgU0VSVkVSX1JVTlRJTUUgPSB7XG4gICAgZWRnZTogJ2VkZ2UnLFxuICAgIGV4cGVyaW1lbnRhbEVkZ2U6ICdleHBlcmltZW50YWwtZWRnZScsXG4gICAgbm9kZWpzOiAnbm9kZWpzJ1xufTtcbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSB3ZWJwYWNrIGxheWVycy4gVGhlc2UgbGF5ZXJzIGFyZSB0aGUgcHJpbWl0aXZlcyBmb3IgdGhlXG4gKiB3ZWJwYWNrIGNodW5rcy5cbiAqLyBjb25zdCBXRUJQQUNLX0xBWUVSU19OQU1FUyA9IHtcbiAgICAvKipcbiAgICogVGhlIGxheWVyIGZvciB0aGUgc2hhcmVkIGNvZGUgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgYnVuZGxlcy5cbiAgICovIHNoYXJlZDogJ3NoYXJlZCcsXG4gICAgLyoqXG4gICAqIFRoZSBsYXllciBmb3Igc2VydmVyLW9ubHkgcnVudGltZSBhbmQgcGlja2luZyB1cCBgcmVhY3Qtc2VydmVyYCBleHBvcnQgY29uZGl0aW9ucy5cbiAgICogSW5jbHVkaW5nIGFwcCByb3V0ZXIgUlNDIHBhZ2VzIGFuZCBhcHAgcm91dGVyIGN1c3RvbSByb3V0ZXMgYW5kIG1ldGFkYXRhIHJvdXRlcy5cbiAgICovIHJlYWN0U2VydmVyQ29tcG9uZW50czogJ3JzYycsXG4gICAgLyoqXG4gICAqIFNlcnZlciBTaWRlIFJlbmRlcmluZyBsYXllciBmb3IgYXBwIChzc3IpLlxuICAgKi8gc2VydmVyU2lkZVJlbmRlcmluZzogJ3NzcicsXG4gICAgLyoqXG4gICAqIFRoZSBicm93c2VyIGNsaWVudCBidW5kbGUgbGF5ZXIgZm9yIGFjdGlvbnMuXG4gICAqLyBhY3Rpb25Ccm93c2VyOiAnYWN0aW9uLWJyb3dzZXInLFxuICAgIC8qKlxuICAgKiBUaGUgTm9kZS5qcyBidW5kbGUgbGF5ZXIgZm9yIHRoZSBBUEkgcm91dGVzLlxuICAgKi8gYXBpTm9kZTogJ2FwaS1ub2RlJyxcbiAgICAvKipcbiAgICogVGhlIEVkZ2UgTGl0ZSBidW5kbGUgbGF5ZXIgZm9yIHRoZSBBUEkgcm91dGVzLlxuICAgKi8gYXBpRWRnZTogJ2FwaS1lZGdlJyxcbiAgICAvKipcbiAgICogVGhlIGxheWVyIGZvciB0aGUgbWlkZGxld2FyZSBjb2RlLlxuICAgKi8gbWlkZGxld2FyZTogJ21pZGRsZXdhcmUnLFxuICAgIC8qKlxuICAgKiBUaGUgbGF5ZXIgZm9yIHRoZSBpbnN0cnVtZW50YXRpb24gaG9va3MuXG4gICAqLyBpbnN0cnVtZW50OiAnaW5zdHJ1bWVudCcsXG4gICAgLyoqXG4gICAqIFRoZSBsYXllciBmb3IgYXNzZXRzIG9uIHRoZSBlZGdlLlxuICAgKi8gZWRnZUFzc2V0OiAnZWRnZS1hc3NldCcsXG4gICAgLyoqXG4gICAqIFRoZSBicm93c2VyIGNsaWVudCBidW5kbGUgbGF5ZXIgZm9yIEFwcCBkaXJlY3RvcnkuXG4gICAqLyBhcHBQYWdlc0Jyb3dzZXI6ICdhcHAtcGFnZXMtYnJvd3NlcicsXG4gICAgLyoqXG4gICAqIFRoZSBicm93c2VyIGNsaWVudCBidW5kbGUgbGF5ZXIgZm9yIFBhZ2VzIGRpcmVjdG9yeS5cbiAgICovIHBhZ2VzRGlyQnJvd3NlcjogJ3BhZ2VzLWRpci1icm93c2VyJyxcbiAgICAvKipcbiAgICogVGhlIEVkZ2UgTGl0ZSBidW5kbGUgbGF5ZXIgZm9yIFBhZ2VzIGRpcmVjdG9yeS5cbiAgICovIHBhZ2VzRGlyRWRnZTogJ3BhZ2VzLWRpci1lZGdlJyxcbiAgICAvKipcbiAgICogVGhlIE5vZGUuanMgYnVuZGxlIGxheWVyIGZvciBQYWdlcyBkaXJlY3RvcnkuXG4gICAqLyBwYWdlc0Rpck5vZGU6ICdwYWdlcy1kaXItbm9kZSdcbn07XG5jb25zdCBXRUJQQUNLX0xBWUVSUyA9IHtcbiAgICAuLi5XRUJQQUNLX0xBWUVSU19OQU1FUyxcbiAgICBHUk9VUDoge1xuICAgICAgICBidWlsdGluUmVhY3Q6IFtcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLnJlYWN0U2VydmVyQ29tcG9uZW50cyxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFjdGlvbkJyb3dzZXJcbiAgICAgICAgXSxcbiAgICAgICAgc2VydmVyT25seTogW1xuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMucmVhY3RTZXJ2ZXJDb21wb25lbnRzLFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuYWN0aW9uQnJvd3NlcixcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmluc3RydW1lbnQsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5taWRkbGV3YXJlXG4gICAgICAgIF0sXG4gICAgICAgIG5ldXRyYWxUYXJnZXQ6IFtcbiAgICAgICAgICAgIC8vIHBhZ2VzIGFwaVxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuYXBpTm9kZSxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFwaUVkZ2VcbiAgICAgICAgXSxcbiAgICAgICAgY2xpZW50T25seTogW1xuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuc2VydmVyU2lkZVJlbmRlcmluZyxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFwcFBhZ2VzQnJvd3NlclxuICAgICAgICBdLFxuICAgICAgICBidW5kbGVkOiBbXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5yZWFjdFNlcnZlckNvbXBvbmVudHMsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hY3Rpb25Ccm93c2VyLFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuc2VydmVyU2lkZVJlbmRlcmluZyxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFwcFBhZ2VzQnJvd3NlcixcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLnNoYXJlZCxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmluc3RydW1lbnQsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5taWRkbGV3YXJlXG4gICAgICAgIF0sXG4gICAgICAgIGFwcFBhZ2VzOiBbXG4gICAgICAgICAgICAvLyBhcHAgcm91dGVyIHBhZ2VzIGFuZCBsYXlvdXRzXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5yZWFjdFNlcnZlckNvbXBvbmVudHMsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5zZXJ2ZXJTaWRlUmVuZGVyaW5nLFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuYXBwUGFnZXNCcm93c2VyLFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuYWN0aW9uQnJvd3NlclxuICAgICAgICBdXG4gICAgfVxufTtcbmNvbnN0IFdFQlBBQ0tfUkVTT1VSQ0VfUVVFUklFUyA9IHtcbiAgICBlZGdlU1NSRW50cnk6ICdfX25leHRfZWRnZV9zc3JfZW50cnlfXycsXG4gICAgbWV0YWRhdGE6ICdfX25leHRfbWV0YWRhdGFfXycsXG4gICAgbWV0YWRhdGFSb3V0ZTogJ19fbmV4dF9tZXRhZGF0YV9yb3V0ZV9fJyxcbiAgICBtZXRhZGF0YUltYWdlTWV0YTogJ19fbmV4dF9tZXRhZGF0YV9pbWFnZV9tZXRhX18nXG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/lib/constants.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/lib/is-api-route.js":
|
||
/*!****************************************************!*\
|
||
!*** ./node_modules/next/dist/lib/is-api-route.js ***!
|
||
\****************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isAPIRoute\", ({\n enumerable: true,\n get: function() {\n return isAPIRoute;\n }\n}));\nfunction isAPIRoute(value) {\n return value === '/api' || Boolean(value == null ? void 0 : value.startsWith('/api/'));\n}\n\n//# sourceMappingURL=is-api-route.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL2lzLWFwaS1yb3V0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDhDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxsaWJcXGlzLWFwaS1yb3V0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQVBJUm91dGVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzQVBJUm91dGU7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBpc0FQSVJvdXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnL2FwaScgfHwgQm9vbGVhbih2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuc3RhcnRzV2l0aCgnL2FwaS8nKSk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzLWFwaS1yb3V0ZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/lib/is-api-route.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/lib/is-error.js":
|
||
/*!************************************************!*\
|
||
!*** ./node_modules/next/dist/lib/is-error.js ***!
|
||
\************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n /**\n * Checks whether the given value is a NextError.\n * This can be used to print a more detailed error message with properties like `code` & `digest`.\n */ default: function() {\n return isError;\n },\n getProperError: function() {\n return getProperError;\n }\n});\nconst _isplainobject = __webpack_require__(/*! ../shared/lib/is-plain-object */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/is-plain-object.js\");\nfunction isError(err) {\n return typeof err === 'object' && err !== null && 'name' in err && 'message' in err;\n}\nfunction safeStringify(obj) {\n const seen = new WeakSet();\n return JSON.stringify(obj, (_key, value)=>{\n // If value is an object and already seen, replace with \"[Circular]\"\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n return value;\n });\n}\nfunction getProperError(err) {\n if (isError(err)) {\n return err;\n }\n if (true) {\n // provide better error for case where `throw undefined`\n // is called in development\n if (typeof err === 'undefined') {\n return Object.defineProperty(new Error('An undefined error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'), \"__NEXT_ERROR_CODE\", {\n value: \"E98\",\n enumerable: false,\n configurable: true\n });\n }\n if (err === null) {\n return Object.defineProperty(new Error('A null error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'), \"__NEXT_ERROR_CODE\", {\n value: \"E336\",\n enumerable: false,\n configurable: true\n });\n }\n }\n return Object.defineProperty(new Error((0, _isplainobject.isPlainObject)(err) ? safeStringify(err) : err + ''), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n}\n\n//# sourceMappingURL=is-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL2lzLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUdMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELHVCQUF1QixtQkFBTyxDQUFDLGlIQUErQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXNDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUEiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcbGliXFxpcy1lcnJvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgZ2V0UHJvcGVyRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBOZXh0RXJyb3IuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHByaW50IGEgbW9yZSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlIHdpdGggcHJvcGVydGllcyBsaWtlIGBjb2RlYCAmIGBkaWdlc3RgLlxuICovIGRlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNFcnJvcjtcbiAgICB9LFxuICAgIGdldFByb3BlckVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFByb3BlckVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgX2lzcGxhaW5vYmplY3QgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9pcy1wbGFpbi1vYmplY3RcIik7XG5mdW5jdGlvbiBpc0Vycm9yKGVycikge1xuICAgIHJldHVybiB0eXBlb2YgZXJyID09PSAnb2JqZWN0JyAmJiBlcnIgIT09IG51bGwgJiYgJ25hbWUnIGluIGVyciAmJiAnbWVzc2FnZScgaW4gZXJyO1xufVxuZnVuY3Rpb24gc2FmZVN0cmluZ2lmeShvYmopIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCAoX2tleSwgdmFsdWUpPT57XG4gICAgICAgIC8vIElmIHZhbHVlIGlzIGFuIG9iamVjdCBhbmQgYWxyZWFkeSBzZWVuLCByZXBsYWNlIHdpdGggXCJbQ2lyY3VsYXJdXCJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlckVycm9yKGVycikge1xuICAgIGlmIChpc0Vycm9yKGVycikpIHtcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIC8vIHByb3ZpZGUgYmV0dGVyIGVycm9yIGZvciBjYXNlIHdoZXJlIGB0aHJvdyB1bmRlZmluZWRgXG4gICAgICAgIC8vIGlzIGNhbGxlZCBpbiBkZXZlbG9wbWVudFxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3IEVycm9yKCdBbiB1bmRlZmluZWQgZXJyb3Igd2FzIHRocm93biwgJyArICdzZWUgaGVyZSBmb3IgbW9yZSBpbmZvOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy90aHJldy11bmRlZmluZWQnKSwgXCJfX05FWFRfRVJST1JfQ09ERVwiLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiRTk4XCIsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcignQSBudWxsIGVycm9yIHdhcyB0aHJvd24sICcgKyAnc2VlIGhlcmUgZm9yIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvdGhyZXctdW5kZWZpbmVkJyksIFwiX19ORVhUX0VSUk9SX0NPREVcIiwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBcIkUzMzZcIixcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3IEVycm9yKCgwLCBfaXNwbGFpbm9iamVjdC5pc1BsYWluT2JqZWN0KShlcnIpID8gc2FmZVN0cmluZ2lmeShlcnIpIDogZXJyICsgJycpLCBcIl9fTkVYVF9FUlJPUl9DT0RFXCIsIHtcbiAgICAgICAgdmFsdWU6IFwiRTM5NFwiLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzLWVycm9yLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/lib/is-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/lib/require-instrumentation-client.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/lib/require-instrumentation-client.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * This module imports the client instrumentation hook from the project root.\n *\n * The `private-next-instrumentation-client` module is automatically aliased to\n * the `instrumentation-client.ts` file in the project root by webpack or turbopack.\n */ \nif (true) {\n const measureName = 'Client Instrumentation Hook';\n const startTime = performance.now();\n // eslint-disable-next-line @next/internal/typechecked-require -- Not a module.\n module.exports = __webpack_require__(/*! private-next-instrumentation-client */ \"?608e\");\n const endTime = performance.now();\n const duration = endTime - startTime;\n // Using 16ms threshold as it represents one frame (1000ms/60fps)\n // This helps identify if the instrumentation hook initialization\n // could potentially cause frame drops during development.\n const THRESHOLD = 16;\n if (duration > THRESHOLD) {\n console.log(`[${measureName}] Slow execution detected: ${duration.toFixed(0)}ms (Note: Code download overhead is not included in this measurement)`);\n }\n} else {}\n\n//# sourceMappingURL=require-instrumentation-client.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL3JlcXVpcmUtaW5zdHJ1bWVudGF0aW9uLWNsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBaUI7QUFDakIsSUFBSSxJQUFzQztBQUMxQztBQUNBO0FBQ0E7QUFDQSxJQUFJLHdGQUErRDtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixZQUFZLDZCQUE2QixvQkFBb0I7QUFDckY7QUFDQSxFQUFFLEtBQUssRUFHTjs7QUFFRCIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxsaWJcXHJlcXVpcmUtaW5zdHJ1bWVudGF0aW9uLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgbW9kdWxlIGltcG9ydHMgdGhlIGNsaWVudCBpbnN0cnVtZW50YXRpb24gaG9vayBmcm9tIHRoZSBwcm9qZWN0IHJvb3QuXG4gKlxuICogVGhlIGBwcml2YXRlLW5leHQtaW5zdHJ1bWVudGF0aW9uLWNsaWVudGAgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgYWxpYXNlZCB0b1xuICogdGhlIGBpbnN0cnVtZW50YXRpb24tY2xpZW50LnRzYCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgYnkgd2VicGFjayBvciB0dXJib3BhY2suXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICBjb25zdCBtZWFzdXJlTmFtZSA9ICdDbGllbnQgSW5zdHJ1bWVudGF0aW9uIEhvb2snO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAbmV4dC9pbnRlcm5hbC90eXBlY2hlY2tlZC1yZXF1aXJlIC0tIE5vdCBhIG1vZHVsZS5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ3ByaXZhdGUtbmV4dC1pbnN0cnVtZW50YXRpb24tY2xpZW50Jyk7XG4gICAgY29uc3QgZW5kVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcbiAgICAvLyBVc2luZyAxNm1zIHRocmVzaG9sZCBhcyBpdCByZXByZXNlbnRzIG9uZSBmcmFtZSAoMTAwMG1zLzYwZnBzKVxuICAgIC8vIFRoaXMgaGVscHMgaWRlbnRpZnkgaWYgdGhlIGluc3RydW1lbnRhdGlvbiBob29rIGluaXRpYWxpemF0aW9uXG4gICAgLy8gY291bGQgcG90ZW50aWFsbHkgY2F1c2UgZnJhbWUgZHJvcHMgZHVyaW5nIGRldmVsb3BtZW50LlxuICAgIGNvbnN0IFRIUkVTSE9MRCA9IDE2O1xuICAgIGlmIChkdXJhdGlvbiA+IFRIUkVTSE9MRCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgWyR7bWVhc3VyZU5hbWV9XSBTbG93IGV4ZWN1dGlvbiBkZXRlY3RlZDogJHtkdXJhdGlvbi50b0ZpeGVkKDApfW1zIChOb3RlOiBDb2RlIGRvd25sb2FkIG92ZXJoZWFkIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzIG1lYXN1cmVtZW50KWApO1xuICAgIH1cbn0gZWxzZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBuZXh0L2ludGVybmFsL3R5cGVjaGVja2VkLXJlcXVpcmUgLS0gTm90IGEgbW9kdWxlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgncHJpdmF0ZS1uZXh0LWluc3RydW1lbnRhdGlvbi1jbGllbnQnKTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWlyZS1pbnN0cnVtZW50YXRpb24tY2xpZW50LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/lib/require-instrumentation-client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/next-devtools/shared/forward-logs-shared.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/shared/forward-logs-shared.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n UNDEFINED_MARKER: function() {\n return UNDEFINED_MARKER;\n },\n patchConsoleMethod: function() {\n return patchConsoleMethod;\n }\n});\nconst UNDEFINED_MARKER = '__next_tagged_undefined';\nfunction patchConsoleMethod(methodName, wrapper) {\n const descriptor = Object.getOwnPropertyDescriptor(console, methodName);\n if (descriptor && (descriptor.configurable || descriptor.writable) && typeof descriptor.value === 'function') {\n const originalMethod = descriptor.value;\n const originalName = Object.getOwnPropertyDescriptor(originalMethod, 'name');\n const wrapperMethod = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n wrapper(methodName, ...args);\n originalMethod.apply(this, args);\n };\n if (originalName) {\n Object.defineProperty(wrapperMethod, 'name', originalName);\n }\n Object.defineProperty(console, methodName, {\n value: wrapperMethod\n });\n return ()=>{\n Object.defineProperty(console, methodName, {\n value: originalMethod,\n writable: descriptor.writable,\n configurable: descriptor.configurable\n });\n };\n }\n return ()=>{};\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=forward-logs-shared.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvZm9yd2FyZC1sb2dzLXNoYXJlZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FHTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRSxhQUFhO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcbmV4dC1kZXZ0b29sc1xcc2hhcmVkXFxmb3J3YXJkLWxvZ3Mtc2hhcmVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVU5ERUZJTkVEX01BUktFUjogbnVsbCxcbiAgICBwYXRjaENvbnNvbGVNZXRob2Q6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgVU5ERUZJTkVEX01BUktFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBVTkRFRklORURfTUFSS0VSO1xuICAgIH0sXG4gICAgcGF0Y2hDb25zb2xlTWV0aG9kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHBhdGNoQ29uc29sZU1ldGhvZDtcbiAgICB9XG59KTtcbmNvbnN0IFVOREVGSU5FRF9NQVJLRVIgPSAnX19uZXh0X3RhZ2dlZF91bmRlZmluZWQnO1xuZnVuY3Rpb24gcGF0Y2hDb25zb2xlTWV0aG9kKG1ldGhvZE5hbWUsIHdyYXBwZXIpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25zb2xlLCBtZXRob2ROYW1lKTtcbiAgICBpZiAoZGVzY3JpcHRvciAmJiAoZGVzY3JpcHRvci5jb25maWd1cmFibGUgfHwgZGVzY3JpcHRvci53cml0YWJsZSkgJiYgdHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICBjb25zdCBvcmlnaW5hbE5hbWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9yaWdpbmFsTWV0aG9kLCAnbmFtZScpO1xuICAgICAgICBjb25zdCB3cmFwcGVyTWV0aG9kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyYXBwZXIobWV0aG9kTmFtZSwgLi4uYXJncyk7XG4gICAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdyYXBwZXJNZXRob2QsICduYW1lJywgb3JpZ2luYWxOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc29sZSwgbWV0aG9kTmFtZSwge1xuICAgICAgICAgICAgdmFsdWU6IHdyYXBwZXJNZXRob2RcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnNvbGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogb3JpZ2luYWxNZXRob2QsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGRlc2NyaXB0b3Iud3JpdGFibGUsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAoKT0+e307XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcndhcmQtbG9ncy1zaGFyZWQuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/next-devtools/shared/forward-logs-shared.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/next-devtools/shared/react-18-hydration-error.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/shared/react-18-hydration-error.js ***!
|
||
\*********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getHydrationWarningType: function() {\n return getHydrationWarningType;\n },\n isHydrationError: function() {\n return isHydrationError;\n },\n isHydrationWarning: function() {\n return isHydrationWarning;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../lib/is-error */ \"(pages-dir-browser)/./node_modules/next/dist/lib/is-error.js\"));\nfunction isHydrationError(error) {\n return (0, _iserror.default)(error) && (error.message === 'Hydration failed because the initial UI does not match what was rendered on the server.' || error.message === 'Text content does not match server-rendered HTML.');\n}\nfunction isHydrationWarning(message) {\n return isHtmlTagsWarning(message) || isTextInTagsMismatchWarning(message) || isTextWarning(message);\n}\n// https://github.com/facebook/react/blob/main/packages/react-dom/src/__tests__/ReactDOMHydrationDiff-test.js used as a reference\nconst htmlTagsWarnings = new Set([\n 'Warning: Expected server HTML to contain a matching <%s> in <%s>.%s',\n 'Warning: Did not expect server HTML to contain a <%s> in <%s>.%s'\n]);\nconst textAndTagsMismatchWarnings = new Set([\n 'Warning: Expected server HTML to contain a matching text node for \"%s\" in <%s>.%s',\n 'Warning: Did not expect server HTML to contain the text node \"%s\" in <%s>.%s'\n]);\nconst textWarnings = new Set([\n 'Warning: Text content did not match. Server: \"%s\" Client: \"%s\"%s'\n]);\nconst getHydrationWarningType = (message)=>{\n if (typeof message !== 'string') {\n // TODO: Doesn't make sense to treat no message as a hydration error message.\n // We should bail out somewhere earlier.\n return 'text';\n }\n const normalizedMessage = message.startsWith('Warning: ') ? message : \"Warning: \" + message;\n if (isHtmlTagsWarning(normalizedMessage)) return 'tag';\n if (isTextInTagsMismatchWarning(normalizedMessage)) return 'text-in-tag';\n return 'text';\n};\nconst isHtmlTagsWarning = (message)=>typeof message === 'string' && htmlTagsWarnings.has(message);\nconst isTextInTagsMismatchWarning = (msg)=>typeof msg === 'string' && textAndTagsMismatchWarnings.has(msg);\nconst isTextWarning = (msg)=>typeof msg === 'string' && textWarnings.has(msg);\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=react-18-hydration-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvcmVhY3QtMTgtaHlkcmF0aW9uLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUlMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsaUNBQWlDLG1CQUFPLENBQUMsZ0lBQXlDO0FBQ2xGLDBEQUEwRCxtQkFBTyxDQUFDLHdGQUFvQjtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJEOlxcZG9uZ3l1bi1wcm9qZWN0c1xcdHdvXFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXG5leHQtZGV2dG9vbHNcXHNoYXJlZFxccmVhY3QtMTgtaHlkcmF0aW9uLWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZ2V0SHlkcmF0aW9uV2FybmluZ1R5cGU6IG51bGwsXG4gICAgaXNIeWRyYXRpb25FcnJvcjogbnVsbCxcbiAgICBpc0h5ZHJhdGlvbldhcm5pbmc6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZ2V0SHlkcmF0aW9uV2FybmluZ1R5cGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SHlkcmF0aW9uV2FybmluZ1R5cGU7XG4gICAgfSxcbiAgICBpc0h5ZHJhdGlvbkVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzSHlkcmF0aW9uRXJyb3I7XG4gICAgfSxcbiAgICBpc0h5ZHJhdGlvbldhcm5pbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNIeWRyYXRpb25XYXJuaW5nO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pc2Vycm9yID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vLi4vbGliL2lzLWVycm9yXCIpKTtcbmZ1bmN0aW9uIGlzSHlkcmF0aW9uRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gKDAsIF9pc2Vycm9yLmRlZmF1bHQpKGVycm9yKSAmJiAoZXJyb3IubWVzc2FnZSA9PT0gJ0h5ZHJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgaW5pdGlhbCBVSSBkb2VzIG5vdCBtYXRjaCB3aGF0IHdhcyByZW5kZXJlZCBvbiB0aGUgc2VydmVyLicgfHwgZXJyb3IubWVzc2FnZSA9PT0gJ1RleHQgY29udGVudCBkb2VzIG5vdCBtYXRjaCBzZXJ2ZXItcmVuZGVyZWQgSFRNTC4nKTtcbn1cbmZ1bmN0aW9uIGlzSHlkcmF0aW9uV2FybmluZyhtZXNzYWdlKSB7XG4gICAgcmV0dXJuIGlzSHRtbFRhZ3NXYXJuaW5nKG1lc3NhZ2UpIHx8IGlzVGV4dEluVGFnc01pc21hdGNoV2FybmluZyhtZXNzYWdlKSB8fCBpc1RleHRXYXJuaW5nKG1lc3NhZ2UpO1xufVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC1kb20vc3JjL19fdGVzdHNfXy9SZWFjdERPTUh5ZHJhdGlvbkRpZmYtdGVzdC5qcyB1c2VkIGFzIGEgcmVmZXJlbmNlXG5jb25zdCBodG1sVGFnc1dhcm5pbmdzID0gbmV3IFNldChbXG4gICAgJ1dhcm5pbmc6IEV4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyA8JXM+IGluIDwlcz4uJXMnLFxuICAgICdXYXJuaW5nOiBEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgPCVzPiBpbiA8JXM+LiVzJ1xuXSk7XG5jb25zdCB0ZXh0QW5kVGFnc01pc21hdGNoV2FybmluZ3MgPSBuZXcgU2V0KFtcbiAgICAnV2FybmluZzogRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIHRleHQgbm9kZSBmb3IgXCIlc1wiIGluIDwlcz4uJXMnLFxuICAgICdXYXJuaW5nOiBEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIHRoZSB0ZXh0IG5vZGUgXCIlc1wiIGluIDwlcz4uJXMnXG5dKTtcbmNvbnN0IHRleHRXYXJuaW5ncyA9IG5ldyBTZXQoW1xuICAgICdXYXJuaW5nOiBUZXh0IGNvbnRlbnQgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiBcIiVzXCIgQ2xpZW50OiBcIiVzXCIlcydcbl0pO1xuY29uc3QgZ2V0SHlkcmF0aW9uV2FybmluZ1R5cGUgPSAobWVzc2FnZSk9PntcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFRPRE86IERvZXNuJ3QgbWFrZSBzZW5zZSB0byB0cmVhdCBubyBtZXNzYWdlIGFzIGEgaHlkcmF0aW9uIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgIC8vIFdlIHNob3VsZCBiYWlsIG91dCBzb21ld2hlcmUgZWFybGllci5cbiAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZE1lc3NhZ2UgPSBtZXNzYWdlLnN0YXJ0c1dpdGgoJ1dhcm5pbmc6ICcpID8gbWVzc2FnZSA6IFwiV2FybmluZzogXCIgKyBtZXNzYWdlO1xuICAgIGlmIChpc0h0bWxUYWdzV2FybmluZyhub3JtYWxpemVkTWVzc2FnZSkpIHJldHVybiAndGFnJztcbiAgICBpZiAoaXNUZXh0SW5UYWdzTWlzbWF0Y2hXYXJuaW5nKG5vcm1hbGl6ZWRNZXNzYWdlKSkgcmV0dXJuICd0ZXh0LWluLXRhZyc7XG4gICAgcmV0dXJuICd0ZXh0Jztcbn07XG5jb25zdCBpc0h0bWxUYWdzV2FybmluZyA9IChtZXNzYWdlKT0+dHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIGh0bWxUYWdzV2FybmluZ3MuaGFzKG1lc3NhZ2UpO1xuY29uc3QgaXNUZXh0SW5UYWdzTWlzbWF0Y2hXYXJuaW5nID0gKG1zZyk9PnR5cGVvZiBtc2cgPT09ICdzdHJpbmcnICYmIHRleHRBbmRUYWdzTWlzbWF0Y2hXYXJuaW5ncy5oYXMobXNnKTtcbmNvbnN0IGlzVGV4dFdhcm5pbmcgPSAobXNnKT0+dHlwZW9mIG1zZyA9PT0gJ3N0cmluZycgJiYgdGV4dFdhcm5pbmdzLmhhcyhtc2cpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC0xOC1oeWRyYXRpb24tZXJyb3IuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/next-devtools/shared/react-18-hydration-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/next-devtools/shared/react-19-hydration-error.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/shared/react-19-hydration-error.js ***!
|
||
\*********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n NEXTJS_HYDRATION_ERROR_LINK: function() {\n return NEXTJS_HYDRATION_ERROR_LINK;\n },\n REACT_HYDRATION_ERROR_LINK: function() {\n return REACT_HYDRATION_ERROR_LINK;\n },\n getHydrationErrorStackInfo: function() {\n return getHydrationErrorStackInfo;\n },\n isErrorMessageWithComponentStackDiff: function() {\n return isErrorMessageWithComponentStackDiff;\n },\n isHydrationError: function() {\n return isHydrationError;\n }\n});\nconst REACT_HYDRATION_ERROR_LINK = 'https://react.dev/link/hydration-mismatch';\nconst NEXTJS_HYDRATION_ERROR_LINK = 'https://nextjs.org/docs/messages/react-hydration-error';\n/**\n * Only React 19+ contains component stack diff in the error message\n */ const errorMessagesWithComponentStackDiff = [\n /^In HTML, (.+?) cannot be a child of <(.+?)>\\.(.*)\\nThis will cause a hydration error\\.(.*)/,\n /^In HTML, (.+?) cannot be a descendant of <(.+?)>\\.\\nThis will cause a hydration error\\.(.*)/,\n /^In HTML, text nodes cannot be a child of <(.+?)>\\.\\nThis will cause a hydration error\\./,\n /^In HTML, whitespace text nodes cannot be a child of <(.+?)>\\. Make sure you don't have any extra whitespace between tags on each line of your source code\\.\\nThis will cause a hydration error\\./\n];\nfunction isHydrationError(error) {\n return isErrorMessageWithComponentStackDiff(error.message) || /Hydration failed because the server rendered (text|HTML) didn't match the client\\./.test(error.message) || /A tree hydrated but some attributes of the server rendered HTML didn't match the client properties./.test(error.message);\n}\nfunction isErrorMessageWithComponentStackDiff(msg) {\n return errorMessagesWithComponentStackDiff.some((regex)=>regex.test(msg));\n}\nfunction getHydrationErrorStackInfo(error) {\n const errorMessage = error.message;\n if (isErrorMessageWithComponentStackDiff(errorMessage)) {\n const [message, diffLog = ''] = errorMessage.split('\\n\\n');\n const diff = diffLog.trim();\n return {\n message: diff === '' ? errorMessage.trim() : message.trim(),\n diff,\n notes: null\n };\n }\n const [message, maybeComponentStackDiff] = errorMessage.split(\"\" + REACT_HYDRATION_ERROR_LINK);\n const trimmedMessage = message.trim();\n // React built-in hydration diff starts with a newline\n if (maybeComponentStackDiff !== undefined && maybeComponentStackDiff.length > 1) {\n const diffs = [];\n maybeComponentStackDiff.split('\\n').forEach((line)=>{\n if (line.trim() === '') return;\n if (!line.trim().startsWith('at ')) {\n diffs.push(line);\n }\n });\n const [displayedMessage, ...notes] = trimmedMessage.split('\\n\\n');\n return {\n message: displayedMessage,\n diff: diffs.join('\\n'),\n notes: notes.join('\\n\\n') || null\n };\n } else {\n const [displayedMessage, ...notes] = trimmedMessage.split('\\n\\n');\n return {\n message: displayedMessage,\n diff: null,\n notes: notes.join('\\n\\n')\n };\n }\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=react-19-hydration-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvcmVhY3QtMTktaHlkcmF0aW9uLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQU1MO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJEOlxcZG9uZ3l1bi1wcm9qZWN0c1xcdHdvXFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXG5leHQtZGV2dG9vbHNcXHNoYXJlZFxccmVhY3QtMTktaHlkcmF0aW9uLWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTkVYVEpTX0hZRFJBVElPTl9FUlJPUl9MSU5LOiBudWxsLFxuICAgIFJFQUNUX0hZRFJBVElPTl9FUlJPUl9MSU5LOiBudWxsLFxuICAgIGdldEh5ZHJhdGlvbkVycm9yU3RhY2tJbmZvOiBudWxsLFxuICAgIGlzRXJyb3JNZXNzYWdlV2l0aENvbXBvbmVudFN0YWNrRGlmZjogbnVsbCxcbiAgICBpc0h5ZHJhdGlvbkVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIE5FWFRKU19IWURSQVRJT05fRVJST1JfTElOSzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUSlNfSFlEUkFUSU9OX0VSUk9SX0xJTks7XG4gICAgfSxcbiAgICBSRUFDVF9IWURSQVRJT05fRVJST1JfTElOSzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSRUFDVF9IWURSQVRJT05fRVJST1JfTElOSztcbiAgICB9LFxuICAgIGdldEh5ZHJhdGlvbkVycm9yU3RhY2tJbmZvOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEh5ZHJhdGlvbkVycm9yU3RhY2tJbmZvO1xuICAgIH0sXG4gICAgaXNFcnJvck1lc3NhZ2VXaXRoQ29tcG9uZW50U3RhY2tEaWZmOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzRXJyb3JNZXNzYWdlV2l0aENvbXBvbmVudFN0YWNrRGlmZjtcbiAgICB9LFxuICAgIGlzSHlkcmF0aW9uRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNIeWRyYXRpb25FcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IFJFQUNUX0hZRFJBVElPTl9FUlJPUl9MSU5LID0gJ2h0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaHlkcmF0aW9uLW1pc21hdGNoJztcbmNvbnN0IE5FWFRKU19IWURSQVRJT05fRVJST1JfTElOSyA9ICdodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9yZWFjdC1oeWRyYXRpb24tZXJyb3InO1xuLyoqXG4gKiBPbmx5IFJlYWN0IDE5KyBjb250YWlucyBjb21wb25lbnQgc3RhY2sgZGlmZiBpbiB0aGUgZXJyb3IgbWVzc2FnZVxuICovIGNvbnN0IGVycm9yTWVzc2FnZXNXaXRoQ29tcG9uZW50U3RhY2tEaWZmID0gW1xuICAgIC9eSW4gSFRNTCwgKC4rPykgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCguKz8pPlxcLiguKilcXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3JcXC4oLiopLyxcbiAgICAvXkluIEhUTUwsICguKz8pIGNhbm5vdCBiZSBhIGRlc2NlbmRhbnQgb2YgPCguKz8pPlxcLlxcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvclxcLiguKikvLFxuICAgIC9eSW4gSFRNTCwgdGV4dCBub2RlcyBjYW5ub3QgYmUgYSBjaGlsZCBvZiA8KC4rPyk+XFwuXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yXFwuLyxcbiAgICAvXkluIEhUTUwsIHdoaXRlc3BhY2UgdGV4dCBub2RlcyBjYW5ub3QgYmUgYSBjaGlsZCBvZiA8KC4rPyk+XFwuIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGVcXC5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3JcXC4vXG5dO1xuZnVuY3Rpb24gaXNIeWRyYXRpb25FcnJvcihlcnJvcikge1xuICAgIHJldHVybiBpc0Vycm9yTWVzc2FnZVdpdGhDb21wb25lbnRTdGFja0RpZmYoZXJyb3IubWVzc2FnZSkgfHwgL0h5ZHJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgc2VydmVyIHJlbmRlcmVkICh0ZXh0fEhUTUwpIGRpZG4ndCBtYXRjaCB0aGUgY2xpZW50XFwuLy50ZXN0KGVycm9yLm1lc3NhZ2UpIHx8IC9BIHRyZWUgaHlkcmF0ZWQgYnV0IHNvbWUgYXR0cmlidXRlcyBvZiB0aGUgc2VydmVyIHJlbmRlcmVkIEhUTUwgZGlkbid0IG1hdGNoIHRoZSBjbGllbnQgcHJvcGVydGllcy4vLnRlc3QoZXJyb3IubWVzc2FnZSk7XG59XG5mdW5jdGlvbiBpc0Vycm9yTWVzc2FnZVdpdGhDb21wb25lbnRTdGFja0RpZmYobXNnKSB7XG4gICAgcmV0dXJuIGVycm9yTWVzc2FnZXNXaXRoQ29tcG9uZW50U3RhY2tEaWZmLnNvbWUoKHJlZ2V4KT0+cmVnZXgudGVzdChtc2cpKTtcbn1cbmZ1bmN0aW9uIGdldEh5ZHJhdGlvbkVycm9yU3RhY2tJbmZvKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICBpZiAoaXNFcnJvck1lc3NhZ2VXaXRoQ29tcG9uZW50U3RhY2tEaWZmKGVycm9yTWVzc2FnZSkpIHtcbiAgICAgICAgY29uc3QgW21lc3NhZ2UsIGRpZmZMb2cgPSAnJ10gPSBlcnJvck1lc3NhZ2Uuc3BsaXQoJ1xcblxcbicpO1xuICAgICAgICBjb25zdCBkaWZmID0gZGlmZkxvZy50cmltKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBkaWZmID09PSAnJyA/IGVycm9yTWVzc2FnZS50cmltKCkgOiBtZXNzYWdlLnRyaW0oKSxcbiAgICAgICAgICAgIGRpZmYsXG4gICAgICAgICAgICBub3RlczogbnVsbFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBbbWVzc2FnZSwgbWF5YmVDb21wb25lbnRTdGFja0RpZmZdID0gZXJyb3JNZXNzYWdlLnNwbGl0KFwiXCIgKyBSRUFDVF9IWURSQVRJT05fRVJST1JfTElOSyk7XG4gICAgY29uc3QgdHJpbW1lZE1lc3NhZ2UgPSBtZXNzYWdlLnRyaW0oKTtcbiAgICAvLyBSZWFjdCBidWlsdC1pbiBoeWRyYXRpb24gZGlmZiBzdGFydHMgd2l0aCBhIG5ld2xpbmVcbiAgICBpZiAobWF5YmVDb21wb25lbnRTdGFja0RpZmYgIT09IHVuZGVmaW5lZCAmJiBtYXliZUNvbXBvbmVudFN0YWNrRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGRpZmZzID0gW107XG4gICAgICAgIG1heWJlQ29tcG9uZW50U3RhY2tEaWZmLnNwbGl0KCdcXG4nKS5mb3JFYWNoKChsaW5lKT0+e1xuICAgICAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdhdCAnKSkge1xuICAgICAgICAgICAgICAgIGRpZmZzLnB1c2gobGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBbZGlzcGxheWVkTWVzc2FnZSwgLi4ubm90ZXNdID0gdHJpbW1lZE1lc3NhZ2Uuc3BsaXQoJ1xcblxcbicpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogZGlzcGxheWVkTWVzc2FnZSxcbiAgICAgICAgICAgIGRpZmY6IGRpZmZzLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgbm90ZXM6IG5vdGVzLmpvaW4oJ1xcblxcbicpIHx8IG51bGxcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbZGlzcGxheWVkTWVzc2FnZSwgLi4ubm90ZXNdID0gdHJpbW1lZE1lc3NhZ2Uuc3BsaXQoJ1xcblxcbicpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogZGlzcGxheWVkTWVzc2FnZSxcbiAgICAgICAgICAgIGRpZmY6IG51bGwsXG4gICAgICAgICAgICBub3Rlczogbm90ZXMuam9pbignXFxuXFxuJylcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlYWN0LTE5LWh5ZHJhdGlvbi1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/next-devtools/shared/react-19-hydration-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n coerceError: function() {\n return coerceError;\n },\n decorateDevError: function() {\n return decorateDevError;\n },\n getComponentStack: function() {\n return getComponentStack;\n },\n getOwnerStack: function() {\n return getOwnerStack;\n },\n setComponentStack: function() {\n return setComponentStack;\n },\n setOwnerStack: function() {\n return setOwnerStack;\n },\n setOwnerStackIfAvailable: function() {\n return setOwnerStackIfAvailable;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../lib/is-error */ \"(pages-dir-browser)/./node_modules/next/dist/lib/is-error.js\"));\nconst ownerStacks = new WeakMap();\nconst componentStacks = new WeakMap();\nfunction getComponentStack(error) {\n return componentStacks.get(error);\n}\nfunction setComponentStack(error, stack) {\n componentStacks.set(error, stack);\n}\nfunction getOwnerStack(error) {\n return ownerStacks.get(error);\n}\nfunction setOwnerStack(error, stack) {\n ownerStacks.set(error, stack);\n}\nfunction coerceError(value) {\n return (0, _iserror.default)(value) ? value : Object.defineProperty(new Error('' + value), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n}\nfunction setOwnerStackIfAvailable(error) {\n // React 18 and prod does not have `captureOwnerStack`\n if ('captureOwnerStack' in _react.default) {\n setOwnerStack(error, _react.default.captureOwnerStack());\n }\n}\nfunction decorateDevError(thrownValue, errorInfo) {\n const error = coerceError(thrownValue);\n setOwnerStackIfAvailable(error);\n // TODO: change to passing down errorInfo later\n // In development mode, pass along the component stack to the error\n if (errorInfo.componentStack) {\n setComponentStack(error, errorInfo.componentStack);\n }\n return error;\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=stitched-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9zdGl0Y2hlZC1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FRTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsaUNBQWlDLG1CQUFPLENBQUMsZ0lBQXlDO0FBQ2xGLHdEQUF3RCxtQkFBTyxDQUFDLGdFQUFPO0FBQ3ZFLDBEQUEwRCxtQkFBTyxDQUFDLDhGQUEwQjtBQUM1RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJEOlxcZG9uZ3l1bi1wcm9qZWN0c1xcdHdvXFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXG5leHQtZGV2dG9vbHNcXHVzZXJzcGFjZVxcYXBwXFxlcnJvcnNcXHN0aXRjaGVkLWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgY29lcmNlRXJyb3I6IG51bGwsXG4gICAgZGVjb3JhdGVEZXZFcnJvcjogbnVsbCxcbiAgICBnZXRDb21wb25lbnRTdGFjazogbnVsbCxcbiAgICBnZXRPd25lclN0YWNrOiBudWxsLFxuICAgIHNldENvbXBvbmVudFN0YWNrOiBudWxsLFxuICAgIHNldE93bmVyU3RhY2s6IG51bGwsXG4gICAgc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGNvZXJjZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNvZXJjZUVycm9yO1xuICAgIH0sXG4gICAgZGVjb3JhdGVEZXZFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkZWNvcmF0ZURldkVycm9yO1xuICAgIH0sXG4gICAgZ2V0Q29tcG9uZW50U3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50U3RhY2s7XG4gICAgfSxcbiAgICBnZXRPd25lclN0YWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldE93bmVyU3RhY2s7XG4gICAgfSxcbiAgICBzZXRDb21wb25lbnRTdGFjazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzZXRDb21wb25lbnRTdGFjaztcbiAgICB9LFxuICAgIHNldE93bmVyU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2V0T3duZXJTdGFjaztcbiAgICB9LFxuICAgIHNldE93bmVyU3RhY2tJZkF2YWlsYWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzZXRPd25lclN0YWNrSWZBdmFpbGFibGU7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX2lzZXJyb3IgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9saWIvaXMtZXJyb3JcIikpO1xuY29uc3Qgb3duZXJTdGFja3MgPSBuZXcgV2Vha01hcCgpO1xuY29uc3QgY29tcG9uZW50U3RhY2tzID0gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIGdldENvbXBvbmVudFN0YWNrKGVycm9yKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudFN0YWNrcy5nZXQoZXJyb3IpO1xufVxuZnVuY3Rpb24gc2V0Q29tcG9uZW50U3RhY2soZXJyb3IsIHN0YWNrKSB7XG4gICAgY29tcG9uZW50U3RhY2tzLnNldChlcnJvciwgc3RhY2spO1xufVxuZnVuY3Rpb24gZ2V0T3duZXJTdGFjayhlcnJvcikge1xuICAgIHJldHVybiBvd25lclN0YWNrcy5nZXQoZXJyb3IpO1xufVxuZnVuY3Rpb24gc2V0T3duZXJTdGFjayhlcnJvciwgc3RhY2spIHtcbiAgICBvd25lclN0YWNrcy5zZXQoZXJyb3IsIHN0YWNrKTtcbn1cbmZ1bmN0aW9uIGNvZXJjZUVycm9yKHZhbHVlKSB7XG4gICAgcmV0dXJuICgwLCBfaXNlcnJvci5kZWZhdWx0KSh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXcgRXJyb3IoJycgKyB2YWx1ZSksIFwiX19ORVhUX0VSUk9SX0NPREVcIiwge1xuICAgICAgICB2YWx1ZTogXCJFMzk0XCIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNldE93bmVyU3RhY2tJZkF2YWlsYWJsZShlcnJvcikge1xuICAgIC8vIFJlYWN0IDE4IGFuZCBwcm9kIGRvZXMgbm90IGhhdmUgYGNhcHR1cmVPd25lclN0YWNrYFxuICAgIGlmICgnY2FwdHVyZU93bmVyU3RhY2snIGluIF9yZWFjdC5kZWZhdWx0KSB7XG4gICAgICAgIHNldE93bmVyU3RhY2soZXJyb3IsIF9yZWFjdC5kZWZhdWx0LmNhcHR1cmVPd25lclN0YWNrKCkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlY29yYXRlRGV2RXJyb3IodGhyb3duVmFsdWUsIGVycm9ySW5mbykge1xuICAgIGNvbnN0IGVycm9yID0gY29lcmNlRXJyb3IodGhyb3duVmFsdWUpO1xuICAgIHNldE93bmVyU3RhY2tJZkF2YWlsYWJsZShlcnJvcik7XG4gICAgLy8gVE9ETzogY2hhbmdlIHRvIHBhc3NpbmcgZG93biBlcnJvckluZm8gbGF0ZXJcbiAgICAvLyBJbiBkZXZlbG9wbWVudCBtb2RlLCBwYXNzIGFsb25nIHRoZSBjb21wb25lbnQgc3RhY2sgdG8gdGhlIGVycm9yXG4gICAgaWYgKGVycm9ySW5mby5jb21wb25lbnRTdGFjaykge1xuICAgICAgICBzZXRDb21wb25lbnRTdGFjayhlcnJvciwgZXJyb3JJbmZvLmNvbXBvbmVudFN0YWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGl0Y2hlZC1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PROMISE_MARKER: function() {\n return PROMISE_MARKER;\n },\n UNAVAILABLE_MARKER: function() {\n return UNAVAILABLE_MARKER;\n },\n forwardErrorLog: function() {\n return forwardErrorLog;\n },\n forwardUnhandledError: function() {\n return forwardUnhandledError;\n },\n initializeDebugLogForwarding: function() {\n return initializeDebugLogForwarding;\n },\n isTerminalLoggingEnabled: function() {\n return isTerminalLoggingEnabled;\n },\n logQueue: function() {\n return logQueue;\n },\n logStringify: function() {\n return logStringify;\n },\n logUnhandledRejection: function() {\n return logUnhandledRejection;\n },\n preLogSerializationClone: function() {\n return preLogSerializationClone;\n }\n});\nconst _safestablestringify = __webpack_require__(/*! next/dist/compiled/safe-stable-stringify */ \"(pages-dir-browser)/./node_modules/next/dist/compiled/safe-stable-stringify/index.js\");\nconst _stitchederror = __webpack_require__(/*! ./errors/stitched-error */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\nconst _errorsource = __webpack_require__(/*! ../../../shared/lib/error-source */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/error-source.js\");\nconst _terminalloggingconfig = __webpack_require__(/*! ./terminal-logging-config */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js\");\nconst _forwardlogsshared = __webpack_require__(/*! ../../shared/forward-logs-shared */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/shared/forward-logs-shared.js\");\nconst terminalLoggingConfig = (0, _terminalloggingconfig.getTerminalLoggingConfig)();\nconst PROMISE_MARKER = 'Promise {}';\nconst UNAVAILABLE_MARKER = '[Unable to view]';\nconst maximumDepth = typeof terminalLoggingConfig === 'object' && terminalLoggingConfig.depthLimit ? terminalLoggingConfig.depthLimit : 5;\nconst maximumBreadth = typeof terminalLoggingConfig === 'object' && terminalLoggingConfig.edgeLimit ? terminalLoggingConfig.edgeLimit : 100;\nconst stringify = (0, _safestablestringify.configure)({\n maximumDepth,\n maximumBreadth\n});\nconst isTerminalLoggingEnabled = (0, _terminalloggingconfig.getIsTerminalLoggingEnabled)();\nconst methods = [\n 'log',\n 'info',\n 'warn',\n 'debug',\n 'table',\n 'assert',\n 'dir',\n 'dirxml',\n 'group',\n 'groupCollapsed',\n 'groupEnd',\n 'trace'\n];\nfunction preLogSerializationClone(value, seen) {\n if (seen === void 0) seen = new WeakMap();\n if (value === undefined) return _forwardlogsshared.UNDEFINED_MARKER;\n if (value === null || typeof value !== 'object') return value;\n if (seen.has(value)) return seen.get(value);\n try {\n Object.keys(value);\n } catch (e) {\n return UNAVAILABLE_MARKER;\n }\n try {\n if (typeof value.then === 'function') return PROMISE_MARKER;\n } catch (e) {\n return UNAVAILABLE_MARKER;\n }\n if (Array.isArray(value)) {\n const out = [];\n seen.set(value, out);\n for (const item of value){\n try {\n out.push(preLogSerializationClone(item, seen));\n } catch (e) {\n out.push(UNAVAILABLE_MARKER);\n }\n }\n return out;\n }\n const proto = Object.getPrototypeOf(value);\n if (proto === Object.prototype || proto === null) {\n const out = {};\n seen.set(value, out);\n for (const key of Object.keys(value)){\n try {\n out[key] = preLogSerializationClone(value[key], seen);\n } catch (e) {\n out[key] = UNAVAILABLE_MARKER;\n }\n }\n return out;\n }\n return Object.prototype.toString.call(value);\n}\nconst logStringify = (data)=>{\n try {\n const result = stringify(data);\n return result != null ? result : '\"' + UNAVAILABLE_MARKER + '\"';\n } catch (e) {\n return '\"' + UNAVAILABLE_MARKER + '\"';\n }\n};\nconst afterThisFrame = (cb)=>{\n let timeout;\n const rafId = requestAnimationFrame(()=>{\n timeout = setTimeout(()=>{\n cb();\n });\n });\n return ()=>{\n cancelAnimationFrame(rafId);\n clearTimeout(timeout);\n };\n};\nlet isPatched = false;\nconst serializeEntries = (entries)=>entries.map((clientEntry)=>{\n switch(clientEntry.kind){\n case 'any-logged-error':\n case 'console':\n {\n return {\n ...clientEntry,\n args: clientEntry.args.map(stringifyUserArg)\n };\n }\n case 'formatted-error':\n {\n return clientEntry;\n }\n default:\n {\n return null;\n }\n }\n });\nconst logQueue = {\n entries: [],\n flushScheduled: false,\n cancelFlush: null,\n socket: null,\n sourceType: undefined,\n router: null,\n scheduleLogSend: (entry)=>{\n logQueue.entries.push(entry);\n if (logQueue.flushScheduled) {\n return;\n }\n // safe to deref and use in setTimeout closure since we cancel on new socket\n const socket = logQueue.socket;\n if (!socket) {\n return;\n }\n // we probably dont need this\n logQueue.flushScheduled = true;\n // non blocking log flush, runs at most once per frame\n logQueue.cancelFlush = afterThisFrame(()=>{\n logQueue.flushScheduled = false;\n // just incase\n try {\n const payload = JSON.stringify({\n event: 'browser-logs',\n entries: serializeEntries(logQueue.entries),\n router: logQueue.router,\n // needed for source mapping, we just assign the sourceType from the last error for the whole batch\n sourceType: logQueue.sourceType\n });\n socket.send(payload);\n logQueue.entries = [];\n logQueue.sourceType = undefined;\n } catch (e) {\n // error (make sure u don't infinite loop)\n /* noop */ }\n });\n },\n onSocketReady: (socket)=>{\n if (socket.readyState !== WebSocket.OPEN) {\n // invariant\n return;\n }\n // incase an existing timeout was going to run with a stale socket\n logQueue.cancelFlush == null ? void 0 : logQueue.cancelFlush.call(logQueue);\n logQueue.socket = socket;\n try {\n const payload = JSON.stringify({\n event: 'browser-logs',\n entries: serializeEntries(logQueue.entries),\n router: logQueue.router,\n sourceType: logQueue.sourceType\n });\n socket.send(payload);\n logQueue.entries = [];\n logQueue.sourceType = undefined;\n } catch (e) {\n /** noop just incase */ }\n }\n};\nconst stringifyUserArg = (arg)=>{\n if (arg.kind !== 'arg') {\n return arg;\n }\n return {\n ...arg,\n data: logStringify(arg.data)\n };\n};\nconst createErrorArg = (error)=>{\n const stack = stackWithOwners(error);\n return {\n kind: 'formatted-error-arg',\n prefix: error.message ? error.name + \": \" + error.message : \"\" + error.name,\n stack\n };\n};\nconst createLogEntry = (level, args)=>{\n // do not abstract this, it implicitly relies on which functions call it. forcing the inlined implementation makes you think about callers\n // error capture stack trace maybe\n const stack = stackWithOwners(new Error());\n const stackLines = stack == null ? void 0 : stack.split('\\n');\n const cleanStack = stackLines == null ? void 0 : stackLines.slice(3).join('\\n') // this is probably ignored anyways\n ;\n const entry = {\n kind: 'console',\n consoleMethodStack: cleanStack != null ? cleanStack : null,\n method: level,\n args: args.map((arg)=>{\n if (arg instanceof Error) {\n return createErrorArg(arg);\n }\n return {\n kind: 'arg',\n data: preLogSerializationClone(arg)\n };\n })\n };\n logQueue.scheduleLogSend(entry);\n};\nconst forwardErrorLog = (args)=>{\n const errorObjects = args.filter((arg)=>arg instanceof Error);\n const first = errorObjects.at(0);\n if (first) {\n const source = (0, _errorsource.getErrorSource)(first);\n if (source) {\n logQueue.sourceType = source;\n }\n }\n /**\n * browser shows stack regardless of type of data passed to console.error, so we should do the same\n *\n * do not abstract this, it implicitly relies on which functions call it. forcing the inlined implementation makes you think about callers\n */ const stack = stackWithOwners(new Error());\n const stackLines = stack == null ? void 0 : stack.split('\\n');\n const cleanStack = stackLines == null ? void 0 : stackLines.slice(3).join('\\n');\n const entry = {\n kind: 'any-logged-error',\n method: 'error',\n consoleErrorStack: cleanStack != null ? cleanStack : '',\n args: args.map((arg)=>{\n if (arg instanceof Error) {\n return createErrorArg(arg);\n }\n return {\n kind: 'arg',\n data: preLogSerializationClone(arg)\n };\n })\n };\n logQueue.scheduleLogSend(entry);\n};\nconst createUncaughtErrorEntry = (errorName, errorMessage, fullStack)=>{\n const entry = {\n kind: 'formatted-error',\n prefix: \"Uncaught \" + errorName + \": \" + errorMessage,\n stack: fullStack,\n method: 'error'\n };\n logQueue.scheduleLogSend(entry);\n};\nconst stackWithOwners = (error)=>{\n let ownerStack = '';\n (0, _stitchederror.setOwnerStackIfAvailable)(error);\n ownerStack = (0, _stitchederror.getOwnerStack)(error) || '';\n const stack = (error.stack || '') + ownerStack;\n return stack;\n};\nfunction logUnhandledRejection(reason) {\n if (reason instanceof Error) {\n createUnhandledRejectionErrorEntry(reason, stackWithOwners(reason));\n return;\n }\n createUnhandledRejectionNonErrorEntry(reason);\n}\nconst createUnhandledRejectionErrorEntry = (error, fullStack)=>{\n const source = (0, _errorsource.getErrorSource)(error);\n if (source) {\n logQueue.sourceType = source;\n }\n const entry = {\n kind: 'formatted-error',\n prefix: \"⨯ unhandledRejection: \" + error.name + \": \" + error.message,\n stack: fullStack,\n method: 'error'\n };\n logQueue.scheduleLogSend(entry);\n};\nconst createUnhandledRejectionNonErrorEntry = (reason)=>{\n const entry = {\n kind: 'any-logged-error',\n // we can't access the stack since the event is dispatched async and creating an inline error would be meaningless\n consoleErrorStack: '',\n method: 'error',\n args: [\n {\n kind: 'arg',\n data: \"⨯ unhandledRejection:\",\n isRejectionMessage: true\n },\n {\n kind: 'arg',\n data: preLogSerializationClone(reason)\n }\n ]\n };\n logQueue.scheduleLogSend(entry);\n};\nconst isHMR = (args)=>{\n const firstArg = args[0];\n if (typeof firstArg !== 'string') {\n return false;\n }\n if (firstArg.startsWith('[Fast Refresh]')) {\n return true;\n }\n if (firstArg.startsWith('[HMR]')) {\n return true;\n }\n return false;\n};\nconst isIgnoredLog = (args)=>{\n if (args.length < 3) {\n return false;\n }\n const [format, styles, label] = args;\n if (typeof format !== 'string' || typeof styles !== 'string' || typeof label !== 'string') {\n return false;\n }\n // kinda hacky, we should define a common format for these strings so we can safely ignore\n return format.startsWith('%c%s%c') && styles.includes('background:');\n};\nfunction forwardUnhandledError(error) {\n createUncaughtErrorEntry(error.name, error.message, stackWithOwners(error));\n}\nconst initializeDebugLogForwarding = (router)=>{\n // probably don't need this\n if (isPatched) {\n return;\n }\n // TODO(rob): why does this break rendering on server, important to know incase the same bug appears in browser\n if (typeof window === 'undefined') {\n return;\n }\n // better to be safe than sorry\n try {\n methods.forEach((method)=>(0, _forwardlogsshared.patchConsoleMethod)(method, function(_) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (isHMR(args)) {\n return;\n }\n if (isIgnoredLog(args)) {\n return;\n }\n createLogEntry(method, args);\n }));\n } catch (e) {}\n logQueue.router = router;\n isPatched = true;\n};\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=forward-logs.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2ZvcndhcmQtbG9ncy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FXTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsNkJBQTZCLG1CQUFPLENBQUMsc0lBQTBDO0FBQy9FLHVCQUF1QixtQkFBTyxDQUFDLGtJQUF5QjtBQUN4RCxxQkFBcUIsbUJBQU8sQ0FBQyxpSEFBa0M7QUFDL0QsK0JBQStCLG1CQUFPLENBQUMsc0lBQTJCO0FBQ2xFLDJCQUEyQixtQkFBTyxDQUFDLGtJQUFrQztBQUNyRTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzR0FBc0csYUFBYTtBQUNuSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxuZXh0LWRldnRvb2xzXFx1c2Vyc3BhY2VcXGFwcFxcZm9yd2FyZC1sb2dzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUFJPTUlTRV9NQVJLRVI6IG51bGwsXG4gICAgVU5BVkFJTEFCTEVfTUFSS0VSOiBudWxsLFxuICAgIGZvcndhcmRFcnJvckxvZzogbnVsbCxcbiAgICBmb3J3YXJkVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgaW5pdGlhbGl6ZURlYnVnTG9nRm9yd2FyZGluZzogbnVsbCxcbiAgICBpc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQ6IG51bGwsXG4gICAgbG9nUXVldWU6IG51bGwsXG4gICAgbG9nU3RyaW5naWZ5OiBudWxsLFxuICAgIGxvZ1VuaGFuZGxlZFJlamVjdGlvbjogbnVsbCxcbiAgICBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmU6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgUFJPTUlTRV9NQVJLRVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUFJPTUlTRV9NQVJLRVI7XG4gICAgfSxcbiAgICBVTkFWQUlMQUJMRV9NQVJLRVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gVU5BVkFJTEFCTEVfTUFSS0VSO1xuICAgIH0sXG4gICAgZm9yd2FyZEVycm9yTG9nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZvcndhcmRFcnJvckxvZztcbiAgICB9LFxuICAgIGZvcndhcmRVbmhhbmRsZWRFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmb3J3YXJkVW5oYW5kbGVkRXJyb3I7XG4gICAgfSxcbiAgICBpbml0aWFsaXplRGVidWdMb2dGb3J3YXJkaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxpemVEZWJ1Z0xvZ0ZvcndhcmRpbmc7XG4gICAgfSxcbiAgICBpc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkO1xuICAgIH0sXG4gICAgbG9nUXVldWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbG9nUXVldWU7XG4gICAgfSxcbiAgICBsb2dTdHJpbmdpZnk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbG9nU3RyaW5naWZ5O1xuICAgIH0sXG4gICAgbG9nVW5oYW5kbGVkUmVqZWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGxvZ1VuaGFuZGxlZFJlamVjdGlvbjtcbiAgICB9LFxuICAgIHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmU7XG4gICAgfVxufSk7XG5jb25zdCBfc2FmZXN0YWJsZXN0cmluZ2lmeSA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvc2FmZS1zdGFibGUtc3RyaW5naWZ5XCIpO1xuY29uc3QgX3N0aXRjaGVkZXJyb3IgPSByZXF1aXJlKFwiLi9lcnJvcnMvc3RpdGNoZWQtZXJyb3JcIik7XG5jb25zdCBfZXJyb3Jzb3VyY2UgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2hhcmVkL2xpYi9lcnJvci1zb3VyY2VcIik7XG5jb25zdCBfdGVybWluYWxsb2dnaW5nY29uZmlnID0gcmVxdWlyZShcIi4vdGVybWluYWwtbG9nZ2luZy1jb25maWdcIik7XG5jb25zdCBfZm9yd2FyZGxvZ3NzaGFyZWQgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2ZvcndhcmQtbG9ncy1zaGFyZWRcIik7XG5jb25zdCB0ZXJtaW5hbExvZ2dpbmdDb25maWcgPSAoMCwgX3Rlcm1pbmFsbG9nZ2luZ2NvbmZpZy5nZXRUZXJtaW5hbExvZ2dpbmdDb25maWcpKCk7XG5jb25zdCBQUk9NSVNFX01BUktFUiA9ICdQcm9taXNlIHt9JztcbmNvbnN0IFVOQVZBSUxBQkxFX01BUktFUiA9ICdbVW5hYmxlIHRvIHZpZXddJztcbmNvbnN0IG1heGltdW1EZXB0aCA9IHR5cGVvZiB0ZXJtaW5hbExvZ2dpbmdDb25maWcgPT09ICdvYmplY3QnICYmIHRlcm1pbmFsTG9nZ2luZ0NvbmZpZy5kZXB0aExpbWl0ID8gdGVybWluYWxMb2dnaW5nQ29uZmlnLmRlcHRoTGltaXQgOiA1O1xuY29uc3QgbWF4aW11bUJyZWFkdGggPSB0eXBlb2YgdGVybWluYWxMb2dnaW5nQ29uZmlnID09PSAnb2JqZWN0JyAmJiB0ZXJtaW5hbExvZ2dpbmdDb25maWcuZWRnZUxpbWl0ID8gdGVybWluYWxMb2dnaW5nQ29uZmlnLmVkZ2VMaW1pdCA6IDEwMDtcbmNvbnN0IHN0cmluZ2lmeSA9ICgwLCBfc2FmZXN0YWJsZXN0cmluZ2lmeS5jb25maWd1cmUpKHtcbiAgICBtYXhpbXVtRGVwdGgsXG4gICAgbWF4aW11bUJyZWFkdGhcbn0pO1xuY29uc3QgaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkID0gKDAsIF90ZXJtaW5hbGxvZ2dpbmdjb25maWcuZ2V0SXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKSgpO1xuY29uc3QgbWV0aG9kcyA9IFtcbiAgICAnbG9nJyxcbiAgICAnaW5mbycsXG4gICAgJ3dhcm4nLFxuICAgICdkZWJ1ZycsXG4gICAgJ3RhYmxlJyxcbiAgICAnYXNzZXJ0JyxcbiAgICAnZGlyJyxcbiAgICAnZGlyeG1sJyxcbiAgICAnZ3JvdXAnLFxuICAgICdncm91cENvbGxhcHNlZCcsXG4gICAgJ2dyb3VwRW5kJyxcbiAgICAndHJhY2UnXG5dO1xuZnVuY3Rpb24gcHJlTG9nU2VyaWFsaXphdGlvbkNsb25lKHZhbHVlLCBzZWVuKSB7XG4gICAgaWYgKHNlZW4gPT09IHZvaWQgMCkgc2VlbiA9IG5ldyBXZWFrTWFwKCk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBfZm9yd2FyZGxvZ3NzaGFyZWQuVU5ERUZJTkVEX01BUktFUjtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiBzZWVuLmdldCh2YWx1ZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmtleXModmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIFVOQVZBSUxBQkxFX01BUktFUjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gUFJPTUlTRV9NQVJLRVI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gVU5BVkFJTEFCTEVfTUFSS0VSO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gW107XG4gICAgICAgIHNlZW4uc2V0KHZhbHVlLCBvdXQpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpe1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvdXQucHVzaChwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUoaXRlbSwgc2VlbikpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIG91dC5wdXNoKFVOQVZBSUxBQkxFX01BUktFUik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgIGlmIChwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvdXQgPSB7fTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG91dCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKSl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG91dFtrZXldID0gcHJlTG9nU2VyaWFsaXphdGlvbkNsb25lKHZhbHVlW2tleV0sIHNlZW4pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIG91dFtrZXldID0gVU5BVkFJTEFCTEVfTUFSS0VSO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuY29uc3QgbG9nU3RyaW5naWZ5ID0gKGRhdGEpPT57XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICE9IG51bGwgPyByZXN1bHQgOiAnXCInICsgVU5BVkFJTEFCTEVfTUFSS0VSICsgJ1wiJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiAnXCInICsgVU5BVkFJTEFCTEVfTUFSS0VSICsgJ1wiJztcbiAgICB9XG59O1xuY29uc3QgYWZ0ZXJUaGlzRnJhbWUgPSAoY2IpPT57XG4gICAgbGV0IHRpbWVvdXQ7XG4gICAgY29uc3QgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9O1xufTtcbmxldCBpc1BhdGNoZWQgPSBmYWxzZTtcbmNvbnN0IHNlcmlhbGl6ZUVudHJpZXMgPSAoZW50cmllcyk9PmVudHJpZXMubWFwKChjbGllbnRFbnRyeSk9PntcbiAgICAgICAgc3dpdGNoKGNsaWVudEVudHJ5LmtpbmQpe1xuICAgICAgICAgICAgY2FzZSAnYW55LWxvZ2dlZC1lcnJvcic6XG4gICAgICAgICAgICBjYXNlICdjb25zb2xlJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jbGllbnRFbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IGNsaWVudEVudHJ5LmFyZ3MubWFwKHN0cmluZ2lmeVVzZXJBcmcpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnZm9ybWF0dGVkLWVycm9yJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnRFbnRyeTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5jb25zdCBsb2dRdWV1ZSA9IHtcbiAgICBlbnRyaWVzOiBbXSxcbiAgICBmbHVzaFNjaGVkdWxlZDogZmFsc2UsXG4gICAgY2FuY2VsRmx1c2g6IG51bGwsXG4gICAgc29ja2V0OiBudWxsLFxuICAgIHNvdXJjZVR5cGU6IHVuZGVmaW5lZCxcbiAgICByb3V0ZXI6IG51bGwsXG4gICAgc2NoZWR1bGVMb2dTZW5kOiAoZW50cnkpPT57XG4gICAgICAgIGxvZ1F1ZXVlLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgIGlmIChsb2dRdWV1ZS5mbHVzaFNjaGVkdWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNhZmUgdG8gZGVyZWYgYW5kIHVzZSBpbiBzZXRUaW1lb3V0IGNsb3N1cmUgc2luY2Ugd2UgY2FuY2VsIG9uIG5ldyBzb2NrZXRcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gbG9nUXVldWUuc29ja2V0O1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIHByb2JhYmx5IGRvbnQgbmVlZCB0aGlzXG4gICAgICAgIGxvZ1F1ZXVlLmZsdXNoU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgLy8gbm9uIGJsb2NraW5nIGxvZyBmbHVzaCwgcnVucyBhdCBtb3N0IG9uY2UgcGVyIGZyYW1lXG4gICAgICAgIGxvZ1F1ZXVlLmNhbmNlbEZsdXNoID0gYWZ0ZXJUaGlzRnJhbWUoKCk9PntcbiAgICAgICAgICAgIGxvZ1F1ZXVlLmZsdXNoU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBqdXN0IGluY2FzZVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBldmVudDogJ2Jyb3dzZXItbG9ncycsXG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXM6IHNlcmlhbGl6ZUVudHJpZXMobG9nUXVldWUuZW50cmllcyksXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlcjogbG9nUXVldWUucm91dGVyLFxuICAgICAgICAgICAgICAgICAgICAvLyBuZWVkZWQgZm9yIHNvdXJjZSBtYXBwaW5nLCB3ZSBqdXN0IGFzc2lnbiB0aGUgc291cmNlVHlwZSBmcm9tIHRoZSBsYXN0IGVycm9yIGZvciB0aGUgd2hvbGUgYmF0Y2hcbiAgICAgICAgICAgICAgICAgICAgc291cmNlVHlwZTogbG9nUXVldWUuc291cmNlVHlwZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNvY2tldC5zZW5kKHBheWxvYWQpO1xuICAgICAgICAgICAgICAgIGxvZ1F1ZXVlLmVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBsb2dRdWV1ZS5zb3VyY2VUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gZXJyb3IgKG1ha2Ugc3VyZSB1IGRvbid0IGluZmluaXRlIGxvb3ApXG4gICAgICAgICAgICAvKiBub29wICovIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBvblNvY2tldFJlYWR5OiAoc29ja2V0KT0+e1xuICAgICAgICBpZiAoc29ja2V0LnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSB7XG4gICAgICAgICAgICAvLyBpbnZhcmlhbnRcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbmNhc2UgYW4gZXhpc3RpbmcgdGltZW91dCB3YXMgZ29pbmcgdG8gcnVuIHdpdGggYSBzdGFsZSBzb2NrZXRcbiAgICAgICAgbG9nUXVldWUuY2FuY2VsRmx1c2ggPT0gbnVsbCA/IHZvaWQgMCA6IGxvZ1F1ZXVlLmNhbmNlbEZsdXNoLmNhbGwobG9nUXVldWUpO1xuICAgICAgICBsb2dRdWV1ZS5zb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGV2ZW50OiAnYnJvd3Nlci1sb2dzJyxcbiAgICAgICAgICAgICAgICBlbnRyaWVzOiBzZXJpYWxpemVFbnRyaWVzKGxvZ1F1ZXVlLmVudHJpZXMpLFxuICAgICAgICAgICAgICAgIHJvdXRlcjogbG9nUXVldWUucm91dGVyLFxuICAgICAgICAgICAgICAgIHNvdXJjZVR5cGU6IGxvZ1F1ZXVlLnNvdXJjZVR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc29ja2V0LnNlbmQocGF5bG9hZCk7XG4gICAgICAgICAgICBsb2dRdWV1ZS5lbnRyaWVzID0gW107XG4gICAgICAgICAgICBsb2dRdWV1ZS5zb3VyY2VUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qKiBub29wIGp1c3QgaW5jYXNlICovIH1cbiAgICB9XG59O1xuY29uc3Qgc3RyaW5naWZ5VXNlckFyZyA9IChhcmcpPT57XG4gICAgaWYgKGFyZy5raW5kICE9PSAnYXJnJykge1xuICAgICAgICByZXR1cm4gYXJnO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5hcmcsXG4gICAgICAgIGRhdGE6IGxvZ1N0cmluZ2lmeShhcmcuZGF0YSlcbiAgICB9O1xufTtcbmNvbnN0IGNyZWF0ZUVycm9yQXJnID0gKGVycm9yKT0+e1xuICAgIGNvbnN0IHN0YWNrID0gc3RhY2tXaXRoT3duZXJzKGVycm9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnZm9ybWF0dGVkLWVycm9yLWFyZycsXG4gICAgICAgIHByZWZpeDogZXJyb3IubWVzc2FnZSA/IGVycm9yLm5hbWUgKyBcIjogXCIgKyBlcnJvci5tZXNzYWdlIDogXCJcIiArIGVycm9yLm5hbWUsXG4gICAgICAgIHN0YWNrXG4gICAgfTtcbn07XG5jb25zdCBjcmVhdGVMb2dFbnRyeSA9IChsZXZlbCwgYXJncyk9PntcbiAgICAvLyBkbyBub3QgYWJzdHJhY3QgdGhpcywgaXQgaW1wbGljaXRseSByZWxpZXMgb24gd2hpY2ggZnVuY3Rpb25zIGNhbGwgaXQuIGZvcmNpbmcgdGhlIGlubGluZWQgaW1wbGVtZW50YXRpb24gbWFrZXMgeW91IHRoaW5rIGFib3V0IGNhbGxlcnNcbiAgICAvLyBlcnJvciBjYXB0dXJlIHN0YWNrIHRyYWNlIG1heWJlXG4gICAgY29uc3Qgc3RhY2sgPSBzdGFja1dpdGhPd25lcnMobmV3IEVycm9yKCkpO1xuICAgIGNvbnN0IHN0YWNrTGluZXMgPSBzdGFjayA9PSBudWxsID8gdm9pZCAwIDogc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IGNsZWFuU3RhY2sgPSBzdGFja0xpbmVzID09IG51bGwgPyB2b2lkIDAgOiBzdGFja0xpbmVzLnNsaWNlKDMpLmpvaW4oJ1xcbicpIC8vIHRoaXMgaXMgcHJvYmFibHkgaWdub3JlZCBhbnl3YXlzXG4gICAgO1xuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICBraW5kOiAnY29uc29sZScsXG4gICAgICAgIGNvbnNvbGVNZXRob2RTdGFjazogY2xlYW5TdGFjayAhPSBudWxsID8gY2xlYW5TdGFjayA6IG51bGwsXG4gICAgICAgIG1ldGhvZDogbGV2ZWwsXG4gICAgICAgIGFyZ3M6IGFyZ3MubWFwKChhcmcpPT57XG4gICAgICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3JBcmcoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAga2luZDogJ2FyZycsXG4gICAgICAgICAgICAgICAgZGF0YTogcHJlTG9nU2VyaWFsaXphdGlvbkNsb25lKGFyZylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgfTtcbiAgICBsb2dRdWV1ZS5zY2hlZHVsZUxvZ1NlbmQoZW50cnkpO1xufTtcbmNvbnN0IGZvcndhcmRFcnJvckxvZyA9IChhcmdzKT0+e1xuICAgIGNvbnN0IGVycm9yT2JqZWN0cyA9IGFyZ3MuZmlsdGVyKChhcmcpPT5hcmcgaW5zdGFuY2VvZiBFcnJvcik7XG4gICAgY29uc3QgZmlyc3QgPSBlcnJvck9iamVjdHMuYXQoMCk7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9ICgwLCBfZXJyb3Jzb3VyY2UuZ2V0RXJyb3JTb3VyY2UpKGZpcnN0KTtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgbG9nUXVldWUuc291cmNlVHlwZSA9IHNvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICogYnJvd3NlciBzaG93cyBzdGFjayByZWdhcmRsZXNzIG9mIHR5cGUgb2YgZGF0YSBwYXNzZWQgdG8gY29uc29sZS5lcnJvciwgc28gd2Ugc2hvdWxkIGRvIHRoZSBzYW1lXG4gICAqXG4gICAqIGRvIG5vdCBhYnN0cmFjdCB0aGlzLCBpdCBpbXBsaWNpdGx5IHJlbGllcyBvbiB3aGljaCBmdW5jdGlvbnMgY2FsbCBpdC4gZm9yY2luZyB0aGUgaW5saW5lZCBpbXBsZW1lbnRhdGlvbiBtYWtlcyB5b3UgdGhpbmsgYWJvdXQgY2FsbGVyc1xuICAgKi8gY29uc3Qgc3RhY2sgPSBzdGFja1dpdGhPd25lcnMobmV3IEVycm9yKCkpO1xuICAgIGNvbnN0IHN0YWNrTGluZXMgPSBzdGFjayA9PSBudWxsID8gdm9pZCAwIDogc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IGNsZWFuU3RhY2sgPSBzdGFja0xpbmVzID09IG51bGwgPyB2b2lkIDAgOiBzdGFja0xpbmVzLnNsaWNlKDMpLmpvaW4oJ1xcbicpO1xuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICBraW5kOiAnYW55LWxvZ2dlZC1lcnJvcicsXG4gICAgICAgIG1ldGhvZDogJ2Vycm9yJyxcbiAgICAgICAgY29uc29sZUVycm9yU3RhY2s6IGNsZWFuU3RhY2sgIT0gbnVsbCA/IGNsZWFuU3RhY2sgOiAnJyxcbiAgICAgICAgYXJnczogYXJncy5tYXAoKGFyZyk9PntcbiAgICAgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVFcnJvckFyZyhhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBraW5kOiAnYXJnJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUoYXJnKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICB9O1xuICAgIGxvZ1F1ZXVlLnNjaGVkdWxlTG9nU2VuZChlbnRyeSk7XG59O1xuY29uc3QgY3JlYXRlVW5jYXVnaHRFcnJvckVudHJ5ID0gKGVycm9yTmFtZSwgZXJyb3JNZXNzYWdlLCBmdWxsU3RhY2spPT57XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgIGtpbmQ6ICdmb3JtYXR0ZWQtZXJyb3InLFxuICAgICAgICBwcmVmaXg6IFwiVW5jYXVnaHQgXCIgKyBlcnJvck5hbWUgKyBcIjogXCIgKyBlcnJvck1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBmdWxsU3RhY2ssXG4gICAgICAgIG1ldGhvZDogJ2Vycm9yJ1xuICAgIH07XG4gICAgbG9nUXVldWUuc2NoZWR1bGVMb2dTZW5kKGVudHJ5KTtcbn07XG5jb25zdCBzdGFja1dpdGhPd25lcnMgPSAoZXJyb3IpPT57XG4gICAgbGV0IG93bmVyU3RhY2sgPSAnJztcbiAgICAoMCwgX3N0aXRjaGVkZXJyb3Iuc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlKShlcnJvcik7XG4gICAgb3duZXJTdGFjayA9ICgwLCBfc3RpdGNoZWRlcnJvci5nZXRPd25lclN0YWNrKShlcnJvcikgfHwgJyc7XG4gICAgY29uc3Qgc3RhY2sgPSAoZXJyb3Iuc3RhY2sgfHwgJycpICsgb3duZXJTdGFjaztcbiAgICByZXR1cm4gc3RhY2s7XG59O1xuZnVuY3Rpb24gbG9nVW5oYW5kbGVkUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBjcmVhdGVVbmhhbmRsZWRSZWplY3Rpb25FcnJvckVudHJ5KHJlYXNvbiwgc3RhY2tXaXRoT3duZXJzKHJlYXNvbikpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNyZWF0ZVVuaGFuZGxlZFJlamVjdGlvbk5vbkVycm9yRW50cnkocmVhc29uKTtcbn1cbmNvbnN0IGNyZWF0ZVVuaGFuZGxlZFJlamVjdGlvbkVycm9yRW50cnkgPSAoZXJyb3IsIGZ1bGxTdGFjayk9PntcbiAgICBjb25zdCBzb3VyY2UgPSAoMCwgX2Vycm9yc291cmNlLmdldEVycm9yU291cmNlKShlcnJvcik7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBsb2dRdWV1ZS5zb3VyY2VUeXBlID0gc291cmNlO1xuICAgIH1cbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAga2luZDogJ2Zvcm1hdHRlZC1lcnJvcicsXG4gICAgICAgIHByZWZpeDogXCLiqK8gdW5oYW5kbGVkUmVqZWN0aW9uOiBcIiArIGVycm9yLm5hbWUgKyBcIjogXCIgKyBlcnJvci5tZXNzYWdlLFxuICAgICAgICBzdGFjazogZnVsbFN0YWNrLFxuICAgICAgICBtZXRob2Q6ICdlcnJvcidcbiAgICB9O1xuICAgIGxvZ1F1ZXVlLnNjaGVkdWxlTG9nU2VuZChlbnRyeSk7XG59O1xuY29uc3QgY3JlYXRlVW5oYW5kbGVkUmVqZWN0aW9uTm9uRXJyb3JFbnRyeSA9IChyZWFzb24pPT57XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgIGtpbmQ6ICdhbnktbG9nZ2VkLWVycm9yJyxcbiAgICAgICAgLy8gd2UgY2FuJ3QgYWNjZXNzIHRoZSBzdGFjayBzaW5jZSB0aGUgZXZlbnQgaXMgZGlzcGF0Y2hlZCBhc3luYyBhbmQgY3JlYXRpbmcgYW4gaW5saW5lIGVycm9yIHdvdWxkIGJlIG1lYW5pbmdsZXNzXG4gICAgICAgIGNvbnNvbGVFcnJvclN0YWNrOiAnJyxcbiAgICAgICAgbWV0aG9kOiAnZXJyb3InLFxuICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAga2luZDogJ2FyZycsXG4gICAgICAgICAgICAgICAgZGF0YTogXCLiqK8gdW5oYW5kbGVkUmVqZWN0aW9uOlwiLFxuICAgICAgICAgICAgICAgIGlzUmVqZWN0aW9uTWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBraW5kOiAnYXJnJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUocmVhc29uKVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcbiAgICBsb2dRdWV1ZS5zY2hlZHVsZUxvZ1NlbmQoZW50cnkpO1xufTtcbmNvbnN0IGlzSE1SID0gKGFyZ3MpPT57XG4gICAgY29uc3QgZmlyc3RBcmcgPSBhcmdzWzBdO1xuICAgIGlmICh0eXBlb2YgZmlyc3RBcmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGZpcnN0QXJnLnN0YXJ0c1dpdGgoJ1tGYXN0IFJlZnJlc2hdJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChmaXJzdEFyZy5zdGFydHNXaXRoKCdbSE1SXScpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuY29uc3QgaXNJZ25vcmVkTG9nID0gKGFyZ3MpPT57XG4gICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IFtmb3JtYXQsIHN0eWxlcywgbGFiZWxdID0gYXJncztcbiAgICBpZiAodHlwZW9mIGZvcm1hdCAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIHN0eWxlcyAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIGtpbmRhIGhhY2t5LCB3ZSBzaG91bGQgZGVmaW5lIGEgY29tbW9uIGZvcm1hdCBmb3IgdGhlc2Ugc3RyaW5ncyBzbyB3ZSBjYW4gc2FmZWx5IGlnbm9yZVxuICAgIHJldHVybiBmb3JtYXQuc3RhcnRzV2l0aCgnJWMlcyVjJykgJiYgc3R5bGVzLmluY2x1ZGVzKCdiYWNrZ3JvdW5kOicpO1xufTtcbmZ1bmN0aW9uIGZvcndhcmRVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIGNyZWF0ZVVuY2F1Z2h0RXJyb3JFbnRyeShlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlLCBzdGFja1dpdGhPd25lcnMoZXJyb3IpKTtcbn1cbmNvbnN0IGluaXRpYWxpemVEZWJ1Z0xvZ0ZvcndhcmRpbmcgPSAocm91dGVyKT0+e1xuICAgIC8vIHByb2JhYmx5IGRvbid0IG5lZWQgdGhpc1xuICAgIGlmIChpc1BhdGNoZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUT0RPKHJvYik6IHdoeSBkb2VzIHRoaXMgYnJlYWsgcmVuZGVyaW5nIG9uIHNlcnZlciwgaW1wb3J0YW50IHRvIGtub3cgaW5jYXNlIHRoZSBzYW1lIGJ1ZyBhcHBlYXJzIGluIGJyb3dzZXJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5XG4gICAgdHJ5IHtcbiAgICAgICAgbWV0aG9kcy5mb3JFYWNoKChtZXRob2QpPT4oMCwgX2ZvcndhcmRsb2dzc2hhcmVkLnBhdGNoQ29uc29sZU1ldGhvZCkobWV0aG9kLCBmdW5jdGlvbihfKSB7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0hNUihhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0lnbm9yZWRMb2coYXJncykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjcmVhdGVMb2dFbnRyeShtZXRob2QsIGFyZ3MpO1xuICAgICAgICAgICAgfSkpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgbG9nUXVldWUucm91dGVyID0gcm91dGVyO1xuICAgIGlzUGF0Y2hlZCA9IHRydWU7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3J3YXJkLWxvZ3MuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js":
|
||
/*!***************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js ***!
|
||
\***************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getIsTerminalLoggingEnabled: function() {\n return getIsTerminalLoggingEnabled;\n },\n getTerminalLoggingConfig: function() {\n return getTerminalLoggingConfig;\n }\n});\nfunction getTerminalLoggingConfig() {\n try {\n return JSON.parse(\"false\" || 0);\n } catch (e) {\n return false;\n }\n}\nfunction getIsTerminalLoggingEnabled() {\n const config = getTerminalLoggingConfig();\n return Boolean(config);\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=terminal-logging-config.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL3Rlcm1pbmFsLWxvZ2dpbmctY29uZmlnLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUdMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSwwQkFBMEIsT0FBaUQsSUFBSSxDQUFPO0FBQ3RGLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxuZXh0LWRldnRvb2xzXFx1c2Vyc3BhY2VcXGFwcFxcdGVybWluYWwtbG9nZ2luZy1jb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBnZXRJc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQ6IG51bGwsXG4gICAgZ2V0VGVybWluYWxMb2dnaW5nQ29uZmlnOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGdldElzVGVybWluYWxMb2dnaW5nRW5hYmxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQ7XG4gICAgfSxcbiAgICBnZXRUZXJtaW5hbExvZ2dpbmdDb25maWc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0VGVybWluYWxMb2dnaW5nQ29uZmlnO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gZ2V0VGVybWluYWxMb2dnaW5nQ29uZmlnKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHByb2Nlc3MuZW52Ll9fTkVYVF9CUk9XU0VSX0RFQlVHX0lORk9fSU5fVEVSTUlOQUwgfHwgJ2ZhbHNlJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0SXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldFRlcm1pbmFsTG9nZ2luZ0NvbmZpZygpO1xuICAgIHJldHVybiBCb29sZWFuKGNvbmZpZyk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRlcm1pbmFsLWxvZ2dpbmctY29uZmlnLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/pages/hydration-error-state.js":
|
||
/*!***************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/pages/hydration-error-state.js ***!
|
||
\***************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n attachHydrationErrorState: function() {\n return attachHydrationErrorState;\n },\n getSquashedHydrationErrorDetails: function() {\n return getSquashedHydrationErrorDetails;\n },\n storeHydrationErrorStateFromConsoleArgs: function() {\n return storeHydrationErrorStateFromConsoleArgs;\n }\n});\nconst _react18hydrationerror = __webpack_require__(/*! ../../shared/react-18-hydration-error */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/shared/react-18-hydration-error.js\");\nconst _react19hydrationerror = __webpack_require__(/*! ../../shared/react-19-hydration-error */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/shared/react-19-hydration-error.js\");\n// We only need this for React 18 or hydration console errors in React 19.\n// Once we surface console.error in the dev overlay in pages router, we should only\n// use this for React 18.\nlet hydrationErrorState = {};\nconst squashedHydrationErrorDetails = new WeakMap();\nfunction getSquashedHydrationErrorDetails(error) {\n return squashedHydrationErrorDetails.has(error) ? squashedHydrationErrorDetails.get(error) : null;\n}\nfunction attachHydrationErrorState(error) {\n if (!(0, _react18hydrationerror.isHydrationError)(error) && !(0, _react19hydrationerror.isHydrationError)(error)) {\n return;\n }\n let parsedHydrationErrorState = {};\n // If there's any extra information in the error message to display,\n // append it to the error message details property\n if (hydrationErrorState.warning) {\n // The patched console.error found hydration errors logged by React\n // Append the logged warning to the error message\n parsedHydrationErrorState = {\n // It contains the warning, component stack, server and client tag names\n ...hydrationErrorState\n };\n // Consume the cached hydration diff.\n // This is only required for now when we still squashed the hydration diff log into hydration error.\n // Once the all error is logged to dev overlay in order, this will go away.\n if (hydrationErrorState.reactOutputComponentDiff) {\n parsedHydrationErrorState.reactOutputComponentDiff = hydrationErrorState.reactOutputComponentDiff;\n }\n squashedHydrationErrorDetails.set(error, parsedHydrationErrorState);\n }\n}\nfunction storeHydrationErrorStateFromConsoleArgs() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n let [message, firstContent, secondContent, ...rest] = args;\n if ((0, _react18hydrationerror.isHydrationWarning)(message)) {\n // Some hydration warnings has 4 arguments, some has 3, fallback to the last argument\n // when the 3rd argument is not the component stack but an empty string\n // For some warnings, there's only 1 argument for template.\n // The second argument is the diff or component stack.\n if (args.length === 3) {\n secondContent = '';\n }\n const warning = message.replace(/Warning: /, '').replace('%s', firstContent).replace('%s', secondContent)// remove the last %s from the message\n .replace(/%s/g, '');\n const lastArg = (rest[rest.length - 1] || '').trim();\n hydrationErrorState.reactOutputComponentDiff = generateHydrationDiffReact18(message, firstContent, secondContent, lastArg);\n hydrationErrorState.warning = warning;\n } else if ((0, _react19hydrationerror.isErrorMessageWithComponentStackDiff)(message)) {\n // Some hydration warnings has 4 arguments, some has 3, fallback to the last argument\n // when the 3rd argument is not the component stack but an empty string\n // For some warnings, there's only 1 argument for template.\n // The second argument is the diff or component stack.\n if (args.length === 3) {\n secondContent = '';\n }\n const warning = message.replace('%s', firstContent).replace('%s', secondContent)// remove the last %s from the message\n .replace(/%s/g, '');\n const lastArg = (args[args.length - 1] || '').trim();\n hydrationErrorState.reactOutputComponentDiff = lastArg;\n hydrationErrorState.warning = warning;\n }\n}\n/*\n * Some hydration errors in React 18 does not have the diff in the error message.\n * Instead it has the error stack trace which is component stack that we can leverage.\n * Will parse the diff from the error stack trace\n * e.g.\n * Warning: Expected server HTML to contain a matching <div> in <p>.\n * at div\n * at p\n * at div\n * at div\n * at Page\n * output:\n * <Page>\n * <div>\n * <p>\n * > <div>\n *\n */ function generateHydrationDiffReact18(message, firstContent, secondContent, lastArg) {\n const componentStack = lastArg;\n let firstIndex = -1;\n let secondIndex = -1;\n const hydrationWarningType = (0, _react18hydrationerror.getHydrationWarningType)(message);\n // at div\\n at Foo\\n at Bar (....)\\n -> [div, Foo]\n const components = componentStack.split('\\n')// .reverse()\n .map((line, index)=>{\n // `<space>at <component> (<location>)` -> `at <component> (<location>)`\n line = line.trim();\n // extract `<space>at <component>` to `<<component>>`\n // e.g. ` at Foo` -> `<Foo>`\n const [, component, location] = /at (\\w+)( \\((.*)\\))?/.exec(line) || [];\n // If there's no location then it's user-land stack frame\n if (!location) {\n if (component === firstContent && firstIndex === -1) {\n firstIndex = index;\n } else if (component === secondContent && secondIndex === -1) {\n secondIndex = index;\n }\n }\n return location ? '' : component;\n }).filter(Boolean).reverse();\n let diff = '';\n for(let i = 0; i < components.length; i++){\n const component = components[i];\n const matchFirstContent = hydrationWarningType === 'tag' && i === components.length - firstIndex - 1;\n const matchSecondContent = hydrationWarningType === 'tag' && i === components.length - secondIndex - 1;\n if (matchFirstContent || matchSecondContent) {\n const spaces = ' '.repeat(Math.max(i * 2 - 2, 0) + 2);\n diff += \"> \" + spaces + \"<\" + component + \">\\n\";\n } else {\n const spaces = ' '.repeat(i * 2 + 2);\n diff += spaces + \"<\" + component + \">\\n\";\n }\n }\n if (hydrationWarningType === 'text') {\n const spaces = ' '.repeat(components.length * 2);\n diff += \"+ \" + spaces + '\"' + firstContent + '\"\\n';\n diff += \"- \" + spaces + '\"' + secondContent + '\"\\n';\n } else if (hydrationWarningType === 'text-in-tag') {\n const spaces = ' '.repeat(components.length * 2);\n diff += \"> \" + spaces + \"<\" + secondContent + \">\\n\";\n diff += \"> \" + spaces + '\"' + firstContent + '\"\\n';\n }\n return diff;\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=hydration-error-state.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvcGFnZXMvaHlkcmF0aW9uLWVycm9yLXN0YXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUlMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsK0JBQStCLG1CQUFPLENBQUMsNElBQXVDO0FBQzlFLCtCQUErQixtQkFBTyxDQUFDLDRJQUF1QztBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLGFBQWE7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsbUJBQW1CLHVCQUF1QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcbmV4dC1kZXZ0b29sc1xcdXNlcnNwYWNlXFxwYWdlc1xcaHlkcmF0aW9uLWVycm9yLXN0YXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYXR0YWNoSHlkcmF0aW9uRXJyb3JTdGF0ZTogbnVsbCxcbiAgICBnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsczogbnVsbCxcbiAgICBzdG9yZUh5ZHJhdGlvbkVycm9yU3RhdGVGcm9tQ29uc29sZUFyZ3M6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgYXR0YWNoSHlkcmF0aW9uRXJyb3JTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhdHRhY2hIeWRyYXRpb25FcnJvclN0YXRlO1xuICAgIH0sXG4gICAgZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM7XG4gICAgfSxcbiAgICBzdG9yZUh5ZHJhdGlvbkVycm9yU3RhdGVGcm9tQ29uc29sZUFyZ3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RvcmVIeWRyYXRpb25FcnJvclN0YXRlRnJvbUNvbnNvbGVBcmdzO1xuICAgIH1cbn0pO1xuY29uc3QgX3JlYWN0MThoeWRyYXRpb25lcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvcmVhY3QtMTgtaHlkcmF0aW9uLWVycm9yXCIpO1xuY29uc3QgX3JlYWN0MTloeWRyYXRpb25lcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvcmVhY3QtMTktaHlkcmF0aW9uLWVycm9yXCIpO1xuLy8gV2Ugb25seSBuZWVkIHRoaXMgZm9yIFJlYWN0IDE4IG9yIGh5ZHJhdGlvbiBjb25zb2xlIGVycm9ycyBpbiBSZWFjdCAxOS5cbi8vIE9uY2Ugd2Ugc3VyZmFjZSBjb25zb2xlLmVycm9yIGluIHRoZSBkZXYgb3ZlcmxheSBpbiBwYWdlcyByb3V0ZXIsIHdlIHNob3VsZCBvbmx5XG4vLyB1c2UgdGhpcyBmb3IgUmVhY3QgMTguXG5sZXQgaHlkcmF0aW9uRXJyb3JTdGF0ZSA9IHt9O1xuY29uc3Qgc3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMgPSBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMoZXJyb3IpIHtcbiAgICByZXR1cm4gc3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMuaGFzKGVycm9yKSA/IHNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzLmdldChlcnJvcikgOiBudWxsO1xufVxuZnVuY3Rpb24gYXR0YWNoSHlkcmF0aW9uRXJyb3JTdGF0ZShlcnJvcikge1xuICAgIGlmICghKDAsIF9yZWFjdDE4aHlkcmF0aW9uZXJyb3IuaXNIeWRyYXRpb25FcnJvcikoZXJyb3IpICYmICEoMCwgX3JlYWN0MTloeWRyYXRpb25lcnJvci5pc0h5ZHJhdGlvbkVycm9yKShlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcGFyc2VkSHlkcmF0aW9uRXJyb3JTdGF0ZSA9IHt9O1xuICAgIC8vIElmIHRoZXJlJ3MgYW55IGV4dHJhIGluZm9ybWF0aW9uIGluIHRoZSBlcnJvciBtZXNzYWdlIHRvIGRpc3BsYXksXG4gICAgLy8gYXBwZW5kIGl0IHRvIHRoZSBlcnJvciBtZXNzYWdlIGRldGFpbHMgcHJvcGVydHlcbiAgICBpZiAoaHlkcmF0aW9uRXJyb3JTdGF0ZS53YXJuaW5nKSB7XG4gICAgICAgIC8vIFRoZSBwYXRjaGVkIGNvbnNvbGUuZXJyb3IgZm91bmQgaHlkcmF0aW9uIGVycm9ycyBsb2dnZWQgYnkgUmVhY3RcbiAgICAgICAgLy8gQXBwZW5kIHRoZSBsb2dnZWQgd2FybmluZyB0byB0aGUgZXJyb3IgbWVzc2FnZVxuICAgICAgICBwYXJzZWRIeWRyYXRpb25FcnJvclN0YXRlID0ge1xuICAgICAgICAgICAgLy8gSXQgY29udGFpbnMgdGhlIHdhcm5pbmcsIGNvbXBvbmVudCBzdGFjaywgc2VydmVyIGFuZCBjbGllbnQgdGFnIG5hbWVzXG4gICAgICAgICAgICAuLi5oeWRyYXRpb25FcnJvclN0YXRlXG4gICAgICAgIH07XG4gICAgICAgIC8vIENvbnN1bWUgdGhlIGNhY2hlZCBoeWRyYXRpb24gZGlmZi5cbiAgICAgICAgLy8gVGhpcyBpcyBvbmx5IHJlcXVpcmVkIGZvciBub3cgd2hlbiB3ZSBzdGlsbCBzcXVhc2hlZCB0aGUgaHlkcmF0aW9uIGRpZmYgbG9nIGludG8gaHlkcmF0aW9uIGVycm9yLlxuICAgICAgICAvLyBPbmNlIHRoZSBhbGwgZXJyb3IgaXMgbG9nZ2VkIHRvIGRldiBvdmVybGF5IGluIG9yZGVyLCB0aGlzIHdpbGwgZ28gYXdheS5cbiAgICAgICAgaWYgKGh5ZHJhdGlvbkVycm9yU3RhdGUucmVhY3RPdXRwdXRDb21wb25lbnREaWZmKSB7XG4gICAgICAgICAgICBwYXJzZWRIeWRyYXRpb25FcnJvclN0YXRlLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZiA9IGh5ZHJhdGlvbkVycm9yU3RhdGUucmVhY3RPdXRwdXRDb21wb25lbnREaWZmO1xuICAgICAgICB9XG4gICAgICAgIHNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzLnNldChlcnJvciwgcGFyc2VkSHlkcmF0aW9uRXJyb3JTdGF0ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3RvcmVIeWRyYXRpb25FcnJvclN0YXRlRnJvbUNvbnNvbGVBcmdzKCkge1xuICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgbGV0IFttZXNzYWdlLCBmaXJzdENvbnRlbnQsIHNlY29uZENvbnRlbnQsIC4uLnJlc3RdID0gYXJncztcbiAgICBpZiAoKDAsIF9yZWFjdDE4aHlkcmF0aW9uZXJyb3IuaXNIeWRyYXRpb25XYXJuaW5nKShtZXNzYWdlKSkge1xuICAgICAgICAvLyBTb21lIGh5ZHJhdGlvbiB3YXJuaW5ncyBoYXMgNCBhcmd1bWVudHMsIHNvbWUgaGFzIDMsIGZhbGxiYWNrIHRvIHRoZSBsYXN0IGFyZ3VtZW50XG4gICAgICAgIC8vIHdoZW4gdGhlIDNyZCBhcmd1bWVudCBpcyBub3QgdGhlIGNvbXBvbmVudCBzdGFjayBidXQgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIC8vIEZvciBzb21lIHdhcm5pbmdzLCB0aGVyZSdzIG9ubHkgMSBhcmd1bWVudCBmb3IgdGVtcGxhdGUuXG4gICAgICAgIC8vIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGRpZmYgb3IgY29tcG9uZW50IHN0YWNrLlxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHNlY29uZENvbnRlbnQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3YXJuaW5nID0gbWVzc2FnZS5yZXBsYWNlKC9XYXJuaW5nOiAvLCAnJykucmVwbGFjZSgnJXMnLCBmaXJzdENvbnRlbnQpLnJlcGxhY2UoJyVzJywgc2Vjb25kQ29udGVudCkvLyByZW1vdmUgdGhlIGxhc3QgJXMgZnJvbSB0aGUgbWVzc2FnZVxuICAgICAgICAucmVwbGFjZSgvJXMvZywgJycpO1xuICAgICAgICBjb25zdCBsYXN0QXJnID0gKHJlc3RbcmVzdC5sZW5ndGggLSAxXSB8fCAnJykudHJpbSgpO1xuICAgICAgICBoeWRyYXRpb25FcnJvclN0YXRlLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZiA9IGdlbmVyYXRlSHlkcmF0aW9uRGlmZlJlYWN0MTgobWVzc2FnZSwgZmlyc3RDb250ZW50LCBzZWNvbmRDb250ZW50LCBsYXN0QXJnKTtcbiAgICAgICAgaHlkcmF0aW9uRXJyb3JTdGF0ZS53YXJuaW5nID0gd2FybmluZztcbiAgICB9IGVsc2UgaWYgKCgwLCBfcmVhY3QxOWh5ZHJhdGlvbmVycm9yLmlzRXJyb3JNZXNzYWdlV2l0aENvbXBvbmVudFN0YWNrRGlmZikobWVzc2FnZSkpIHtcbiAgICAgICAgLy8gU29tZSBoeWRyYXRpb24gd2FybmluZ3MgaGFzIDQgYXJndW1lbnRzLCBzb21lIGhhcyAzLCBmYWxsYmFjayB0byB0aGUgbGFzdCBhcmd1bWVudFxuICAgICAgICAvLyB3aGVuIHRoZSAzcmQgYXJndW1lbnQgaXMgbm90IHRoZSBjb21wb25lbnQgc3RhY2sgYnV0IGFuIGVtcHR5IHN0cmluZ1xuICAgICAgICAvLyBGb3Igc29tZSB3YXJuaW5ncywgdGhlcmUncyBvbmx5IDEgYXJndW1lbnQgZm9yIHRlbXBsYXRlLlxuICAgICAgICAvLyBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBkaWZmIG9yIGNvbXBvbmVudCBzdGFjay5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBzZWNvbmRDb250ZW50ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2FybmluZyA9IG1lc3NhZ2UucmVwbGFjZSgnJXMnLCBmaXJzdENvbnRlbnQpLnJlcGxhY2UoJyVzJywgc2Vjb25kQ29udGVudCkvLyByZW1vdmUgdGhlIGxhc3QgJXMgZnJvbSB0aGUgbWVzc2FnZVxuICAgICAgICAucmVwbGFjZSgvJXMvZywgJycpO1xuICAgICAgICBjb25zdCBsYXN0QXJnID0gKGFyZ3NbYXJncy5sZW5ndGggLSAxXSB8fCAnJykudHJpbSgpO1xuICAgICAgICBoeWRyYXRpb25FcnJvclN0YXRlLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZiA9IGxhc3RBcmc7XG4gICAgICAgIGh5ZHJhdGlvbkVycm9yU3RhdGUud2FybmluZyA9IHdhcm5pbmc7XG4gICAgfVxufVxuLypcbiAqIFNvbWUgaHlkcmF0aW9uIGVycm9ycyBpbiBSZWFjdCAxOCBkb2VzIG5vdCBoYXZlIHRoZSBkaWZmIGluIHRoZSBlcnJvciBtZXNzYWdlLlxuICogSW5zdGVhZCBpdCBoYXMgdGhlIGVycm9yIHN0YWNrIHRyYWNlIHdoaWNoIGlzIGNvbXBvbmVudCBzdGFjayB0aGF0IHdlIGNhbiBsZXZlcmFnZS5cbiAqIFdpbGwgcGFyc2UgdGhlIGRpZmYgZnJvbSB0aGUgZXJyb3Igc3RhY2sgdHJhY2VcbiAqICBlLmcuXG4gKiAgV2FybmluZzogRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIDxkaXY+IGluIDxwPi5cbiAqICAgIGF0IGRpdlxuICogICAgYXQgcFxuICogICAgYXQgZGl2XG4gKiAgICBhdCBkaXZcbiAqICAgIGF0IFBhZ2VcbiAqICBvdXRwdXQ6XG4gKiAgICA8UGFnZT5cbiAqICAgICAgPGRpdj5cbiAqICAgICAgICA8cD5cbiAqICA+ICAgICAgIDxkaXY+XG4gKlxuICovIGZ1bmN0aW9uIGdlbmVyYXRlSHlkcmF0aW9uRGlmZlJlYWN0MTgobWVzc2FnZSwgZmlyc3RDb250ZW50LCBzZWNvbmRDb250ZW50LCBsYXN0QXJnKSB7XG4gICAgY29uc3QgY29tcG9uZW50U3RhY2sgPSBsYXN0QXJnO1xuICAgIGxldCBmaXJzdEluZGV4ID0gLTE7XG4gICAgbGV0IHNlY29uZEluZGV4ID0gLTE7XG4gICAgY29uc3QgaHlkcmF0aW9uV2FybmluZ1R5cGUgPSAoMCwgX3JlYWN0MThoeWRyYXRpb25lcnJvci5nZXRIeWRyYXRpb25XYXJuaW5nVHlwZSkobWVzc2FnZSk7XG4gICAgLy8gYXQgZGl2XFxuIGF0IEZvb1xcbiBhdCBCYXIgKC4uLi4pXFxuIC0+IFtkaXYsIEZvb11cbiAgICBjb25zdCBjb21wb25lbnRzID0gY29tcG9uZW50U3RhY2suc3BsaXQoJ1xcbicpLy8gLnJldmVyc2UoKVxuICAgIC5tYXAoKGxpbmUsIGluZGV4KT0+e1xuICAgICAgICAvLyBgPHNwYWNlPmF0IDxjb21wb25lbnQ+ICg8bG9jYXRpb24+KWAgLT4gYGF0IDxjb21wb25lbnQ+ICg8bG9jYXRpb24+KWBcbiAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgICAvLyBleHRyYWN0IGA8c3BhY2U+YXQgPGNvbXBvbmVudD5gIHRvIGA8PGNvbXBvbmVudD4+YFxuICAgICAgICAvLyBlLmcuIGAgIGF0IEZvb2AgLT4gYDxGb28+YFxuICAgICAgICBjb25zdCBbLCBjb21wb25lbnQsIGxvY2F0aW9uXSA9IC9hdCAoXFx3KykoIFxcKCguKilcXCkpPy8uZXhlYyhsaW5lKSB8fCBbXTtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBsb2NhdGlvbiB0aGVuIGl0J3MgdXNlci1sYW5kIHN0YWNrIGZyYW1lXG4gICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgPT09IGZpcnN0Q29udGVudCAmJiBmaXJzdEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGZpcnN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50ID09PSBzZWNvbmRDb250ZW50ICYmIHNlY29uZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHNlY29uZEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uID8gJycgOiBjb21wb25lbnQ7XG4gICAgfSkuZmlsdGVyKEJvb2xlYW4pLnJldmVyc2UoKTtcbiAgICBsZXQgZGlmZiA9ICcnO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50c1tpXTtcbiAgICAgICAgY29uc3QgbWF0Y2hGaXJzdENvbnRlbnQgPSBoeWRyYXRpb25XYXJuaW5nVHlwZSA9PT0gJ3RhZycgJiYgaSA9PT0gY29tcG9uZW50cy5sZW5ndGggLSBmaXJzdEluZGV4IC0gMTtcbiAgICAgICAgY29uc3QgbWF0Y2hTZWNvbmRDb250ZW50ID0gaHlkcmF0aW9uV2FybmluZ1R5cGUgPT09ICd0YWcnICYmIGkgPT09IGNvbXBvbmVudHMubGVuZ3RoIC0gc2Vjb25kSW5kZXggLSAxO1xuICAgICAgICBpZiAobWF0Y2hGaXJzdENvbnRlbnQgfHwgbWF0Y2hTZWNvbmRDb250ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzcGFjZXMgPSAnICcucmVwZWF0KE1hdGgubWF4KGkgKiAyIC0gMiwgMCkgKyAyKTtcbiAgICAgICAgICAgIGRpZmYgKz0gXCI+IFwiICsgc3BhY2VzICsgXCI8XCIgKyBjb21wb25lbnQgKyBcIj5cXG5cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNlcyA9ICcgJy5yZXBlYXQoaSAqIDIgKyAyKTtcbiAgICAgICAgICAgIGRpZmYgKz0gc3BhY2VzICsgXCI8XCIgKyBjb21wb25lbnQgKyBcIj5cXG5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaHlkcmF0aW9uV2FybmluZ1R5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICBjb25zdCBzcGFjZXMgPSAnICcucmVwZWF0KGNvbXBvbmVudHMubGVuZ3RoICogMik7XG4gICAgICAgIGRpZmYgKz0gXCIrIFwiICsgc3BhY2VzICsgJ1wiJyArIGZpcnN0Q29udGVudCArICdcIlxcbic7XG4gICAgICAgIGRpZmYgKz0gXCItIFwiICsgc3BhY2VzICsgJ1wiJyArIHNlY29uZENvbnRlbnQgKyAnXCJcXG4nO1xuICAgIH0gZWxzZSBpZiAoaHlkcmF0aW9uV2FybmluZ1R5cGUgPT09ICd0ZXh0LWluLXRhZycpIHtcbiAgICAgICAgY29uc3Qgc3BhY2VzID0gJyAnLnJlcGVhdChjb21wb25lbnRzLmxlbmd0aCAqIDIpO1xuICAgICAgICBkaWZmICs9IFwiPiBcIiArIHNwYWNlcyArIFwiPFwiICsgc2Vjb25kQ29udGVudCArIFwiPlxcblwiO1xuICAgICAgICBkaWZmICs9IFwiPiAgIFwiICsgc3BhY2VzICsgJ1wiJyArIGZpcnN0Q29udGVudCArICdcIlxcbic7XG4gICAgfVxuICAgIHJldHVybiBkaWZmO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oeWRyYXRpb24tZXJyb3Itc3RhdGUuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/pages/hydration-error-state.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-error-boundary.js":
|
||
/*!**************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-error-boundary.js ***!
|
||
\**************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"PagesDevOverlayErrorBoundary\", ({\n enumerable: true,\n get: function() {\n return PagesDevOverlayErrorBoundary;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nclass PagesDevOverlayErrorBoundary extends _react.default.PureComponent {\n static getDerivedStateFromError(error) {\n return {\n error\n };\n }\n // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific to the `@types/react` version.\n render() {\n // The component has to be unmounted or else it would continue to error\n return this.state.error ? null : this.props.children;\n }\n constructor(...args){\n super(...args), this.state = {\n error: null\n };\n }\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=pages-dev-overlay-error-boundary.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvcGFnZXMvcGFnZXMtZGV2LW92ZXJsYXktZXJyb3ItYm91bmRhcnkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixnRUFBK0Q7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRixpQ0FBaUMsbUJBQU8sQ0FBQyxnSUFBeUM7QUFDbEYsd0RBQXdELG1CQUFPLENBQUMsZ0VBQU87QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxuZXh0XFxkaXN0XFxuZXh0LWRldnRvb2xzXFx1c2Vyc3BhY2VcXHBhZ2VzXFxwYWdlcy1kZXYtb3ZlcmxheS1lcnJvci1ib3VuZGFyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhZ2VzRGV2T3ZlcmxheUVycm9yQm91bmRhcnlcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBhZ2VzRGV2T3ZlcmxheUVycm9yQm91bmRhcnk7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY2xhc3MgUGFnZXNEZXZPdmVybGF5RXJyb3JCb3VuZGFyeSBleHRlbmRzIF9yZWFjdC5kZWZhdWx0LlB1cmVDb21wb25lbnQge1xuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIEV4cGxpY2l0IHR5cGUgaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBnZW5lcmF0ZWQgYC5kLnRzYCBoYXZpbmcgYSB3aWRlIHJldHVybiB0eXBlIHRoYXQgY291bGQgYmUgc3BlY2lmaWMgdG8gdGhlIGBAdHlwZXMvcmVhY3RgIHZlcnNpb24uXG4gICAgcmVuZGVyKCkge1xuICAgICAgICAvLyBUaGUgY29tcG9uZW50IGhhcyB0byBiZSB1bm1vdW50ZWQgb3IgZWxzZSBpdCB3b3VsZCBjb250aW51ZSB0byBlcnJvclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5lcnJvciA/IG51bGwgOiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyksIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFnZXMtZGV2LW92ZXJsYXktZXJyb3ItYm91bmRhcnkuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-error-boundary.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.js":
|
||
/*!*****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.js ***!
|
||
\*****************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PagesDevOverlayBridge: function() {\n return PagesDevOverlayBridge;\n },\n register: function() {\n return register;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(pages-dir-browser)/./node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _hydrationerrorstate = __webpack_require__(/*! ./hydration-error-state */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/pages/hydration-error-state.js\");\nconst _router = __webpack_require__(/*! ../../../client/router */ \"(pages-dir-browser)/./node_modules/next/dist/client/router.js\");\nconst _stitchederror = __webpack_require__(/*! ../app/errors/stitched-error */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\nconst _onrecoverableerror = __webpack_require__(/*! ../../../client/react-client-callbacks/on-recoverable-error */ \"(pages-dir-browser)/./node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\");\nconst _pagesdevoverlayerrorboundary = __webpack_require__(/*! ./pages-dev-overlay-error-boundary */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-error-boundary.js\");\nconst _forwardlogs = __webpack_require__(/*! ../app/forward-logs */ \"(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\nconst usePagesDevOverlayBridge = ()=>{\n _react.default.useInsertionEffect(()=>{\n // NDT uses a different React instance so it's not technically a state update\n // scheduled from useInsertionEffect.\n (0, _nextdevtools.renderPagesDevOverlay)(_stitchederror.getComponentStack, _stitchederror.getOwnerStack, _hydrationerrorstate.getSquashedHydrationErrorDetails, _onrecoverableerror.isRecoverableError);\n }, []);\n _react.default.useEffect(()=>{\n const { handleStaticIndicator } = __webpack_require__(/*! ../../../client/dev/hot-reloader/pages/hot-reloader-pages */ \"(pages-dir-browser)/./node_modules/next/dist/client/dev/hot-reloader/pages/hot-reloader-pages.js\");\n _router.Router.events.on('routeChangeComplete', handleStaticIndicator);\n return function() {\n _router.Router.events.off('routeChangeComplete', handleStaticIndicator);\n };\n }, []);\n};\nfunction PagesDevOverlayBridge(param) {\n let { children } = param;\n usePagesDevOverlayBridge();\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_pagesdevoverlayerrorboundary.PagesDevOverlayErrorBoundary, {\n children: children\n });\n}\nlet isRegistered = false;\nfunction handleError(error) {\n if (!error || !(error instanceof Error) || typeof error.stack !== 'string') {\n // A non-error was thrown, we don't have anything to show. :-(\n return;\n }\n (0, _hydrationerrorstate.attachHydrationErrorState)(error);\n // Skip ModuleBuildError and ModuleNotFoundError, as it will be sent through onBuildError callback.\n // This is to avoid same error as different type showing up on client to cause flashing.\n if (error.name !== 'ModuleBuildError' && error.name !== 'ModuleNotFoundError') {\n _nextdevtools.dispatcher.onUnhandledError(error);\n }\n}\nlet origConsoleError = console.error;\nfunction nextJsHandleConsoleError() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n // See https://github.com/facebook/react/blob/d50323eb845c5fde0d720cae888bf35dedd05506/packages/react-reconciler/src/ReactFiberErrorLogger.js#L78\n const maybeError = true ? args[1] : 0;\n (0, _hydrationerrorstate.storeHydrationErrorStateFromConsoleArgs)(...args);\n // TODO: Surfaces non-errors logged via `console.error`.\n handleError(maybeError);\n if (_forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.forwardErrorLog)(args);\n }\n origConsoleError.apply(window.console, args);\n}\nfunction onUnhandledError(event) {\n const error = event == null ? void 0 : event.error;\n handleError(error);\n if (error && _forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.forwardUnhandledError)(error);\n }\n}\nfunction onUnhandledRejection(ev) {\n const reason = ev == null ? void 0 : ev.reason;\n if (!reason || !(reason instanceof Error) || typeof reason.stack !== 'string') {\n // A non-error was thrown, we don't have anything to show. :-(\n return;\n }\n _nextdevtools.dispatcher.onUnhandledRejection(reason);\n if (_forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.logUnhandledRejection)(reason);\n }\n}\nfunction register() {\n if (isRegistered) {\n return;\n }\n isRegistered = true;\n try {\n Error.stackTraceLimit = 50;\n } catch (e) {}\n if (_forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.initializeDebugLogForwarding)('pages');\n }\n window.addEventListener('error', onUnhandledError);\n window.addEventListener('unhandledrejection', onUnhandledRejection);\n window.console.error = nextJsHandleConsoleError;\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=pages-dev-overlay-setup.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvcGFnZXMvcGFnZXMtZGV2LW92ZXJsYXktc2V0dXAuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBR0w7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsaUNBQWlDLG1CQUFPLENBQUMsZ0lBQXlDO0FBQ2xGLG9CQUFvQixtQkFBTyxDQUFDLGtGQUFtQjtBQUMvQyx3REFBd0QsbUJBQU8sQ0FBQyxnRUFBTztBQUN2RSxzQkFBc0IsbUJBQU8sQ0FBQyxzSEFBa0M7QUFDaEUsNkJBQTZCLG1CQUFPLENBQUMsb0lBQXlCO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLDZGQUF3QjtBQUNoRCx1QkFBdUIsbUJBQU8sQ0FBQyx1SUFBOEI7QUFDN0QsNEJBQTRCLG1CQUFPLENBQUMsdUtBQTZEO0FBQ2pHLHNDQUFzQyxtQkFBTyxDQUFDLDBKQUFvQztBQUNsRixxQkFBcUIsbUJBQU8sQ0FBQyxxSEFBcUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGdCQUFnQix3QkFBd0IsRUFBRSxtQkFBTyxDQUFDLG1LQUEyRDtBQUM3RztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxhQUFhO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixLQUFxQyxhQUFhLENBQU87QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJEOlxcZG9uZ3l1bi1wcm9qZWN0c1xcdHdvXFxub2RlX21vZHVsZXNcXG5leHRcXGRpc3RcXG5leHQtZGV2dG9vbHNcXHVzZXJzcGFjZVxccGFnZXNcXHBhZ2VzLWRldi1vdmVybGF5LXNldHVwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUGFnZXNEZXZPdmVybGF5QnJpZGdlOiBudWxsLFxuICAgIHJlZ2lzdGVyOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFBhZ2VzRGV2T3ZlcmxheUJyaWRnZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQYWdlc0Rldk92ZXJsYXlCcmlkZ2U7XG4gICAgfSxcbiAgICByZWdpc3RlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZWdpc3RlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9uZXh0ZGV2dG9vbHMgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL25leHQtZGV2dG9vbHNcIik7XG5jb25zdCBfaHlkcmF0aW9uZXJyb3JzdGF0ZSA9IHJlcXVpcmUoXCIuL2h5ZHJhdGlvbi1lcnJvci1zdGF0ZVwiKTtcbmNvbnN0IF9yb3V0ZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L3JvdXRlclwiKTtcbmNvbnN0IF9zdGl0Y2hlZGVycm9yID0gcmVxdWlyZShcIi4uL2FwcC9lcnJvcnMvc3RpdGNoZWQtZXJyb3JcIik7XG5jb25zdCBfb25yZWNvdmVyYWJsZWVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2NsaWVudC9yZWFjdC1jbGllbnQtY2FsbGJhY2tzL29uLXJlY292ZXJhYmxlLWVycm9yXCIpO1xuY29uc3QgX3BhZ2VzZGV2b3ZlcmxheWVycm9yYm91bmRhcnkgPSByZXF1aXJlKFwiLi9wYWdlcy1kZXYtb3ZlcmxheS1lcnJvci1ib3VuZGFyeVwiKTtcbmNvbnN0IF9mb3J3YXJkbG9ncyA9IHJlcXVpcmUoXCIuLi9hcHAvZm9yd2FyZC1sb2dzXCIpO1xuY29uc3QgdXNlUGFnZXNEZXZPdmVybGF5QnJpZGdlID0gKCk9PntcbiAgICBfcmVhY3QuZGVmYXVsdC51c2VJbnNlcnRpb25FZmZlY3QoKCk9PntcbiAgICAgICAgLy8gTkRUIHVzZXMgYSBkaWZmZXJlbnQgUmVhY3QgaW5zdGFuY2Ugc28gaXQncyBub3QgdGVjaG5pY2FsbHkgYSBzdGF0ZSB1cGRhdGVcbiAgICAgICAgLy8gc2NoZWR1bGVkIGZyb20gdXNlSW5zZXJ0aW9uRWZmZWN0LlxuICAgICAgICAoMCwgX25leHRkZXZ0b29scy5yZW5kZXJQYWdlc0Rldk92ZXJsYXkpKF9zdGl0Y2hlZGVycm9yLmdldENvbXBvbmVudFN0YWNrLCBfc3RpdGNoZWRlcnJvci5nZXRPd25lclN0YWNrLCBfaHlkcmF0aW9uZXJyb3JzdGF0ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscywgX29ucmVjb3ZlcmFibGVlcnJvci5pc1JlY292ZXJhYmxlRXJyb3IpO1xuICAgIH0sIFtdKTtcbiAgICBfcmVhY3QuZGVmYXVsdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgY29uc3QgeyBoYW5kbGVTdGF0aWNJbmRpY2F0b3IgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NsaWVudC9kZXYvaG90LXJlbG9hZGVyL3BhZ2VzL2hvdC1yZWxvYWRlci1wYWdlcycpO1xuICAgICAgICBfcm91dGVyLlJvdXRlci5ldmVudHMub24oJ3JvdXRlQ2hhbmdlQ29tcGxldGUnLCBoYW5kbGVTdGF0aWNJbmRpY2F0b3IpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBfcm91dGVyLlJvdXRlci5ldmVudHMub2ZmKCdyb3V0ZUNoYW5nZUNvbXBsZXRlJywgaGFuZGxlU3RhdGljSW5kaWNhdG9yKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG59O1xuZnVuY3Rpb24gUGFnZXNEZXZPdmVybGF5QnJpZGdlKHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4gfSA9IHBhcmFtO1xuICAgIHVzZVBhZ2VzRGV2T3ZlcmxheUJyaWRnZSgpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9wYWdlc2Rldm92ZXJsYXllcnJvcmJvdW5kYXJ5LlBhZ2VzRGV2T3ZlcmxheUVycm9yQm91bmRhcnksIHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59XG5sZXQgaXNSZWdpc3RlcmVkID0gZmFsc2U7XG5mdW5jdGlvbiBoYW5kbGVFcnJvcihlcnJvcikge1xuICAgIGlmICghZXJyb3IgfHwgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB8fCB0eXBlb2YgZXJyb3Iuc3RhY2sgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEEgbm9uLWVycm9yIHdhcyB0aHJvd24sIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2hvdy4gOi0oXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKDAsIF9oeWRyYXRpb25lcnJvcnN0YXRlLmF0dGFjaEh5ZHJhdGlvbkVycm9yU3RhdGUpKGVycm9yKTtcbiAgICAvLyBTa2lwIE1vZHVsZUJ1aWxkRXJyb3IgYW5kIE1vZHVsZU5vdEZvdW5kRXJyb3IsIGFzIGl0IHdpbGwgYmUgc2VudCB0aHJvdWdoIG9uQnVpbGRFcnJvciBjYWxsYmFjay5cbiAgICAvLyBUaGlzIGlzIHRvIGF2b2lkIHNhbWUgZXJyb3IgYXMgZGlmZmVyZW50IHR5cGUgc2hvd2luZyB1cCBvbiBjbGllbnQgdG8gY2F1c2UgZmxhc2hpbmcuXG4gICAgaWYgKGVycm9yLm5hbWUgIT09ICdNb2R1bGVCdWlsZEVycm9yJyAmJiBlcnJvci5uYW1lICE9PSAnTW9kdWxlTm90Rm91bmRFcnJvcicpIHtcbiAgICAgICAgX25leHRkZXZ0b29scy5kaXNwYXRjaGVyLm9uVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmxldCBvcmlnQ29uc29sZUVycm9yID0gY29uc29sZS5lcnJvcjtcbmZ1bmN0aW9uIG5leHRKc0hhbmRsZUNvbnNvbGVFcnJvcigpIHtcbiAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9kNTAzMjNlYjg0NWM1ZmRlMGQ3MjBjYWU4ODhiZjM1ZGVkZDA1NTA2L3BhY2thZ2VzL3JlYWN0LXJlY29uY2lsZXIvc3JjL1JlYWN0RmliZXJFcnJvckxvZ2dlci5qcyNMNzhcbiAgICBjb25zdCBtYXliZUVycm9yID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGFyZ3NbMV0gOiBhcmdzWzBdO1xuICAgICgwLCBfaHlkcmF0aW9uZXJyb3JzdGF0ZS5zdG9yZUh5ZHJhdGlvbkVycm9yU3RhdGVGcm9tQ29uc29sZUFyZ3MpKC4uLmFyZ3MpO1xuICAgIC8vIFRPRE86IFN1cmZhY2VzIG5vbi1lcnJvcnMgbG9nZ2VkIHZpYSBgY29uc29sZS5lcnJvcmAuXG4gICAgaGFuZGxlRXJyb3IobWF5YmVFcnJvcik7XG4gICAgaWYgKF9mb3J3YXJkbG9ncy5pc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQpIHtcbiAgICAgICAgKDAsIF9mb3J3YXJkbG9ncy5mb3J3YXJkRXJyb3JMb2cpKGFyZ3MpO1xuICAgIH1cbiAgICBvcmlnQ29uc29sZUVycm9yLmFwcGx5KHdpbmRvdy5jb25zb2xlLCBhcmdzKTtcbn1cbmZ1bmN0aW9uIG9uVW5oYW5kbGVkRXJyb3IoZXZlbnQpIHtcbiAgICBjb25zdCBlcnJvciA9IGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC5lcnJvcjtcbiAgICBoYW5kbGVFcnJvcihlcnJvcik7XG4gICAgaWYgKGVycm9yICYmIF9mb3J3YXJkbG9ncy5pc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQpIHtcbiAgICAgICAgKDAsIF9mb3J3YXJkbG9ncy5mb3J3YXJkVW5oYW5kbGVkRXJyb3IpKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBvblVuaGFuZGxlZFJlamVjdGlvbihldikge1xuICAgIGNvbnN0IHJlYXNvbiA9IGV2ID09IG51bGwgPyB2b2lkIDAgOiBldi5yZWFzb247XG4gICAgaWYgKCFyZWFzb24gfHwgIShyZWFzb24gaW5zdGFuY2VvZiBFcnJvcikgfHwgdHlwZW9mIHJlYXNvbi5zdGFjayAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQSBub24tZXJyb3Igd2FzIHRocm93biwgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzaG93LiA6LShcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfbmV4dGRldnRvb2xzLmRpc3BhdGNoZXIub25VbmhhbmRsZWRSZWplY3Rpb24ocmVhc29uKTtcbiAgICBpZiAoX2ZvcndhcmRsb2dzLmlzVGVybWluYWxMb2dnaW5nRW5hYmxlZCkge1xuICAgICAgICAoMCwgX2ZvcndhcmRsb2dzLmxvZ1VuaGFuZGxlZFJlamVjdGlvbikocmVhc29uKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZWdpc3RlcigpIHtcbiAgICBpZiAoaXNSZWdpc3RlcmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXNSZWdpc3RlcmVkID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSA1MDtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIGlmIChfZm9yd2FyZGxvZ3MuaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKSB7XG4gICAgICAgICgwLCBfZm9yd2FyZGxvZ3MuaW5pdGlhbGl6ZURlYnVnTG9nRm9yd2FyZGluZykoJ3BhZ2VzJyk7XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uVW5oYW5kbGVkRXJyb3IpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCBvblVuaGFuZGxlZFJlamVjdGlvbik7XG4gICAgd2luZG93LmNvbnNvbGUuZXJyb3IgPSBuZXh0SnNIYW5kbGVDb25zb2xlRXJyb3I7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhZ2VzLWRldi1vdmVybGF5LXNldHVwLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/next/dist/server/dev/hot-reloader-types.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HMR_ACTIONS_SENT_TO_BROWSER\", ({\n enumerable: true,\n get: function() {\n return HMR_ACTIONS_SENT_TO_BROWSER;\n }\n}));\nvar HMR_ACTIONS_SENT_TO_BROWSER = /*#__PURE__*/ function(HMR_ACTIONS_SENT_TO_BROWSER) {\n HMR_ACTIONS_SENT_TO_BROWSER[\"ADDED_PAGE\"] = \"addedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"REMOVED_PAGE\"] = \"removedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"RELOAD_PAGE\"] = \"reloadPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_COMPONENT_CHANGES\"] = \"serverComponentChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"MIDDLEWARE_CHANGES\"] = \"middlewareChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"CLIENT_CHANGES\"] = \"clientChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ONLY_CHANGES\"] = \"serverOnlyChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SYNC\"] = \"sync\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILT\"] = \"built\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILDING\"] = \"building\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_PAGES_MANIFEST_UPDATE\"] = \"devPagesManifestUpdate\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_MESSAGE\"] = \"turbopack-message\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ERROR\"] = \"serverError\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_CONNECTED\"] = \"turbopack-connected\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"ISR_MANIFEST\"] = \"isrManifest\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_INDICATOR\"] = \"devIndicator\";\n return HMR_ACTIONS_SENT_TO_BROWSER;\n}({});\n\n//# sourceMappingURL=hot-reloader-types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRiwrREFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7O0FBRUoiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcc2VydmVyXFxkZXZcXGhvdC1yZWxvYWRlci10eXBlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUlwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSO1xuICAgIH1cbn0pO1xudmFyIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSKSB7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQURERURfUEFHRVwiXSA9IFwiYWRkZWRQYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiUkVNT1ZFRF9QQUdFXCJdID0gXCJyZW1vdmVkUGFnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlJFTE9BRF9QQUdFXCJdID0gXCJyZWxvYWRQYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU0VSVkVSX0NPTVBPTkVOVF9DSEFOR0VTXCJdID0gXCJzZXJ2ZXJDb21wb25lbnRDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiTUlERExFV0FSRV9DSEFOR0VTXCJdID0gXCJtaWRkbGV3YXJlQ2hhbmdlc1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkNMSUVOVF9DSEFOR0VTXCJdID0gXCJjbGllbnRDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU0VSVkVSX09OTFlfQ0hBTkdFU1wiXSA9IFwic2VydmVyT25seUNoYW5nZXNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTWU5DXCJdID0gXCJzeW5jXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQlVJTFRcIl0gPSBcImJ1aWx0XCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQlVJTERJTkdcIl0gPSBcImJ1aWxkaW5nXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiREVWX1BBR0VTX01BTklGRVNUX1VQREFURVwiXSA9IFwiZGV2UGFnZXNNYW5pZmVzdFVwZGF0ZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlRVUkJPUEFDS19NRVNTQUdFXCJdID0gXCJ0dXJib3BhY2stbWVzc2FnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlNFUlZFUl9FUlJPUlwiXSA9IFwic2VydmVyRXJyb3JcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJUVVJCT1BBQ0tfQ09OTkVDVEVEXCJdID0gXCJ0dXJib3BhY2stY29ubmVjdGVkXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiSVNSX01BTklGRVNUXCJdID0gXCJpc3JNYW5pZmVzdFwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkRFVl9JTkRJQ0FUT1JcIl0gPSBcImRldkluZGljYXRvclwiO1xuICAgIHJldHVybiBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVI7XG59KHt9KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG90LXJlbG9hZGVyLXR5cGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/server/dev/node-stack-frames.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/next/dist/server/dev/node-stack-frames.js ***!
|
||
\****************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getServerError\", ({\n enumerable: true,\n get: function() {\n return getServerError;\n }\n}));\nconst _stacktraceparser = __webpack_require__(/*! next/dist/compiled/stacktrace-parser */ \"(pages-dir-browser)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\");\nconst _errorsource = __webpack_require__(/*! ../../shared/lib/error-source */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/error-source.js\");\nfunction getFilesystemFrame(frame) {\n const f = {\n ...frame\n };\n if (typeof f.file === 'string') {\n if (// Posix:\n f.file.startsWith('/') || // Win32:\n /^[a-z]:\\\\/i.test(f.file) || // Win32 UNC:\n f.file.startsWith('\\\\\\\\')) {\n f.file = `file://${f.file}`;\n }\n }\n return f;\n}\nfunction getServerError(error, type) {\n if (error.name === 'TurbopackInternalError') {\n // If this is an internal Turbopack error we shouldn't show internal details\n // to the user. These are written to a log file instead.\n const turbopackInternalError = Object.defineProperty(new Error('An unexpected Turbopack error occurred. Please see the output of `next dev` for more details.'), \"__NEXT_ERROR_CODE\", {\n value: \"E167\",\n enumerable: false,\n configurable: true\n });\n (0, _errorsource.decorateServerError)(turbopackInternalError, type);\n return turbopackInternalError;\n }\n let n;\n try {\n throw Object.defineProperty(new Error(error.message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n } catch (e) {\n n = e;\n }\n n.name = error.name;\n try {\n n.stack = `${n.toString()}\\n${(0, _stacktraceparser.parse)(error.stack).map(getFilesystemFrame).map((f)=>{\n let str = ` at ${f.methodName}`;\n if (f.file) {\n let loc = f.file;\n if (f.lineNumber) {\n loc += `:${f.lineNumber}`;\n if (f.column) {\n loc += `:${f.column}`;\n }\n }\n str += ` (${loc})`;\n }\n return str;\n }).join('\\n')}`;\n } catch {\n n.stack = error.stack;\n }\n (0, _errorsource.decorateServerError)(n, type);\n return n;\n}\n\n//# sourceMappingURL=node-stack-frames.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Rldi9ub2RlLXN0YWNrLWZyYW1lcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLGtEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGLDBCQUEwQixtQkFBTyxDQUFDLCtJQUFzQztBQUN4RSxxQkFBcUIsbUJBQU8sQ0FBQyw4R0FBK0I7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLE9BQU87QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsYUFBYSxJQUFJO0FBQ3RDLGdDQUFnQyxhQUFhO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixhQUFhO0FBQzVDO0FBQ0EsbUNBQW1DLFNBQVM7QUFDNUM7QUFDQTtBQUNBLDRCQUE0QixJQUFJO0FBQ2hDO0FBQ0E7QUFDQSxTQUFTLGFBQWE7QUFDdEIsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcbmV4dFxcZGlzdFxcc2VydmVyXFxkZXZcXG5vZGUtc3RhY2stZnJhbWVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U2VydmVyRXJyb3JcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFNlcnZlckVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgX3N0YWNrdHJhY2VwYXJzZXIgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3N0YWNrdHJhY2UtcGFyc2VyXCIpO1xuY29uc3QgX2Vycm9yc291cmNlID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvZXJyb3Itc291cmNlXCIpO1xuZnVuY3Rpb24gZ2V0RmlsZXN5c3RlbUZyYW1lKGZyYW1lKSB7XG4gICAgY29uc3QgZiA9IHtcbiAgICAgICAgLi4uZnJhbWVcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgZi5maWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoLy8gUG9zaXg6XG4gICAgICAgIGYuZmlsZS5zdGFydHNXaXRoKCcvJykgfHwgLy8gV2luMzI6XG4gICAgICAgIC9eW2Etel06XFxcXC9pLnRlc3QoZi5maWxlKSB8fCAvLyBXaW4zMiBVTkM6XG4gICAgICAgIGYuZmlsZS5zdGFydHNXaXRoKCdcXFxcXFxcXCcpKSB7XG4gICAgICAgICAgICBmLmZpbGUgPSBgZmlsZTovLyR7Zi5maWxlfWA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGY7XG59XG5mdW5jdGlvbiBnZXRTZXJ2ZXJFcnJvcihlcnJvciwgdHlwZSkge1xuICAgIGlmIChlcnJvci5uYW1lID09PSAnVHVyYm9wYWNrSW50ZXJuYWxFcnJvcicpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBpbnRlcm5hbCBUdXJib3BhY2sgZXJyb3Igd2Ugc2hvdWxkbid0IHNob3cgaW50ZXJuYWwgZGV0YWlsc1xuICAgICAgICAvLyB0byB0aGUgdXNlci4gVGhlc2UgYXJlIHdyaXR0ZW4gdG8gYSBsb2cgZmlsZSBpbnN0ZWFkLlxuICAgICAgICBjb25zdCB0dXJib3BhY2tJbnRlcm5hbEVycm9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcignQW4gdW5leHBlY3RlZCBUdXJib3BhY2sgZXJyb3Igb2NjdXJyZWQuIFBsZWFzZSBzZWUgdGhlIG91dHB1dCBvZiBgbmV4dCBkZXZgIGZvciBtb3JlIGRldGFpbHMuJyksIFwiX19ORVhUX0VSUk9SX0NPREVcIiwge1xuICAgICAgICAgICAgdmFsdWU6IFwiRTE2N1wiLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCBfZXJyb3Jzb3VyY2UuZGVjb3JhdGVTZXJ2ZXJFcnJvcikodHVyYm9wYWNrSW50ZXJuYWxFcnJvciwgdHlwZSk7XG4gICAgICAgIHJldHVybiB0dXJib3BhY2tJbnRlcm5hbEVycm9yO1xuICAgIH1cbiAgICBsZXQgbjtcbiAgICB0cnkge1xuICAgICAgICB0aHJvdyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3IEVycm9yKGVycm9yLm1lc3NhZ2UpLCBcIl9fTkVYVF9FUlJPUl9DT0RFXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBcIkUzOTRcIixcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbiA9IGU7XG4gICAgfVxuICAgIG4ubmFtZSA9IGVycm9yLm5hbWU7XG4gICAgdHJ5IHtcbiAgICAgICAgbi5zdGFjayA9IGAke24udG9TdHJpbmcoKX1cXG4keygwLCBfc3RhY2t0cmFjZXBhcnNlci5wYXJzZSkoZXJyb3Iuc3RhY2spLm1hcChnZXRGaWxlc3lzdGVtRnJhbWUpLm1hcCgoZik9PntcbiAgICAgICAgICAgIGxldCBzdHIgPSBgICAgIGF0ICR7Zi5tZXRob2ROYW1lfWA7XG4gICAgICAgICAgICBpZiAoZi5maWxlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxvYyA9IGYuZmlsZTtcbiAgICAgICAgICAgICAgICBpZiAoZi5saW5lTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYyArPSBgOiR7Zi5saW5lTnVtYmVyfWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmLmNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jICs9IGA6JHtmLmNvbHVtbn1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0ciArPSBgICgke2xvY30pYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH0pLmpvaW4oJ1xcbicpfWA7XG4gICAgfSBjYXRjaCAge1xuICAgICAgICBuLnN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgfVxuICAgICgwLCBfZXJyb3Jzb3VyY2UuZGVjb3JhdGVTZXJ2ZXJFcnJvcikobiwgdHlwZSk7XG4gICAgcmV0dXJuIG47XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vZGUtc3RhY2stZnJhbWVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/server/dev/node-stack-frames.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js":
|
||
/*!********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js ***!
|
||
\********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n AppRouterContext: function() {\n return AppRouterContext;\n },\n GlobalLayoutRouterContext: function() {\n return GlobalLayoutRouterContext;\n },\n LayoutRouterContext: function() {\n return LayoutRouterContext;\n },\n MissingSlotContext: function() {\n return MissingSlotContext;\n },\n TemplateContext: function() {\n return TemplateContext;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst AppRouterContext = _react.default.createContext(null);\nconst LayoutRouterContext = _react.default.createContext(null);\nconst GlobalLayoutRouterContext = _react.default.createContext(null);\nconst TemplateContext = _react.default.createContext(null);\nif (true) {\n AppRouterContext.displayName = 'AppRouterContext';\n LayoutRouterContext.displayName = 'LayoutRouterContext';\n GlobalLayoutRouterContext.displayName = 'GlobalLayoutRouterContext';\n TemplateContext.displayName = 'TemplateContext';\n}\nconst MissingSlotContext = _react.default.createContext(new Set()); //# sourceMappingURL=app-router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBaUthQSxnQkFBZ0I7ZUFBaEJBOztJQVVBQyx5QkFBeUI7ZUFBekJBOztJQVBBQyxtQkFBbUI7ZUFBbkJBOztJQXNCQUMsa0JBQWtCO2VBQWxCQTs7SUFUQUMsZUFBZTtlQUFmQTs7Ozs0RUF0S0s7QUFzSlgsTUFBTUosbUJBQW1CSyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FDakQ7QUFFSyxNQUFNSixzQkFBc0JHLE9BQUFBLE9BQUssQ0FBQ0MsYUFBYSxDQUs1QztBQUVILE1BQU1MLDRCQUE0QkksT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBSXpEO0FBRUksTUFBTUYsa0JBQWtCQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBa0I7QUFFcEUsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNQLGlCQUFpQlUsV0FBVyxHQUFHO0lBQy9CUixvQkFBb0JRLFdBQVcsR0FBRztJQUNsQ1QsMEJBQTBCUyxXQUFXLEdBQUc7SUFDeENOLGdCQUFnQk0sV0FBVyxHQUFHO0FBQ2hDO0FBRU8sTUFBTVAscUJBQXFCRSxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBYyxJQUFJSyIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXGFwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmV0Y2gtc2VydmVyLXJlc3BvbnNlJ1xuaW1wb3J0IHR5cGUge1xuICBGb2N1c0FuZFNjcm9sbFJlZixcbiAgUHJlZmV0Y2hLaW5kLFxufSBmcm9tICcuLi8uLi9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB0eXBlIHtcbiAgRmxpZ2h0Um91dGVyU3RhdGUsXG4gIEZsaWdodFNlZ21lbnRQYXRoLFxufSBmcm9tICcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHR5cGUgQ2hpbGRTZWdtZW50TWFwID0gTWFwPHN0cmluZywgQ2FjaGVOb2RlPlxuXG4vKipcbiAqIENhY2hlIG5vZGUgdXNlZCBpbiBhcHAtcm91dGVyIC8gbGF5b3V0LXJvdXRlci5cbiAqL1xuZXhwb3J0IHR5cGUgQ2FjaGVOb2RlID0gUmVhZHlDYWNoZU5vZGUgfCBMYXp5Q2FjaGVOb2RlXG5cbmV4cG9ydCB0eXBlIExvYWRpbmdNb2R1bGVEYXRhID1cbiAgfCBbUmVhY3QuSlNYLkVsZW1lbnQsIFJlYWN0LlJlYWN0Tm9kZSwgUmVhY3QuUmVhY3ROb2RlXVxuICB8IG51bGxcblxuLyoqIHZpZXdwb3J0IG1ldGFkYXRhIG5vZGUgKi9cbmV4cG9ydCB0eXBlIEhlYWREYXRhID0gUmVhY3QuUmVhY3ROb2RlXG5cbmV4cG9ydCB0eXBlIExhenlDYWNoZU5vZGUgPSB7XG4gIC8qKlxuICAgKiBXaGVuIHJzYyBpcyBudWxsLCB0aGlzIGlzIGEgbGF6aWx5LWluaXRpYWxpemVkIGNhY2hlIG5vZGUuXG4gICAqXG4gICAqIElmIHRoZSBhcHAgYXR0ZW1wdHMgdG8gcmVuZGVyIGl0LCBpdCB0cmlnZ2VycyBhIGxhenkgZGF0YSBmZXRjaCxcbiAgICogcG9zdHBvbmVzIHRoZSByZW5kZXIsIGFuZCBzY2hlZHVsZXMgYW4gdXBkYXRlIHRvIGEgbmV3IHRyZWUuXG4gICAqXG4gICAqIFRPRE86IFRoaXMgbWVjaGFuaXNtIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIFBQUiBpcyBlbmFibGVkLCB0aG91Z2ggaXRcbiAgICogY3VycmVudGx5IGlzIGluIHNvbWUgY2FzZXMgdW50aWwgd2UndmUgaW1wbGVtZW50ZWQgcGFydGlhbFxuICAgKiBzZWdtZW50IGZldGNoaW5nLlxuICAgKi9cbiAgcnNjOiBudWxsXG5cbiAgLyoqXG4gICAqIEEgcHJlZmV0Y2hlZCB2ZXJzaW9uIG9mIHRoZSBzZWdtZW50IGRhdGEuIFNlZSBleHBsYW5hdGlvbiBpbiBjb3JyZXNwb25kaW5nXG4gICAqIGZpZWxkIG9mIFJlYWR5Q2FjaGVOb2RlIChiZWxvdykuXG4gICAqXG4gICAqIFNpbmNlIExhenlDYWNoZU5vZGUgbW9zdGx5IG9ubHkgZXhpc3RzIGluIHRoZSBub24tUFBSIGltcGxlbWVudGF0aW9uLCB0aGlzXG4gICAqIHdpbGwgdXN1YWxseSBiZSBudWxsLCBidXQgaXQgY291bGQgaGF2ZSBiZWVuIGNsb25lZCBmcm9tIGEgcHJldmlvdXNcbiAgICogQ2FjaGVOb2RlIHRoYXQgd2FzIGNyZWF0ZWQgYnkgdGhlIFBQUiBpbXBsZW1lbnRhdGlvbi4gRXZlbnR1YWxseSB3ZSB3YW50XG4gICAqIHRvIG1pZ3JhdGUgZXZlcnl0aGluZyBhd2F5IGZyb20gTGF6eUNhY2hlTm9kZSBlbnRpcmVseS5cbiAgICovXG4gIHByZWZldGNoUnNjOiBSZWFjdC5SZWFjdE5vZGVcblxuICAvKipcbiAgICogQSBwZW5kaW5nIHJlc3BvbnNlIGZvciB0aGUgbGF6eSBkYXRhIGZldGNoLiBJZiB0aGlzIGlzIG5vdCBwcmVzZW50XG4gICAqIGR1cmluZyByZW5kZXIsIGl0IGlzIGxhemlseSBjcmVhdGVkLlxuICAgKi9cbiAgbGF6eURhdGE6IFByb21pc2U8RmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdD4gfCBudWxsXG5cbiAgcHJlZmV0Y2hIZWFkOiBIZWFkRGF0YSB8IG51bGxcblxuICBoZWFkOiBIZWFkRGF0YVxuXG4gIGxvYWRpbmc6IExvYWRpbmdNb2R1bGVEYXRhIHwgUHJvbWlzZTxMb2FkaW5nTW9kdWxlRGF0YT5cblxuICAvKipcbiAgICogQ2hpbGQgcGFyYWxsZWwgcm91dGVzLlxuICAgKi9cbiAgcGFyYWxsZWxSb3V0ZXM6IE1hcDxzdHJpbmcsIENoaWxkU2VnbWVudE1hcD5cblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCBvZiB0aGUgbmF2aWdhdGlvbiB0aGF0IGxhc3QgdXBkYXRlZCB0aGUgQ2FjaGVOb2RlJ3MgZGF0YS4gSWZcbiAgICogYSBDYWNoZU5vZGUgaXMgcmV1c2VkIGZyb20gYSBwcmV2aW91cyBuYXZpZ2F0aW9uLCB0aGlzIHZhbHVlIGlzIG5vdFxuICAgKiB1cGRhdGVkLiBVc2VkIHRvIHRyYWNrIHRoZSBzdGFsZW5lc3Mgb2YgdGhlIGRhdGEuXG4gICAqL1xuICBuYXZpZ2F0ZWRBdDogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIFJlYWR5Q2FjaGVOb2RlID0ge1xuICAvKipcbiAgICogV2hlbiByc2MgaXMgbm90IG51bGwsIGl0IHJlcHJlc2VudHMgdGhlIFJTQyBkYXRhIGZvciB0aGVcbiAgICogY29ycmVzcG9uZGluZyBzZWdtZW50LlxuICAgKlxuICAgKiBgbnVsbGAgaXMgYSB2YWxpZCBSZWFjdCBOb2RlIGJ1dCBiZWNhdXNlIHNlZ21lbnQgZGF0YSBpcyBhbHdheXMgYVxuICAgKiA8TGF5b3V0Um91dGVyPiBjb21wb25lbnQsIHdlIGNhbiB1c2UgYG51bGxgIHRvIHJlcHJlc2VudCBlbXB0eS5cbiAgICpcbiAgICogVE9ETzogRm9yIGFkZGl0aW9uYWwgdHlwZSBzYWZldHksIHVwZGF0ZSB0aGlzIHR5cGUgdG9cbiAgICogRXhjbHVkZTxSZWFjdC5SZWFjdE5vZGUsIG51bGw+LiBOZWVkIHRvIHVwZGF0ZSBjcmVhdGVFbXB0eUNhY2hlTm9kZSB0b1xuICAgKiBhY2NlcHQgcnNjIGFzIGFuIGFyZ3VtZW50LCBvciBqdXN0IGlubGluZSB0aGUgY2FsbGVycy5cbiAgICovXG4gIHJzYzogUmVhY3QuUmVhY3ROb2RlXG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSBzdGF0aWMgdmVyc2lvbiBvZiB0aGUgc2VnbWVudCB0aGF0IGNhbiBiZSBzaG93biBpbW1lZGlhdGVseSxcbiAgICogYW5kIG1heSBvciBtYXkgbm90IGNvbnRhaW4gZHluYW1pYyBob2xlcy4gSXQncyBwcmVmZXRjaGVkIGJlZm9yZSBhXG4gICAqIG5hdmlnYXRpb24gb2NjdXJzLlxuICAgKlxuICAgKiBEdXJpbmcgcmVuZGVyaW5nLCB3ZSB3aWxsIGNob29zZSB3aGV0aGVyIHRvIHJlbmRlciBgcnNjYCBvciBgcHJlZmV0Y2hSc2NgXG4gICAqIHdpdGggYHVzZURlZmVycmVkVmFsdWVgLiBBcyB3aXRoIHRoZSBgcnNjYCBmaWVsZCwgYSB2YWx1ZSBvZiBgbnVsbGAgbWVhbnNcbiAgICogbm8gdmFsdWUgd2FzIHByb3ZpZGVkLiBJbiB0aGlzIGNhc2UsIHRoZSBMYXlvdXRSb3V0ZXIgd2lsbCBnbyBzdHJhaWdodCB0b1xuICAgKiByZW5kZXJpbmcgdGhlIGByc2NgIHZhbHVlOyBpZiB0aGF0IG9uZSBpcyBhbHNvIG1pc3NpbmcsIGl0IHdpbGwgc3VzcGVuZCBhbmRcbiAgICogdHJpZ2dlciBhIGxhenkgZmV0Y2guXG4gICAqL1xuICBwcmVmZXRjaFJzYzogUmVhY3QuUmVhY3ROb2RlXG5cbiAgLyoqXG4gICAqIFRoZXJlIHNob3VsZCBuZXZlciBiZSBhIGxhenkgZGF0YSByZXF1ZXN0IGluIHRoaXMgY2FzZS5cbiAgICovXG4gIGxhenlEYXRhOiBudWxsXG4gIHByZWZldGNoSGVhZDogSGVhZERhdGEgfCBudWxsXG5cbiAgaGVhZDogSGVhZERhdGFcblxuICBsb2FkaW5nOiBMb2FkaW5nTW9kdWxlRGF0YSB8IFByb21pc2U8TG9hZGluZ01vZHVsZURhdGE+XG5cbiAgcGFyYWxsZWxSb3V0ZXM6IE1hcDxzdHJpbmcsIENoaWxkU2VnbWVudE1hcD5cblxuICBuYXZpZ2F0ZWRBdDogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdGVPcHRpb25zIHtcbiAgc2Nyb2xsPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByZWZldGNoT3B0aW9ucyB7XG4gIGtpbmQ6IFByZWZldGNoS2luZFxuICBvbkludmFsaWRhdGU/OiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwUm91dGVySW5zdGFuY2Uge1xuICAvKipcbiAgICogTmF2aWdhdGUgdG8gdGhlIHByZXZpb3VzIGhpc3RvcnkgZW50cnkuXG4gICAqL1xuICBiYWNrKCk6IHZvaWRcbiAgLyoqXG4gICAqIE5hdmlnYXRlIHRvIHRoZSBuZXh0IGhpc3RvcnkgZW50cnkuXG4gICAqL1xuICBmb3J3YXJkKCk6IHZvaWRcbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIGN1cnJlbnQgcGFnZS5cbiAgICovXG4gIHJlZnJlc2goKTogdm9pZFxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgY3VycmVudCBwYWdlLiBVc2UgaW4gZGV2ZWxvcG1lbnQgb25seS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBobXJSZWZyZXNoKCk6IHZvaWRcbiAgLyoqXG4gICAqIE5hdmlnYXRlIHRvIHRoZSBwcm92aWRlZCBocmVmLlxuICAgKiBQdXNoZXMgYSBuZXcgaGlzdG9yeSBlbnRyeS5cbiAgICovXG4gIHB1c2goaHJlZjogc3RyaW5nLCBvcHRpb25zPzogTmF2aWdhdGVPcHRpb25zKTogdm9pZFxuICAvKipcbiAgICogTmF2aWdhdGUgdG8gdGhlIHByb3ZpZGVkIGhyZWYuXG4gICAqIFJlcGxhY2VzIHRoZSBjdXJyZW50IGhpc3RvcnkgZW50cnkuXG4gICAqL1xuICByZXBsYWNlKGhyZWY6IHN0cmluZywgb3B0aW9ucz86IE5hdmlnYXRlT3B0aW9ucyk6IHZvaWRcbiAgLyoqXG4gICAqIFByZWZldGNoIHRoZSBwcm92aWRlZCBocmVmLlxuICAgKi9cbiAgcHJlZmV0Y2goaHJlZjogc3RyaW5nLCBvcHRpb25zPzogUHJlZmV0Y2hPcHRpb25zKTogdm9pZFxufVxuXG5leHBvcnQgY29uc3QgQXBwUm91dGVyQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8QXBwUm91dGVySW5zdGFuY2UgfCBudWxsPihcbiAgbnVsbFxuKVxuZXhwb3J0IGNvbnN0IExheW91dFJvdXRlckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PHtcbiAgcGFyZW50VHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgcGFyZW50Q2FjaGVOb2RlOiBDYWNoZU5vZGVcbiAgcGFyZW50U2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoIHwgbnVsbFxuICB1cmw6IHN0cmluZ1xufSB8IG51bGw+KG51bGwpXG5cbmV4cG9ydCBjb25zdCBHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDx7XG4gIHRyZWU6IEZsaWdodFJvdXRlclN0YXRlXG4gIGZvY3VzQW5kU2Nyb2xsUmVmOiBGb2N1c0FuZFNjcm9sbFJlZlxuICBuZXh0VXJsOiBzdHJpbmcgfCBudWxsXG59PihudWxsIGFzIGFueSlcblxuZXhwb3J0IGNvbnN0IFRlbXBsYXRlQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8UmVhY3QuUmVhY3ROb2RlPihudWxsIGFzIGFueSlcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgQXBwUm91dGVyQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdBcHBSb3V0ZXJDb250ZXh0J1xuICBMYXlvdXRSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0xheW91dFJvdXRlckNvbnRleHQnXG4gIEdsb2JhbExheW91dFJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSAnR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCdcbiAgVGVtcGxhdGVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1RlbXBsYXRlQ29udGV4dCdcbn1cblxuZXhwb3J0IGNvbnN0IE1pc3NpbmdTbG90Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSlcbiJdLCJuYW1lcyI6WyJBcHBSb3V0ZXJDb250ZXh0IiwiR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCIsIkxheW91dFJvdXRlckNvbnRleHQiLCJNaXNzaW5nU2xvdENvbnRleHQiLCJUZW1wbGF0ZUNvbnRleHQiLCJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJkaXNwbGF5TmFtZSIsIlNldCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/bloom-filter.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/bloom-filter.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// minimal implementation MurmurHash2 hash function\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"BloomFilter\", ({\n enumerable: true,\n get: function() {\n return BloomFilter;\n }\n}));\nfunction murmurhash2(str) {\n let h = 0;\n for(let i = 0; i < str.length; i++){\n const c = str.charCodeAt(i);\n h = Math.imul(h ^ c, 0x5bd1e995);\n h ^= h >>> 13;\n h = Math.imul(h, 0x5bd1e995);\n }\n return h >>> 0;\n}\n// default to 0.01% error rate as the filter compresses very well\nconst DEFAULT_ERROR_RATE = 0.0001;\nclass BloomFilter {\n static from(items, errorRate) {\n if (errorRate === void 0) errorRate = DEFAULT_ERROR_RATE;\n const filter = new BloomFilter(items.length, errorRate);\n for (const item of items){\n filter.add(item);\n }\n return filter;\n }\n export() {\n const data = {\n numItems: this.numItems,\n errorRate: this.errorRate,\n numBits: this.numBits,\n numHashes: this.numHashes,\n bitArray: this.bitArray\n };\n if (false) {}\n return data;\n }\n import(data) {\n this.numItems = data.numItems;\n this.errorRate = data.errorRate;\n this.numBits = data.numBits;\n this.numHashes = data.numHashes;\n this.bitArray = data.bitArray;\n }\n add(item) {\n const hashValues = this.getHashValues(item);\n hashValues.forEach((hash)=>{\n this.bitArray[hash] = 1;\n });\n }\n contains(item) {\n const hashValues = this.getHashValues(item);\n return hashValues.every((hash)=>this.bitArray[hash]);\n }\n getHashValues(item) {\n const hashValues = [];\n for(let i = 1; i <= this.numHashes; i++){\n const hash = murmurhash2(\"\" + item + i) % this.numBits;\n hashValues.push(hash);\n }\n return hashValues;\n }\n constructor(numItems, errorRate = DEFAULT_ERROR_RATE){\n this.numItems = numItems;\n this.errorRate = errorRate;\n this.numBits = Math.ceil(-(numItems * Math.log(errorRate)) / (Math.log(2) * Math.log(2)));\n this.numHashes = Math.ceil(this.numBits / numItems * Math.log(2));\n this.bitArray = new Array(this.numBits).fill(0);\n }\n} //# sourceMappingURL=bloom-filter.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ibG9vbS1maWx0ZXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsbURBQW1EOzs7OzsrQ0FldENBOzs7ZUFBQUE7OztBQWRiLFNBQVNDLFlBQVlDLEdBQVc7SUFDOUIsSUFBSUMsSUFBSTtJQUNSLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJRixJQUFJRyxNQUFNLEVBQUVELElBQUs7UUFDbkMsTUFBTUUsSUFBSUosSUFBSUssVUFBVSxDQUFDSDtRQUN6QkQsSUFBSUssS0FBS0MsSUFBSSxDQUFDTixJQUFJRyxHQUFHO1FBQ3JCSCxLQUFLQSxNQUFNO1FBQ1hBLElBQUlLLEtBQUtDLElBQUksQ0FBQ04sR0FBRztJQUNuQjtJQUNBLE9BQU9BLE1BQU07QUFDZjtBQUVBLGlFQUFpRTtBQUNqRSxNQUFNTyxxQkFBcUI7QUFFcEIsTUFBTVY7SUFpQlgsT0FBT1csS0FBS0MsS0FBZSxFQUFFQyxTQUE4QixFQUFFO1FBQWhDQSxJQUFBQSxjQUFBQSxLQUFBQSxHQUFBQSxZQUFZSDtRQUN2QyxNQUFNSSxTQUFTLElBQUlkLFlBQVlZLE1BQU1QLE1BQU0sRUFBRVE7UUFFN0MsS0FBSyxNQUFNRSxRQUFRSCxNQUFPO1lBQ3hCRSxPQUFPRSxHQUFHLENBQUNEO1FBQ2I7UUFDQSxPQUFPRDtJQUNUO0lBRUFHLFNBQVM7UUFDUCxNQUFNQyxPQUFPO1lBQ1hDLFVBQVUsSUFBSSxDQUFDQSxRQUFRO1lBQ3ZCTixXQUFXLElBQUksQ0FBQ0EsU0FBUztZQUN6Qk8sU0FBUyxJQUFJLENBQUNBLE9BQU87WUFDckJDLFdBQVcsSUFBSSxDQUFDQSxTQUFTO1lBQ3pCQyxVQUFVLElBQUksQ0FBQ0EsUUFBUTtRQUN6QjtRQUVBLElBQUlDLEtBQXFDLEVBQUUsRUFhMUM7UUFFRCxPQUFPTDtJQUNUO0lBRUFnQixPQUFPaEIsSUFBeUMsRUFBRTtRQUNoRCxJQUFJLENBQUNDLFFBQVEsR0FBR0QsS0FBS0MsUUFBUTtRQUM3QixJQUFJLENBQUNOLFNBQVMsR0FBR0ssS0FBS0wsU0FBUztRQUMvQixJQUFJLENBQUNPLE9BQU8sR0FBR0YsS0FBS0UsT0FBTztRQUMzQixJQUFJLENBQUNDLFNBQVMsR0FBR0gsS0FBS0csU0FBUztRQUMvQixJQUFJLENBQUNDLFFBQVEsR0FBR0osS0FBS0ksUUFBUTtJQUMvQjtJQUVBTixJQUFJRCxJQUFZLEVBQUU7UUFDaEIsTUFBTW9CLGFBQWEsSUFBSSxDQUFDQyxhQUFhLENBQUNyQjtRQUN0Q29CLFdBQVdFLE9BQU8sQ0FBQyxDQUFDQztZQUNsQixJQUFJLENBQUNoQixRQUFRLENBQUNnQixLQUFLLEdBQUc7UUFDeEI7SUFDRjtJQUVBQyxTQUFTeEIsSUFBWSxFQUFFO1FBQ3JCLE1BQU1vQixhQUFhLElBQUksQ0FBQ0MsYUFBYSxDQUFDckI7UUFDdEMsT0FBT29CLFdBQVdLLEtBQUssQ0FBQyxDQUFDRixPQUFTLElBQUksQ0FBQ2hCLFFBQVEsQ0FBQ2dCLEtBQUs7SUFDdkQ7SUFFQUYsY0FBY3JCLElBQVksRUFBRTtRQUMxQixNQUFNb0IsYUFBYSxFQUFFO1FBQ3JCLElBQUssSUFBSS9CLElBQUksR0FBR0EsS0FBSyxJQUFJLENBQUNpQixTQUFTLEVBQUVqQixJQUFLO1lBQ3hDLE1BQU1rQyxPQUFPckMsWUFBYSxLQUFFYyxPQUFPWCxLQUFPLElBQUksQ0FBQ2dCLE9BQU87WUFDdERlLFdBQVdNLElBQUksQ0FBQ0g7UUFDbEI7UUFDQSxPQUFPSDtJQUNUO0lBekVBTyxZQUFZdkIsUUFBZ0IsRUFBRU4sWUFBb0JILGtCQUFrQixDQUFFO1FBQ3BFLElBQUksQ0FBQ1MsUUFBUSxHQUFHQTtRQUNoQixJQUFJLENBQUNOLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDTyxPQUFPLEdBQUdaLEtBQUttQyxJQUFJLENBQ3RCLENBQUV4QixDQUFBQSxXQUFXWCxLQUFLb0MsR0FBRyxDQUFDL0IsVUFBQUEsQ0FBUyxJQUFNTCxLQUFLb0MsR0FBRyxDQUFDLEtBQUtwQyxLQUFLb0MsR0FBRyxDQUFDLEdBQUM7UUFFL0QsSUFBSSxDQUFDdkIsU0FBUyxHQUFHYixLQUFLbUMsSUFBSSxDQUFFLElBQUksQ0FBQ3ZCLE9BQU8sR0FBR0QsV0FBWVgsS0FBS29DLEdBQUcsQ0FBQztRQUNoRSxJQUFJLENBQUN0QixRQUFRLEdBQUcsSUFBSXVCLE1BQU0sSUFBSSxDQUFDekIsT0FBTyxFQUFFMEIsSUFBSSxDQUFDO0lBQy9DO0FBa0VGIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxcYmxvb20tZmlsdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIG1pbmltYWwgaW1wbGVtZW50YXRpb24gTXVybXVySGFzaDIgaGFzaCBmdW5jdGlvblxuZnVuY3Rpb24gbXVybXVyaGFzaDIoc3RyOiBzdHJpbmcpIHtcbiAgbGV0IGggPSAwXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaCA9IE1hdGguaW11bChoIF4gYywgMHg1YmQxZTk5NSlcbiAgICBoIF49IGggPj4+IDEzXG4gICAgaCA9IE1hdGguaW11bChoLCAweDViZDFlOTk1KVxuICB9XG4gIHJldHVybiBoID4+PiAwXG59XG5cbi8vIGRlZmF1bHQgdG8gMC4wMSUgZXJyb3IgcmF0ZSBhcyB0aGUgZmlsdGVyIGNvbXByZXNzZXMgdmVyeSB3ZWxsXG5jb25zdCBERUZBVUxUX0VSUk9SX1JBVEUgPSAwLjAwMDFcblxuZXhwb3J0IGNsYXNzIEJsb29tRmlsdGVyIHtcbiAgbnVtSXRlbXM6IG51bWJlclxuICBlcnJvclJhdGU6IG51bWJlclxuICBudW1CaXRzOiBudW1iZXJcbiAgbnVtSGFzaGVzOiBudW1iZXJcbiAgYml0QXJyYXk6IG51bWJlcltdXG5cbiAgY29uc3RydWN0b3IobnVtSXRlbXM6IG51bWJlciwgZXJyb3JSYXRlOiBudW1iZXIgPSBERUZBVUxUX0VSUk9SX1JBVEUpIHtcbiAgICB0aGlzLm51bUl0ZW1zID0gbnVtSXRlbXNcbiAgICB0aGlzLmVycm9yUmF0ZSA9IGVycm9yUmF0ZVxuICAgIHRoaXMubnVtQml0cyA9IE1hdGguY2VpbChcbiAgICAgIC0obnVtSXRlbXMgKiBNYXRoLmxvZyhlcnJvclJhdGUpKSAvIChNYXRoLmxvZygyKSAqIE1hdGgubG9nKDIpKVxuICAgIClcbiAgICB0aGlzLm51bUhhc2hlcyA9IE1hdGguY2VpbCgodGhpcy5udW1CaXRzIC8gbnVtSXRlbXMpICogTWF0aC5sb2coMikpXG4gICAgdGhpcy5iaXRBcnJheSA9IG5ldyBBcnJheSh0aGlzLm51bUJpdHMpLmZpbGwoMClcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKGl0ZW1zOiBzdHJpbmdbXSwgZXJyb3JSYXRlID0gREVGQVVMVF9FUlJPUl9SQVRFKSB7XG4gICAgY29uc3QgZmlsdGVyID0gbmV3IEJsb29tRmlsdGVyKGl0ZW1zLmxlbmd0aCwgZXJyb3JSYXRlKVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBmaWx0ZXIuYWRkKGl0ZW0pXG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJcbiAgfVxuXG4gIGV4cG9ydCgpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbnVtSXRlbXM6IHRoaXMubnVtSXRlbXMsXG4gICAgICBlcnJvclJhdGU6IHRoaXMuZXJyb3JSYXRlLFxuICAgICAgbnVtQml0czogdGhpcy5udW1CaXRzLFxuICAgICAgbnVtSGFzaGVzOiB0aGlzLm51bUhhc2hlcyxcbiAgICAgIGJpdEFycmF5OiB0aGlzLmJpdEFycmF5LFxuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgPT09ICdub2RlanMnKSB7XG4gICAgICBpZiAodGhpcy5lcnJvclJhdGUgPCBERUZBVUxUX0VSUk9SX1JBVEUpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gICAgICAgIGNvbnN0IGd6aXBTaXplID0gKFxuICAgICAgICAgIHJlcXVpcmUoJ25leHQvZGlzdC9jb21waWxlZC9nemlwLXNpemUnKSBhcyB0eXBlb2YgaW1wb3J0KCduZXh0L2Rpc3QvY29tcGlsZWQvZ3ppcC1zaXplJylcbiAgICAgICAgKS5zeW5jKGZpbHRlckRhdGEpXG5cbiAgICAgICAgaWYgKGd6aXBTaXplID4gMTAyNCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBDcmVhdGluZyBmaWx0ZXIgd2l0aCBlcnJvciByYXRlIGxlc3MgdGhhbiAwLjElICgwLjAwMSkgY2FuIGluY3JlYXNlIHRoZSBzaXplIGRyYW1hdGljYWxseSBwcm9jZWVkIHdpdGggY2F1dGlvbi4gUmVjZWl2ZWQgZXJyb3IgcmF0ZSAke3RoaXMuZXJyb3JSYXRlfSByZXN1bHRlZCBpbiBzaXplICR7ZmlsdGVyRGF0YS5sZW5ndGh9IGJ5dGVzLCAke2d6aXBTaXplfSBieXRlcyAoZ3ppcClgXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIGltcG9ydChkYXRhOiBSZXR1cm5UeXBlPCh0eXBlb2YgdGhpcylbJ2V4cG9ydCddPikge1xuICAgIHRoaXMubnVtSXRlbXMgPSBkYXRhLm51bUl0ZW1zXG4gICAgdGhpcy5lcnJvclJhdGUgPSBkYXRhLmVycm9yUmF0ZVxuICAgIHRoaXMubnVtQml0cyA9IGRhdGEubnVtQml0c1xuICAgIHRoaXMubnVtSGFzaGVzID0gZGF0YS5udW1IYXNoZXNcbiAgICB0aGlzLmJpdEFycmF5ID0gZGF0YS5iaXRBcnJheVxuICB9XG5cbiAgYWRkKGl0ZW06IHN0cmluZykge1xuICAgIGNvbnN0IGhhc2hWYWx1ZXMgPSB0aGlzLmdldEhhc2hWYWx1ZXMoaXRlbSlcbiAgICBoYXNoVmFsdWVzLmZvckVhY2goKGhhc2gpID0+IHtcbiAgICAgIHRoaXMuYml0QXJyYXlbaGFzaF0gPSAxXG4gICAgfSlcbiAgfVxuXG4gIGNvbnRhaW5zKGl0ZW06IHN0cmluZykge1xuICAgIGNvbnN0IGhhc2hWYWx1ZXMgPSB0aGlzLmdldEhhc2hWYWx1ZXMoaXRlbSlcbiAgICByZXR1cm4gaGFzaFZhbHVlcy5ldmVyeSgoaGFzaCkgPT4gdGhpcy5iaXRBcnJheVtoYXNoXSlcbiAgfVxuXG4gIGdldEhhc2hWYWx1ZXMoaXRlbTogc3RyaW5nKSB7XG4gICAgY29uc3QgaGFzaFZhbHVlcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5udW1IYXNoZXM7IGkrKykge1xuICAgICAgY29uc3QgaGFzaCA9IG11cm11cmhhc2gyKGAke2l0ZW19JHtpfWApICUgdGhpcy5udW1CaXRzXG4gICAgICBoYXNoVmFsdWVzLnB1c2goaGFzaClcbiAgICB9XG4gICAgcmV0dXJuIGhhc2hWYWx1ZXNcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkJsb29tRmlsdGVyIiwibXVybXVyaGFzaDIiLCJzdHIiLCJoIiwiaSIsImxlbmd0aCIsImMiLCJjaGFyQ29kZUF0IiwiTWF0aCIsImltdWwiLCJERUZBVUxUX0VSUk9SX1JBVEUiLCJmcm9tIiwiaXRlbXMiLCJlcnJvclJhdGUiLCJmaWx0ZXIiLCJpdGVtIiwiYWRkIiwiZXhwb3J0IiwiZGF0YSIsIm51bUl0ZW1zIiwibnVtQml0cyIsIm51bUhhc2hlcyIsImJpdEFycmF5IiwicHJvY2VzcyIsImVudiIsIk5FWFRfUlVOVElNRSIsImZpbHRlckRhdGEiLCJKU09OIiwic3RyaW5naWZ5IiwiZ3ppcFNpemUiLCJyZXF1aXJlIiwic3luYyIsImNvbnNvbGUiLCJ3YXJuIiwiaW1wb3J0IiwiaGFzaFZhbHVlcyIsImdldEhhc2hWYWx1ZXMiLCJmb3JFYWNoIiwiaGFzaCIsImNvbnRhaW5zIiwiZXZlcnkiLCJwdXNoIiwiY29uc3RydWN0b3IiLCJjZWlsIiwibG9nIiwiQXJyYXkiLCJmaWxsIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/bloom-filter.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/constants.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/constants.js ***!
|
||
\********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n APP_BUILD_MANIFEST: function() {\n return APP_BUILD_MANIFEST;\n },\n APP_CLIENT_INTERNALS: function() {\n return APP_CLIENT_INTERNALS;\n },\n APP_PATHS_MANIFEST: function() {\n return APP_PATHS_MANIFEST;\n },\n APP_PATH_ROUTES_MANIFEST: function() {\n return APP_PATH_ROUTES_MANIFEST;\n },\n BARREL_OPTIMIZATION_PREFIX: function() {\n return BARREL_OPTIMIZATION_PREFIX;\n },\n BLOCKED_PAGES: function() {\n return BLOCKED_PAGES;\n },\n BUILD_ID_FILE: function() {\n return BUILD_ID_FILE;\n },\n BUILD_MANIFEST: function() {\n return BUILD_MANIFEST;\n },\n CLIENT_PUBLIC_FILES_PATH: function() {\n return CLIENT_PUBLIC_FILES_PATH;\n },\n CLIENT_REFERENCE_MANIFEST: function() {\n return CLIENT_REFERENCE_MANIFEST;\n },\n CLIENT_STATIC_FILES_PATH: function() {\n return CLIENT_STATIC_FILES_PATH;\n },\n CLIENT_STATIC_FILES_RUNTIME_AMP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_AMP;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN_APP;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\n },\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH: function() {\n return CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH;\n },\n CLIENT_STATIC_FILES_RUNTIME_WEBPACK: function() {\n return CLIENT_STATIC_FILES_RUNTIME_WEBPACK;\n },\n COMPILER_INDEXES: function() {\n return COMPILER_INDEXES;\n },\n COMPILER_NAMES: function() {\n return COMPILER_NAMES;\n },\n CONFIG_FILES: function() {\n return CONFIG_FILES;\n },\n DEFAULT_RUNTIME_WEBPACK: function() {\n return DEFAULT_RUNTIME_WEBPACK;\n },\n DEFAULT_SANS_SERIF_FONT: function() {\n return DEFAULT_SANS_SERIF_FONT;\n },\n DEFAULT_SERIF_FONT: function() {\n return DEFAULT_SERIF_FONT;\n },\n DEV_CLIENT_MIDDLEWARE_MANIFEST: function() {\n return DEV_CLIENT_MIDDLEWARE_MANIFEST;\n },\n DEV_CLIENT_PAGES_MANIFEST: function() {\n return DEV_CLIENT_PAGES_MANIFEST;\n },\n DYNAMIC_CSS_MANIFEST: function() {\n return DYNAMIC_CSS_MANIFEST;\n },\n EDGE_RUNTIME_WEBPACK: function() {\n return EDGE_RUNTIME_WEBPACK;\n },\n EDGE_UNSUPPORTED_NODE_APIS: function() {\n return EDGE_UNSUPPORTED_NODE_APIS;\n },\n EXPORT_DETAIL: function() {\n return EXPORT_DETAIL;\n },\n EXPORT_MARKER: function() {\n return EXPORT_MARKER;\n },\n FUNCTIONS_CONFIG_MANIFEST: function() {\n return FUNCTIONS_CONFIG_MANIFEST;\n },\n IMAGES_MANIFEST: function() {\n return IMAGES_MANIFEST;\n },\n INTERCEPTION_ROUTE_REWRITE_MANIFEST: function() {\n return INTERCEPTION_ROUTE_REWRITE_MANIFEST;\n },\n MIDDLEWARE_BUILD_MANIFEST: function() {\n return MIDDLEWARE_BUILD_MANIFEST;\n },\n MIDDLEWARE_MANIFEST: function() {\n return MIDDLEWARE_MANIFEST;\n },\n MIDDLEWARE_REACT_LOADABLE_MANIFEST: function() {\n return MIDDLEWARE_REACT_LOADABLE_MANIFEST;\n },\n MODERN_BROWSERSLIST_TARGET: function() {\n return _modernbrowserslisttarget.default;\n },\n NEXT_BUILTIN_DOCUMENT: function() {\n return NEXT_BUILTIN_DOCUMENT;\n },\n NEXT_FONT_MANIFEST: function() {\n return NEXT_FONT_MANIFEST;\n },\n PAGES_MANIFEST: function() {\n return PAGES_MANIFEST;\n },\n PHASE_DEVELOPMENT_SERVER: function() {\n return PHASE_DEVELOPMENT_SERVER;\n },\n PHASE_EXPORT: function() {\n return PHASE_EXPORT;\n },\n PHASE_INFO: function() {\n return PHASE_INFO;\n },\n PHASE_PRODUCTION_BUILD: function() {\n return PHASE_PRODUCTION_BUILD;\n },\n PHASE_PRODUCTION_SERVER: function() {\n return PHASE_PRODUCTION_SERVER;\n },\n PHASE_TEST: function() {\n return PHASE_TEST;\n },\n PRERENDER_MANIFEST: function() {\n return PRERENDER_MANIFEST;\n },\n REACT_LOADABLE_MANIFEST: function() {\n return REACT_LOADABLE_MANIFEST;\n },\n ROUTES_MANIFEST: function() {\n return ROUTES_MANIFEST;\n },\n RSC_MODULE_TYPES: function() {\n return RSC_MODULE_TYPES;\n },\n SERVER_DIRECTORY: function() {\n return SERVER_DIRECTORY;\n },\n SERVER_FILES_MANIFEST: function() {\n return SERVER_FILES_MANIFEST;\n },\n SERVER_PROPS_ID: function() {\n return SERVER_PROPS_ID;\n },\n SERVER_REFERENCE_MANIFEST: function() {\n return SERVER_REFERENCE_MANIFEST;\n },\n STATIC_PROPS_ID: function() {\n return STATIC_PROPS_ID;\n },\n STATIC_STATUS_PAGES: function() {\n return STATIC_STATUS_PAGES;\n },\n STRING_LITERAL_DROP_BUNDLE: function() {\n return STRING_LITERAL_DROP_BUNDLE;\n },\n SUBRESOURCE_INTEGRITY_MANIFEST: function() {\n return SUBRESOURCE_INTEGRITY_MANIFEST;\n },\n SYSTEM_ENTRYPOINTS: function() {\n return SYSTEM_ENTRYPOINTS;\n },\n TRACE_OUTPUT_VERSION: function() {\n return TRACE_OUTPUT_VERSION;\n },\n TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST: function() {\n return TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST;\n },\n TURBO_TRACE_DEFAULT_MEMORY_LIMIT: function() {\n return TURBO_TRACE_DEFAULT_MEMORY_LIMIT;\n },\n UNDERSCORE_NOT_FOUND_ROUTE: function() {\n return UNDERSCORE_NOT_FOUND_ROUTE;\n },\n UNDERSCORE_NOT_FOUND_ROUTE_ENTRY: function() {\n return UNDERSCORE_NOT_FOUND_ROUTE_ENTRY;\n },\n WEBPACK_STATS: function() {\n return WEBPACK_STATS;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _modernbrowserslisttarget = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./modern-browserslist-target */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/modern-browserslist-target.js\"));\nconst COMPILER_NAMES = {\n client: 'client',\n server: 'server',\n edgeServer: 'edge-server'\n};\nconst COMPILER_INDEXES = {\n [COMPILER_NAMES.client]: 0,\n [COMPILER_NAMES.server]: 1,\n [COMPILER_NAMES.edgeServer]: 2\n};\nconst UNDERSCORE_NOT_FOUND_ROUTE = '/_not-found';\nconst UNDERSCORE_NOT_FOUND_ROUTE_ENTRY = \"\" + UNDERSCORE_NOT_FOUND_ROUTE + \"/page\";\nconst PHASE_EXPORT = 'phase-export';\nconst PHASE_PRODUCTION_BUILD = 'phase-production-build';\nconst PHASE_PRODUCTION_SERVER = 'phase-production-server';\nconst PHASE_DEVELOPMENT_SERVER = 'phase-development-server';\nconst PHASE_TEST = 'phase-test';\nconst PHASE_INFO = 'phase-info';\nconst PAGES_MANIFEST = 'pages-manifest.json';\nconst WEBPACK_STATS = 'webpack-stats.json';\nconst APP_PATHS_MANIFEST = 'app-paths-manifest.json';\nconst APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json';\nconst BUILD_MANIFEST = 'build-manifest.json';\nconst APP_BUILD_MANIFEST = 'app-build-manifest.json';\nconst FUNCTIONS_CONFIG_MANIFEST = 'functions-config-manifest.json';\nconst SUBRESOURCE_INTEGRITY_MANIFEST = 'subresource-integrity-manifest';\nconst NEXT_FONT_MANIFEST = 'next-font-manifest';\nconst EXPORT_MARKER = 'export-marker.json';\nconst EXPORT_DETAIL = 'export-detail.json';\nconst PRERENDER_MANIFEST = 'prerender-manifest.json';\nconst ROUTES_MANIFEST = 'routes-manifest.json';\nconst IMAGES_MANIFEST = 'images-manifest.json';\nconst SERVER_FILES_MANIFEST = 'required-server-files.json';\nconst DEV_CLIENT_PAGES_MANIFEST = '_devPagesManifest.json';\nconst MIDDLEWARE_MANIFEST = 'middleware-manifest.json';\nconst TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST = '_clientMiddlewareManifest.json';\nconst DEV_CLIENT_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json';\nconst REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json';\nconst SERVER_DIRECTORY = 'server';\nconst CONFIG_FILES = [\n 'next.config.js',\n 'next.config.mjs',\n 'next.config.ts'\n];\nconst BUILD_ID_FILE = 'BUILD_ID';\nconst BLOCKED_PAGES = [\n '/_document',\n '/_app',\n '/_error'\n];\nconst CLIENT_PUBLIC_FILES_PATH = 'public';\nconst CLIENT_STATIC_FILES_PATH = 'static';\nconst STRING_LITERAL_DROP_BUNDLE = '__NEXT_DROP_CLIENT_FILE__';\nconst NEXT_BUILTIN_DOCUMENT = '__NEXT_BUILTIN_DOCUMENT__';\nconst BARREL_OPTIMIZATION_PREFIX = '__barrel_optimize__';\nconst CLIENT_REFERENCE_MANIFEST = 'client-reference-manifest';\nconst SERVER_REFERENCE_MANIFEST = 'server-reference-manifest';\nconst MIDDLEWARE_BUILD_MANIFEST = 'middleware-build-manifest';\nconst MIDDLEWARE_REACT_LOADABLE_MANIFEST = 'middleware-react-loadable-manifest';\nconst INTERCEPTION_ROUTE_REWRITE_MANIFEST = 'interception-route-rewrite-manifest';\nconst DYNAMIC_CSS_MANIFEST = 'dynamic-css-manifest';\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN = \"main\";\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = \"\" + CLIENT_STATIC_FILES_RUNTIME_MAIN + \"-app\";\nconst APP_CLIENT_INTERNALS = 'app-pages-internals';\nconst CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = \"react-refresh\";\nconst CLIENT_STATIC_FILES_RUNTIME_AMP = \"amp\";\nconst CLIENT_STATIC_FILES_RUNTIME_WEBPACK = \"webpack\";\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = 'polyfills';\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(CLIENT_STATIC_FILES_RUNTIME_POLYFILLS);\n_c = CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\nconst DEFAULT_RUNTIME_WEBPACK = 'webpack-runtime';\nconst EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack';\nconst STATIC_PROPS_ID = '__N_SSG';\nconst SERVER_PROPS_ID = '__N_SSP';\nconst DEFAULT_SERIF_FONT = {\n name: 'Times New Roman',\n xAvgCharWidth: 821,\n azAvgWidth: 854.3953488372093,\n unitsPerEm: 2048\n};\nconst DEFAULT_SANS_SERIF_FONT = {\n name: 'Arial',\n xAvgCharWidth: 904,\n azAvgWidth: 934.5116279069767,\n unitsPerEm: 2048\n};\nconst STATIC_STATUS_PAGES = [\n '/500'\n];\nconst TRACE_OUTPUT_VERSION = 1;\nconst TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000;\nconst RSC_MODULE_TYPES = {\n client: 'client',\n server: 'server'\n};\nconst EDGE_UNSUPPORTED_NODE_APIS = [\n 'clearImmediate',\n 'setImmediate',\n 'BroadcastChannel',\n 'ByteLengthQueuingStrategy',\n 'CompressionStream',\n 'CountQueuingStrategy',\n 'DecompressionStream',\n 'DomException',\n 'MessageChannel',\n 'MessageEvent',\n 'MessagePort',\n 'ReadableByteStreamController',\n 'ReadableStreamBYOBRequest',\n 'ReadableStreamDefaultController',\n 'TransformStreamDefaultController',\n 'WritableStreamDefaultController'\n];\nconst SYSTEM_ENTRYPOINTS = new Set([\n CLIENT_STATIC_FILES_RUNTIME_MAIN,\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n CLIENT_STATIC_FILES_RUNTIME_AMP,\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP\n]);\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=constants.js.map\nvar _c;\n$RefreshReg$(_c, \"CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9jb25zdGFudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBbUNhQSxrQkFBa0I7ZUFBbEJBOztJQWlEQUMsb0JBQW9CO2VBQXBCQTs7SUFwREFDLGtCQUFrQjtlQUFsQkE7O0lBQ0FDLHdCQUF3QjtlQUF4QkE7O0lBOEJBQywwQkFBMEI7ZUFBMUJBOztJQUxBQyxhQUFhO2VBQWJBOztJQURBQyxhQUFhO2VBQWJBOztJQXZCQUMsY0FBYztlQUFkQTs7SUF5QkFDLHdCQUF3QjtlQUF4QkE7O0lBT0FDLHlCQUF5QjtlQUF6QkE7O0lBTkFDLHdCQUF3QjtlQUF4QkE7O0lBNEJBQywrQkFBK0I7ZUFBL0JBOztJQVBBQyxnQ0FBZ0M7ZUFBaENBOztJQUNBQyxvQ0FBb0M7ZUFBcENBOztJQVVBQyxxQ0FBcUM7ZUFBckNBOztJQUNBQyw0Q0FBNEM7ZUFBNUNBOztJQVBBQyx5Q0FBeUM7ZUFBekNBOztJQUlBQyxtQ0FBbUM7ZUFBbkNBOztJQTVFQUMsZ0JBQWdCO2VBQWhCQTs7SUFSQUMsY0FBYztlQUFkQTs7SUE4Q0FDLFlBQVk7ZUFBWkE7O0lBNENBQyx1QkFBdUI7ZUFBdkJBOztJQVVBQyx1QkFBdUI7ZUFBdkJBOztJQU5BQyxrQkFBa0I7ZUFBbEJBOztJQW5EQUMsOEJBQThCO2VBQTlCQTs7SUFKQUMseUJBQXlCO2VBQXpCQTs7SUFpQ0FDLG9CQUFvQjtlQUFwQkE7O0lBbUJBQyxvQkFBb0I7ZUFBcEJBOztJQTZCQUMsMEJBQTBCO2VBQTFCQTs7SUF0RkFDLGFBQWE7ZUFBYkE7O0lBREFDLGFBQWE7ZUFBYkE7O0lBSEFDLHlCQUF5QjtlQUF6QkE7O0lBT0FDLGVBQWU7ZUFBZkE7O0lBZ0NBQyxtQ0FBbUM7ZUFBbkNBOztJQUxBQyx5QkFBeUI7ZUFBekJBOztJQXhCQUMsbUJBQW1CO2VBQW5CQTs7SUEwQkFDLGtDQUFrQztlQUFsQ0E7O0lBdEVKQywwQkFBMEI7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RTdDLE1BQU1ILHdDQUF3QztBQUM5QyxNQUFNQywrQ0FBK0NzRCxPQUMxRHZEOztBQUVLLE1BQU1PLDBCQUEwQjtBQUNoQyxNQUFNTSx1QkFBdUI7QUFDN0IsTUFBTTRCLGtCQUFrQjtBQUN4QixNQUFNRixrQkFBa0I7QUFDeEIsTUFBTTlCLHFCQUFxQjtJQUNoQytDLE1BQU07SUFDTkMsZUFBZTtJQUNmQyxZQUFZO0lBQ1pDLFlBQVk7QUFDZDtBQUNPLE1BQU1uRCwwQkFBMEI7SUFDckNnRCxNQUFNO0lBQ05DLGVBQWU7SUFDZkMsWUFBWTtJQUNaQyxZQUFZO0FBQ2Q7QUFDTyxNQUFNakIsc0JBQXNCO0lBQUM7Q0FBTztBQUNwQyxNQUFNSSx1QkFBdUI7QUFFN0IsTUFBTUUsbUNBQW1DO0FBRXpDLE1BQU1aLG1CQUFtQjtJQUM5QmdCLFFBQVE7SUFDUkMsUUFBUTtBQUNWO0FBTU8sTUFBTXZDLDZCQUE2QjtJQUN4QztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRU0sTUFBTStCLHFCQUFxQixJQUFJZSxJQUFZO0lBQ2hEOUQ7SUFDQUk7SUFDQUw7SUFDQUU7Q0FDRCIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXGNvbnN0YW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQgZnJvbSAnLi9tb2Rlcm4tYnJvd3NlcnNsaXN0LXRhcmdldCdcblxuZXhwb3J0IHsgTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQgfVxuXG5leHBvcnQgdHlwZSBWYWx1ZU9mPFQ+ID0gUmVxdWlyZWQ8VD5ba2V5b2YgVF1cblxuZXhwb3J0IGNvbnN0IENPTVBJTEVSX05BTUVTID0ge1xuICBjbGllbnQ6ICdjbGllbnQnLFxuICBzZXJ2ZXI6ICdzZXJ2ZXInLFxuICBlZGdlU2VydmVyOiAnZWRnZS1zZXJ2ZXInLFxufSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBDb21waWxlck5hbWVWYWx1ZXMgPSBWYWx1ZU9mPHR5cGVvZiBDT01QSUxFUl9OQU1FUz5cblxuZXhwb3J0IGNvbnN0IENPTVBJTEVSX0lOREVYRVM6IHtcbiAgW2NvbXBpbGVyS2V5IGluIENvbXBpbGVyTmFtZVZhbHVlc106IG51bWJlclxufSA9IHtcbiAgW0NPTVBJTEVSX05BTUVTLmNsaWVudF06IDAsXG4gIFtDT01QSUxFUl9OQU1FUy5zZXJ2ZXJdOiAxLFxuICBbQ09NUElMRVJfTkFNRVMuZWRnZVNlcnZlcl06IDIsXG59IGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBVTkRFUlNDT1JFX05PVF9GT1VORF9ST1VURSA9ICcvX25vdC1mb3VuZCdcbmV4cG9ydCBjb25zdCBVTkRFUlNDT1JFX05PVF9GT1VORF9ST1VURV9FTlRSWSA9IGAke1VOREVSU0NPUkVfTk9UX0ZPVU5EX1JPVVRFfS9wYWdlYFxuZXhwb3J0IGNvbnN0IFBIQVNFX0VYUE9SVCA9ICdwaGFzZS1leHBvcnQnXG5leHBvcnQgY29uc3QgUEhBU0VfUFJPRFVDVElPTl9CVUlMRCA9ICdwaGFzZS1wcm9kdWN0aW9uLWJ1aWxkJ1xuZXhwb3J0IGNvbnN0IFBIQVNFX1BST0RVQ1RJT05fU0VSVkVSID0gJ3BoYXNlLXByb2R1Y3Rpb24tc2VydmVyJ1xuZXhwb3J0IGNvbnN0IFBIQVNFX0RFVkVMT1BNRU5UX1NFUlZFUiA9ICdwaGFzZS1kZXZlbG9wbWVudC1zZXJ2ZXInXG5leHBvcnQgY29uc3QgUEhBU0VfVEVTVCA9ICdwaGFzZS10ZXN0J1xuZXhwb3J0IGNvbnN0IFBIQVNFX0lORk8gPSAncGhhc2UtaW5mbydcbmV4cG9ydCBjb25zdCBQQUdFU19NQU5JRkVTVCA9ICdwYWdlcy1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFdFQlBBQ0tfU1RBVFMgPSAnd2VicGFjay1zdGF0cy5qc29uJ1xuZXhwb3J0IGNvbnN0IEFQUF9QQVRIU19NQU5JRkVTVCA9ICdhcHAtcGF0aHMtbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBBUFBfUEFUSF9ST1VURVNfTUFOSUZFU1QgPSAnYXBwLXBhdGgtcm91dGVzLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgQlVJTERfTUFOSUZFU1QgPSAnYnVpbGQtbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBBUFBfQlVJTERfTUFOSUZFU1QgPSAnYXBwLWJ1aWxkLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgRlVOQ1RJT05TX0NPTkZJR19NQU5JRkVTVCA9ICdmdW5jdGlvbnMtY29uZmlnLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgU1VCUkVTT1VSQ0VfSU5URUdSSVRZX01BTklGRVNUID0gJ3N1YnJlc291cmNlLWludGVncml0eS1tYW5pZmVzdCdcbmV4cG9ydCBjb25zdCBORVhUX0ZPTlRfTUFOSUZFU1QgPSAnbmV4dC1mb250LW1hbmlmZXN0J1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9NQVJLRVIgPSAnZXhwb3J0LW1hcmtlci5qc29uJ1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9ERVRBSUwgPSAnZXhwb3J0LWRldGFpbC5qc29uJ1xuZXhwb3J0IGNvbnN0IFBSRVJFTkRFUl9NQU5JRkVTVCA9ICdwcmVyZW5kZXItbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBST1VURVNfTUFOSUZFU1QgPSAncm91dGVzLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgSU1BR0VTX01BTklGRVNUID0gJ2ltYWdlcy1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFNFUlZFUl9GSUxFU19NQU5JRkVTVCA9ICdyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbidcbmV4cG9ydCBjb25zdCBERVZfQ0xJRU5UX1BBR0VTX01BTklGRVNUID0gJ19kZXZQYWdlc01hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgTUlERExFV0FSRV9NQU5JRkVTVCA9ICdtaWRkbGV3YXJlLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgVFVSQk9QQUNLX0NMSUVOVF9NSURETEVXQVJFX01BTklGRVNUID1cbiAgJ19jbGllbnRNaWRkbGV3YXJlTWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBERVZfQ0xJRU5UX01JRERMRVdBUkVfTUFOSUZFU1QgPSAnX2Rldk1pZGRsZXdhcmVNYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFJFQUNUX0xPQURBQkxFX01BTklGRVNUID0gJ3JlYWN0LWxvYWRhYmxlLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgU0VSVkVSX0RJUkVDVE9SWSA9ICdzZXJ2ZXInXG5leHBvcnQgY29uc3QgQ09ORklHX0ZJTEVTID0gW1xuICAnbmV4dC5jb25maWcuanMnLFxuICAnbmV4dC5jb25maWcubWpzJyxcbiAgJ25leHQuY29uZmlnLnRzJyxcbl1cbmV4cG9ydCBjb25zdCBCVUlMRF9JRF9GSUxFID0gJ0JVSUxEX0lEJ1xuZXhwb3J0IGNvbnN0IEJMT0NLRURfUEFHRVMgPSBbJy9fZG9jdW1lbnQnLCAnL19hcHAnLCAnL19lcnJvciddXG5leHBvcnQgY29uc3QgQ0xJRU5UX1BVQkxJQ19GSUxFU19QQVRIID0gJ3B1YmxpYydcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1BBVEggPSAnc3RhdGljJ1xuZXhwb3J0IGNvbnN0IFNUUklOR19MSVRFUkFMX0RST1BfQlVORExFID0gJ19fTkVYVF9EUk9QX0NMSUVOVF9GSUxFX18nXG5leHBvcnQgY29uc3QgTkVYVF9CVUlMVElOX0RPQ1VNRU5UID0gJ19fTkVYVF9CVUlMVElOX0RPQ1VNRU5UX18nXG5leHBvcnQgY29uc3QgQkFSUkVMX09QVElNSVpBVElPTl9QUkVGSVggPSAnX19iYXJyZWxfb3B0aW1pemVfXydcblxuLy8gc2VydmVyL1tlbnRyeV0vcGFnZV9jbGllbnQtcmVmZXJlbmNlLW1hbmlmZXN0LmpzXG5leHBvcnQgY29uc3QgQ0xJRU5UX1JFRkVSRU5DRV9NQU5JRkVTVCA9ICdjbGllbnQtcmVmZXJlbmNlLW1hbmlmZXN0J1xuLy8gc2VydmVyL3NlcnZlci1yZWZlcmVuY2UtbWFuaWZlc3RcbmV4cG9ydCBjb25zdCBTRVJWRVJfUkVGRVJFTkNFX01BTklGRVNUID0gJ3NlcnZlci1yZWZlcmVuY2UtbWFuaWZlc3QnXG4vLyBzZXJ2ZXIvbWlkZGxld2FyZS1idWlsZC1tYW5pZmVzdC5qc1xuZXhwb3J0IGNvbnN0IE1JRERMRVdBUkVfQlVJTERfTUFOSUZFU1QgPSAnbWlkZGxld2FyZS1idWlsZC1tYW5pZmVzdCdcbi8vIHNlcnZlci9taWRkbGV3YXJlLXJlYWN0LWxvYWRhYmxlLW1hbmlmZXN0LmpzXG5leHBvcnQgY29uc3QgTUlERExFV0FSRV9SRUFDVF9MT0FEQUJMRV9NQU5JRkVTVCA9XG4gICdtaWRkbGV3YXJlLXJlYWN0LWxvYWRhYmxlLW1hbmlmZXN0J1xuLy8gc2VydmVyL2ludGVyY2VwdGlvbi1yb3V0ZS1yZXdyaXRlLW1hbmlmZXN0LmpzXG5leHBvcnQgY29uc3QgSU5URVJDRVBUSU9OX1JPVVRFX1JFV1JJVEVfTUFOSUZFU1QgPVxuICAnaW50ZXJjZXB0aW9uLXJvdXRlLXJld3JpdGUtbWFuaWZlc3QnXG4vLyBzZXJ2ZXIvZHluYW1pYy1jc3MtbWFuaWZlc3QuanNcbmV4cG9ydCBjb25zdCBEWU5BTUlDX0NTU19NQU5JRkVTVCA9ICdkeW5hbWljLWNzcy1tYW5pZmVzdCdcblxuLy8gc3RhdGljL3J1bnRpbWUvbWFpbi5qc1xuZXhwb3J0IGNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOID0gYG1haW5gXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU5fQVBQID0gYCR7Q0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU59LWFwcGBcbi8vIG5leHQgaW50ZXJuYWwgY2xpZW50IGNvbXBvbmVudHMgY2h1bmsgZm9yIGxheW91dHNcbmV4cG9ydCBjb25zdCBBUFBfQ0xJRU5UX0lOVEVSTkFMUyA9ICdhcHAtcGFnZXMtaW50ZXJuYWxzJ1xuLy8gc3RhdGljL3J1bnRpbWUvcmVhY3QtcmVmcmVzaC5qc1xuZXhwb3J0IGNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9SRUFDVF9SRUZSRVNIID0gYHJlYWN0LXJlZnJlc2hgXG4vLyBzdGF0aWMvcnVudGltZS9hbXAuanNcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QID0gYGFtcGBcbi8vIHN0YXRpYy9ydW50aW1lL3dlYnBhY2suanNcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfV0VCUEFDSyA9IGB3ZWJwYWNrYFxuLy8gc3RhdGljL3J1bnRpbWUvcG9seWZpbGxzLmpzXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMUyA9ICdwb2x5ZmlsbHMnXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMU19TWU1CT0wgPSBTeW1ib2woXG4gIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFNcbilcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JVTlRJTUVfV0VCUEFDSyA9ICd3ZWJwYWNrLXJ1bnRpbWUnXG5leHBvcnQgY29uc3QgRURHRV9SVU5USU1FX1dFQlBBQ0sgPSAnZWRnZS1ydW50aW1lLXdlYnBhY2snXG5leHBvcnQgY29uc3QgU1RBVElDX1BST1BTX0lEID0gJ19fTl9TU0cnXG5leHBvcnQgY29uc3QgU0VSVkVSX1BST1BTX0lEID0gJ19fTl9TU1AnXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVJJRl9GT05UID0ge1xuICBuYW1lOiAnVGltZXMgTmV3IFJvbWFuJyxcbiAgeEF2Z0NoYXJXaWR0aDogODIxLFxuICBhekF2Z1dpZHRoOiA4NTQuMzk1MzQ4ODM3MjA5MyxcbiAgdW5pdHNQZXJFbTogMjA0OCxcbn1cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NBTlNfU0VSSUZfRk9OVCA9IHtcbiAgbmFtZTogJ0FyaWFsJyxcbiAgeEF2Z0NoYXJXaWR0aDogOTA0LFxuICBhekF2Z1dpZHRoOiA5MzQuNTExNjI3OTA2OTc2NyxcbiAgdW5pdHNQZXJFbTogMjA0OCxcbn1cbmV4cG9ydCBjb25zdCBTVEFUSUNfU1RBVFVTX1BBR0VTID0gWycvNTAwJ11cbmV4cG9ydCBjb25zdCBUUkFDRV9PVVRQVVRfVkVSU0lPTiA9IDFcbi8vIGluIGBNQmBcbmV4cG9ydCBjb25zdCBUVVJCT19UUkFDRV9ERUZBVUxUX01FTU9SWV9MSU1JVCA9IDYwMDBcblxuZXhwb3J0IGNvbnN0IFJTQ19NT0RVTEVfVFlQRVMgPSB7XG4gIGNsaWVudDogJ2NsaWVudCcsXG4gIHNlcnZlcjogJ3NlcnZlcicsXG59IGFzIGNvbnN0XG5cbi8vIGNvbXBhcmluZ1xuLy8gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9lZGdlLXJ1bnRpbWVcbi8vIHdpdGhcbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9kb2NzL2xhdGVzdC9hcGkvZ2xvYmFscy5odG1sXG5leHBvcnQgY29uc3QgRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVMgPSBbXG4gICdjbGVhckltbWVkaWF0ZScsXG4gICdzZXRJbW1lZGlhdGUnLFxuICAnQnJvYWRjYXN0Q2hhbm5lbCcsXG4gICdCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5JyxcbiAgJ0NvbXByZXNzaW9uU3RyZWFtJyxcbiAgJ0NvdW50UXVldWluZ1N0cmF0ZWd5JyxcbiAgJ0RlY29tcHJlc3Npb25TdHJlYW0nLFxuICAnRG9tRXhjZXB0aW9uJyxcbiAgJ01lc3NhZ2VDaGFubmVsJyxcbiAgJ01lc3NhZ2VFdmVudCcsXG4gICdNZXNzYWdlUG9ydCcsXG4gICdSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJyxcbiAgJ1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QnLFxuICAnUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcicsXG4gICdUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcicsXG4gICdXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyJyxcbl1cblxuZXhwb3J0IGNvbnN0IFNZU1RFTV9FTlRSWVBPSU5UUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOLFxuICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUkVBQ1RfUkVGUkVTSCxcbiAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX0FNUCxcbiAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU5fQVBQLFxuXSlcbiJdLCJuYW1lcyI6WyJBUFBfQlVJTERfTUFOSUZFU1QiLCJBUFBfQ0xJRU5UX0lOVEVSTkFMUyIsIkFQUF9QQVRIU19NQU5JRkVTVCIsIkFQUF9QQVRIX1JPVVRFU19NQU5JRkVTVCIsIkJBUlJFTF9PUFRJTUlaQVRJT05fUFJFRklYIiwiQkxPQ0tFRF9QQUdFUyIsIkJVSUxEX0lEX0ZJTEUiLCJCVUlMRF9NQU5JRkVTVCIsIkNMSUVOVF9QVUJMSUNfRklMRVNfUEFUSCIsIkNMSUVOVF9SRUZFUkVOQ0VfTUFOSUZFU1QiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1BBVEgiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU4iLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTl9BUFAiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMU19TWU1CT0wiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUkVBQ1RfUkVGUkVTSCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9XRUJQQUNLIiwiQ09NUElMRVJfSU5ERVhFUyIsIkNPTVBJTEVSX05BTUVTIiwiQ09ORklHX0ZJTEVTIiwiREVGQVVMVF9SVU5USU1FX1dFQlBBQ0siLCJERUZBVUxUX1NBTlNfU0VSSUZfRk9OVCIsIkRFRkFVTFRfU0VSSUZfRk9OVCIsIkRFVl9DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVCIsIkRFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1QiLCJEWU5BTUlDX0NTU19NQU5JRkVTVCIsIkVER0VfUlVOVElNRV9XRUJQQUNLIiwiRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVMiLCJFWFBPUlRfREVUQUlMIiwiRVhQT1JUX01BUktFUiIsIkZVTkNUSU9OU19DT05GSUdfTUFOSUZFU1QiLCJJTUFHRVNfTUFOSUZFU1QiLCJJTlRFUkNFUFRJT05fUk9VVEVfUkVXUklURV9NQU5JRkVTVCIsIk1JRERMRVdBUkVfQlVJTERfTUFOSUZFU1QiLCJNSURETEVXQVJFX01BTklGRVNUIiwiTUlERExFV0FSRV9SRUFDVF9MT0FEQUJMRV9NQU5JRkVTVCIsIk1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUIiwiTkVYVF9CVUlMVElOX0RPQ1VNRU5UIiwiTkVYVF9GT05UX01BTklGRVNUIiwiUEFHRVNfTUFOSUZFU1QiLCJQSEFTRV9ERVZFTE9QTUVOVF9TRVJWRVIiLCJQSEFTRV9FWFBPUlQiLCJQSEFTRV9JTkZPIiwiUEhBU0VfUFJPRFVDVElPTl9CVUlMRCIsIlBIQVNFX1BST0RVQ1RJT05fU0VSVkVSIiwiUEhBU0VfVEVTVCIsIlBSRVJFTkRFUl9NQU5JRkVTVCIsIlJFQUNUX0xPQURBQkxFX01BTklGRVNUIiwiUk9VVEVTX01BTklGRVNUIiwiUlNDX01PRFVMRV9UWVBFUyIsIlNFUlZFUl9ESVJFQ1RPUlkiLCJTRVJWRVJfRklMRVNfTUFOSUZFU1QiLCJTRVJWRVJfUFJPUFNfSUQiLCJTRVJWRVJfUkVGRVJFTkNFX01BTklGRVNUIiwiU1RBVElDX1BST1BTX0lEIiwiU1RBVElDX1NUQVRVU19QQUdFUyIsIlNUUklOR19MSVRFUkFMX0RST1BfQlVORExFIiwiU1VCUkVTT1VSQ0VfSU5URUdSSVRZX01BTklGRVNUIiwiU1lTVEVNX0VOVFJZUE9JTlRTIiwiVFJBQ0VfT1VUUFVUX1ZFUlNJT04iLCJUVVJCT1BBQ0tfQ0xJRU5UX01JRERMRVdBUkVfTUFOSUZFU1QiLCJUVVJCT19UUkFDRV9ERUZBVUxUX01FTU9SWV9MSU1JVCIsIlVOREVSU0NPUkVfTk9UX0ZPVU5EX1JPVVRFIiwiVU5ERVJTQ09SRV9OT1RfRk9VTkRfUk9VVEVfRU5UUlkiLCJXRUJQQUNLX1NUQVRTIiwiY2xpZW50Iiwic2VydmVyIiwiZWRnZVNlcnZlciIsIlN5bWJvbCIsIm5hbWUiLCJ4QXZnQ2hhcldpZHRoIiwiYXpBdmdXaWR0aCIsInVuaXRzUGVyRW0iLCJTZXQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/constants.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/encode-uri-path.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/encode-uri-path.js ***!
|
||
\**************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"encodeURIPath\", ({\n enumerable: true,\n get: function() {\n return encodeURIPath;\n }\n}));\nfunction encodeURIPath(file) {\n return file.split('/').map((p)=>encodeURIComponent(p)).join('/');\n} //# sourceMappingURL=encode-uri-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lbmNvZGUtdXJpLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OztpREFBZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLGNBQWNDLElBQVk7SUFDeEMsT0FBT0EsS0FDSkMsS0FBSyxDQUFDLEtBQ05DLEdBQUcsQ0FBQyxDQUFDQyxJQUFNQyxtQkFBbUJELElBQzlCRSxJQUFJLENBQUM7QUFDViIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXGVuY29kZS11cmktcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJUGF0aChmaWxlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZpbGVcbiAgICAuc3BsaXQoJy8nKVxuICAgIC5tYXAoKHApID0+IGVuY29kZVVSSUNvbXBvbmVudChwKSlcbiAgICAuam9pbignLycpXG59XG4iXSwibmFtZXMiOlsiZW5jb2RlVVJJUGF0aCIsImZpbGUiLCJzcGxpdCIsIm1hcCIsInAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/encode-uri-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/error-source.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/error-source.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n decorateServerError: function() {\n return decorateServerError;\n },\n getErrorSource: function() {\n return getErrorSource;\n }\n});\nconst symbolError = Symbol.for('NextjsError');\nfunction getErrorSource(error) {\n return error[symbolError] || null;\n}\nfunction decorateServerError(error, type) {\n Object.defineProperty(error, symbolError, {\n writable: false,\n enumerable: false,\n configurable: false,\n value: type\n });\n} //# sourceMappingURL=error-source.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lcnJvci1zb3VyY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBUWdCQSxtQkFBbUI7ZUFBbkJBOztJQU5BQyxjQUFjO2VBQWRBOzs7QUFGaEIsTUFBTUMsY0FBY0MsT0FBT0MsR0FBRyxDQUFDO0FBRXhCLFNBQVNILGVBQWVJLEtBQVk7SUFDekMsT0FBUUEsS0FBYSxDQUFDSCxZQUFZLElBQUk7QUFDeEM7QUFJTyxTQUFTRixvQkFBb0JLLEtBQVksRUFBRUMsSUFBcUI7SUFDckVDLE9BQU9DLGNBQWMsQ0FBQ0gsT0FBT0gsYUFBYTtRQUN4Q08sVUFBVTtRQUNWQyxZQUFZO1FBQ1pDLGNBQWM7UUFDZEMsT0FBT047SUFDVDtBQUNGIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxcZXJyb3Itc291cmNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHN5bWJvbEVycm9yID0gU3ltYm9sLmZvcignTmV4dGpzRXJyb3InKVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJyb3JTb3VyY2UoZXJyb3I6IEVycm9yKTogJ3NlcnZlcicgfCAnZWRnZS1zZXJ2ZXInIHwgbnVsbCB7XG4gIHJldHVybiAoZXJyb3IgYXMgYW55KVtzeW1ib2xFcnJvcl0gfHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBFcnJvclNvdXJjZVR5cGUgPSAnZWRnZS1zZXJ2ZXInIHwgJ3NlcnZlcidcblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlU2VydmVyRXJyb3IoZXJyb3I6IEVycm9yLCB0eXBlOiBFcnJvclNvdXJjZVR5cGUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCBzeW1ib2xFcnJvciwge1xuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiB0eXBlLFxuICB9KVxufVxuIl0sIm5hbWVzIjpbImRlY29yYXRlU2VydmVyRXJyb3IiLCJnZXRFcnJvclNvdXJjZSIsInN5bWJvbEVycm9yIiwiU3ltYm9sIiwiZm9yIiwiZXJyb3IiLCJ0eXBlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ3cml0YWJsZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ2YWx1ZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/error-source.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/escape-regexp.js ***!
|
||
\************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// regexp is based on https://github.com/sindresorhus/escape-string-regexp\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"escapeStringRegexp\", ({\n enumerable: true,\n get: function() {\n return escapeStringRegexp;\n }\n}));\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/;\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g;\nfunction escapeStringRegexp(str) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, '\\\\$&');\n }\n return str;\n} //# sourceMappingURL=escape-regexp.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lc2NhcGUtcmVnZXhwLmpzIiwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTs7Ozs7c0RBSTFEQTs7O2VBQUFBOzs7QUFIaEIsTUFBTUMsY0FBYztBQUNwQixNQUFNQyxrQkFBa0I7QUFFakIsU0FBU0YsbUJBQW1CRyxHQUFXO0lBQzVDLCtHQUErRztJQUMvRyxJQUFJRixZQUFZRyxJQUFJLENBQUNELE1BQU07UUFDekIsT0FBT0EsSUFBSUUsT0FBTyxDQUFDSCxpQkFBaUI7SUFDdEM7SUFDQSxPQUFPQztBQUNUIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxcZXNjYXBlLXJlZ2V4cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyByZWdleHAgaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2NhcGUtc3RyaW5nLXJlZ2V4cFxuY29uc3QgcmVIYXNSZWdFeHAgPSAvW3xcXFxce30oKVtcXF1eJCsqPy4tXS9cbmNvbnN0IHJlUmVwbGFjZVJlZ0V4cCA9IC9bfFxcXFx7fSgpW1xcXV4kKyo/Li1dL2dcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVN0cmluZ1JlZ2V4cChzdHI6IHN0cmluZykge1xuICAvLyBzZWUgYWxzbzogaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi8yZGEwMjRjM2I0Zjk5NDdhNDg1MTc2MzlkZTc1NjA0NTdjZDRlYzZjL2VzY2FwZVJlZ0V4cC5qcyNMMjNcbiAgaWYgKHJlSGFzUmVnRXhwLnRlc3Qoc3RyKSkge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShyZVJlcGxhY2VSZWdFeHAsICdcXFxcJCYnKVxuICB9XG4gIHJldHVybiBzdHJcbn1cbiJdLCJuYW1lcyI6WyJlc2NhcGVTdHJpbmdSZWdleHAiLCJyZUhhc1JlZ0V4cCIsInJlUmVwbGFjZVJlZ0V4cCIsInN0ciIsInRlc3QiLCJyZXBsYWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/format-webpack-messages.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/format-webpack-messages.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\nMIT License\n\nCopyright (c) 2015-present, Facebook, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return formatWebpackMessages;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(pages-dir-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js\"));\n// This file is based on https://github.com/facebook/create-react-app/blob/7b1a32be6ec9f99a6c9a3c66813f3ac09c4736b9/packages/react-dev-utils/formatWebpackMessages.js\n// It's been edited to remove chalk and CRA-specific logic\nconst friendlySyntaxErrorLabel = 'Syntax error:';\nconst WEBPACK_BREAKING_CHANGE_POLYFILLS = '\\n\\nBREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.';\nfunction isLikelyASyntaxError(message) {\n return (0, _stripansi.default)(message).includes(friendlySyntaxErrorLabel);\n}\nlet hadMissingSassError = false;\n// Cleans up webpack error messages.\nfunction formatMessage(message, verbose, importTraceNote) {\n // TODO: Replace this once webpack 5 is stable\n if (typeof message === 'object' && message.message) {\n const filteredModuleTrace = message.moduleTrace && message.moduleTrace.filter((trace)=>!/next-(middleware|client-pages|route|edge-function)-loader\\.js/.test(trace.originName));\n let body = message.message;\n const breakingChangeIndex = body.indexOf(WEBPACK_BREAKING_CHANGE_POLYFILLS);\n if (breakingChangeIndex >= 0) {\n body = body.slice(0, breakingChangeIndex);\n }\n message = (message.moduleName ? (0, _stripansi.default)(message.moduleName) + '\\n' : '') + (message.file ? (0, _stripansi.default)(message.file) + '\\n' : '') + body + (message.details && verbose ? '\\n' + message.details : '') + (filteredModuleTrace && filteredModuleTrace.length ? (importTraceNote || '\\n\\nImport trace for requested module:') + filteredModuleTrace.map((trace)=>\"\\n\" + trace.moduleName).join('') : '') + (message.stack && verbose ? '\\n' + message.stack : '');\n }\n let lines = message.split('\\n');\n // Strip Webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line)=>!/Module [A-z ]+\\(from/.test(line));\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line)=>{\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return friendlySyntaxErrorLabel + \" \" + errorMessage + \" (\" + errorLine + \":\" + errorColumn + \")\";\n });\n message = lines.join('\\n');\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(/SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g, \"\" + friendlySyntaxErrorLabel + \" $3 ($1:$2)\\n\");\n // Clean up export errors\n message = message.replace(/^.*export '(.+?)' was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$2'.\");\n message = message.replace(/^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$2' does not contain a default export (imported as '$1').\");\n message = message.replace(/^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$3' (imported as '$2').\");\n lines = message.split('\\n');\n // Remove leading newline\n if (lines.length > 2 && lines[1].trim() === '') {\n lines.splice(1, 1);\n }\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].startsWith('Module not found: ')) {\n lines = [\n lines[0],\n lines[1].replace('Error: ', '').replace('Module not found: Cannot find file:', 'Cannot find file:'),\n ...lines.slice(2)\n ];\n }\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n // ./file.module.scss (<<loader info>>) => ./file.module.scss\n const firstLine = lines[0].split('!');\n lines[0] = firstLine[firstLine.length - 1];\n lines[1] = \"To use Next.js' built-in Sass support, you first need to install `sass`.\\n\";\n lines[1] += 'Run `npm i sass` or `yarn add sass` inside your workspace.\\n';\n lines[1] += '\\nLearn more: https://nextjs.org/docs/messages/install-sass';\n // dispose of unhelpful stack trace\n lines = lines.slice(0, 2);\n hadMissingSassError = true;\n } else if (hadMissingSassError && message.match(/(sass-loader|resolve-url-loader: CSS error)/)) {\n // dispose of unhelpful stack trace following missing sass module\n lines = [];\n }\n if (!verbose) {\n message = lines.join('\\n');\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by Webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, '') // at ... ...:x:y\n ;\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, '') // at <anonymous>\n ;\n message = message.replace(/File was processed with these loaders:\\n(.+[\\\\/](next[\\\\/]dist[\\\\/].+|@next[\\\\/]react-refresh-utils[\\\\/]loader)\\.js\\n)*You may need an additional loader to handle the result of these loaders.\\n/g, '');\n lines = message.split('\\n');\n }\n // Remove duplicated newlines\n lines = lines.filter((line, index, arr)=>index === 0 || line.trim() !== '' || line.trim() !== arr[index - 1].trim());\n // Reassemble the message\n message = lines.join('\\n');\n return message.trim();\n}\nfunction formatWebpackMessages(json, verbose) {\n const formattedErrors = json.errors.map((message)=>{\n const isUnknownNextFontError = message.message.includes('An error occurred in `next/font`.');\n return formatMessage(message, isUnknownNextFontError || verbose);\n });\n const formattedWarnings = json.warnings.map((message)=>{\n return formatMessage(message, verbose);\n });\n // Reorder errors to put the most relevant ones first.\n let reactServerComponentsError = -1;\n for(let i = 0; i < formattedErrors.length; i++){\n const error = formattedErrors[i];\n if (error.includes('ReactServerComponentsError')) {\n reactServerComponentsError = i;\n break;\n }\n }\n // Move the reactServerComponentsError to the top if it exists\n if (reactServerComponentsError !== -1) {\n const error = formattedErrors.splice(reactServerComponentsError, 1);\n formattedErrors.unshift(error[0]);\n }\n const result = {\n ...json,\n errors: formattedErrors,\n warnings: formattedWarnings\n };\n if (!verbose && result.errors.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n result.warnings = [];\n }\n return result;\n} //# sourceMappingURL=format-webpack-messages.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9mb3JtYXQtd2VicGFjay1tZXNzYWdlcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQTs7OzsyQ0FpS0E7OztlQUF3QkE7Ozs7Z0ZBaEtGO0FBQ3RCLHFLQUFxSztBQUNySywwREFBMEQ7QUFFMUQsTUFBTUMsMkJBQTJCO0FBRWpDLE1BQU1DLG9DQUNKO0FBRUYsU0FBU0MscUJBQXFCQyxPQUFlO0lBQzNDLE9BQU9DLENBQUFBLEdBQUFBLFdBQUFBLE9BQUFBLEVBQVVELFNBQVNFLFFBQVEsQ0FBQ0w7QUFDckM7QUFFQSxJQUFJTSxzQkFBc0I7QUFFMUIsb0NBQW9DO0FBQ3BDLFNBQVNDLGNBQ1BKLE9BQVksRUFDWkssT0FBaUIsRUFDakJDLGVBQXlCO0lBRXpCLDhDQUE4QztJQUM5QyxJQUFJLE9BQU9OLFlBQVksWUFBWUEsUUFBUUEsT0FBTyxFQUFFO1FBQ2xELE1BQU1PLHNCQUNKUCxRQUFRUSxXQUFXLElBQ25CUixRQUFRUSxXQUFXLENBQUNDLE1BQU0sQ0FDeEIsQ0FBQ0MsUUFDQyxDQUFDLGdFQUFnRUMsSUFBSSxDQUNuRUQsTUFBTUUsVUFBVTtRQUl4QixJQUFJQyxPQUFPYixRQUFRQSxPQUFPO1FBQzFCLE1BQU1jLHNCQUFzQkQsS0FBS0UsT0FBTyxDQUFDakI7UUFDekMsSUFBSWdCLHVCQUF1QixHQUFHO1lBQzVCRCxPQUFPQSxLQUFLRyxLQUFLLENBQUMsR0FBR0Y7UUFDdkI7UUFFQWQsVUFDR0EsQ0FBQUEsUUFBUWlCLFVBQVUsR0FBR2hCLENBQUFBLEdBQUFBLFdBQUFBLE9BQUFBLEVBQVVELFFBQVFpQixVQUFVLElBQUksT0FBTyxHQUFDLEdBQzdEakIsQ0FBQUEsUUFBUWtCLElBQUksR0FBR2pCLENBQUFBLEdBQUFBLFdBQUFBLE9BQUFBLEVBQVVELFFBQVFrQixJQUFJLElBQUksT0FBTyxHQUFDLEdBQ2xE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QkFBZ0JRLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDLEVBQUU7SUFDbEM7SUFFQSxNQUFNRSxTQUFTO1FBQ2IsR0FBR1YsSUFBSTtRQUNQRSxRQUFRRDtRQUNSSSxVQUFVRDtJQUNaO0lBQ0EsSUFBSSxDQUFDdkMsV0FBVzZDLE9BQU9SLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDcEQsdUJBQXVCO1FBQ3hELGtEQUFrRDtRQUNsRG1ELE9BQU9SLE1BQU0sR0FBR1EsT0FBT1IsTUFBTSxDQUFDakMsTUFBTSxDQUFDVjtRQUNyQ21ELE9BQU9MLFFBQVEsR0FBRyxFQUFFO0lBQ3RCO0lBQ0EsT0FBT0s7QUFDVCIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXGZvcm1hdC13ZWJwYWNrLW1lc3NhZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cbiovXG5pbXBvcnQgc3RyaXBBbnNpIGZyb20gJ25leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpJ1xuLy8gVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9jcmVhdGUtcmVhY3QtYXBwL2Jsb2IvN2IxYTMyYmU2ZWM5Zjk5YTZjOWEzYzY2ODEzZjNhYzA5YzQ3MzZiOS9wYWNrYWdlcy9yZWFjdC1kZXYtdXRpbHMvZm9ybWF0V2VicGFja01lc3NhZ2VzLmpzXG4vLyBJdCdzIGJlZW4gZWRpdGVkIHRvIHJlbW92ZSBjaGFsayBhbmQgQ1JBLXNwZWNpZmljIGxvZ2ljXG5cbmNvbnN0IGZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbCA9ICdTeW50YXggZXJyb3I6J1xuXG5jb25zdCBXRUJQQUNLX0JSRUFLSU5HX0NIQU5HRV9QT0xZRklMTFMgPVxuICAnXFxuXFxuQlJFQUtJTkcgQ0hBTkdFOiB3ZWJwYWNrIDwgNSB1c2VkIHRvIGluY2x1ZGUgcG9seWZpbGxzIGZvciBub2RlLmpzIGNvcmUgbW9kdWxlcyBieSBkZWZhdWx0LidcblxuZnVuY3Rpb24gaXNMaWtlbHlBU3ludGF4RXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpcEFuc2kobWVzc2FnZSkuaW5jbHVkZXMoZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsKVxufVxuXG5sZXQgaGFkTWlzc2luZ1Nhc3NFcnJvciA9IGZhbHNlXG5cbi8vIENsZWFucyB1cCB3ZWJwYWNrIGVycm9yIG1lc3NhZ2VzLlxuZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShcbiAgbWVzc2FnZTogYW55LFxuICB2ZXJib3NlPzogYm9vbGVhbixcbiAgaW1wb3J0VHJhY2VOb3RlPzogYm9vbGVhblxuKSB7XG4gIC8vIFRPRE86IFJlcGxhY2UgdGhpcyBvbmNlIHdlYnBhY2sgNSBpcyBzdGFibGVcbiAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnb2JqZWN0JyAmJiBtZXNzYWdlLm1lc3NhZ2UpIHtcbiAgICBjb25zdCBmaWx0ZXJlZE1vZHVsZVRyYWNlID1cbiAgICAgIG1lc3NhZ2UubW9kdWxlVHJhY2UgJiZcbiAgICAgIG1lc3NhZ2UubW9kdWxlVHJhY2UuZmlsdGVyKFxuICAgICAgICAodHJhY2U6IGFueSkgPT5cbiAgICAgICAgICAhL25leHQtKG1pZGRsZXdhcmV8Y2xpZW50LXBhZ2VzfHJvdXRlfGVkZ2UtZnVuY3Rpb24pLWxvYWRlclxcLmpzLy50ZXN0KFxuICAgICAgICAgICAgdHJhY2Uub3JpZ2luTmFtZVxuICAgICAgICAgIClcbiAgICAgIClcblxuICAgIGxldCBib2R5ID0gbWVzc2FnZS5tZXNzYWdlXG4gICAgY29uc3QgYnJlYWtpbmdDaGFuZ2VJbmRleCA9IGJvZHkuaW5kZXhPZihXRUJQQUNLX0JSRUFLSU5HX0NIQU5HRV9QT0xZRklMTFMpXG4gICAgaWYgKGJyZWFraW5nQ2hhbmdlSW5kZXggPj0gMCkge1xuICAgICAgYm9keSA9IGJvZHkuc2xpY2UoMCwgYnJlYWtpbmdDaGFuZ2VJbmRleClcbiAgICB9XG5cbiAgICBtZXNzYWdlID1cbiAgICAgIChtZXNzYWdlLm1vZHVsZU5hbWUgPyBzdHJpcEFuc2kobWVzc2FnZS5tb2R1bGVOYW1lKSArICdcXG4nIDogJycpICtcbiAgICAgIChtZXNzYWdlLmZpbGUgPyBzdHJpcEFuc2kobWVzc2FnZS5maWxlKSArICdcXG4nIDogJycpICtcbiAgICAgIGJvZHkgK1xuICAgICAgKG1lc3NhZ2UuZGV0YWlscyAmJiB2ZXJib3NlID8gJ1xcbicgKyBtZXNzYWdlLmRldGFpbHMgOiAnJykgK1xuICAgICAgKGZpbHRlcmVkTW9kdWxlVHJhY2UgJiYgZmlsdGVyZWRNb2R1bGVUcmFjZS5sZW5ndGhcbiAgICAgICAgPyAoaW1wb3J0VHJhY2VOb3RlIHx8ICdcXG5cXG5JbXBvcnQgdHJhY2UgZm9yIHJlcXVlc3RlZCBtb2R1bGU6JykgK1xuICAgICAgICAgIGZpbHRlcmVkTW9kdWxlVHJhY2VcbiAgICAgICAgICAgIC5tYXAoKHRyYWNlOiBhbnkpID0+IGBcXG4ke3RyYWNlLm1vZHVsZU5hbWV9YClcbiAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICA6ICcnKSArXG4gICAgICAobWVzc2FnZS5zdGFjayAmJiB2ZXJib3NlID8gJ1xcbicgKyBtZXNzYWdlLnN0YWNrIDogJycpXG4gIH1cbiAgbGV0IGxpbmVzID0gbWVzc2FnZS5zcGxpdCgnXFxuJylcblxuICAvLyBTdHJpcCBXZWJwYWNrLWFkZGVkIGhlYWRlcnMgb2ZmIGVycm9ycy93YXJuaW5nc1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2Jsb2IvbWFzdGVyL2xpYi9Nb2R1bGVFcnJvci5qc1xuICBsaW5lcyA9IGxpbmVzLmZpbHRlcigobGluZTogc3RyaW5nKSA9PiAhL01vZHVsZSBbQS16IF0rXFwoZnJvbS8udGVzdChsaW5lKSlcblxuICAvLyBUcmFuc2Zvcm0gcGFyc2luZyBlcnJvciBpbnRvIHN5bnRheCBlcnJvclxuICAvLyBUT0RPOiBtb3ZlIHRoaXMgdG8gb3VyIEVTTGludCBmb3JtYXR0ZXI/XG4gIGxpbmVzID0gbGluZXMubWFwKChsaW5lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwYXJzaW5nRXJyb3IgPSAvTGluZSAoXFxkKyk6KD86KFxcZCspOik/XFxzKlBhcnNpbmcgZXJyb3I6ICguKykkLy5leGVjKFxuICAgICAgbGluZVxuICAgIClcbiAgICBpZiAoIXBhcnNpbmdFcnJvcikge1xuICAgICAgcmV0dXJuIGxpbmVcbiAgICB9XG4gICAgY29uc3QgWywgZXJyb3JMaW5lLCBlcnJvckNvbHVtbiwgZXJyb3JNZXNzYWdlXSA9IHBhcnNpbmdFcnJvclxuICAgIHJldHVybiBgJHtmcmllbmRseVN5bnRheEVycm9yTGFiZWx9ICR7ZXJyb3JNZXNzYWdlfSAoJHtlcnJvckxpbmV9OiR7ZXJyb3JDb2x1bW59KWBcbiAgfSlcblxuICBtZXNzYWdlID0gbGluZXMuam9pbignXFxuJylcbiAgLy8gU21vb3NoIHN5bnRheCBlcnJvcnMgKGNvbW1vbmx5IGZvdW5kIGluIENTUylcbiAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAvU3ludGF4RXJyb3JcXHMrXFwoKFxcZCspOihcXGQrKVxcKVxccyooLis/KVxcbi9nLFxuICAgIGAke2ZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbH0gJDMgKCQxOiQyKVxcbmBcbiAgKVxuICAvLyBDbGVhbiB1cCBleHBvcnQgZXJyb3JzXG4gIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoXG4gICAgL14uKmV4cG9ydCAnKC4rPyknIHdhcyBub3QgZm91bmQgaW4gJyguKz8pJy4qJC9nbSxcbiAgICBgQXR0ZW1wdGVkIGltcG9ydCBlcnJvcjogJyQxJyBpcyBub3QgZXhwb3J0ZWQgZnJvbSAnJDInLmBcbiAgKVxuICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgIC9eLipleHBvcnQgJ2RlZmF1bHQnIFxcKGltcG9ydGVkIGFzICcoLis/KSdcXCkgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLFxuICAgIGBBdHRlbXB0ZWQgaW1wb3J0IGVycm9yOiAnJDInIGRvZXMgbm90IGNvbnRhaW4gYSBkZWZhdWx0IGV4cG9ydCAoaW1wb3J0ZWQgYXMgJyQxJykuYFxuICApXG4gIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoXG4gICAgL14uKmV4cG9ydCAnKC4rPyknIFxcKGltcG9ydGVkIGFzICcoLis/KSdcXCkgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLFxuICAgIGBBdHRlbXB0ZWQgaW1wb3J0IGVycm9yOiAnJDEnIGlzIG5vdCBleHBvcnRlZCBmcm9tICckMycgKGltcG9ydGVkIGFzICckMicpLmBcbiAgKVxuICBsaW5lcyA9IG1lc3NhZ2Uuc3BsaXQoJ1xcbicpXG5cbiAgLy8gUmVtb3ZlIGxlYWRpbmcgbmV3bGluZVxuICBpZiAobGluZXMubGVuZ3RoID4gMiAmJiBsaW5lc1sxXS50cmltKCkgPT09ICcnKSB7XG4gICAgbGluZXMuc3BsaWNlKDEsIDEpXG4gIH1cblxuICAvLyBDbGVhbnMgdXAgdmVyYm9zZSBcIm1vZHVsZSBub3QgZm91bmRcIiBtZXNzYWdlcyBmb3IgZmlsZXMgYW5kIHBhY2thZ2VzLlxuICBpZiAobGluZXNbMV0gJiYgbGluZXNbMV0uc3RhcnRzV2l0aCgnTW9kdWxlIG5vdCBmb3VuZDogJykpIHtcbiAgICBsaW5lcyA9IFtcbiAgICAgIGxpbmVzWzBdLFxuICAgICAgbGluZXNbMV1cbiAgICAgICAgLnJlcGxhY2UoJ0Vycm9yOiAnLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ01vZHVsZSBub3QgZm91bmQ6IENhbm5vdCBmaW5kIGZpbGU6JywgJ0Nhbm5vdCBmaW5kIGZpbGU6JyksXG4gICAgICAuLi5saW5lcy5zbGljZSgyKSxcbiAgICBdXG4gIH1cblxuICAvLyBBZGQgaGVscGZ1bCBtZXNzYWdlIGZvciB1c2VycyB0cnlpbmcgdG8gdXNlIFNhc3MgZm9yIHRoZSBmaXJzdCB0aW1lXG4gIGlmIChsaW5lc1sxXSAmJiBsaW5lc1sxXS5tYXRjaCgvQ2Fubm90IGZpbmQgbW9kdWxlLitzYXNzLykpIHtcbiAgICAvLyAuL2ZpbGUubW9kdWxlLnNjc3MgKDw8bG9hZGVyIGluZm8+PikgPT4gLi9maWxlLm1vZHVsZS5zY3NzXG4gICAgY29uc3QgZmlyc3RMaW5lID0gbGluZXNbMF0uc3BsaXQoJyEnKVxuICAgIGxpbmVzWzBdID0gZmlyc3RMaW5lW2ZpcnN0TGluZS5sZW5ndGggLSAxXVxuXG4gICAgbGluZXNbMV0gPVxuICAgICAgXCJUbyB1c2UgTmV4dC5qcycgYnVpbHQtaW4gU2FzcyBzdXBwb3J0LCB5b3UgZmlyc3QgbmVlZCB0byBpbnN0YWxsIGBzYXNzYC5cXG5cIlxuICAgIGxpbmVzWzFdICs9ICdSdW4gYG5wbSBpIHNhc3NgIG9yIGB5YXJuIGFkZCBzYXNzYCBpbnNpZGUgeW91ciB3b3Jrc3BhY2UuXFxuJ1xuICAgIGxpbmVzWzFdICs9ICdcXG5MZWFybiBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9pbnN0YWxsLXNhc3MnXG5cbiAgICAvLyBkaXNwb3NlIG9mIHVuaGVscGZ1bCBzdGFjayB0cmFjZVxuICAgIGxpbmVzID0gbGluZXMuc2xpY2UoMCwgMilcbiAgICBoYWRNaXNzaW5nU2Fzc0Vycm9yID0gdHJ1ZVxuICB9IGVsc2UgaWYgKFxuICAgIGhhZE1pc3NpbmdTYXNzRXJyb3IgJiZcbiAgICBtZXNzYWdlLm1hdGNoKC8oc2Fzcy1sb2FkZXJ8cmVzb2x2ZS11cmwtbG9hZGVyOiBDU1MgZXJyb3IpLylcbiAgKSB7XG4gICAgLy8gZGlzcG9zZSBvZiB1bmhlbHBmdWwgc3RhY2sgdHJhY2UgZm9sbG93aW5nIG1pc3Npbmcgc2FzcyBtb2R1bGVcbiAgICBsaW5lcyA9IFtdXG4gIH1cblxuICBpZiAoIXZlcmJvc2UpIHtcbiAgICBtZXNzYWdlID0gbGluZXMuam9pbignXFxuJylcbiAgICAvLyBJbnRlcm5hbCBzdGFja3MgYXJlIGdlbmVyYWxseSB1c2VsZXNzIHNvIHdlIHN0cmlwIHRoZW0uLi4gd2l0aCB0aGVcbiAgICAvLyBleGNlcHRpb24gb2Ygc3RhY2tzIGNvbnRhaW5pbmcgYHdlYnBhY2s6YCBiZWNhdXNlIHRoZXkncmUgbm9ybWFsbHlcbiAgICAvLyBmcm9tIHVzZXIgY29kZSBnZW5lcmF0ZWQgYnkgV2VicGFjay4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2NyZWF0ZS1yZWFjdC1hcHAvcHVsbC8xMDUwXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgIC9eXFxzKmF0XFxzKCg/IXdlYnBhY2s6KS4pKjpcXGQrOlxcZCtbXFxzKV0qKFxcbnwkKS9nbSxcbiAgICAgICcnXG4gICAgKSAvLyBhdCAuLi4gLi4uOng6eVxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL15cXHMqYXRcXHM8YW5vbnltb3VzPihcXG58JCkvZ20sICcnKSAvLyBhdCA8YW5vbnltb3VzPlxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgIC9GaWxlIHdhcyBwcm9jZXNzZWQgd2l0aCB0aGVzZSBsb2FkZXJzOlxcbiguK1tcXFxcL10obmV4dFtcXFxcL11kaXN0W1xcXFwvXS4rfEBuZXh0W1xcXFwvXXJlYWN0LXJlZnJlc2gtdXRpbHNbXFxcXC9dbG9hZGVyKVxcLmpzXFxuKSpZb3UgbWF5IG5lZWQgYW4gYWRkaXRpb25hbCBsb2FkZXIgdG8gaGFuZGxlIHRoZSByZXN1bHQgb2YgdGhlc2UgbG9hZGVycy5cXG4vZyxcbiAgICAgICcnXG4gICAgKVxuXG4gICAgbGluZXMgPSBtZXNzYWdlLnNwbGl0KCdcXG4nKVxuICB9XG5cbiAgLy8gUmVtb3ZlIGR1cGxpY2F0ZWQgbmV3bGluZXNcbiAgbGluZXMgPSAobGluZXMgYXMgc3RyaW5nW10pLmZpbHRlcihcbiAgICAobGluZSwgaW5kZXgsIGFycikgPT5cbiAgICAgIGluZGV4ID09PSAwIHx8IGxpbmUudHJpbSgpICE9PSAnJyB8fCBsaW5lLnRyaW0oKSAhPT0gYXJyW2luZGV4IC0gMV0udHJpbSgpXG4gIClcblxuICAvLyBSZWFzc2VtYmxlIHRoZSBtZXNzYWdlXG4gIG1lc3NhZ2UgPSBsaW5lcy5qb2luKCdcXG4nKVxuICByZXR1cm4gbWVzc2FnZS50cmltKClcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0V2VicGFja01lc3NhZ2VzKGpzb246IGFueSwgdmVyYm9zZT86IGJvb2xlYW4pIHtcbiAgY29uc3QgZm9ybWF0dGVkRXJyb3JzID0ganNvbi5lcnJvcnMubWFwKChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICBjb25zdCBpc1Vua25vd25OZXh0Rm9udEVycm9yID0gbWVzc2FnZS5tZXNzYWdlLmluY2x1ZGVzKFxuICAgICAgJ0FuIGVycm9yIG9jY3VycmVkIGluIGBuZXh0L2ZvbnRgLidcbiAgICApXG4gICAgcmV0dXJuIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSwgaXNVbmtub3duTmV4dEZvbnRFcnJvciB8fCB2ZXJib3NlKVxuICB9KVxuICBjb25zdCBmb3JtYXR0ZWRXYXJuaW5ncyA9IGpzb24ud2FybmluZ3MubWFwKChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICByZXR1cm4gZm9ybWF0TWVzc2FnZShtZXNzYWdlLCB2ZXJib3NlKVxuICB9KVxuXG4gIC8vIFJlb3JkZXIgZXJyb3JzIHRvIHB1dCB0aGUgbW9zdCByZWxldmFudCBvbmVzIGZpcnN0LlxuICBsZXQgcmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgPSAtMVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkRXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZXJyb3IgPSBmb3JtYXR0ZWRFcnJvcnNbaV1cbiAgICBpZiAoZXJyb3IuaW5jbHVkZXMoJ1JlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yJykpIHtcbiAgICAgIHJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yID0gaVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyBNb3ZlIHRoZSByZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciB0byB0aGUgdG9wIGlmIGl0IGV4aXN0c1xuICBpZiAocmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgIT09IC0xKSB7XG4gICAgY29uc3QgZXJyb3IgPSBmb3JtYXR0ZWRFcnJvcnMuc3BsaWNlKHJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yLCAxKVxuICAgIGZvcm1hdHRlZEVycm9ycy51bnNoaWZ0KGVycm9yWzBdKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLmpzb24sXG4gICAgZXJyb3JzOiBmb3JtYXR0ZWRFcnJvcnMsXG4gICAgd2FybmluZ3M6IGZvcm1hdHRlZFdhcm5pbmdzLFxuICB9XG4gIGlmICghdmVyYm9zZSAmJiByZXN1bHQuZXJyb3JzLnNvbWUoaXNMaWtlbHlBU3ludGF4RXJyb3IpKSB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzeW50YXggZXJyb3JzLCBzaG93IGp1c3QgdGhlbS5cbiAgICByZXN1bHQuZXJyb3JzID0gcmVzdWx0LmVycm9ycy5maWx0ZXIoaXNMaWtlbHlBU3ludGF4RXJyb3IpXG4gICAgcmVzdWx0Lndhcm5pbmdzID0gW11cbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibmFtZXMiOlsiZm9ybWF0V2VicGFja01lc3NhZ2VzIiwiZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsIiwiV0VCUEFDS19CUkVBS0lOR19DSEFOR0VfUE9MWUZJTExTIiwiaXNMaWtlbHlBU3ludGF4RXJyb3IiLCJtZXNzYWdlIiwic3RyaXBBbnNpIiwiaW5jbHVkZXMiLCJoYWRNaXNzaW5nU2Fzc0Vycm9yIiwiZm9ybWF0TWVzc2FnZSIsInZlcmJvc2UiLCJpbXBvcnRUcmFjZU5vdGUiLCJmaWx0ZXJlZE1vZHVsZVRyYWNlIiwibW9kdWxlVHJhY2UiLCJmaWx0ZXIiLCJ0cmFjZSIsInRlc3QiLCJvcmlnaW5OYW1lIiwiYm9keSIsImJyZWFraW5nQ2hhbmdlSW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJtb2R1bGVOYW1lIiwiZmlsZSIsImRldGFpbHMiLCJsZW5ndGgiLCJtYXAiLCJqb2luIiwic3RhY2siLCJsaW5lcyIsInNwbGl0IiwibGluZSIsInBhcnNpbmdFcnJvciIsImV4ZWMiLCJlcnJvckxpbmUiLCJlcnJvckNvbHVtbiIsImVycm9yTWVzc2FnZSIsInJlcGxhY2UiLCJ0cmltIiwic3BsaWNlIiwic3RhcnRzV2l0aCIsIm1hdGNoIiwiZmlyc3RMaW5lIiwiaW5kZXgiLCJhcnIiLCJqc29uIiwiZm9ybWF0dGVkRXJyb3JzIiwiZXJyb3JzIiwiaXNVbmtub3duTmV4dEZvbnRFcnJvciIsImZvcm1hdHRlZFdhcm5pbmdzIiwid2FybmluZ3MiLCJyZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciIsImkiLCJlcnJvciIsInVuc2hpZnQiLCJyZXN1bHQiLCJzb21lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/format-webpack-messages.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js ***!
|
||
\**********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HeadManagerContext\", ({\n enumerable: true,\n get: function() {\n return HeadManagerContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst HeadManagerContext = _react.default.createContext({});\nif (true) {\n HeadManagerContext.displayName = 'HeadManagerContext';\n} //# sourceMappingURL=head-manager-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQUVhQTs7O2VBQUFBOzs7OzRFQUZLO0FBRVgsTUFBTUEscUJBVVJDLE9BQUFBLE9BQUssQ0FBQ0MsYUFBYSxDQUFDLENBQUM7QUFFMUIsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNILG1CQUFtQk0sV0FBVyxHQUFHO0FBQ25DIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxcaGVhZC1tYW5hZ2VyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgSGVhZE1hbmFnZXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PHtcbiAgdXBkYXRlSGVhZD86IChzdGF0ZTogYW55KSA9PiB2b2lkXG4gIG1vdW50ZWRJbnN0YW5jZXM/OiBhbnlcbiAgdXBkYXRlU2NyaXB0cz86IChzdGF0ZTogYW55KSA9PiB2b2lkXG4gIHNjcmlwdHM/OiBhbnlcbiAgZ2V0SXNTc3I/OiAoKSA9PiBib29sZWFuXG5cbiAgLy8gVXNlZCBpbiBhcHAgZGlyZWN0b3J5LCB0byByZW5kZXIgc2NyaXB0IHRhZ3MgYXMgc2VydmVyIGNvbXBvbmVudHMuXG4gIGFwcERpcj86IGJvb2xlYW5cbiAgbm9uY2U/OiBzdHJpbmdcbn0+ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7fSlcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgSGVhZE1hbmFnZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0hlYWRNYW5hZ2VyQ29udGV4dCdcbn1cbiJdLCJuYW1lcyI6WyJIZWFkTWFuYWdlckNvbnRleHQiLCJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js ***!
|
||
\**********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PathParamsContext: function() {\n return PathParamsContext;\n },\n PathnameContext: function() {\n return PathnameContext;\n },\n SearchParamsContext: function() {\n return SearchParamsContext;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\");\nconst SearchParamsContext = (0, _react.createContext)(null);\nconst PathnameContext = (0, _react.createContext)(null);\nconst PathParamsContext = (0, _react.createContext)(null);\nif (true) {\n SearchParamsContext.displayName = 'SearchParamsContext';\n PathnameContext.displayName = 'PathnameContext';\n PathParamsContext.displayName = 'PathParamsContext';\n} //# sourceMappingURL=hooks-client-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFPYUEsaUJBQWlCO2VBQWpCQTs7SUFEQUMsZUFBZTtlQUFmQTs7SUFEQUMsbUJBQW1CO2VBQW5CQTs7O21DQUhpQjtBQUd2QixNQUFNQSxzQkFBc0JDLENBQUFBLEdBQUFBLE9BQUFBLGFBQUFBLEVBQXNDO0FBQ2xFLE1BQU1GLGtCQUFrQkUsQ0FBQUEsR0FBQUEsT0FBQUEsYUFBQUEsRUFBNkI7QUFDckQsTUFBTUgsb0JBQW9CRyxDQUFBQSxHQUFBQSxPQUFBQSxhQUFBQSxFQUE2QjtBQUU5RCxJQUFJQyxJQUFvQixFQUFtQjtJQUN6Q0Ysb0JBQW9CSyxXQUFXLEdBQUc7SUFDbENOLGdCQUFnQk0sV0FBVyxHQUFHO0lBQzlCUCxrQkFBa0JPLFdBQVcsR0FBRztBQUNsQyIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXGhvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFBhcmFtcyB9IGZyb20gJy4uLy4uL3NlcnZlci9yZXF1ZXN0L3BhcmFtcydcblxuZXhwb3J0IGNvbnN0IFNlYXJjaFBhcmFtc0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFVSTFNlYXJjaFBhcmFtcyB8IG51bGw+KG51bGwpXG5leHBvcnQgY29uc3QgUGF0aG5hbWVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxzdHJpbmcgfCBudWxsPihudWxsKVxuZXhwb3J0IGNvbnN0IFBhdGhQYXJhbXNDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxQYXJhbXMgfCBudWxsPihudWxsKVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBTZWFyY2hQYXJhbXNDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1NlYXJjaFBhcmFtc0NvbnRleHQnXG4gIFBhdGhuYW1lQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdQYXRobmFtZUNvbnRleHQnXG4gIFBhdGhQYXJhbXNDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1BhdGhQYXJhbXNDb250ZXh0J1xufVxuIl0sIm5hbWVzIjpbIlBhdGhQYXJhbXNDb250ZXh0IiwiUGF0aG5hbWVDb250ZXh0IiwiU2VhcmNoUGFyYW1zQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizeLocalePath\", ({\n enumerable: true,\n get: function() {\n return normalizeLocalePath;\n }\n}));\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */ const cache = new WeakMap();\nfunction normalizeLocalePath(pathname, locales) {\n // If locales is undefined, return the pathname as is.\n if (!locales) return {\n pathname\n };\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales);\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale)=>locale.toLowerCase());\n cache.set(locales, lowercasedLocales);\n }\n let detectedLocale;\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2);\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return {\n pathname\n };\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase();\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment);\n if (index < 0) return {\n pathname\n };\n // Return the case-sensitive locale.\n detectedLocale = locales[index];\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/';\n return {\n pathname,\n detectedLocale\n };\n} //# sourceMappingURL=normalize-locale-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7O3VEQXFCZ0JBOzs7ZUFBQUE7OztBQWhCaEI7Ozs7Q0FJQyxHQUNELE1BQU1DLFFBQVEsSUFBSUM7QUFXWCxTQUFTRixvQkFDZEcsUUFBZ0IsRUFDaEJDLE9BQTJCO0lBRTNCLHNEQUFzRDtJQUN0RCxJQUFJLENBQUNBLFNBQVMsT0FBTztRQUFFRDtJQUFTO0lBRWhDLGlFQUFpRTtJQUNqRSxJQUFJRSxvQkFBb0JKLE1BQU1LLEdBQUcsQ0FBQ0Y7SUFDbEMsSUFBSSxDQUFDQyxtQkFBbUI7UUFDdEJBLG9CQUFvQkQsUUFBUUcsR0FBRyxDQUFDLENBQUNDLFNBQVdBLE9BQU9DLFdBQVc7UUFDOURSLE1BQU1TLEdBQUcsQ0FBQ04sU0FBU0M7SUFDckI7SUFFQSxJQUFJTTtJQUVKLG9FQUFvRTtJQUNwRSx5RUFBeUU7SUFDekUsTUFBTUMsV0FBV1QsU0FBU1UsS0FBSyxDQUFDLEtBQUs7SUFFckMsMEVBQTBFO0lBQzFFLFVBQVU7SUFDVixJQUFJLENBQUNELFFBQVEsQ0FBQyxFQUFFLEVBQUUsT0FBTztRQUFFVDtJQUFTO0lBRXBDLDBEQUEwRDtJQUMxRCxNQUFNVyxVQUFVRixRQUFRLENBQUMsRUFBRSxDQUFDSCxXQUFXO0lBRXZDLHlFQUF5RTtJQUN6RSxtQ0FBbUM7SUFDbkMsTUFBTU0sUUFBUVYsa0JBQWtCVyxPQUFPLENBQUNGO0lBQ3hDLElBQUlDLFFBQVEsR0FBRyxPQUFPO1FBQUVaO0lBQVM7SUFFakMsb0NBQW9DO0lBQ3BDUSxpQkFBaUJQLE9BQU8sQ0FBQ1csTUFBTTtJQUUvQixnREFBZ0Q7SUFDaERaLFdBQVdBLFNBQVNjLEtBQUssQ0FBQ04sZUFBZU8sTUFBTSxHQUFHLE1BQU07SUFFeEQsT0FBTztRQUFFZjtRQUFVUTtJQUFlO0FBQ3BDIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxcaTE4blxcbm9ybWFsaXplLWxvY2FsZS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUGF0aExvY2FsZSB7XG4gIGRldGVjdGVkTG9jYWxlPzogc3RyaW5nXG4gIHBhdGhuYW1lOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBBIGNhY2hlIG9mIGxvd2VyY2FzZWQgbG9jYWxlcyBmb3IgZWFjaCBsaXN0IG9mIGxvY2FsZXMuIFRoaXMgaXMgc3RvcmVkIGFzIGFcbiAqIFdlYWtNYXAgc28gaWYgdGhlIGxvY2FsZXMgYXJlIGdhcmJhZ2UgY29sbGVjdGVkLCB0aGUgY2FjaGUgZW50cnkgd2lsbCBiZVxuICogcmVtb3ZlZCBhcyB3ZWxsLlxuICovXG5jb25zdCBjYWNoZSA9IG5ldyBXZWFrTWFwPHJlYWRvbmx5IHN0cmluZ1tdLCByZWFkb25seSBzdHJpbmdbXT4oKVxuXG4vKipcbiAqIEZvciBhIHBhdGhuYW1lIHRoYXQgbWF5IGluY2x1ZGUgYSBsb2NhbGUgZnJvbSBhIGxpc3Qgb2YgbG9jYWxlcywgaXRcbiAqIHJlbW92ZXMgdGhlIGxvY2FsZSBmcm9tIHRoZSBwYXRobmFtZSByZXR1cm5pbmcgaXQgYWxvbmdzaWRlIHdpdGggdGhlXG4gKiBkZXRlY3RlZCBsb2NhbGUuXG4gKlxuICogQHBhcmFtIHBhdGhuYW1lIEEgcGF0aG5hbWUgdGhhdCBtYXkgaW5jbHVkZSBhIGxvY2FsZS5cbiAqIEBwYXJhbSBsb2NhbGVzIEEgbGlzdCBvZiBsb2NhbGVzLlxuICogQHJldHVybnMgVGhlIGRldGVjdGVkIGxvY2FsZSBhbmQgcGF0aG5hbWUgd2l0aG91dCBsb2NhbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZVBhdGgoXG4gIHBhdGhuYW1lOiBzdHJpbmcsXG4gIGxvY2FsZXM/OiByZWFkb25seSBzdHJpbmdbXVxuKTogUGF0aExvY2FsZSB7XG4gIC8vIElmIGxvY2FsZXMgaXMgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHBhdGhuYW1lIGFzIGlzLlxuICBpZiAoIWxvY2FsZXMpIHJldHVybiB7IHBhdGhuYW1lIH1cblxuICAvLyBHZXQgdGhlIGNhY2hlZCBsb3dlcmNhc2VkIGxvY2FsZXMgb3IgY3JlYXRlIGEgbmV3IGNhY2hlIGVudHJ5LlxuICBsZXQgbG93ZXJjYXNlZExvY2FsZXMgPSBjYWNoZS5nZXQobG9jYWxlcylcbiAgaWYgKCFsb3dlcmNhc2VkTG9jYWxlcykge1xuICAgIGxvd2VyY2FzZWRMb2NhbGVzID0gbG9jYWxlcy5tYXAoKGxvY2FsZSkgPT4gbG9jYWxlLnRvTG93ZXJDYXNlKCkpXG4gICAgY2FjaGUuc2V0KGxvY2FsZXMsIGxvd2VyY2FzZWRMb2NhbGVzKVxuICB9XG5cbiAgbGV0IGRldGVjdGVkTG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICAvLyBUaGUgZmlyc3Qgc2VnbWVudCB3aWxsIGJlIGVtcHR5LCBiZWNhdXNlIGl0IGhhcyBhIGxlYWRpbmcgYC9gLiBJZlxuICAvLyB0aGVyZSBpcyBubyBmdXJ0aGVyIHNlZ21lbnQsIHRoZXJlIGlzIG5vIGxvY2FsZSAob3IgaXQncyB0aGUgZGVmYXVsdCkuXG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aG5hbWUuc3BsaXQoJy8nLCAyKVxuXG4gIC8vIElmIHRoZXJlJ3Mgbm8gc2Vjb25kIHNlZ21lbnQgKGllLCB0aGUgcGF0aG5hbWUgaXMganVzdCBgL2ApLCB0aGVyZSdzIG5vXG4gIC8vIGxvY2FsZS5cbiAgaWYgKCFzZWdtZW50c1sxXSkgcmV0dXJuIHsgcGF0aG5hbWUgfVxuXG4gIC8vIFRoZSBzZWNvbmQgc2VnbWVudCB3aWxsIGNvbnRhaW4gdGhlIGxvY2FsZSBwYXJ0IGlmIGFueS5cbiAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzWzFdLnRvTG93ZXJDYXNlKClcblxuICAvLyBTZWUgaWYgdGhlIHNlZ21lbnQgbWF0Y2hlcyBvbmUgb2YgdGhlIGxvY2FsZXMuIElmIGl0IGRvZXNuJ3QsIHRoZXJlIGlzXG4gIC8vIG5vIGxvY2FsZSAob3IgaXQncyB0aGUgZGVmYXVsdCkuXG4gIGNvbnN0IGluZGV4ID0gbG93ZXJjYXNlZExvY2FsZXMuaW5kZXhPZihzZWdtZW50KVxuICBpZiAoaW5kZXggPCAwKSByZXR1cm4geyBwYXRobmFtZSB9XG5cbiAgLy8gUmV0dXJuIHRoZSBjYXNlLXNlbnNpdGl2ZSBsb2NhbGUuXG4gIGRldGVjdGVkTG9jYWxlID0gbG9jYWxlc1tpbmRleF1cblxuICAvLyBSZW1vdmUgdGhlIGAvJHtsb2NhbGV9YCBwYXJ0IG9mIHRoZSBwYXRobmFtZS5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5zbGljZShkZXRlY3RlZExvY2FsZS5sZW5ndGggKyAxKSB8fCAnLydcblxuICByZXR1cm4geyBwYXRobmFtZSwgZGV0ZWN0ZWRMb2NhbGUgfVxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZUxvY2FsZVBhdGgiLCJjYWNoZSIsIldlYWtNYXAiLCJwYXRobmFtZSIsImxvY2FsZXMiLCJsb3dlcmNhc2VkTG9jYWxlcyIsImdldCIsIm1hcCIsImxvY2FsZSIsInRvTG93ZXJDYXNlIiwic2V0IiwiZGV0ZWN0ZWRMb2NhbGUiLCJzZWdtZW50cyIsInNwbGl0Iiwic2VnbWVudCIsImluZGV4IiwiaW5kZXhPZiIsInNsaWNlIiwibGVuZ3RoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js ***!
|
||
\**********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ImageConfigContext\", ({\n enumerable: true,\n get: function() {\n return ImageConfigContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst _imageconfig = __webpack_require__(/*! ./image-config */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/image-config.js\");\nconst ImageConfigContext = _react.default.createContext(_imageconfig.imageConfigDefault);\nif (true) {\n ImageConfigContext.displayName = 'ImageConfigContext';\n} //# sourceMappingURL=image-config-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1jb25maWctY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQUlhQTs7O2VBQUFBOzs7OzRFQUpLO3lDQUVpQjtBQUU1QixNQUFNQSxxQkFDWEMsT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBQXNCQyxhQUFBQSxrQkFBa0I7QUFFN0QsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNKLG1CQUFtQk8sV0FBVyxHQUFHO0FBQ25DIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxcaW1hZ2UtY29uZmlnLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBJbWFnZUNvbmZpZ0NvbXBsZXRlIH0gZnJvbSAnLi9pbWFnZS1jb25maWcnXG5pbXBvcnQgeyBpbWFnZUNvbmZpZ0RlZmF1bHQgfSBmcm9tICcuL2ltYWdlLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IEltYWdlQ29uZmlnQ29udGV4dCA9XG4gIFJlYWN0LmNyZWF0ZUNvbnRleHQ8SW1hZ2VDb25maWdDb21wbGV0ZT4oaW1hZ2VDb25maWdEZWZhdWx0KVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBJbWFnZUNvbmZpZ0NvbnRleHQuZGlzcGxheU5hbWUgPSAnSW1hZ2VDb25maWdDb250ZXh0J1xufVxuIl0sIm5hbWVzIjpbIkltYWdlQ29uZmlnQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsImltYWdlQ29uZmlnRGVmYXVsdCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/image-config.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/image-config.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n VALID_LOADERS: function() {\n return VALID_LOADERS;\n },\n imageConfigDefault: function() {\n return imageConfigDefault;\n }\n});\nconst VALID_LOADERS = [\n 'default',\n 'imgix',\n 'cloudinary',\n 'akamai',\n 'custom'\n];\nconst imageConfigDefault = {\n deviceSizes: [\n 640,\n 750,\n 828,\n 1080,\n 1200,\n 1920,\n 2048,\n 3840\n ],\n imageSizes: [\n 16,\n 32,\n 48,\n 64,\n 96,\n 128,\n 256,\n 384\n ],\n path: '/_next/image',\n loader: 'default',\n loaderFile: '',\n domains: [],\n disableStaticImages: false,\n minimumCacheTTL: 60,\n formats: [\n 'image/webp'\n ],\n dangerouslyAllowSVG: false,\n contentSecurityPolicy: \"script-src 'none'; frame-src 'none'; sandbox;\",\n contentDispositionType: 'attachment',\n localPatterns: undefined,\n remotePatterns: [],\n qualities: undefined,\n unoptimized: false\n}; //# sourceMappingURL=image-config.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1jb25maWcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQWFBLGFBQWE7ZUFBYkE7O0lBaUlBQyxrQkFBa0I7ZUFBbEJBOzs7QUFqSU4sTUFBTUQsZ0JBQWdCO0lBQzNCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQTJITSxNQUFNQyxxQkFBMEM7SUFDckRDLGFBQWE7UUFBQztRQUFLO1FBQUs7UUFBSztRQUFNO1FBQU07UUFBTTtRQUFNO0tBQUs7SUFDMURDLFlBQVk7UUFBQztRQUFJO1FBQUk7UUFBSTtRQUFJO1FBQUk7UUFBSztRQUFLO0tBQUk7SUFDL0NDLE1BQU07SUFDTkMsUUFBUTtJQUNSQyxZQUFZO0lBQ1pDLFNBQVMsRUFBRTtJQUNYQyxxQkFBcUI7SUFDckJDLGlCQUFpQjtJQUNqQkMsU0FBUztRQUFDO0tBQWE7SUFDdkJDLHFCQUFxQjtJQUNyQkMsdUJBQXdCO0lBQ3hCQyx3QkFBd0I7SUFDeEJDLGVBQWVDO0lBQ2ZDLGdCQUFnQixFQUFFO0lBQ2xCQyxXQUFXRjtJQUNYRyxhQUFhO0FBQ2YiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxpbWFnZS1jb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZBTElEX0xPQURFUlMgPSBbXG4gICdkZWZhdWx0JyxcbiAgJ2ltZ2l4JyxcbiAgJ2Nsb3VkaW5hcnknLFxuICAnYWthbWFpJyxcbiAgJ2N1c3RvbScsXG5dIGFzIGNvbnN0XG5cbmV4cG9ydCB0eXBlIExvYWRlclZhbHVlID0gKHR5cGVvZiBWQUxJRF9MT0FERVJTKVtudW1iZXJdXG5cbmV4cG9ydCB0eXBlIEltYWdlTG9hZGVyUHJvcHMgPSB7XG4gIHNyYzogc3RyaW5nXG4gIHdpZHRoOiBudW1iZXJcbiAgcXVhbGl0eT86IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBJbWFnZUxvYWRlclByb3BzV2l0aENvbmZpZyA9IEltYWdlTG9hZGVyUHJvcHMgJiB7XG4gIGNvbmZpZzogUmVhZG9ubHk8SW1hZ2VDb25maWc+XG59XG5cbmV4cG9ydCB0eXBlIExvY2FsUGF0dGVybiA9IHtcbiAgLyoqXG4gICAqIENhbiBiZSBsaXRlcmFsIG9yIHdpbGRjYXJkLlxuICAgKiBTaW5nbGUgYCpgIG1hdGNoZXMgYSBzaW5nbGUgcGF0aCBzZWdtZW50LlxuICAgKiBEb3VibGUgYCoqYCBtYXRjaGVzIGFueSBudW1iZXIgb2YgcGF0aCBzZWdtZW50cy5cbiAgICovXG4gIHBhdGhuYW1lPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIENhbiBiZSBsaXRlcmFsIHF1ZXJ5IHN0cmluZyBzdWNoIGFzIGA/dj0xYCBvclxuICAgKiBlbXB0eSBzdHJpbmcgbWVhbmluZyBubyBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBzZWFyY2g/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgUmVtb3RlUGF0dGVybiA9IHtcbiAgLyoqXG4gICAqIE11c3QgYmUgYGh0dHBgIG9yIGBodHRwc2AuXG4gICAqL1xuICBwcm90b2NvbD86ICdodHRwJyB8ICdodHRwcydcblxuICAvKipcbiAgICogQ2FuIGJlIGxpdGVyYWwgb3Igd2lsZGNhcmQuXG4gICAqIFNpbmdsZSBgKmAgbWF0Y2hlcyBhIHNpbmdsZSBzdWJkb21haW4uXG4gICAqIERvdWJsZSBgKipgIG1hdGNoZXMgYW55IG51bWJlciBvZiBzdWJkb21haW5zLlxuICAgKi9cbiAgaG9zdG5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgbGl0ZXJhbCBwb3J0IHN1Y2ggYXMgYDgwODBgIG9yIGVtcHR5IHN0cmluZ1xuICAgKiBtZWFuaW5nIG5vIHBvcnQuXG4gICAqL1xuICBwb3J0Pzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIENhbiBiZSBsaXRlcmFsIG9yIHdpbGRjYXJkLlxuICAgKiBTaW5nbGUgYCpgIG1hdGNoZXMgYSBzaW5nbGUgcGF0aCBzZWdtZW50LlxuICAgKiBEb3VibGUgYCoqYCBtYXRjaGVzIGFueSBudW1iZXIgb2YgcGF0aCBzZWdtZW50cy5cbiAgICovXG4gIHBhdGhuYW1lPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIENhbiBiZSBsaXRlcmFsIHF1ZXJ5IHN0cmluZyBzdWNoIGFzIGA/dj0xYCBvclxuICAgKiBlbXB0eSBzdHJpbmcgbWVhbmluZyBubyBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBzZWFyY2g/OiBzdHJpbmdcbn1cblxudHlwZSBJbWFnZUZvcm1hdCA9ICdpbWFnZS9hdmlmJyB8ICdpbWFnZS93ZWJwJ1xuXG4vKipcbiAqIEltYWdlIGNvbmZpZ3VyYXRpb25zXG4gKlxuICogQHNlZSBbSW1hZ2UgY29uZmlndXJhdGlvbiBvcHRpb25zXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjY29uZmlndXJhdGlvbi1vcHRpb25zKVxuICovXG5leHBvcnQgdHlwZSBJbWFnZUNvbmZpZ0NvbXBsZXRlID0ge1xuICAvKiogQHNlZSBbRGV2aWNlIHNpemVzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNkZXZpY2Utc2l6ZXMpICovXG4gIGRldmljZVNpemVzOiBudW1iZXJbXVxuXG4gIC8qKiBAc2VlIFtJbWFnZSBzaXppbmcgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vb3B0aW1pemluZy9pbWFnZXMjaW1hZ2Utc2l6aW5nKSAqL1xuICBpbWFnZVNpemVzOiBudW1iZXJbXVxuXG4gIC8qKiBAc2VlIFtJbWFnZSBsb2FkZXJzIGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9sZWdhY3kvaW1hZ2UjbG9hZGVyKSAqL1xuICBsb2FkZXI6IExvYWRlclZhbHVlXG5cbiAgLyoqIEBzZWUgW0ltYWdlIGxvYWRlciBjb25maWd1cmF0aW9uXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvbGVnYWN5L2ltYWdlI2xvYWRlci1jb25maWd1cmF0aW9uKSAqL1xuICBwYXRoOiBzdHJpbmdcblxuICAvKiogQHNlZSBbSW1hZ2UgbG9hZGVyIGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNsb2FkZXItY29uZmlndXJhdGlvbikgKi9cbiAgbG9hZGVyRmlsZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgcmVtb3RlUGF0dGVybnNgIGluc3RlYWQuXG4gICAqL1xuICBkb21haW5zOiBzdHJpbmdbXVxuXG4gIC8qKiBAc2VlIFtEaXNhYmxlIHN0YXRpYyBpbWFnZSBpbXBvcnQgY29uZmlndXJhdGlvbl0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI2Rpc2FibGUtc3RhdGljLWltcG9ydHMpICovXG4gIGRpc2FibGVTdGF0aWNJbWFnZXM6IGJvb2xlYW5cblxuICAvKiogQHNlZSBbQ2FjaGUgYmVoYXZpb3JdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNjYWNoaW5nLWJlaGF2aW9yKSAqL1xuICBtaW5pbXVtQ2FjaGVUVEw6IG51bWJlclxuXG4gIC8qKiBAc2VlIFtBY2NlcHRhYmxlIGZvcm1hdHNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNhY2NlcHRhYmxlLWZvcm1hdHMpICovXG4gIGZvcm1hdHM6IEltYWdlRm9ybWF0W11cblxuICAvKiogQHNlZSBbRGFuZ2Vyb3VzbHkgQWxsb3cgU1ZHXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjZGFuZ2Vyb3VzbHktYWxsb3ctc3ZnKSAqL1xuICBkYW5nZXJvdXNseUFsbG93U1ZHOiBib29sZWFuXG5cbiAgLyoqIEBzZWUgW0NvbnRlbnQgU2VjdXJpdHkgUG9saWN5XShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjY29udGVudHNlY3VyaXR5cG9saWN5KSAqL1xuICBjb250ZW50U2VjdXJpdHlQb2xpY3k6IHN0cmluZ1xuXG4gIC8qKiBAc2VlIFtDb250ZW50IERpc3Bvc2l0aW9uIFR5cGVdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNjb250ZW50ZGlzcG9zaXRpb250eXBlKSAqL1xuICBjb250ZW50RGlzcG9zaXRpb25UeXBlOiAnaW5saW5lJyB8ICdhdHRhY2htZW50J1xuXG4gIC8qKiBAc2VlIFtSZW1vdGUgUGF0dGVybnNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNyZW1vdGVwYXR0ZXJucykgKi9cbiAgcmVtb3RlUGF0dGVybnM6IEFycmF5PFVSTCB8IFJlbW90ZVBhdHRlcm4+XG5cbiAgLyoqIEBzZWUgW0xvY2FsIFBhdHRlcm5zXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjbG9jYWxQYXR0ZXJucykgKi9cbiAgbG9jYWxQYXR0ZXJuczogTG9jYWxQYXR0ZXJuW10gfCB1bmRlZmluZWRcblxuICAvKiogQHNlZSBbUXVhbGl0aWVzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjcXVhbGl0aWVzKSAqL1xuICBxdWFsaXRpZXM6IG51bWJlcltdIHwgdW5kZWZpbmVkXG5cbiAgLyoqIEBzZWUgW1Vub3B0aW1pemVkXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjdW5vcHRpbWl6ZWQpICovXG4gIHVub3B0aW1pemVkOiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIEltYWdlQ29uZmlnID0gUGFydGlhbDxJbWFnZUNvbmZpZ0NvbXBsZXRlPlxuXG5leHBvcnQgY29uc3QgaW1hZ2VDb25maWdEZWZhdWx0OiBJbWFnZUNvbmZpZ0NvbXBsZXRlID0ge1xuICBkZXZpY2VTaXplczogWzY0MCwgNzUwLCA4MjgsIDEwODAsIDEyMDAsIDE5MjAsIDIwNDgsIDM4NDBdLFxuICBpbWFnZVNpemVzOiBbMTYsIDMyLCA0OCwgNjQsIDk2LCAxMjgsIDI1NiwgMzg0XSxcbiAgcGF0aDogJy9fbmV4dC9pbWFnZScsXG4gIGxvYWRlcjogJ2RlZmF1bHQnLFxuICBsb2FkZXJGaWxlOiAnJyxcbiAgZG9tYWluczogW10sXG4gIGRpc2FibGVTdGF0aWNJbWFnZXM6IGZhbHNlLFxuICBtaW5pbXVtQ2FjaGVUVEw6IDYwLFxuICBmb3JtYXRzOiBbJ2ltYWdlL3dlYnAnXSxcbiAgZGFuZ2Vyb3VzbHlBbGxvd1NWRzogZmFsc2UsXG4gIGNvbnRlbnRTZWN1cml0eVBvbGljeTogYHNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94O2AsXG4gIGNvbnRlbnREaXNwb3NpdGlvblR5cGU6ICdhdHRhY2htZW50JyxcbiAgbG9jYWxQYXR0ZXJuczogdW5kZWZpbmVkLCAvLyBkZWZhdWx0OiBhbGxvdyBhbGwgbG9jYWwgaW1hZ2VzXG4gIHJlbW90ZVBhdHRlcm5zOiBbXSwgLy8gZGVmYXVsdDogYWxsb3cgbm8gcmVtb3RlIGltYWdlc1xuICBxdWFsaXRpZXM6IHVuZGVmaW5lZCwgLy8gZGVmYXVsdDogYWxsb3cgYWxsIHF1YWxpdGllc1xuICB1bm9wdGltaXplZDogZmFsc2UsXG59XG4iXSwibmFtZXMiOlsiVkFMSURfTE9BREVSUyIsImltYWdlQ29uZmlnRGVmYXVsdCIsImRldmljZVNpemVzIiwiaW1hZ2VTaXplcyIsInBhdGgiLCJsb2FkZXIiLCJsb2FkZXJGaWxlIiwiZG9tYWlucyIsImRpc2FibGVTdGF0aWNJbWFnZXMiLCJtaW5pbXVtQ2FjaGVUVEwiLCJmb3JtYXRzIiwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyIsImNvbnRlbnRTZWN1cml0eVBvbGljeSIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiLCJsb2NhbFBhdHRlcm5zIiwidW5kZWZpbmVkIiwicmVtb3RlUGF0dGVybnMiLCJxdWFsaXRpZXMiLCJ1bm9wdGltaXplZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/image-config.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/is-plain-object.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/is-plain-object.js ***!
|
||
\**************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getObjectClassLabel: function() {\n return getObjectClassLabel;\n },\n isPlainObject: function() {\n return isPlainObject;\n }\n});\nfunction getObjectClassLabel(value) {\n return Object.prototype.toString.call(value);\n}\nfunction isPlainObject(value) {\n if (getObjectClassLabel(value) !== '[object Object]') {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n /**\n * this used to be previously:\n *\n * `return prototype === null || prototype === Object.prototype`\n *\n * but Edge Runtime expose Object from vm, being that kind of type-checking wrongly fail.\n *\n * It was changed to the current implementation since it's resilient to serialization.\n */ return prototype === null || prototype.hasOwnProperty('isPrototypeOf');\n} //# sourceMappingURL=is-plain-object.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pcy1wbGFpbi1vYmplY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQWdCQSxtQkFBbUI7ZUFBbkJBOztJQUlBQyxhQUFhO2VBQWJBOzs7QUFKVCxTQUFTRCxvQkFBb0JFLEtBQVU7SUFDNUMsT0FBT0MsT0FBT0MsU0FBUyxDQUFDQyxRQUFRLENBQUNDLElBQUksQ0FBQ0o7QUFDeEM7QUFFTyxTQUFTRCxjQUFjQyxLQUFVO0lBQ3RDLElBQUlGLG9CQUFvQkUsV0FBVyxtQkFBbUI7UUFDcEQsT0FBTztJQUNUO0lBRUEsTUFBTUUsWUFBWUQsT0FBT0ksY0FBYyxDQUFDTDtJQUV4Qzs7Ozs7Ozs7R0FRQyxHQUNELE9BQU9FLGNBQWMsUUFBUUEsVUFBVUksY0FBYyxDQUFDO0FBQ3hEIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxcaXMtcGxhaW4tb2JqZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZXRPYmplY3RDbGFzc0xhYmVsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIGlmIChnZXRPYmplY3RDbGFzc0xhYmVsKHZhbHVlKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSlcblxuICAvKipcbiAgICogdGhpcyB1c2VkIHRvIGJlIHByZXZpb3VzbHk6XG4gICAqXG4gICAqIGByZXR1cm4gcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZWBcbiAgICpcbiAgICogYnV0IEVkZ2UgUnVudGltZSBleHBvc2UgT2JqZWN0IGZyb20gdm0sIGJlaW5nIHRoYXQga2luZCBvZiB0eXBlLWNoZWNraW5nIHdyb25nbHkgZmFpbC5cbiAgICpcbiAgICogSXQgd2FzIGNoYW5nZWQgdG8gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gc2luY2UgaXQncyByZXNpbGllbnQgdG8gc2VyaWFsaXphdGlvbi5cbiAgICovXG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlLmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJylcbn1cbiJdLCJuYW1lcyI6WyJnZXRPYmplY3RDbGFzc0xhYmVsIiwiaXNQbGFpbk9iamVjdCIsInZhbHVlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNPd25Qcm9wZXJ0eSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/is-plain-object.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This has to be a shared module which is shared between client component error boundary and dynamic component\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n BailoutToCSRError: function() {\n return BailoutToCSRError;\n },\n isBailoutToCSRError: function() {\n return isBailoutToCSRError;\n }\n});\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING';\nclass BailoutToCSRError extends Error {\n constructor(reason){\n super(\"Bail out to client-side rendering: \" + reason), this.reason = reason, this.digest = BAILOUT_TO_CSR;\n }\n}\nfunction isBailoutToCSRError(err) {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false;\n }\n return err.digest === BAILOUT_TO_CSR;\n} //# sourceMappingURL=bailout-to-csr.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3IuanMiLCJtYXBwaW5ncyI6IkFBQUEsK0dBQStHOzs7Ozs7Ozs7Ozs7O0lBSWxHQSxpQkFBaUI7ZUFBakJBOztJQVNHQyxtQkFBbUI7ZUFBbkJBOzs7QUFaaEIsTUFBTUMsaUJBQWlCO0FBR2hCLE1BQU1GLDBCQUEwQkc7SUFHckNDLFlBQTRCQyxNQUFjLENBQUU7UUFDMUMsS0FBSyxDQUFFLHdDQUFxQ0EsU0FBQUEsSUFBQUEsQ0FEbEJBLE1BQUFBLEdBQUFBLFFBQUFBLElBQUFBLENBRlpDLE1BQUFBLEdBQVNKO0lBSXpCO0FBQ0Y7QUFHTyxTQUFTRCxvQkFBb0JNLEdBQVk7SUFDOUMsSUFBSSxPQUFPQSxRQUFRLFlBQVlBLFFBQVEsUUFBUSxDQUFFLGFBQVlBLEdBQUFBLENBQUUsRUFBSTtRQUNqRSxPQUFPO0lBQ1Q7SUFFQSxPQUFPQSxJQUFJRCxNQUFNLEtBQUtKO0FBQ3hCIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxcbGF6eS1keW5hbWljXFxiYWlsb3V0LXRvLWNzci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGhhcyB0byBiZSBhIHNoYXJlZCBtb2R1bGUgd2hpY2ggaXMgc2hhcmVkIGJldHdlZW4gY2xpZW50IGNvbXBvbmVudCBlcnJvciBib3VuZGFyeSBhbmQgZHluYW1pYyBjb21wb25lbnRcbmNvbnN0IEJBSUxPVVRfVE9fQ1NSID0gJ0JBSUxPVVRfVE9fQ0xJRU5UX1NJREVfUkVOREVSSU5HJ1xuXG4vKiogQW4gZXJyb3IgdGhhdCBzaG91bGQgYmUgdGhyb3duIHdoZW4gd2Ugd2FudCB0byBiYWlsIG91dCB0byBjbGllbnQtc2lkZSByZW5kZXJpbmcuICovXG5leHBvcnQgY2xhc3MgQmFpbG91dFRvQ1NSRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBkaWdlc3QgPSBCQUlMT1VUX1RPX0NTUlxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSByZWFzb246IHN0cmluZykge1xuICAgIHN1cGVyKGBCYWlsIG91dCB0byBjbGllbnQtc2lkZSByZW5kZXJpbmc6ICR7cmVhc29ufWApXG4gIH1cbn1cblxuLyoqIENoZWNrcyBpZiBhIHBhc3NlZCBhcmd1bWVudCBpcyBhbiBlcnJvciB0aGF0IGlzIHRocm93biBpZiB3ZSB3YW50IHRvIGJhaWwgb3V0IHRvIGNsaWVudC1zaWRlIHJlbmRlcmluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JhaWxvdXRUb0NTUkVycm9yKGVycjogdW5rbm93bik6IGVyciBpcyBCYWlsb3V0VG9DU1JFcnJvciB7XG4gIGlmICh0eXBlb2YgZXJyICE9PSAnb2JqZWN0JyB8fCBlcnIgPT09IG51bGwgfHwgISgnZGlnZXN0JyBpbiBlcnIpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXJyLmRpZ2VzdCA9PT0gQkFJTE9VVF9UT19DU1Jcbn1cbiJdLCJuYW1lcyI6WyJCYWlsb3V0VG9DU1JFcnJvciIsImlzQmFpbG91dFRvQ1NSRXJyb3IiLCJCQUlMT1VUX1RPX0NTUiIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJyZWFzb24iLCJkaWdlc3QiLCJlcnIiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/mitt.js":
|
||
/*!***************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/mitt.js ***!
|
||
\***************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/*\nMIT License\n\nCopyright (c) Jason Miller (https://jasonformat.com/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/ // This file is based on https://github.com/developit/mitt/blob/v1.1.3/src/index.js\n// It's been edited for the needs of this script\n// See the LICENSE at the top of the file\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return mitt;\n }\n}));\nfunction mitt() {\n const all = Object.create(null);\n return {\n on (type, handler) {\n ;\n (all[type] || (all[type] = [])).push(handler);\n },\n off (type, handler) {\n if (all[type]) {\n all[type].splice(all[type].indexOf(handler) >>> 0, 1);\n }\n },\n emit (type) {\n for(var _len = arguments.length, evts = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n evts[_key - 1] = arguments[_key];\n }\n // eslint-disable-next-line array-callback-return\n ;\n (all[type] || []).slice().map((handler)=>{\n handler(...evts);\n });\n }\n };\n} //# sourceMappingURL=mitt.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9taXR0LmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0FBVUEsR0FFQSxtRkFBbUY7QUFDbkYsZ0RBQWdEO0FBQ2hELHlDQUF5Qzs7Ozs7MkNBVXpDOzs7ZUFBd0JBOzs7QUFBVCxTQUFTQTtJQUN0QixNQUFNQyxNQUFrQ0MsT0FBT0MsTUFBTSxDQUFDO0lBRXRELE9BQU87UUFDTEMsSUFBR0MsSUFBWSxFQUFFQyxPQUFnQjs7WUFDN0JMLElBQUcsQ0FBQ0ksS0FBSyxJQUFLSixDQUFBQSxHQUFHLENBQUNJLEtBQUssR0FBRyxHQUFDLENBQUMsQ0FBR0UsSUFBSSxDQUFDRDtRQUN4QztRQUVBRSxLQUFJSCxJQUFZLEVBQUVDLE9BQWdCO1lBQ2hDLElBQUlMLEdBQUcsQ0FBQ0ksS0FBSyxFQUFFO2dCQUNiSixHQUFHLENBQUNJLEtBQUssQ0FBQ0ksTUFBTSxDQUFDUixHQUFHLENBQUNJLEtBQUssQ0FBQ0ssT0FBTyxDQUFDSixhQUFhLEdBQUc7WUFDckQ7UUFDRjtRQUVBSyxNQUFLTixJQUFZO1lBQUUsaUNBQUdPLE9BQUg7Z0JBQUdBLElBQUFBLENBQUgsMkJBQWM7O1lBQy9CLGlEQUFpRDs7YUFDL0NYLEdBQUcsQ0FBQ0ksS0FBSyxJQUFJLElBQUlRLEtBQUssR0FBR0MsR0FBRyxDQUFDLENBQUNSO2dCQUM5QkEsV0FBV007WUFDYjtRQUNGO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXG1pdHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbk1JVCBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgSmFzb24gTWlsbGVyIChodHRwczovL2phc29uZm9ybWF0LmNvbS8pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG5cbi8vIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L21pdHQvYmxvYi92MS4xLjMvc3JjL2luZGV4LmpzXG4vLyBJdCdzIGJlZW4gZWRpdGVkIGZvciB0aGUgbmVlZHMgb2YgdGhpcyBzY3JpcHRcbi8vIFNlZSB0aGUgTElDRU5TRSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlXG5cbnR5cGUgSGFuZGxlciA9ICguLi5ldnRzOiBhbnlbXSkgPT4gdm9pZFxuXG5leHBvcnQgdHlwZSBNaXR0RW1pdHRlcjxUPiA9IHtcbiAgb24odHlwZTogVCwgaGFuZGxlcjogSGFuZGxlcik6IHZvaWRcbiAgb2ZmKHR5cGU6IFQsIGhhbmRsZXI6IEhhbmRsZXIpOiB2b2lkXG4gIGVtaXQodHlwZTogVCwgLi4uZXZ0czogYW55W10pOiB2b2lkXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pdHQoKTogTWl0dEVtaXR0ZXI8c3RyaW5nPiB7XG4gIGNvbnN0IGFsbDogeyBbczogc3RyaW5nXTogSGFuZGxlcltdIH0gPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgcmV0dXJuIHtcbiAgICBvbih0eXBlOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIpIHtcbiAgICAgIDsoYWxsW3R5cGVdIHx8IChhbGxbdHlwZV0gPSBbXSkpLnB1c2goaGFuZGxlcilcbiAgICB9LFxuXG4gICAgb2ZmKHR5cGU6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcikge1xuICAgICAgaWYgKGFsbFt0eXBlXSkge1xuICAgICAgICBhbGxbdHlwZV0uc3BsaWNlKGFsbFt0eXBlXS5pbmRleE9mKGhhbmRsZXIpID4+PiAwLCAxKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbWl0KHR5cGU6IHN0cmluZywgLi4uZXZ0czogYW55W10pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhcnJheS1jYWxsYmFjay1yZXR1cm5cbiAgICAgIDsoYWxsW3R5cGVdIHx8IFtdKS5zbGljZSgpLm1hcCgoaGFuZGxlcjogSGFuZGxlcikgPT4ge1xuICAgICAgICBoYW5kbGVyKC4uLmV2dHMpXG4gICAgICB9KVxuICAgIH0sXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJtaXR0IiwiYWxsIiwiT2JqZWN0IiwiY3JlYXRlIiwib24iLCJ0eXBlIiwiaGFuZGxlciIsInB1c2giLCJvZmYiLCJzcGxpY2UiLCJpbmRleE9mIiwiZW1pdCIsImV2dHMiLCJzbGljZSIsIm1hcCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/mitt.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/modern-browserslist-target.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/modern-browserslist-target.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// Note: This file is JS because it's used by the taskfile-swc.js file, which is JS.\n// Keep file changes in sync with the corresponding `.d.ts` files.\n/**\n * These are the browser versions that support all of the following:\n * static import: https://caniuse.com/es6-module\n * dynamic import: https://caniuse.com/es6-module-dynamic-import\n * import.meta: https://caniuse.com/mdn-javascript_operators_import_meta\n */ \nconst MODERN_BROWSERSLIST_TARGET = [\n 'chrome 64',\n 'edge 79',\n 'firefox 67',\n 'opera 51',\n 'safari 12'\n];\nmodule.exports = MODERN_BROWSERSLIST_TARGET; //# sourceMappingURL=modern-browserslist-target.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9tb2Rlcm4tYnJvd3NlcnNsaXN0LXRhcmdldC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxvRkFBb0Y7QUFDcEYsa0VBQWtFO0FBQ2xFOzs7OztDQUtDO0FBQ0QsTUFBTUEsNkJBQTZCO0lBQ2pDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVEQyxPQUFPQyxPQUFPLEdBQUdGIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxcbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gTm90ZTogVGhpcyBmaWxlIGlzIEpTIGJlY2F1c2UgaXQncyB1c2VkIGJ5IHRoZSB0YXNrZmlsZS1zd2MuanMgZmlsZSwgd2hpY2ggaXMgSlMuXG4vLyBLZWVwIGZpbGUgY2hhbmdlcyBpbiBzeW5jIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYC5kLnRzYCBmaWxlcy5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSBicm93c2VyIHZlcnNpb25zIHRoYXQgc3VwcG9ydCBhbGwgb2YgdGhlIGZvbGxvd2luZzpcbiAqIHN0YXRpYyBpbXBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vZXM2LW1vZHVsZVxuICogZHluYW1pYyBpbXBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vZXM2LW1vZHVsZS1keW5hbWljLWltcG9ydFxuICogaW1wb3J0Lm1ldGE6IGh0dHBzOi8vY2FuaXVzZS5jb20vbWRuLWphdmFzY3JpcHRfb3BlcmF0b3JzX2ltcG9ydF9tZXRhXG4gKi9cbmNvbnN0IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUID0gW1xuICAnY2hyb21lIDY0JyxcbiAgJ2VkZ2UgNzknLFxuICAnZmlyZWZveCA2NycsXG4gICdvcGVyYSA1MScsXG4gICdzYWZhcmkgMTInLFxuXVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUXG4iXSwibmFtZXMiOlsiTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQiLCJtb2R1bGUiLCJleHBvcnRzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/modern-browserslist-target.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/normalized-asset-prefix.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/normalized-asset-prefix.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizedAssetPrefix\", ({\n enumerable: true,\n get: function() {\n return normalizedAssetPrefix;\n }\n}));\nfunction normalizedAssetPrefix(assetPrefix) {\n // remove all leading slashes and trailing slashes\n const escapedAssetPrefix = (assetPrefix == null ? void 0 : assetPrefix.replace(/^\\/+|\\/+$/g, '')) || false;\n // if an assetPrefix was '/', we return empty string\n // because it could be an unnecessary trailing slash\n if (!escapedAssetPrefix) {\n return '';\n }\n if (URL.canParse(escapedAssetPrefix)) {\n const url = new URL(escapedAssetPrefix).toString();\n return url.endsWith('/') ? url.slice(0, -1) : url;\n }\n // assuming assetPrefix here is a pathname-style,\n // restore the leading slash\n return \"/\" + escapedAssetPrefix;\n} //# sourceMappingURL=normalized-asset-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ub3JtYWxpemVkLWFzc2V0LXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiOzs7O3lEQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0Esc0JBQXNCQyxXQUErQjtJQUNuRSxrREFBa0Q7SUFDbEQsTUFBTUMscUJBQXFCRCxDQUFBQSxlQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxZQUFhRSxPQUFPLENBQUMsY0FBYyxRQUFPO0lBRXJFLG9EQUFvRDtJQUNwRCxvREFBb0Q7SUFDcEQsSUFBSSxDQUFDRCxvQkFBb0I7UUFDdkIsT0FBTztJQUNUO0lBRUEsSUFBSUUsSUFBSUMsUUFBUSxDQUFDSCxxQkFBcUI7UUFDcEMsTUFBTUksTUFBTSxJQUFJRixJQUFJRixvQkFBb0JLLFFBQVE7UUFDaEQsT0FBT0QsSUFBSUUsUUFBUSxDQUFDLE9BQU9GLElBQUlHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBS0g7SUFDaEQ7SUFFQSxpREFBaUQ7SUFDakQsNEJBQTRCO0lBQzVCLE9BQVEsTUFBR0o7QUFDYiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXG5vcm1hbGl6ZWQtYXNzZXQtcHJlZml4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVkQXNzZXRQcmVmaXgoYXNzZXRQcmVmaXg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIC8vIHJlbW92ZSBhbGwgbGVhZGluZyBzbGFzaGVzIGFuZCB0cmFpbGluZyBzbGFzaGVzXG4gIGNvbnN0IGVzY2FwZWRBc3NldFByZWZpeCA9IGFzc2V0UHJlZml4Py5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgfHwgZmFsc2VcblxuICAvLyBpZiBhbiBhc3NldFByZWZpeCB3YXMgJy8nLCB3ZSByZXR1cm4gZW1wdHkgc3RyaW5nXG4gIC8vIGJlY2F1c2UgaXQgY291bGQgYmUgYW4gdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hcbiAgaWYgKCFlc2NhcGVkQXNzZXRQcmVmaXgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChVUkwuY2FuUGFyc2UoZXNjYXBlZEFzc2V0UHJlZml4KSkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoZXNjYXBlZEFzc2V0UHJlZml4KS50b1N0cmluZygpXG4gICAgcmV0dXJuIHVybC5lbmRzV2l0aCgnLycpID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybFxuICB9XG5cbiAgLy8gYXNzdW1pbmcgYXNzZXRQcmVmaXggaGVyZSBpcyBhIHBhdGhuYW1lLXN0eWxlLFxuICAvLyByZXN0b3JlIHRoZSBsZWFkaW5nIHNsYXNoXG4gIHJldHVybiBgLyR7ZXNjYXBlZEFzc2V0UHJlZml4fWBcbn1cbiJdLCJuYW1lcyI6WyJub3JtYWxpemVkQXNzZXRQcmVmaXgiLCJhc3NldFByZWZpeCIsImVzY2FwZWRBc3NldFByZWZpeCIsInJlcGxhY2UiLCJVUkwiLCJjYW5QYXJzZSIsInVybCIsInRvU3RyaW5nIiwiZW5kc1dpdGgiLCJzbGljZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/normalized-asset-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js ***!
|
||
\******************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"denormalizePagePath\", ({\n enumerable: true,\n get: function() {\n return denormalizePagePath;\n }\n}));\nconst _utils = __webpack_require__(/*! ../router/utils */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _normalizepathsep = __webpack_require__(/*! ./normalize-path-sep */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\");\nfunction denormalizePagePath(page) {\n let _page = (0, _normalizepathsep.normalizePathSep)(page);\n return _page.startsWith('/index/') && !(0, _utils.isDynamicRoute)(_page) ? _page.slice(6) : _page !== '/index' ? _page : '/';\n} //# sourceMappingURL=denormalize-page-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvZGVub3JtYWxpemUtcGFnZS1wYXRoLmpzIiwibWFwcGluZ3MiOiI7Ozs7dURBV2dCQTs7O2VBQUFBOzs7bUNBWGU7OENBQ0U7QUFVMUIsU0FBU0Esb0JBQW9CQyxJQUFZO0lBQzlDLElBQUlDLFFBQVFDLENBQUFBLEdBQUFBLGtCQUFBQSxnQkFBQUEsRUFBaUJGO0lBQzdCLE9BQU9DLE1BQU1FLFVBQVUsQ0FBQyxjQUFjLENBQUNDLENBQUFBLEdBQUFBLE9BQUFBLGNBQUFBLEVBQWVILFNBQ2xEQSxNQUFNSSxLQUFLLENBQUMsS0FDWkosVUFBVSxXQUNSQSxRQUNBO0FBQ1IiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxwYWdlLXBhdGhcXGRlbm9ybWFsaXplLXBhZ2UtcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0R5bmFtaWNSb3V0ZSB9IGZyb20gJy4uL3JvdXRlci91dGlscydcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGhTZXAgfSBmcm9tICcuL25vcm1hbGl6ZS1wYXRoLXNlcCdcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgb3Bwb3NpdGUgdHJhbnNmb3JtYXRpb24gb2YgYG5vcm1hbGl6ZVBhZ2VQYXRoYC4gTm90ZSB0aGF0XG4gKiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBpZGVtcG90ZW50IGVpdGhlciBpbiBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGVcbiAqIGxlYWRpbmcgYC9pbmRleGAgZm9yIHRoZSBwYWdlLiBFeGFtcGxlczpcbiAqICAtIGAvaW5kZXhgIC0+IGAvYFxuICogIC0gYC9pbmRleC9mb29gIC0+IGAvZm9vYFxuICogIC0gYC9pbmRleC9pbmRleGAgLT4gYC9pbmRleGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbm9ybWFsaXplUGFnZVBhdGgocGFnZTogc3RyaW5nKSB7XG4gIGxldCBfcGFnZSA9IG5vcm1hbGl6ZVBhdGhTZXAocGFnZSlcbiAgcmV0dXJuIF9wYWdlLnN0YXJ0c1dpdGgoJy9pbmRleC8nKSAmJiAhaXNEeW5hbWljUm91dGUoX3BhZ2UpXG4gICAgPyBfcGFnZS5zbGljZSg2KVxuICAgIDogX3BhZ2UgIT09ICcvaW5kZXgnXG4gICAgICA/IF9wYWdlXG4gICAgICA6ICcvJ1xufVxuIl0sIm5hbWVzIjpbImRlbm9ybWFsaXplUGFnZVBhdGgiLCJwYWdlIiwiX3BhZ2UiLCJub3JtYWxpemVQYXRoU2VwIiwic3RhcnRzV2l0aCIsImlzRHluYW1pY1JvdXRlIiwic2xpY2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js ***!
|
||
\*****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ensureLeadingSlash\", ({\n enumerable: true,\n get: function() {\n return ensureLeadingSlash;\n }\n}));\nfunction ensureLeadingSlash(path) {\n return path.startsWith('/') ? path : \"/\" + path;\n} //# sourceMappingURL=ensure-leading-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvZW5zdXJlLWxlYWRpbmctc2xhc2guanMiLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDOzs7O3NEQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxtQkFBbUJDLElBQVk7SUFDN0MsT0FBT0EsS0FBS0MsVUFBVSxDQUFDLE9BQU9ELE9BQVEsTUFBR0E7QUFDM0MiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxwYWdlLXBhdGhcXGVuc3VyZS1sZWFkaW5nLXNsYXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9yIGEgZ2l2ZW4gcGFnZSBwYXRoLCB0aGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGVyZSBpcyBhIGxlYWRpbmcgc2xhc2guXG4gKiBJZiB0aGVyZSBpcyBub3QgYSBsZWFkaW5nIHNsYXNoLCBvbmUgaXMgYWRkZWQsIG90aGVyd2lzZSBpdCBpcyBub29wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTGVhZGluZ1NsYXNoKHBhdGg6IHN0cmluZykge1xuICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKCcvJykgPyBwYXRoIDogYC8ke3BhdGh9YFxufVxuIl0sIm5hbWVzIjpbImVuc3VyZUxlYWRpbmdTbGFzaCIsInBhdGgiLCJzdGFydHNXaXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is no backslash\n * escaping slashes in the path. Example:\n * - `foo\\/bar\\/baz` -> `foo/bar/baz`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathSep\", ({\n enumerable: true,\n get: function() {\n return normalizePathSep;\n }\n}));\nfunction normalizePathSep(path) {\n return path.replace(/\\\\/g, '/');\n} //# sourceMappingURL=normalize-path-sep.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvbm9ybWFsaXplLXBhdGgtc2VwLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7O0NBSUM7Ozs7b0RBQ2VBOzs7ZUFBQUE7OztBQUFULFNBQVNBLGlCQUFpQkMsSUFBWTtJQUMzQyxPQUFPQSxLQUFLQyxPQUFPLENBQUMsT0FBTztBQUM3QiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHBhZ2UtcGF0aFxcbm9ybWFsaXplLXBhdGgtc2VwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9yIGEgZ2l2ZW4gcGFnZSBwYXRoLCB0aGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGVyZSBpcyBubyBiYWNrc2xhc2hcbiAqIGVzY2FwaW5nIHNsYXNoZXMgaW4gdGhlIHBhdGguIEV4YW1wbGU6XG4gKiAgLSBgZm9vXFwvYmFyXFwvYmF6YCAtPiBgZm9vL2Jhci9iYXpgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQYXRoU2VwKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZVBhdGhTZXAiLCJwYXRoIiwicmVwbGFjZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router-context.shared-runtime.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouterContext\", ({\n enumerable: true,\n get: function() {\n return RouterContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst RouterContext = _react.default.createContext(null);\nif (true) {\n RouterContext.displayName = 'RouterContext';\n} //# sourceMappingURL=router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQUdhQTs7O2VBQUFBOzs7OzRFQUhLO0FBR1gsTUFBTUEsZ0JBQWdCQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBb0I7QUFFcEUsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNILGNBQWNNLFdBQVcsR0FBRztBQUM5QiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgTmV4dFJvdXRlciB9IGZyb20gJy4vcm91dGVyL3JvdXRlcidcblxuZXhwb3J0IGNvbnN0IFJvdXRlckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PE5leHRSb3V0ZXIgfCBudWxsPihudWxsKVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1JvdXRlckNvbnRleHQnXG59XG4iXSwibmFtZXMiOlsiUm91dGVyQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/adapters.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/adapters.js ***!
|
||
\**************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PathnameContextProviderAdapter: function() {\n return PathnameContextProviderAdapter;\n },\n adaptForAppRouterInstance: function() {\n return adaptForAppRouterInstance;\n },\n adaptForPathParams: function() {\n return adaptForPathParams;\n },\n adaptForSearchParams: function() {\n return adaptForSearchParams;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(pages-dir-browser)/./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"));\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../hooks-client-context.shared-runtime */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _utils = __webpack_require__(/*! ./utils */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _aspathtosearchparams = __webpack_require__(/*! ./utils/as-path-to-search-params */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js\");\nconst _routeregex = __webpack_require__(/*! ./utils/route-regex */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction adaptForAppRouterInstance(pagesRouter) {\n return {\n back () {\n pagesRouter.back();\n },\n forward () {\n pagesRouter.forward();\n },\n refresh () {\n pagesRouter.reload();\n },\n hmrRefresh () {},\n push (href, param) {\n let { scroll } = param === void 0 ? {} : param;\n void pagesRouter.push(href, undefined, {\n scroll\n });\n },\n replace (href, param) {\n let { scroll } = param === void 0 ? {} : param;\n void pagesRouter.replace(href, undefined, {\n scroll\n });\n },\n prefetch (href) {\n void pagesRouter.prefetch(href);\n }\n };\n}\nfunction adaptForSearchParams(router) {\n if (!router.isReady || !router.query) {\n return new URLSearchParams();\n }\n return (0, _aspathtosearchparams.asPathToSearchParams)(router.asPath);\n}\nfunction adaptForPathParams(router) {\n if (!router.isReady || !router.query) {\n return null;\n }\n const pathParams = {};\n const routeRegex = (0, _routeregex.getRouteRegex)(router.pathname);\n const keys = Object.keys(routeRegex.groups);\n for (const key of keys){\n pathParams[key] = router.query[key];\n }\n return pathParams;\n}\nfunction PathnameContextProviderAdapter(param) {\n let { children, router, ...props } = param;\n const ref = (0, _react.useRef)(props.isAutoExport);\n const value = (0, _react.useMemo)(()=>{\n // isAutoExport is only ever `true` on the first render from the server,\n // so reset it to `false` after we read it for the first time as `true`. If\n // we don't use the value, then we don't need it.\n const isAutoExport = ref.current;\n if (isAutoExport) {\n ref.current = false;\n }\n // When the route is a dynamic route, we need to do more processing to\n // determine if we need to stop showing the pathname.\n if ((0, _utils.isDynamicRoute)(router.pathname)) {\n // When the router is rendering the fallback page, it can't possibly know\n // the path, so return `null` here. Read more about fallback pages over\n // at:\n // https://nextjs.org/docs/api-reference/data-fetching/get-static-paths#fallback-pages\n if (router.isFallback) {\n return null;\n }\n // When `isAutoExport` is true, meaning this is a page page has been\n // automatically statically optimized, and the router is not ready, then\n // we can't know the pathname yet. Read more about automatic static\n // optimization at:\n // https://nextjs.org/docs/advanced-features/automatic-static-optimization\n if (isAutoExport && !router.isReady) {\n return null;\n }\n }\n // The `router.asPath` contains the pathname seen by the browser (including\n // any query strings), so it should have that stripped. Read more about the\n // `asPath` option over at:\n // https://nextjs.org/docs/api-reference/next/router#router-object\n let url;\n try {\n url = new URL(router.asPath, 'http://f');\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n return '/';\n }\n return url.pathname;\n }, [\n router.asPath,\n router.isFallback,\n router.isReady,\n router.pathname\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, {\n value: value,\n children: children\n });\n} //# sourceMappingURL=adapters.js.map\n_c = PathnameContextProviderAdapter;\nvar _c;\n$RefreshReg$(_c, \"PathnameContextProviderAdapter\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvYWRhcHRlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBb0VnQkEsOEJBQThCO2VBQTlCQTs7SUF6REFDLHlCQUF5QjtlQUF6QkE7O0lBMENBQyxrQkFBa0I7ZUFBbEJBOztJQVZBQyxvQkFBb0I7ZUFBcEJBOzs7Ozs2RUF2Q3VCOzZEQUNQO21DQUNEO2tEQUNNO3dDQUNQO0FBR3ZCLFNBQVNGLDBCQUNkRyxXQUF1QjtJQUV2QixPQUFPO1FBQ0xDO1lBQ0VELFlBQVlDLElBQUk7UUFDbEI7UUFDQUM7WUFDRUYsWUFBWUUsT0FBTztRQUNyQjtRQUNBQztZQUNFSCxZQUFZSSxNQUFNO1FBQ3BCO1FBQ0FDLGVBQWM7UUFDZEMsTUFBS0MsSUFBSSxFQUFFO1lBQUEsTUFBRUMsTUFBTSxFQUFFLEdBQVYsbUJBQWEsQ0FBQyxJQUFkO1lBQ1QsS0FBS1IsWUFBWU0sSUFBSSxDQUFDQyxNQUFNRSxXQUFXO2dCQUFFRDtZQUFPO1FBQ2xEO1FBQ0FFLFNBQVFILElBQUksRUFBRTtZQUFBLE1BQUVDLE1BQU0sRUFBRSxHQUFWLG1CQUFhLENBQUMsSUFBZDtZQUNaLEtBQUtSLFlBQVlVLE9BQU8sQ0FBQ0gsTUFBTUUsV0FBVztnQkFBRUQ7WUFBTztRQUNyRDtRQUNBRyxVQUFTSixJQUFJO1lBQ1gsS0FBS1AsWUFBWVcsUUFBUSxDQUFDSjtRQUM1QjtJQUNGO0FBQ0Y7QUFRTyxTQUFTUixxQkFDZGEsTUFBd0Q7SUFFeEQsSUFBSSxDQUFDQSxPQUFPQyxPQUFPLElBQUksQ0FBQ0QsT0FBT0UsS0FBSyxFQUFFO1FBQ3BDLE9BQU8sSUFBSUM7SUFDYjtJQUVBLE9BQU9DLENBQUFBLEdBQUFBLHNCQUFBQSxvQkFBQUEsRUFBcUJKLE9BQU9LLE1BQU07QUFDM0M7QUFFTyxTQUFTbkIsbUJBQ2RjLE1BQXFFO0lBRXJFLElBQUksQ0FBQ0EsT0FBT0MsT0FBTyxJQUFJLENBQUNELE9BQU9FLEtBQUssRUFBRTtRQUNwQyxPQUFPO0lBQ1Q7SUFDQSxNQUFNSSxhQUFxQixDQUFDO0lBQzVCLE1BQU1DLGFBQWFDLENBQUFBLEdBQUFBLFlBQUFBLGFBQWEsRUFBQ1IsT0FBT1MsUUFBUTtJQUNoRCxNQUFNQyxPQUFPQyxPQUFPRCxJQUFJLENBQUNILFdBQVdLLE1BQU07SUFDMUMsS0FBSyxNQUFNQyxPQUFPSCxLQUFNO1FBQ3RCSixVQUFVLENBQUNPLElBQUksR0FBR2IsT0FBT0UsS0FBSyxDQUFDVyxJQUFJO0lBQ3JDO0lBQ0EsT0FBT1A7QUFDVDtBQUVPLHdDQUF3QyxLQU83QztJQVA2QyxNQUM3Q1EsUUFBUSxFQUNSZCxNQUFNLEVBQ04sR0FBR2UsT0FJSCxHQVA2QztJQVE3QyxNQUFNQyxNQUFNQyxDQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxFQUFPRixNQUFNRyxZQUFZO0lBQ3JDLE1BQU1DLFFBQVFDLENBQUFBLEdBQUFBLE9BQUFBLE9BQUFBLEVBQVE7UUFDcEIsd0VBQXdFO1FBQ3hFLDJFQUEyRTtRQUMzRSxpREFBaUQ7UUFDakQsTUFBTUYsZUFBZUYsSUFBSUssT0FBTztRQUNoQyxJQUFJSCxjQUFjO1lBQ2hCRixJQUFJSyxPQUFPLEdBQUc7UUFDaEI7UUFFQSxzRUFBc0U7UUFDdEUscURBQXFEO1FBQ3JELElBQUlDLENBQUFBLEdBQUFBLE9BQUFBLGNBQUFBLEVBQWV0QixPQUFPUyxRQUFRLEdBQUc7WUFDbkMseUVBQXlFO1lBQ3pFLHVFQUF1RTtZQUN2RSxNQUFNO1lBQ04sc0ZBQXNGO1lBQ3RGLElBQUlULE9BQU91QixVQUFVLEVBQUU7Z0JBQ3JCLE9BQU87WUFDVDtZQUVBLG9FQUFvRTtZQUNwRSx3RUFBd0U7WUFDeEUsbUVBQW1FO1lBQ25FLG1CQUFtQjtZQUNuQiwwRUFBMEU7WUFDMUUsSUFBSUwsZ0JBQWdCLENBQUNsQixPQUFPQyxPQUFPLEVBQUU7Z0JBQ25DLE9BQU87WUFDVDtRQUNGO1FBRUEsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSwyQkFBMkI7UUFDM0Isa0VBQWtFO1FBQ2xFLElBQUl1QjtRQUNKLElBQUk7WUFDRkEsTUFBTSxJQUFJQyxJQUFJekIsT0FBT0ssTUFBTSxFQUFFO1FBQy9CLEVBQUUsT0FBT3FCLEdBQUc7WUFDVixrREFBa0Q7WUFDbEQsT0FBTztRQUNUO1FBRUEsT0FBT0YsSUFBSWYsUUFBUTtJQUNyQixHQUFHO1FBQUNULE9BQU9LLE1BQU07UUFBRUwsT0FBT3VCLFVBQVU7UUFBRXZCLE9BQU9DLE9BQU87UUFBRUQsT0FBT1MsUUFBUTtLQUFDO0lBRXRFLHFCQUNFLHFCQUFDa0IsaUNBQUFBLGVBQWUsQ0FBQ0MsUUFBUTtRQUFDVCxPQUFPQTtrQkFDOUJMOztBQUdQO0tBM0RnQjlCIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFxhZGFwdGVycy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBcHBSb3V0ZXJJbnN0YW5jZSB9IGZyb20gJy4uL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB0eXBlIHsgUGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL3JlcXVlc3QvcGFyYW1zJ1xuaW1wb3J0IHR5cGUgeyBOZXh0Um91dGVyIH0gZnJvbSAnLi9yb3V0ZXInXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vLCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFBhdGhuYW1lQ29udGV4dCB9IGZyb20gJy4uL2hvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgaXNEeW5hbWljUm91dGUgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgYXNQYXRoVG9TZWFyY2hQYXJhbXMgfSBmcm9tICcuL3V0aWxzL2FzLXBhdGgtdG8tc2VhcmNoLXBhcmFtcydcbmltcG9ydCB7IGdldFJvdXRlUmVnZXggfSBmcm9tICcuL3V0aWxzL3JvdXRlLXJlZ2V4J1xuXG4vKiogSXQgYWRhcHRzIGEgUGFnZXMgUm91dGVyIChgTmV4dFJvdXRlcmApIHRvIHRoZSBBcHAgUm91dGVyIEluc3RhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkYXB0Rm9yQXBwUm91dGVySW5zdGFuY2UoXG4gIHBhZ2VzUm91dGVyOiBOZXh0Um91dGVyXG4pOiBBcHBSb3V0ZXJJbnN0YW5jZSB7XG4gIHJldHVybiB7XG4gICAgYmFjaygpIHtcbiAgICAgIHBhZ2VzUm91dGVyLmJhY2soKVxuICAgIH0sXG4gICAgZm9yd2FyZCgpIHtcbiAgICAgIHBhZ2VzUm91dGVyLmZvcndhcmQoKVxuICAgIH0sXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgIHBhZ2VzUm91dGVyLnJlbG9hZCgpXG4gICAgfSxcbiAgICBobXJSZWZyZXNoKCkge30sXG4gICAgcHVzaChocmVmLCB7IHNjcm9sbCB9ID0ge30pIHtcbiAgICAgIHZvaWQgcGFnZXNSb3V0ZXIucHVzaChocmVmLCB1bmRlZmluZWQsIHsgc2Nyb2xsIH0pXG4gICAgfSxcbiAgICByZXBsYWNlKGhyZWYsIHsgc2Nyb2xsIH0gPSB7fSkge1xuICAgICAgdm9pZCBwYWdlc1JvdXRlci5yZXBsYWNlKGhyZWYsIHVuZGVmaW5lZCwgeyBzY3JvbGwgfSlcbiAgICB9LFxuICAgIHByZWZldGNoKGhyZWYpIHtcbiAgICAgIHZvaWQgcGFnZXNSb3V0ZXIucHJlZmV0Y2goaHJlZilcbiAgICB9LFxuICB9XG59XG5cbi8qKlxuICogYWRhcHRGb3JTZWFyY2hQYXJhbXMgdHJhbnNmb3JtcyB0aGUgUGFyc2VkVVJMUXVlcnkgaW50byBVUkxTZWFyY2hQYXJhbXMuXG4gKlxuICogQHBhcmFtIHJvdXRlciB0aGUgcm91dGVyIHRoYXQgY29udGFpbnMgdGhlIHF1ZXJ5LlxuICogQHJldHVybnMgdGhlIHNlYXJjaCBwYXJhbXMgaW4gdGhlIFVSTFNlYXJjaFBhcmFtcyBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkYXB0Rm9yU2VhcmNoUGFyYW1zKFxuICByb3V0ZXI6IFBpY2s8TmV4dFJvdXRlciwgJ2lzUmVhZHknIHwgJ3F1ZXJ5JyB8ICdhc1BhdGgnPlxuKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgaWYgKCFyb3V0ZXIuaXNSZWFkeSB8fCAhcm91dGVyLnF1ZXJ5KSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICB9XG5cbiAgcmV0dXJuIGFzUGF0aFRvU2VhcmNoUGFyYW1zKHJvdXRlci5hc1BhdGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdEZvclBhdGhQYXJhbXMoXG4gIHJvdXRlcjogUGljazxOZXh0Um91dGVyLCAnaXNSZWFkeScgfCAncGF0aG5hbWUnIHwgJ3F1ZXJ5JyB8ICdhc1BhdGgnPlxuKTogUGFyYW1zIHwgbnVsbCB7XG4gIGlmICghcm91dGVyLmlzUmVhZHkgfHwgIXJvdXRlci5xdWVyeSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcGF0aFBhcmFtczogUGFyYW1zID0ge31cbiAgY29uc3Qgcm91dGVSZWdleCA9IGdldFJvdXRlUmVnZXgocm91dGVyLnBhdGhuYW1lKVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm91dGVSZWdleC5ncm91cHMpXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBwYXRoUGFyYW1zW2tleV0gPSByb3V0ZXIucXVlcnlba2V5XSFcbiAgfVxuICByZXR1cm4gcGF0aFBhcmFtc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUGF0aG5hbWVDb250ZXh0UHJvdmlkZXJBZGFwdGVyKHtcbiAgY2hpbGRyZW4sXG4gIHJvdXRlcixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LlByb3BzV2l0aENoaWxkcmVuPHtcbiAgcm91dGVyOiBQaWNrPE5leHRSb3V0ZXIsICdwYXRobmFtZScgfCAnYXNQYXRoJyB8ICdpc1JlYWR5JyB8ICdpc0ZhbGxiYWNrJz5cbiAgaXNBdXRvRXhwb3J0OiBib29sZWFuXG59Pikge1xuICBjb25zdCByZWYgPSB1c2VSZWYocHJvcHMuaXNBdXRvRXhwb3J0KVxuICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIGlzQXV0b0V4cG9ydCBpcyBvbmx5IGV2ZXIgYHRydWVgIG9uIHRoZSBmaXJzdCByZW5kZXIgZnJvbSB0aGUgc2VydmVyLFxuICAgIC8vIHNvIHJlc2V0IGl0IHRvIGBmYWxzZWAgYWZ0ZXIgd2UgcmVhZCBpdCBmb3IgdGhlIGZpcnN0IHRpbWUgYXMgYHRydWVgLiBJZlxuICAgIC8vIHdlIGRvbid0IHVzZSB0aGUgdmFsdWUsIHRoZW4gd2UgZG9uJ3QgbmVlZCBpdC5cbiAgICBjb25zdCBpc0F1dG9FeHBvcnQgPSByZWYuY3VycmVudFxuICAgIGlmIChpc0F1dG9FeHBvcnQpIHtcbiAgICAgIHJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBXaGVuIHRoZSByb3V0ZSBpcyBhIGR5bmFtaWMgcm91dGUsIHdlIG5lZWQgdG8gZG8gbW9yZSBwcm9jZXNzaW5nIHRvXG4gICAgLy8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc3RvcCBzaG93aW5nIHRoZSBwYXRobmFtZS5cbiAgICBpZiAoaXNEeW5hbWljUm91dGUocm91dGVyLnBhdGhuYW1lKSkge1xuICAgICAgLy8gV2hlbiB0aGUgcm91dGVyIGlzIHJlbmRlcmluZyB0aGUgZmFsbGJhY2sgcGFnZSwgaXQgY2FuJ3QgcG9zc2libHkga25vd1xuICAgICAgLy8gdGhlIHBhdGgsIHNvIHJldHVybiBgbnVsbGAgaGVyZS4gUmVhZCBtb3JlIGFib3V0IGZhbGxiYWNrIHBhZ2VzIG92ZXJcbiAgICAgIC8vIGF0OlxuICAgICAgLy8gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9kYXRhLWZldGNoaW5nL2dldC1zdGF0aWMtcGF0aHMjZmFsbGJhY2stcGFnZXNcbiAgICAgIGlmIChyb3V0ZXIuaXNGYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICAvLyBXaGVuIGBpc0F1dG9FeHBvcnRgIGlzIHRydWUsIG1lYW5pbmcgdGhpcyBpcyBhIHBhZ2UgcGFnZSBoYXMgYmVlblxuICAgICAgLy8gYXV0b21hdGljYWxseSBzdGF0aWNhbGx5IG9wdGltaXplZCwgYW5kIHRoZSByb3V0ZXIgaXMgbm90IHJlYWR5LCB0aGVuXG4gICAgICAvLyB3ZSBjYW4ndCBrbm93IHRoZSBwYXRobmFtZSB5ZXQuIFJlYWQgbW9yZSBhYm91dCBhdXRvbWF0aWMgc3RhdGljXG4gICAgICAvLyBvcHRpbWl6YXRpb24gYXQ6XG4gICAgICAvLyBodHRwczovL25leHRqcy5vcmcvZG9jcy9hZHZhbmNlZC1mZWF0dXJlcy9hdXRvbWF0aWMtc3RhdGljLW9wdGltaXphdGlvblxuICAgICAgaWYgKGlzQXV0b0V4cG9ydCAmJiAhcm91dGVyLmlzUmVhZHkpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGUgYHJvdXRlci5hc1BhdGhgIGNvbnRhaW5zIHRoZSBwYXRobmFtZSBzZWVuIGJ5IHRoZSBicm93c2VyIChpbmNsdWRpbmdcbiAgICAvLyBhbnkgcXVlcnkgc3RyaW5ncyksIHNvIGl0IHNob3VsZCBoYXZlIHRoYXQgc3RyaXBwZWQuIFJlYWQgbW9yZSBhYm91dCB0aGVcbiAgICAvLyBgYXNQYXRoYCBvcHRpb24gb3ZlciBhdDpcbiAgICAvLyBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvcm91dGVyI3JvdXRlci1vYmplY3RcbiAgICBsZXQgdXJsOiBVUkxcbiAgICB0cnkge1xuICAgICAgdXJsID0gbmV3IFVSTChyb3V0ZXIuYXNQYXRoLCAnaHR0cDovL2YnKVxuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIC8vIGZhbGxiYWNrIHRvIC8gZm9yIGludmFsaWQgYXNQYXRoIHZhbHVlcyBlLmcuIC8vXG4gICAgICByZXR1cm4gJy8nXG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC5wYXRobmFtZVxuICB9LCBbcm91dGVyLmFzUGF0aCwgcm91dGVyLmlzRmFsbGJhY2ssIHJvdXRlci5pc1JlYWR5LCByb3V0ZXIucGF0aG5hbWVdKVxuXG4gIHJldHVybiAoXG4gICAgPFBhdGhuYW1lQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvUGF0aG5hbWVDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG4iXSwibmFtZXMiOlsiUGF0aG5hbWVDb250ZXh0UHJvdmlkZXJBZGFwdGVyIiwiYWRhcHRGb3JBcHBSb3V0ZXJJbnN0YW5jZSIsImFkYXB0Rm9yUGF0aFBhcmFtcyIsImFkYXB0Rm9yU2VhcmNoUGFyYW1zIiwicGFnZXNSb3V0ZXIiLCJiYWNrIiwiZm9yd2FyZCIsInJlZnJlc2giLCJyZWxvYWQiLCJobXJSZWZyZXNoIiwicHVzaCIsImhyZWYiLCJzY3JvbGwiLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwicHJlZmV0Y2giLCJyb3V0ZXIiLCJpc1JlYWR5IiwicXVlcnkiLCJVUkxTZWFyY2hQYXJhbXMiLCJhc1BhdGhUb1NlYXJjaFBhcmFtcyIsImFzUGF0aCIsInBhdGhQYXJhbXMiLCJyb3V0ZVJlZ2V4IiwiZ2V0Um91dGVSZWdleCIsInBhdGhuYW1lIiwia2V5cyIsIk9iamVjdCIsImdyb3VwcyIsImtleSIsImNoaWxkcmVuIiwicHJvcHMiLCJyZWYiLCJ1c2VSZWYiLCJpc0F1dG9FeHBvcnQiLCJ2YWx1ZSIsInVzZU1lbW8iLCJjdXJyZW50IiwiaXNEeW5hbWljUm91dGUiLCJpc0ZhbGxiYWNrIiwidXJsIiwiVVJMIiwiXyIsIlBhdGhuYW1lQ29udGV4dCIsIlByb3ZpZGVyIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/adapters.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/router.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/router.js ***!
|
||
\************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// tslint:disable:no-console\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n createKey: function() {\n return createKey;\n },\n default: function() {\n return Router;\n },\n matchesMiddleware: function() {\n return matchesMiddleware;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./utils/remove-trailing-slash */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _routeloader = __webpack_require__(/*! ../../../client/route-loader */ \"(pages-dir-browser)/./node_modules/next/dist/client/route-loader.js\");\nconst _script = __webpack_require__(/*! ../../../client/script */ \"(pages-dir-browser)/./node_modules/next/dist/client/script.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../../../lib/is-error */ \"(pages-dir-browser)/./node_modules/next/dist/lib/is-error.js\"));\nconst _denormalizepagepath = __webpack_require__(/*! ../page-path/denormalize-page-path */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\");\nconst _normalizelocalepath = __webpack_require__(/*! ../i18n/normalize-locale-path */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../mitt */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/mitt.js\"));\nconst _utils = __webpack_require__(/*! ../utils */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _isdynamic = __webpack_require__(/*! ./utils/is-dynamic */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./utils/parse-relative-url */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nconst _routematcher = __webpack_require__(/*! ./utils/route-matcher */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./utils/route-regex */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nconst _formaturl = __webpack_require__(/*! ./utils/format-url */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _detectdomainlocale = __webpack_require__(/*! ../../../client/detect-domain-locale */ \"(pages-dir-browser)/./node_modules/next/dist/client/detect-domain-locale.js\");\nconst _parsepath = __webpack_require__(/*! ./utils/parse-path */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst _addlocale = __webpack_require__(/*! ../../../client/add-locale */ \"(pages-dir-browser)/./node_modules/next/dist/client/add-locale.js\");\nconst _removelocale = __webpack_require__(/*! ../../../client/remove-locale */ \"(pages-dir-browser)/./node_modules/next/dist/client/remove-locale.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../client/remove-base-path */ \"(pages-dir-browser)/./node_modules/next/dist/client/remove-base-path.js\");\nconst _addbasepath = __webpack_require__(/*! ../../../client/add-base-path */ \"(pages-dir-browser)/./node_modules/next/dist/client/add-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../client/has-base-path */ \"(pages-dir-browser)/./node_modules/next/dist/client/has-base-path.js\");\nconst _resolvehref = __webpack_require__(/*! ../../../client/resolve-href */ \"(pages-dir-browser)/./node_modules/next/dist/client/resolve-href.js\");\nconst _isapiroute = __webpack_require__(/*! ../../../lib/is-api-route */ \"(pages-dir-browser)/./node_modules/next/dist/lib/is-api-route.js\");\nconst _getnextpathnameinfo = __webpack_require__(/*! ./utils/get-next-pathname-info */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\");\nconst _formatnextpathnameinfo = __webpack_require__(/*! ./utils/format-next-pathname-info */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\");\nconst _comparestates = __webpack_require__(/*! ./utils/compare-states */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/compare-states.js\");\nconst _islocalurl = __webpack_require__(/*! ./utils/is-local-url */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _isbot = __webpack_require__(/*! ./utils/is-bot */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\nconst _omit = __webpack_require__(/*! ./utils/omit */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _interpolateas = __webpack_require__(/*! ./utils/interpolate-as */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _disablesmoothscroll = __webpack_require__(/*! ./utils/disable-smooth-scroll */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js\");\nconst _constants = __webpack_require__(/*! ../../../lib/constants */ \"(pages-dir-browser)/./node_modules/next/dist/lib/constants.js\");\nlet resolveRewrites;\nif (false) {}\nfunction buildCancellationError() {\n return Object.assign(Object.defineProperty(new Error('Route Cancelled'), \"__NEXT_ERROR_CODE\", {\n value: \"E315\",\n enumerable: false,\n configurable: true\n }), {\n cancelled: true\n });\n}\nasync function matchesMiddleware(options) {\n const matchers = await Promise.resolve(options.router.pageLoader.getMiddleware());\n if (!matchers) return false;\n const { pathname: asPathname } = (0, _parsepath.parsePath)(options.asPath);\n // remove basePath first since path prefix has to be in the order of `/${basePath}/${locale}`\n const cleanedAs = (0, _hasbasepath.hasBasePath)(asPathname) ? (0, _removebasepath.removeBasePath)(asPathname) : asPathname;\n const asWithBasePathAndLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(cleanedAs, options.locale));\n // Check only path match on client. Matching \"has\" should be done on server\n // where we can access more info such as headers, HttpOnly cookie, etc.\n return matchers.some((m)=>new RegExp(m.regexp).test(asWithBasePathAndLocale));\n}\nfunction stripOrigin(url) {\n const origin = (0, _utils.getLocationOrigin)();\n return url.startsWith(origin) ? url.substring(origin.length) : url;\n}\nfunction prepareUrlAs(router, url, as) {\n // If url and as provided as an object representation,\n // we'll format them into the string version here.\n let [resolvedHref, resolvedAs] = (0, _resolvehref.resolveHref)(router, url, true);\n const origin = (0, _utils.getLocationOrigin)();\n const hrefWasAbsolute = resolvedHref.startsWith(origin);\n const asWasAbsolute = resolvedAs && resolvedAs.startsWith(origin);\n resolvedHref = stripOrigin(resolvedHref);\n resolvedAs = resolvedAs ? stripOrigin(resolvedAs) : resolvedAs;\n const preparedUrl = hrefWasAbsolute ? resolvedHref : (0, _addbasepath.addBasePath)(resolvedHref);\n const preparedAs = as ? stripOrigin((0, _resolvehref.resolveHref)(router, as)) : resolvedAs || resolvedHref;\n return {\n url: preparedUrl,\n as: asWasAbsolute ? preparedAs : (0, _addbasepath.addBasePath)(preparedAs)\n };\n}\nfunction resolveDynamicRoute(pathname, pages) {\n const cleanPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _denormalizepagepath.denormalizePagePath)(pathname));\n if (cleanPathname === '/404' || cleanPathname === '/_error') {\n return pathname;\n }\n // handle resolving href for dynamic routes\n if (!pages.includes(cleanPathname)) {\n // eslint-disable-next-line array-callback-return\n pages.some((page)=>{\n if ((0, _isdynamic.isDynamicRoute)(page) && (0, _routeregex.getRouteRegex)(page).re.test(cleanPathname)) {\n pathname = page;\n return true;\n }\n });\n }\n return (0, _removetrailingslash.removeTrailingSlash)(pathname);\n}\nfunction getMiddlewareData(source, response, options) {\n const nextConfig = {\n basePath: options.router.basePath,\n i18n: {\n locales: options.router.locales\n },\n trailingSlash: Boolean(false)\n };\n const rewriteHeader = response.headers.get('x-nextjs-rewrite');\n let rewriteTarget = rewriteHeader || response.headers.get('x-nextjs-matched-path');\n const matchedPath = response.headers.get(_constants.MATCHED_PATH_HEADER);\n if (matchedPath && !rewriteTarget && !matchedPath.includes('__next_data_catchall') && !matchedPath.includes('/_error') && !matchedPath.includes('/404')) {\n // leverage x-matched-path to detect next.config.js rewrites\n rewriteTarget = matchedPath;\n }\n if (rewriteTarget) {\n if (rewriteTarget.startsWith('/') || false) {\n const parsedRewriteTarget = (0, _parserelativeurl.parseRelativeUrl)(rewriteTarget);\n const pathnameInfo = (0, _getnextpathnameinfo.getNextPathnameInfo)(parsedRewriteTarget.pathname, {\n nextConfig,\n parseData: true\n });\n let fsPathname = (0, _removetrailingslash.removeTrailingSlash)(pathnameInfo.pathname);\n return Promise.all([\n options.router.pageLoader.getPageList(),\n (0, _routeloader.getClientBuildManifest)()\n ]).then((param)=>{\n let [pages, { __rewrites: rewrites }] = param;\n let as = (0, _addlocale.addLocale)(pathnameInfo.pathname, pathnameInfo.locale);\n if ((0, _isdynamic.isDynamicRoute)(as) || !rewriteHeader && pages.includes((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(as), options.router.locales).pathname)) {\n const parsedSource = (0, _getnextpathnameinfo.getNextPathnameInfo)((0, _parserelativeurl.parseRelativeUrl)(source).pathname, {\n nextConfig: false ? 0 : nextConfig,\n parseData: true\n });\n as = (0, _addbasepath.addBasePath)(parsedSource.pathname);\n parsedRewriteTarget.pathname = as;\n }\n if (false) {} else if (!pages.includes(fsPathname)) {\n const resolvedPathname = resolveDynamicRoute(fsPathname, pages);\n if (resolvedPathname !== fsPathname) {\n fsPathname = resolvedPathname;\n }\n }\n const resolvedHref = !pages.includes(fsPathname) ? resolveDynamicRoute((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(parsedRewriteTarget.pathname), options.router.locales).pathname, pages) : fsPathname;\n if ((0, _isdynamic.isDynamicRoute)(resolvedHref)) {\n const matches = (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(resolvedHref))(as);\n Object.assign(parsedRewriteTarget.query, matches || {});\n }\n return {\n type: 'rewrite',\n parsedAs: parsedRewriteTarget,\n resolvedHref\n };\n });\n }\n const src = (0, _parsepath.parsePath)(source);\n const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n nextConfig,\n parseData: true\n }),\n defaultLocale: options.router.defaultLocale,\n buildId: ''\n });\n return Promise.resolve({\n type: 'redirect-external',\n destination: \"\" + pathname + src.query + src.hash\n });\n }\n const redirectTarget = response.headers.get('x-nextjs-redirect');\n if (redirectTarget) {\n if (redirectTarget.startsWith('/')) {\n const src = (0, _parsepath.parsePath)(redirectTarget);\n const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n nextConfig,\n parseData: true\n }),\n defaultLocale: options.router.defaultLocale,\n buildId: ''\n });\n return Promise.resolve({\n type: 'redirect-internal',\n newAs: \"\" + pathname + src.query + src.hash,\n newUrl: \"\" + pathname + src.query + src.hash\n });\n }\n return Promise.resolve({\n type: 'redirect-external',\n destination: redirectTarget\n });\n }\n return Promise.resolve({\n type: 'next'\n });\n}\nasync function withMiddlewareEffects(options) {\n const matches = await matchesMiddleware(options);\n if (!matches || !options.fetchData) {\n return null;\n }\n const data = await options.fetchData();\n const effect = await getMiddlewareData(data.dataHref, data.response, options);\n return {\n dataHref: data.dataHref,\n json: data.json,\n response: data.response,\n text: data.text,\n cacheKey: data.cacheKey,\n effect\n };\n}\nconst manualScrollRestoration = false && 0;\nconst SSG_DATA_NOT_FOUND = Symbol('SSG_DATA_NOT_FOUND');\nfunction fetchRetry(url, attempts, options) {\n return fetch(url, {\n // Cookies are required to be present for Next.js' SSG \"Preview Mode\".\n // Cookies may also be required for `getServerSideProps`.\n //\n // > `fetch` won’t send cookies, unless you set the credentials init\n // > option.\n // https://developer.mozilla.org/docs/Web/API/Fetch_API/Using_Fetch\n //\n // > For maximum browser compatibility when it comes to sending &\n // > receiving cookies, always supply the `credentials: 'same-origin'`\n // > option instead of relying on the default.\n // https://github.com/github/fetch#caveats\n credentials: 'same-origin',\n method: options.method || 'GET',\n headers: Object.assign({}, options.headers, {\n 'x-nextjs-data': '1'\n })\n }).then((response)=>{\n return !response.ok && attempts > 1 && response.status >= 500 ? fetchRetry(url, attempts - 1, options) : response;\n });\n}\nfunction tryToParseAsJSON(text) {\n try {\n return JSON.parse(text);\n } catch (error) {\n return null;\n }\n}\nfunction fetchNextData(param) {\n let { dataHref, inflightCache, isPrefetch, hasMiddleware, isServerRender, parseJSON, persistCache, isBackground, unstable_skipClientCache } = param;\n const { href: cacheKey } = new URL(dataHref, window.location.href);\n const getData = (params)=>{\n var _params_method;\n return fetchRetry(dataHref, isServerRender ? 3 : 1, {\n headers: Object.assign({}, isPrefetch ? {\n purpose: 'prefetch'\n } : {}, isPrefetch && hasMiddleware ? {\n 'x-middleware-prefetch': '1'\n } : {}, false ? 0 : {}),\n method: (_params_method = params == null ? void 0 : params.method) != null ? _params_method : 'GET'\n }).then((response)=>{\n if (response.ok && (params == null ? void 0 : params.method) === 'HEAD') {\n return {\n dataHref,\n response,\n text: '',\n json: {},\n cacheKey\n };\n }\n return response.text().then((text)=>{\n if (!response.ok) {\n /**\n * When the data response is a redirect because of a middleware\n * we do not consider it an error. The headers must bring the\n * mapped location.\n * TODO: Change the status code in the handler.\n */ if (hasMiddleware && [\n 301,\n 302,\n 307,\n 308\n ].includes(response.status)) {\n return {\n dataHref,\n response,\n text,\n json: {},\n cacheKey\n };\n }\n if (response.status === 404) {\n var _tryToParseAsJSON;\n if ((_tryToParseAsJSON = tryToParseAsJSON(text)) == null ? void 0 : _tryToParseAsJSON.notFound) {\n return {\n dataHref,\n json: {\n notFound: SSG_DATA_NOT_FOUND\n },\n response,\n text,\n cacheKey\n };\n }\n }\n const error = Object.defineProperty(new Error(\"Failed to load static props\"), \"__NEXT_ERROR_CODE\", {\n value: \"E124\",\n enumerable: false,\n configurable: true\n });\n /**\n * We should only trigger a server-side transition if this was\n * caused on a client-side transition. Otherwise, we'd get into\n * an infinite loop.\n */ if (!isServerRender) {\n (0, _routeloader.markAssetError)(error);\n }\n throw error;\n }\n return {\n dataHref,\n json: parseJSON ? tryToParseAsJSON(text) : null,\n response,\n text,\n cacheKey\n };\n });\n }).then((data)=>{\n if (!persistCache || \"development\" !== 'production' || 0) {\n delete inflightCache[cacheKey];\n }\n return data;\n }).catch((err)=>{\n if (!unstable_skipClientCache) {\n delete inflightCache[cacheKey];\n }\n if (err.message === 'Failed to fetch' || // firefox\n err.message === 'NetworkError when attempting to fetch resource.' || // safari\n err.message === 'Load failed') {\n (0, _routeloader.markAssetError)(err);\n }\n throw err;\n });\n };\n // when skipping client cache we wait to update\n // inflight cache until successful data response\n // this allows racing click event with fetching newer data\n // without blocking navigation when stale data is available\n if (unstable_skipClientCache && persistCache) {\n return getData({}).then((data)=>{\n if (data.response.headers.get('x-middleware-cache') !== 'no-cache') {\n // only update cache if not marked as no-cache\n inflightCache[cacheKey] = Promise.resolve(data);\n }\n return data;\n });\n }\n if (inflightCache[cacheKey] !== undefined) {\n return inflightCache[cacheKey];\n }\n return inflightCache[cacheKey] = getData(isBackground ? {\n method: 'HEAD'\n } : {});\n}\nfunction createKey() {\n return Math.random().toString(36).slice(2, 10);\n}\nfunction handleHardNavigation(param) {\n let { url, router } = param;\n // ensure we don't trigger a hard navigation to the same\n // URL as this can end up with an infinite refresh\n if (url === (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(router.asPath, router.locale))) {\n throw Object.defineProperty(new Error(\"Invariant: attempted to hard navigate to the same URL \" + url + \" \" + location.href), \"__NEXT_ERROR_CODE\", {\n value: \"E282\",\n enumerable: false,\n configurable: true\n });\n }\n window.location.href = url;\n}\nconst getCancelledHandler = (param)=>{\n let { route, router } = param;\n let cancelled = false;\n const cancel = router.clc = ()=>{\n cancelled = true;\n };\n const handleCancelled = ()=>{\n if (cancelled) {\n const error = Object.defineProperty(new Error('Abort fetching component for route: \"' + route + '\"'), \"__NEXT_ERROR_CODE\", {\n value: \"E483\",\n enumerable: false,\n configurable: true\n });\n error.cancelled = true;\n throw error;\n }\n if (cancel === router.clc) {\n router.clc = null;\n }\n };\n return handleCancelled;\n};\nclass Router {\n reload() {\n window.location.reload();\n }\n /**\n * Go back in history\n */ back() {\n window.history.back();\n }\n /**\n * Go forward in history\n */ forward() {\n window.history.forward();\n }\n /**\n * Performs a `pushState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */ push(url, as, options) {\n if (options === void 0) options = {};\n if (false) {}\n ;\n ({ url, as } = prepareUrlAs(this, url, as));\n return this.change('pushState', url, as, options);\n }\n /**\n * Performs a `replaceState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */ replace(url, as, options) {\n if (options === void 0) options = {};\n ;\n ({ url, as } = prepareUrlAs(this, url, as));\n return this.change('replaceState', url, as, options);\n }\n async _bfl(as, resolvedAs, locale, skipNavigate) {\n if (true) {\n if (!this._bfl_s && !this._bfl_d) {\n const { BloomFilter } = __webpack_require__(/*! ../../lib/bloom-filter */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/bloom-filter.js\");\n let staticFilterData;\n let dynamicFilterData;\n try {\n ;\n ({ __routerFilterStatic: staticFilterData, __routerFilterDynamic: dynamicFilterData } = await (0, _routeloader.getClientBuildManifest)());\n } catch (err) {\n // failed to load build manifest hard navigate\n // to be safe\n console.error(err);\n if (skipNavigate) {\n return true;\n }\n handleHardNavigation({\n url: (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, locale || this.locale, this.defaultLocale)),\n router: this\n });\n return new Promise(()=>{});\n }\n const routerFilterSValue = {\"numItems\":0,\"errorRate\":0.0001,\"numBits\":0,\"numHashes\":null,\"bitArray\":[]};\n if (!staticFilterData && routerFilterSValue) {\n staticFilterData = routerFilterSValue ? routerFilterSValue : undefined;\n }\n const routerFilterDValue = {\"numItems\":0,\"errorRate\":0.0001,\"numBits\":0,\"numHashes\":null,\"bitArray\":[]};\n if (!dynamicFilterData && routerFilterDValue) {\n dynamicFilterData = routerFilterDValue ? routerFilterDValue : undefined;\n }\n if (staticFilterData == null ? void 0 : staticFilterData.numHashes) {\n this._bfl_s = new BloomFilter(staticFilterData.numItems, staticFilterData.errorRate);\n this._bfl_s.import(staticFilterData);\n }\n if (dynamicFilterData == null ? void 0 : dynamicFilterData.numHashes) {\n this._bfl_d = new BloomFilter(dynamicFilterData.numItems, dynamicFilterData.errorRate);\n this._bfl_d.import(dynamicFilterData);\n }\n }\n let matchesBflStatic = false;\n let matchesBflDynamic = false;\n const pathsToCheck = [\n {\n as\n },\n {\n as: resolvedAs\n }\n ];\n for (const { as: curAs, allowMatchCurrent } of pathsToCheck){\n if (curAs) {\n const asNoSlash = (0, _removetrailingslash.removeTrailingSlash)(new URL(curAs, 'http://n').pathname);\n const asNoSlashLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(asNoSlash, locale || this.locale));\n if (allowMatchCurrent || asNoSlash !== (0, _removetrailingslash.removeTrailingSlash)(new URL(this.asPath, 'http://n').pathname)) {\n var _this__bfl_s, _this__bfl_s1;\n matchesBflStatic = matchesBflStatic || !!((_this__bfl_s = this._bfl_s) == null ? void 0 : _this__bfl_s.contains(asNoSlash)) || !!((_this__bfl_s1 = this._bfl_s) == null ? void 0 : _this__bfl_s1.contains(asNoSlashLocale));\n for (const normalizedAS of [\n asNoSlash,\n asNoSlashLocale\n ]){\n // if any sub-path of as matches a dynamic filter path\n // it should be hard navigated\n const curAsParts = normalizedAS.split('/');\n for(let i = 0; !matchesBflDynamic && i < curAsParts.length + 1; i++){\n var _this__bfl_d;\n const currentPart = curAsParts.slice(0, i).join('/');\n if (currentPart && ((_this__bfl_d = this._bfl_d) == null ? void 0 : _this__bfl_d.contains(currentPart))) {\n matchesBflDynamic = true;\n break;\n }\n }\n }\n // if the client router filter is matched then we trigger\n // a hard navigation\n if (matchesBflStatic || matchesBflDynamic) {\n if (skipNavigate) {\n return true;\n }\n handleHardNavigation({\n url: (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, locale || this.locale, this.defaultLocale)),\n router: this\n });\n return new Promise(()=>{});\n }\n }\n }\n }\n }\n return false;\n }\n async change(method, url, as, options, forcedScroll) {\n var _this_components_pathname;\n if (!(0, _islocalurl.isLocalURL)(url)) {\n handleHardNavigation({\n url,\n router: this\n });\n return false;\n }\n // WARNING: `_h` is an internal option for handing Next.js client-side\n // hydration. Your app should _never_ use this property. It may change at\n // any time without notice.\n const isQueryUpdating = options._h === 1;\n if (!isQueryUpdating && !options.shallow) {\n await this._bfl(as, undefined, options.locale);\n }\n let shouldResolveHref = isQueryUpdating || options._shouldResolveHref || (0, _parsepath.parsePath)(url).pathname === (0, _parsepath.parsePath)(as).pathname;\n const nextState = {\n ...this.state\n };\n // for static pages with query params in the URL we delay\n // marking the router ready until after the query is updated\n // or a navigation has occurred\n const readyStateChange = this.isReady !== true;\n this.isReady = true;\n const isSsr = this.isSsr;\n if (!isQueryUpdating) {\n this.isSsr = false;\n }\n // if a route transition is already in progress before\n // the query updating is triggered ignore query updating\n if (isQueryUpdating && this.clc) {\n return false;\n }\n const prevLocale = nextState.locale;\n if (false) { var _this_locales; }\n // marking route changes as a navigation start entry\n if (_utils.ST) {\n performance.mark('routeChange');\n }\n const { shallow = false, scroll = true } = options;\n const routeProps = {\n shallow\n };\n if (this._inFlightRoute && this.clc) {\n if (!isSsr) {\n Router.events.emit('routeChangeError', buildCancellationError(), this._inFlightRoute, routeProps);\n }\n this.clc();\n this.clc = null;\n }\n as = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, options.locale, this.defaultLocale));\n const cleanedAs = (0, _removelocale.removeLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, nextState.locale);\n this._inFlightRoute = as;\n const localeChange = prevLocale !== nextState.locale;\n // If the url change is only related to a hash change\n // We should not proceed. We should only change the state.\n if (!isQueryUpdating && this.onlyAHashChange(cleanedAs) && !localeChange) {\n nextState.asPath = cleanedAs;\n Router.events.emit('hashChangeStart', as, routeProps);\n // TODO: do we need the resolved href when only a hash change?\n this.changeState(method, url, as, {\n ...options,\n scroll: false\n });\n if (scroll) {\n this.scrollToHash(cleanedAs);\n }\n try {\n await this.set(nextState, this.components[nextState.route], null);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n Router.events.emit('routeChangeError', err, cleanedAs, routeProps);\n }\n throw err;\n }\n Router.events.emit('hashChangeComplete', as, routeProps);\n return true;\n }\n let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n let { pathname, query } = parsed;\n // The build manifest needs to be loaded before auto-static dynamic pages\n // get their query parameters to allow ensuring they can be parsed properly\n // when rewritten to\n let pages, rewrites;\n try {\n ;\n [pages, { __rewrites: rewrites }] = await Promise.all([\n this.pageLoader.getPageList(),\n (0, _routeloader.getClientBuildManifest)(),\n this.pageLoader.getMiddleware()\n ]);\n } catch (err) {\n // If we fail to resolve the page list or client-build manifest, we must\n // do a server-side transition:\n handleHardNavigation({\n url: as,\n router: this\n });\n return false;\n }\n // If asked to change the current URL we should reload the current page\n // (not location.reload() but reload getInitialProps and other Next.js stuffs)\n // We also need to set the method = replaceState always\n // as this should not go into the history (That's how browsers work)\n // We should compare the new asPath to the current asPath, not the url\n if (!this.urlIsNew(cleanedAs) && !localeChange) {\n method = 'replaceState';\n }\n // we need to resolve the as value using rewrites for dynamic SSG\n // pages to allow building the data URL correctly\n let resolvedAs = as;\n // url and as should always be prefixed with basePath by this\n // point by either next/link or router.push/replace so strip the\n // basePath from the pathname to match the pages dir 1-to-1\n pathname = pathname ? (0, _removetrailingslash.removeTrailingSlash)((0, _removebasepath.removeBasePath)(pathname)) : pathname;\n let route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n const parsedAsPathname = as.startsWith('/') && (0, _parserelativeurl.parseRelativeUrl)(as).pathname;\n // if we detected the path as app route during prefetching\n // trigger hard navigation\n if ((_this_components_pathname = this.components[pathname]) == null ? void 0 : _this_components_pathname.__appRouter) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return new Promise(()=>{});\n }\n const isMiddlewareRewrite = !!(parsedAsPathname && route !== parsedAsPathname && (!(0, _isdynamic.isDynamicRoute)(route) || !(0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(route))(parsedAsPathname)));\n // we don't attempt resolve asPath when we need to execute\n // middleware as the resolving will occur server-side\n const isMiddlewareMatch = !options.shallow && await matchesMiddleware({\n asPath: as,\n locale: nextState.locale,\n router: this\n });\n if (isQueryUpdating && isMiddlewareMatch) {\n shouldResolveHref = false;\n }\n if (shouldResolveHref && pathname !== '/_error') {\n ;\n options._shouldResolveHref = true;\n if (false) {} else {\n parsed.pathname = resolveDynamicRoute(pathname, pages);\n if (parsed.pathname !== pathname) {\n pathname = parsed.pathname;\n parsed.pathname = (0, _addbasepath.addBasePath)(pathname);\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n }\n }\n if (!(0, _islocalurl.isLocalURL)(as)) {\n if (true) {\n throw Object.defineProperty(new Error('Invalid href: \"' + url + '\" and as: \"' + as + '\", received relative href and external as' + \"\\nSee more info: https://nextjs.org/docs/messages/invalid-relative-url-external-as\"), \"__NEXT_ERROR_CODE\", {\n value: \"E380\",\n enumerable: false,\n configurable: true\n });\n }\n handleHardNavigation({\n url: as,\n router: this\n });\n return false;\n }\n resolvedAs = (0, _removelocale.removeLocale)((0, _removebasepath.removeBasePath)(resolvedAs), nextState.locale);\n route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n let routeMatch = false;\n if ((0, _isdynamic.isDynamicRoute)(route)) {\n const parsedAs = (0, _parserelativeurl.parseRelativeUrl)(resolvedAs);\n const asPathname = parsedAs.pathname;\n const routeRegex = (0, _routeregex.getRouteRegex)(route);\n routeMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(asPathname);\n const shouldInterpolate = route === asPathname;\n const interpolatedAs = shouldInterpolate ? (0, _interpolateas.interpolateAs)(route, asPathname, query) : {};\n if (!routeMatch || shouldInterpolate && !interpolatedAs.result) {\n const missingParams = Object.keys(routeRegex.groups).filter((param)=>!query[param] && !routeRegex.groups[param].optional);\n if (missingParams.length > 0 && !isMiddlewareMatch) {\n if (true) {\n console.warn(\"\" + (shouldInterpolate ? \"Interpolating href\" : \"Mismatching `as` and `href`\") + \" failed to manually provide \" + (\"the params: \" + missingParams.join(', ') + \" in the `href`'s `query`\"));\n }\n throw Object.defineProperty(new Error((shouldInterpolate ? \"The provided `href` (\" + url + \") value is missing query values (\" + missingParams.join(', ') + \") to be interpolated properly. \" : \"The provided `as` value (\" + asPathname + \") is incompatible with the `href` value (\" + route + \"). \") + (\"Read more: https://nextjs.org/docs/messages/\" + (shouldInterpolate ? 'href-interpolation-failed' : 'incompatible-href-as'))), \"__NEXT_ERROR_CODE\", {\n value: \"E344\",\n enumerable: false,\n configurable: true\n });\n }\n } else if (shouldInterpolate) {\n as = (0, _formaturl.formatWithValidation)(Object.assign({}, parsedAs, {\n pathname: interpolatedAs.result,\n query: (0, _omit.omit)(query, interpolatedAs.params)\n }));\n } else {\n // Merge params into `query`, overwriting any specified in search\n Object.assign(query, routeMatch);\n }\n }\n if (!isQueryUpdating) {\n Router.events.emit('routeChangeStart', as, routeProps);\n }\n const isErrorRoute = this.pathname === '/404' || this.pathname === '/_error';\n try {\n var _self___NEXT_DATA___props_pageProps, _self___NEXT_DATA___props, _routeInfo_props;\n let routeInfo = await this.getRouteInfo({\n route,\n pathname,\n query,\n as,\n resolvedAs,\n routeProps,\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n hasMiddleware: isMiddlewareMatch,\n unstable_skipClientCache: options.unstable_skipClientCache,\n isQueryUpdating: isQueryUpdating && !this.isFallback,\n isMiddlewareRewrite\n });\n if (!isQueryUpdating && !options.shallow) {\n await this._bfl(as, 'resolvedAs' in routeInfo ? routeInfo.resolvedAs : undefined, nextState.locale);\n }\n if ('route' in routeInfo && isMiddlewareMatch) {\n pathname = routeInfo.route || route;\n route = pathname;\n if (!routeProps.shallow) {\n query = Object.assign({}, routeInfo.query || {}, query);\n }\n const cleanedParsedPathname = (0, _hasbasepath.hasBasePath)(parsed.pathname) ? (0, _removebasepath.removeBasePath)(parsed.pathname) : parsed.pathname;\n if (routeMatch && pathname !== cleanedParsedPathname) {\n Object.keys(routeMatch).forEach((key)=>{\n if (routeMatch && query[key] === routeMatch[key]) {\n delete query[key];\n }\n });\n }\n if ((0, _isdynamic.isDynamicRoute)(pathname)) {\n const prefixedAs = !routeProps.shallow && routeInfo.resolvedAs ? routeInfo.resolvedAs : (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(new URL(as, location.href).pathname, nextState.locale), true);\n let rewriteAs = prefixedAs;\n if ((0, _hasbasepath.hasBasePath)(rewriteAs)) {\n rewriteAs = (0, _removebasepath.removeBasePath)(rewriteAs);\n }\n if (false) {}\n const routeRegex = (0, _routeregex.getRouteRegex)(pathname);\n const curRouteMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(new URL(rewriteAs, location.href).pathname);\n if (curRouteMatch) {\n Object.assign(query, curRouteMatch);\n }\n }\n }\n // If the routeInfo brings a redirect we simply apply it.\n if ('type' in routeInfo) {\n if (routeInfo.type === 'redirect-internal') {\n return this.change(method, routeInfo.newUrl, routeInfo.newAs, options);\n } else {\n handleHardNavigation({\n url: routeInfo.destination,\n router: this\n });\n return new Promise(()=>{});\n }\n }\n const component = routeInfo.Component;\n if (component && component.unstable_scriptLoader) {\n const scripts = [].concat(component.unstable_scriptLoader());\n scripts.forEach((script)=>{\n (0, _script.handleClientScriptLoad)(script.props);\n });\n }\n // handle redirect on client-transition\n if ((routeInfo.__N_SSG || routeInfo.__N_SSP) && routeInfo.props) {\n if (routeInfo.props.pageProps && routeInfo.props.pageProps.__N_REDIRECT) {\n // Use the destination from redirect without adding locale\n options.locale = false;\n const destination = routeInfo.props.pageProps.__N_REDIRECT;\n // check if destination is internal (resolves to a page) and attempt\n // client-navigation if it is falling back to hard navigation if\n // it's not\n if (destination.startsWith('/') && routeInfo.props.pageProps.__N_REDIRECT_BASE_PATH !== false) {\n const parsedHref = (0, _parserelativeurl.parseRelativeUrl)(destination);\n parsedHref.pathname = resolveDynamicRoute(parsedHref.pathname, pages);\n const { url: newUrl, as: newAs } = prepareUrlAs(this, destination, destination);\n return this.change(method, newUrl, newAs, options);\n }\n handleHardNavigation({\n url: destination,\n router: this\n });\n return new Promise(()=>{});\n }\n nextState.isPreview = !!routeInfo.props.__N_PREVIEW;\n // handle SSG data 404\n if (routeInfo.props.notFound === SSG_DATA_NOT_FOUND) {\n let notFoundRoute;\n try {\n await this.fetchComponent('/404');\n notFoundRoute = '/404';\n } catch (_) {\n notFoundRoute = '/_error';\n }\n routeInfo = await this.getRouteInfo({\n route: notFoundRoute,\n pathname: notFoundRoute,\n query,\n as,\n resolvedAs,\n routeProps: {\n shallow: false\n },\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n isNotFound: true\n });\n if ('type' in routeInfo) {\n throw Object.defineProperty(new Error(\"Unexpected middleware effect on /404\"), \"__NEXT_ERROR_CODE\", {\n value: \"E158\",\n enumerable: false,\n configurable: true\n });\n }\n }\n }\n if (isQueryUpdating && this.pathname === '/_error' && ((_self___NEXT_DATA___props = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps = _self___NEXT_DATA___props.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps.statusCode) === 500 && ((_routeInfo_props = routeInfo.props) == null ? void 0 : _routeInfo_props.pageProps)) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n routeInfo.props.pageProps.statusCode = 500;\n }\n var _routeInfo_route;\n // shallow routing is only allowed for same page URL changes.\n const isValidShallowRoute = options.shallow && nextState.route === ((_routeInfo_route = routeInfo.route) != null ? _routeInfo_route : route);\n var _options_scroll;\n const shouldScroll = (_options_scroll = options.scroll) != null ? _options_scroll : !isQueryUpdating && !isValidShallowRoute;\n const resetScroll = shouldScroll ? {\n x: 0,\n y: 0\n } : null;\n const upcomingScrollState = forcedScroll != null ? forcedScroll : resetScroll;\n // the new state that the router gonna set\n const upcomingRouterState = {\n ...nextState,\n route,\n pathname,\n query,\n asPath: cleanedAs,\n isFallback: false\n };\n // When the page being rendered is the 404 page, we should only update the\n // query parameters. Route changes here might add the basePath when it\n // wasn't originally present. This is also why this block is before the\n // below `changeState` call which updates the browser's history (changing\n // the URL).\n if (isQueryUpdating && isErrorRoute) {\n var _self___NEXT_DATA___props_pageProps1, _self___NEXT_DATA___props1, _routeInfo_props1;\n routeInfo = await this.getRouteInfo({\n route: this.pathname,\n pathname: this.pathname,\n query,\n as,\n resolvedAs,\n routeProps: {\n shallow: false\n },\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n isQueryUpdating: isQueryUpdating && !this.isFallback\n });\n if ('type' in routeInfo) {\n throw Object.defineProperty(new Error(\"Unexpected middleware effect on \" + this.pathname), \"__NEXT_ERROR_CODE\", {\n value: \"E225\",\n enumerable: false,\n configurable: true\n });\n }\n if (this.pathname === '/_error' && ((_self___NEXT_DATA___props1 = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps1 = _self___NEXT_DATA___props1.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps1.statusCode) === 500 && ((_routeInfo_props1 = routeInfo.props) == null ? void 0 : _routeInfo_props1.pageProps)) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n routeInfo.props.pageProps.statusCode = 500;\n }\n try {\n await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n Router.events.emit('routeChangeError', err, cleanedAs, routeProps);\n }\n throw err;\n }\n return true;\n }\n Router.events.emit('beforeHistoryChange', as, routeProps);\n this.changeState(method, url, as, options);\n // for query updates we can skip it if the state is unchanged and we don't\n // need to scroll\n // https://github.com/vercel/next.js/issues/37139\n const canSkipUpdating = isQueryUpdating && !upcomingScrollState && !readyStateChange && !localeChange && (0, _comparestates.compareRouterStates)(upcomingRouterState, this.state);\n if (!canSkipUpdating) {\n try {\n await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n } catch (e) {\n if (e.cancelled) routeInfo.error = routeInfo.error || e;\n else throw e;\n }\n if (routeInfo.error) {\n if (!isQueryUpdating) {\n Router.events.emit('routeChangeError', routeInfo.error, cleanedAs, routeProps);\n }\n throw routeInfo.error;\n }\n if (false) {}\n if (!isQueryUpdating) {\n Router.events.emit('routeChangeComplete', as, routeProps);\n }\n // A hash mark # is the optional last part of a URL\n const hashRegex = /#.+$/;\n if (shouldScroll && hashRegex.test(as)) {\n this.scrollToHash(as);\n }\n }\n return true;\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n return false;\n }\n throw err;\n }\n }\n changeState(method, url, as, options) {\n if (options === void 0) options = {};\n if (true) {\n if (typeof window.history === 'undefined') {\n console.error(\"Warning: window.history is not available.\");\n return;\n }\n if (typeof window.history[method] === 'undefined') {\n console.error(\"Warning: window.history.\" + method + \" is not available\");\n return;\n }\n }\n if (method !== 'pushState' || (0, _utils.getURL)() !== as) {\n this._shallow = options.shallow;\n window.history[method]({\n url,\n as,\n options,\n __N: true,\n key: this._key = method !== 'pushState' ? this._key : createKey()\n }, // Passing the empty string here should be safe against future changes to the method.\n // https://developer.mozilla.org/docs/Web/API/History/replaceState\n '', as);\n }\n }\n async handleRouteInfoError(err, pathname, query, as, routeProps, loadErrorFail) {\n if (err.cancelled) {\n // bubble up cancellation errors\n throw err;\n }\n if ((0, _routeloader.isAssetError)(err) || loadErrorFail) {\n Router.events.emit('routeChangeError', err, as, routeProps);\n // If we can't load the page it could be one of following reasons\n // 1. Page doesn't exists\n // 2. Page does exist in a different zone\n // 3. Internal error while loading the page\n // So, doing a hard reload is the proper way to deal with this.\n handleHardNavigation({\n url: as,\n router: this\n });\n // Changing the URL doesn't block executing the current code path.\n // So let's throw a cancellation error stop the routing logic.\n throw buildCancellationError();\n }\n console.error(err);\n try {\n let props;\n const { page: Component, styleSheets } = await this.fetchComponent('/_error');\n const routeInfo = {\n props,\n Component,\n styleSheets,\n err,\n error: err\n };\n if (!routeInfo.props) {\n try {\n routeInfo.props = await this.getInitialProps(Component, {\n err,\n pathname,\n query\n });\n } catch (gipErr) {\n console.error('Error in error page `getInitialProps`: ', gipErr);\n routeInfo.props = {};\n }\n }\n return routeInfo;\n } catch (routeInfoErr) {\n return this.handleRouteInfoError((0, _iserror.default)(routeInfoErr) ? routeInfoErr : Object.defineProperty(new Error(routeInfoErr + ''), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n }), pathname, query, as, routeProps, true);\n }\n }\n async getRouteInfo(param) {\n let { route: requestedRoute, pathname, query, as, resolvedAs, routeProps, locale, hasMiddleware, isPreview, unstable_skipClientCache, isQueryUpdating, isMiddlewareRewrite, isNotFound } = param;\n /**\n * This `route` binding can change if there's a rewrite\n * so we keep a reference to the original requested route\n * so we can store the cache for it and avoid re-requesting every time\n * for shallow routing purposes.\n */ let route = requestedRoute;\n try {\n var _data_effect, _data_effect1, _data_effect2, _data_response;\n let existingInfo = this.components[route];\n if (routeProps.shallow && existingInfo && this.route === route) {\n return existingInfo;\n }\n const handleCancelled = getCancelledHandler({\n route,\n router: this\n });\n if (hasMiddleware) {\n existingInfo = undefined;\n }\n let cachedRouteInfo = existingInfo && !('initial' in existingInfo) && \"development\" !== 'development' ? 0 : undefined;\n const isBackground = isQueryUpdating;\n const fetchNextDataParams = {\n dataHref: this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname,\n query\n }),\n skipInterpolation: true,\n asPath: isNotFound ? '/404' : resolvedAs,\n locale\n }),\n hasMiddleware: true,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: isBackground ? this.sbc : this.sdc,\n persistCache: !isPreview,\n isPrefetch: false,\n unstable_skipClientCache,\n isBackground\n };\n let data = isQueryUpdating && !isMiddlewareRewrite ? null : await withMiddlewareEffects({\n fetchData: ()=>fetchNextData(fetchNextDataParams),\n asPath: isNotFound ? '/404' : resolvedAs,\n locale: locale,\n router: this\n }).catch((err)=>{\n // we don't hard error during query updating\n // as it's un-necessary and doesn't need to be fatal\n // unless it is a fallback route and the props can't\n // be loaded\n if (isQueryUpdating) {\n return null;\n }\n throw err;\n });\n // when rendering error routes we don't apply middleware\n // effects\n if (data && (pathname === '/_error' || pathname === '/404')) {\n data.effect = undefined;\n }\n if (isQueryUpdating) {\n if (!data) {\n data = {\n json: self.__NEXT_DATA__.props\n };\n } else {\n data.json = self.__NEXT_DATA__.props;\n }\n }\n handleCancelled();\n if ((data == null ? void 0 : (_data_effect = data.effect) == null ? void 0 : _data_effect.type) === 'redirect-internal' || (data == null ? void 0 : (_data_effect1 = data.effect) == null ? void 0 : _data_effect1.type) === 'redirect-external') {\n return data.effect;\n }\n if ((data == null ? void 0 : (_data_effect2 = data.effect) == null ? void 0 : _data_effect2.type) === 'rewrite') {\n const resolvedRoute = (0, _removetrailingslash.removeTrailingSlash)(data.effect.resolvedHref);\n const pages = await this.pageLoader.getPageList();\n // during query updating the page must match although during\n // client-transition a redirect that doesn't match a page\n // can be returned and this should trigger a hard navigation\n // which is valid for incremental migration\n if (!isQueryUpdating || pages.includes(resolvedRoute)) {\n route = resolvedRoute;\n pathname = data.effect.resolvedHref;\n query = {\n ...query,\n ...data.effect.parsedAs.query\n };\n resolvedAs = (0, _removebasepath.removeBasePath)((0, _normalizelocalepath.normalizeLocalePath)(data.effect.parsedAs.pathname, this.locales).pathname);\n // Check again the cache with the new destination.\n existingInfo = this.components[route];\n if (routeProps.shallow && existingInfo && this.route === route && !hasMiddleware) {\n // If we have a match with the current route due to rewrite,\n // we can copy the existing information to the rewritten one.\n // Then, we return the information along with the matched route.\n return {\n ...existingInfo,\n route\n };\n }\n }\n }\n if ((0, _isapiroute.isAPIRoute)(route)) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return new Promise(()=>{});\n }\n const routeInfo = cachedRouteInfo || await this.fetchComponent(route).then((res)=>({\n Component: res.page,\n styleSheets: res.styleSheets,\n __N_SSG: res.mod.__N_SSG,\n __N_SSP: res.mod.__N_SSP\n }));\n if (true) {\n const { isValidElementType } = __webpack_require__(/*! next/dist/compiled/react-is */ \"(pages-dir-browser)/./node_modules/next/dist/compiled/react-is/index.js\");\n if (!isValidElementType(routeInfo.Component)) {\n throw Object.defineProperty(new Error('The default export is not a React Component in page: \"' + pathname + '\"'), \"__NEXT_ERROR_CODE\", {\n value: \"E286\",\n enumerable: false,\n configurable: true\n });\n }\n }\n const wasBailedPrefetch = data == null ? void 0 : (_data_response = data.response) == null ? void 0 : _data_response.headers.get('x-middleware-skip');\n const shouldFetchData = routeInfo.__N_SSG || routeInfo.__N_SSP;\n // For non-SSG prefetches that bailed before sending data\n // we clear the cache to fetch full response\n if (wasBailedPrefetch && (data == null ? void 0 : data.dataHref)) {\n delete this.sdc[data.dataHref];\n }\n const { props, cacheKey } = await this._getData(async ()=>{\n if (shouldFetchData) {\n if ((data == null ? void 0 : data.json) && !wasBailedPrefetch) {\n return {\n cacheKey: data.cacheKey,\n props: data.json\n };\n }\n const dataHref = (data == null ? void 0 : data.dataHref) ? data.dataHref : this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname,\n query\n }),\n asPath: resolvedAs,\n locale\n });\n const fetched = await fetchNextData({\n dataHref,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: wasBailedPrefetch ? {} : this.sdc,\n persistCache: !isPreview,\n isPrefetch: false,\n unstable_skipClientCache\n });\n return {\n cacheKey: fetched.cacheKey,\n props: fetched.json || {}\n };\n }\n return {\n headers: {},\n props: await this.getInitialProps(routeInfo.Component, {\n pathname,\n query,\n asPath: as,\n locale,\n locales: this.locales,\n defaultLocale: this.defaultLocale\n })\n };\n });\n // Only bust the data cache for SSP routes although\n // middleware can skip cache per request with\n // x-middleware-cache: no-cache as well\n if (routeInfo.__N_SSP && fetchNextDataParams.dataHref && cacheKey) {\n delete this.sdc[cacheKey];\n }\n // we kick off a HEAD request in the background\n // when a non-prefetch request is made to signal revalidation\n if (!this.isPreview && routeInfo.__N_SSG && \"development\" !== 'development' && 0) {}\n props.pageProps = Object.assign({}, props.pageProps);\n routeInfo.props = props;\n routeInfo.route = route;\n routeInfo.query = query;\n routeInfo.resolvedAs = resolvedAs;\n this.components[route] = routeInfo;\n return routeInfo;\n } catch (err) {\n return this.handleRouteInfoError((0, _iserror.getProperError)(err), pathname, query, as, routeProps);\n }\n }\n set(state, data, resetScroll) {\n this.state = state;\n return this.sub(data, this.components['/_app'].Component, resetScroll);\n }\n /**\n * Callback to execute before replacing router state\n * @param cb callback to be executed\n */ beforePopState(cb) {\n this._bps = cb;\n }\n onlyAHashChange(as) {\n if (!this.asPath) return false;\n const [oldUrlNoHash, oldHash] = this.asPath.split('#', 2);\n const [newUrlNoHash, newHash] = as.split('#', 2);\n // Makes sure we scroll to the provided hash if the url/hash are the same\n if (newHash && oldUrlNoHash === newUrlNoHash && oldHash === newHash) {\n return true;\n }\n // If the urls are change, there's more than a hash change\n if (oldUrlNoHash !== newUrlNoHash) {\n return false;\n }\n // If the hash has changed, then it's a hash only change.\n // This check is necessary to handle both the enter and\n // leave hash === '' cases. The identity case falls through\n // and is treated as a next reload.\n return oldHash !== newHash;\n }\n scrollToHash(as) {\n const [, hash = ''] = as.split('#', 2);\n (0, _disablesmoothscroll.disableSmoothScrollDuringRouteTransition)(()=>{\n // Scroll to top if the hash is just `#` with no value or `#top`\n // To mirror browsers\n if (hash === '' || hash === 'top') {\n window.scrollTo(0, 0);\n return;\n }\n // Decode hash to make non-latin anchor works.\n const rawHash = decodeURIComponent(hash);\n // First we check if the element by id is found\n const idEl = document.getElementById(rawHash);\n if (idEl) {\n idEl.scrollIntoView();\n return;\n }\n // If there's no element with the id, we check the `name` property\n // To mirror browsers\n const nameEl = document.getElementsByName(rawHash)[0];\n if (nameEl) {\n nameEl.scrollIntoView();\n }\n }, {\n onlyHashChange: this.onlyAHashChange(as)\n });\n }\n urlIsNew(asPath) {\n return this.asPath !== asPath;\n }\n /**\n * Prefetch page code, you may wait for the data during page rendering.\n * This feature only works in production!\n * @param url the href of prefetched page\n * @param asPath the as path of the prefetched page\n */ async prefetch(url, asPath, options) {\n if (asPath === void 0) asPath = url;\n if (options === void 0) options = {};\n // Prefetch is not supported in development mode because it would trigger on-demand-entries\n if (true) {\n return;\n }\n if ( true && (0, _isbot.isBot)(window.navigator.userAgent)) {\n // No prefetches for bots that render the link since they are typically navigating\n // links via the equivalent of a hard navigation and hence never utilize these\n // prefetches.\n return;\n }\n let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n const urlPathname = parsed.pathname;\n let { pathname, query } = parsed;\n const originalPathname = pathname;\n if (false) {}\n const pages = await this.pageLoader.getPageList();\n let resolvedAs = asPath;\n const locale = typeof options.locale !== 'undefined' ? options.locale || undefined : this.locale;\n const isMiddlewareMatch = await matchesMiddleware({\n asPath: asPath,\n locale: locale,\n router: this\n });\n if (false) {}\n parsed.pathname = resolveDynamicRoute(parsed.pathname, pages);\n if ((0, _isdynamic.isDynamicRoute)(parsed.pathname)) {\n pathname = parsed.pathname;\n parsed.pathname = pathname;\n Object.assign(query, (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(parsed.pathname))((0, _parsepath.parsePath)(asPath).pathname) || {});\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n const data = false ? 0 : await withMiddlewareEffects({\n fetchData: ()=>fetchNextData({\n dataHref: this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname: originalPathname,\n query\n }),\n skipInterpolation: true,\n asPath: resolvedAs,\n locale\n }),\n hasMiddleware: true,\n isServerRender: false,\n parseJSON: true,\n inflightCache: this.sdc,\n persistCache: !this.isPreview,\n isPrefetch: true\n }),\n asPath: asPath,\n locale: locale,\n router: this\n });\n /**\n * If there was a rewrite we apply the effects of the rewrite on the\n * current parameters for the prefetch.\n */ if ((data == null ? void 0 : data.effect.type) === 'rewrite') {\n parsed.pathname = data.effect.resolvedHref;\n pathname = data.effect.resolvedHref;\n query = {\n ...query,\n ...data.effect.parsedAs.query\n };\n resolvedAs = data.effect.parsedAs.pathname;\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n /**\n * If there is a redirect to an external destination then we don't have\n * to prefetch content as it will be unused.\n */ if ((data == null ? void 0 : data.effect.type) === 'redirect-external') {\n return;\n }\n const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n if (await this._bfl(asPath, resolvedAs, options.locale, true)) {\n this.components[urlPathname] = {\n __appRouter: true\n };\n }\n await Promise.all([\n this.pageLoader._isSsg(route).then((isSsg)=>{\n return isSsg ? fetchNextData({\n dataHref: (data == null ? void 0 : data.json) ? data == null ? void 0 : data.dataHref : this.pageLoader.getDataHref({\n href: url,\n asPath: resolvedAs,\n locale: locale\n }),\n isServerRender: false,\n parseJSON: true,\n inflightCache: this.sdc,\n persistCache: !this.isPreview,\n isPrefetch: true,\n unstable_skipClientCache: options.unstable_skipClientCache || options.priority && !!true\n }).then(()=>false).catch(()=>false) : false;\n }),\n this.pageLoader[options.priority ? 'loadPage' : 'prefetch'](route)\n ]);\n }\n async fetchComponent(route) {\n const handleCancelled = getCancelledHandler({\n route,\n router: this\n });\n try {\n const componentResult = await this.pageLoader.loadPage(route);\n handleCancelled();\n return componentResult;\n } catch (err) {\n handleCancelled();\n throw err;\n }\n }\n _getData(fn) {\n let cancelled = false;\n const cancel = ()=>{\n cancelled = true;\n };\n this.clc = cancel;\n return fn().then((data)=>{\n if (cancel === this.clc) {\n this.clc = null;\n }\n if (cancelled) {\n const err = Object.defineProperty(new Error('Loading initial props cancelled'), \"__NEXT_ERROR_CODE\", {\n value: \"E405\",\n enumerable: false,\n configurable: true\n });\n err.cancelled = true;\n throw err;\n }\n return data;\n });\n }\n getInitialProps(Component, ctx) {\n const { Component: App } = this.components['/_app'];\n const AppTree = this._wrapApp(App);\n ctx.AppTree = AppTree;\n return (0, _utils.loadGetInitialProps)(App, {\n AppTree,\n Component,\n router: this,\n ctx\n });\n }\n get route() {\n return this.state.route;\n }\n get pathname() {\n return this.state.pathname;\n }\n get query() {\n return this.state.query;\n }\n get asPath() {\n return this.state.asPath;\n }\n get locale() {\n return this.state.locale;\n }\n get isFallback() {\n return this.state.isFallback;\n }\n get isPreview() {\n return this.state.isPreview;\n }\n constructor(pathname, query, as, { initialProps, pageLoader, App, wrapApp, Component, err, subscription, isFallback, locale, locales, defaultLocale, domainLocales, isPreview }){\n // Server Data Cache (full data requests)\n this.sdc = {};\n // Server Background Cache (HEAD requests)\n this.sbc = {};\n this.isFirstPopStateEvent = true;\n this._key = createKey();\n this.onPopState = (e)=>{\n const { isFirstPopStateEvent } = this;\n this.isFirstPopStateEvent = false;\n const state = e.state;\n if (!state) {\n // We get state as undefined for two reasons.\n // 1. With older safari (< 8) and older chrome (< 34)\n // 2. When the URL changed with #\n //\n // In the both cases, we don't need to proceed and change the route.\n // (as it's already changed)\n // But we can simply replace the state with the new changes.\n // Actually, for (1) we don't need to nothing. But it's hard to detect that event.\n // So, doing the following for (1) does no harm.\n const { pathname, query } = this;\n this.changeState('replaceState', (0, _formaturl.formatWithValidation)({\n pathname: (0, _addbasepath.addBasePath)(pathname),\n query\n }), (0, _utils.getURL)());\n return;\n }\n // __NA is used to identify if the history entry can be handled by the app-router.\n if (state.__NA) {\n window.location.reload();\n return;\n }\n if (!state.__N) {\n return;\n }\n // Safari fires popstateevent when reopening the browser.\n if (isFirstPopStateEvent && this.locale === state.options.locale && state.as === this.asPath) {\n return;\n }\n let forcedScroll;\n const { url, as, options, key } = state;\n if (false) {}\n this._key = key;\n const { pathname } = (0, _parserelativeurl.parseRelativeUrl)(url);\n // Make sure we don't re-render on initial load,\n // can be caused by navigating back from an external site\n if (this.isSsr && as === (0, _addbasepath.addBasePath)(this.asPath) && pathname === (0, _addbasepath.addBasePath)(this.pathname)) {\n return;\n }\n // If the downstream application returns falsy, return.\n // They will then be responsible for handling the event.\n if (this._bps && !this._bps(state)) {\n return;\n }\n this.change('replaceState', url, as, Object.assign({}, options, {\n shallow: options.shallow && this._shallow,\n locale: options.locale || this.defaultLocale,\n // @ts-ignore internal value not exposed on types\n _h: 0\n }), forcedScroll);\n };\n // represents the current component key\n const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n // set up the component cache (by route keys)\n this.components = {};\n // We should not keep the cache, if there's an error\n // Otherwise, this cause issues when when going back and\n // come again to the errored page.\n if (pathname !== '/_error') {\n this.components[route] = {\n Component,\n initial: true,\n props: initialProps,\n err,\n __N_SSG: initialProps && initialProps.__N_SSG,\n __N_SSP: initialProps && initialProps.__N_SSP\n };\n }\n this.components['/_app'] = {\n Component: App,\n styleSheets: []\n };\n // Backwards compat for Router.router.events\n // TODO: Should be remove the following major version as it was never documented\n this.events = Router.events;\n this.pageLoader = pageLoader;\n // if auto prerendered and dynamic route wait to update asPath\n // until after mount to prevent hydration mismatch\n const autoExportDynamic = (0, _isdynamic.isDynamicRoute)(pathname) && self.__NEXT_DATA__.autoExport;\n this.basePath = false || '';\n this.sub = subscription;\n this.clc = null;\n this._wrapApp = wrapApp;\n // make sure to ignore extra popState in safari on navigating\n // back from external site\n this.isSsr = true;\n this.isLocaleDomain = false;\n this.isReady = !!(self.__NEXT_DATA__.gssp || self.__NEXT_DATA__.gip || self.__NEXT_DATA__.isExperimentalCompile || self.__NEXT_DATA__.appGip && !self.__NEXT_DATA__.gsp || !autoExportDynamic && !self.location.search && !false);\n if (false) {}\n this.state = {\n route,\n pathname,\n query,\n asPath: autoExportDynamic ? pathname : as,\n isPreview: !!isPreview,\n locale: false ? 0 : undefined,\n isFallback\n };\n this._initialMatchesMiddlewarePromise = Promise.resolve(false);\n if (true) {\n // make sure \"as\" doesn't start with double slashes or else it can\n // throw an error as it's considered invalid\n if (!as.startsWith('//')) {\n // in order for `e.state` to work on the `onpopstate` event\n // we have to register the initial route upon initialization\n const options = {\n locale\n };\n const asPath = (0, _utils.getURL)();\n this._initialMatchesMiddlewarePromise = matchesMiddleware({\n router: this,\n locale,\n asPath\n }).then((matches)=>{\n // if middleware matches we leave resolving to the change function\n // as the server needs to resolve for correct priority\n ;\n options._shouldResolveHref = as !== pathname;\n this.changeState('replaceState', matches ? asPath : (0, _formaturl.formatWithValidation)({\n pathname: (0, _addbasepath.addBasePath)(pathname),\n query\n }), asPath, options);\n return matches;\n });\n }\n window.addEventListener('popstate', this.onPopState);\n // enable custom scroll restoration handling when available\n // otherwise fallback to browser's default handling\n if (false) {}\n }\n }\n}\nRouter.events = (0, _mitt.default)(); //# sourceMappingURL=router.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLDRCQUE0Qjs7Ozs7Ozs7Ozs7OztJQThtQlpBLFNBQVM7ZUFBVEE7OztlQWlES0M7O0lBOWpCQ0MsaUJBQWlCO2VBQWpCQTs7Ozs7aURBdkZjO3lDQUs3QjtvQ0FDZ0M7K0VBQ0M7aURBQ0o7aURBQ0E7MkVBQ25CO21DQUNrRDt1Q0FDcEM7OENBQ0U7MENBQ0Q7d0NBQ0Y7dUNBQ087Z0RBQ0Y7dUNBQ1Q7dUNBQ0E7MENBQ0c7NENBQ0U7eUNBQ0g7eUNBQ0E7eUNBQ0E7d0NBQ0Q7aURBQ1M7b0RBQ0c7MkNBQ0g7d0NBQ1Q7bUNBQ0w7a0NBQ0Q7MkNBQ1M7aURBQzJCO3VDQUVyQjtBQUVwQyxJQUFJQztBQUNKLElBQUlDLEtBQStCLEVBQUUsRUFJcEM7QUFnQ0QsU0FBU0s7SUFDUCxPQUFPQyxPQUFPQyxNQUFNLENBQUMscUJBQTRCLENBQTVCLElBQUlDLE1BQU0sb0JBQVY7ZUFBQTtvQkFBQTtzQkFBQTtJQUEyQixJQUFHO1FBQ2pEQyxXQUFXO0lBQ2I7QUFDRjtBQVNPLGVBQWVYLGtCQUNwQlksT0FBa0M7SUFFbEMsTUFBTUMsV0FBVyxNQUFNQyxRQUFRQyxPQUFPLENBQ3BDSCxRQUFRSSxNQUFNLENBQUNDLFVBQVUsQ0FBQ0MsYUFBYTtJQUV6QyxJQUFJLENBQUNMLFVBQVUsT0FBTztJQUV0QixNQUFNLEVBQUVNLFVBQVVDLFVBQVUsRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFBQSxFQUFVVCxRQUFRVSxNQUFNO0lBQ3pELDZGQUE2RjtJQUM3RixNQUFNQyxZQUFZQyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZSixjQUMxQkssQ0FBQUEsR0FBQUEsZ0JBQUFBLGNBQUFBLEVBQWVMLGNBQ2ZBO0lBQ0osTUFBTU0sMEJBQTBCQyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUM5QkMs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Z0IsUUFBUSxJQUFJO29CQUNaYTtvQkFDQVA7Z0JBQ0YsR0FBR2lFLElBQUksQ0FBQyxDQUFDWTtvQkFDUCxrRUFBa0U7b0JBQ2xFLHNEQUFzRDs7b0JBQ3BEdkYsUUFBZ0JxTixrQkFBa0IsR0FBR3RMLE9BQU94QjtvQkFFOUMsSUFBSSxDQUFDNk8sV0FBVyxDQUNkLGdCQUNBN0osVUFDSTdFLFNBQ0FxTixDQUFBQSxHQUFBQSxXQUFBQSxvQkFBb0IsRUFBQzt3QkFDbkJ4TixVQUFVUSxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZUjt3QkFDdEIyRTtvQkFDRixJQUNKeEUsUUFDQVY7b0JBRUYsT0FBT3VGO2dCQUNUO1lBQ0Y7WUFFQXNCLE9BQU9tUyxnQkFBZ0IsQ0FBQyxZQUFZLElBQUksQ0FBQ2QsVUFBVTtZQUVuRCwyREFBMkQ7WUFDM0QsbURBQW1EO1lBQ25ELElBQUk1WSxLQUFxQyxFQUFFLEVBSTFDO1FBQ0g7SUFDRjtBQXlyREY7QUFqNERxQkgsT0E2Q1o0UCxNQUFBQSxHQUFtQ21LLENBQUFBLEdBQUFBLE1BQUFBLE9BQUkiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHJvdXRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudFR5cGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRG9tYWluTG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2NvbmZpZydcbmltcG9ydCB0eXBlIHsgTWl0dEVtaXR0ZXIgfSBmcm9tICcuLi9taXR0J1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRVcmxRdWVyeSB9IGZyb20gJ3F1ZXJ5c3RyaW5nJ1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXJFdmVudCB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9yb3V0ZXInXG5pbXBvcnQgdHlwZSB7IFN0eWxlU2hlZXRUdXBsZSB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9wYWdlLWxvYWRlcidcbmltcG9ydCB0eXBlIHsgVXJsT2JqZWN0IH0gZnJvbSAndXJsJ1xuaW1wb3J0IHR5cGUgUGFnZUxvYWRlciBmcm9tICcuLi8uLi8uLi9jbGllbnQvcGFnZS1sb2FkZXInXG5pbXBvcnQgdHlwZSB7IEFwcENvbnRleHRUeXBlLCBOZXh0UGFnZUNvbnRleHQsIE5FWFRfREFUQSB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHsgcmVtb3ZlVHJhaWxpbmdTbGFzaCB9IGZyb20gJy4vdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoJ1xuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCxcbiAgaXNBc3NldEVycm9yLFxuICBtYXJrQXNzZXRFcnJvcixcbn0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L3JvdXRlLWxvYWRlcidcbmltcG9ydCB7IGhhbmRsZUNsaWVudFNjcmlwdExvYWQgfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvc2NyaXB0J1xuaW1wb3J0IGlzRXJyb3IsIHsgZ2V0UHJvcGVyRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9saWIvaXMtZXJyb3InXG5pbXBvcnQgeyBkZW5vcm1hbGl6ZVBhZ2VQYXRoIH0gZnJvbSAnLi4vcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aCdcbmltcG9ydCB7IG5vcm1hbGl6ZUxvY2FsZVBhdGggfSBmcm9tICcuLi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aCdcbmltcG9ydCBtaXR0IGZyb20gJy4uL21pdHQnXG5pbXBvcnQgeyBnZXRMb2NhdGlvbk9yaWdpbiwgZ2V0VVJMLCBsb2FkR2V0SW5pdGlhbFByb3BzLCBTVCB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHsgaXNEeW5hbWljUm91dGUgfSBmcm9tICcuL3V0aWxzL2lzLWR5bmFtaWMnXG5pbXBvcnQgeyBwYXJzZVJlbGF0aXZlVXJsIH0gZnJvbSAnLi91dGlscy9wYXJzZS1yZWxhdGl2ZS11cmwnXG5pbXBvcnQgeyBnZXRSb3V0ZU1hdGNoZXIgfSBmcm9tICcuL3V0aWxzL3JvdXRlLW1hdGNoZXInXG5pbXBvcnQgeyBnZXRSb3V0ZVJlZ2V4IH0gZnJvbSAnLi91dGlscy9yb3V0ZS1yZWdleCdcbmltcG9ydCB7IGZvcm1hdFdpdGhWYWxpZGF0aW9uIH0gZnJvbSAnLi91dGlscy9mb3JtYXQtdXJsJ1xuaW1wb3J0IHsgZGV0ZWN0RG9tYWluTG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L2RldGVjdC1kb21haW4tbG9jYWxlJ1xuaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi91dGlscy9wYXJzZS1wYXRoJ1xuaW1wb3J0IHsgYWRkTG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L2FkZC1sb2NhbGUnXG5pbXBvcnQgeyByZW1vdmVMb2NhbGUgfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvcmVtb3ZlLWxvY2FsZSdcbmltcG9ydCB7IHJlbW92ZUJhc2VQYXRoIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L3JlbW92ZS1iYXNlLXBhdGgnXG5pbXBvcnQgeyBhZGRCYXNlUGF0aCB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9hZGQtYmFzZS1wYXRoJ1xuaW1wb3J0IHsgaGFzQmFzZVBhdGggfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvaGFzLWJhc2UtcGF0aCdcbmltcG9ydCB7IHJlc29sdmVIcmVmIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L3Jlc29sdmUtaHJlZidcbmltcG9ydCB7IGlzQVBJUm91dGUgfSBmcm9tICcuLi8uLi8uLi9saWIvaXMtYXBpLXJvdXRlJ1xuaW1wb3J0IHsgZ2V0TmV4dFBhdGhuYW1lSW5mbyB9IGZyb20gJy4vdXRpbHMvZ2V0LW5leHQtcGF0aG5hbWUtaW5mbydcbmltcG9ydCB7IGZvcm1hdE5leHRQYXRobmFtZUluZm8gfSBmcm9tICcuL3V0aWxzL2Zvcm1hdC1uZXh0LXBhdGhuYW1lLWluZm8nXG5pbXBvcnQgeyBjb21wYXJlUm91dGVyU3RhdGVzIH0gZnJvbSAnLi91dGlscy9jb21wYXJlLXN0YXRlcydcbmltcG9ydCB7IGlzTG9jYWxVUkwgfSBmcm9tICcuL3V0aWxzL2lzLWxvY2FsLXVybCdcbmltcG9ydCB7IGlzQm90IH0gZnJvbSAnLi91dGlscy9pcy1ib3QnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSAnLi91dGlscy9vbWl0J1xuaW1wb3J0IHsgaW50ZXJwb2xhdGVBcyB9IGZyb20gJy4vdXRpbHMvaW50ZXJwb2xhdGUtYXMnXG5pbXBvcnQgeyBkaXNhYmxlU21vb3RoU2Nyb2xsRHVyaW5nUm91dGVUcmFuc2l0aW9uIH0gZnJvbSAnLi91dGlscy9kaXNhYmxlLXNtb290aC1zY3JvbGwnXG5pbXBvcnQgdHlwZSB7IFBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9yZXF1ZXN0L3BhcmFtcydcbmltcG9ydCB7IE1BVENIRURfUEFUSF9IRUFERVIgfSBmcm9tICcuLi8uLi8uLi9saWIvY29uc3RhbnRzJ1xuXG5sZXQgcmVzb2x2ZVJld3JpdGVzOiB0eXBlb2YgaW1wb3J0KCcuL3V0aWxzL3Jlc29sdmUtcmV3cml0ZXMnKS5kZWZhdWx0XG5pZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUykge1xuICByZXNvbHZlUmV3cml0ZXMgPSAoXG4gICAgcmVxdWlyZSgnLi91dGlscy9yZXNvbHZlLXJld3JpdGVzJykgYXMgdHlwZW9mIGltcG9ydCgnLi91dGlscy9yZXNvbHZlLXJld3JpdGVzJylcbiAgKS5kZWZhdWx0XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgLyogcHJvZCAqL1xuICAgIF9fTkVYVF9EQVRBX186IE5FWFRfREFUQVxuICB9XG59XG5cbmludGVyZmFjZSBSb3V0ZVByb3BlcnRpZXMge1xuICBzaGFsbG93OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBUcmFuc2l0aW9uT3B0aW9ucyB7XG4gIHNoYWxsb3c/OiBib29sZWFuXG4gIGxvY2FsZT86IHN0cmluZyB8IGZhbHNlXG4gIHNjcm9sbD86IGJvb2xlYW5cbiAgdW5zdGFibGVfc2tpcENsaWVudENhY2hlPzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgTmV4dEhpc3RvcnlTdGF0ZSB7XG4gIHVybDogc3RyaW5nXG4gIGFzOiBzdHJpbmdcbiAgb3B0aW9uczogVHJhbnNpdGlvbk9wdGlvbnNcbn1cblxuZXhwb3J0IHR5cGUgSGlzdG9yeVN0YXRlID1cbiAgfCBudWxsXG4gIHwgeyBfX05BOiB0cnVlOyBfX04/OiBmYWxzZSB9XG4gIHwgeyBfX046IGZhbHNlOyBfX05BPzogZmFsc2UgfVxuICB8ICh7IF9fTkE/OiBmYWxzZTsgX19OOiB0cnVlOyBrZXk6IHN0cmluZyB9ICYgTmV4dEhpc3RvcnlTdGF0ZSlcblxuZnVuY3Rpb24gYnVpbGRDYW5jZWxsYXRpb25FcnJvcigpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdSb3V0ZSBDYW5jZWxsZWQnKSwge1xuICAgIGNhbmNlbGxlZDogdHJ1ZSxcbiAgfSlcbn1cblxuaW50ZXJmYWNlIE1pZGRsZXdhcmVFZmZlY3RQYXJhbXM8VCBleHRlbmRzIEZldGNoRGF0YU91dHB1dD4ge1xuICBmZXRjaERhdGE/OiAoKSA9PiBQcm9taXNlPFQ+XG4gIGxvY2FsZT86IHN0cmluZ1xuICBhc1BhdGg6IHN0cmluZ1xuICByb3V0ZXI6IFJvdXRlclxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWF0Y2hlc01pZGRsZXdhcmU8VCBleHRlbmRzIEZldGNoRGF0YU91dHB1dD4oXG4gIG9wdGlvbnM6IE1pZGRsZXdhcmVFZmZlY3RQYXJhbXM8VD5cbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBtYXRjaGVycyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShcbiAgICBvcHRpb25zLnJvdXRlci5wYWdlTG9hZGVyLmdldE1pZGRsZXdhcmUoKVxuICApXG4gIGlmICghbWF0Y2hlcnMpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHsgcGF0aG5hbWU6IGFzUGF0aG5hbWUgfSA9IHBhcnNlUGF0aChvcHRpb25zLmFzUGF0aClcbiAgLy8gcmVtb3ZlIGJhc2VQYXRoIGZpcnN0IHNpbmNlIHBhdGggcHJlZml4IGhhcyB0byBiZSBpbiB0aGUgb3JkZXIgb2YgYC8ke2Jhc2VQYXRofS8ke2xvY2FsZX1gXG4gIGNvbnN0IGNsZWFuZWRBcyA9IGhhc0Jhc2VQYXRoKGFzUGF0aG5hbWUpXG4gICAgPyByZW1vdmVCYXNlUGF0aChhc1BhdGhuYW1lKVxuICAgIDogYXNQYXRobmFtZVxuICBjb25zdCBhc1dpdGhCYXNlUGF0aEFuZExvY2FsZSA9IGFkZEJhc2VQYXRoKFxuICAgIGFkZExvY2FsZShjbGVhbmVkQXMsIG9wdGlvbnMubG9jYWxlKVxuICApXG5cbiAgLy8gQ2hlY2sgb25seSBwYXRoIG1hdGNoIG9uIGNsaWVudC4gTWF0Y2hpbmcgXCJoYXNcIiBzaG91bGQgYmUgZG9uZSBvbiBzZXJ2ZXJcbiAgLy8gd2hlcmUgd2UgY2FuIGFjY2VzcyBtb3JlIGluZm8gc3VjaCBhcyBoZWFkZXJzLCBIdHRwT25seSBjb29raWUsIGV0Yy5cbiAgcmV0dXJuIG1hdGNoZXJzLnNvbWUoKG0pID0+XG4gICAgbmV3IFJlZ0V4cChtLnJlZ2V4cCkudGVzdChhc1dpdGhCYXNlUGF0aEFuZExvY2FsZSlcbiAgKVxufVxuXG5mdW5jdGlvbiBzdHJpcE9yaWdpbih1cmw6IHN0cmluZykge1xuICBjb25zdCBvcmlnaW4gPSBnZXRMb2NhdGlvbk9yaWdpbigpXG5cbiAgcmV0dXJuIHVybC5zdGFydHNXaXRoKG9yaWdpbikgPyB1cmwuc3Vic3RyaW5nKG9yaWdpbi5sZW5ndGgpIDogdXJsXG59XG5cbmZ1bmN0aW9uIHByZXBhcmVVcmxBcyhyb3V0ZXI6IE5leHRSb3V0ZXIsIHVybDogVXJsLCBhcz86IFVybCkge1xuICAvLyBJZiB1cmwgYW5kIGFzIHByb3ZpZGVkIGFzIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbixcbiAgLy8gd2UnbGwgZm9ybWF0IHRoZW0gaW50byB0aGUgc3RyaW5nIHZlcnNpb24gaGVyZS5cbiAgbGV0IFtyZXNvbHZlZEhyZWYsIHJlc29sdmVkQXNdID0gcmVzb2x2ZUhyZWYocm91dGVyLCB1cmwsIHRydWUpXG4gIGNvbnN0IG9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgY29uc3QgaHJlZldhc0Fic29sdXRlID0gcmVzb2x2ZWRIcmVmLnN0YXJ0c1dpdGgob3JpZ2luKVxuICBjb25zdCBhc1dhc0Fic29sdXRlID0gcmVzb2x2ZWRBcyAmJiByZXNvbHZlZEFzLnN0YXJ0c1dpdGgob3JpZ2luKVxuXG4gIHJlc29sdmVkSHJlZiA9IHN0cmlwT3JpZ2luKHJlc29sdmVkSHJlZilcbiAgcmVzb2x2ZWRBcyA9IHJlc29sdmVkQXMgPyBzdHJpcE9yaWdpbihyZXNvbHZlZEFzKSA6IHJlc29sdmVkQXNcblxuICBjb25zdCBwcmVwYXJlZFVybCA9IGhyZWZXYXNBYnNvbHV0ZSA/IHJlc29sdmVkSHJlZiA6IGFkZEJhc2VQYXRoKHJlc29sdmVkSHJlZilcbiAgY29uc3QgcHJlcGFyZWRBcyA9IGFzXG4gICAgPyBzdHJpcE9yaWdpbihyZXNvbHZlSHJlZihyb3V0ZXIsIGFzKSlcbiAgICA6IHJlc29sdmVkQXMgfHwgcmVzb2x2ZWRIcmVmXG5cbiAgcmV0dXJuIHtcbiAgICB1cmw6IHByZXBhcmVkVXJsLFxuICAgIGFzOiBhc1dhc0Fic29sdXRlID8gcHJlcGFyZWRBcyA6IGFkZEJhc2VQYXRoKHByZXBhcmVkQXMpLFxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEeW5hbWljUm91dGUocGF0aG5hbWU6IHN0cmluZywgcGFnZXM6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IGNsZWFuUGF0aG5hbWUgPSByZW1vdmVUcmFpbGluZ1NsYXNoKGRlbm9ybWFsaXplUGFnZVBhdGgocGF0aG5hbWUpKVxuICBpZiAoY2xlYW5QYXRobmFtZSA9PT0gJy80MDQnIHx8IGNsZWFuUGF0aG5hbWUgPT09ICcvX2Vycm9yJykge1xuICAgIHJldHVybiBwYXRobmFtZVxuICB9XG5cbiAgLy8gaGFuZGxlIHJlc29sdmluZyBocmVmIGZvciBkeW5hbWljIHJvdXRlc1xuICBpZiAoIXBhZ2VzLmluY2x1ZGVzKGNsZWFuUGF0aG5hbWUpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGFycmF5LWNhbGxiYWNrLXJldHVyblxuICAgIHBhZ2VzLnNvbWUoKHBhZ2UpID0+IHtcbiAgICAgIGlmIChpc0R5bmFtaWNSb3V0ZShwYWdlKSAmJiBnZXRSb3V0ZVJlZ2V4KHBhZ2UpLnJlLnRlc3QoY2xlYW5QYXRobmFtZSkpIHtcbiAgICAgICAgcGF0aG5hbWUgPSBwYWdlXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZXR1cm4gcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSlcbn1cblxuZnVuY3Rpb24gZ2V0TWlkZGxld2FyZURhdGE8VCBleHRlbmRzIEZldGNoRGF0YU91dHB1dD4oXG4gIHNvdXJjZTogc3RyaW5nLFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIG9wdGlvbnM6IE1pZGRsZXdhcmVFZmZlY3RQYXJhbXM8VD5cbikge1xuICBjb25zdCBuZXh0Q29uZmlnID0ge1xuICAgIGJhc2VQYXRoOiBvcHRpb25zLnJvdXRlci5iYXNlUGF0aCxcbiAgICBpMThuOiB7IGxvY2FsZXM6IG9wdGlvbnMucm91dGVyLmxvY2FsZXMgfSxcbiAgICB0cmFpbGluZ1NsYXNoOiBCb29sZWFuKHByb2Nlc3MuZW52Ll9fTkVYVF9UUkFJTElOR19TTEFTSCksXG4gIH1cbiAgY29uc3QgcmV3cml0ZUhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW5leHRqcy1yZXdyaXRlJylcblxuICBsZXQgcmV3cml0ZVRhcmdldCA9XG4gICAgcmV3cml0ZUhlYWRlciB8fCByZXNwb25zZS5oZWFkZXJzLmdldCgneC1uZXh0anMtbWF0Y2hlZC1wYXRoJylcblxuICBjb25zdCBtYXRjaGVkUGF0aCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KE1BVENIRURfUEFUSF9IRUFERVIpXG5cbiAgaWYgKFxuICAgIG1hdGNoZWRQYXRoICYmXG4gICAgIXJld3JpdGVUYXJnZXQgJiZcbiAgICAhbWF0Y2hlZFBhdGguaW5jbHVkZXMoJ19fbmV4dF9kYXRhX2NhdGNoYWxsJykgJiZcbiAgICAhbWF0Y2hlZFBhdGguaW5jbHVkZXMoJy9fZXJyb3InKSAmJlxuICAgICFtYXRjaGVkUGF0aC5pbmNsdWRlcygnLzQwNCcpXG4gICkge1xuICAgIC8vIGxldmVyYWdlIHgtbWF0Y2hlZC1wYXRoIHRvIGRldGVjdCBuZXh0LmNvbmZpZy5qcyByZXdyaXRlc1xuICAgIHJld3JpdGVUYXJnZXQgPSBtYXRjaGVkUGF0aFxuICB9XG5cbiAgaWYgKHJld3JpdGVUYXJnZXQpIHtcbiAgICBpZiAoXG4gICAgICByZXdyaXRlVGFyZ2V0LnN0YXJ0c1dpdGgoJy8nKSB8fFxuICAgICAgcHJvY2Vzcy5lbnYuX19ORVhUX0VYVEVSTkFMX01JRERMRVdBUkVfUkVXUklURV9SRVNPTFZFXG4gICAgKSB7XG4gICAgICBjb25zdCBwYXJzZWRSZXdyaXRlVGFyZ2V0ID0gcGFyc2VSZWxhdGl2ZVVybChyZXdyaXRlVGFyZ2V0KVxuICAgICAgY29uc3QgcGF0aG5hbWVJbmZvID0gZ2V0TmV4dFBhdGhuYW1lSW5mbyhwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lLCB7XG4gICAgICAgIG5leHRDb25maWcsXG4gICAgICAgIHBhcnNlRGF0YTogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBmc1BhdGhuYW1lID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZUluZm8ucGF0aG5hbWUpXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICBvcHRpb25zLnJvdXRlci5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KCksXG4gICAgICAgIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKSxcbiAgICAgIF0pLnRoZW4oKFtwYWdlcywgeyBfX3Jld3JpdGVzOiByZXdyaXRlcyB9XTogYW55KSA9PiB7XG4gICAgICAgIGxldCBhcyA9IGFkZExvY2FsZShwYXRobmFtZUluZm8ucGF0aG5hbWUsIHBhdGhuYW1lSW5mby5sb2NhbGUpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlzRHluYW1pY1JvdXRlKGFzKSB8fFxuICAgICAgICAgICghcmV3cml0ZUhlYWRlciAmJlxuICAgICAgICAgICAgcGFnZXMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZUxvY2FsZVBhdGgocmVtb3ZlQmFzZVBhdGgoYXMpLCBvcHRpb25zLnJvdXRlci5sb2NhbGVzKVxuICAgICAgICAgICAgICAgIC5wYXRobmFtZVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkU291cmNlID0gZ2V0TmV4dFBhdGhuYW1lSW5mbyhcbiAgICAgICAgICAgIHBhcnNlUmVsYXRpdmVVcmwoc291cmNlKS5wYXRobmFtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmV4dENvbmZpZzogcHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFU1xuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgOiBuZXh0Q29uZmlnLFxuICAgICAgICAgICAgICBwYXJzZURhdGE6IHRydWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKVxuXG4gICAgICAgICAgYXMgPSBhZGRCYXNlUGF0aChwYXJzZWRTb3VyY2UucGF0aG5hbWUpXG4gICAgICAgICAgcGFyc2VkUmV3cml0ZVRhcmdldC5wYXRobmFtZSA9IGFzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVSZXdyaXRlcyhcbiAgICAgICAgICAgIGFzLFxuICAgICAgICAgICAgcGFnZXMsXG4gICAgICAgICAgICByZXdyaXRlcyxcbiAgICAgICAgICAgIHBhcnNlZFJld3JpdGVUYXJnZXQucXVlcnksXG4gICAgICAgICAgICAocGF0aDogc3RyaW5nKSA9PiByZXNvbHZlRHluYW1pY1JvdXRlKHBhdGgsIHBhZ2VzKSxcbiAgICAgICAgICAgIG9wdGlvbnMucm91dGVyLmxvY2FsZXNcbiAgICAgICAgICApXG5cbiAgICAgICAgICBpZiAocmVzdWx0Lm1hdGNoZWRQYWdlKSB7XG4gICAgICAgICAgICBwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lID0gcmVzdWx0LnBhcnNlZEFzLnBhdGhuYW1lXG4gICAgICAgICAgICBhcyA9IHBhcnNlZFJld3JpdGVUYXJnZXQucGF0aG5hbWVcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFyc2VkUmV3cml0ZVRhcmdldC5xdWVyeSwgcmVzdWx0LnBhcnNlZEFzLnF1ZXJ5KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghcGFnZXMuaW5jbHVkZXMoZnNQYXRobmFtZSkpIHtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFBhdGhuYW1lID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZShmc1BhdGhuYW1lLCBwYWdlcylcblxuICAgICAgICAgIGlmIChyZXNvbHZlZFBhdGhuYW1lICE9PSBmc1BhdGhuYW1lKSB7XG4gICAgICAgICAgICBmc1BhdGhuYW1lID0gcmVzb2x2ZWRQYXRobmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkSHJlZiA9ICFwYWdlcy5pbmNsdWRlcyhmc1BhdGhuYW1lKVxuICAgICAgICAgID8gcmVzb2x2ZUR5bmFtaWNSb3V0ZShcbiAgICAgICAgICAgICAgbm9ybWFsaXplTG9jYWxlUGF0aChcbiAgICAgICAgICAgICAgICByZW1vdmVCYXNlUGF0aChwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lKSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLnJvdXRlci5sb2NhbGVzXG4gICAgICAgICAgICAgICkucGF0aG5hbWUsXG4gICAgICAgICAgICAgIHBhZ2VzXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBmc1BhdGhuYW1lXG5cbiAgICAgICAgaWYgKGlzRHluYW1pY1JvdXRlKHJlc29sdmVkSHJlZikpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaGVzID0gZ2V0Um91dGVNYXRjaGVyKGdldFJvdXRlUmVnZXgocmVzb2x2ZWRIcmVmKSkoYXMpXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJzZWRSZXdyaXRlVGFyZ2V0LnF1ZXJ5LCBtYXRjaGVzIHx8IHt9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAncmV3cml0ZScgYXMgY29uc3QsXG4gICAgICAgICAgcGFyc2VkQXM6IHBhcnNlZFJld3JpdGVUYXJnZXQsXG4gICAgICAgICAgcmVzb2x2ZWRIcmVmLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBzcmMgPSBwYXJzZVBhdGgoc291cmNlKVxuICAgIGNvbnN0IHBhdGhuYW1lID0gZm9ybWF0TmV4dFBhdGhuYW1lSW5mbyh7XG4gICAgICAuLi5nZXROZXh0UGF0aG5hbWVJbmZvKHNyYy5wYXRobmFtZSwgeyBuZXh0Q29uZmlnLCBwYXJzZURhdGE6IHRydWUgfSksXG4gICAgICBkZWZhdWx0TG9jYWxlOiBvcHRpb25zLnJvdXRlci5kZWZhdWx0TG9jYWxlLFxuICAgICAgYnVpbGRJZDogJycsXG4gICAgfSlcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgdHlwZTogJ3JlZGlyZWN0LWV4dGVybmFsJyBhcyBjb25zdCxcbiAgICAgIGRlc3RpbmF0aW9uOiBgJHtwYXRobmFtZX0ke3NyYy5xdWVyeX0ke3NyYy5oYXNofWAsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHJlZGlyZWN0VGFyZ2V0ID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtbmV4dGpzLXJlZGlyZWN0JylcblxuICBpZiAocmVkaXJlY3RUYXJnZXQpIHtcbiAgICBpZiAocmVkaXJlY3RUYXJnZXQuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBjb25zdCBzcmMgPSBwYXJzZVBhdGgocmVkaXJlY3RUYXJnZXQpXG4gICAgICBjb25zdCBwYXRobmFtZSA9IGZvcm1hdE5leHRQYXRobmFtZUluZm8oe1xuICAgICAgICAuLi5nZXROZXh0UGF0aG5hbWVJbmZvKHNyYy5wYXRobmFtZSwgeyBuZXh0Q29uZmlnLCBwYXJzZURhdGE6IHRydWUgfSksXG4gICAgICAgIGRlZmF1bHRMb2NhbGU6IG9wdGlvbnMucm91dGVyLmRlZmF1bHRMb2NhbGUsXG4gICAgICAgIGJ1aWxkSWQ6ICcnLFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIHR5cGU6ICdyZWRpcmVjdC1pbnRlcm5hbCcgYXMgY29uc3QsXG4gICAgICAgIG5ld0FzOiBgJHtwYXRobmFtZX0ke3NyYy5xdWVyeX0ke3NyYy5oYXNofWAsXG4gICAgICAgIG5ld1VybDogYCR7cGF0aG5hbWV9JHtzcmMucXVlcnl9JHtzcmMuaGFzaH1gLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHR5cGU6ICdyZWRpcmVjdC1leHRlcm5hbCcgYXMgY29uc3QsXG4gICAgICBkZXN0aW5hdGlvbjogcmVkaXJlY3RUYXJnZXQsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyB0eXBlOiAnbmV4dCcgYXMgY29uc3QgfSlcbn1cblxuaW50ZXJmYWNlIFdpdGhNaWRkbGV3YXJlRWZmZWN0c091dHB1dCBleHRlbmRzIEZldGNoRGF0YU91dHB1dCB7XG4gIGVmZmVjdDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBnZXRNaWRkbGV3YXJlRGF0YT4+XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdpdGhNaWRkbGV3YXJlRWZmZWN0czxUIGV4dGVuZHMgRmV0Y2hEYXRhT3V0cHV0PihcbiAgb3B0aW9uczogTWlkZGxld2FyZUVmZmVjdFBhcmFtczxUPlxuKTogUHJvbWlzZTxXaXRoTWlkZGxld2FyZUVmZmVjdHNPdXRwdXQgfCBudWxsPiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBhd2FpdCBtYXRjaGVzTWlkZGxld2FyZShvcHRpb25zKVxuICBpZiAoIW1hdGNoZXMgfHwgIW9wdGlvbnMuZmV0Y2hEYXRhKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBvcHRpb25zLmZldGNoRGF0YSgpXG5cbiAgY29uc3QgZWZmZWN0ID0gYXdhaXQgZ2V0TWlkZGxld2FyZURhdGEoZGF0YS5kYXRhSHJlZiwgZGF0YS5yZXNwb25zZSwgb3B0aW9ucylcblxuICByZXR1cm4ge1xuICAgIGRhdGFIcmVmOiBkYXRhLmRhdGFIcmVmLFxuICAgIGpzb246IGRhdGEuanNvbixcbiAgICByZXNwb25zZTogZGF0YS5yZXNwb25zZSxcbiAgICB0ZXh0OiBkYXRhLnRleHQsXG4gICAgY2FjaGVLZXk6IGRhdGEuY2FjaGVLZXksXG4gICAgZWZmZWN0LFxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFVybCA9IFVybE9iamVjdCB8IHN0cmluZ1xuXG5leHBvcnQgdHlwZSBCYXNlUm91dGVyID0ge1xuICByb3V0ZTogc3RyaW5nXG4gIHBhdGhuYW1lOiBzdHJpbmdcbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIGFzUGF0aDogc3RyaW5nXG4gIGJhc2VQYXRoOiBzdHJpbmdcbiAgbG9jYWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGxvY2FsZXM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICBkZWZhdWx0TG9jYWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGRvbWFpbkxvY2FsZXM/OiByZWFkb25seSBEb21haW5Mb2NhbGVbXSB8IHVuZGVmaW5lZFxuICBpc0xvY2FsZURvbWFpbjogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBOZXh0Um91dGVyID0gQmFzZVJvdXRlciAmXG4gIFBpY2s8XG4gICAgUm91dGVyLFxuICAgIHwgJ3B1c2gnXG4gICAgfCAncmVwbGFjZSdcbiAgICB8ICdyZWxvYWQnXG4gICAgfCAnYmFjaydcbiAgICB8ICdmb3J3YXJkJ1xuICAgIHwgJ3ByZWZldGNoJ1xuICAgIHwgJ2JlZm9yZVBvcFN0YXRlJ1xuICAgIHwgJ2V2ZW50cydcbiAgICB8ICdpc0ZhbGxiYWNrJ1xuICAgIHwgJ2lzUmVhZHknXG4gICAgfCAnaXNQcmV2aWV3J1xuICA+XG5cbmV4cG9ydCB0eXBlIFByZWZldGNoT3B0aW9ucyA9IHtcbiAgcHJpb3JpdHk/OiBib29sZWFuXG4gIGxvY2FsZT86IHN0cmluZyB8IGZhbHNlXG4gIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgUHJpdmF0ZVJvdXRlSW5mbyA9XG4gIHwgKE9taXQ8Q29tcGxldGVQcml2YXRlUm91dGVJbmZvLCAnc3R5bGVTaGVldHMnPiAmIHsgaW5pdGlhbDogdHJ1ZSB9KVxuICB8IENvbXBsZXRlUHJpdmF0ZVJvdXRlSW5mb1xuXG5leHBvcnQgdHlwZSBDb21wbGV0ZVByaXZhdGVSb3V0ZUluZm8gPSB7XG4gIENvbXBvbmVudDogQ29tcG9uZW50VHlwZVxuICBzdHlsZVNoZWV0czogU3R5bGVTaGVldFR1cGxlW11cbiAgX19OX1NTRz86IGJvb2xlYW5cbiAgX19OX1NTUD86IGJvb2xlYW5cbiAgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gIGVycj86IEVycm9yXG4gIGVycm9yPzogYW55XG4gIHJvdXRlPzogc3RyaW5nXG4gIHJlc29sdmVkQXM/OiBzdHJpbmdcbiAgcXVlcnk/OiBQYXJzZWRVcmxRdWVyeVxufVxuXG5leHBvcnQgdHlwZSBBcHBQcm9wcyA9IFBpY2s8Q29tcGxldGVQcml2YXRlUm91dGVJbmZvLCAnQ29tcG9uZW50JyB8ICdlcnInPiAmIHtcbiAgcm91dGVyOiBSb3V0ZXJcbn0gJiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG5leHBvcnQgdHlwZSBBcHBDb21wb25lbnQgPSBDb21wb25lbnRUeXBlPEFwcFByb3BzPlxuXG50eXBlIFN1YnNjcmlwdGlvbiA9IChcbiAgZGF0YTogUHJpdmF0ZVJvdXRlSW5mbyxcbiAgQXBwOiBBcHBDb21wb25lbnQsXG4gIHJlc2V0U2Nyb2xsOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsXG4pID0+IFByb21pc2U8dm9pZD5cblxudHlwZSBCZWZvcmVQb3BTdGF0ZUNhbGxiYWNrID0gKHN0YXRlOiBOZXh0SGlzdG9yeVN0YXRlKSA9PiBib29sZWFuXG5cbnR5cGUgQ29tcG9uZW50TG9hZENhbmNlbCA9ICgoKSA9PiB2b2lkKSB8IG51bGxcblxudHlwZSBIaXN0b3J5TWV0aG9kID0gJ3JlcGxhY2VTdGF0ZScgfCAncHVzaFN0YXRlJ1xuXG5jb25zdCBtYW51YWxTY3JvbGxSZXN0b3JhdGlvbiA9XG4gIHByb2Nlc3MuZW52Ll9fTkVYVF9TQ1JPTExfUkVTVE9SQVRJT04gJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgJ3Njcm9sbFJlc3RvcmF0aW9uJyBpbiB3aW5kb3cuaGlzdG9yeSAmJlxuICAhIShmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB2ID0gJ19fbmV4dCdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZXF1ZW5jZXNcbiAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHYsIHYpLCBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHYpLCB0cnVlXG4gICAgfSBjYXRjaCAobikge31cbiAgfSkoKVxuXG5jb25zdCBTU0dfREFUQV9OT1RfRk9VTkQgPSBTeW1ib2woJ1NTR19EQVRBX05PVF9GT1VORCcpXG5cbmZ1bmN0aW9uIGZldGNoUmV0cnkoXG4gIHVybDogc3RyaW5nLFxuICBhdHRlbXB0czogbnVtYmVyLFxuICBvcHRpb25zOiBQaWNrPFJlcXVlc3RJbml0LCAnbWV0aG9kJyB8ICdoZWFkZXJzJz5cbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgcmV0dXJuIGZldGNoKHVybCwge1xuICAgIC8vIENvb2tpZXMgYXJlIHJlcXVpcmVkIHRvIGJlIHByZXNlbnQgZm9yIE5leHQuanMnIFNTRyBcIlByZXZpZXcgTW9kZVwiLlxuICAgIC8vIENvb2tpZXMgbWF5IGFsc28gYmUgcmVxdWlyZWQgZm9yIGBnZXRTZXJ2ZXJTaWRlUHJvcHNgLlxuICAgIC8vXG4gICAgLy8gPiBgZmV0Y2hgIHdvbuKAmXQgc2VuZCBjb29raWVzLCB1bmxlc3MgeW91IHNldCB0aGUgY3JlZGVudGlhbHMgaW5pdFxuICAgIC8vID4gb3B0aW9uLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2hcbiAgICAvL1xuICAgIC8vID4gRm9yIG1heGltdW0gYnJvd3NlciBjb21wYXRpYmlsaXR5IHdoZW4gaXQgY29tZXMgdG8gc2VuZGluZyAmXG4gICAgLy8gPiByZWNlaXZpbmcgY29va2llcywgYWx3YXlzIHN1cHBseSB0aGUgYGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nYFxuICAgIC8vID4gb3B0aW9uIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgZGVmYXVsdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoI2NhdmVhdHNcbiAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kIHx8ICdHRVQnLFxuICAgIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuaGVhZGVycywge1xuICAgICAgJ3gtbmV4dGpzLWRhdGEnOiAnMScsXG4gICAgfSksXG4gIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuICFyZXNwb25zZS5vayAmJiBhdHRlbXB0cyA+IDEgJiYgcmVzcG9uc2Uuc3RhdHVzID49IDUwMFxuICAgICAgPyBmZXRjaFJldHJ5KHVybCwgYXR0ZW1wdHMgLSAxLCBvcHRpb25zKVxuICAgICAgOiByZXNwb25zZVxuICB9KVxufVxuXG5pbnRlcmZhY2UgRmV0Y2hEYXRhT3V0cHV0IHtcbiAgZGF0YUhyZWY6IHN0cmluZ1xuICBqc29uOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbFxuICByZXNwb25zZTogUmVzcG9uc2VcbiAgdGV4dDogc3RyaW5nXG4gIGNhY2hlS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIEZldGNoTmV4dERhdGFQYXJhbXMge1xuICBkYXRhSHJlZjogc3RyaW5nXG4gIGlzU2VydmVyUmVuZGVyOiBib29sZWFuXG4gIHBhcnNlSlNPTjogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBoYXNNaWRkbGV3YXJlPzogYm9vbGVhblxuICBpbmZsaWdodENhY2hlOiBOZXh0RGF0YUNhY2hlXG4gIHBlcnNpc3RDYWNoZTogYm9vbGVhblxuICBpc1ByZWZldGNoOiBib29sZWFuXG4gIGlzQmFja2dyb3VuZD86IGJvb2xlYW5cbiAgdW5zdGFibGVfc2tpcENsaWVudENhY2hlPzogYm9vbGVhblxufVxuXG5mdW5jdGlvbiB0cnlUb1BhcnNlQXNKU09OKHRleHQ6IHN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBmZXRjaE5leHREYXRhKHtcbiAgZGF0YUhyZWYsXG4gIGluZmxpZ2h0Q2FjaGUsXG4gIGlzUHJlZmV0Y2gsXG4gIGhhc01pZGRsZXdhcmUsXG4gIGlzU2VydmVyUmVuZGVyLFxuICBwYXJzZUpTT04sXG4gIHBlcnNpc3RDYWNoZSxcbiAgaXNCYWNrZ3JvdW5kLFxuICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUsXG59OiBGZXRjaE5leHREYXRhUGFyYW1zKTogUHJvbWlzZTxGZXRjaERhdGFPdXRwdXQ+IHtcbiAgY29uc3QgeyBocmVmOiBjYWNoZUtleSB9ID0gbmV3IFVSTChkYXRhSHJlZiwgd2luZG93LmxvY2F0aW9uLmhyZWYpXG4gIGNvbnN0IGdldERhdGEgPSAocGFyYW1zPzogeyBtZXRob2Q/OiAnSEVBRCcgfCAnR0VUJyB9KSA9PlxuICAgIGZldGNoUmV0cnkoZGF0YUhyZWYsIGlzU2VydmVyUmVuZGVyID8gMyA6IDEsIHtcbiAgICAgIGhlYWRlcnM6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHt9IGFzIEhlYWRlcnNJbml0LFxuICAgICAgICBpc1ByZWZldGNoID8geyBwdXJwb3NlOiAncHJlZmV0Y2gnIH0gOiB7fSxcbiAgICAgICAgaXNQcmVmZXRjaCAmJiBoYXNNaWRkbGV3YXJlID8geyAneC1taWRkbGV3YXJlLXByZWZldGNoJzogJzEnIH0gOiB7fSxcbiAgICAgICAgcHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEXG4gICAgICAgICAgPyB7ICd4LWRlcGxveW1lbnQtaWQnOiBwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSUQgfVxuICAgICAgICAgIDoge31cbiAgICAgICksXG4gICAgICBtZXRob2Q6IHBhcmFtcz8ubWV0aG9kID8/ICdHRVQnLFxuICAgIH0pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLm9rICYmIHBhcmFtcz8ubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgICAgICByZXR1cm4geyBkYXRhSHJlZiwgcmVzcG9uc2UsIHRleHQ6ICcnLCBqc29uOiB7fSwgY2FjaGVLZXkgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS50aGVuKCh0ZXh0KSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXaGVuIHRoZSBkYXRhIHJlc3BvbnNlIGlzIGEgcmVkaXJlY3QgYmVjYXVzZSBvZiBhIG1pZGRsZXdhcmVcbiAgICAgICAgICAgICAqIHdlIGRvIG5vdCBjb25zaWRlciBpdCBhbiBlcnJvci4gVGhlIGhlYWRlcnMgbXVzdCBicmluZyB0aGVcbiAgICAgICAgICAgICAqIG1hcHBlZCBsb2NhdGlvbi5cbiAgICAgICAgICAgICAqIFRPRE86IENoYW5nZSB0aGUgc3RhdHVzIGNvZGUgaW4gdGhlIGhhbmRsZXIuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaGFzTWlkZGxld2FyZSAmJlxuICAgICAgICAgICAgICBbMzAxLCAzMDIsIDMwNywgMzA4XS5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YUhyZWYsIHJlc3BvbnNlLCB0ZXh0LCBqc29uOiB7fSwgY2FjaGVLZXkgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgaWYgKHRyeVRvUGFyc2VBc0pTT04odGV4dCk/Lm5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGRhdGFIcmVmLFxuICAgICAgICAgICAgICAgICAganNvbjogeyBub3RGb3VuZDogU1NHX0RBVEFfTk9UX0ZPVU5EIH0sXG4gICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICBjYWNoZUtleSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHN0YXRpYyBwcm9wc2ApXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2Ugc2hvdWxkIG9ubHkgdHJpZ2dlciBhIHNlcnZlci1zaWRlIHRyYW5zaXRpb24gaWYgdGhpcyB3YXNcbiAgICAgICAgICAgICAqIGNhdXNlZCBvbiBhIGNsaWVudC1zaWRlIHRyYW5zaXRpb24uIE90aGVyd2lzZSwgd2UnZCBnZXQgaW50b1xuICAgICAgICAgICAgICogYW4gaW5maW5pdGUgbG9vcC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCFpc1NlcnZlclJlbmRlcikge1xuICAgICAgICAgICAgICBtYXJrQXNzZXRFcnJvcihlcnJvcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YUhyZWYsXG4gICAgICAgICAgICBqc29uOiBwYXJzZUpTT04gPyB0cnlUb1BhcnNlQXNKU09OKHRleHQpIDogbnVsbCxcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIGNhY2hlS2V5LFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXBlcnNpc3RDYWNoZSB8fFxuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgfHxcbiAgICAgICAgICBkYXRhLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW1pZGRsZXdhcmUtY2FjaGUnKSA9PT0gJ25vLWNhY2hlJ1xuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgaW5mbGlnaHRDYWNoZVtjYWNoZUtleV1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGlmICghdW5zdGFibGVfc2tpcENsaWVudENhY2hlKSB7XG4gICAgICAgICAgZGVsZXRlIGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIGNocm9tZVxuICAgICAgICAgIGVyci5tZXNzYWdlID09PSAnRmFpbGVkIHRvIGZldGNoJyB8fFxuICAgICAgICAgIC8vIGZpcmVmb3hcbiAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gJ05ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuJyB8fFxuICAgICAgICAgIC8vIHNhZmFyaVxuICAgICAgICAgIGVyci5tZXNzYWdlID09PSAnTG9hZCBmYWlsZWQnXG4gICAgICAgICkge1xuICAgICAgICAgIG1hcmtBc3NldEVycm9yKGVycilcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH0pXG5cbiAgLy8gd2hlbiBza2lwcGluZyBjbGllbnQgY2FjaGUgd2Ugd2FpdCB0byB1cGRhdGVcbiAgLy8gaW5mbGlnaHQgY2FjaGUgdW50aWwgc3VjY2Vzc2Z1bCBkYXRhIHJlc3BvbnNlXG4gIC8vIHRoaXMgYWxsb3dzIHJhY2luZyBjbGljayBldmVudCB3aXRoIGZldGNoaW5nIG5ld2VyIGRhdGFcbiAgLy8gd2l0aG91dCBibG9ja2luZyBuYXZpZ2F0aW9uIHdoZW4gc3RhbGUgZGF0YSBpcyBhdmFpbGFibGVcbiAgaWYgKHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSAmJiBwZXJzaXN0Q2FjaGUpIHtcbiAgICByZXR1cm4gZ2V0RGF0YSh7fSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgaWYgKGRhdGEucmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtbWlkZGxld2FyZS1jYWNoZScpICE9PSAnbm8tY2FjaGUnKSB7XG4gICAgICAgIC8vIG9ubHkgdXBkYXRlIGNhY2hlIGlmIG5vdCBtYXJrZWQgYXMgbm8tY2FjaGVcbiAgICAgICAgaW5mbGlnaHRDYWNoZVtjYWNoZUtleV0gPSBQcm9taXNlLnJlc29sdmUoZGF0YSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9KVxuICB9XG5cbiAgaWYgKGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaW5mbGlnaHRDYWNoZVtjYWNoZUtleV1cbiAgfVxuICByZXR1cm4gKGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldID0gZ2V0RGF0YShcbiAgICBpc0JhY2tncm91bmQgPyB7IG1ldGhvZDogJ0hFQUQnIH0gOiB7fVxuICApKVxufVxuXG5pbnRlcmZhY2UgTmV4dERhdGFDYWNoZSB7XG4gIFthc1BhdGg6IHN0cmluZ106IFByb21pc2U8RmV0Y2hEYXRhT3V0cHV0PlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlS2V5KCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgdXJsLFxuICByb3V0ZXIsXG59OiB7XG4gIHVybDogc3RyaW5nXG4gIHJvdXRlcjogUm91dGVyXG59KSB7XG4gIC8vIGVuc3VyZSB3ZSBkb24ndCB0cmlnZ2VyIGEgaGFyZCBuYXZpZ2F0aW9uIHRvIHRoZSBzYW1lXG4gIC8vIFVSTCBhcyB0aGlzIGNhbiBlbmQgdXAgd2l0aCBhbiBpbmZpbml0ZSByZWZyZXNoXG4gIGlmICh1cmwgPT09IGFkZEJhc2VQYXRoKGFkZExvY2FsZShyb3V0ZXIuYXNQYXRoLCByb3V0ZXIubG9jYWxlKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YXJpYW50OiBhdHRlbXB0ZWQgdG8gaGFyZCBuYXZpZ2F0ZSB0byB0aGUgc2FtZSBVUkwgJHt1cmx9ICR7bG9jYXRpb24uaHJlZn1gXG4gICAgKVxuICB9XG4gIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsXG59XG5cbmNvbnN0IGdldENhbmNlbGxlZEhhbmRsZXIgPSAoe1xuICByb3V0ZSxcbiAgcm91dGVyLFxufToge1xuICByb3V0ZTogc3RyaW5nXG4gIHJvdXRlcjogUm91dGVyXG59KSA9PiB7XG4gIGxldCBjYW5jZWxsZWQgPSBmYWxzZVxuICBjb25zdCBjYW5jZWwgPSAocm91dGVyLmNsYyA9ICgpID0+IHtcbiAgICBjYW5jZWxsZWQgPSB0cnVlXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsbGVkID0gKCkgPT4ge1xuICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoXG4gICAgICAgIGBBYm9ydCBmZXRjaGluZyBjb21wb25lbnQgZm9yIHJvdXRlOiBcIiR7cm91dGV9XCJgXG4gICAgICApXG4gICAgICBlcnJvci5jYW5jZWxsZWQgPSB0cnVlXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIGlmIChjYW5jZWwgPT09IHJvdXRlci5jbGMpIHtcbiAgICAgIHJvdXRlci5jbGMgPSBudWxsXG4gICAgfVxuICB9XG4gIHJldHVybiBoYW5kbGVDYW5jZWxsZWRcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVyIGltcGxlbWVudHMgQmFzZVJvdXRlciB7XG4gIGJhc2VQYXRoOiBzdHJpbmdcblxuICAvKipcbiAgICogTWFwIG9mIGFsbCBjb21wb25lbnRzIGxvYWRlZCBpbiBgUm91dGVyYFxuICAgKi9cbiAgY29tcG9uZW50czogeyBbcGF0aG5hbWU6IHN0cmluZ106IFByaXZhdGVSb3V0ZUluZm8gfVxuICAvLyBTZXJ2ZXIgRGF0YSBDYWNoZSAoZnVsbCBkYXRhIHJlcXVlc3RzKVxuICBzZGM6IE5leHREYXRhQ2FjaGUgPSB7fVxuICAvLyBTZXJ2ZXIgQmFja2dyb3VuZCBDYWNoZSAoSEVBRCByZXF1ZXN0cylcbiAgc2JjOiBOZXh0RGF0YUNhY2hlID0ge31cblxuICBzdWI6IFN1YnNjcmlwdGlvblxuICBjbGM6IENvbXBvbmVudExvYWRDYW5jZWxcbiAgcGFnZUxvYWRlcjogUGFnZUxvYWRlclxuICBfYnBzOiBCZWZvcmVQb3BTdGF0ZUNhbGxiYWNrIHwgdW5kZWZpbmVkXG4gIGV2ZW50czogTWl0dEVtaXR0ZXI8Um91dGVyRXZlbnQ+XG4gIF93cmFwQXBwOiAoQXBwOiBBcHBDb21wb25lbnQpID0+IGFueVxuICBpc1NzcjogYm9vbGVhblxuICBfaW5GbGlnaHRSb3V0ZT86IHN0cmluZyB8IHVuZGVmaW5lZFxuICBfc2hhbGxvdz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gIGRlZmF1bHRMb2NhbGU/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgZG9tYWluTG9jYWxlcz86IHJlYWRvbmx5IERvbWFpbkxvY2FsZVtdIHwgdW5kZWZpbmVkXG4gIGlzUmVhZHk6IGJvb2xlYW5cbiAgaXNMb2NhbGVEb21haW46IGJvb2xlYW5cbiAgaXNGaXJzdFBvcFN0YXRlRXZlbnQgPSB0cnVlXG4gIF9pbml0aWFsTWF0Y2hlc01pZGRsZXdhcmVQcm9taXNlOiBQcm9taXNlPGJvb2xlYW4+XG4gIC8vIHN0YXRpYyBlbnRyaWVzIGZpbHRlclxuICBfYmZsX3M/OiBpbXBvcnQoJy4uLy4uL2xpYi9ibG9vbS1maWx0ZXInKS5CbG9vbUZpbHRlclxuICAvLyBkeW5hbWljIGVudGlyZXMgZmlsdGVyXG4gIF9iZmxfZD86IGltcG9ydCgnLi4vLi4vbGliL2Jsb29tLWZpbHRlcicpLkJsb29tRmlsdGVyXG5cbiAgcHJpdmF0ZSBzdGF0ZTogUmVhZG9ubHk8e1xuICAgIHJvdXRlOiBzdHJpbmdcbiAgICBwYXRobmFtZTogc3RyaW5nXG4gICAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gICAgYXNQYXRoOiBzdHJpbmdcbiAgICBsb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGlzRmFsbGJhY2s6IGJvb2xlYW5cbiAgICBpc1ByZXZpZXc6IGJvb2xlYW5cbiAgfT5cblxuICBwcml2YXRlIF9rZXk6IHN0cmluZyA9IGNyZWF0ZUtleSgpXG5cbiAgc3RhdGljIGV2ZW50czogTWl0dEVtaXR0ZXI8Um91dGVyRXZlbnQ+ID0gbWl0dCgpXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGF0aG5hbWU6IHN0cmluZyxcbiAgICBxdWVyeTogUGFyc2VkVXJsUXVlcnksXG4gICAgYXM6IHN0cmluZyxcbiAgICB7XG4gICAgICBpbml0aWFsUHJvcHMsXG4gICAgICBwYWdlTG9hZGVyLFxuICAgICAgQXBwLFxuICAgICAgd3JhcEFwcCxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGVycixcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIGlzRmFsbGJhY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICBsb2NhbGVzLFxuICAgICAgZGVmYXVsdExvY2FsZSxcbiAgICAgIGRvbWFpbkxvY2FsZXMsXG4gICAgICBpc1ByZXZpZXcsXG4gICAgfToge1xuICAgICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb25cbiAgICAgIGluaXRpYWxQcm9wczogYW55XG4gICAgICBwYWdlTG9hZGVyOiBhbnlcbiAgICAgIENvbXBvbmVudDogQ29tcG9uZW50VHlwZVxuICAgICAgQXBwOiBBcHBDb21wb25lbnRcbiAgICAgIHdyYXBBcHA6IChXcmFwQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpID0+IGFueVxuICAgICAgZXJyPzogRXJyb3JcbiAgICAgIGlzRmFsbGJhY2s6IGJvb2xlYW5cbiAgICAgIGxvY2FsZT86IHN0cmluZ1xuICAgICAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdXG4gICAgICBkZWZhdWx0TG9jYWxlPzogc3RyaW5nXG4gICAgICBkb21haW5Mb2NhbGVzPzogcmVhZG9ubHkgRG9tYWluTG9jYWxlW11cbiAgICAgIGlzUHJldmlldz86IGJvb2xlYW5cbiAgICB9XG4gICkge1xuICAgIC8vIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgY29tcG9uZW50IGtleVxuICAgIGNvbnN0IHJvdXRlID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSlcblxuICAgIC8vIHNldCB1cCB0aGUgY29tcG9uZW50IGNhY2hlIChieSByb3V0ZSBrZXlzKVxuICAgIHRoaXMuY29tcG9uZW50cyA9IHt9XG4gICAgLy8gV2Ugc2hvdWxkIG5vdCBrZWVwIHRoZSBjYWNoZSwgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgIC8vIE90aGVyd2lzZSwgdGhpcyBjYXVzZSBpc3N1ZXMgd2hlbiB3aGVuIGdvaW5nIGJhY2sgYW5kXG4gICAgLy8gY29tZSBhZ2FpbiB0byB0aGUgZXJyb3JlZCBwYWdlLlxuICAgIGlmIChwYXRobmFtZSAhPT0gJy9fZXJyb3InKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudHNbcm91dGVdID0ge1xuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIGluaXRpYWw6IHRydWUsXG4gICAgICAgIHByb3BzOiBpbml0aWFsUHJvcHMsXG4gICAgICAgIGVycixcbiAgICAgICAgX19OX1NTRzogaW5pdGlhbFByb3BzICYmIGluaXRpYWxQcm9wcy5fX05fU1NHLFxuICAgICAgICBfX05fU1NQOiBpbml0aWFsUHJvcHMgJiYgaW5pdGlhbFByb3BzLl9fTl9TU1AsXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRzWycvX2FwcCddID0ge1xuICAgICAgQ29tcG9uZW50OiBBcHAgYXMgQ29tcG9uZW50VHlwZSxcbiAgICAgIHN0eWxlU2hlZXRzOiBbXG4gICAgICAgIC8qIC9fYXBwIGRvZXMgbm90IG5lZWQgaXRzIHN0eWxlc2hlZXRzIG1hbmFnZWQgKi9cbiAgICAgIF0sXG4gICAgfVxuXG4gICAgLy8gQmFja3dhcmRzIGNvbXBhdCBmb3IgUm91dGVyLnJvdXRlci5ldmVudHNcbiAgICAvLyBUT0RPOiBTaG91bGQgYmUgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbWFqb3IgdmVyc2lvbiBhcyBpdCB3YXMgbmV2ZXIgZG9jdW1lbnRlZFxuICAgIHRoaXMuZXZlbnRzID0gUm91dGVyLmV2ZW50c1xuXG4gICAgdGhpcy5wYWdlTG9hZGVyID0gcGFnZUxvYWRlclxuICAgIC8vIGlmIGF1dG8gcHJlcmVuZGVyZWQgYW5kIGR5bmFtaWMgcm91dGUgd2FpdCB0byB1cGRhdGUgYXNQYXRoXG4gICAgLy8gdW50aWwgYWZ0ZXIgbW91bnQgdG8gcHJldmVudCBoeWRyYXRpb24gbWlzbWF0Y2hcbiAgICBjb25zdCBhdXRvRXhwb3J0RHluYW1pYyA9XG4gICAgICBpc0R5bmFtaWNSb3V0ZShwYXRobmFtZSkgJiYgc2VsZi5fX05FWFRfREFUQV9fLmF1dG9FeHBvcnRcblxuICAgIHRoaXMuYmFzZVBhdGggPSBwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIHx8ICcnXG4gICAgdGhpcy5zdWIgPSBzdWJzY3JpcHRpb25cbiAgICB0aGlzLmNsYyA9IG51bGxcbiAgICB0aGlzLl93cmFwQXBwID0gd3JhcEFwcFxuICAgIC8vIG1ha2Ugc3VyZSB0byBpZ25vcmUgZXh0cmEgcG9wU3RhdGUgaW4gc2FmYXJpIG9uIG5hdmlnYXRpbmdcbiAgICAvLyBiYWNrIGZyb20gZXh0ZXJuYWwgc2l0ZVxuICAgIHRoaXMuaXNTc3IgPSB0cnVlXG4gICAgdGhpcy5pc0xvY2FsZURvbWFpbiA9IGZhbHNlXG4gICAgdGhpcy5pc1JlYWR5ID0gISEoXG4gICAgICBzZWxmLl9fTkVYVF9EQVRBX18uZ3NzcCB8fFxuICAgICAgc2VsZi5fX05FWFRfREFUQV9fLmdpcCB8fFxuICAgICAgc2VsZi5fX05FWFRfREFUQV9fLmlzRXhwZXJpbWVudGFsQ29tcGlsZSB8fFxuICAgICAgKHNlbGYuX19ORVhUX0RBVEFfXy5hcHBHaXAgJiYgIXNlbGYuX19ORVhUX0RBVEFfXy5nc3ApIHx8XG4gICAgICAoIWF1dG9FeHBvcnREeW5hbWljICYmXG4gICAgICAgICFzZWxmLmxvY2F0aW9uLnNlYXJjaCAmJlxuICAgICAgICAhcHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUylcbiAgICApXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgdGhpcy5sb2NhbGVzID0gbG9jYWxlc1xuICAgICAgdGhpcy5kZWZhdWx0TG9jYWxlID0gZGVmYXVsdExvY2FsZVxuICAgICAgdGhpcy5kb21haW5Mb2NhbGVzID0gZG9tYWluTG9jYWxlc1xuICAgICAgdGhpcy5pc0xvY2FsZURvbWFpbiA9ICEhZGV0ZWN0RG9tYWluTG9jYWxlKFxuICAgICAgICBkb21haW5Mb2NhbGVzLFxuICAgICAgICBzZWxmLmxvY2F0aW9uLmhvc3RuYW1lXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHJvdXRlLFxuICAgICAgcGF0aG5hbWUsXG4gICAgICBxdWVyeSxcbiAgICAgIGFzUGF0aDogYXV0b0V4cG9ydER5bmFtaWMgPyBwYXRobmFtZSA6IGFzLFxuICAgICAgaXNQcmV2aWV3OiAhIWlzUHJldmlldyxcbiAgICAgIGxvY2FsZTogcHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCA/IGxvY2FsZSA6IHVuZGVmaW5lZCxcbiAgICAgIGlzRmFsbGJhY2ssXG4gICAgfVxuXG4gICAgdGhpcy5faW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSlcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gbWFrZSBzdXJlIFwiYXNcIiBkb2Vzbid0IHN0YXJ0IHdpdGggZG91YmxlIHNsYXNoZXMgb3IgZWxzZSBpdCBjYW5cbiAgICAgIC8vIHRocm93IGFuIGVycm9yIGFzIGl0J3MgY29uc2lkZXJlZCBpbnZhbGlkXG4gICAgICBpZiAoIWFzLnN0YXJ0c1dpdGgoJy8vJykpIHtcbiAgICAgICAgLy8gaW4gb3JkZXIgZm9yIGBlLnN0YXRlYCB0byB3b3JrIG9uIHRoZSBgb25wb3BzdGF0ZWAgZXZlbnRcbiAgICAgICAgLy8gd2UgaGF2ZSB0byByZWdpc3RlciB0aGUgaW5pdGlhbCByb3V0ZSB1cG9uIGluaXRpYWxpemF0aW9uXG4gICAgICAgIGNvbnN0IG9wdGlvbnM6IFRyYW5zaXRpb25PcHRpb25zID0geyBsb2NhbGUgfVxuICAgICAgICBjb25zdCBhc1BhdGggPSBnZXRVUkwoKVxuXG4gICAgICAgIHRoaXMuX2luaXRpYWxNYXRjaGVzTWlkZGxld2FyZVByb21pc2UgPSBtYXRjaGVzTWlkZGxld2FyZSh7XG4gICAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBhc1BhdGgsXG4gICAgICAgIH0pLnRoZW4oKG1hdGNoZXMpID0+IHtcbiAgICAgICAgICAvLyBpZiBtaWRkbGV3YXJlIG1hdGNoZXMgd2UgbGVhdmUgcmVzb2x2aW5nIHRvIHRoZSBjaGFuZ2UgZnVuY3Rpb25cbiAgICAgICAgICAvLyBhcyB0aGUgc2VydmVyIG5lZWRzIHRvIHJlc29sdmUgZm9yIGNvcnJlY3QgcHJpb3JpdHlcbiAgICAgICAgICA7KG9wdGlvbnMgYXMgYW55KS5fc2hvdWxkUmVzb2x2ZUhyZWYgPSBhcyAhPT0gcGF0aG5hbWVcblxuICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoXG4gICAgICAgICAgICAncmVwbGFjZVN0YXRlJyxcbiAgICAgICAgICAgIG1hdGNoZXNcbiAgICAgICAgICAgICAgPyBhc1BhdGhcbiAgICAgICAgICAgICAgOiBmb3JtYXRXaXRoVmFsaWRhdGlvbih7XG4gICAgICAgICAgICAgICAgICBwYXRobmFtZTogYWRkQmFzZVBhdGgocGF0aG5hbWUpLFxuICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhc1BhdGgsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBtYXRjaGVzXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHRoaXMub25Qb3BTdGF0ZSlcblxuICAgICAgLy8gZW5hYmxlIGN1c3RvbSBzY3JvbGwgcmVzdG9yYXRpb24gaGFuZGxpbmcgd2hlbiBhdmFpbGFibGVcbiAgICAgIC8vIG90aGVyd2lzZSBmYWxsYmFjayB0byBicm93c2VyJ3MgZGVmYXVsdCBoYW5kbGluZ1xuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9TQ1JPTExfUkVTVE9SQVRJT04pIHtcbiAgICAgICAgaWYgKG1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgICAgd2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSAnbWFudWFsJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Qb3BTdGF0ZSA9IChlOiBQb3BTdGF0ZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgeyBpc0ZpcnN0UG9wU3RhdGVFdmVudCB9ID0gdGhpc1xuICAgIHRoaXMuaXNGaXJzdFBvcFN0YXRlRXZlbnQgPSBmYWxzZVxuXG4gICAgY29uc3Qgc3RhdGUgPSBlLnN0YXRlIGFzIEhpc3RvcnlTdGF0ZVxuXG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgLy8gV2UgZ2V0IHN0YXRlIGFzIHVuZGVmaW5lZCBmb3IgdHdvIHJlYXNvbnMuXG4gICAgICAvLyAgMS4gV2l0aCBvbGRlciBzYWZhcmkgKDwgOCkgYW5kIG9sZGVyIGNocm9tZSAoPCAzNClcbiAgICAgIC8vICAyLiBXaGVuIHRoZSBVUkwgY2hhbmdlZCB3aXRoICNcbiAgICAgIC8vXG4gICAgICAvLyBJbiB0aGUgYm90aCBjYXNlcywgd2UgZG9uJ3QgbmVlZCB0byBwcm9jZWVkIGFuZCBjaGFuZ2UgdGhlIHJvdXRlLlxuICAgICAgLy8gKGFzIGl0J3MgYWxyZWFkeSBjaGFuZ2VkKVxuICAgICAgLy8gQnV0IHdlIGNhbiBzaW1wbHkgcmVwbGFjZSB0aGUgc3RhdGUgd2l0aCB0aGUgbmV3IGNoYW5nZXMuXG4gICAgICAvLyBBY3R1YWxseSwgZm9yICgxKSB3ZSBkb24ndCBuZWVkIHRvIG5vdGhpbmcuIEJ1dCBpdCdzIGhhcmQgdG8gZGV0ZWN0IHRoYXQgZXZlbnQuXG4gICAgICAvLyBTbywgZG9pbmcgdGhlIGZvbGxvd2luZyBmb3IgKDEpIGRvZXMgbm8gaGFybS5cbiAgICAgIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5IH0gPSB0aGlzXG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFxuICAgICAgICAncmVwbGFjZVN0YXRlJyxcbiAgICAgICAgZm9ybWF0V2l0aFZhbGlkYXRpb24oeyBwYXRobmFtZTogYWRkQmFzZVBhdGgocGF0aG5hbWUpLCBxdWVyeSB9KSxcbiAgICAgICAgZ2V0VVJMKClcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIF9fTkEgaXMgdXNlZCB0byBpZGVudGlmeSBpZiB0aGUgaGlzdG9yeSBlbnRyeSBjYW4gYmUgaGFuZGxlZCBieSB0aGUgYXBwLXJvdXRlci5cbiAgICBpZiAoc3RhdGUuX19OQSkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXN0YXRlLl9fTikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIGZpcmVzIHBvcHN0YXRlZXZlbnQgd2hlbiByZW9wZW5pbmcgdGhlIGJyb3dzZXIuXG4gICAgaWYgKFxuICAgICAgaXNGaXJzdFBvcFN0YXRlRXZlbnQgJiZcbiAgICAgIHRoaXMubG9jYWxlID09PSBzdGF0ZS5vcHRpb25zLmxvY2FsZSAmJlxuICAgICAgc3RhdGUuYXMgPT09IHRoaXMuYXNQYXRoXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgZm9yY2VkU2Nyb2xsOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCB1bmRlZmluZWRcbiAgICBjb25zdCB7IHVybCwgYXMsIG9wdGlvbnMsIGtleSB9ID0gc3RhdGVcbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1NDUk9MTF9SRVNUT1JBVElPTikge1xuICAgICAgaWYgKG1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLl9rZXkgIT09IGtleSkge1xuICAgICAgICAgIC8vIFNuYXBzaG90IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uOlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgICAnX19uZXh0X3Njcm9sbF8nICsgdGhpcy5fa2V5LFxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHg6IHNlbGYucGFnZVhPZmZzZXQsIHk6IHNlbGYucGFnZVlPZmZzZXQgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgICAvLyBSZXN0b3JlIG9sZCBzY3JvbGwgcG9zaXRpb246XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdfX25leHRfc2Nyb2xsXycgKyBrZXkpXG4gICAgICAgICAgICBmb3JjZWRTY3JvbGwgPSBKU09OLnBhcnNlKHYhKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgZm9yY2VkU2Nyb2xsID0geyB4OiAwLCB5OiAwIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fa2V5ID0ga2V5XG5cbiAgICBjb25zdCB7IHBhdGhuYW1lIH0gPSBwYXJzZVJlbGF0aXZlVXJsKHVybClcblxuICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCByZS1yZW5kZXIgb24gaW5pdGlhbCBsb2FkLFxuICAgIC8vIGNhbiBiZSBjYXVzZWQgYnkgbmF2aWdhdGluZyBiYWNrIGZyb20gYW4gZXh0ZXJuYWwgc2l0ZVxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNTc3IgJiZcbiAgICAgIGFzID09PSBhZGRCYXNlUGF0aCh0aGlzLmFzUGF0aCkgJiZcbiAgICAgIHBhdGhuYW1lID09PSBhZGRCYXNlUGF0aCh0aGlzLnBhdGhuYW1lKVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGRvd25zdHJlYW0gYXBwbGljYXRpb24gcmV0dXJucyBmYWxzeSwgcmV0dXJuLlxuICAgIC8vIFRoZXkgd2lsbCB0aGVuIGJlIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgZXZlbnQuXG4gICAgaWYgKHRoaXMuX2JwcyAmJiAhdGhpcy5fYnBzKHN0YXRlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2UoXG4gICAgICAncmVwbGFjZVN0YXRlJyxcbiAgICAgIHVybCxcbiAgICAgIGFzLFxuICAgICAgT2JqZWN0LmFzc2lnbjx7fSwgVHJhbnNpdGlvbk9wdGlvbnMsIFRyYW5zaXRpb25PcHRpb25zPih7fSwgb3B0aW9ucywge1xuICAgICAgICBzaGFsbG93OiBvcHRpb25zLnNoYWxsb3cgJiYgdGhpcy5fc2hhbGxvdyxcbiAgICAgICAgbG9jYWxlOiBvcHRpb25zLmxvY2FsZSB8fCB0aGlzLmRlZmF1bHRMb2NhbGUsXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdmFsdWUgbm90IGV4cG9zZWQgb24gdHlwZXNcbiAgICAgICAgX2g6IDAsXG4gICAgICB9KSxcbiAgICAgIGZvcmNlZFNjcm9sbFxuICAgIClcbiAgfVxuXG4gIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyBiYWNrIGluIGhpc3RvcnlcbiAgICovXG4gIGJhY2soKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuYmFjaygpXG4gIH1cblxuICAvKipcbiAgICogR28gZm9yd2FyZCBpbiBoaXN0b3J5XG4gICAqL1xuICBmb3J3YXJkKCkge1xuICAgIHdpbmRvdy5oaXN0b3J5LmZvcndhcmQoKVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIGEgYHB1c2hTdGF0ZWAgd2l0aCBhcmd1bWVudHNcbiAgICogQHBhcmFtIHVybCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIGFzIG1hc2tzIGB1cmxgIGZvciB0aGUgYnJvd3NlclxuICAgKiBAcGFyYW0gb3B0aW9ucyBvYmplY3QgeW91IGNhbiBkZWZpbmUgYHNoYWxsb3dgIGFuZCBvdGhlciBvcHRpb25zXG4gICAqL1xuICBwdXNoKHVybDogVXJsLCBhcz86IFVybCwgb3B0aW9uczogVHJhbnNpdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfU0NST0xMX1JFU1RPUkFUSU9OKSB7XG4gICAgICAvLyBUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSB3aGVuIHdlIHVwZGF0ZSBoaXN0b3J5IGJlZm9yZSByb3V0ZSBjaGFuZ2VcbiAgICAgIC8vIGlzIGNvbXBsZXRlLCBhcyB0aGUgcG9wc3RhdGUgZXZlbnQgc2hvdWxkIGhhbmRsZSB0aGlzIGNhcHR1cmUuXG4gICAgICBpZiAobWFudWFsU2Nyb2xsUmVzdG9yYXRpb24pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBTbmFwc2hvdCBzY3JvbGwgcG9zaXRpb24gcmlnaHQgYmVmb3JlIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZTpcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgICAgJ19fbmV4dF9zY3JvbGxfJyArIHRoaXMuX2tleSxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHsgeDogc2VsZi5wYWdlWE9mZnNldCwgeTogc2VsZi5wYWdlWU9mZnNldCB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH1cbiAgICA7KHsgdXJsLCBhcyB9ID0gcHJlcGFyZVVybEFzKHRoaXMsIHVybCwgYXMpKVxuICAgIHJldHVybiB0aGlzLmNoYW5nZSgncHVzaFN0YXRlJywgdXJsLCBhcywgb3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBhIGByZXBsYWNlU3RhdGVgIHdpdGggYXJndW1lbnRzXG4gICAqIEBwYXJhbSB1cmwgb2YgdGhlIHJvdXRlXG4gICAqIEBwYXJhbSBhcyBtYXNrcyBgdXJsYCBmb3IgdGhlIGJyb3dzZXJcbiAgICogQHBhcmFtIG9wdGlvbnMgb2JqZWN0IHlvdSBjYW4gZGVmaW5lIGBzaGFsbG93YCBhbmQgb3RoZXIgb3B0aW9uc1xuICAgKi9cbiAgcmVwbGFjZSh1cmw6IFVybCwgYXM/OiBVcmwsIG9wdGlvbnM6IFRyYW5zaXRpb25PcHRpb25zID0ge30pIHtcbiAgICA7KHsgdXJsLCBhcyB9ID0gcHJlcGFyZVVybEFzKHRoaXMsIHVybCwgYXMpKVxuICAgIHJldHVybiB0aGlzLmNoYW5nZSgncmVwbGFjZVN0YXRlJywgdXJsLCBhcywgb3B0aW9ucylcbiAgfVxuXG4gIGFzeW5jIF9iZmwoXG4gICAgYXM6IHN0cmluZyxcbiAgICByZXNvbHZlZEFzPzogc3RyaW5nLFxuICAgIGxvY2FsZT86IHN0cmluZyB8IGZhbHNlLFxuICAgIHNraXBOYXZpZ2F0ZT86IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfUk9VVEVSX0ZJTFRFUl9FTkFCTEVEKSB7XG4gICAgICBpZiAoIXRoaXMuX2JmbF9zICYmICF0aGlzLl9iZmxfZCkge1xuICAgICAgICBjb25zdCB7IEJsb29tRmlsdGVyIH0gPVxuICAgICAgICAgIHJlcXVpcmUoJy4uLy4uL2xpYi9ibG9vbS1maWx0ZXInKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi8uLi9saWIvYmxvb20tZmlsdGVyJylcblxuICAgICAgICB0eXBlIEZpbHRlciA9IFJldHVyblR5cGU8XG4gICAgICAgICAgaW1wb3J0KCcuLi8uLi9saWIvYmxvb20tZmlsdGVyJykuQmxvb21GaWx0ZXJbJ2V4cG9ydCddXG4gICAgICAgID5cbiAgICAgICAgbGV0IHN0YXRpY0ZpbHRlckRhdGE6IEZpbHRlciB8IHVuZGVmaW5lZFxuICAgICAgICBsZXQgZHluYW1pY0ZpbHRlckRhdGE6IEZpbHRlciB8IHVuZGVmaW5lZFxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgOyh7XG4gICAgICAgICAgICBfX3JvdXRlckZpbHRlclN0YXRpYzogc3RhdGljRmlsdGVyRGF0YSxcbiAgICAgICAgICAgIF9fcm91dGVyRmlsdGVyRHluYW1pYzogZHluYW1pY0ZpbHRlckRhdGEsXG4gICAgICAgICAgfSA9IChhd2FpdCBnZXRDbGllbnRCdWlsZE1hbmlmZXN0KCkpIGFzIGFueSBhcyB7XG4gICAgICAgICAgICBfX3JvdXRlckZpbHRlclN0YXRpYz86IEZpbHRlclxuICAgICAgICAgICAgX19yb3V0ZXJGaWx0ZXJEeW5hbWljPzogRmlsdGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gZmFpbGVkIHRvIGxvYWQgYnVpbGQgbWFuaWZlc3QgaGFyZCBuYXZpZ2F0ZVxuICAgICAgICAgIC8vIHRvIGJlIHNhZmVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICBpZiAoc2tpcE5hdmlnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICB1cmw6IGFkZEJhc2VQYXRoKFxuICAgICAgICAgICAgICBhZGRMb2NhbGUoYXMsIGxvY2FsZSB8fCB0aGlzLmxvY2FsZSwgdGhpcy5kZWZhdWx0TG9jYWxlKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoKSA9PiB7fSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdXRlckZpbHRlclNWYWx1ZTogRmlsdGVyIHwgZmFsc2UgPSBwcm9jZXNzLmVudlxuICAgICAgICAgIC5fX05FWFRfQ0xJRU5UX1JPVVRFUl9TX0ZJTFRFUiBhcyBhbnlcblxuICAgICAgICBpZiAoIXN0YXRpY0ZpbHRlckRhdGEgJiYgcm91dGVyRmlsdGVyU1ZhbHVlKSB7XG4gICAgICAgICAgc3RhdGljRmlsdGVyRGF0YSA9IHJvdXRlckZpbHRlclNWYWx1ZSA/IHJvdXRlckZpbHRlclNWYWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm91dGVyRmlsdGVyRFZhbHVlOiBGaWx0ZXIgfCBmYWxzZSA9IHByb2Nlc3MuZW52XG4gICAgICAgICAgLl9fTkVYVF9DTElFTlRfUk9VVEVSX0RfRklMVEVSIGFzIGFueVxuXG4gICAgICAgIGlmICghZHluYW1pY0ZpbHRlckRhdGEgJiYgcm91dGVyRmlsdGVyRFZhbHVlKSB7XG4gICAgICAgICAgZHluYW1pY0ZpbHRlckRhdGEgPSByb3V0ZXJGaWx0ZXJEVmFsdWVcbiAgICAgICAgICAgID8gcm91dGVyRmlsdGVyRFZhbHVlXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRpY0ZpbHRlckRhdGE/Lm51bUhhc2hlcykge1xuICAgICAgICAgIHRoaXMuX2JmbF9zID0gbmV3IEJsb29tRmlsdGVyKFxuICAgICAgICAgICAgc3RhdGljRmlsdGVyRGF0YS5udW1JdGVtcyxcbiAgICAgICAgICAgIHN0YXRpY0ZpbHRlckRhdGEuZXJyb3JSYXRlXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMuX2JmbF9zLmltcG9ydChzdGF0aWNGaWx0ZXJEYXRhKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGR5bmFtaWNGaWx0ZXJEYXRhPy5udW1IYXNoZXMpIHtcbiAgICAgICAgICB0aGlzLl9iZmxfZCA9IG5ldyBCbG9vbUZpbHRlcihcbiAgICAgICAgICAgIGR5bmFtaWNGaWx0ZXJEYXRhLm51bUl0ZW1zLFxuICAgICAgICAgICAgZHluYW1pY0ZpbHRlckRhdGEuZXJyb3JSYXRlXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMuX2JmbF9kLmltcG9ydChkeW5hbWljRmlsdGVyRGF0YSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbWF0Y2hlc0JmbFN0YXRpYyA9IGZhbHNlXG4gICAgICBsZXQgbWF0Y2hlc0JmbER5bmFtaWMgPSBmYWxzZVxuICAgICAgY29uc3QgcGF0aHNUb0NoZWNrOiBBcnJheTx7IGFzPzogc3RyaW5nOyBhbGxvd01hdGNoQ3VycmVudD86IGJvb2xlYW4gfT4gPVxuICAgICAgICBbeyBhcyB9LCB7IGFzOiByZXNvbHZlZEFzIH1dXG5cbiAgICAgIGZvciAoY29uc3QgeyBhczogY3VyQXMsIGFsbG93TWF0Y2hDdXJyZW50IH0gb2YgcGF0aHNUb0NoZWNrKSB7XG4gICAgICAgIGlmIChjdXJBcykge1xuICAgICAgICAgIGNvbnN0IGFzTm9TbGFzaCA9IHJlbW92ZVRyYWlsaW5nU2xhc2goXG4gICAgICAgICAgICBuZXcgVVJMKGN1ckFzLCAnaHR0cDovL24nKS5wYXRobmFtZVxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBhc05vU2xhc2hMb2NhbGUgPSBhZGRCYXNlUGF0aChcbiAgICAgICAgICAgIGFkZExvY2FsZShhc05vU2xhc2gsIGxvY2FsZSB8fCB0aGlzLmxvY2FsZSlcbiAgICAgICAgICApXG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhbGxvd01hdGNoQ3VycmVudCB8fFxuICAgICAgICAgICAgYXNOb1NsYXNoICE9PVxuICAgICAgICAgICAgICByZW1vdmVUcmFpbGluZ1NsYXNoKG5ldyBVUkwodGhpcy5hc1BhdGgsICdodHRwOi8vbicpLnBhdGhuYW1lKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbWF0Y2hlc0JmbFN0YXRpYyA9XG4gICAgICAgICAgICAgIG1hdGNoZXNCZmxTdGF0aWMgfHxcbiAgICAgICAgICAgICAgISF0aGlzLl9iZmxfcz8uY29udGFpbnMoYXNOb1NsYXNoKSB8fFxuICAgICAgICAgICAgICAhIXRoaXMuX2JmbF9zPy5jb250YWlucyhhc05vU2xhc2hMb2NhbGUpXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsaXplZEFTIG9mIFthc05vU2xhc2gsIGFzTm9TbGFzaExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgYW55IHN1Yi1wYXRoIG9mIGFzIG1hdGNoZXMgYSBkeW5hbWljIGZpbHRlciBwYXRoXG4gICAgICAgICAgICAgIC8vIGl0IHNob3VsZCBiZSBoYXJkIG5hdmlnYXRlZFxuICAgICAgICAgICAgICBjb25zdCBjdXJBc1BhcnRzID0gbm9ybWFsaXplZEFTLnNwbGl0KCcvJylcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgIW1hdGNoZXNCZmxEeW5hbWljICYmIGkgPCBjdXJBc1BhcnRzLmxlbmd0aCArIDE7XG4gICAgICAgICAgICAgICAgaSsrXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYXJ0ID0gY3VyQXNQYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJylcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhcnQgJiYgdGhpcy5fYmZsX2Q/LmNvbnRhaW5zKGN1cnJlbnRQYXJ0KSkge1xuICAgICAgICAgICAgICAgICAgbWF0Y2hlc0JmbER5bmFtaWMgPSB0cnVlXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgY2xpZW50IHJvdXRlciBmaWx0ZXIgaXMgbWF0Y2hlZCB0aGVuIHdlIHRyaWdnZXJcbiAgICAgICAgICAgIC8vIGEgaGFyZCBuYXZpZ2F0aW9uXG4gICAgICAgICAgICBpZiAobWF0Y2hlc0JmbFN0YXRpYyB8fCBtYXRjaGVzQmZsRHluYW1pYykge1xuICAgICAgICAgICAgICBpZiAoc2tpcE5hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICAgICAgdXJsOiBhZGRCYXNlUGF0aChcbiAgICAgICAgICAgICAgICAgIGFkZExvY2FsZShhcywgbG9jYWxlIHx8IHRoaXMubG9jYWxlLCB0aGlzLmRlZmF1bHRMb2NhbGUpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoKSA9PiB7fSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoYW5nZShcbiAgICBtZXRob2Q6IEhpc3RvcnlNZXRob2QsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYXM6IHN0cmluZyxcbiAgICBvcHRpb25zOiBUcmFuc2l0aW9uT3B0aW9ucyxcbiAgICBmb3JjZWRTY3JvbGw/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFpc0xvY2FsVVJMKHVybCkpIHtcbiAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsLCByb3V0ZXI6IHRoaXMgfSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICAvLyBXQVJOSU5HOiBgX2hgIGlzIGFuIGludGVybmFsIG9wdGlvbiBmb3IgaGFuZGluZyBOZXh0LmpzIGNsaWVudC1zaWRlXG4gICAgLy8gaHlkcmF0aW9uLiBZb3VyIGFwcCBzaG91bGQgX25ldmVyXyB1c2UgdGhpcyBwcm9wZXJ0eS4gSXQgbWF5IGNoYW5nZSBhdFxuICAgIC8vIGFueSB0aW1lIHdpdGhvdXQgbm90aWNlLlxuICAgIGNvbnN0IGlzUXVlcnlVcGRhdGluZyA9IChvcHRpb25zIGFzIGFueSkuX2ggPT09IDFcblxuICAgIGlmICghaXNRdWVyeVVwZGF0aW5nICYmICFvcHRpb25zLnNoYWxsb3cpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2JmbChhcywgdW5kZWZpbmVkLCBvcHRpb25zLmxvY2FsZSlcbiAgICB9XG5cbiAgICBsZXQgc2hvdWxkUmVzb2x2ZUhyZWYgPVxuICAgICAgaXNRdWVyeVVwZGF0aW5nIHx8XG4gICAgICAob3B0aW9ucyBhcyBhbnkpLl9zaG91bGRSZXNvbHZlSHJlZiB8fFxuICAgICAgcGFyc2VQYXRoKHVybCkucGF0aG5hbWUgPT09IHBhcnNlUGF0aChhcykucGF0aG5hbWVcblxuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgfVxuXG4gICAgLy8gZm9yIHN0YXRpYyBwYWdlcyB3aXRoIHF1ZXJ5IHBhcmFtcyBpbiB0aGUgVVJMIHdlIGRlbGF5XG4gICAgLy8gbWFya2luZyB0aGUgcm91dGVyIHJlYWR5IHVudGlsIGFmdGVyIHRoZSBxdWVyeSBpcyB1cGRhdGVkXG4gICAgLy8gb3IgYSBuYXZpZ2F0aW9uIGhhcyBvY2N1cnJlZFxuICAgIGNvbnN0IHJlYWR5U3RhdGVDaGFuZ2UgPSB0aGlzLmlzUmVhZHkgIT09IHRydWVcbiAgICB0aGlzLmlzUmVhZHkgPSB0cnVlXG4gICAgY29uc3QgaXNTc3IgPSB0aGlzLmlzU3NyXG5cbiAgICBpZiAoIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgdGhpcy5pc1NzciA9IGZhbHNlXG4gICAgfVxuXG4gICAgLy8gaWYgYSByb3V0ZSB0cmFuc2l0aW9uIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgYmVmb3JlXG4gICAgLy8gdGhlIHF1ZXJ5IHVwZGF0aW5nIGlzIHRyaWdnZXJlZCBpZ25vcmUgcXVlcnkgdXBkYXRpbmdcbiAgICBpZiAoaXNRdWVyeVVwZGF0aW5nICYmIHRoaXMuY2xjKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2TG9jYWxlID0gbmV4dFN0YXRlLmxvY2FsZVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgIG5leHRTdGF0ZS5sb2NhbGUgPVxuICAgICAgICBvcHRpb25zLmxvY2FsZSA9PT0gZmFsc2VcbiAgICAgICAgICA/IHRoaXMuZGVmYXVsdExvY2FsZVxuICAgICAgICAgIDogb3B0aW9ucy5sb2NhbGUgfHwgbmV4dFN0YXRlLmxvY2FsZVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBvcHRpb25zLmxvY2FsZSA9IG5leHRTdGF0ZS5sb2NhbGVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkQXMgPSBwYXJzZVJlbGF0aXZlVXJsKFxuICAgICAgICBoYXNCYXNlUGF0aChhcykgPyByZW1vdmVCYXNlUGF0aChhcykgOiBhc1xuICAgICAgKVxuICAgICAgY29uc3QgbG9jYWxlUGF0aFJlc3VsdCA9IG5vcm1hbGl6ZUxvY2FsZVBhdGgoXG4gICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lLFxuICAgICAgICB0aGlzLmxvY2FsZXNcbiAgICAgIClcblxuICAgICAgaWYgKGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGUpIHtcbiAgICAgICAgbmV4dFN0YXRlLmxvY2FsZSA9IGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGVcbiAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUgPSBhZGRCYXNlUGF0aChwYXJzZWRBcy5wYXRobmFtZSlcbiAgICAgICAgYXMgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWRBcylcbiAgICAgICAgdXJsID0gYWRkQmFzZVBhdGgoXG4gICAgICAgICAgbm9ybWFsaXplTG9jYWxlUGF0aChcbiAgICAgICAgICAgIGhhc0Jhc2VQYXRoKHVybCkgPyByZW1vdmVCYXNlUGF0aCh1cmwpIDogdXJsLFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVzXG4gICAgICAgICAgKS5wYXRobmFtZVxuICAgICAgICApXG4gICAgICB9XG4gICAgICBsZXQgZGlkTmF2aWdhdGUgPSBmYWxzZVxuXG4gICAgICAvLyB3ZSBuZWVkIHRvIHdyYXAgdGhpcyBpbiB0aGUgZW52IGNoZWNrIGFnYWluIHNpbmNlIHJlZ2VuZXJhdG9yIHJ1bnRpbWVcbiAgICAgIC8vIG1vdmVzIHRoaXMgb24gaXRzIG93biBkdWUgdG8gdGhlIHJldHVyblxuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgICAgLy8gaWYgdGhlIGxvY2FsZSBpc24ndCBjb25maWd1cmVkIGhhcmQgbmF2aWdhdGUgdG8gc2hvdyA0MDQgcGFnZVxuICAgICAgICBpZiAoIXRoaXMubG9jYWxlcz8uaW5jbHVkZXMobmV4dFN0YXRlLmxvY2FsZSEpKSB7XG4gICAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUgPSBhZGRMb2NhbGUocGFyc2VkQXMucGF0aG5hbWUsIG5leHRTdGF0ZS5sb2NhbGUpXG4gICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgdXJsOiBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWRBcyksXG4gICAgICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyB0aGlzIHdhcyBwcmV2aW91c2x5IGEgcmV0dXJuIGJ1dCB3YXMgcmVtb3ZlZCBpbiBmYXZvclxuICAgICAgICAgIC8vIG9mIGJldHRlciBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2l0aCByZWdlbmVyYXRvciBydW50aW1lXG4gICAgICAgICAgZGlkTmF2aWdhdGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV0ZWN0ZWREb21haW4gPSBkZXRlY3REb21haW5Mb2NhbGUoXG4gICAgICAgIHRoaXMuZG9tYWluTG9jYWxlcyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBuZXh0U3RhdGUubG9jYWxlXG4gICAgICApXG5cbiAgICAgIC8vIHdlIG5lZWQgdG8gd3JhcCB0aGlzIGluIHRoZSBlbnYgY2hlY2sgYWdhaW4gc2luY2UgcmVnZW5lcmF0b3IgcnVudGltZVxuICAgICAgLy8gbW92ZXMgdGhpcyBvbiBpdHMgb3duIGR1ZSB0byB0aGUgcmV0dXJuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAvLyBpZiB3ZSBhcmUgbmF2aWdhdGluZyB0byBhIGRvbWFpbiBsb2NhbGUgZW5zdXJlIHdlIHJlZGlyZWN0IHRvIHRoZVxuICAgICAgICAvLyBjb3JyZWN0IGRvbWFpblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWRpZE5hdmlnYXRlICYmXG4gICAgICAgICAgZGV0ZWN0ZWREb21haW4gJiZcbiAgICAgICAgICB0aGlzLmlzTG9jYWxlRG9tYWluICYmXG4gICAgICAgICAgc2VsZi5sb2NhdGlvbi5ob3N0bmFtZSAhPT0gZGV0ZWN0ZWREb21haW4uZG9tYWluXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGFzTm9CYXNlUGF0aCA9IHJlbW92ZUJhc2VQYXRoKGFzKVxuICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgIHVybDogYGh0dHAke2RldGVjdGVkRG9tYWluLmh0dHAgPyAnJyA6ICdzJ306Ly8ke1xuICAgICAgICAgICAgICBkZXRlY3RlZERvbWFpbi5kb21haW5cbiAgICAgICAgICAgIH0ke2FkZEJhc2VQYXRoKFxuICAgICAgICAgICAgICBgJHtcbiAgICAgICAgICAgICAgICBuZXh0U3RhdGUubG9jYWxlID09PSBkZXRlY3RlZERvbWFpbi5kZWZhdWx0TG9jYWxlXG4gICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICA6IGAvJHtuZXh0U3RhdGUubG9jYWxlfWBcbiAgICAgICAgICAgICAgfSR7YXNOb0Jhc2VQYXRoID09PSAnLycgPyAnJyA6IGFzTm9CYXNlUGF0aH1gIHx8ICcvJ1xuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gdGhpcyB3YXMgcHJldmlvdXNseSBhIHJldHVybiBidXQgd2FzIHJlbW92ZWQgaW4gZmF2b3JcbiAgICAgICAgICAvLyBvZiBiZXR0ZXIgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdpdGggcmVnZW5lcmF0b3IgcnVudGltZVxuICAgICAgICAgIGRpZE5hdmlnYXRlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkaWROYXZpZ2F0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFya2luZyByb3V0ZSBjaGFuZ2VzIGFzIGEgbmF2aWdhdGlvbiBzdGFydCBlbnRyeVxuICAgIGlmIChTVCkge1xuICAgICAgcGVyZm9ybWFuY2UubWFyaygncm91dGVDaGFuZ2UnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhbGxvdyA9IGZhbHNlLCBzY3JvbGwgPSB0cnVlIH0gPSBvcHRpb25zXG4gICAgY29uc3Qgcm91dGVQcm9wcyA9IHsgc2hhbGxvdyB9XG5cbiAgICBpZiAodGhpcy5faW5GbGlnaHRSb3V0ZSAmJiB0aGlzLmNsYykge1xuICAgICAgaWYgKCFpc1Nzcikge1xuICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXG4gICAgICAgICAgJ3JvdXRlQ2hhbmdlRXJyb3InLFxuICAgICAgICAgIGJ1aWxkQ2FuY2VsbGF0aW9uRXJyb3IoKSxcbiAgICAgICAgICB0aGlzLl9pbkZsaWdodFJvdXRlLFxuICAgICAgICAgIHJvdXRlUHJvcHNcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgdGhpcy5jbGMoKVxuICAgICAgdGhpcy5jbGMgPSBudWxsXG4gICAgfVxuXG4gICAgYXMgPSBhZGRCYXNlUGF0aChcbiAgICAgIGFkZExvY2FsZShcbiAgICAgICAgaGFzQmFzZVBhdGgoYXMpID8gcmVtb3ZlQmFzZVBhdGgoYXMpIDogYXMsXG4gICAgICAgIG9wdGlvbnMubG9jYWxlLFxuICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGVcbiAgICAgIClcbiAgICApXG4gICAgY29uc3QgY2xlYW5lZEFzID0gcmVtb3ZlTG9jYWxlKFxuICAgICAgaGFzQmFzZVBhdGgoYXMpID8gcmVtb3ZlQmFzZVBhdGgoYXMpIDogYXMsXG4gICAgICBuZXh0U3RhdGUubG9jYWxlXG4gICAgKVxuICAgIHRoaXMuX2luRmxpZ2h0Um91dGUgPSBhc1xuXG4gICAgY29uc3QgbG9jYWxlQ2hhbmdlID0gcHJldkxvY2FsZSAhPT0gbmV4dFN0YXRlLmxvY2FsZVxuXG4gICAgLy8gSWYgdGhlIHVybCBjaGFuZ2UgaXMgb25seSByZWxhdGVkIHRvIGEgaGFzaCBjaGFuZ2VcbiAgICAvLyBXZSBzaG91bGQgbm90IHByb2NlZWQuIFdlIHNob3VsZCBvbmx5IGNoYW5nZSB0aGUgc3RhdGUuXG5cbiAgICBpZiAoIWlzUXVlcnlVcGRhdGluZyAmJiB0aGlzLm9ubHlBSGFzaENoYW5nZShjbGVhbmVkQXMpICYmICFsb2NhbGVDaGFuZ2UpIHtcbiAgICAgIG5leHRTdGF0ZS5hc1BhdGggPSBjbGVhbmVkQXNcbiAgICAgIFJvdXRlci5ldmVudHMuZW1pdCgnaGFzaENoYW5nZVN0YXJ0JywgYXMsIHJvdXRlUHJvcHMpXG4gICAgICAvLyBUT0RPOiBkbyB3ZSBuZWVkIHRoZSByZXNvbHZlZCBocmVmIHdoZW4gb25seSBhIGhhc2ggY2hhbmdlP1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShtZXRob2QsIHVybCwgYXMsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2Nyb2xsOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9IYXNoKGNsZWFuZWRBcylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0KG5leHRTdGF0ZSwgdGhpcy5jb21wb25lbnRzW25leHRTdGF0ZS5yb3V0ZV0sIG51bGwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGlzRXJyb3IoZXJyKSAmJiBlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KCdyb3V0ZUNoYW5nZUVycm9yJywgZXJyLCBjbGVhbmVkQXMsIHJvdXRlUHJvcHMpXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9XG5cbiAgICAgIFJvdXRlci5ldmVudHMuZW1pdCgnaGFzaENoYW5nZUNvbXBsZXRlJywgYXMsIHJvdXRlUHJvcHMpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGxldCBwYXJzZWQgPSBwYXJzZVJlbGF0aXZlVXJsKHVybClcbiAgICBsZXQgeyBwYXRobmFtZSwgcXVlcnkgfSA9IHBhcnNlZFxuXG4gICAgLy8gVGhlIGJ1aWxkIG1hbmlmZXN0IG5lZWRzIHRvIGJlIGxvYWRlZCBiZWZvcmUgYXV0by1zdGF0aWMgZHluYW1pYyBwYWdlc1xuICAgIC8vIGdldCB0aGVpciBxdWVyeSBwYXJhbWV0ZXJzIHRvIGFsbG93IGVuc3VyaW5nIHRoZXkgY2FuIGJlIHBhcnNlZCBwcm9wZXJseVxuICAgIC8vIHdoZW4gcmV3cml0dGVuIHRvXG4gICAgbGV0IHBhZ2VzOiBzdHJpbmdbXSwgcmV3cml0ZXM6IGFueVxuICAgIHRyeSB7XG4gICAgICA7W3BhZ2VzLCB7IF9fcmV3cml0ZXM6IHJld3JpdGVzIH1dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB0aGlzLnBhZ2VMb2FkZXIuZ2V0UGFnZUxpc3QoKSxcbiAgICAgICAgZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCgpLFxuICAgICAgICB0aGlzLnBhZ2VMb2FkZXIuZ2V0TWlkZGxld2FyZSgpLFxuICAgICAgXSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIHdlIGZhaWwgdG8gcmVzb2x2ZSB0aGUgcGFnZSBsaXN0IG9yIGNsaWVudC1idWlsZCBtYW5pZmVzdCwgd2UgbXVzdFxuICAgICAgLy8gZG8gYSBzZXJ2ZXItc2lkZSB0cmFuc2l0aW9uOlxuICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oeyB1cmw6IGFzLCByb3V0ZXI6IHRoaXMgfSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIElmIGFza2VkIHRvIGNoYW5nZSB0aGUgY3VycmVudCBVUkwgd2Ugc2hvdWxkIHJlbG9hZCB0aGUgY3VycmVudCBwYWdlXG4gICAgLy8gKG5vdCBsb2NhdGlvbi5yZWxvYWQoKSBidXQgcmVsb2FkIGdldEluaXRpYWxQcm9wcyBhbmQgb3RoZXIgTmV4dC5qcyBzdHVmZnMpXG4gICAgLy8gV2UgYWxzbyBuZWVkIHRvIHNldCB0aGUgbWV0aG9kID0gcmVwbGFjZVN0YXRlIGFsd2F5c1xuICAgIC8vIGFzIHRoaXMgc2hvdWxkIG5vdCBnbyBpbnRvIHRoZSBoaXN0b3J5IChUaGF0J3MgaG93IGJyb3dzZXJzIHdvcmspXG4gICAgLy8gV2Ugc2hvdWxkIGNvbXBhcmUgdGhlIG5ldyBhc1BhdGggdG8gdGhlIGN1cnJlbnQgYXNQYXRoLCBub3QgdGhlIHVybFxuICAgIGlmICghdGhpcy51cmxJc05ldyhjbGVhbmVkQXMpICYmICFsb2NhbGVDaGFuZ2UpIHtcbiAgICAgIG1ldGhvZCA9ICdyZXBsYWNlU3RhdGUnXG4gICAgfVxuXG4gICAgLy8gd2UgbmVlZCB0byByZXNvbHZlIHRoZSBhcyB2YWx1ZSB1c2luZyByZXdyaXRlcyBmb3IgZHluYW1pYyBTU0dcbiAgICAvLyBwYWdlcyB0byBhbGxvdyBidWlsZGluZyB0aGUgZGF0YSBVUkwgY29ycmVjdGx5XG4gICAgbGV0IHJlc29sdmVkQXMgPSBhc1xuXG4gICAgLy8gdXJsIGFuZCBhcyBzaG91bGQgYWx3YXlzIGJlIHByZWZpeGVkIHdpdGggYmFzZVBhdGggYnkgdGhpc1xuICAgIC8vIHBvaW50IGJ5IGVpdGhlciBuZXh0L2xpbmsgb3Igcm91dGVyLnB1c2gvcmVwbGFjZSBzbyBzdHJpcCB0aGVcbiAgICAvLyBiYXNlUGF0aCBmcm9tIHRoZSBwYXRobmFtZSB0byBtYXRjaCB0aGUgcGFnZXMgZGlyIDEtdG8tMVxuICAgIHBhdGhuYW1lID0gcGF0aG5hbWVcbiAgICAgID8gcmVtb3ZlVHJhaWxpbmdTbGFzaChyZW1vdmVCYXNlUGF0aChwYXRobmFtZSkpXG4gICAgICA6IHBhdGhuYW1lXG5cbiAgICBsZXQgcm91dGUgPSByZW1vdmVUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKVxuICAgIGNvbnN0IHBhcnNlZEFzUGF0aG5hbWUgPSBhcy5zdGFydHNXaXRoKCcvJykgJiYgcGFyc2VSZWxhdGl2ZVVybChhcykucGF0aG5hbWVcblxuICAgIC8vIGlmIHdlIGRldGVjdGVkIHRoZSBwYXRoIGFzIGFwcCByb3V0ZSBkdXJpbmcgcHJlZmV0Y2hpbmdcbiAgICAvLyB0cmlnZ2VyIGhhcmQgbmF2aWdhdGlvblxuICAgIGlmICgodGhpcy5jb21wb25lbnRzW3BhdGhuYW1lXSBhcyBhbnkpPy5fX2FwcFJvdXRlcikge1xuICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oeyB1cmw6IGFzLCByb3V0ZXI6IHRoaXMgfSlcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoKSA9PiB7fSlcbiAgICB9XG5cbiAgICBjb25zdCBpc01pZGRsZXdhcmVSZXdyaXRlID0gISEoXG4gICAgICBwYXJzZWRBc1BhdGhuYW1lICYmXG4gICAgICByb3V0ZSAhPT0gcGFyc2VkQXNQYXRobmFtZSAmJlxuICAgICAgKCFpc0R5bmFtaWNSb3V0ZShyb3V0ZSkgfHxcbiAgICAgICAgIWdldFJvdXRlTWF0Y2hlcihnZXRSb3V0ZVJlZ2V4KHJvdXRlKSkocGFyc2VkQXNQYXRobmFtZSkpXG4gICAgKVxuXG4gICAgLy8gd2UgZG9uJ3QgYXR0ZW1wdCByZXNvbHZlIGFzUGF0aCB3aGVuIHdlIG5lZWQgdG8gZXhlY3V0ZVxuICAgIC8vIG1pZGRsZXdhcmUgYXMgdGhlIHJlc29sdmluZyB3aWxsIG9jY3VyIHNlcnZlci1zaWRlXG4gICAgY29uc3QgaXNNaWRkbGV3YXJlTWF0Y2ggPVxuICAgICAgIW9wdGlvbnMuc2hhbGxvdyAmJlxuICAgICAgKGF3YWl0IG1hdGNoZXNNaWRkbGV3YXJlKHtcbiAgICAgICAgYXNQYXRoOiBhcyxcbiAgICAgICAgbG9jYWxlOiBuZXh0U3RhdGUubG9jYWxlLFxuICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICB9KSlcblxuICAgIGlmIChpc1F1ZXJ5VXBkYXRpbmcgJiYgaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgIHNob3VsZFJlc29sdmVIcmVmID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkUmVzb2x2ZUhyZWYgJiYgcGF0aG5hbWUgIT09ICcvX2Vycm9yJykge1xuICAgICAgOyhvcHRpb25zIGFzIGFueSkuX3Nob3VsZFJlc29sdmVIcmVmID0gdHJ1ZVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUyAmJiBhcy5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgY29uc3QgcmV3cml0ZXNSZXN1bHQgPSByZXNvbHZlUmV3cml0ZXMoXG4gICAgICAgICAgYWRkQmFzZVBhdGgoYWRkTG9jYWxlKGNsZWFuZWRBcywgbmV4dFN0YXRlLmxvY2FsZSksIHRydWUpLFxuICAgICAgICAgIHBhZ2VzLFxuICAgICAgICAgIHJld3JpdGVzLFxuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIChwOiBzdHJpbmcpID0+IHJlc29sdmVEeW5hbWljUm91dGUocCwgcGFnZXMpLFxuICAgICAgICAgIHRoaXMubG9jYWxlc1xuICAgICAgICApXG5cbiAgICAgICAgaWYgKHJld3JpdGVzUmVzdWx0LmV4dGVybmFsRGVzdCkge1xuICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsOiBhcywgcm91dGVyOiB0aGlzIH0pXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgcmVzb2x2ZWRBcyA9IHJld3JpdGVzUmVzdWx0LmFzUGF0aFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJld3JpdGVzUmVzdWx0Lm1hdGNoZWRQYWdlICYmIHJld3JpdGVzUmVzdWx0LnJlc29sdmVkSHJlZikge1xuICAgICAgICAgIC8vIGlmIHRoaXMgZGlyZWN0bHkgbWF0Y2hlcyBhIHBhZ2Ugd2UgbmVlZCB0byB1cGRhdGUgdGhlIGhyZWYgdG9cbiAgICAgICAgICAvLyBhbGxvdyB0aGUgY29ycmVjdCBwYWdlIGNodW5rIHRvIGJlIGxvYWRlZFxuICAgICAgICAgIHBhdGhuYW1lID0gcmV3cml0ZXNSZXN1bHQucmVzb2x2ZWRIcmVmXG4gICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gYWRkQmFzZVBhdGgocGF0aG5hbWUpXG5cbiAgICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSByZXNvbHZlRHluYW1pY1JvdXRlKHBhdGhuYW1lLCBwYWdlcylcblxuICAgICAgICBpZiAocGFyc2VkLnBhdGhuYW1lICE9PSBwYXRobmFtZSkge1xuICAgICAgICAgIHBhdGhuYW1lID0gcGFyc2VkLnBhdGhuYW1lXG4gICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gYWRkQmFzZVBhdGgocGF0aG5hbWUpXG5cbiAgICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc0xvY2FsVVJMKGFzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGhyZWY6IFwiJHt1cmx9XCIgYW5kIGFzOiBcIiR7YXN9XCIsIHJlY2VpdmVkIHJlbGF0aXZlIGhyZWYgYW5kIGV4dGVybmFsIGFzYCArXG4gICAgICAgICAgICBgXFxuU2VlIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvaW52YWxpZC1yZWxhdGl2ZS11cmwtZXh0ZXJuYWwtYXNgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsOiBhcywgcm91dGVyOiB0aGlzIH0pXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXNvbHZlZEFzID0gcmVtb3ZlTG9jYWxlKHJlbW92ZUJhc2VQYXRoKHJlc29sdmVkQXMpLCBuZXh0U3RhdGUubG9jYWxlKVxuXG4gICAgcm91dGUgPSByZW1vdmVUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKVxuICAgIGxldCByb3V0ZU1hdGNoOiBQYXJhbXMgfCBmYWxzZSA9IGZhbHNlXG5cbiAgICBpZiAoaXNEeW5hbWljUm91dGUocm91dGUpKSB7XG4gICAgICBjb25zdCBwYXJzZWRBcyA9IHBhcnNlUmVsYXRpdmVVcmwocmVzb2x2ZWRBcylcbiAgICAgIGNvbnN0IGFzUGF0aG5hbWUgPSBwYXJzZWRBcy5wYXRobmFtZVxuXG4gICAgICBjb25zdCByb3V0ZVJlZ2V4ID0gZ2V0Um91dGVSZWdleChyb3V0ZSlcbiAgICAgIHJvdXRlTWF0Y2ggPSBnZXRSb3V0ZU1hdGNoZXIocm91dGVSZWdleCkoYXNQYXRobmFtZSlcbiAgICAgIGNvbnN0IHNob3VsZEludGVycG9sYXRlID0gcm91dGUgPT09IGFzUGF0aG5hbWVcbiAgICAgIGNvbnN0IGludGVycG9sYXRlZEFzID0gc2hvdWxkSW50ZXJwb2xhdGVcbiAgICAgICAgPyBpbnRlcnBvbGF0ZUFzKHJvdXRlLCBhc1BhdGhuYW1lLCBxdWVyeSlcbiAgICAgICAgOiAoe30gYXMgeyByZXN1bHQ6IHVuZGVmaW5lZDsgcGFyYW1zOiB1bmRlZmluZWQgfSlcblxuICAgICAgaWYgKCFyb3V0ZU1hdGNoIHx8IChzaG91bGRJbnRlcnBvbGF0ZSAmJiAhaW50ZXJwb2xhdGVkQXMucmVzdWx0KSkge1xuICAgICAgICBjb25zdCBtaXNzaW5nUGFyYW1zID0gT2JqZWN0LmtleXMocm91dGVSZWdleC5ncm91cHMpLmZpbHRlcihcbiAgICAgICAgICAocGFyYW0pID0+ICFxdWVyeVtwYXJhbV0gJiYgIXJvdXRlUmVnZXguZ3JvdXBzW3BhcmFtXS5vcHRpb25hbFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKG1pc3NpbmdQYXJhbXMubGVuZ3RoID4gMCAmJiAhaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBgJHtcbiAgICAgICAgICAgICAgICBzaG91bGRJbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICAgICAgPyBgSW50ZXJwb2xhdGluZyBocmVmYFxuICAgICAgICAgICAgICAgICAgOiBgTWlzbWF0Y2hpbmcgXFxgYXNcXGAgYW5kIFxcYGhyZWZcXGBgXG4gICAgICAgICAgICAgIH0gZmFpbGVkIHRvIG1hbnVhbGx5IHByb3ZpZGUgYCArXG4gICAgICAgICAgICAgICAgYHRoZSBwYXJhbXM6ICR7bWlzc2luZ1BhcmFtcy5qb2luKFxuICAgICAgICAgICAgICAgICAgJywgJ1xuICAgICAgICAgICAgICAgICl9IGluIHRoZSBcXGBocmVmXFxgJ3MgXFxgcXVlcnlcXGBgXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgKHNob3VsZEludGVycG9sYXRlXG4gICAgICAgICAgICAgID8gYFRoZSBwcm92aWRlZCBcXGBocmVmXFxgICgke3VybH0pIHZhbHVlIGlzIG1pc3NpbmcgcXVlcnkgdmFsdWVzICgke21pc3NpbmdQYXJhbXMuam9pbihcbiAgICAgICAgICAgICAgICAgICcsICdcbiAgICAgICAgICAgICAgICApfSkgdG8gYmUgaW50ZXJwb2xhdGVkIHByb3Blcmx5LiBgXG4gICAgICAgICAgICAgIDogYFRoZSBwcm92aWRlZCBcXGBhc1xcYCB2YWx1ZSAoJHthc1BhdGhuYW1lfSkgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIFxcYGhyZWZcXGAgdmFsdWUgKCR7cm91dGV9KS4gYCkgK1xuICAgICAgICAgICAgICBgUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy8ke1xuICAgICAgICAgICAgICAgIHNob3VsZEludGVycG9sYXRlXG4gICAgICAgICAgICAgICAgICA/ICdocmVmLWludGVycG9sYXRpb24tZmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgOiAnaW5jb21wYXRpYmxlLWhyZWYtYXMnXG4gICAgICAgICAgICAgIH1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNob3VsZEludGVycG9sYXRlKSB7XG4gICAgICAgIGFzID0gZm9ybWF0V2l0aFZhbGlkYXRpb24oXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyc2VkQXMsIHtcbiAgICAgICAgICAgIHBhdGhuYW1lOiBpbnRlcnBvbGF0ZWRBcy5yZXN1bHQsXG4gICAgICAgICAgICBxdWVyeTogb21pdChxdWVyeSwgaW50ZXJwb2xhdGVkQXMucGFyYW1zISksXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWVyZ2UgcGFyYW1zIGludG8gYHF1ZXJ5YCwgb3ZlcndyaXRpbmcgYW55IHNwZWNpZmllZCBpbiBzZWFyY2hcbiAgICAgICAgT2JqZWN0LmFzc2lnbihxdWVyeSwgcm91dGVNYXRjaClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KCdyb3V0ZUNoYW5nZVN0YXJ0JywgYXMsIHJvdXRlUHJvcHMpXG4gICAgfVxuXG4gICAgY29uc3QgaXNFcnJvclJvdXRlID0gdGhpcy5wYXRobmFtZSA9PT0gJy80MDQnIHx8IHRoaXMucGF0aG5hbWUgPT09ICcvX2Vycm9yJ1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByb3V0ZUluZm8gPSBhd2FpdCB0aGlzLmdldFJvdXRlSW5mbyh7XG4gICAgICAgIHJvdXRlLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGFzLFxuICAgICAgICByZXNvbHZlZEFzLFxuICAgICAgICByb3V0ZVByb3BzLFxuICAgICAgICBsb2NhbGU6IG5leHRTdGF0ZS5sb2NhbGUsXG4gICAgICAgIGlzUHJldmlldzogbmV4dFN0YXRlLmlzUHJldmlldyxcbiAgICAgICAgaGFzTWlkZGxld2FyZTogaXNNaWRkbGV3YXJlTWF0Y2gsXG4gICAgICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZTogb3B0aW9ucy51bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUsXG4gICAgICAgIGlzUXVlcnlVcGRhdGluZzogaXNRdWVyeVVwZGF0aW5nICYmICF0aGlzLmlzRmFsbGJhY2ssXG4gICAgICAgIGlzTWlkZGxld2FyZVJld3JpdGUsXG4gICAgICB9KVxuXG4gICAgICBpZiAoIWlzUXVlcnlVcGRhdGluZyAmJiAhb3B0aW9ucy5zaGFsbG93KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2JmbChcbiAgICAgICAgICBhcyxcbiAgICAgICAgICAncmVzb2x2ZWRBcycgaW4gcm91dGVJbmZvID8gcm91dGVJbmZvLnJlc29sdmVkQXMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV4dFN0YXRlLmxvY2FsZVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmICgncm91dGUnIGluIHJvdXRlSW5mbyAmJiBpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICBwYXRobmFtZSA9IHJvdXRlSW5mby5yb3V0ZSB8fCByb3V0ZVxuICAgICAgICByb3V0ZSA9IHBhdGhuYW1lXG5cbiAgICAgICAgaWYgKCFyb3V0ZVByb3BzLnNoYWxsb3cpIHtcbiAgICAgICAgICBxdWVyeSA9IE9iamVjdC5hc3NpZ24oe30sIHJvdXRlSW5mby5xdWVyeSB8fCB7fSwgcXVlcnkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGVhbmVkUGFyc2VkUGF0aG5hbWUgPSBoYXNCYXNlUGF0aChwYXJzZWQucGF0aG5hbWUpXG4gICAgICAgICAgPyByZW1vdmVCYXNlUGF0aChwYXJzZWQucGF0aG5hbWUpXG4gICAgICAgICAgOiBwYXJzZWQucGF0aG5hbWVcblxuICAgICAgICBpZiAocm91dGVNYXRjaCAmJiBwYXRobmFtZSAhPT0gY2xlYW5lZFBhcnNlZFBhdGhuYW1lKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXMocm91dGVNYXRjaCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAocm91dGVNYXRjaCAmJiBxdWVyeVtrZXldID09PSByb3V0ZU1hdGNoW2tleV0pIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHF1ZXJ5W2tleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRHluYW1pY1JvdXRlKHBhdGhuYW1lKSkge1xuICAgICAgICAgIGNvbnN0IHByZWZpeGVkQXMgPVxuICAgICAgICAgICAgIXJvdXRlUHJvcHMuc2hhbGxvdyAmJiByb3V0ZUluZm8ucmVzb2x2ZWRBc1xuICAgICAgICAgICAgICA/IHJvdXRlSW5mby5yZXNvbHZlZEFzXG4gICAgICAgICAgICAgIDogYWRkQmFzZVBhdGgoXG4gICAgICAgICAgICAgICAgICBhZGRMb2NhbGUoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoYXMsIGxvY2F0aW9uLmhyZWYpLnBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUubG9jYWxlXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgIGxldCByZXdyaXRlQXMgPSBwcmVmaXhlZEFzXG5cbiAgICAgICAgICBpZiAoaGFzQmFzZVBhdGgocmV3cml0ZUFzKSkge1xuICAgICAgICAgICAgcmV3cml0ZUFzID0gcmVtb3ZlQmFzZVBhdGgocmV3cml0ZUFzKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbGVSZXN1bHQgPSBub3JtYWxpemVMb2NhbGVQYXRoKHJld3JpdGVBcywgdGhpcy5sb2NhbGVzKVxuICAgICAgICAgICAgbmV4dFN0YXRlLmxvY2FsZSA9IGxvY2FsZVJlc3VsdC5kZXRlY3RlZExvY2FsZSB8fCBuZXh0U3RhdGUubG9jYWxlXG4gICAgICAgICAgICByZXdyaXRlQXMgPSBsb2NhbGVSZXN1bHQucGF0aG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgcm91dGVSZWdleCA9IGdldFJvdXRlUmVnZXgocGF0aG5hbWUpXG4gICAgICAgICAgY29uc3QgY3VyUm91dGVNYXRjaCA9IGdldFJvdXRlTWF0Y2hlcihyb3V0ZVJlZ2V4KShcbiAgICAgICAgICAgIG5ldyBVUkwocmV3cml0ZUFzLCBsb2NhdGlvbi5ocmVmKS5wYXRobmFtZVxuICAgICAgICAgIClcblxuICAgICAgICAgIGlmIChjdXJSb3V0ZU1hdGNoKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHF1ZXJ5LCBjdXJSb3V0ZU1hdGNoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgcm91dGVJbmZvIGJyaW5ncyBhIHJlZGlyZWN0IHdlIHNpbXBseSBhcHBseSBpdC5cbiAgICAgIGlmICgndHlwZScgaW4gcm91dGVJbmZvKSB7XG4gICAgICAgIGlmIChyb3V0ZUluZm8udHlwZSA9PT0gJ3JlZGlyZWN0LWludGVybmFsJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNoYW5nZShtZXRob2QsIHJvdXRlSW5mby5uZXdVcmwsIHJvdXRlSW5mby5uZXdBcywgb3B0aW9ucylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7IHVybDogcm91dGVJbmZvLmRlc3RpbmF0aW9uLCByb3V0ZXI6IHRoaXMgfSlcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tcG9uZW50OiBhbnkgPSByb3V0ZUluZm8uQ29tcG9uZW50XG4gICAgICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC51bnN0YWJsZV9zY3JpcHRMb2FkZXIpIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0cyA9IFtdLmNvbmNhdChjb21wb25lbnQudW5zdGFibGVfc2NyaXB0TG9hZGVyKCkpXG5cbiAgICAgICAgc2NyaXB0cy5mb3JFYWNoKChzY3JpcHQ6IGFueSkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsaWVudFNjcmlwdExvYWQoc2NyaXB0LnByb3BzKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBoYW5kbGUgcmVkaXJlY3Qgb24gY2xpZW50LXRyYW5zaXRpb25cbiAgICAgIGlmICgocm91dGVJbmZvLl9fTl9TU0cgfHwgcm91dGVJbmZvLl9fTl9TU1ApICYmIHJvdXRlSW5mby5wcm9wcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcyAmJlxuICAgICAgICAgIHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMuX19OX1JFRElSRUNUXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFVzZSB0aGUgZGVzdGluYXRpb24gZnJvbSByZWRpcmVjdCB3aXRob3V0IGFkZGluZyBsb2NhbGVcbiAgICAgICAgICBvcHRpb25zLmxvY2FsZSA9IGZhbHNlXG5cbiAgICAgICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMuX19OX1JFRElSRUNUXG5cbiAgICAgICAgICAvLyBjaGVjayBpZiBkZXN0aW5hdGlvbiBpcyBpbnRlcm5hbCAocmVzb2x2ZXMgdG8gYSBwYWdlKSBhbmQgYXR0ZW1wdFxuICAgICAgICAgIC8vIGNsaWVudC1uYXZpZ2F0aW9uIGlmIGl0IGlzIGZhbGxpbmcgYmFjayB0byBoYXJkIG5hdmlnYXRpb24gaWZcbiAgICAgICAgICAvLyBpdCdzIG5vdFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLnN0YXJ0c1dpdGgoJy8nKSAmJlxuICAgICAgICAgICAgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcy5fX05fUkVESVJFQ1RfQkFTRV9QQVRIICE9PSBmYWxzZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkSHJlZiA9IHBhcnNlUmVsYXRpdmVVcmwoZGVzdGluYXRpb24pXG4gICAgICAgICAgICBwYXJzZWRIcmVmLnBhdGhuYW1lID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZShcbiAgICAgICAgICAgICAgcGFyc2VkSHJlZi5wYXRobmFtZSxcbiAgICAgICAgICAgICAgcGFnZXNcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc3QgeyB1cmw6IG5ld1VybCwgYXM6IG5ld0FzIH0gPSBwcmVwYXJlVXJsQXMoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICBkZXN0aW5hdGlvblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlKG1ldGhvZCwgbmV3VXJsLCBuZXdBcywgb3B0aW9ucylcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oeyB1cmw6IGRlc3RpbmF0aW9uLCByb3V0ZXI6IHRoaXMgfSlcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pXG4gICAgICAgIH1cblxuICAgICAgICBuZXh0U3RhdGUuaXNQcmV2aWV3ID0gISFyb3V0ZUluZm8ucHJvcHMuX19OX1BSRVZJRVdcblxuICAgICAgICAvLyBoYW5kbGUgU1NHIGRhdGEgNDA0XG4gICAgICAgIGlmIChyb3V0ZUluZm8ucHJvcHMubm90Rm91bmQgPT09IFNTR19EQVRBX05PVF9GT1VORCkge1xuICAgICAgICAgIGxldCBub3RGb3VuZFJvdXRlXG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaENvbXBvbmVudCgnLzQwNCcpXG4gICAgICAgICAgICBub3RGb3VuZFJvdXRlID0gJy80MDQnXG4gICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgbm90Rm91bmRSb3V0ZSA9ICcvX2Vycm9yJ1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvdXRlSW5mbyA9IGF3YWl0IHRoaXMuZ2V0Um91dGVJbmZvKHtcbiAgICAgICAgICAgIHJvdXRlOiBub3RGb3VuZFJvdXRlLFxuICAgICAgICAgICAgcGF0aG5hbWU6IG5vdEZvdW5kUm91dGUsXG4gICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgIGFzLFxuICAgICAgICAgICAgcmVzb2x2ZWRBcyxcbiAgICAgICAgICAgIHJvdXRlUHJvcHM6IHsgc2hhbGxvdzogZmFsc2UgfSxcbiAgICAgICAgICAgIGxvY2FsZTogbmV4dFN0YXRlLmxvY2FsZSxcbiAgICAgICAgICAgIGlzUHJldmlldzogbmV4dFN0YXRlLmlzUHJldmlldyxcbiAgICAgICAgICAgIGlzTm90Rm91bmQ6IHRydWUsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmICgndHlwZScgaW4gcm91dGVJbmZvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgbWlkZGxld2FyZSBlZmZlY3Qgb24gLzQwNGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXNRdWVyeVVwZGF0aW5nICYmXG4gICAgICAgIHRoaXMucGF0aG5hbWUgPT09ICcvX2Vycm9yJyAmJlxuICAgICAgICBzZWxmLl9fTkVYVF9EQVRBX18ucHJvcHM/LnBhZ2VQcm9wcz8uc3RhdHVzQ29kZSA9PT0gNTAwICYmXG4gICAgICAgIHJvdXRlSW5mby5wcm9wcz8ucGFnZVByb3BzXG4gICAgICApIHtcbiAgICAgICAgLy8gZW5zdXJlIHN0YXR1c0NvZGUgaXMgc3RpbGwgY29ycmVjdCBmb3Igc3RhdGljIDUwMCBwYWdlXG4gICAgICAgIC8vIHdoZW4gdXBkYXRpbmcgcXVlcnkgaW5mb3JtYXRpb25cbiAgICAgICAgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcy5zdGF0dXNDb2RlID0gNTAwXG4gICAgICB9XG5cbiAgICAgIC8vIHNoYWxsb3cgcm91dGluZyBpcyBvbmx5IGFsbG93ZWQgZm9yIHNhbWUgcGFnZSBVUkwgY2hhbmdlcy5cbiAgICAgIGNvbnN0IGlzVmFsaWRTaGFsbG93Um91dGUgPVxuICAgICAgICBvcHRpb25zLnNoYWxsb3cgJiYgbmV4dFN0YXRlLnJvdXRlID09PSAocm91dGVJbmZvLnJvdXRlID8/IHJvdXRlKVxuXG4gICAgICBjb25zdCBzaG91bGRTY3JvbGwgPVxuICAgICAgICBvcHRpb25zLnNjcm9sbCA/PyAoIWlzUXVlcnlVcGRhdGluZyAmJiAhaXNWYWxpZFNoYWxsb3dSb3V0ZSlcbiAgICAgIGNvbnN0IHJlc2V0U2Nyb2xsID0gc2hvdWxkU2Nyb2xsID8geyB4OiAwLCB5OiAwIH0gOiBudWxsXG4gICAgICBjb25zdCB1cGNvbWluZ1Njcm9sbFN0YXRlID0gZm9yY2VkU2Nyb2xsID8/IHJlc2V0U2Nyb2xsXG5cbiAgICAgIC8vIHRoZSBuZXcgc3RhdGUgdGhhdCB0aGUgcm91dGVyIGdvbm5hIHNldFxuICAgICAgY29uc3QgdXBjb21pbmdSb3V0ZXJTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBhc1BhdGg6IGNsZWFuZWRBcyxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9XG5cbiAgICAgIC8vIFdoZW4gdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQgaXMgdGhlIDQwNCBwYWdlLCB3ZSBzaG91bGQgb25seSB1cGRhdGUgdGhlXG4gICAgICAvLyBxdWVyeSBwYXJhbWV0ZXJzLiBSb3V0ZSBjaGFuZ2VzIGhlcmUgbWlnaHQgYWRkIHRoZSBiYXNlUGF0aCB3aGVuIGl0XG4gICAgICAvLyB3YXNuJ3Qgb3JpZ2luYWxseSBwcmVzZW50LiBUaGlzIGlzIGFsc28gd2h5IHRoaXMgYmxvY2sgaXMgYmVmb3JlIHRoZVxuICAgICAgLy8gYmVsb3cgYGNoYW5nZVN0YXRlYCBjYWxsIHdoaWNoIHVwZGF0ZXMgdGhlIGJyb3dzZXIncyBoaXN0b3J5IChjaGFuZ2luZ1xuICAgICAgLy8gdGhlIFVSTCkuXG4gICAgICBpZiAoaXNRdWVyeVVwZGF0aW5nICYmIGlzRXJyb3JSb3V0ZSkge1xuICAgICAgICByb3V0ZUluZm8gPSBhd2FpdCB0aGlzLmdldFJvdXRlSW5mbyh7XG4gICAgICAgICAgcm91dGU6IHRoaXMucGF0aG5hbWUsXG4gICAgICAgICAgcGF0aG5hbWU6IHRoaXMucGF0aG5hbWUsXG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgYXMsXG4gICAgICAgICAgcmVzb2x2ZWRBcyxcbiAgICAgICAgICByb3V0ZVByb3BzOiB7IHNoYWxsb3c6IGZhbHNlIH0sXG4gICAgICAgICAgbG9jYWxlOiBuZXh0U3RhdGUubG9jYWxlLFxuICAgICAgICAgIGlzUHJldmlldzogbmV4dFN0YXRlLmlzUHJldmlldyxcbiAgICAgICAgICBpc1F1ZXJ5VXBkYXRpbmc6IGlzUXVlcnlVcGRhdGluZyAmJiAhdGhpcy5pc0ZhbGxiYWNrLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICgndHlwZScgaW4gcm91dGVJbmZvKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIG1pZGRsZXdhcmUgZWZmZWN0IG9uICR7dGhpcy5wYXRobmFtZX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucGF0aG5hbWUgPT09ICcvX2Vycm9yJyAmJlxuICAgICAgICAgIHNlbGYuX19ORVhUX0RBVEFfXy5wcm9wcz8ucGFnZVByb3BzPy5zdGF0dXNDb2RlID09PSA1MDAgJiZcbiAgICAgICAgICByb3V0ZUluZm8ucHJvcHM/LnBhZ2VQcm9wc1xuICAgICAgICApIHtcbiAgICAgICAgICAvLyBlbnN1cmUgc3RhdHVzQ29kZSBpcyBzdGlsbCBjb3JyZWN0IGZvciBzdGF0aWMgNTAwIHBhZ2VcbiAgICAgICAgICAvLyB3aGVuIHVwZGF0aW5nIHF1ZXJ5IGluZm9ybWF0aW9uXG4gICAgICAgICAgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcy5zdGF0dXNDb2RlID0gNTAwXG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2V0KHVwY29taW5nUm91dGVyU3RhdGUsIHJvdXRlSW5mbywgdXBjb21pbmdTY3JvbGxTdGF0ZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKGlzRXJyb3IoZXJyKSAmJiBlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoJ3JvdXRlQ2hhbmdlRXJyb3InLCBlcnIsIGNsZWFuZWRBcywgcm91dGVQcm9wcylcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoJ2JlZm9yZUhpc3RvcnlDaGFuZ2UnLCBhcywgcm91dGVQcm9wcylcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUobWV0aG9kLCB1cmwsIGFzLCBvcHRpb25zKVxuXG4gICAgICAvLyBmb3IgcXVlcnkgdXBkYXRlcyB3ZSBjYW4gc2tpcCBpdCBpZiB0aGUgc3RhdGUgaXMgdW5jaGFuZ2VkIGFuZCB3ZSBkb24ndFxuICAgICAgLy8gbmVlZCB0byBzY3JvbGxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9pc3N1ZXMvMzcxMzlcbiAgICAgIGNvbnN0IGNhblNraXBVcGRhdGluZyA9XG4gICAgICAgIGlzUXVlcnlVcGRhdGluZyAmJlxuICAgICAgICAhdXBjb21pbmdTY3JvbGxTdGF0ZSAmJlxuICAgICAgICAhcmVhZHlTdGF0ZUNoYW5nZSAmJlxuICAgICAgICAhbG9jYWxlQ2hhbmdlICYmXG4gICAgICAgIGNvbXBhcmVSb3V0ZXJTdGF0ZXModXBjb21pbmdSb3V0ZXJTdGF0ZSwgdGhpcy5zdGF0ZSlcblxuICAgICAgaWYgKCFjYW5Ta2lwVXBkYXRpbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldCh1cGNvbWluZ1JvdXRlclN0YXRlLCByb3V0ZUluZm8sIHVwY29taW5nU2Nyb2xsU3RhdGUpXG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGlmIChlLmNhbmNlbGxlZCkgcm91dGVJbmZvLmVycm9yID0gcm91dGVJbmZvLmVycm9yIHx8IGVcbiAgICAgICAgICBlbHNlIHRocm93IGVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3V0ZUluZm8uZXJyb3IpIHtcbiAgICAgICAgICBpZiAoIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KFxuICAgICAgICAgICAgICAncm91dGVDaGFuZ2VFcnJvcicsXG4gICAgICAgICAgICAgIHJvdXRlSW5mby5lcnJvcixcbiAgICAgICAgICAgICAgY2xlYW5lZEFzLFxuICAgICAgICAgICAgICByb3V0ZVByb3BzXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgcm91dGVJbmZvLmVycm9yXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAgIGlmIChuZXh0U3RhdGUubG9jYWxlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyA9IG5leHRTdGF0ZS5sb2NhbGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgICAgIFJvdXRlci5ldmVudHMuZW1pdCgncm91dGVDaGFuZ2VDb21wbGV0ZScsIGFzLCByb3V0ZVByb3BzKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQSBoYXNoIG1hcmsgIyBpcyB0aGUgb3B0aW9uYWwgbGFzdCBwYXJ0IG9mIGEgVVJMXG4gICAgICAgIGNvbnN0IGhhc2hSZWdleCA9IC8jLiskL1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsICYmIGhhc2hSZWdleC50ZXN0KGFzKSkge1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9IYXNoKGFzKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoaXNFcnJvcihlcnIpICYmIGVyci5jYW5jZWxsZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTdGF0ZShcbiAgICBtZXRob2Q6IEhpc3RvcnlNZXRob2QsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYXM6IHN0cmluZyxcbiAgICBvcHRpb25zOiBUcmFuc2l0aW9uT3B0aW9ucyA9IHt9XG4gICk6IHZvaWQge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5oaXN0b3J5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBXYXJuaW5nOiB3aW5kb3cuaGlzdG9yeSBpcyBub3QgYXZhaWxhYmxlLmApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5oaXN0b3J5W21ldGhvZF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFdhcm5pbmc6IHdpbmRvdy5oaXN0b3J5LiR7bWV0aG9kfSBpcyBub3QgYXZhaWxhYmxlYClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCAhPT0gJ3B1c2hTdGF0ZScgfHwgZ2V0VVJMKCkgIT09IGFzKSB7XG4gICAgICB0aGlzLl9zaGFsbG93ID0gb3B0aW9ucy5zaGFsbG93XG4gICAgICB3aW5kb3cuaGlzdG9yeVttZXRob2RdKFxuICAgICAgICB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGFzLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgX19OOiB0cnVlLFxuICAgICAgICAgIGtleTogKHRoaXMuX2tleSA9IG1ldGhvZCAhPT0gJ3B1c2hTdGF0ZScgPyB0aGlzLl9rZXkgOiBjcmVhdGVLZXkoKSksXG4gICAgICAgIH0gYXMgSGlzdG9yeVN0YXRlLFxuICAgICAgICAvLyBNb3N0IGJyb3dzZXJzIGN1cnJlbnRseSBpZ25vcmVzIHRoaXMgcGFyYW1ldGVyLCBhbHRob3VnaCB0aGV5IG1heSB1c2UgaXQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgLy8gUGFzc2luZyB0aGUgZW1wdHkgc3RyaW5nIGhlcmUgc2hvdWxkIGJlIHNhZmUgYWdhaW5zdCBmdXR1cmUgY2hhbmdlcyB0byB0aGUgbWV0aG9kLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvSGlzdG9yeS9yZXBsYWNlU3RhdGVcbiAgICAgICAgJycsXG4gICAgICAgIGFzXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlUm91dGVJbmZvRXJyb3IoXG4gICAgZXJyOiBFcnJvciAmIHsgY29kZT86IGFueTsgY2FuY2VsbGVkPzogYm9vbGVhbiB9LFxuICAgIHBhdGhuYW1lOiBzdHJpbmcsXG4gICAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5LFxuICAgIGFzOiBzdHJpbmcsXG4gICAgcm91dGVQcm9wczogUm91dGVQcm9wZXJ0aWVzLFxuICAgIGxvYWRFcnJvckZhaWw/OiBib29sZWFuXG4gICk6IFByb21pc2U8Q29tcGxldGVQcml2YXRlUm91dGVJbmZvPiB7XG4gICAgaWYgKGVyci5jYW5jZWxsZWQpIHtcbiAgICAgIC8vIGJ1YmJsZSB1cCBjYW5jZWxsYXRpb24gZXJyb3JzXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoaXNBc3NldEVycm9yKGVycikgfHwgbG9hZEVycm9yRmFpbCkge1xuICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KCdyb3V0ZUNoYW5nZUVycm9yJywgZXJyLCBhcywgcm91dGVQcm9wcylcblxuICAgICAgLy8gSWYgd2UgY2FuJ3QgbG9hZCB0aGUgcGFnZSBpdCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIHJlYXNvbnNcbiAgICAgIC8vICAxLiBQYWdlIGRvZXNuJ3QgZXhpc3RzXG4gICAgICAvLyAgMi4gUGFnZSBkb2VzIGV4aXN0IGluIGEgZGlmZmVyZW50IHpvbmVcbiAgICAgIC8vICAzLiBJbnRlcm5hbCBlcnJvciB3aGlsZSBsb2FkaW5nIHRoZSBwYWdlXG5cbiAgICAgIC8vIFNvLCBkb2luZyBhIGhhcmQgcmVsb2FkIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGRlYWwgd2l0aCB0aGlzLlxuICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICB1cmw6IGFzLFxuICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICB9KVxuXG4gICAgICAvLyBDaGFuZ2luZyB0aGUgVVJMIGRvZXNuJ3QgYmxvY2sgZXhlY3V0aW5nIHRoZSBjdXJyZW50IGNvZGUgcGF0aC5cbiAgICAgIC8vIFNvIGxldCdzIHRocm93IGEgY2FuY2VsbGF0aW9uIGVycm9yIHN0b3AgdGhlIHJvdXRpbmcgbG9naWMuXG4gICAgICB0aHJvdyBidWlsZENhbmNlbGxhdGlvbkVycm9yKClcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGVycilcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHsgcGFnZTogQ29tcG9uZW50LCBzdHlsZVNoZWV0cyB9ID1cbiAgICAgICAgYXdhaXQgdGhpcy5mZXRjaENvbXBvbmVudCgnL19lcnJvcicpXG5cbiAgICAgIGNvbnN0IHJvdXRlSW5mbzogQ29tcGxldGVQcml2YXRlUm91dGVJbmZvID0ge1xuICAgICAgICBwcm9wcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBzdHlsZVNoZWV0cyxcbiAgICAgICAgZXJyLFxuICAgICAgICBlcnJvcjogZXJyLFxuICAgICAgfVxuXG4gICAgICBpZiAoIXJvdXRlSW5mby5wcm9wcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJvdXRlSW5mby5wcm9wcyA9IGF3YWl0IHRoaXMuZ2V0SW5pdGlhbFByb3BzKENvbXBvbmVudCwge1xuICAgICAgICAgICAgZXJyLFxuICAgICAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgfSBjYXRjaCAoZ2lwRXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZXJyb3IgcGFnZSBgZ2V0SW5pdGlhbFByb3BzYDogJywgZ2lwRXJyKVxuICAgICAgICAgIHJvdXRlSW5mby5wcm9wcyA9IHt9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlSW5mb1xuICAgIH0gY2F0Y2ggKHJvdXRlSW5mb0Vycikge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUm91dGVJbmZvRXJyb3IoXG4gICAgICAgIGlzRXJyb3Iocm91dGVJbmZvRXJyKSA/IHJvdXRlSW5mb0VyciA6IG5ldyBFcnJvcihyb3V0ZUluZm9FcnIgKyAnJyksXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgYXMsXG4gICAgICAgIHJvdXRlUHJvcHMsXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRSb3V0ZUluZm8oe1xuICAgIHJvdXRlOiByZXF1ZXN0ZWRSb3V0ZSxcbiAgICBwYXRobmFtZSxcbiAgICBxdWVyeSxcbiAgICBhcyxcbiAgICByZXNvbHZlZEFzLFxuICAgIHJvdXRlUHJvcHMsXG4gICAgbG9jYWxlLFxuICAgIGhhc01pZGRsZXdhcmUsXG4gICAgaXNQcmV2aWV3LFxuICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSxcbiAgICBpc1F1ZXJ5VXBkYXRpbmcsXG4gICAgaXNNaWRkbGV3YXJlUmV3cml0ZSxcbiAgICBpc05vdEZvdW5kLFxuICB9OiB7XG4gICAgcm91dGU6IHN0cmluZ1xuICAgIHBhdGhuYW1lOiBzdHJpbmdcbiAgICBxdWVyeTogUGFyc2VkVXJsUXVlcnlcbiAgICBhczogc3RyaW5nXG4gICAgcmVzb2x2ZWRBczogc3RyaW5nXG4gICAgaGFzTWlkZGxld2FyZT86IGJvb2xlYW5cbiAgICByb3V0ZVByb3BzOiBSb3V0ZVByb3BlcnRpZXNcbiAgICBsb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGlzUHJldmlldzogYm9vbGVhblxuICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZT86IGJvb2xlYW5cbiAgICBpc1F1ZXJ5VXBkYXRpbmc/OiBib29sZWFuXG4gICAgaXNNaWRkbGV3YXJlUmV3cml0ZT86IGJvb2xlYW5cbiAgICBpc05vdEZvdW5kPzogYm9vbGVhblxuICB9KSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBgcm91dGVgIGJpbmRpbmcgY2FuIGNoYW5nZSBpZiB0aGVyZSdzIGEgcmV3cml0ZVxuICAgICAqIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCByb3V0ZVxuICAgICAqIHNvIHdlIGNhbiBzdG9yZSB0aGUgY2FjaGUgZm9yIGl0IGFuZCBhdm9pZCByZS1yZXF1ZXN0aW5nIGV2ZXJ5IHRpbWVcbiAgICAgKiBmb3Igc2hhbGxvdyByb3V0aW5nIHB1cnBvc2VzLlxuICAgICAqL1xuICAgIGxldCByb3V0ZSA9IHJlcXVlc3RlZFJvdXRlXG5cbiAgICB0cnkge1xuICAgICAgbGV0IGV4aXN0aW5nSW5mbzogUHJpdmF0ZVJvdXRlSW5mbyB8IHVuZGVmaW5lZCA9IHRoaXMuY29tcG9uZW50c1tyb3V0ZV1cbiAgICAgIGlmIChyb3V0ZVByb3BzLnNoYWxsb3cgJiYgZXhpc3RpbmdJbmZvICYmIHRoaXMucm91dGUgPT09IHJvdXRlKSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0luZm9cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlQ2FuY2VsbGVkID0gZ2V0Q2FuY2VsbGVkSGFuZGxlcih7IHJvdXRlLCByb3V0ZXI6IHRoaXMgfSlcblxuICAgICAgaWYgKGhhc01pZGRsZXdhcmUpIHtcbiAgICAgICAgZXhpc3RpbmdJbmZvID0gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGxldCBjYWNoZWRSb3V0ZUluZm8gPVxuICAgICAgICBleGlzdGluZ0luZm8gJiZcbiAgICAgICAgISgnaW5pdGlhbCcgaW4gZXhpc3RpbmdJbmZvKSAmJlxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ2RldmVsb3BtZW50J1xuICAgICAgICAgID8gZXhpc3RpbmdJbmZvXG4gICAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgY29uc3QgaXNCYWNrZ3JvdW5kID0gaXNRdWVyeVVwZGF0aW5nXG4gICAgICBjb25zdCBmZXRjaE5leHREYXRhUGFyYW1zOiBGZXRjaE5leHREYXRhUGFyYW1zID0ge1xuICAgICAgICBkYXRhSHJlZjogdGhpcy5wYWdlTG9hZGVyLmdldERhdGFIcmVmKHtcbiAgICAgICAgICBocmVmOiBmb3JtYXRXaXRoVmFsaWRhdGlvbih7IHBhdGhuYW1lLCBxdWVyeSB9KSxcbiAgICAgICAgICBza2lwSW50ZXJwb2xhdGlvbjogdHJ1ZSxcbiAgICAgICAgICBhc1BhdGg6IGlzTm90Rm91bmQgPyAnLzQwNCcgOiByZXNvbHZlZEFzLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgfSksXG4gICAgICAgIGhhc01pZGRsZXdhcmU6IHRydWUsXG4gICAgICAgIGlzU2VydmVyUmVuZGVyOiB0aGlzLmlzU3NyLFxuICAgICAgICBwYXJzZUpTT046IHRydWUsXG4gICAgICAgIGluZmxpZ2h0Q2FjaGU6IGlzQmFja2dyb3VuZCA/IHRoaXMuc2JjIDogdGhpcy5zZGMsXG4gICAgICAgIHBlcnNpc3RDYWNoZTogIWlzUHJldmlldyxcbiAgICAgICAgaXNQcmVmZXRjaDogZmFsc2UsXG4gICAgICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSxcbiAgICAgICAgaXNCYWNrZ3JvdW5kLFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YTpcbiAgICAgICAgfCBXaXRoTWlkZGxld2FyZUVmZmVjdHNPdXRwdXRcbiAgICAgICAgfCAoUGljazxXaXRoTWlkZGxld2FyZUVmZmVjdHNPdXRwdXQsICdqc29uJz4gJlxuICAgICAgICAgICAgT21pdDxQYXJ0aWFsPFdpdGhNaWRkbGV3YXJlRWZmZWN0c091dHB1dD4sICdqc29uJz4pXG4gICAgICAgIHwgbnVsbCA9XG4gICAgICAgIGlzUXVlcnlVcGRhdGluZyAmJiAhaXNNaWRkbGV3YXJlUmV3cml0ZVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogYXdhaXQgd2l0aE1pZGRsZXdhcmVFZmZlY3RzKHtcbiAgICAgICAgICAgICAgZmV0Y2hEYXRhOiAoKSA9PiBmZXRjaE5leHREYXRhKGZldGNoTmV4dERhdGFQYXJhbXMpLFxuICAgICAgICAgICAgICBhc1BhdGg6IGlzTm90Rm91bmQgPyAnLzQwNCcgOiByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXJkIGVycm9yIGR1cmluZyBxdWVyeSB1cGRhdGluZ1xuICAgICAgICAgICAgICAvLyBhcyBpdCdzIHVuLW5lY2Vzc2FyeSBhbmQgZG9lc24ndCBuZWVkIHRvIGJlIGZhdGFsXG4gICAgICAgICAgICAgIC8vIHVubGVzcyBpdCBpcyBhIGZhbGxiYWNrIHJvdXRlIGFuZCB0aGUgcHJvcHMgY2FuJ3RcbiAgICAgICAgICAgICAgLy8gYmUgbG9hZGVkXG4gICAgICAgICAgICAgIGlmIChpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICAgICAgfSlcblxuICAgICAgLy8gd2hlbiByZW5kZXJpbmcgZXJyb3Igcm91dGVzIHdlIGRvbid0IGFwcGx5IG1pZGRsZXdhcmVcbiAgICAgIC8vIGVmZmVjdHNcbiAgICAgIGlmIChkYXRhICYmIChwYXRobmFtZSA9PT0gJy9fZXJyb3InIHx8IHBhdGhuYW1lID09PSAnLzQwNCcpKSB7XG4gICAgICAgIGRhdGEuZWZmZWN0ID0gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGlmIChpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IHsganNvbjogc2VsZi5fX05FWFRfREFUQV9fLnByb3BzIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhLmpzb24gPSBzZWxmLl9fTkVYVF9EQVRBX18ucHJvcHNcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBoYW5kbGVDYW5jZWxsZWQoKVxuXG4gICAgICBpZiAoXG4gICAgICAgIGRhdGE/LmVmZmVjdD8udHlwZSA9PT0gJ3JlZGlyZWN0LWludGVybmFsJyB8fFxuICAgICAgICBkYXRhPy5lZmZlY3Q/LnR5cGUgPT09ICdyZWRpcmVjdC1leHRlcm5hbCdcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZGF0YS5lZmZlY3RcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGE/LmVmZmVjdD8udHlwZSA9PT0gJ3Jld3JpdGUnKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUm91dGUgPSByZW1vdmVUcmFpbGluZ1NsYXNoKGRhdGEuZWZmZWN0LnJlc29sdmVkSHJlZilcbiAgICAgICAgY29uc3QgcGFnZXMgPSBhd2FpdCB0aGlzLnBhZ2VMb2FkZXIuZ2V0UGFnZUxpc3QoKVxuXG4gICAgICAgIC8vIGR1cmluZyBxdWVyeSB1cGRhdGluZyB0aGUgcGFnZSBtdXN0IG1hdGNoIGFsdGhvdWdoIGR1cmluZ1xuICAgICAgICAvLyBjbGllbnQtdHJhbnNpdGlvbiBhIHJlZGlyZWN0IHRoYXQgZG9lc24ndCBtYXRjaCBhIHBhZ2VcbiAgICAgICAgLy8gY2FuIGJlIHJldHVybmVkIGFuZCB0aGlzIHNob3VsZCB0cmlnZ2VyIGEgaGFyZCBuYXZpZ2F0aW9uXG4gICAgICAgIC8vIHdoaWNoIGlzIHZhbGlkIGZvciBpbmNyZW1lbnRhbCBtaWdyYXRpb25cbiAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcgfHwgcGFnZXMuaW5jbHVkZXMocmVzb2x2ZWRSb3V0ZSkpIHtcbiAgICAgICAgICByb3V0ZSA9IHJlc29sdmVkUm91dGVcbiAgICAgICAgICBwYXRobmFtZSA9IGRhdGEuZWZmZWN0LnJlc29sdmVkSHJlZlxuICAgICAgICAgIHF1ZXJ5ID0geyAuLi5xdWVyeSwgLi4uZGF0YS5lZmZlY3QucGFyc2VkQXMucXVlcnkgfVxuICAgICAgICAgIHJlc29sdmVkQXMgPSByZW1vdmVCYXNlUGF0aChcbiAgICAgICAgICAgIG5vcm1hbGl6ZUxvY2FsZVBhdGgoZGF0YS5lZmZlY3QucGFyc2VkQXMucGF0aG5hbWUsIHRoaXMubG9jYWxlcylcbiAgICAgICAgICAgICAgLnBhdGhuYW1lXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLy8gQ2hlY2sgYWdhaW4gdGhlIGNhY2hlIHdpdGggdGhlIG5ldyBkZXN0aW5hdGlvbi5cbiAgICAgICAgICBleGlzdGluZ0luZm8gPSB0aGlzLmNvbXBvbmVudHNbcm91dGVdXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcm91dGVQcm9wcy5zaGFsbG93ICYmXG4gICAgICAgICAgICBleGlzdGluZ0luZm8gJiZcbiAgICAgICAgICAgIHRoaXMucm91dGUgPT09IHJvdXRlICYmXG4gICAgICAgICAgICAhaGFzTWlkZGxld2FyZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIG1hdGNoIHdpdGggdGhlIGN1cnJlbnQgcm91dGUgZHVlIHRvIHJld3JpdGUsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gY29weSB0aGUgZXhpc3RpbmcgaW5mb3JtYXRpb24gdG8gdGhlIHJld3JpdHRlbiBvbmUuXG4gICAgICAgICAgICAvLyBUaGVuLCB3ZSByZXR1cm4gdGhlIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIG1hdGNoZWQgcm91dGUuXG4gICAgICAgICAgICByZXR1cm4geyAuLi5leGlzdGluZ0luZm8sIHJvdXRlIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQVBJUm91dGUocm91dGUpKSB7XG4gICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsOiBhcywgcm91dGVyOiB0aGlzIH0pXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxuZXZlcj4oKCkgPT4ge30pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvdXRlSW5mbyA9XG4gICAgICAgIGNhY2hlZFJvdXRlSW5mbyB8fFxuICAgICAgICAoYXdhaXQgdGhpcy5mZXRjaENvbXBvbmVudChyb3V0ZSkudGhlbjxDb21wbGV0ZVByaXZhdGVSb3V0ZUluZm8+KFxuICAgICAgICAgIChyZXMpID0+ICh7XG4gICAgICAgICAgICBDb21wb25lbnQ6IHJlcy5wYWdlLFxuICAgICAgICAgICAgc3R5bGVTaGVldHM6IHJlcy5zdHlsZVNoZWV0cyxcbiAgICAgICAgICAgIF9fTl9TU0c6IHJlcy5tb2QuX19OX1NTRyxcbiAgICAgICAgICAgIF9fTl9TU1A6IHJlcy5tb2QuX19OX1NTUCxcbiAgICAgICAgICB9KVxuICAgICAgICApKVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zdCB7IGlzVmFsaWRFbGVtZW50VHlwZSB9ID1cbiAgICAgICAgICByZXF1aXJlKCduZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMnKSBhcyB0eXBlb2YgaW1wb3J0KCduZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMnKVxuICAgICAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZShyb3V0ZUluZm8uQ29tcG9uZW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgZGVmYXVsdCBleHBvcnQgaXMgbm90IGEgUmVhY3QgQ29tcG9uZW50IGluIHBhZ2U6IFwiJHtwYXRobmFtZX1cImBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHdhc0JhaWxlZFByZWZldGNoID0gZGF0YT8ucmVzcG9uc2U/LmhlYWRlcnMuZ2V0KCd4LW1pZGRsZXdhcmUtc2tpcCcpXG5cbiAgICAgIGNvbnN0IHNob3VsZEZldGNoRGF0YSA9IHJvdXRlSW5mby5fX05fU1NHIHx8IHJvdXRlSW5mby5fX05fU1NQXG5cbiAgICAgIC8vIEZvciBub24tU1NHIHByZWZldGNoZXMgdGhhdCBiYWlsZWQgYmVmb3JlIHNlbmRpbmcgZGF0YVxuICAgICAgLy8gd2UgY2xlYXIgdGhlIGNhY2hlIHRvIGZldGNoIGZ1bGwgcmVzcG9uc2VcbiAgICAgIGlmICh3YXNCYWlsZWRQcmVmZXRjaCAmJiBkYXRhPy5kYXRhSHJlZikge1xuICAgICAgICBkZWxldGUgdGhpcy5zZGNbZGF0YS5kYXRhSHJlZl1cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBwcm9wcywgY2FjaGVLZXkgfSA9IGF3YWl0IHRoaXMuX2dldERhdGEoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkRmV0Y2hEYXRhKSB7XG4gICAgICAgICAgaWYgKGRhdGE/Lmpzb24gJiYgIXdhc0JhaWxlZFByZWZldGNoKSB7XG4gICAgICAgICAgICByZXR1cm4geyBjYWNoZUtleTogZGF0YS5jYWNoZUtleSwgcHJvcHM6IGRhdGEuanNvbiB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGF0YUhyZWYgPSBkYXRhPy5kYXRhSHJlZlxuICAgICAgICAgICAgPyBkYXRhLmRhdGFIcmVmXG4gICAgICAgICAgICA6IHRoaXMucGFnZUxvYWRlci5nZXREYXRhSHJlZih7XG4gICAgICAgICAgICAgICAgaHJlZjogZm9ybWF0V2l0aFZhbGlkYXRpb24oeyBwYXRobmFtZSwgcXVlcnkgfSksXG4gICAgICAgICAgICAgICAgYXNQYXRoOiByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaE5leHREYXRhKHtcbiAgICAgICAgICAgIGRhdGFIcmVmLFxuICAgICAgICAgICAgaXNTZXJ2ZXJSZW5kZXI6IHRoaXMuaXNTc3IsXG4gICAgICAgICAgICBwYXJzZUpTT046IHRydWUsXG4gICAgICAgICAgICBpbmZsaWdodENhY2hlOiB3YXNCYWlsZWRQcmVmZXRjaCA/IHt9IDogdGhpcy5zZGMsXG4gICAgICAgICAgICBwZXJzaXN0Q2FjaGU6ICFpc1ByZXZpZXcsXG4gICAgICAgICAgICBpc1ByZWZldGNoOiBmYWxzZSxcbiAgICAgICAgICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNhY2hlS2V5OiBmZXRjaGVkLmNhY2hlS2V5LFxuICAgICAgICAgICAgcHJvcHM6IGZldGNoZWQuanNvbiB8fCB7fSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgIHByb3BzOiBhd2FpdCB0aGlzLmdldEluaXRpYWxQcm9wcyhcbiAgICAgICAgICAgIHJvdXRlSW5mby5Db21wb25lbnQsXG4gICAgICAgICAgICAvLyB3ZSBwcm92aWRlIEFwcFRyZWUgbGF0ZXIgc28gdGhpcyBuZWVkcyB0byBiZSBgYW55YFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgIGFzUGF0aDogYXMsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgbG9jYWxlczogdGhpcy5sb2NhbGVzLFxuICAgICAgICAgICAgICBkZWZhdWx0TG9jYWxlOiB0aGlzLmRlZmF1bHRMb2NhbGUsXG4gICAgICAgICAgICB9IGFzIGFueVxuICAgICAgICAgICksXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIE9ubHkgYnVzdCB0aGUgZGF0YSBjYWNoZSBmb3IgU1NQIHJvdXRlcyBhbHRob3VnaFxuICAgICAgLy8gbWlkZGxld2FyZSBjYW4gc2tpcCBjYWNoZSBwZXIgcmVxdWVzdCB3aXRoXG4gICAgICAvLyB4LW1pZGRsZXdhcmUtY2FjaGU6IG5vLWNhY2hlIGFzIHdlbGxcbiAgICAgIGlmIChyb3V0ZUluZm8uX19OX1NTUCAmJiBmZXRjaE5leHREYXRhUGFyYW1zLmRhdGFIcmVmICYmIGNhY2hlS2V5KSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNkY1tjYWNoZUtleV1cbiAgICAgIH1cblxuICAgICAgLy8gd2Uga2ljayBvZmYgYSBIRUFEIHJlcXVlc3QgaW4gdGhlIGJhY2tncm91bmRcbiAgICAgIC8vIHdoZW4gYSBub24tcHJlZmV0Y2ggcmVxdWVzdCBpcyBtYWRlIHRvIHNpZ25hbCByZXZhbGlkYXRpb25cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuaXNQcmV2aWV3ICYmXG4gICAgICAgIHJvdXRlSW5mby5fX05fU1NHICYmXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAnZGV2ZWxvcG1lbnQnICYmXG4gICAgICAgICFpc1F1ZXJ5VXBkYXRpbmdcbiAgICAgICkge1xuICAgICAgICBmZXRjaE5leHREYXRhKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGZldGNoTmV4dERhdGFQYXJhbXMsIHtcbiAgICAgICAgICAgIGlzQmFja2dyb3VuZDogdHJ1ZSxcbiAgICAgICAgICAgIHBlcnNpc3RDYWNoZTogZmFsc2UsXG4gICAgICAgICAgICBpbmZsaWdodENhY2hlOiB0aGlzLnNiYyxcbiAgICAgICAgICB9KVxuICAgICAgICApLmNhdGNoKCgpID0+IHt9KVxuICAgICAgfVxuXG4gICAgICBwcm9wcy5wYWdlUHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9wcy5wYWdlUHJvcHMpXG4gICAgICByb3V0ZUluZm8ucHJvcHMgPSBwcm9wc1xuICAgICAgcm91dGVJbmZvLnJvdXRlID0gcm91dGVcbiAgICAgIHJvdXRlSW5mby5xdWVyeSA9IHF1ZXJ5XG4gICAgICByb3V0ZUluZm8ucmVzb2x2ZWRBcyA9IHJlc29sdmVkQXNcbiAgICAgIHRoaXMuY29tcG9uZW50c1tyb3V0ZV0gPSByb3V0ZUluZm9cblxuICAgICAgcmV0dXJuIHJvdXRlSW5mb1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUm91dGVJbmZvRXJyb3IoXG4gICAgICAgIGdldFByb3BlckVycm9yKGVyciksXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgYXMsXG4gICAgICAgIHJvdXRlUHJvcHNcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldChcbiAgICBzdGF0ZTogdHlwZW9mIHRoaXMuc3RhdGUsXG4gICAgZGF0YTogUHJpdmF0ZVJvdXRlSW5mbyxcbiAgICByZXNldFNjcm9sbDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGVcblxuICAgIHJldHVybiB0aGlzLnN1YihcbiAgICAgIGRhdGEsXG4gICAgICB0aGlzLmNvbXBvbmVudHNbJy9fYXBwJ10uQ29tcG9uZW50IGFzIEFwcENvbXBvbmVudCxcbiAgICAgIHJlc2V0U2Nyb2xsXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGV4ZWN1dGUgYmVmb3JlIHJlcGxhY2luZyByb3V0ZXIgc3RhdGVcbiAgICogQHBhcmFtIGNiIGNhbGxiYWNrIHRvIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBiZWZvcmVQb3BTdGF0ZShjYjogQmVmb3JlUG9wU3RhdGVDYWxsYmFjaykge1xuICAgIHRoaXMuX2JwcyA9IGNiXG4gIH1cblxuICBvbmx5QUhhc2hDaGFuZ2UoYXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5hc1BhdGgpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IFtvbGRVcmxOb0hhc2gsIG9sZEhhc2hdID0gdGhpcy5hc1BhdGguc3BsaXQoJyMnLCAyKVxuICAgIGNvbnN0IFtuZXdVcmxOb0hhc2gsIG5ld0hhc2hdID0gYXMuc3BsaXQoJyMnLCAyKVxuXG4gICAgLy8gTWFrZXMgc3VyZSB3ZSBzY3JvbGwgdG8gdGhlIHByb3ZpZGVkIGhhc2ggaWYgdGhlIHVybC9oYXNoIGFyZSB0aGUgc2FtZVxuICAgIGlmIChuZXdIYXNoICYmIG9sZFVybE5vSGFzaCA9PT0gbmV3VXJsTm9IYXNoICYmIG9sZEhhc2ggPT09IG5ld0hhc2gpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHVybHMgYXJlIGNoYW5nZSwgdGhlcmUncyBtb3JlIHRoYW4gYSBoYXNoIGNoYW5nZVxuICAgIGlmIChvbGRVcmxOb0hhc2ggIT09IG5ld1VybE5vSGFzaCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGhhc2ggaGFzIGNoYW5nZWQsIHRoZW4gaXQncyBhIGhhc2ggb25seSBjaGFuZ2UuXG4gICAgLy8gVGhpcyBjaGVjayBpcyBuZWNlc3NhcnkgdG8gaGFuZGxlIGJvdGggdGhlIGVudGVyIGFuZFxuICAgIC8vIGxlYXZlIGhhc2ggPT09ICcnIGNhc2VzLiBUaGUgaWRlbnRpdHkgY2FzZSBmYWxscyB0aHJvdWdoXG4gICAgLy8gYW5kIGlzIHRyZWF0ZWQgYXMgYSBuZXh0IHJlbG9hZC5cbiAgICByZXR1cm4gb2xkSGFzaCAhPT0gbmV3SGFzaFxuICB9XG5cbiAgc2Nyb2xsVG9IYXNoKGFzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBbLCBoYXNoID0gJyddID0gYXMuc3BsaXQoJyMnLCAyKVxuXG4gICAgZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gU2Nyb2xsIHRvIHRvcCBpZiB0aGUgaGFzaCBpcyBqdXN0IGAjYCB3aXRoIG5vIHZhbHVlIG9yIGAjdG9wYFxuICAgICAgICAvLyBUbyBtaXJyb3IgYnJvd3NlcnNcbiAgICAgICAgaWYgKGhhc2ggPT09ICcnIHx8IGhhc2ggPT09ICd0b3AnKSB7XG4gICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWNvZGUgaGFzaCB0byBtYWtlIG5vbi1sYXRpbiBhbmNob3Igd29ya3MuXG4gICAgICAgIGNvbnN0IHJhd0hhc2ggPSBkZWNvZGVVUklDb21wb25lbnQoaGFzaClcbiAgICAgICAgLy8gRmlyc3Qgd2UgY2hlY2sgaWYgdGhlIGVsZW1lbnQgYnkgaWQgaXMgZm91bmRcbiAgICAgICAgY29uc3QgaWRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJhd0hhc2gpXG4gICAgICAgIGlmIChpZEVsKSB7XG4gICAgICAgICAgaWRFbC5zY3JvbGxJbnRvVmlldygpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBlbGVtZW50IHdpdGggdGhlIGlkLCB3ZSBjaGVjayB0aGUgYG5hbWVgIHByb3BlcnR5XG4gICAgICAgIC8vIFRvIG1pcnJvciBicm93c2Vyc1xuICAgICAgICBjb25zdCBuYW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShyYXdIYXNoKVswXVxuICAgICAgICBpZiAobmFtZUVsKSB7XG4gICAgICAgICAgbmFtZUVsLnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb25seUhhc2hDaGFuZ2U6IHRoaXMub25seUFIYXNoQ2hhbmdlKGFzKSxcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICB1cmxJc05ldyhhc1BhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFzUGF0aCAhPT0gYXNQYXRoXG4gIH1cblxuICAvKipcbiAgICogUHJlZmV0Y2ggcGFnZSBjb2RlLCB5b3UgbWF5IHdhaXQgZm9yIHRoZSBkYXRhIGR1cmluZyBwYWdlIHJlbmRlcmluZy5cbiAgICogVGhpcyBmZWF0dXJlIG9ubHkgd29ya3MgaW4gcHJvZHVjdGlvbiFcbiAgICogQHBhcmFtIHVybCB0aGUgaHJlZiBvZiBwcmVmZXRjaGVkIHBhZ2VcbiAgICogQHBhcmFtIGFzUGF0aCB0aGUgYXMgcGF0aCBvZiB0aGUgcHJlZmV0Y2hlZCBwYWdlXG4gICAqL1xuICBhc3luYyBwcmVmZXRjaChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBhc1BhdGg6IHN0cmluZyA9IHVybCxcbiAgICBvcHRpb25zOiBQcmVmZXRjaE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBQcmVmZXRjaCBpcyBub3Qgc3VwcG9ydGVkIGluIGRldmVsb3BtZW50IG1vZGUgYmVjYXVzZSBpdCB3b3VsZCB0cmlnZ2VyIG9uLWRlbWFuZC1lbnRyaWVzXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBpc0JvdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICAgIC8vIE5vIHByZWZldGNoZXMgZm9yIGJvdHMgdGhhdCByZW5kZXIgdGhlIGxpbmsgc2luY2UgdGhleSBhcmUgdHlwaWNhbGx5IG5hdmlnYXRpbmdcbiAgICAgIC8vIGxpbmtzIHZpYSB0aGUgZXF1aXZhbGVudCBvZiBhIGhhcmQgbmF2aWdhdGlvbiBhbmQgaGVuY2UgbmV2ZXIgdXRpbGl6ZSB0aGVzZVxuICAgICAgLy8gcHJlZmV0Y2hlcy5cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsZXQgcGFyc2VkID0gcGFyc2VSZWxhdGl2ZVVybCh1cmwpXG4gICAgY29uc3QgdXJsUGF0aG5hbWUgPSBwYXJzZWQucGF0aG5hbWVcblxuICAgIGxldCB7IHBhdGhuYW1lLCBxdWVyeSB9ID0gcGFyc2VkXG4gICAgY29uc3Qgb3JpZ2luYWxQYXRobmFtZSA9IHBhdGhuYW1lXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgaWYgKG9wdGlvbnMubG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICBwYXRobmFtZSA9IG5vcm1hbGl6ZUxvY2FsZVBhdGghKHBhdGhuYW1lLCB0aGlzLmxvY2FsZXMpLnBhdGhuYW1lXG4gICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IHBhdGhuYW1lXG4gICAgICAgIHVybCA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHBhcnNlZClcblxuICAgICAgICBsZXQgcGFyc2VkQXMgPSBwYXJzZVJlbGF0aXZlVXJsKGFzUGF0aClcbiAgICAgICAgY29uc3QgbG9jYWxlUGF0aFJlc3VsdCA9IG5vcm1hbGl6ZUxvY2FsZVBhdGghKFxuICAgICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lLFxuICAgICAgICAgIHRoaXMubG9jYWxlc1xuICAgICAgICApXG4gICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lID0gbG9jYWxlUGF0aFJlc3VsdC5wYXRobmFtZVxuICAgICAgICBvcHRpb25zLmxvY2FsZSA9IGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGUgfHwgdGhpcy5kZWZhdWx0TG9jYWxlXG4gICAgICAgIGFzUGF0aCA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHBhcnNlZEFzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VzID0gYXdhaXQgdGhpcy5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KClcbiAgICBsZXQgcmVzb2x2ZWRBcyA9IGFzUGF0aFxuXG4gICAgY29uc3QgbG9jYWxlID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLmxvY2FsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBvcHRpb25zLmxvY2FsZSB8fCB1bmRlZmluZWRcbiAgICAgICAgOiB0aGlzLmxvY2FsZVxuXG4gICAgY29uc3QgaXNNaWRkbGV3YXJlTWF0Y2ggPSBhd2FpdCBtYXRjaGVzTWlkZGxld2FyZSh7XG4gICAgICBhc1BhdGg6IGFzUGF0aCxcbiAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgcm91dGVyOiB0aGlzLFxuICAgIH0pXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUyAmJiBhc1BhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBsZXQgcmV3cml0ZXM6IGFueVxuICAgICAgOyh7IF9fcmV3cml0ZXM6IHJld3JpdGVzIH0gPSBhd2FpdCBnZXRDbGllbnRCdWlsZE1hbmlmZXN0KCkpXG5cbiAgICAgIGNvbnN0IHJld3JpdGVzUmVzdWx0ID0gcmVzb2x2ZVJld3JpdGVzKFxuICAgICAgICBhZGRCYXNlUGF0aChhZGRMb2NhbGUoYXNQYXRoLCB0aGlzLmxvY2FsZSksIHRydWUpLFxuICAgICAgICBwYWdlcyxcbiAgICAgICAgcmV3cml0ZXMsXG4gICAgICAgIHBhcnNlZC5xdWVyeSxcbiAgICAgICAgKHA6IHN0cmluZykgPT4gcmVzb2x2ZUR5bmFtaWNSb3V0ZShwLCBwYWdlcyksXG4gICAgICAgIHRoaXMubG9jYWxlc1xuICAgICAgKVxuXG4gICAgICBpZiAocmV3cml0ZXNSZXN1bHQuZXh0ZXJuYWxEZXN0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgIHJlc29sdmVkQXMgPSByZW1vdmVMb2NhbGUoXG4gICAgICAgICAgcmVtb3ZlQmFzZVBhdGgocmV3cml0ZXNSZXN1bHQuYXNQYXRoKSxcbiAgICAgICAgICB0aGlzLmxvY2FsZVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXdyaXRlc1Jlc3VsdC5tYXRjaGVkUGFnZSAmJiByZXdyaXRlc1Jlc3VsdC5yZXNvbHZlZEhyZWYpIHtcbiAgICAgICAgLy8gaWYgdGhpcyBkaXJlY3RseSBtYXRjaGVzIGEgcGFnZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaHJlZiB0b1xuICAgICAgICAvLyBhbGxvdyB0aGUgY29ycmVjdCBwYWdlIGNodW5rIHRvIGJlIGxvYWRlZFxuICAgICAgICBwYXRobmFtZSA9IHJld3JpdGVzUmVzdWx0LnJlc29sdmVkSHJlZlxuICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSBwYXRobmFtZVxuXG4gICAgICAgIGlmICghaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VkLnBhdGhuYW1lID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZShwYXJzZWQucGF0aG5hbWUsIHBhZ2VzKVxuXG4gICAgaWYgKGlzRHluYW1pY1JvdXRlKHBhcnNlZC5wYXRobmFtZSkpIHtcbiAgICAgIHBhdGhuYW1lID0gcGFyc2VkLnBhdGhuYW1lXG4gICAgICBwYXJzZWQucGF0aG5hbWUgPSBwYXRobmFtZVxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGdldFJvdXRlTWF0Y2hlcihnZXRSb3V0ZVJlZ2V4KHBhcnNlZC5wYXRobmFtZSkpKFxuICAgICAgICAgIHBhcnNlUGF0aChhc1BhdGgpLnBhdGhuYW1lXG4gICAgICAgICkgfHwge31cbiAgICAgIClcblxuICAgICAgaWYgKCFpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9XG4gICAgICBwcm9jZXNzLmVudi5fX05FWFRfTUlERExFV0FSRV9QUkVGRVRDSCA9PT0gJ3N0cmljdCdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogYXdhaXQgd2l0aE1pZGRsZXdhcmVFZmZlY3RzKHtcbiAgICAgICAgICAgIGZldGNoRGF0YTogKCkgPT5cbiAgICAgICAgICAgICAgZmV0Y2hOZXh0RGF0YSh7XG4gICAgICAgICAgICAgICAgZGF0YUhyZWY6IHRoaXMucGFnZUxvYWRlci5nZXREYXRhSHJlZih7XG4gICAgICAgICAgICAgICAgICBocmVmOiBmb3JtYXRXaXRoVmFsaWRhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lOiBvcmlnaW5hbFBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgc2tpcEludGVycG9sYXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgICBhc1BhdGg6IHJlc29sdmVkQXMsXG4gICAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaGFzTWlkZGxld2FyZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc1NlcnZlclJlbmRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgcGFyc2VKU09OOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluZmxpZ2h0Q2FjaGU6IHRoaXMuc2RjLFxuICAgICAgICAgICAgICAgIHBlcnNpc3RDYWNoZTogIXRoaXMuaXNQcmV2aWV3LFxuICAgICAgICAgICAgICAgIGlzUHJlZmV0Y2g6IHRydWUsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYXNQYXRoOiBhc1BhdGgsXG4gICAgICAgICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgICAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgICAgICB9KVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlcmUgd2FzIGEgcmV3cml0ZSB3ZSBhcHBseSB0aGUgZWZmZWN0cyBvZiB0aGUgcmV3cml0ZSBvbiB0aGVcbiAgICAgKiBjdXJyZW50IHBhcmFtZXRlcnMgZm9yIHRoZSBwcmVmZXRjaC5cbiAgICAgKi9cbiAgICBpZiAoZGF0YT8uZWZmZWN0LnR5cGUgPT09ICdyZXdyaXRlJykge1xuICAgICAgcGFyc2VkLnBhdGhuYW1lID0gZGF0YS5lZmZlY3QucmVzb2x2ZWRIcmVmXG4gICAgICBwYXRobmFtZSA9IGRhdGEuZWZmZWN0LnJlc29sdmVkSHJlZlxuICAgICAgcXVlcnkgPSB7IC4uLnF1ZXJ5LCAuLi5kYXRhLmVmZmVjdC5wYXJzZWRBcy5xdWVyeSB9XG4gICAgICByZXNvbHZlZEFzID0gZGF0YS5lZmZlY3QucGFyc2VkQXMucGF0aG5hbWVcbiAgICAgIHVybCA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHBhcnNlZClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGVyZSBpcyBhIHJlZGlyZWN0IHRvIGFuIGV4dGVybmFsIGRlc3RpbmF0aW9uIHRoZW4gd2UgZG9uJ3QgaGF2ZVxuICAgICAqIHRvIHByZWZldGNoIGNvbnRlbnQgYXMgaXQgd2lsbCBiZSB1bnVzZWQuXG4gICAgICovXG4gICAgaWYgKGRhdGE/LmVmZmVjdC50eXBlID09PSAncmVkaXJlY3QtZXh0ZXJuYWwnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZSA9IHJlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWUpXG5cbiAgICBpZiAoYXdhaXQgdGhpcy5fYmZsKGFzUGF0aCwgcmVzb2x2ZWRBcywgb3B0aW9ucy5sb2NhbGUsIHRydWUpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudHNbdXJsUGF0aG5hbWVdID0geyBfX2FwcFJvdXRlcjogdHJ1ZSB9IGFzIGFueVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMucGFnZUxvYWRlci5faXNTc2cocm91dGUpLnRoZW4oKGlzU3NnKSA9PiB7XG4gICAgICAgIHJldHVybiBpc1NzZ1xuICAgICAgICAgID8gZmV0Y2hOZXh0RGF0YSh7XG4gICAgICAgICAgICAgIGRhdGFIcmVmOiBkYXRhPy5qc29uXG4gICAgICAgICAgICAgICAgPyBkYXRhPy5kYXRhSHJlZlxuICAgICAgICAgICAgICAgIDogdGhpcy5wYWdlTG9hZGVyLmdldERhdGFIcmVmKHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogdXJsLFxuICAgICAgICAgICAgICAgICAgICBhc1BhdGg6IHJlc29sdmVkQXMsXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGlzU2VydmVyUmVuZGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgcGFyc2VKU09OOiB0cnVlLFxuICAgICAgICAgICAgICBpbmZsaWdodENhY2hlOiB0aGlzLnNkYyxcbiAgICAgICAgICAgICAgcGVyc2lzdENhY2hlOiAhdGhpcy5pc1ByZXZpZXcsXG4gICAgICAgICAgICAgIGlzUHJlZmV0Y2g6IHRydWUsXG4gICAgICAgICAgICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZTpcbiAgICAgICAgICAgICAgICBvcHRpb25zLnVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSB8fFxuICAgICAgICAgICAgICAgIChvcHRpb25zLnByaW9yaXR5ICYmXG4gICAgICAgICAgICAgICAgICAhIXByb2Nlc3MuZW52Ll9fTkVYVF9PUFRJTUlTVElDX0NMSUVOVF9DQUNIRSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKVxuICAgICAgICAgIDogZmFsc2VcbiAgICAgIH0pLFxuICAgICAgdGhpcy5wYWdlTG9hZGVyW29wdGlvbnMucHJpb3JpdHkgPyAnbG9hZFBhZ2UnIDogJ3ByZWZldGNoJ10ocm91dGUpLFxuICAgIF0pXG4gIH1cblxuICBhc3luYyBmZXRjaENvbXBvbmVudChyb3V0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaGFuZGxlQ2FuY2VsbGVkID0gZ2V0Q2FuY2VsbGVkSGFuZGxlcih7IHJvdXRlLCByb3V0ZXI6IHRoaXMgfSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb21wb25lbnRSZXN1bHQgPSBhd2FpdCB0aGlzLnBhZ2VMb2FkZXIubG9hZFBhZ2Uocm91dGUpXG4gICAgICBoYW5kbGVDYW5jZWxsZWQoKVxuXG4gICAgICByZXR1cm4gY29tcG9uZW50UmVzdWx0XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoYW5kbGVDYW5jZWxsZWQoKVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgX2dldERhdGE8VD4oZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2VcbiAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlXG4gICAgfVxuICAgIHRoaXMuY2xjID0gY2FuY2VsXG4gICAgcmV0dXJuIGZuKCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgaWYgKGNhbmNlbCA9PT0gdGhpcy5jbGMpIHtcbiAgICAgICAgdGhpcy5jbGMgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgY29uc3QgZXJyOiBhbnkgPSBuZXcgRXJyb3IoJ0xvYWRpbmcgaW5pdGlhbCBwcm9wcyBjYW5jZWxsZWQnKVxuICAgICAgICBlcnIuY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9KVxuICB9XG5cbiAgZ2V0SW5pdGlhbFByb3BzKFxuICAgIENvbXBvbmVudDogQ29tcG9uZW50VHlwZSxcbiAgICBjdHg6IE5leHRQYWdlQ29udGV4dFxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb25zdCB7IENvbXBvbmVudDogQXBwIH0gPSB0aGlzLmNvbXBvbmVudHNbJy9fYXBwJ11cbiAgICBjb25zdCBBcHBUcmVlID0gdGhpcy5fd3JhcEFwcChBcHAgYXMgQXBwQ29tcG9uZW50KVxuICAgIGN0eC5BcHBUcmVlID0gQXBwVHJlZVxuICAgIHJldHVybiBsb2FkR2V0SW5pdGlhbFByb3BzPEFwcENvbnRleHRUeXBlPFJvdXRlcj4+KEFwcCwge1xuICAgICAgQXBwVHJlZSxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgIGN0eCxcbiAgICB9KVxuICB9XG5cbiAgZ2V0IHJvdXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucm91dGVcbiAgfVxuXG4gIGdldCBwYXRobmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnBhdGhuYW1lXG4gIH1cblxuICBnZXQgcXVlcnkoKTogUGFyc2VkVXJsUXVlcnkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnF1ZXJ5XG4gIH1cblxuICBnZXQgYXNQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuYXNQYXRoXG4gIH1cblxuICBnZXQgbG9jYWxlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUubG9jYWxlXG4gIH1cblxuICBnZXQgaXNGYWxsYmFjaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ZhbGxiYWNrXG4gIH1cblxuICBnZXQgaXNQcmV2aWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzUHJldmlld1xuICB9XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlS2V5IiwiUm91dGVyIiwibWF0Y2hlc01pZGRsZXdhcmUiLCJyZXNvbHZlUmV3cml0ZXMiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0hBU19SRVdSSVRFUyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiYnVpbGRDYW5jZWxsYXRpb25FcnJvciIsIk9iamVjdCIsImFzc2lnbiIsIkVycm9yIiwiY2FuY2VsbGVkIiwib3B0aW9ucyIsIm1hdGNoZXJzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyb3V0ZXIiLCJwYWdlTG9hZGVyIiwiZ2V0TWlkZGxld2FyZSIsInBhdGhuYW1lIiwiYXNQYXRobmFtZSIsInBhcnNlUGF0aCIsImFzUGF0aCIsImNsZWFuZWRBcyIsImhhc0Jhc2VQYXRoIiwicmVtb3ZlQmFzZVBhdGgiLCJhc1dpdGhCYXNlUGF0aEFuZExvY2FsZSIsImFkZEJhc2VQYXRoIiwiYWRkTG9jYWxlIiwibG9jYWxlIiwic29tZSIsIm0iLCJSZWdFeHAiLCJyZWdleHAiLCJ0ZXN0Iiwic3RyaXBPcmlnaW4iLCJ1cmwiLCJvcmlnaW4iLCJnZXRMb2NhdGlvbk9yaWdpbiIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJwcmVwYXJlVXJsQXMiLCJhcyIsInJlc29sdmVkSHJlZiIsInJlc29sdmVkQXMiLCJyZXNvbHZlSHJlZiIsImhyZWZXYXNBYnNvbHV0ZSIsImFzV2FzQWJzb2x1dGUiLCJwcmVwYXJlZFVybCIsInByZXBhcmVkQXMiLCJyZXNvbHZlRHluYW1pY1JvdXRlIiwicGFnZXMiLCJjbGVhblBhdGhuYW1lIiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsImRlbm9ybWFsaXplUGFnZVBhdGgiLCJpbmNsdWRlcyIsInBhZ2UiLCJpc0R5bmFtaWNSb3V0ZSIsImdldFJvdXRlUmVnZXgiLCJyZSIsImdldE1pZGRsZXdhcmVEYXRhIiwic291cmNlIiwicmVzcG9uc2UiLCJuZXh0Q29uZmlnIiwiYmFzZVBhdGgiLCJpMThuIiwibG9jYWxlcyIsInRyYWlsaW5nU2xhc2giLCJCb29sZWFuIiwiX19ORVhUX1RSQUlMSU5HX1NMQVNIIiwicmV3cml0ZUhlYWRlciIsImhlYWRlcnMiLCJnZXQiLCJyZXdyaXRlVGFyZ2V0IiwibWF0Y2hlZFBhdGgiLCJNQVRDSEVEX1BBVEhfSEVBREVSIiwiX19ORVhUX0VYVEVSTkFMX01JRERMRVdBUkVfUkVXUklURV9SRVNPTFZFIiwicGFyc2VkUmV3cml0ZVRhcmdldCIsInBhcnNlUmVsYXRpdmVVcmwiLCJwYXRobmFtZUluZm8iLCJnZXROZXh0UGF0aG5hbWVJbmZvIiwicGFyc2VEYXRhIiwiZnNQYXRobmFtZSIsImFsbCIsImdldFBhZ2VMaXN0IiwiZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCIsInRoZW4iLCJfX3Jld3JpdGVzIiwicmV3cml0ZXMiLCJub3JtYWxpemVMb2NhbGVQYXRoIiwicGFyc2VkU291cmNlIiwidW5kZWZpbmVkIiwicmVzdWx0IiwicXVlcnkiLCJwYXRoIiwibWF0Y2hlZFBhZ2UiLCJwYXJzZWRBcyIsInJlc29sdmVkUGF0aG5hbWUiLCJtYXRjaGVzIiwiZ2V0Um91dGVNYXRjaGVyIiwidHlwZSIsInNyYyIsImZvcm1hdE5leHRQYXRobmFtZUluZm8iLCJkZWZhdWx0TG9jYWxlIiwiYnVpbGRJZCIsImRlc3RpbmF0aW9uIiwiaGFzaCIsInJlZGlyZWN0VGFyZ2V0IiwibmV3QXMiLCJuZXdVcmwiLCJ3aXRoTWlkZGxld2FyZUVmZmVjdHMiLCJmZXRjaERhdGEiLCJkYXRhIiwiZWZmZWN0IiwiZGF0YUhyZWYiLCJqc29uIiwidGV4dCIsImNhY2hlS2V5IiwibWFudWFsU2Nyb2xsUmVzdG9yYXRpb24iLCJfX05FWFRfU0NST0xMX1JFU1RPUkFUSU9OIiwid2luZG93IiwiaGlzdG9yeSIsInYiLCJzZXNzaW9uU3RvcmFnZSIsInNldEl0ZW0iLCJyZW1vdmVJdGVtIiwibiIsIlNTR19EQVRBX05PVF9GT1VORCIsIlN5bWJvbCIsImZldGNoUmV0cnkiLCJhdHRlbXB0cyIsImZldGNoIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJvayIsInN0YXR1cyIsInRyeVRvUGFyc2VBc0pTT04iLCJKU09OIiwicGFyc2UiLCJlcnJvciIsImZldGNoTmV4dERhdGEiLCJpbmZsaWdodENhY2hlIiwiaXNQcmVmZXRjaCIsImhhc01pZGRsZXdhcmUiLCJpc1NlcnZlclJlbmRlciIsInBhcnNlSlNPTiIsInBlcnNpc3RDYWNoZSIsImlzQmFja2dyb3VuZCIsInVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSIsImhyZWYiLCJVUkwiLCJsb2NhdGlvbiIsImdldERhdGEiLCJwYXJhbXMiLCJwdXJwb3NlIiwiTkVYVF9ERVBMT1lNRU5UX0lEIiwibm90Rm91bmQiLCJtYXJrQXNzZXRFcnJvciIsIk5PREVfRU5WIiwiY2F0Y2giLCJlcnIiLCJtZXNzYWdlIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic2xpY2UiLCJoYW5kbGVIYXJkTmF2aWdhdGlvbiIsImdldENhbmNlbGxlZEhhbmRsZXIiLCJyb3V0ZSIsImNhbmNlbCIsImNsYyIsImhhbmRsZUNhbmNlbGxlZCIsInJlbG9hZCIsImJhY2siLCJmb3J3YXJkIiwicHVzaCIsIl9rZXkiLCJzdHJpbmdpZnkiLCJ4Iiwic2VsZiIsInBhZ2VYT2Zmc2V0IiwieSIsInBhZ2VZT2Zmc2V0IiwiY2hhbmdlIiwicmVwbGFjZSIsIl9iZmwiLCJza2lwTmF2aWdhdGUiLCJfX05FWFRfQ0xJRU5UX1JPVVRFUl9GSUxURVJfRU5BQkxFRCIsIl9iZmxfcyIsIl9iZmxfZCIsIkJsb29tRmlsdGVyIiwic3RhdGljRmlsdGVyRGF0YSIsImR5bmFtaWNGaWx0ZXJEYXRhIiwiX19yb3V0ZXJGaWx0ZXJTdGF0aWMiLCJfX3JvdXRlckZpbHRlckR5bmFtaWMiLCJjb25zb2xlIiwicm91dGVyRmlsdGVyU1ZhbHVlIiwiX19ORVhUX0NMSUVOVF9ST1VURVJfU19GSUxURVIiLCJyb3V0ZXJGaWx0ZXJEVmFsdWUiLCJfX05FWFRfQ0xJRU5UX1JPVVRFUl9EX0ZJTFRFUiIsIm51bUhhc2hlcyIsIm51bUl0ZW1zIiwiZXJyb3JSYXRlIiwiaW1wb3J0IiwibWF0Y2hlc0JmbFN0YXRpYyIsIm1hdGNoZXNCZmxEeW5hbWljIiwicGF0aHNUb0NoZWNrIiwiY3VyQXMiLCJhbGxvd01hdGNoQ3VycmVudCIsImFzTm9TbGFzaCIsImFzTm9TbGFzaExvY2FsZSIsImNvbnRhaW5zIiwibm9ybWFsaXplZEFTIiwiY3VyQXNQYXJ0cyIsInNwbGl0IiwiaSIsImN1cnJlbnRQYXJ0Iiwiam9pbiIsImZvcmNlZFNjcm9sbCIsImlzTG9jYWxVUkwiLCJpc1F1ZXJ5VXBkYXRpbmciLCJfaCIsInNoYWxsb3ciLCJzaG91bGRSZXNvbHZlSHJlZiIsIl9zaG91bGRSZXNvbHZlSHJlZiIsIm5leHRTdGF0ZSIsInN0YXRlIiwicmVhZHlTdGF0ZUNoYW5nZSIsImlzUmVhZHkiLCJpc1NzciIsInByZXZMb2NhbGUiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwibG9jYWxlUGF0aFJlc3VsdCIsImRldGVjdGVkTG9jYWxlIiwiZm9ybWF0V2l0aFZhbGlkYXRpb24iLCJkaWROYXZpZ2F0ZSIsImRldGVjdGVkRG9tYWluIiwiZGV0ZWN0RG9tYWluTG9jYWxlIiwiZG9tYWluTG9jYWxlcyIsImlzTG9jYWxlRG9tYWluIiwiaG9zdG5hbWUiLCJkb21haW4iLCJhc05vQmFzZVBhdGgiLCJodHRwIiwiU1QiLCJwZXJmb3JtYW5jZSIsIm1hcmsiLCJzY3JvbGwiLCJyb3V0ZVByb3BzIiwiX2luRmxpZ2h0Um91dGUiLCJldmVudHMiLCJlbWl0IiwicmVtb3ZlTG9jYWxlIiwibG9jYWxlQ2hhbmdlIiwib25seUFIYXNoQ2hhbmdlIiwiY2hhbmdlU3RhdGUiLCJzY3JvbGxUb0hhc2giLCJzZXQiLCJjb21wb25lbnRzIiwiaXNFcnJvciIsInBhcnNlZCIsInVybElzTmV3IiwicGFyc2VkQXNQYXRobmFtZSIsIl9fYXBwUm91dGVyIiwiaXNNaWRkbGV3YXJlUmV3cml0ZSIsImlzTWlkZGxld2FyZU1hdGNoIiwicmV3cml0ZXNSZXN1bHQiLCJwIiwiZXh0ZXJuYWxEZXN0Iiwicm91dGVNYXRjaCIsInJvdXRlUmVnZXgiLCJzaG91bGRJbnRlcnBvbGF0ZSIsImludGVycG9sYXRlZEFzIiwiaW50ZXJwb2xhdGVBcyIsIm1pc3NpbmdQYXJhbXMiLCJrZXlzIiwiZ3JvdXBzIiwiZmlsdGVyIiwicGFyYW0iLCJvcHRpb25hbCIsIndhcm4iLCJvbWl0IiwiaXNFcnJvclJvdXRlIiwicm91dGVJbmZvIiwiZ2V0Um91dGVJbmZvIiwiaXNQcmV2aWV3IiwiaXNGYWxsYmFjayIsImNsZWFuZWRQYXJzZWRQYXRobmFtZSIsImZvckVhY2giLCJrZXkiLCJwcmVmaXhlZEFzIiwicmV3cml0ZUFzIiwibG9jYWxlUmVzdWx0IiwiY3VyUm91dGVNYXRjaCIsImNvbXBvbmVudCIsIkNvbXBvbmVudCIsInVuc3RhYmxlX3NjcmlwdExvYWRlciIsInNjcmlwdHMiLCJjb25jYXQiLCJzY3JpcHQiLCJoYW5kbGVDbGllbnRTY3JpcHRMb2FkIiwicHJvcHMiLCJfX05fU1NHIiwiX19OX1NTUCIsInBhZ2VQcm9wcyIsIl9fTl9SRURJUkVDVCIsIl9fTl9SRURJUkVDVF9CQVNFX1BBVEgiLCJwYXJzZWRIcmVmIiwiX19OX1BSRVZJRVciLCJub3RGb3VuZFJvdXRlIiwiZmV0Y2hDb21wb25lbnQiLCJfIiwiaXNOb3RGb3VuZCIsIl9fTkVYVF9EQVRBX18iLCJzdGF0dXNDb2RlIiwiaXNWYWxpZFNoYWxsb3dSb3V0ZSIsInNob3VsZFNjcm9sbCIsInJlc2V0U2Nyb2xsIiwidXBjb21pbmdTY3JvbGxTdGF0ZSIsInVwY29taW5nUm91dGVyU3RhdGUiLCJjYW5Ta2lwVXBkYXRpbmciLCJjb21wYXJlUm91dGVyU3RhdGVzIiwiZSIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwibGFuZyIsImhhc2hSZWdleCIsImdldFVSTCIsIl9zaGFsbG93IiwiX19OIiwiaGFuZGxlUm91dGVJbmZvRXJyb3IiLCJsb2FkRXJyb3JGYWlsIiwiaXNBc3NldEVycm9yIiwic3R5bGVTaGVldHMiLCJnZXRJbml0aWFsUHJvcHMiLCJnaXBFcnIiLCJyb3V0ZUluZm9FcnIiLCJyZXF1ZXN0ZWRSb3V0ZSIsImV4aXN0aW5nSW5mbyIsImNhY2hlZFJvdXRlSW5mbyIsImZldGNoTmV4dERhdGFQYXJhbXMiLCJnZXREYXRhSHJlZiIsInNraXBJbnRlcnBvbGF0aW9uIiwic2JjIiwic2RjIiwicmVzb2x2ZWRSb3V0ZSIsImlzQVBJUm91dGUiLCJyZXMiLCJtb2QiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCJ3YXNCYWlsZWRQcmVmZXRjaCIsInNob3VsZEZldGNoRGF0YSIsIl9nZXREYXRhIiwiZmV0Y2hlZCIsImdldFByb3BlckVycm9yIiwic3ViIiwiYmVmb3JlUG9wU3RhdGUiLCJjYiIsIl9icHMiLCJvbGRVcmxOb0hhc2giLCJvbGRIYXNoIiwibmV3VXJsTm9IYXNoIiwibmV3SGFzaCIsImRpc2FibGVTbW9vdGhTY3JvbGxEdXJpbmdSb3V0ZVRyYW5zaXRpb24iLCJzY3JvbGxUbyIsInJhd0hhc2giLCJkZWNvZGVVUklDb21wb25lbnQiLCJpZEVsIiwiZ2V0RWxlbWVudEJ5SWQiLCJzY3JvbGxJbnRvVmlldyIsIm5hbWVFbCIsImdldEVsZW1lbnRzQnlOYW1lIiwib25seUhhc2hDaGFuZ2UiLCJwcmVmZXRjaCIsImlzQm90IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGF0aG5hbWUiLCJvcmlnaW5hbFBhdGhuYW1lIiwiX19ORVhUX01JRERMRVdBUkVfUFJFRkVUQ0giLCJfaXNTc2ciLCJpc1NzZyIsInByaW9yaXR5IiwiX19ORVhUX09QVElNSVNUSUNfQ0xJRU5UX0NBQ0hFIiwiY29tcG9uZW50UmVzdWx0IiwibG9hZFBhZ2UiLCJmbiIsImN0eCIsIkFwcCIsIkFwcFRyZWUiLCJfd3JhcEFwcCIsImxvYWRHZXRJbml0aWFsUHJvcHMiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxQcm9wcyIsIndyYXBBcHAiLCJzdWJzY3JpcHRpb24iLCJpc0ZpcnN0UG9wU3RhdGVFdmVudCIsIm9uUG9wU3RhdGUiLCJfX05BIiwiZ2V0SXRlbSIsImluaXRpYWwiLCJhdXRvRXhwb3J0RHluYW1pYyIsImF1dG9FeHBvcnQiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwiZ3NzcCIsImdpcCIsImlzRXhwZXJpbWVudGFsQ29tcGlsZSIsImFwcEdpcCIsImdzcCIsInNlYXJjaCIsIl9pbml0aWFsTWF0Y2hlc01pZGRsZXdhcmVQcm9taXNlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNjcm9sbFJlc3RvcmF0aW9uIiwibWl0dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/router.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-locale.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/add-locale.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ./add-path-prefix */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction addLocale(path, locale, defaultLocale, ignorePrefix) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path;\n const lower = path.toLowerCase();\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if ((0, _pathhasprefix.pathHasPrefix)(lower, '/api')) return path;\n if ((0, _pathhasprefix.pathHasPrefix)(lower, \"/\" + locale.toLowerCase())) return path;\n }\n // Add the locale prefix to the path.\n return (0, _addpathprefix.addPathPrefix)(path, \"/\" + locale);\n} //# sourceMappingURL=add-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLWxvY2FsZS5qcyIsIm1hcHBpbmdzIjoiOzs7OzZDQVFnQkE7OztlQUFBQTs7OzJDQVJjOzJDQUNBO0FBT3ZCLFNBQVNBLFVBQ2RDLElBQVksRUFDWkMsTUFBdUIsRUFDdkJDLGFBQXNCLEVBQ3RCQyxZQUFzQjtJQUV0Qiw0RUFBNEU7SUFDNUUsc0JBQXNCO0lBQ3RCLElBQUksQ0FBQ0YsVUFBVUEsV0FBV0MsZUFBZSxPQUFPRjtJQUVoRCxNQUFNSSxRQUFRSixLQUFLSyxXQUFXO0lBRTlCLDJFQUEyRTtJQUMzRSxpQ0FBaUM7SUFDakMsSUFBSSxDQUFDRixjQUFjO1FBQ2pCLElBQUlHLENBQUFBLEdBQUFBLGVBQUFBLGFBQWEsRUFBQ0YsT0FBTyxTQUFTLE9BQU9KO1FBQ3pDLElBQUlNLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNGLE9BQVEsTUFBR0gsT0FBT0ksV0FBVyxLQUFPLE9BQU9MO0lBQy9EO0lBRUEscUNBQXFDO0lBQ3JDLE9BQU9PLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNQLE1BQU8sTUFBR0M7QUFDakMiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxhZGQtbG9jYWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZFBhdGhQcmVmaXggfSBmcm9tICcuL2FkZC1wYXRoLXByZWZpeCdcbmltcG9ydCB7IHBhdGhIYXNQcmVmaXggfSBmcm9tICcuL3BhdGgtaGFzLXByZWZpeCdcblxuLyoqXG4gKiBGb3IgYSBnaXZlbiBwYXRoIGFuZCBhIGxvY2FsZSwgaWYgdGhlIGxvY2FsZSBpcyBnaXZlbiwgaXQgd2lsbCBwcmVmaXggdGhlXG4gKiBsb2NhbGUuIFRoZSBwYXRoIHNob3VsZG4ndCBiZSBhbiBBUEkgcGF0aC4gSWYgYSBkZWZhdWx0IGxvY2FsZSBpcyBnaXZlbiB0aGVcbiAqIHByZWZpeCB3aWxsIGJlIG9taXR0ZWQgaWYgdGhlIGxvY2FsZSBpcyBhbHJlYWR5IHRoZSBkZWZhdWx0IGxvY2FsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExvY2FsZShcbiAgcGF0aDogc3RyaW5nLFxuICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZSxcbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZyxcbiAgaWdub3JlUHJlZml4PzogYm9vbGVhblxuKSB7XG4gIC8vIElmIG5vIGxvY2FsZSB3YXMgZ2l2ZW4gb3IgdGhlIGxvY2FsZSBpcyB0aGUgZGVmYXVsdCBsb2NhbGUsIHdlIGRvbid0IG5lZWRcbiAgLy8gdG8gcHJlZml4IHRoZSBwYXRoLlxuICBpZiAoIWxvY2FsZSB8fCBsb2NhbGUgPT09IGRlZmF1bHRMb2NhbGUpIHJldHVybiBwYXRoXG5cbiAgY29uc3QgbG93ZXIgPSBwYXRoLnRvTG93ZXJDYXNlKClcblxuICAvLyBJZiB0aGUgcGF0aCBpcyBhbiBBUEkgcGF0aCBvciB0aGUgcGF0aCBhbHJlYWR5IGhhcyB0aGUgbG9jYWxlIHByZWZpeCwgd2VcbiAgLy8gZG9uJ3QgbmVlZCB0byBwcmVmaXggdGhlIHBhdGguXG4gIGlmICghaWdub3JlUHJlZml4KSB7XG4gICAgaWYgKHBhdGhIYXNQcmVmaXgobG93ZXIsICcvYXBpJykpIHJldHVybiBwYXRoXG4gICAgaWYgKHBhdGhIYXNQcmVmaXgobG93ZXIsIGAvJHtsb2NhbGUudG9Mb3dlckNhc2UoKX1gKSkgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIC8vIEFkZCB0aGUgbG9jYWxlIHByZWZpeCB0byB0aGUgcGF0aC5cbiAgcmV0dXJuIGFkZFBhdGhQcmVmaXgocGF0aCwgYC8ke2xvY2FsZX1gKVxufVxuIl0sIm5hbWVzIjpbImFkZExvY2FsZSIsInBhdGgiLCJsb2NhbGUiLCJkZWZhdWx0TG9jYWxlIiwiaWdub3JlUHJlZml4IiwibG93ZXIiLCJ0b0xvd2VyQ2FzZSIsInBhdGhIYXNQcmVmaXgiLCJhZGRQYXRoUHJlZml4Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-locale.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathPrefix\", ({\n enumerable: true,\n get: function() {\n return addPathPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathPrefix(path, prefix) {\n if (!path.startsWith('/') || !prefix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + prefix + pathname + query + hash;\n} //# sourceMappingURL=add-path-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtcHJlZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBTWdCQTs7O2VBQUFBOzs7dUNBTlU7QUFNbkIsU0FBU0EsY0FBY0MsSUFBWSxFQUFFQyxNQUFlO0lBQ3pELElBQUksQ0FBQ0QsS0FBS0UsVUFBVSxDQUFDLFFBQVEsQ0FBQ0QsUUFBUTtRQUNwQyxPQUFPRDtJQUNUO0lBRUEsTUFBTSxFQUFFRyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVOO0lBQzVDLE9BQVEsS0FBRUMsU0FBU0UsV0FBV0MsUUFBUUM7QUFDeEMiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxhZGQtcGF0aC1wcmVmaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi9wYXJzZS1wYXRoJ1xuXG4vKipcbiAqIEFkZHMgdGhlIHByb3ZpZGVkIHByZWZpeCB0byB0aGUgZ2l2ZW4gcGF0aC4gSXQgZmlyc3QgZW5zdXJlcyB0aGF0IHRoZSBwYXRoXG4gKiBpcyBpbmRlZWQgc3RhcnRpbmcgd2l0aCBhIHNsYXNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkUGF0aFByZWZpeChwYXRoOiBzdHJpbmcsIHByZWZpeD86IHN0cmluZykge1xuICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpIHx8ICFwcmVmaXgpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgeyBwYXRobmFtZSwgcXVlcnksIGhhc2ggfSA9IHBhcnNlUGF0aChwYXRoKVxuICByZXR1cm4gYCR7cHJlZml4fSR7cGF0aG5hbWV9JHtxdWVyeX0ke2hhc2h9YFxufVxuIl0sIm5hbWVzIjpbImFkZFBhdGhQcmVmaXgiLCJwYXRoIiwicHJlZml4Iiwic3RhcnRzV2l0aCIsInBhdGhuYW1lIiwicXVlcnkiLCJoYXNoIiwicGFyc2VQYXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathSuffix\", ({\n enumerable: true,\n get: function() {\n return addPathSuffix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathSuffix(path, suffix) {\n if (!path.startsWith('/') || !suffix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + pathname + suffix + query + hash;\n} //# sourceMappingURL=add-path-suffix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtc3VmZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBT2dCQTs7O2VBQUFBOzs7dUNBUFU7QUFPbkIsU0FBU0EsY0FBY0MsSUFBWSxFQUFFQyxNQUFlO0lBQ3pELElBQUksQ0FBQ0QsS0FBS0UsVUFBVSxDQUFDLFFBQVEsQ0FBQ0QsUUFBUTtRQUNwQyxPQUFPRDtJQUNUO0lBRUEsTUFBTSxFQUFFRyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVOO0lBQzVDLE9BQVEsS0FBRUcsV0FBV0YsU0FBU0csUUFBUUM7QUFDeEMiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxhZGQtcGF0aC1zdWZmaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi9wYXJzZS1wYXRoJ1xuXG4vKipcbiAqIFNpbWlsYXJseSB0byBgYWRkUGF0aFByZWZpeGAsIHRoaXMgZnVuY3Rpb24gYWRkcyBhIHN1ZmZpeCBhdCB0aGUgZW5kIG9uIHRoZVxuICogcHJvdmlkZWQgcGF0aC4gSXQgYWxzbyB3b3JrcyBvbmx5IGZvciBwYXRocyBlbnN1cmluZyB0aGUgYXJndW1lbnQgc3RhcnRzXG4gKiB3aXRoIGEgc2xhc2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRQYXRoU3VmZml4KHBhdGg6IHN0cmluZywgc3VmZml4Pzogc3RyaW5nKSB7XG4gIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykgfHwgIXN1ZmZpeCkge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCB7IHBhdGhuYW1lLCBxdWVyeSwgaGFzaCB9ID0gcGFyc2VQYXRoKHBhdGgpXG4gIHJldHVybiBgJHtwYXRobmFtZX0ke3N1ZmZpeH0ke3F1ZXJ5fSR7aGFzaH1gXG59XG4iXSwibmFtZXMiOlsiYWRkUGF0aFN1ZmZpeCIsInBhdGgiLCJzdWZmaXgiLCJzdGFydHNXaXRoIiwicGF0aG5hbWUiLCJxdWVyeSIsImhhc2giLCJwYXJzZVBhdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/app-paths.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n normalizeAppPath: function() {\n return normalizeAppPath;\n },\n normalizeRscURL: function() {\n return normalizeRscURL;\n }\n});\nconst _ensureleadingslash = __webpack_require__(/*! ../../page-path/ensure-leading-slash */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _segment = __webpack_require__(/*! ../../segment */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nfunction normalizeAppPath(route) {\n return (0, _ensureleadingslash.ensureLeadingSlash)(route.split('/').reduce((pathname, segment, index, segments)=>{\n // Empty segments are ignored.\n if (!segment) {\n return pathname;\n }\n // Groups are ignored.\n if ((0, _segment.isGroupSegment)(segment)) {\n return pathname;\n }\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname;\n }\n // The last segment (if it's a leaf) should be ignored.\n if ((segment === 'page' || segment === 'route') && index === segments.length - 1) {\n return pathname;\n }\n return pathname + \"/\" + segment;\n }, ''));\n}\nfunction normalizeRscURL(url) {\n return url.replace(/\\.rsc($|\\?)/, '$1');\n} //# sourceMappingURL=app-paths.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYXBwLXBhdGhzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQXNCZ0JBLGdCQUFnQjtlQUFoQkE7O0lBbUNBQyxlQUFlO2VBQWZBOzs7Z0RBekRtQjtxQ0FDSjtBQXFCeEIsU0FBU0QsaUJBQWlCRSxLQUFhO0lBQzVDLE9BQU9DLENBQUFBLEdBQUFBLG9CQUFBQSxrQkFBQUEsRUFDTEQsTUFBTUUsS0FBSyxDQUFDLEtBQUtDLE1BQU0sQ0FBQyxDQUFDQyxVQUFVQyxTQUFTQyxPQUFPQztRQUNqRCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDRixTQUFTO1lBQ1osT0FBT0Q7UUFDVDtRQUVBLHNCQUFzQjtRQUN0QixJQUFJSSxDQUFBQSxHQUFBQSxTQUFBQSxjQUFBQSxFQUFlSCxVQUFVO1lBQzNCLE9BQU9EO1FBQ1Q7UUFFQSxpQ0FBaUM7UUFDakMsSUFBSUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLO1lBQ3RCLE9BQU9EO1FBQ1Q7UUFFQSx1REFBdUQ7UUFDdkQsSUFDR0MsQ0FBQUEsWUFBWSxVQUFVQSxZQUFZLFFBQU0sSUFDekNDLFVBQVVDLFNBQVNFLE1BQU0sR0FBRyxHQUM1QjtZQUNBLE9BQU9MO1FBQ1Q7UUFFQSxPQUFVQSxXQUFTLE1BQUdDO0lBQ3hCLEdBQUc7QUFFUDtBQU1PLFNBQVNOLGdCQUFnQlcsR0FBVztJQUN6QyxPQUFPQSxJQUFJQyxPQUFPLENBQ2hCLGVBQ0E7QUFHSiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHJvdXRlclxcdXRpbHNcXGFwcC1wYXRocy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbnN1cmVMZWFkaW5nU2xhc2ggfSBmcm9tICcuLi8uLi9wYWdlLXBhdGgvZW5zdXJlLWxlYWRpbmctc2xhc2gnXG5pbXBvcnQgeyBpc0dyb3VwU2VnbWVudCB9IGZyb20gJy4uLy4uL3NlZ21lbnQnXG5cbi8qKlxuICogTm9ybWFsaXplcyBhbiBhcHAgcm91dGUgc28gaXQgcmVwcmVzZW50cyB0aGUgYWN0dWFsIHJlcXVlc3QgcGF0aC4gRXNzZW50aWFsbHlcbiAqIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyB0cmFuc2Zvcm1hdGlvbnM6XG4gKlxuICogLSBgLyhkYXNoYm9hcmQpL3VzZXIvW2lkXS9wYWdlYCB0byBgL3VzZXIvW2lkXWBcbiAqIC0gYC8oZGFzaGJvYXJkKS9hY2NvdW50L3BhZ2VgIHRvIGAvYWNjb3VudGBcbiAqIC0gYC91c2VyL1tpZF0vcGFnZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvYWNjb3VudC9wYWdlYCB0byBgL2FjY291bnRgXG4gKiAtIGAvcGFnZWAgdG8gYC9gXG4gKiAtIGAvKGRhc2hib2FyZCkvdXNlci9baWRdL3JvdXRlYCB0byBgL3VzZXIvW2lkXWBcbiAqIC0gYC8oZGFzaGJvYXJkKS9hY2NvdW50L3JvdXRlYCB0byBgL2FjY291bnRgXG4gKiAtIGAvdXNlci9baWRdL3JvdXRlYCB0byBgL3VzZXIvW2lkXWBcbiAqIC0gYC9hY2NvdW50L3JvdXRlYCB0byBgL2FjY291bnRgXG4gKiAtIGAvcm91dGVgIHRvIGAvYFxuICogLSBgL2AgdG8gYC9gXG4gKlxuICogQHBhcmFtIHJvdXRlIHRoZSBhcHAgcm91dGUgdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyB0aGUgbm9ybWFsaXplZCBwYXRobmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQXBwUGF0aChyb3V0ZTogc3RyaW5nKSB7XG4gIHJldHVybiBlbnN1cmVMZWFkaW5nU2xhc2goXG4gICAgcm91dGUuc3BsaXQoJy8nKS5yZWR1Y2UoKHBhdGhuYW1lLCBzZWdtZW50LCBpbmRleCwgc2VnbWVudHMpID0+IHtcbiAgICAgIC8vIEVtcHR5IHNlZ21lbnRzIGFyZSBpZ25vcmVkLlxuICAgICAgaWYgKCFzZWdtZW50KSB7XG4gICAgICAgIHJldHVybiBwYXRobmFtZVxuICAgICAgfVxuXG4gICAgICAvLyBHcm91cHMgYXJlIGlnbm9yZWQuXG4gICAgICBpZiAoaXNHcm91cFNlZ21lbnQoc2VnbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhuYW1lXG4gICAgICB9XG5cbiAgICAgIC8vIFBhcmFsbGVsIHNlZ21lbnRzIGFyZSBpZ25vcmVkLlxuICAgICAgaWYgKHNlZ21lbnRbMF0gPT09ICdAJykge1xuICAgICAgICByZXR1cm4gcGF0aG5hbWVcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGxhc3Qgc2VnbWVudCAoaWYgaXQncyBhIGxlYWYpIHNob3VsZCBiZSBpZ25vcmVkLlxuICAgICAgaWYgKFxuICAgICAgICAoc2VnbWVudCA9PT0gJ3BhZ2UnIHx8IHNlZ21lbnQgPT09ICdyb3V0ZScpICYmXG4gICAgICAgIGluZGV4ID09PSBzZWdtZW50cy5sZW5ndGggLSAxXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHBhdGhuYW1lXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgJHtwYXRobmFtZX0vJHtzZWdtZW50fWBcbiAgICB9LCAnJylcbiAgKVxufVxuXG4vKipcbiAqIFN0cmlwcyB0aGUgYC5yc2NgIGV4dGVuc2lvbiBpZiBpdCdzIGluIHRoZSBwYXRobmFtZS5cbiAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbiBmdWxsIHVybHMgaXQgY2hlY2tzIGA/YCBmb3Igc2VhcmNoUGFyYW1zIGhhbmRsaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUnNjVVJMKHVybDogc3RyaW5nKSB7XG4gIHJldHVybiB1cmwucmVwbGFjZShcbiAgICAvXFwucnNjKCR8XFw/KS8sXG4gICAgLy8gJDEgZW5zdXJlcyBgP2AgaXMgcHJlc2VydmVkXG4gICAgJyQxJ1xuICApXG59XG4iXSwibmFtZXMiOlsibm9ybWFsaXplQXBwUGF0aCIsIm5vcm1hbGl6ZVJzY1VSTCIsInJvdXRlIiwiZW5zdXJlTGVhZGluZ1NsYXNoIiwic3BsaXQiLCJyZWR1Y2UiLCJwYXRobmFtZSIsInNlZ21lbnQiLCJpbmRleCIsInNlZ21lbnRzIiwiaXNHcm91cFNlZ21lbnQiLCJsZW5ndGgiLCJ1cmwiLCJyZXBsYWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js":
|
||
/*!************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js ***!
|
||
\************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// Convert router.asPath to a URLSearchParams object\n// example: /dynamic/[slug]?foo=bar -> { foo: 'bar' }\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"asPathToSearchParams\", ({\n enumerable: true,\n get: function() {\n return asPathToSearchParams;\n }\n}));\nfunction asPathToSearchParams(asPath) {\n return new URL(asPath, 'http://n').searchParams;\n} //# sourceMappingURL=as-path-to-search-params.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYXMtcGF0aC10by1zZWFyY2gtcGFyYW1zLmpzIiwibWFwcGluZ3MiOiJBQUFBLG9EQUFvRDtBQUNwRCxxREFBcUQ7Ozs7O3dEQUNyQ0E7OztlQUFBQTs7O0FBQVQsU0FBU0EscUJBQXFCQyxNQUFjO0lBQ2pELE9BQU8sSUFBSUMsSUFBSUQsUUFBUSxZQUFZRSxZQUFZO0FBQ2pEIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFx1dGlsc1xcYXMtcGF0aC10by1zZWFyY2gtcGFyYW1zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvbnZlcnQgcm91dGVyLmFzUGF0aCB0byBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3Rcbi8vIGV4YW1wbGU6IC9keW5hbWljL1tzbHVnXT9mb289YmFyIC0+IHsgZm9vOiAnYmFyJyB9XG5leHBvcnQgZnVuY3Rpb24gYXNQYXRoVG9TZWFyY2hQYXJhbXMoYXNQYXRoOiBzdHJpbmcpOiBVUkxTZWFyY2hQYXJhbXMge1xuICByZXR1cm4gbmV3IFVSTChhc1BhdGgsICdodHRwOi8vbicpLnNlYXJjaFBhcmFtc1xufVxuIl0sIm5hbWVzIjpbImFzUGF0aFRvU2VhcmNoUGFyYW1zIiwiYXNQYXRoIiwiVVJMIiwic2VhcmNoUGFyYW1zIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/compare-states.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/compare-states.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"compareRouterStates\", ({\n enumerable: true,\n get: function() {\n return compareRouterStates;\n }\n}));\nfunction compareRouterStates(a, b) {\n const stateKeys = Object.keys(a);\n if (stateKeys.length !== Object.keys(b).length) return false;\n for(let i = stateKeys.length; i--;){\n const key = stateKeys[i];\n if (key === 'query') {\n const queryKeys = Object.keys(a.query);\n if (queryKeys.length !== Object.keys(b.query).length) {\n return false;\n }\n for(let j = queryKeys.length; j--;){\n const queryKey = queryKeys[j];\n if (!b.query.hasOwnProperty(queryKey) || a.query[queryKey] !== b.query[queryKey]) {\n return false;\n }\n }\n } else if (!b.hasOwnProperty(key) || a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n} //# sourceMappingURL=compare-states.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvY29tcGFyZS1zdGF0ZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozt1REFFZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLG9CQUFvQkMsQ0FBa0IsRUFBRUMsQ0FBa0I7SUFDeEUsTUFBTUMsWUFBWUMsT0FBT0MsSUFBSSxDQUFDSjtJQUM5QixJQUFJRSxVQUFVRyxNQUFNLEtBQUtGLE9BQU9DLElBQUksQ0FBQ0gsR0FBR0ksTUFBTSxFQUFFLE9BQU87SUFFdkQsSUFBSyxJQUFJQyxJQUFJSixVQUFVRyxNQUFNLEVBQUVDLEtBQU87UUFDcEMsTUFBTUMsTUFBTUwsU0FBUyxDQUFDSSxFQUFFO1FBQ3hCLElBQUlDLFFBQVEsU0FBUztZQUNuQixNQUFNQyxZQUFZTCxPQUFPQyxJQUFJLENBQUNKLEVBQUVTLEtBQUs7WUFDckMsSUFBSUQsVUFBVUgsTUFBTSxLQUFLRixPQUFPQyxJQUFJLENBQUNILEVBQUVRLEtBQUssRUFBRUosTUFBTSxFQUFFO2dCQUNwRCxPQUFPO1lBQ1Q7WUFDQSxJQUFLLElBQUlLLElBQUlGLFVBQVVILE1BQU0sRUFBRUssS0FBTztnQkFDcEMsTUFBTUMsV0FBV0gsU0FBUyxDQUFDRSxFQUFFO2dCQUM3QixJQUNFLENBQUNULEVBQUVRLEtBQUssQ0FBQ0csY0FBYyxDQUFDRCxhQUN4QlgsRUFBRVMsS0FBSyxDQUFDRSxTQUFTLEtBQUtWLEVBQUVRLEtBQUssQ0FBQ0UsU0FBUyxFQUN2QztvQkFDQSxPQUFPO2dCQUNUO1lBQ0Y7UUFDRixPQUFPLElBQ0wsQ0FBQ1YsRUFBRVcsY0FBYyxDQUFDTCxRQUNsQlAsQ0FBQyxDQUFDTyxJQUE2QixLQUFLTixDQUFDLENBQUNNLElBQTZCLEVBQ25FO1lBQ0EsT0FBTztRQUNUO0lBQ0Y7SUFFQSxPQUFPO0FBQ1QiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxjb21wYXJlLXN0YXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgUm91dGVyIH0gZnJvbSAnLi4vcm91dGVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVJvdXRlclN0YXRlcyhhOiBSb3V0ZXJbJ3N0YXRlJ10sIGI6IFJvdXRlclsnc3RhdGUnXSkge1xuICBjb25zdCBzdGF0ZUtleXMgPSBPYmplY3Qua2V5cyhhKVxuICBpZiAoc3RhdGVLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICBmb3IgKGxldCBpID0gc3RhdGVLZXlzLmxlbmd0aDsgaS0tOyApIHtcbiAgICBjb25zdCBrZXkgPSBzdGF0ZUtleXNbaV1cbiAgICBpZiAoa2V5ID09PSAncXVlcnknKSB7XG4gICAgICBjb25zdCBxdWVyeUtleXMgPSBPYmplY3Qua2V5cyhhLnF1ZXJ5KVxuICAgICAgaWYgKHF1ZXJ5S2V5cy5sZW5ndGggIT09IE9iamVjdC5rZXlzKGIucXVlcnkpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogPSBxdWVyeUtleXMubGVuZ3RoOyBqLS07ICkge1xuICAgICAgICBjb25zdCBxdWVyeUtleSA9IHF1ZXJ5S2V5c1tqXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWIucXVlcnkuaGFzT3duUHJvcGVydHkocXVlcnlLZXkpIHx8XG4gICAgICAgICAgYS5xdWVyeVtxdWVyeUtleV0gIT09IGIucXVlcnlbcXVlcnlLZXldXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICFiLmhhc093blByb3BlcnR5KGtleSkgfHxcbiAgICAgIGFba2V5IGFzIGtleW9mIFJvdXRlclsnc3RhdGUnXV0gIT09IGJba2V5IGFzIGtleW9mIFJvdXRlclsnc3RhdGUnXV1cbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG4iXSwibmFtZXMiOlsiY29tcGFyZVJvdXRlclN0YXRlcyIsImEiLCJiIiwic3RhdGVLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImkiLCJrZXkiLCJxdWVyeUtleXMiLCJxdWVyeSIsImoiLCJxdWVyeUtleSIsImhhc093blByb3BlcnR5Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/compare-states.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js ***!
|
||
\*********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"disableSmoothScrollDuringRouteTransition\", ({\n enumerable: true,\n get: function() {\n return disableSmoothScrollDuringRouteTransition;\n }\n}));\nconst _warnonce = __webpack_require__(/*! ../../utils/warn-once */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction disableSmoothScrollDuringRouteTransition(fn, options) {\n if (options === void 0) options = {};\n // if only the hash is changed, we don't need to disable smooth scrolling\n // we only care to prevent smooth scrolling when navigating to a new page to avoid jarring UX\n if (options.onlyHashChange) {\n fn();\n return;\n }\n const htmlElement = document.documentElement;\n const hasDataAttribute = htmlElement.dataset.scrollBehavior === 'smooth';\n // Since this is a breaking change, this is temporarily flagged\n // and will be false by default.\n // In the next major (v16), this will be automatically enabled\n if (false) {} else {\n // Old behavior: always manipulate styles, but warn about upcoming change\n // Warn if smooth scrolling is detected but no data attribute is present\n if ( true && !hasDataAttribute && getComputedStyle(htmlElement).scrollBehavior === 'smooth') {\n (0, _warnonce.warnOnce)('Detected `scroll-behavior: smooth` on the `<html>` element. In a future version, ' + 'Next.js will no longer automatically disable smooth scrolling during route transitions. ' + 'To prepare for this change, add `data-scroll-behavior=\"smooth\"` to your <html> element. ' + 'Learn more: https://nextjs.org/docs/messages/missing-data-scroll-behavior');\n }\n }\n // Proceed with temporarily disabling smooth scrolling\n const existing = htmlElement.style.scrollBehavior;\n htmlElement.style.scrollBehavior = 'auto';\n if (!options.dontForceLayout) {\n // In Chrome-based browsers we need to force reflow before calling `scrollTo`.\n // Otherwise it will not pickup the change in scrollBehavior\n // More info here: https://github.com/vercel/next.js/issues/40719#issuecomment-1336248042\n htmlElement.getClientRects();\n }\n fn();\n htmlElement.style.scrollBehavior = existing;\n} //# sourceMappingURL=disable-smooth-scroll.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZGlzYWJsZS1zbW9vdGgtc2Nyb2xsLmpzIiwibWFwcGluZ3MiOiI7Ozs7NEVBTWdCQTs7O2VBQUFBOzs7c0NBTlM7QUFNbEIsU0FBU0EseUNBQ2RDLEVBQWMsRUFDZEMsT0FBcUU7SUFBckVBLElBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLFVBQW1FLENBQUM7SUFFcEUseUVBQXlFO0lBQ3pFLDZGQUE2RjtJQUM3RixJQUFJQSxRQUFRQyxjQUFjLEVBQUU7UUFDMUJGO1FBQ0E7SUFDRjtJQUVBLE1BQU1HLGNBQWNDLFNBQVNDLGVBQWU7SUFDNUMsTUFBTUMsbUJBQW1CSCxZQUFZSSxPQUFPLENBQUNDLGNBQWMsS0FBSztJQUVoRSwrREFBK0Q7SUFDL0QsZ0NBQWdDO0lBQ2hDLDhEQUE4RDtJQUM5RCxJQUFJQyxLQUF5QyxFQUFFLEVBTTlDLE1BQU07UUFDTCx5RUFBeUU7UUFFekUsd0VBQXdFO1FBQ3hFLElBQ0VBLEtBQW9CLElBQ3BCLENBQUNILG9CQUNETyxpQkFBaUJWLGFBQWFLLGNBQWMsS0FBSyxVQUNqRDtZQUNBTSxDQUFBQSxHQUFBQSxVQUFBQSxRQUFBQSxFQUNFLHNGQUNFLDZGQUNBLDZGQUNBO1FBRU47SUFDRjtJQUVBLHNEQUFzRDtJQUN0RCxNQUFNQyxXQUFXWixZQUFZYSxLQUFLLENBQUNSLGNBQWM7SUFDakRMLFlBQVlhLEtBQUssQ0FBQ1IsY0FBYyxHQUFHO0lBQ25DLElBQUksQ0FBQ1AsUUFBUWdCLGVBQWUsRUFBRTtRQUM1Qiw4RUFBOEU7UUFDOUUsNERBQTREO1FBQzVELHlGQUF5RjtRQUN6RmQsWUFBWWUsY0FBYztJQUM1QjtJQUNBbEI7SUFDQUcsWUFBWWEsS0FBSyxDQUFDUixjQUFjLEdBQUdPO0FBQ3JDIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFx1dGlsc1xcZGlzYWJsZS1zbW9vdGgtc2Nyb2xsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvd2Fybi1vbmNlJ1xuXG4vKipcbiAqIFJ1biBmdW5jdGlvbiB3aXRoIGBzY3JvbGwtYmVoYXZpb3I6IGF1dG9gIGFwcGxpZWQgdG8gYDxodG1sLz5gLlxuICogVGhpcyBjc3MgY2hhbmdlIHdpbGwgYmUgcmV2ZXJ0ZWQgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGZpbmlzaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbihcbiAgZm46ICgpID0+IHZvaWQsXG4gIG9wdGlvbnM6IHsgZG9udEZvcmNlTGF5b3V0PzogYm9vbGVhbjsgb25seUhhc2hDaGFuZ2U/OiBib29sZWFuIH0gPSB7fVxuKSB7XG4gIC8vIGlmIG9ubHkgdGhlIGhhc2ggaXMgY2hhbmdlZCwgd2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHNtb290aCBzY3JvbGxpbmdcbiAgLy8gd2Ugb25seSBjYXJlIHRvIHByZXZlbnQgc21vb3RoIHNjcm9sbGluZyB3aGVuIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZSB0byBhdm9pZCBqYXJyaW5nIFVYXG4gIGlmIChvcHRpb25zLm9ubHlIYXNoQ2hhbmdlKSB7XG4gICAgZm4oKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgaHRtbEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgY29uc3QgaGFzRGF0YUF0dHJpYnV0ZSA9IGh0bWxFbGVtZW50LmRhdGFzZXQuc2Nyb2xsQmVoYXZpb3IgPT09ICdzbW9vdGgnXG5cbiAgLy8gU2luY2UgdGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSwgdGhpcyBpcyB0ZW1wb3JhcmlseSBmbGFnZ2VkXG4gIC8vIGFuZCB3aWxsIGJlIGZhbHNlIGJ5IGRlZmF1bHQuXG4gIC8vIEluIHRoZSBuZXh0IG1ham9yICh2MTYpLCB0aGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkXG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfT1BUSU1JWkVfUk9VVEVSX1NDUk9MTCkge1xuICAgIGlmICghaGFzRGF0YUF0dHJpYnV0ZSkge1xuICAgICAgLy8gTm8gc21vb3RoIHNjcm9sbGluZyBjb25maWd1cmVkLCBydW4gZGlyZWN0bHkgd2l0aG91dCBzdHlsZSBtYW5pcHVsYXRpb25cbiAgICAgIGZuKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBPbGQgYmVoYXZpb3I6IGFsd2F5cyBtYW5pcHVsYXRlIHN0eWxlcywgYnV0IHdhcm4gYWJvdXQgdXBjb21pbmcgY2hhbmdlXG5cbiAgICAvLyBXYXJuIGlmIHNtb290aCBzY3JvbGxpbmcgaXMgZGV0ZWN0ZWQgYnV0IG5vIGRhdGEgYXR0cmlidXRlIGlzIHByZXNlbnRcbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJlxuICAgICAgIWhhc0RhdGFBdHRyaWJ1dGUgJiZcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoaHRtbEVsZW1lbnQpLnNjcm9sbEJlaGF2aW9yID09PSAnc21vb3RoJ1xuICAgICkge1xuICAgICAgd2Fybk9uY2UoXG4gICAgICAgICdEZXRlY3RlZCBgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGhgIG9uIHRoZSBgPGh0bWw+YCBlbGVtZW50LiBJbiBhIGZ1dHVyZSB2ZXJzaW9uLCAnICtcbiAgICAgICAgICAnTmV4dC5qcyB3aWxsIG5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGRpc2FibGUgc21vb3RoIHNjcm9sbGluZyBkdXJpbmcgcm91dGUgdHJhbnNpdGlvbnMuICcgK1xuICAgICAgICAgICdUbyBwcmVwYXJlIGZvciB0aGlzIGNoYW5nZSwgYWRkIGBkYXRhLXNjcm9sbC1iZWhhdmlvcj1cInNtb290aFwiYCB0byB5b3VyIDxodG1sPiBlbGVtZW50LiAnICtcbiAgICAgICAgICAnTGVhcm4gbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbWlzc2luZy1kYXRhLXNjcm9sbC1iZWhhdmlvcidcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyBQcm9jZWVkIHdpdGggdGVtcG9yYXJpbHkgZGlzYWJsaW5nIHNtb290aCBzY3JvbGxpbmdcbiAgY29uc3QgZXhpc3RpbmcgPSBodG1sRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvclxuICBodG1sRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9ICdhdXRvJ1xuICBpZiAoIW9wdGlvbnMuZG9udEZvcmNlTGF5b3V0KSB7XG4gICAgLy8gSW4gQ2hyb21lLWJhc2VkIGJyb3dzZXJzIHdlIG5lZWQgdG8gZm9yY2UgcmVmbG93IGJlZm9yZSBjYWxsaW5nIGBzY3JvbGxUb2AuXG4gICAgLy8gT3RoZXJ3aXNlIGl0IHdpbGwgbm90IHBpY2t1cCB0aGUgY2hhbmdlIGluIHNjcm9sbEJlaGF2aW9yXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9pc3N1ZXMvNDA3MTkjaXNzdWVjb21tZW50LTEzMzYyNDgwNDJcbiAgICBodG1sRWxlbWVudC5nZXRDbGllbnRSZWN0cygpXG4gIH1cbiAgZm4oKVxuICBodG1sRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9IGV4aXN0aW5nXG59XG4iXSwibmFtZXMiOlsiZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbiIsImZuIiwib3B0aW9ucyIsIm9ubHlIYXNoQ2hhbmdlIiwiaHRtbEVsZW1lbnQiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImhhc0RhdGFBdHRyaWJ1dGUiLCJkYXRhc2V0Iiwic2Nyb2xsQmVoYXZpb3IiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX09QVElNSVpFX1JPVVRFUl9TQ1JPTEwiLCJOT0RFX0VOViIsImdldENvbXB1dGVkU3R5bGUiLCJ3YXJuT25jZSIsImV4aXN0aW5nIiwic3R5bGUiLCJkb250Rm9yY2VMYXlvdXQiLCJnZXRDbGllbnRSZWN0cyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"formatNextPathnameInfo\", ({\n enumerable: true,\n get: function() {\n return formatNextPathnameInfo;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _addpathprefix = __webpack_require__(/*! ./add-path-prefix */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _addpathsuffix = __webpack_require__(/*! ./add-path-suffix */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js\");\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/add-locale.js\");\nfunction formatNextPathnameInfo(info) {\n let pathname = (0, _addlocale.addLocale)(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix);\n if (info.buildId || !info.trailingSlash) {\n pathname = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n }\n if (info.buildId) {\n pathname = (0, _addpathsuffix.addPathSuffix)((0, _addpathprefix.addPathPrefix)(pathname, \"/_next/data/\" + info.buildId), info.pathname === '/' ? 'index.json' : '.json');\n }\n pathname = (0, _addpathprefix.addPathPrefix)(pathname, info.basePath);\n return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, _addpathsuffix.addPathSuffix)(pathname, '/') : pathname : (0, _removetrailingslash.removeTrailingSlash)(pathname);\n} //# sourceMappingURL=format-next-pathname-info.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LW5leHQtcGF0aG5hbWUtaW5mby5qcyIsIm1hcHBpbmdzIjoiOzs7OzBEQVdnQkE7OztlQUFBQTs7O2lEQVZvQjsyQ0FDTjsyQ0FDQTt1Q0FDSjtBQU9uQixTQUFTQSx1QkFBdUJDLElBQWtCO0lBQ3ZELElBQUlDLFdBQVdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQ2JGLEtBQUtDLFFBQVEsRUFDYkQsS0FBS0csTUFBTSxFQUNYSCxLQUFLSSxPQUFPLEdBQUdDLFlBQVlMLEtBQUtNLGFBQWEsRUFDN0NOLEtBQUtPLFlBQVk7SUFHbkIsSUFBSVAsS0FBS0ksT0FBTyxJQUFJLENBQUNKLEtBQUtRLGFBQWEsRUFBRTtRQUN2Q1AsV0FBV1EsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQlI7SUFDakM7SUFFQSxJQUFJRCxLQUFLSSxPQUFPLEVBQUU7UUFDaEJILFdBQVdTLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQ1RDLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNWLFVBQVcsaUJBQWNELEtBQUtJLE9BQU8sR0FDbkRKLEtBQUtDLFFBQVEsS0FBSyxNQUFNLGVBQWU7SUFFM0M7SUFFQUEsV0FBV1UsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY1YsVUFBVUQsS0FBS1ksUUFBUTtJQUNoRCxPQUFPLENBQUNaLEtBQUtJLE9BQU8sSUFBSUosS0FBS1EsYUFBYSxHQUN0QyxDQUFDUCxTQUFTWSxRQUFRLENBQUMsT0FDakJILENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNULFVBQVUsT0FDeEJBLFdBQ0ZRLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0JSO0FBQzFCIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFx1dGlsc1xcZm9ybWF0LW5leHQtcGF0aG5hbWUtaW5mby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5leHRQYXRobmFtZUluZm8gfSBmcm9tICcuL2dldC1uZXh0LXBhdGhuYW1lLWluZm8nXG5pbXBvcnQgeyByZW1vdmVUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi9yZW1vdmUtdHJhaWxpbmctc2xhc2gnXG5pbXBvcnQgeyBhZGRQYXRoUHJlZml4IH0gZnJvbSAnLi9hZGQtcGF0aC1wcmVmaXgnXG5pbXBvcnQgeyBhZGRQYXRoU3VmZml4IH0gZnJvbSAnLi9hZGQtcGF0aC1zdWZmaXgnXG5pbXBvcnQgeyBhZGRMb2NhbGUgfSBmcm9tICcuL2FkZC1sb2NhbGUnXG5cbmludGVyZmFjZSBFeHRlbmRlZEluZm8gZXh0ZW5kcyBOZXh0UGF0aG5hbWVJbmZvIHtcbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuICBpZ25vcmVQcmVmaXg/OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROZXh0UGF0aG5hbWVJbmZvKGluZm86IEV4dGVuZGVkSW5mbykge1xuICBsZXQgcGF0aG5hbWUgPSBhZGRMb2NhbGUoXG4gICAgaW5mby5wYXRobmFtZSxcbiAgICBpbmZvLmxvY2FsZSxcbiAgICBpbmZvLmJ1aWxkSWQgPyB1bmRlZmluZWQgOiBpbmZvLmRlZmF1bHRMb2NhbGUsXG4gICAgaW5mby5pZ25vcmVQcmVmaXhcbiAgKVxuXG4gIGlmIChpbmZvLmJ1aWxkSWQgfHwgIWluZm8udHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGhuYW1lID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSlcbiAgfVxuXG4gIGlmIChpbmZvLmJ1aWxkSWQpIHtcbiAgICBwYXRobmFtZSA9IGFkZFBhdGhTdWZmaXgoXG4gICAgICBhZGRQYXRoUHJlZml4KHBhdGhuYW1lLCBgL19uZXh0L2RhdGEvJHtpbmZvLmJ1aWxkSWR9YCksXG4gICAgICBpbmZvLnBhdGhuYW1lID09PSAnLycgPyAnaW5kZXguanNvbicgOiAnLmpzb24nXG4gICAgKVxuICB9XG5cbiAgcGF0aG5hbWUgPSBhZGRQYXRoUHJlZml4KHBhdGhuYW1lLCBpbmZvLmJhc2VQYXRoKVxuICByZXR1cm4gIWluZm8uYnVpbGRJZCAmJiBpbmZvLnRyYWlsaW5nU2xhc2hcbiAgICA/ICFwYXRobmFtZS5lbmRzV2l0aCgnLycpXG4gICAgICA/IGFkZFBhdGhTdWZmaXgocGF0aG5hbWUsICcvJylcbiAgICAgIDogcGF0aG5hbWVcbiAgICA6IHJlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWUpXG59XG4iXSwibmFtZXMiOlsiZm9ybWF0TmV4dFBhdGhuYW1lSW5mbyIsImluZm8iLCJwYXRobmFtZSIsImFkZExvY2FsZSIsImxvY2FsZSIsImJ1aWxkSWQiLCJ1bmRlZmluZWQiLCJkZWZhdWx0TG9jYWxlIiwiaWdub3JlUHJlZml4IiwidHJhaWxpbmdTbGFzaCIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJhZGRQYXRoU3VmZml4IiwiYWRkUGF0aFByZWZpeCIsImJhc2VQYXRoIiwiZW5kc1dpdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/format-url.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n formatUrl: function() {\n return formatUrl;\n },\n formatWithValidation: function() {\n return formatWithValidation;\n },\n urlObjectKeys: function() {\n return urlObjectKeys;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(pages-dir-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./querystring */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\"));\nconst slashedProtocols = /https?|ftp|gopher|file/;\nfunction formatUrl(urlObj) {\n let { auth, hostname } = urlObj;\n let protocol = urlObj.protocol || '';\n let pathname = urlObj.pathname || '';\n let hash = urlObj.hash || '';\n let query = urlObj.query || '';\n let host = false;\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';\n if (urlObj.host) {\n host = auth + urlObj.host;\n } else if (hostname) {\n host = auth + (~hostname.indexOf(':') ? \"[\" + hostname + \"]\" : hostname);\n if (urlObj.port) {\n host += ':' + urlObj.port;\n }\n }\n if (query && typeof query === 'object') {\n query = String(_querystring.urlQueryToSearchParams(query));\n }\n let search = urlObj.search || query && \"?\" + query || '';\n if (protocol && !protocol.endsWith(':')) protocol += ':';\n if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname[0] !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n if (hash && hash[0] !== '#') hash = '#' + hash;\n if (search && search[0] !== '?') search = '?' + search;\n pathname = pathname.replace(/[?#]/g, encodeURIComponent);\n search = search.replace('#', '%23');\n return \"\" + protocol + host + pathname + search + hash;\n}\nconst urlObjectKeys = [\n 'auth',\n 'hash',\n 'host',\n 'hostname',\n 'href',\n 'path',\n 'pathname',\n 'port',\n 'protocol',\n 'query',\n 'search',\n 'slashes'\n];\nfunction formatWithValidation(url) {\n if (true) {\n if (url !== null && typeof url === 'object') {\n Object.keys(url).forEach((key)=>{\n if (!urlObjectKeys.includes(key)) {\n console.warn(\"Unknown key passed via urlObject into url.format: \" + key);\n }\n });\n }\n }\n return formatUrl(url);\n} //# sourceMappingURL=format-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybC5qcyIsIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUM7QUFDdkMsc0RBQXNEO0FBQ3RELEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLHNFQUFzRTtBQUN0RSxzRUFBc0U7QUFDdEUsNEVBQTRFO0FBQzVFLHFFQUFxRTtBQUNyRSx3QkFBd0I7QUFDeEIsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSw2REFBNkQ7QUFDN0QsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLHlDQUF5Qzs7Ozs7Ozs7Ozs7OztJQVF6QkEsU0FBUztlQUFUQTs7SUE2REFDLG9CQUFvQjtlQUFwQkE7O0lBZkhDLGFBQWE7ZUFBYkE7Ozs7bUZBbERnQjtBQUU3QixNQUFNQyxtQkFBbUI7QUFFbEIsU0FBU0gsVUFBVUksTUFBaUI7SUFDekMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRSxHQUFHRjtJQUN6QixJQUFJRyxXQUFXSCxPQUFPRyxRQUFRLElBQUk7SUFDbEMsSUFBSUMsV0FBV0osT0FBT0ksUUFBUSxJQUFJO0lBQ2xDLElBQUlDLE9BQU9MLE9BQU9LLElBQUksSUFBSTtJQUMxQixJQUFJQyxRQUFRTixPQUFPTSxLQUFLLElBQUk7SUFDNUIsSUFBSUMsT0FBdUI7SUFFM0JOLE9BQU9BLE9BQU9PLG1CQUFtQlAsTUFBTVEsT0FBTyxDQUFDLFFBQVEsT0FBTyxNQUFNO0lBRXBFLElBQUlULE9BQU9PLElBQUksRUFBRTtRQUNmQSxPQUFPTixPQUFPRCxPQUFPTyxJQUFJO0lBQzNCLE9BQU8sSUFBSUwsVUFBVTtRQUNuQkssT0FBT04sT0FBUSxFQUFDQyxTQUFTUSxPQUFPLENBQUMsT0FBUSxNQUFHUixXQUFTLE1BQUtBLFFBQUFBLENBQU87UUFDakUsSUFBSUYsT0FBT1csSUFBSSxFQUFFO1lBQ2ZKLFFBQVEsTUFBTVAsT0FBT1csSUFBSTtRQUMzQjtJQUNGO0lBRUEsSUFBSUwsU0FBUyxPQUFPQSxVQUFVLFVBQVU7UUFDdENBLFFBQVFNLE9BQU9DLGFBQVlDLHNCQUFzQixDQUFDUjtJQUNwRDtJQUVBLElBQUlTLFNBQVNmLE9BQU9lLE1BQU0sSUFBS1QsU0FBVSxNQUFHQSxTQUFZO0lBRXhELElBQUlILFlBQVksQ0FBQ0EsU0FBU2EsUUFBUSxDQUFDLE1BQU1iLFlBQVk7SUFFckQsSUFDRUgsT0FBT2lCLE9BQU8sSUFDWixFQUFDZCxZQUFZSixpQkFBaUJtQixJQUFJLENBQUNmLFNBQUFBLENBQVEsSUFBTUksU0FBUyxPQUM1RDtRQUNBQSxPQUFPLE9BQVFBLENBQUFBLFFBQVEsR0FBQztRQUN4QixJQUFJSCxZQUFZQSxRQUFRLENBQUMsRUFBRSxLQUFLLEtBQUtBLFdBQVcsTUFBTUE7SUFDeEQsT0FBTyxJQUFJLENBQUNHLE1BQU07UUFDaEJBLE9BQU87SUFDVDtJQUVBLElBQUlGLFFBQVFBLElBQUksQ0FBQyxFQUFFLEtBQUssS0FBS0EsT0FBTyxNQUFNQTtJQUMxQyxJQUFJVSxVQUFVQSxNQUFNLENBQUMsRUFBRSxLQUFLLEtBQUtBLFNBQVMsTUFBTUE7SUFFaERYLFdBQVdBLFNBQVNLLE9BQU8sQ0FBQyxTQUFTRDtJQUNyQ08sU0FBU0EsT0FBT04sT0FBTyxDQUFDLEtBQUs7SUFFN0IsT0FBUSxLQUFFTixXQUFXSSxPQUFPSCxXQUFXVyxTQUFTVjtBQUNsRDtBQUVPLE1BQU1QLGdCQUFnQjtJQUMzQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVNLFNBQVNELHFCQUFxQnNCLEdBQWM7SUFDakQsSUFBSUMsSUFBb0IsRUFBb0I7UUFDMUMsSUFBSUQsUUFBUSxRQUFRLE9BQU9BLFFBQVEsVUFBVTtZQUMzQ0ksT0FBT0MsSUFBSSxDQUFDTCxLQUFLTSxPQUFPLENBQUMsQ0FBQ0M7Z0JBQ3hCLElBQUksQ0FBQzVCLGNBQWM2QixRQUFRLENBQUNELE1BQU07b0JBQ2hDRSxRQUFRQyxJQUFJLENBQ1QsdURBQW9ESDtnQkFFekQ7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxPQUFPOUIsVUFBVXVCO0FBQ25CIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFx1dGlsc1xcZm9ybWF0LXVybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGb3JtYXQgZnVuY3Rpb24gbW9kaWZpZWQgZnJvbSBub2RlanNcbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgdHlwZSB7IFVybE9iamVjdCB9IGZyb20gJ3VybCdcbmltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCAqIGFzIHF1ZXJ5c3RyaW5nIGZyb20gJy4vcXVlcnlzdHJpbmcnXG5cbmNvbnN0IHNsYXNoZWRQcm90b2NvbHMgPSAvaHR0cHM/fGZ0cHxnb3BoZXJ8ZmlsZS9cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFVybCh1cmxPYmo6IFVybE9iamVjdCkge1xuICBsZXQgeyBhdXRoLCBob3N0bmFtZSB9ID0gdXJsT2JqXG4gIGxldCBwcm90b2NvbCA9IHVybE9iai5wcm90b2NvbCB8fCAnJ1xuICBsZXQgcGF0aG5hbWUgPSB1cmxPYmoucGF0aG5hbWUgfHwgJydcbiAgbGV0IGhhc2ggPSB1cmxPYmouaGFzaCB8fCAnJ1xuICBsZXQgcXVlcnkgPSB1cmxPYmoucXVlcnkgfHwgJydcbiAgbGV0IGhvc3Q6IHN0cmluZyB8IGZhbHNlID0gZmFsc2VcblxuICBhdXRoID0gYXV0aCA/IGVuY29kZVVSSUNvbXBvbmVudChhdXRoKS5yZXBsYWNlKC8lM0EvaSwgJzonKSArICdAJyA6ICcnXG5cbiAgaWYgKHVybE9iai5ob3N0KSB7XG4gICAgaG9zdCA9IGF1dGggKyB1cmxPYmouaG9zdFxuICB9IGVsc2UgaWYgKGhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAofmhvc3RuYW1lLmluZGV4T2YoJzonKSA/IGBbJHtob3N0bmFtZX1dYCA6IGhvc3RuYW1lKVxuICAgIGlmICh1cmxPYmoucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB1cmxPYmoucG9ydFxuICAgIH1cbiAgfVxuXG4gIGlmIChxdWVyeSAmJiB0eXBlb2YgcXVlcnkgPT09ICdvYmplY3QnKSB7XG4gICAgcXVlcnkgPSBTdHJpbmcocXVlcnlzdHJpbmcudXJsUXVlcnlUb1NlYXJjaFBhcmFtcyhxdWVyeSBhcyBQYXJzZWRVcmxRdWVyeSkpXG4gIH1cblxuICBsZXQgc2VhcmNoID0gdXJsT2JqLnNlYXJjaCB8fCAocXVlcnkgJiYgYD8ke3F1ZXJ5fWApIHx8ICcnXG5cbiAgaWYgKHByb3RvY29sICYmICFwcm90b2NvbC5lbmRzV2l0aCgnOicpKSBwcm90b2NvbCArPSAnOidcblxuICBpZiAoXG4gICAgdXJsT2JqLnNsYXNoZXMgfHxcbiAgICAoKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xzLnRlc3QocHJvdG9jb2wpKSAmJiBob3N0ICE9PSBmYWxzZSlcbiAgKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJylcbiAgICBpZiAocGF0aG5hbWUgJiYgcGF0aG5hbWVbMF0gIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZVxuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnXG4gIH1cblxuICBpZiAoaGFzaCAmJiBoYXNoWzBdICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoXG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoWzBdICE9PSAnPycpIHNlYXJjaCA9ICc/JyArIHNlYXJjaFxuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBlbmNvZGVVUklDb21wb25lbnQpXG4gIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCcjJywgJyUyMycpXG5cbiAgcmV0dXJuIGAke3Byb3RvY29sfSR7aG9zdH0ke3BhdGhuYW1lfSR7c2VhcmNofSR7aGFzaH1gXG59XG5cbmV4cG9ydCBjb25zdCB1cmxPYmplY3RLZXlzID0gW1xuICAnYXV0aCcsXG4gICdoYXNoJyxcbiAgJ2hvc3QnLFxuICAnaG9zdG5hbWUnLFxuICAnaHJlZicsXG4gICdwYXRoJyxcbiAgJ3BhdGhuYW1lJyxcbiAgJ3BvcnQnLFxuICAncHJvdG9jb2wnLFxuICAncXVlcnknLFxuICAnc2VhcmNoJyxcbiAgJ3NsYXNoZXMnLFxuXVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0V2l0aFZhbGlkYXRpb24odXJsOiBVcmxPYmplY3QpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICBpZiAodXJsICE9PSBudWxsICYmIHR5cGVvZiB1cmwgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyh1cmwpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoIXVybE9iamVjdEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBVbmtub3duIGtleSBwYXNzZWQgdmlhIHVybE9iamVjdCBpbnRvIHVybC5mb3JtYXQ6ICR7a2V5fWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvcm1hdFVybCh1cmwpXG59XG4iXSwibmFtZXMiOlsiZm9ybWF0VXJsIiwiZm9ybWF0V2l0aFZhbGlkYXRpb24iLCJ1cmxPYmplY3RLZXlzIiwic2xhc2hlZFByb3RvY29scyIsInVybE9iaiIsImF1dGgiLCJob3N0bmFtZSIsInByb3RvY29sIiwicGF0aG5hbWUiLCJoYXNoIiwicXVlcnkiLCJob3N0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImluZGV4T2YiLCJwb3J0IiwiU3RyaW5nIiwicXVlcnlzdHJpbmciLCJ1cmxRdWVyeVRvU2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiZW5kc1dpdGgiLCJzbGFzaGVzIiwidGVzdCIsInVybCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiaW5jbHVkZXMiLCJjb25zb2xlIiwid2FybiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// Translates a logical route into its pages asset path (relative from a common prefix)\n// \"asset path\" being its javascript file, data file, prerendered html,...\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return getAssetPathFromRoute;\n }\n}));\nfunction getAssetPathFromRoute(route, ext) {\n if (ext === void 0) ext = '';\n const path = route === '/' ? '/index' : /^\\/index(\\/|$)/.test(route) ? \"/index\" + route : route;\n return path + ext;\n} //# sourceMappingURL=get-asset-path-from-route.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LWFzc2V0LXBhdGgtZnJvbS1yb3V0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBQSx1RkFBdUY7QUFDdkYsMEVBQTBFOzs7OzsyQ0FDMUU7OztlQUF3QkE7OztBQUFULFNBQVNBLHNCQUN0QkMsS0FBYSxFQUNiQyxHQUFnQjtJQUFoQkEsSUFBQUEsUUFBQUEsS0FBQUEsR0FBQUEsTUFBYztJQUVkLE1BQU1DLE9BQ0pGLFVBQVUsTUFDTixXQUNBLGlCQUFpQkcsSUFBSSxDQUFDSCxTQUNuQixXQUFRQSxRQUNUQTtJQUNSLE9BQU9FLE9BQU9EO0FBQ2hCIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFx1dGlsc1xcZ2V0LWFzc2V0LXBhdGgtZnJvbS1yb3V0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUcmFuc2xhdGVzIGEgbG9naWNhbCByb3V0ZSBpbnRvIGl0cyBwYWdlcyBhc3NldCBwYXRoIChyZWxhdGl2ZSBmcm9tIGEgY29tbW9uIHByZWZpeClcbi8vIFwiYXNzZXQgcGF0aFwiIGJlaW5nIGl0cyBqYXZhc2NyaXB0IGZpbGUsIGRhdGEgZmlsZSwgcHJlcmVuZGVyZWQgaHRtbCwuLi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFzc2V0UGF0aEZyb21Sb3V0ZShcbiAgcm91dGU6IHN0cmluZyxcbiAgZXh0OiBzdHJpbmcgPSAnJ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgcGF0aCA9XG4gICAgcm91dGUgPT09ICcvJ1xuICAgICAgPyAnL2luZGV4J1xuICAgICAgOiAvXlxcL2luZGV4KFxcL3wkKS8udGVzdChyb3V0ZSlcbiAgICAgICAgPyBgL2luZGV4JHtyb3V0ZX1gXG4gICAgICAgIDogcm91dGVcbiAgcmV0dXJuIHBhdGggKyBleHRcbn1cbiJdLCJuYW1lcyI6WyJnZXRBc3NldFBhdGhGcm9tUm91dGUiLCJyb3V0ZSIsImV4dCIsInBhdGgiLCJ0ZXN0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js ***!
|
||
\**********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getNextPathnameInfo\", ({\n enumerable: true,\n get: function() {\n return getNextPathnameInfo;\n }\n}));\nconst _normalizelocalepath = __webpack_require__(/*! ../../i18n/normalize-locale-path */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _removepathprefix = __webpack_require__(/*! ./remove-path-prefix */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction getNextPathnameInfo(pathname, options) {\n var _options_nextConfig;\n const { basePath, i18n, trailingSlash } = (_options_nextConfig = options.nextConfig) != null ? _options_nextConfig : {};\n const info = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash\n };\n if (basePath && (0, _pathhasprefix.pathHasPrefix)(info.pathname, basePath)) {\n info.pathname = (0, _removepathprefix.removePathPrefix)(info.pathname, basePath);\n info.basePath = basePath;\n }\n let pathnameNoDataPrefix = info.pathname;\n if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) {\n const paths = info.pathname.replace(/^\\/_next\\/data\\//, '').replace(/\\.json$/, '').split('/');\n const buildId = paths[0];\n info.buildId = buildId;\n pathnameNoDataPrefix = paths[1] !== 'index' ? \"/\" + paths.slice(1).join('/') : '/';\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix;\n }\n }\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, _normalizelocalepath.normalizeLocalePath)(info.pathname, i18n.locales);\n info.locale = result.detectedLocale;\n var _result_pathname;\n info.pathname = (_result_pathname = result.pathname) != null ? _result_pathname : info.pathname;\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, _normalizelocalepath.normalizeLocalePath)(pathnameNoDataPrefix, i18n.locales);\n if (result.detectedLocale) {\n info.locale = result.detectedLocale;\n }\n }\n }\n return info;\n} //# sourceMappingURL=get-next-pathname-info.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LW5leHQtcGF0aG5hbWUtaW5mby5qcyIsIm1hcHBpbmdzIjoiOzs7O3VEQW9EZ0JBOzs7ZUFBQUE7OztpREFwRG9COzhDQUNIOzJDQUNIO0FBa0R2QixTQUFTQSxvQkFDZEMsUUFBZ0IsRUFDaEJDLE9BQWdCO1FBRTBCQTtJQUExQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFQyxhQUFhLEVBQUUsR0FBR0gsQ0FBQUEsc0JBQUFBLFFBQVFJLFVBQUFBLEtBQVUsT0FBbEJKLHNCQUFzQixDQUFDO0lBQ2pFLE1BQU1LLE9BQXlCO1FBQzdCTjtRQUNBSSxlQUFlSixhQUFhLE1BQU1BLFNBQVNPLFFBQVEsQ0FBQyxPQUFPSDtJQUM3RDtJQUVBLElBQUlGLFlBQVlNLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNGLEtBQUtOLFFBQVEsRUFBRUUsV0FBVztRQUN0REksS0FBS04sUUFBUSxHQUFHUyxDQUFBQSxHQUFBQSxrQkFBQUEsZ0JBQUFBLEVBQWlCSCxLQUFLTixRQUFRLEVBQUVFO1FBQ2hESSxLQUFLSixRQUFRLEdBQUdBO0lBQ2xCO0lBQ0EsSUFBSVEsdUJBQXVCSixLQUFLTixRQUFRO0lBRXhDLElBQ0VNLEtBQUtOLFFBQVEsQ0FBQ1csVUFBVSxDQUFDLG1CQUN6QkwsS0FBS04sUUFBUSxDQUFDTyxRQUFRLENBQUMsVUFDdkI7UUFDQSxNQUFNSyxRQUFRTixLQUFLTixRQUFRLENBQ3hCYSxPQUFPLENBQUMsb0JBQW9CLElBQzVCQSxPQUFPLENBQUMsV0FBVyxJQUNuQkMsS0FBSyxDQUFDO1FBRVQsTUFBTUMsVUFBVUgsS0FBSyxDQUFDLEVBQUU7UUFDeEJOLEtBQUtTLE9BQU8sR0FBR0E7UUFDZkwsdUJBQ0VFLEtBQUssQ0FBQyxFQUFFLEtBQUssVUFBVyxNQUFHQSxNQUFNSSxLQUFLLENBQUMsR0FBR0MsSUFBSSxDQUFDLE9BQVM7UUFFMUQsc0RBQXNEO1FBQ3RELGtEQUFrRDtRQUNsRCxJQUFJaEIsUUFBUWlCLFNBQVMsS0FBSyxNQUFNO1lBQzlCWixLQUFLTixRQUFRLEdBQUdVO1FBQ2xCO0lBQ0Y7SUFFQSw0RUFBNEU7SUFDNUUseUJBQXlCO0lBQ3pCLElBQUlQLE1BQU07UUFDUixJQUFJZ0IsU0FBU2xCLFFBQVFtQixZQUFZLEdBQzdCbkIsUUFBUW1CLFlBQVksQ0FBQ0MsT0FBTyxDQUFDZixLQUFLTixRQUFRLElBQzFDc0IsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQmhCLEtBQUtOLFFBQVEsRUFBRUcsS0FBS29CLE9BQU87UUFFbkRqQixLQUFLa0IsTUFBTSxHQUFHTCxPQUFPTSxjQUFjO1lBQ25CTjtRQUFoQmIsS0FBS04sUUFBUSxHQUFHbUIsQ0FBQUEsbUJBQUFBLE9BQU9uQixRQUFBQSxLQUFRLE9BQWZtQixtQkFBbUJiLEtBQUtOLFFBQVE7UUFFaEQsSUFBSSxDQUFDbUIsT0FBT00sY0FBYyxJQUFJbkIsS0FBS1MsT0FBTyxFQUFFO1lBQzFDSSxTQUFTbEIsUUFBUW1CLFlBQVksR0FDekJuQixRQUFRbUIsWUFBWSxDQUFDQyxPQUFPLENBQUNYLHdCQUM3QlksQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQlosc0JBQXNCUCxLQUFLb0IsT0FBTztZQUUxRCxJQUFJSixPQUFPTSxjQUFjLEVBQUU7Z0JBQ3pCbkIsS0FBS2tCLE1BQU0sR0FBR0wsT0FBT00sY0FBYztZQUNyQztRQUNGO0lBQ0Y7SUFDQSxPQUFPbkI7QUFDVCIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHJvdXRlclxcdXRpbHNcXGdldC1uZXh0LXBhdGhuYW1lLWluZm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9ybWFsaXplTG9jYWxlUGF0aCB9IGZyb20gJy4uLy4uL2kxOG4vbm9ybWFsaXplLWxvY2FsZS1wYXRoJ1xuaW1wb3J0IHsgcmVtb3ZlUGF0aFByZWZpeCB9IGZyb20gJy4vcmVtb3ZlLXBhdGgtcHJlZml4J1xuaW1wb3J0IHsgcGF0aEhhc1ByZWZpeCB9IGZyb20gJy4vcGF0aC1oYXMtcHJlZml4J1xuaW1wb3J0IHR5cGUgeyBJMThOUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvbGliL2kxOG4tcHJvdmlkZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dFBhdGhuYW1lSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBwYXRoIGluIGNhc2UgdGhlIHBhdGhuYW1lIGluY2x1ZGVkIGl0LlxuICAgKi9cbiAgYmFzZVBhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBidWlsZElkIGZvciB3aGVuIHRoZSBwYXJzZWQgVVJMIGlzIGEgZGF0YSBVUkwuIFBhcnNpbmcgaXQgY2FuIGJlXG4gICAqIGRpc2FibGVkIHdpdGggdGhlIGBwYXJzZURhdGFgIG9wdGlvbi5cbiAgICovXG4gIGJ1aWxkSWQ/OiBzdHJpbmdcbiAgLyoqXG4gICAqIElmIHRoZXJlIHdhcyBhIGxvY2FsZSBpbiB0aGUgcGF0aG5hbWUsIHRoaXMgd2lsbCBob2xkIGl0cyB2YWx1ZS5cbiAgICovXG4gIGxvY2FsZT86IHN0cmluZ1xuICAvKipcbiAgICogVGhlIHByb2Nlc3NlZCBwYXRobmFtZSB3aXRob3V0IGEgYmFzZSBwYXRoLCBsb2NhbGUsIG9yIGRhdGEgVVJMIGVsZW1lbnRzXG4gICAqIHdoZW4gcGFyc2luZyBpdCBpcyBlbmFibGVkLlxuICAgKi9cbiAgcGF0aG5hbWU6IHN0cmluZ1xuICAvKipcbiAgICogQSBib29sZWFuIHRlbGxpbmcgaWYgdGhlIHBhdGhuYW1lIGhhZCBhIHRyYWlsaW5nU2xhc2guIFRoaXMgY2FuIGJlIG9ubHlcbiAgICogdHJ1ZSBpZiB0cmFpbGluZ1NsYXNoIGlzIGVuYWJsZWQuXG4gICAqL1xuICB0cmFpbGluZ1NsYXNoPzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIHBhc3NlZCB0byB0cnVlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBwYXJzZSBOZXh0anMgZGF0YSBVUkxzLlxuICAgKi9cbiAgcGFyc2VEYXRhPzogYm9vbGVhblxuICAvKipcbiAgICogQSBwYXJ0aWFsIG9mIHRoZSBOZXh0LmpzIGNvbmZpZ3VyYXRpb24gdG8gcGFyc2UgdGhlIFVSTC5cbiAgICovXG4gIG5leHRDb25maWc/OiB7XG4gICAgYmFzZVBhdGg/OiBzdHJpbmdcbiAgICBpMThuPzogeyBsb2NhbGVzPzogcmVhZG9ubHkgc3RyaW5nW10gfSB8IG51bGxcbiAgICB0cmFpbGluZ1NsYXNoPzogYm9vbGVhblxuICB9XG5cbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCB0aGlzIG5vcm1hbGl6ZXIgd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUgbG9jYWxlIGluc3RlYWQgb2ZcbiAgICogdGhlIGRlZmF1bHQgbG9jYWxlIGRldGVjdGlvbi5cbiAgICovXG4gIGkxOG5Qcm92aWRlcj86IEkxOE5Qcm92aWRlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFBhdGhuYW1lSW5mbyhcbiAgcGF0aG5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogT3B0aW9uc1xuKTogTmV4dFBhdGhuYW1lSW5mbyB7XG4gIGNvbnN0IHsgYmFzZVBhdGgsIGkxOG4sIHRyYWlsaW5nU2xhc2ggfSA9IG9wdGlvbnMubmV4dENvbmZpZyA/PyB7fVxuICBjb25zdCBpbmZvOiBOZXh0UGF0aG5hbWVJbmZvID0ge1xuICAgIHBhdGhuYW1lLFxuICAgIHRyYWlsaW5nU2xhc2g6IHBhdGhuYW1lICE9PSAnLycgPyBwYXRobmFtZS5lbmRzV2l0aCgnLycpIDogdHJhaWxpbmdTbGFzaCxcbiAgfVxuXG4gIGlmIChiYXNlUGF0aCAmJiBwYXRoSGFzUHJlZml4KGluZm8ucGF0aG5hbWUsIGJhc2VQYXRoKSkge1xuICAgIGluZm8ucGF0aG5hbWUgPSByZW1vdmVQYXRoUHJlZml4KGluZm8ucGF0aG5hbWUsIGJhc2VQYXRoKVxuICAgIGluZm8uYmFzZVBhdGggPSBiYXNlUGF0aFxuICB9XG4gIGxldCBwYXRobmFtZU5vRGF0YVByZWZpeCA9IGluZm8ucGF0aG5hbWVcblxuICBpZiAoXG4gICAgaW5mby5wYXRobmFtZS5zdGFydHNXaXRoKCcvX25leHQvZGF0YS8nKSAmJlxuICAgIGluZm8ucGF0aG5hbWUuZW5kc1dpdGgoJy5qc29uJylcbiAgKSB7XG4gICAgY29uc3QgcGF0aHMgPSBpbmZvLnBhdGhuYW1lXG4gICAgICAucmVwbGFjZSgvXlxcL19uZXh0XFwvZGF0YVxcLy8sICcnKVxuICAgICAgLnJlcGxhY2UoL1xcLmpzb24kLywgJycpXG4gICAgICAuc3BsaXQoJy8nKVxuXG4gICAgY29uc3QgYnVpbGRJZCA9IHBhdGhzWzBdXG4gICAgaW5mby5idWlsZElkID0gYnVpbGRJZFxuICAgIHBhdGhuYW1lTm9EYXRhUHJlZml4ID1cbiAgICAgIHBhdGhzWzFdICE9PSAnaW5kZXgnID8gYC8ke3BhdGhzLnNsaWNlKDEpLmpvaW4oJy8nKX1gIDogJy8nXG5cbiAgICAvLyB1cGRhdGUgcGF0aG5hbWUgd2l0aCBub3JtYWxpemVkIGlmIGVuYWJsZWQgYWx0aG91Z2hcbiAgICAvLyB3ZSB1c2Ugbm9ybWFsaXplZCB0byBwb3B1bGF0ZSBsb2NhbGUgaW5mbyBzdGlsbFxuICAgIGlmIChvcHRpb25zLnBhcnNlRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgaW5mby5wYXRobmFtZSA9IHBhdGhuYW1lTm9EYXRhUHJlZml4XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgcHJvdmlkZWQsIHVzZSB0aGUgbG9jYWxlIHJvdXRlIG5vcm1hbGl6ZXIgdG8gZGV0ZWN0IHRoZSBsb2NhbGUgaW5zdGVhZFxuICAvLyBvZiB0aGUgZnVuY3Rpb24gYmVsb3cuXG4gIGlmIChpMThuKSB7XG4gICAgbGV0IHJlc3VsdCA9IG9wdGlvbnMuaTE4blByb3ZpZGVyXG4gICAgICA/IG9wdGlvbnMuaTE4blByb3ZpZGVyLmFuYWx5emUoaW5mby5wYXRobmFtZSlcbiAgICAgIDogbm9ybWFsaXplTG9jYWxlUGF0aChpbmZvLnBhdGhuYW1lLCBpMThuLmxvY2FsZXMpXG5cbiAgICBpbmZvLmxvY2FsZSA9IHJlc3VsdC5kZXRlY3RlZExvY2FsZVxuICAgIGluZm8ucGF0aG5hbWUgPSByZXN1bHQucGF0aG5hbWUgPz8gaW5mby5wYXRobmFtZVxuXG4gICAgaWYgKCFyZXN1bHQuZGV0ZWN0ZWRMb2NhbGUgJiYgaW5mby5idWlsZElkKSB7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLmkxOG5Qcm92aWRlclxuICAgICAgICA/IG9wdGlvbnMuaTE4blByb3ZpZGVyLmFuYWx5emUocGF0aG5hbWVOb0RhdGFQcmVmaXgpXG4gICAgICAgIDogbm9ybWFsaXplTG9jYWxlUGF0aChwYXRobmFtZU5vRGF0YVByZWZpeCwgaTE4bi5sb2NhbGVzKVxuXG4gICAgICBpZiAocmVzdWx0LmRldGVjdGVkTG9jYWxlKSB7XG4gICAgICAgIGluZm8ubG9jYWxlID0gcmVzdWx0LmRldGVjdGVkTG9jYWxlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmZvXG59XG4iXSwibmFtZXMiOlsiZ2V0TmV4dFBhdGhuYW1lSW5mbyIsInBhdGhuYW1lIiwib3B0aW9ucyIsImJhc2VQYXRoIiwiaTE4biIsInRyYWlsaW5nU2xhc2giLCJuZXh0Q29uZmlnIiwiaW5mbyIsImVuZHNXaXRoIiwicGF0aEhhc1ByZWZpeCIsInJlbW92ZVBhdGhQcmVmaXgiLCJwYXRobmFtZU5vRGF0YVByZWZpeCIsInN0YXJ0c1dpdGgiLCJwYXRocyIsInJlcGxhY2UiLCJzcGxpdCIsImJ1aWxkSWQiLCJzbGljZSIsImpvaW4iLCJwYXJzZURhdGEiLCJyZXN1bHQiLCJpMThuUHJvdmlkZXIiLCJhbmFseXplIiwibm9ybWFsaXplTG9jYWxlUGF0aCIsImxvY2FsZXMiLCJsb2NhbGUiLCJkZXRlY3RlZExvY2FsZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/html-bots.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/html-bots.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This regex contains the bots that we need to do a blocking render for and can't safely stream the response\n// due to how they parse the DOM. For example, they might explicitly check for metadata in the `head` tag, so we can't stream metadata tags after the `head` was sent.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HTML_LIMITED_BOT_UA_RE\", ({\n enumerable: true,\n get: function() {\n return HTML_LIMITED_BOT_UA_RE;\n }\n}));\nconst HTML_LIMITED_BOT_UA_RE = /Mediapartners-Google|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti/i; //# sourceMappingURL=html-bots.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaHRtbC1ib3RzLmpzIiwibWFwcGluZ3MiOiJBQUFBLDZHQUE2RztBQUM3RyxzS0FBc0s7Ozs7OzBEQUN6SkE7OztlQUFBQTs7O0FBQU4sTUFBTUEseUJBQ1giLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxodG1sLWJvdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyByZWdleCBjb250YWlucyB0aGUgYm90cyB0aGF0IHdlIG5lZWQgdG8gZG8gYSBibG9ja2luZyByZW5kZXIgZm9yIGFuZCBjYW4ndCBzYWZlbHkgc3RyZWFtIHRoZSByZXNwb25zZVxuLy8gZHVlIHRvIGhvdyB0aGV5IHBhcnNlIHRoZSBET00uIEZvciBleGFtcGxlLCB0aGV5IG1pZ2h0IGV4cGxpY2l0bHkgY2hlY2sgZm9yIG1ldGFkYXRhIGluIHRoZSBgaGVhZGAgdGFnLCBzbyB3ZSBjYW4ndCBzdHJlYW0gbWV0YWRhdGEgdGFncyBhZnRlciB0aGUgYGhlYWRgIHdhcyBzZW50LlxuZXhwb3J0IGNvbnN0IEhUTUxfTElNSVRFRF9CT1RfVUFfUkUgPVxuICAvTWVkaWFwYXJ0bmVycy1Hb29nbGV8Q2hyb21lLUxpZ2h0aG91c2V8U2x1cnB8RHVja0R1Y2tCb3R8YmFpZHVzcGlkZXJ8eWFuZGV4fHNvZ291fGJpdGx5Ym90fHR1bWJscnx2a1NoYXJlfHF1b3JhIGxpbmsgcHJldmlld3xyZWRkaXRib3R8aWFfYXJjaGl2ZXJ8QmluZ2JvdHxCaW5nUHJldmlld3xhcHBsZWJvdHxmYWNlYm9va2V4dGVybmFsaGl0fGZhY2Vib29rY2F0YWxvZ3xUd2l0dGVyYm90fExpbmtlZEluQm90fFNsYWNrYm90fERpc2NvcmRib3R8V2hhdHNBcHB8U2t5cGVVcmlQcmV2aWV3fFlldGkvaVxuIl0sIm5hbWVzIjpbIkhUTUxfTElNSVRFRF9CT1RfVUFfUkUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/html-bots.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/index.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getSortedRouteObjects: function() {\n return _sortedroutes.getSortedRouteObjects;\n },\n getSortedRoutes: function() {\n return _sortedroutes.getSortedRoutes;\n },\n isDynamicRoute: function() {\n return _isdynamic.isDynamicRoute;\n }\n});\nconst _sortedroutes = __webpack_require__(/*! ./sorted-routes */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\");\nconst _isdynamic = __webpack_require__(/*! ./is-dynamic */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\"); //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQTBCQSxxQkFBcUI7ZUFBckJBLGNBQUFBLHFCQUFxQjs7SUFBdENDLGVBQWU7ZUFBZkEsY0FBQUEsZUFBZTs7SUFDZkMsY0FBYztlQUFkQSxXQUFBQSxjQUFjOzs7MENBRGdDO3VDQUN4QiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHJvdXRlclxcdXRpbHNcXGluZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGdldFNvcnRlZFJvdXRlcywgZ2V0U29ydGVkUm91dGVPYmplY3RzIH0gZnJvbSAnLi9zb3J0ZWQtcm91dGVzJ1xuZXhwb3J0IHsgaXNEeW5hbWljUm91dGUgfSBmcm9tICcuL2lzLWR5bmFtaWMnXG4iXSwibmFtZXMiOlsiZ2V0U29ydGVkUm91dGVPYmplY3RzIiwiZ2V0U29ydGVkUm91dGVzIiwiaXNEeW5hbWljUm91dGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/interception-routes.js":
|
||
/*!*******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/interception-routes.js ***!
|
||
\*******************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n INTERCEPTION_ROUTE_MARKERS: function() {\n return INTERCEPTION_ROUTE_MARKERS;\n },\n extractInterceptionRouteInformation: function() {\n return extractInterceptionRouteInformation;\n },\n isInterceptionRouteAppPath: function() {\n return isInterceptionRouteAppPath;\n }\n});\nconst _apppaths = __webpack_require__(/*! ./app-paths */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)'\n];\nfunction isInterceptionRouteAppPath(path) {\n // TODO-APP: add more serious validation\n return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;\n}\nfunction extractInterceptionRouteInformation(path) {\n let interceptingRoute, marker, interceptedRoute;\n for (const segment of path.split('/')){\n marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n ;\n [interceptingRoute, interceptedRoute] = path.split(marker, 2);\n break;\n }\n }\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>\"), \"__NEXT_ERROR_CODE\", {\n value: \"E269\",\n enumerable: false,\n configurable: true\n });\n }\n interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n ;\n switch(marker){\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = \"/\" + interceptedRoute;\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute;\n }\n break;\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Cannot use (..) marker at the root level, use (.) instead.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E207\",\n enumerable: false,\n configurable: true\n });\n }\n interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/');\n break;\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute;\n break;\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n const splitInterceptingRoute = interceptingRoute.split('/');\n if (splitInterceptingRoute.length <= 2) {\n throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Cannot use (..)(..) marker at the root level or one level up.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E486\",\n enumerable: false,\n configurable: true\n });\n }\n interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/');\n break;\n default:\n throw Object.defineProperty(new Error('Invariant: unexpected marker'), \"__NEXT_ERROR_CODE\", {\n value: \"E112\",\n enumerable: false,\n configurable: true\n });\n }\n return {\n interceptingRoute,\n interceptedRoute\n };\n} //# sourceMappingURL=interception-routes.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJjZXB0aW9uLXJvdXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFHYUEsMEJBQTBCO2VBQTFCQTs7SUFrQkdDLG1DQUFtQztlQUFuQ0E7O0lBWEFDLDBCQUEwQjtlQUExQkE7OztzQ0FWaUI7QUFHMUIsTUFBTUYsNkJBQTZCO0lBQ3hDO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFTSxTQUFTRSwyQkFBMkJDLElBQVk7SUFDckQsd0NBQXdDO0lBQ3hDLE9BQ0VBLEtBQ0dDLEtBQUssQ0FBQyxLQUNOQyxJQUFJLENBQUMsQ0FBQ0MsVUFDTE4sMkJBQTJCSyxJQUFJLENBQUMsQ0FBQ0UsSUFBTUQsUUFBUUUsVUFBVSxDQUFDRCxTQUN0REU7QUFFWjtBQUVPLFNBQVNSLG9DQUFvQ0UsSUFBWTtJQUM5RCxJQUFJTyxtQkFDRkMsUUFDQUM7SUFFRixLQUFLLE1BQU1OLFdBQVdILEtBQUtDLEtBQUssQ0FBQyxLQUFNO1FBQ3JDTyxTQUFTWCwyQkFBMkJLLElBQUksQ0FBQyxDQUFDRSxJQUFNRCxRQUFRRSxVQUFVLENBQUNEO1FBQ25FLElBQUlJLFFBQVE7O1lBQ1QsQ0FBQ0QsbUJBQW1CRSxpQkFBaUIsR0FBR1QsS0FBS0MsS0FBSyxDQUFDTyxRQUFRO1lBQzVEO1FBQ0Y7SUFDRjtJQUVBLElBQUksQ0FBQ0QscUJBQXFCLENBQUNDLFVBQVUsQ0FBQ0Msa0JBQWtCO1FBQ3RELE1BQU0scUJBRUwsQ0FGSyxJQUFJQyxNQUNQLGlDQUE4QlYsT0FBSyxzRkFEaEM7bUJBQUE7d0JBQUE7MEJBQUE7UUFFTjtJQUNGO0lBRUFPLG9CQUFvQkksQ0FBQUEsR0FBQUEsVUFBQUEsZ0JBQUFBLEVBQWlCSixtQkFBbUIsaURBQWlEOztJQUV6RyxPQUFRQztRQUNOLEtBQUs7WUFDSCxvSUFBb0k7WUFDcEksSUFBSUQsc0JBQXNCLEtBQUs7Z0JBQzdCRSxtQkFBb0IsTUFBR0E7WUFDekIsT0FBTztnQkFDTEEsbUJBQW1CRixvQkFBb0IsTUFBTUU7WUFDL0M7WUFDQTtRQUNGLEtBQUs7WUFDSCx1SEFBdUg7WUFDdkgsSUFBSUYsc0JBQXNCLEtBQUs7Z0JBQzdCLE1BQU0scUJBRUwsQ0FGSyxJQUFJRyxNQUNQLGlDQUE4QlYsT0FBSyxpRUFEaEM7MkJBQUE7Z0NBQUE7a0NBQUE7Z0JBRU47WUFDRjtZQUNBUyxtQkFBbUJGLGtCQUNoQk4sS0FBSyxDQUFDLEtBQ05XLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FDVkMsTUFBTSxDQUFDSixrQkFDUEssSUFBSSxDQUFDO1lBQ1I7UUFDRixLQUFLO1lBQ0gsa0lBQWtJO1lBQ2xJTCxtQkFBbUIsTUFBTUE7WUFDekI7UUFDRixLQUFLO1lBQ0gsaUlBQWlJO1lBRWpJLE1BQU1NLHlCQUF5QlIsa0JBQWtCTixLQUFLLENBQUM7WUFDdkQsSUFBSWMsdUJBQXVCQyxNQUFNLElBQUksR0FBRztnQkFDdEMsTUFBTSxxQkFFTCxDQUZLLElBQUlOLE1BQ1AsaUNBQThCVixPQUFLLG9FQURoQzsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFFTjtZQUNGO1lBRUFTLG1CQUFtQk0sdUJBQ2hCSCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQ1ZDLE1BQU0sQ0FBQ0osa0JBQ1BLLElBQUksQ0FBQztZQUNSO1FBQ0Y7WUFDRSxNQUFNLHFCQUF5QyxDQUF6QyxJQUFJSixNQUFNLGlDQUFWO3VCQUFBOzRCQUFBOzhCQUFBO1lBQXdDO0lBQ2xEO0lBRUEsT0FBTztRQUFFSDtRQUFtQkU7SUFBaUI7QUFDL0MiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxpbnRlcmNlcHRpb24tcm91dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZUFwcFBhdGggfSBmcm9tICcuL2FwcC1wYXRocydcblxuLy8gb3JkZXIgbWF0dGVycyBoZXJlLCB0aGUgZmlyc3QgbWF0Y2ggd2lsbCBiZSB1c2VkXG5leHBvcnQgY29uc3QgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMgPSBbXG4gICcoLi4pKC4uKScsXG4gICcoLiknLFxuICAnKC4uKScsXG4gICcoLi4uKScsXG5dIGFzIGNvbnN0XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gVE9ETy1BUFA6IGFkZCBtb3JlIHNlcmlvdXMgdmFsaWRhdGlvblxuICByZXR1cm4gKFxuICAgIHBhdGhcbiAgICAgIC5zcGxpdCgnLycpXG4gICAgICAuZmluZCgoc2VnbWVudCkgPT5cbiAgICAgICAgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSkgPT4gc2VnbWVudC5zdGFydHNXaXRoKG0pKVxuICAgICAgKSAhPT0gdW5kZWZpbmVkXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uKHBhdGg6IHN0cmluZykge1xuICBsZXQgaW50ZXJjZXB0aW5nUm91dGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBtYXJrZXI6ICh0eXBlb2YgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMpW251bWJlcl0gfCB1bmRlZmluZWQsXG4gICAgaW50ZXJjZXB0ZWRSb3V0ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHBhdGguc3BsaXQoJy8nKSkge1xuICAgIG1hcmtlciA9IElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLmZpbmQoKG0pID0+IHNlZ21lbnQuc3RhcnRzV2l0aChtKSlcbiAgICBpZiAobWFya2VyKSB7XG4gICAgICA7W2ludGVyY2VwdGluZ1JvdXRlLCBpbnRlcmNlcHRlZFJvdXRlXSA9IHBhdGguc3BsaXQobWFya2VyLCAyKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoIWludGVyY2VwdGluZ1JvdXRlIHx8ICFtYXJrZXIgfHwgIWludGVyY2VwdGVkUm91dGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbnRlcmNlcHRpb24gcm91dGU6ICR7cGF0aH0uIE11c3QgYmUgaW4gdGhlIGZvcm1hdCAvPGludGVyY2VwdGluZyByb3V0ZT4vKC4ufC4uLnwuLikoLi4pLzxpbnRlcmNlcHRlZCByb3V0ZT5gXG4gICAgKVxuICB9XG5cbiAgaW50ZXJjZXB0aW5nUm91dGUgPSBub3JtYWxpemVBcHBQYXRoKGludGVyY2VwdGluZ1JvdXRlKSAvLyBub3JtYWxpemUgdGhlIHBhdGgsIGUuZy4gLyhibG9nKS9mZWVkIC0+IC9mZWVkXG5cbiAgc3dpdGNoIChtYXJrZXIpIHtcbiAgICBjYXNlICcoLiknOlxuICAgICAgLy8gKC4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCB3aXRoIHNpYmxpbmcgcm91dGVzLCBzbyB3ZSBqdXN0IG5lZWQgdG8gYXBwZW5kIHRoZSBpbnRlcmNlcHRlZCByb3V0ZSB0byB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICBpZiAoaW50ZXJjZXB0aW5nUm91dGUgPT09ICcvJykge1xuICAgICAgICBpbnRlcmNlcHRlZFJvdXRlID0gYC8ke2ludGVyY2VwdGVkUm91dGV9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlICsgJy8nICsgaW50ZXJjZXB0ZWRSb3V0ZVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICBjYXNlICcoLi4pJzpcbiAgICAgIC8vICguLikgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIG1hdGNoIGF0IG9uZSBsZXZlbCB1cCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICBpZiAoaW50ZXJjZXB0aW5nUm91dGUgPT09ICcvJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgaW50ZXJjZXB0aW9uIHJvdXRlOiAke3BhdGh9LiBDYW5ub3QgdXNlICguLikgbWFya2VyIGF0IHRoZSByb290IGxldmVsLCB1c2UgKC4pIGluc3RlYWQuYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpbnRlcmNlcHRlZFJvdXRlID0gaW50ZXJjZXB0aW5nUm91dGVcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDAsIC0xKVxuICAgICAgICAuY29uY2F0KGludGVyY2VwdGVkUm91dGUpXG4gICAgICAgIC5qb2luKCcvJylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnKC4uLiknOlxuICAgICAgLy8gKC4uLikgd2lsbCBtYXRjaCB0aGUgcm91dGUgc2VnbWVudCBpbiB0aGUgcm9vdCBkaXJlY3RvcnksIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmVwZW5kIHRoZSBpbnRlcmNlcHRlZCByb3V0ZVxuICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9ICcvJyArIGludGVyY2VwdGVkUm91dGVcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnKC4uKSguLiknOlxuICAgICAgLy8gKC4uKSguLikgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIG1hdGNoIGF0IHR3byBsZXZlbHMgdXAsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBsYXN0IHR3byBzZWdtZW50cyBvZiB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG5cbiAgICAgIGNvbnN0IHNwbGl0SW50ZXJjZXB0aW5nUm91dGUgPSBpbnRlcmNlcHRpbmdSb3V0ZS5zcGxpdCgnLycpXG4gICAgICBpZiAoc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZS5sZW5ndGggPD0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgaW50ZXJjZXB0aW9uIHJvdXRlOiAke3BhdGh9LiBDYW5ub3QgdXNlICguLikoLi4pIG1hcmtlciBhdCB0aGUgcm9vdCBsZXZlbCBvciBvbmUgbGV2ZWwgdXAuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGludGVyY2VwdGVkUm91dGUgPSBzcGxpdEludGVyY2VwdGluZ1JvdXRlXG4gICAgICAgIC5zbGljZSgwLCAtMilcbiAgICAgICAgLmNvbmNhdChpbnRlcmNlcHRlZFJvdXRlKVxuICAgICAgICAuam9pbignLycpXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFyaWFudDogdW5leHBlY3RlZCBtYXJrZXInKVxuICB9XG5cbiAgcmV0dXJuIHsgaW50ZXJjZXB0aW5nUm91dGUsIGludGVyY2VwdGVkUm91dGUgfVxufVxuIl0sIm5hbWVzIjpbIklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTIiwiZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb24iLCJpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aCIsInBhdGgiLCJzcGxpdCIsImZpbmQiLCJzZWdtZW50IiwibSIsInN0YXJ0c1dpdGgiLCJ1bmRlZmluZWQiLCJpbnRlcmNlcHRpbmdSb3V0ZSIsIm1hcmtlciIsImludGVyY2VwdGVkUm91dGUiLCJFcnJvciIsIm5vcm1hbGl6ZUFwcFBhdGgiLCJzbGljZSIsImNvbmNhdCIsImpvaW4iLCJzcGxpdEludGVyY2VwdGluZ1JvdXRlIiwibGVuZ3RoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/interception-routes.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"interpolateAs\", ({\n enumerable: true,\n get: function() {\n return interpolateAs;\n }\n}));\nconst _routematcher = __webpack_require__(/*! ./route-matcher */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./route-regex */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction interpolateAs(route, asPathname, query) {\n let interpolatedRoute = '';\n const dynamicRegex = (0, _routeregex.getRouteRegex)(route);\n const dynamicGroups = dynamicRegex.groups;\n const dynamicMatches = (asPathname !== route ? (0, _routematcher.getRouteMatcher)(dynamicRegex)(asPathname) : '') || // Fall back to reading the values from the href\n // TODO: should this take priority; also need to change in the router.\n query;\n interpolatedRoute = route;\n const params = Object.keys(dynamicGroups);\n if (!params.every((param)=>{\n let value = dynamicMatches[param] || '';\n const { repeat, optional } = dynamicGroups[param];\n // support single-level catch-all\n // TODO: more robust handling for user-error (passing `/`)\n let replaced = \"[\" + (repeat ? '...' : '') + param + \"]\";\n if (optional) {\n replaced = (!value ? '/' : '') + \"[\" + replaced + \"]\";\n }\n if (repeat && !Array.isArray(value)) value = [\n value\n ];\n return (optional || param in dynamicMatches) && // Interpolate group into data URL if present\n (interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map(// path delimiter escaped since they are being inserted\n // into the URL and we expect URL encoded segments\n // when parsing dynamic route params\n (segment)=>encodeURIComponent(segment)).join('/') : encodeURIComponent(value)) || '/');\n })) {\n interpolatedRoute = '' // did not satisfy all requirements\n ;\n // n.b. We ignore this error because we handle warning for this case in\n // development in the `<Link>` component directly.\n }\n return {\n params,\n result: interpolatedRoute\n };\n} //# sourceMappingURL=interpolate-as.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJwb2xhdGUtYXMuanMiLCJtYXBwaW5ncyI6Ijs7OztpREFLZ0JBOzs7ZUFBQUE7OzswQ0FIZ0I7d0NBQ0Y7QUFFdkIsU0FBU0EsY0FDZEMsS0FBYSxFQUNiQyxVQUFrQixFQUNsQkMsS0FBcUI7SUFFckIsSUFBSUMsb0JBQW9CO0lBRXhCLE1BQU1DLGVBQWVDLENBQUFBLEdBQUFBLFlBQUFBLGFBQUFBLEVBQWNMO0lBQ25DLE1BQU1NLGdCQUFnQkYsYUFBYUcsTUFBTTtJQUN6QyxNQUFNQyxpQkFFSixDQUFDUCxlQUFlRCxRQUFRUyxDQUFBQSxHQUFBQSxjQUFBQSxVQUQ0QixLQUM1QkEsRUFBZ0JMLGNBQWNILGNBQWMsR0FBQyxJQUNyRSxnREFBZ0Q7SUFDaEQsc0VBQXNFO0lBQ3RFQztJQUVGQyxvQkFBb0JIO0lBQ3BCLE1BQU1VLFNBQVNDLE9BQU9DLElBQUksQ0FBQ047SUFFM0IsSUFDRSxDQUFDSSxPQUFPRyxLQUFLLENBQUMsQ0FBQ0M7UUFDYixJQUFJQyxRQUFRUCxjQUFjLENBQUNNLE1BQU0sSUFBSTtRQUNyQyxNQUFNLEVBQUVFLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdYLGFBQWEsQ0FBQ1EsTUFBTTtRQUVqRCxpQ0FBaUM7UUFDakMsMERBQTBEO1FBQzFELElBQUlJLFdBQVksTUFBR0YsQ0FBQUEsU0FBUyxRQUFRLEdBQUMsR0FBSUYsUUFBTTtRQUMvQyxJQUFJRyxVQUFVO1lBQ1pDLFdBQWMsRUFBQ0gsUUFBUSxNQUFNLEdBQUMsR0FBRSxNQUFHRyxXQUFTO1FBQzlDO1FBQ0EsSUFBSUYsVUFBVSxDQUFDRyxNQUFNQyxPQUFPLENBQUNMLFFBQVFBLFFBQVE7WUFBQ0E7U0FBTTtRQUVwRCxPQUNHRSxDQUFBQSxZQUFZSCxTQUFTTixjQUFBQSxDQUFhLElBQ25DLDZDQUE2QztTQUM1Q0wsb0JBQ0NBLGtCQUFtQmtCLE9BQU8sQ0FDeEJILFVBQ0FGLFNBQ0tELE1BQ0VPLEdBQUcsQ0FDRix1REFBdUQ7UUFFdkQsa0RBQWtEO1FBQ2xELG9DQUFvQztRQUNwQyxDQUFDQyxVQUFZQyxtQkFBbUJELFVBRWpDRSxJQUFJLENBQUMsT0FDUkQsbUJBQW1CVCxXQUNwQixJQUFFO0lBRWIsSUFDQTtRQUNBWixvQkFBb0IsR0FBRyxtQ0FBbUM7O0lBRTFELHVFQUF1RTtJQUN2RSxrREFBa0Q7SUFDcEQ7SUFDQSxPQUFPO1FBQ0xPO1FBQ0FnQixRQUFRdkI7SUFDVjtBQUNGIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFx1dGlsc1xcaW50ZXJwb2xhdGUtYXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJzZWRVcmxRdWVyeSB9IGZyb20gJ3F1ZXJ5c3RyaW5nJ1xuXG5pbXBvcnQgeyBnZXRSb3V0ZU1hdGNoZXIgfSBmcm9tICcuL3JvdXRlLW1hdGNoZXInXG5pbXBvcnQgeyBnZXRSb3V0ZVJlZ2V4IH0gZnJvbSAnLi9yb3V0ZS1yZWdleCdcblxuZXhwb3J0IGZ1bmN0aW9uIGludGVycG9sYXRlQXMoXG4gIHJvdXRlOiBzdHJpbmcsXG4gIGFzUGF0aG5hbWU6IHN0cmluZyxcbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4pIHtcbiAgbGV0IGludGVycG9sYXRlZFJvdXRlID0gJydcblxuICBjb25zdCBkeW5hbWljUmVnZXggPSBnZXRSb3V0ZVJlZ2V4KHJvdXRlKVxuICBjb25zdCBkeW5hbWljR3JvdXBzID0gZHluYW1pY1JlZ2V4Lmdyb3Vwc1xuICBjb25zdCBkeW5hbWljTWF0Y2hlcyA9XG4gICAgLy8gVHJ5IHRvIG1hdGNoIHRoZSBkeW5hbWljIHJvdXRlIGFnYWluc3QgdGhlIGFzUGF0aFxuICAgIChhc1BhdGhuYW1lICE9PSByb3V0ZSA/IGdldFJvdXRlTWF0Y2hlcihkeW5hbWljUmVnZXgpKGFzUGF0aG5hbWUpIDogJycpIHx8XG4gICAgLy8gRmFsbCBiYWNrIHRvIHJlYWRpbmcgdGhlIHZhbHVlcyBmcm9tIHRoZSBocmVmXG4gICAgLy8gVE9ETzogc2hvdWxkIHRoaXMgdGFrZSBwcmlvcml0eTsgYWxzbyBuZWVkIHRvIGNoYW5nZSBpbiB0aGUgcm91dGVyLlxuICAgIHF1ZXJ5XG5cbiAgaW50ZXJwb2xhdGVkUm91dGUgPSByb3V0ZVxuICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhkeW5hbWljR3JvdXBzKVxuXG4gIGlmIChcbiAgICAhcGFyYW1zLmV2ZXJ5KChwYXJhbSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZHluYW1pY01hdGNoZXNbcGFyYW1dIHx8ICcnXG4gICAgICBjb25zdCB7IHJlcGVhdCwgb3B0aW9uYWwgfSA9IGR5bmFtaWNHcm91cHNbcGFyYW1dXG5cbiAgICAgIC8vIHN1cHBvcnQgc2luZ2xlLWxldmVsIGNhdGNoLWFsbFxuICAgICAgLy8gVE9ETzogbW9yZSByb2J1c3QgaGFuZGxpbmcgZm9yIHVzZXItZXJyb3IgKHBhc3NpbmcgYC9gKVxuICAgICAgbGV0IHJlcGxhY2VkID0gYFske3JlcGVhdCA/ICcuLi4nIDogJyd9JHtwYXJhbX1dYFxuICAgICAgaWYgKG9wdGlvbmFsKSB7XG4gICAgICAgIHJlcGxhY2VkID0gYCR7IXZhbHVlID8gJy8nIDogJyd9WyR7cmVwbGFjZWR9XWBcbiAgICAgIH1cbiAgICAgIGlmIChyZXBlYXQgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB2YWx1ZSA9IFt2YWx1ZV1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKG9wdGlvbmFsIHx8IHBhcmFtIGluIGR5bmFtaWNNYXRjaGVzKSAmJlxuICAgICAgICAvLyBJbnRlcnBvbGF0ZSBncm91cCBpbnRvIGRhdGEgVVJMIGlmIHByZXNlbnRcbiAgICAgICAgKGludGVycG9sYXRlZFJvdXRlID1cbiAgICAgICAgICBpbnRlcnBvbGF0ZWRSb3V0ZSEucmVwbGFjZShcbiAgICAgICAgICAgIHJlcGxhY2VkLFxuICAgICAgICAgICAgcmVwZWF0XG4gICAgICAgICAgICAgID8gKHZhbHVlIGFzIHN0cmluZ1tdKVxuICAgICAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgdmFsdWVzIHNob3VsZCBiZSBmdWxseSBlbmNvZGVkIGluc3RlYWQgb2YganVzdFxuICAgICAgICAgICAgICAgICAgICAvLyBwYXRoIGRlbGltaXRlciBlc2NhcGVkIHNpbmNlIHRoZXkgYXJlIGJlaW5nIGluc2VydGVkXG4gICAgICAgICAgICAgICAgICAgIC8vIGludG8gdGhlIFVSTCBhbmQgd2UgZXhwZWN0IFVSTCBlbmNvZGVkIHNlZ21lbnRzXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gcGFyc2luZyBkeW5hbWljIHJvdXRlIHBhcmFtc1xuICAgICAgICAgICAgICAgICAgICAoc2VnbWVudCkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHNlZ21lbnQpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAuam9pbignLycpXG4gICAgICAgICAgICAgIDogZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlIGFzIHN0cmluZylcbiAgICAgICAgICApIHx8ICcvJylcbiAgICAgIClcbiAgICB9KVxuICApIHtcbiAgICBpbnRlcnBvbGF0ZWRSb3V0ZSA9ICcnIC8vIGRpZCBub3Qgc2F0aXNmeSBhbGwgcmVxdWlyZW1lbnRzXG5cbiAgICAvLyBuLmIuIFdlIGlnbm9yZSB0aGlzIGVycm9yIGJlY2F1c2Ugd2UgaGFuZGxlIHdhcm5pbmcgZm9yIHRoaXMgY2FzZSBpblxuICAgIC8vIGRldmVsb3BtZW50IGluIHRoZSBgPExpbms+YCBjb21wb25lbnQgZGlyZWN0bHkuXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXJhbXMsXG4gICAgcmVzdWx0OiBpbnRlcnBvbGF0ZWRSb3V0ZSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbImludGVycG9sYXRlQXMiLCJyb3V0ZSIsImFzUGF0aG5hbWUiLCJxdWVyeSIsImludGVycG9sYXRlZFJvdXRlIiwiZHluYW1pY1JlZ2V4IiwiZ2V0Um91dGVSZWdleCIsImR5bmFtaWNHcm91cHMiLCJncm91cHMiLCJkeW5hbWljTWF0Y2hlcyIsImdldFJvdXRlTWF0Y2hlciIsInBhcmFtcyIsIk9iamVjdCIsImtleXMiLCJldmVyeSIsInBhcmFtIiwidmFsdWUiLCJyZXBlYXQiLCJvcHRpb25hbCIsInJlcGxhY2VkIiwiQXJyYXkiLCJpc0FycmF5IiwicmVwbGFjZSIsIm1hcCIsInNlZ21lbnQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIiwicmVzdWx0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/is-bot.js ***!
|
||
\******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n HTML_LIMITED_BOT_UA_RE: function() {\n return _htmlbots.HTML_LIMITED_BOT_UA_RE;\n },\n HTML_LIMITED_BOT_UA_RE_STRING: function() {\n return HTML_LIMITED_BOT_UA_RE_STRING;\n },\n getBotType: function() {\n return getBotType;\n },\n isBot: function() {\n return isBot;\n }\n});\nconst _htmlbots = __webpack_require__(/*! ./html-bots */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/html-bots.js\");\n// Bot crawler that will spin up a headless browser and execute JS.\n// By default, only googlebots are considered as DOM bots. Blow is where the regex is computed from:\n// x-ref: https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers\nconst HEADLESS_BROWSER_BOT_UA_RE = /google/i;\nconst HTML_LIMITED_BOT_UA_RE_STRING = _htmlbots.HTML_LIMITED_BOT_UA_RE.source;\nfunction isDomBotUA(userAgent) {\n return HEADLESS_BROWSER_BOT_UA_RE.test(userAgent);\n}\nfunction isHtmlLimitedBotUA(userAgent) {\n return _htmlbots.HTML_LIMITED_BOT_UA_RE.test(userAgent);\n}\nfunction isBot(userAgent) {\n return isDomBotUA(userAgent) || isHtmlLimitedBotUA(userAgent);\n}\nfunction getBotType(userAgent) {\n if (isDomBotUA(userAgent)) {\n return 'dom';\n }\n if (isHtmlLimitedBotUA(userAgent)) {\n return 'html';\n }\n return undefined;\n} //# sourceMappingURL=is-bot.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtYm90LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVNTQSxzQkFBc0I7ZUFBdEJBLFVBQUFBLHNCQUFzQjs7SUFGbEJDLDZCQUE2QjtlQUE3QkE7O0lBZ0JHQyxVQUFVO2VBQVZBOztJQUpBQyxLQUFLO2VBQUxBOzs7c0NBbkJ1QjtBQUV2QyxtRUFBbUU7QUFDbkUsb0dBQW9HO0FBQ3BHLDRGQUE0RjtBQUM1RixNQUFNQyw2QkFBNkI7QUFFNUIsTUFBTUgsZ0NBQWdDRCxVQUFBQSxzQkFBc0IsQ0FBQ0ssTUFBTTtBQUkxRSxTQUFTQyxXQUFXQyxTQUFpQjtJQUNuQyxPQUFPSCwyQkFBMkJJLElBQUksQ0FBQ0Q7QUFDekM7QUFFQSxTQUFTRSxtQkFBbUJGLFNBQWlCO0lBQzNDLE9BQU9QLFVBQUFBLHNCQUFzQixDQUFDUSxJQUFJLENBQUNEO0FBQ3JDO0FBRU8sU0FBU0osTUFBTUksU0FBaUI7SUFDckMsT0FBT0QsV0FBV0MsY0FBY0UsbUJBQW1CRjtBQUNyRDtBQUVPLFNBQVNMLFdBQVdLLFNBQWlCO0lBQzFDLElBQUlELFdBQVdDLFlBQVk7UUFDekIsT0FBTztJQUNUO0lBQ0EsSUFBSUUsbUJBQW1CRixZQUFZO1FBQ2pDLE9BQU87SUFDVDtJQUNBLE9BQU9HO0FBQ1QiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxpcy1ib3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSFRNTF9MSU1JVEVEX0JPVF9VQV9SRSB9IGZyb20gJy4vaHRtbC1ib3RzJ1xuXG4vLyBCb3QgY3Jhd2xlciB0aGF0IHdpbGwgc3BpbiB1cCBhIGhlYWRsZXNzIGJyb3dzZXIgYW5kIGV4ZWN1dGUgSlMuXG4vLyBCeSBkZWZhdWx0LCBvbmx5IGdvb2dsZWJvdHMgYXJlIGNvbnNpZGVyZWQgYXMgRE9NIGJvdHMuIEJsb3cgaXMgd2hlcmUgdGhlIHJlZ2V4IGlzIGNvbXB1dGVkIGZyb206XG4vLyB4LXJlZjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vc2VhcmNoL2RvY3MvY3Jhd2xpbmctaW5kZXhpbmcvZ29vZ2xlLWNvbW1vbi1jcmF3bGVyc1xuY29uc3QgSEVBRExFU1NfQlJPV1NFUl9CT1RfVUFfUkUgPSAvZ29vZ2xlL2lcblxuZXhwb3J0IGNvbnN0IEhUTUxfTElNSVRFRF9CT1RfVUFfUkVfU1RSSU5HID0gSFRNTF9MSU1JVEVEX0JPVF9VQV9SRS5zb3VyY2VcblxuZXhwb3J0IHsgSFRNTF9MSU1JVEVEX0JPVF9VQV9SRSB9XG5cbmZ1bmN0aW9uIGlzRG9tQm90VUEodXNlckFnZW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIEhFQURMRVNTX0JST1dTRVJfQk9UX1VBX1JFLnRlc3QodXNlckFnZW50KVxufVxuXG5mdW5jdGlvbiBpc0h0bWxMaW1pdGVkQm90VUEodXNlckFnZW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIEhUTUxfTElNSVRFRF9CT1RfVUFfUkUudGVzdCh1c2VyQWdlbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0JvdCh1c2VyQWdlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNEb21Cb3RVQSh1c2VyQWdlbnQpIHx8IGlzSHRtbExpbWl0ZWRCb3RVQSh1c2VyQWdlbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb3RUeXBlKHVzZXJBZ2VudDogc3RyaW5nKTogJ2RvbScgfCAnaHRtbCcgfCB1bmRlZmluZWQge1xuICBpZiAoaXNEb21Cb3RVQSh1c2VyQWdlbnQpKSB7XG4gICAgcmV0dXJuICdkb20nXG4gIH1cbiAgaWYgKGlzSHRtbExpbWl0ZWRCb3RVQSh1c2VyQWdlbnQpKSB7XG4gICAgcmV0dXJuICdodG1sJ1xuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbiJdLCJuYW1lcyI6WyJIVE1MX0xJTUlURURfQk9UX1VBX1JFIiwiSFRNTF9MSU1JVEVEX0JPVF9VQV9SRV9TVFJJTkciLCJnZXRCb3RUeXBlIiwiaXNCb3QiLCJIRUFETEVTU19CUk9XU0VSX0JPVF9VQV9SRSIsInNvdXJjZSIsImlzRG9tQm90VUEiLCJ1c2VyQWdlbnQiLCJ0ZXN0IiwiaXNIdG1sTGltaXRlZEJvdFVBIiwidW5kZWZpbmVkIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isDynamicRoute\", ({\n enumerable: true,\n get: function() {\n return isDynamicRoute;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ./interception-routes */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/;\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/;\nfunction isDynamicRoute(route, strict) {\n if (strict === void 0) strict = true;\n if ((0, _interceptionroutes.isInterceptionRouteAppPath)(route)) {\n route = (0, _interceptionroutes.extractInterceptionRouteInformation)(route).interceptedRoute;\n }\n if (strict) {\n return TEST_STRICT_ROUTE.test(route);\n }\n return TEST_ROUTE.test(route);\n} //# sourceMappingURL=is-dynamic.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy5qcyIsIm1hcHBpbmdzIjoiOzs7O2tEQWtCZ0JBOzs7ZUFBQUE7OztnREFmVDtBQUVQLHlDQUF5QztBQUN6QyxNQUFNQyxhQUFhO0FBRW5CLHFDQUFxQztBQUNyQyxNQUFNQyxvQkFBb0I7QUFTbkIsU0FBU0YsZUFBZUcsS0FBYSxFQUFFQyxNQUFzQjtJQUF0QkEsSUFBQUEsV0FBQUEsS0FBQUEsR0FBQUEsU0FBa0I7SUFDOUQsSUFBSUMsQ0FBQUEsR0FBQUEsb0JBQUFBLDBCQUFBQSxFQUEyQkYsUUFBUTtRQUNyQ0EsUUFBUUcsQ0FBQUEsR0FBQUEsb0JBQUFBLG1DQUFBQSxFQUFvQ0gsT0FBT0ksZ0JBQWdCO0lBQ3JFO0lBRUEsSUFBSUgsUUFBUTtRQUNWLE9BQU9GLGtCQUFrQk0sSUFBSSxDQUFDTDtJQUNoQztJQUVBLE9BQU9GLFdBQVdPLElBQUksQ0FBQ0w7QUFDekIiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxpcy1keW5hbWljLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uLFxuICBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aCxcbn0gZnJvbSAnLi9pbnRlcmNlcHRpb24tcm91dGVzJ1xuXG4vLyBJZGVudGlmeSAvLipbcGFyYW1dLiovIGluIHJvdXRlIHN0cmluZ1xuY29uc3QgVEVTVF9ST1VURSA9IC9cXC9bXi9dKlxcW1teL10rXFxdW14vXSooPz1cXC98JCkvXG5cbi8vIElkZW50aWZ5IC9bcGFyYW1dLyBpbiByb3V0ZSBzdHJpbmdcbmNvbnN0IFRFU1RfU1RSSUNUX1JPVVRFID0gL1xcL1xcW1teL10rXFxdKD89XFwvfCQpL1xuXG4vKipcbiAqIENoZWNrIGlmIGEgcm91dGUgaXMgZHluYW1pYy5cbiAqXG4gKiBAcGFyYW0gcm91dGUgLSBUaGUgcm91dGUgdG8gY2hlY2suXG4gKiBAcGFyYW0gc3RyaWN0IC0gV2hldGhlciB0byB1c2Ugc3RyaWN0IG1vZGUgd2hpY2ggcHJvaGliaXRzIHNlZ21lbnRzIHdpdGggcHJlZml4ZXMvc3VmZml4ZXMgKGRlZmF1bHQ6IHRydWUpLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcm91dGUgaXMgZHluYW1pYy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHluYW1pY1JvdXRlKHJvdXRlOiBzdHJpbmcsIHN0cmljdDogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgaWYgKGlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoKHJvdXRlKSkge1xuICAgIHJvdXRlID0gZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb24ocm91dGUpLmludGVyY2VwdGVkUm91dGVcbiAgfVxuXG4gIGlmIChzdHJpY3QpIHtcbiAgICByZXR1cm4gVEVTVF9TVFJJQ1RfUk9VVEUudGVzdChyb3V0ZSlcbiAgfVxuXG4gIHJldHVybiBURVNUX1JPVVRFLnRlc3Qocm91dGUpXG59XG4iXSwibmFtZXMiOlsiaXNEeW5hbWljUm91dGUiLCJURVNUX1JPVVRFIiwiVEVTVF9TVFJJQ1RfUk9VVEUiLCJyb3V0ZSIsInN0cmljdCIsImlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoIiwiZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb24iLCJpbnRlcmNlcHRlZFJvdXRlIiwidGVzdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js":
|
||
/*!************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/is-local-url.js ***!
|
||
\************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isLocalURL\", ({\n enumerable: true,\n get: function() {\n return isLocalURL;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../../client/has-base-path */ \"(pages-dir-browser)/./node_modules/next/dist/client/has-base-path.js\");\nfunction isLocalURL(url) {\n // prevent a hydration mismatch on href for url with anchor refs\n if (!(0, _utils.isAbsoluteUrl)(url)) return true;\n try {\n // absolute urls can be local if they are on the same origin\n const locationOrigin = (0, _utils.getLocationOrigin)();\n const resolved = new URL(url, locationOrigin);\n return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);\n } catch (_) {\n return false;\n }\n} //# sourceMappingURL=is-local-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsLmpzIiwibWFwcGluZ3MiOiI7Ozs7OENBTWdCQTs7O2VBQUFBOzs7bUNBTmlDO3lDQUNyQjtBQUtyQixTQUFTQSxXQUFXQyxHQUFXO0lBQ3BDLGdFQUFnRTtJQUNoRSxJQUFJLENBQUNDLENBQUFBLEdBQUFBLE9BQUFBLGFBQUFBLEVBQWNELE1BQU0sT0FBTztJQUNoQyxJQUFJO1FBQ0YsNERBQTREO1FBQzVELE1BQU1FLGlCQUFpQkMsQ0FBQUEsR0FBQUEsT0FBQUEsaUJBQUFBO1FBQ3ZCLE1BQU1DLFdBQVcsSUFBSUMsSUFBSUwsS0FBS0U7UUFDOUIsT0FBT0UsU0FBU0UsTUFBTSxLQUFLSixrQkFBa0JLLENBQUFBLEdBQUFBLGFBQUFBLFdBQUFBLEVBQVlILFNBQVNJLFFBQVE7SUFDNUUsRUFBRSxPQUFPQyxHQUFHO1FBQ1YsT0FBTztJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxpcy1sb2NhbC11cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNBYnNvbHV0ZVVybCwgZ2V0TG9jYXRpb25PcmlnaW4gfSBmcm9tICcuLi8uLi91dGlscydcbmltcG9ydCB7IGhhc0Jhc2VQYXRoIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2xpZW50L2hhcy1iYXNlLXBhdGgnXG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGEgZ2l2ZW4gdXJsIGlzIHJvdXRhYmxlIGJ5IHRoZSBOZXh0LmpzIHJvdXRlciAoYnJvd3NlciBvbmx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTG9jYWxVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gcHJldmVudCBhIGh5ZHJhdGlvbiBtaXNtYXRjaCBvbiBocmVmIGZvciB1cmwgd2l0aCBhbmNob3IgcmVmc1xuICBpZiAoIWlzQWJzb2x1dGVVcmwodXJsKSkgcmV0dXJuIHRydWVcbiAgdHJ5IHtcbiAgICAvLyBhYnNvbHV0ZSB1cmxzIGNhbiBiZSBsb2NhbCBpZiB0aGV5IGFyZSBvbiB0aGUgc2FtZSBvcmlnaW5cbiAgICBjb25zdCBsb2NhdGlvbk9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgICBjb25zdCByZXNvbHZlZCA9IG5ldyBVUkwodXJsLCBsb2NhdGlvbk9yaWdpbilcbiAgICByZXR1cm4gcmVzb2x2ZWQub3JpZ2luID09PSBsb2NhdGlvbk9yaWdpbiAmJiBoYXNCYXNlUGF0aChyZXNvbHZlZC5wYXRobmFtZSlcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXSwibmFtZXMiOlsiaXNMb2NhbFVSTCIsInVybCIsImlzQWJzb2x1dGVVcmwiLCJsb2NhdGlvbk9yaWdpbiIsImdldExvY2F0aW9uT3JpZ2luIiwicmVzb2x2ZWQiLCJVUkwiLCJvcmlnaW4iLCJoYXNCYXNlUGF0aCIsInBhdGhuYW1lIiwiXyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/omit.js ***!
|
||
\****************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"omit\", ({\n enumerable: true,\n get: function() {\n return omit;\n }\n}));\nfunction omit(object, keys) {\n const omitted = {};\n Object.keys(object).forEach((key)=>{\n if (!keys.includes(key)) {\n omitted[key] = object[key];\n }\n });\n return omitted;\n} //# sourceMappingURL=omit.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvb21pdC5qcyIsIm1hcHBpbmdzIjoiOzs7O3dDQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsS0FDZEMsTUFBUyxFQUNUQyxJQUFTO0lBRVQsTUFBTUMsVUFBc0MsQ0FBQztJQUM3Q0MsT0FBT0YsSUFBSSxDQUFDRCxRQUFRSSxPQUFPLENBQUMsQ0FBQ0M7UUFDM0IsSUFBSSxDQUFDSixLQUFLSyxRQUFRLENBQUNELE1BQVc7WUFDNUJILE9BQU8sQ0FBQ0csSUFBSSxHQUFHTCxNQUFNLENBQUNLLElBQUk7UUFDNUI7SUFDRjtJQUNBLE9BQU9IO0FBQ1QiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxvbWl0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBvbWl0PFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmplY3Q6IFQsXG4gIGtleXM6IEtbXVxuKTogT21pdDxULCBLPiB7XG4gIGNvbnN0IG9taXR0ZWQ6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge31cbiAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5IGFzIEspKSB7XG4gICAgICBvbWl0dGVkW2tleV0gPSBvYmplY3Rba2V5XVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG9taXR0ZWQgYXMgT21pdDxULCBLPlxufVxuIl0sIm5hbWVzIjpbIm9taXQiLCJvYmplY3QiLCJrZXlzIiwib21pdHRlZCIsIk9iamVjdCIsImZvckVhY2giLCJrZXkiLCJpbmNsdWRlcyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/omit.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/parse-path.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parsePath\", ({\n enumerable: true,\n get: function() {\n return parsePath;\n }\n}));\nfunction parsePath(path) {\n const hashIndex = path.indexOf('#');\n const queryIndex = path.indexOf('?');\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : ''\n };\n }\n return {\n pathname: path,\n query: '',\n hash: ''\n };\n} //# sourceMappingURL=parse-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7OztDQUlDOzs7OzZDQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxVQUFVQyxJQUFZO0lBQ3BDLE1BQU1DLFlBQVlELEtBQUtFLE9BQU8sQ0FBQztJQUMvQixNQUFNQyxhQUFhSCxLQUFLRSxPQUFPLENBQUM7SUFDaEMsTUFBTUUsV0FBV0QsYUFBYSxDQUFDLEtBQU1GLENBQUFBLFlBQVksS0FBS0UsYUFBYUYsU0FBQUEsQ0FBUTtJQUUzRSxJQUFJRyxZQUFZSCxZQUFZLENBQUMsR0FBRztRQUM5QixPQUFPO1lBQ0xJLFVBQVVMLEtBQUtNLFNBQVMsQ0FBQyxHQUFHRixXQUFXRCxhQUFhRjtZQUNwRE0sT0FBT0gsV0FDSEosS0FBS00sU0FBUyxDQUFDSCxZQUFZRixZQUFZLENBQUMsSUFBSUEsWUFBWU8sYUFDeEQ7WUFDSkMsTUFBTVIsWUFBWSxDQUFDLElBQUlELEtBQUtVLEtBQUssQ0FBQ1QsYUFBYTtRQUNqRDtJQUNGO0lBRUEsT0FBTztRQUFFSSxVQUFVTDtRQUFNTyxPQUFPO1FBQUlFLE1BQU07SUFBRztBQUMvQyIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHJvdXRlclxcdXRpbHNcXHBhcnNlLXBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHaXZlbiBhIHBhdGggdGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgdGhlIHBhdGhuYW1lLCBxdWVyeSBhbmQgaGFzaCBhbmQgcmV0dXJuXG4gKiB0aGVtLiBUaGlzIGlzIHVzZWZ1bCB0byBwYXJzZSBmdWxsIHBhdGhzIG9uIHRoZSBjbGllbnQgc2lkZS5cbiAqIEBwYXJhbSBwYXRoIEEgcGF0aCB0byBwYXJzZSBlLmcuIC9mb28vYmFyP2lkPTEjaGFzaFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBoYXNoSW5kZXggPSBwYXRoLmluZGV4T2YoJyMnKVxuICBjb25zdCBxdWVyeUluZGV4ID0gcGF0aC5pbmRleE9mKCc/JylcbiAgY29uc3QgaGFzUXVlcnkgPSBxdWVyeUluZGV4ID4gLTEgJiYgKGhhc2hJbmRleCA8IDAgfHwgcXVlcnlJbmRleCA8IGhhc2hJbmRleClcblxuICBpZiAoaGFzUXVlcnkgfHwgaGFzaEluZGV4ID4gLTEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aG5hbWU6IHBhdGguc3Vic3RyaW5nKDAsIGhhc1F1ZXJ5ID8gcXVlcnlJbmRleCA6IGhhc2hJbmRleCksXG4gICAgICBxdWVyeTogaGFzUXVlcnlcbiAgICAgICAgPyBwYXRoLnN1YnN0cmluZyhxdWVyeUluZGV4LCBoYXNoSW5kZXggPiAtMSA/IGhhc2hJbmRleCA6IHVuZGVmaW5lZClcbiAgICAgICAgOiAnJyxcbiAgICAgIGhhc2g6IGhhc2hJbmRleCA+IC0xID8gcGF0aC5zbGljZShoYXNoSW5kZXgpIDogJycsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgcGF0aG5hbWU6IHBhdGgsIHF1ZXJ5OiAnJywgaGFzaDogJycgfVxufVxuIl0sIm5hbWVzIjpbInBhcnNlUGF0aCIsInBhdGgiLCJoYXNoSW5kZXgiLCJpbmRleE9mIiwicXVlcnlJbmRleCIsImhhc1F1ZXJ5IiwicGF0aG5hbWUiLCJzdWJzdHJpbmciLCJxdWVyeSIsInVuZGVmaW5lZCIsImhhc2giLCJzbGljZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js ***!
|
||
\******************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseRelativeUrl\", ({\n enumerable: true,\n get: function() {\n return parseRelativeUrl;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _querystring = __webpack_require__(/*! ./querystring */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nfunction parseRelativeUrl(url, base, parseQuery) {\n if (parseQuery === void 0) parseQuery = true;\n const globalBase = new URL( false ? 0 : (0, _utils.getLocationOrigin)());\n const resolvedBase = base ? new URL(base, globalBase) : url.startsWith('.') ? new URL( false ? 0 : window.location.href) : globalBase;\n const { pathname, searchParams, search, hash, href, origin } = new URL(url, resolvedBase);\n if (origin !== globalBase.origin) {\n throw Object.defineProperty(new Error(\"invariant: invalid relative URL, router received \" + url), \"__NEXT_ERROR_CODE\", {\n value: \"E159\",\n enumerable: false,\n configurable: true\n });\n }\n return {\n pathname,\n query: parseQuery ? (0, _querystring.searchParamsToUrlQuery)(searchParams) : undefined,\n search,\n hash,\n href: href.slice(origin.length),\n // We don't know for relative URLs at this point since we set a custom, internal\n // base that isn't surfaced to users.\n slashes: undefined\n };\n} //# sourceMappingURL=parse-relative-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcmVsYXRpdmUtdXJsLmpzIiwibWFwcGluZ3MiOiI7Ozs7b0RBNkJnQkE7OztlQUFBQTs7O21DQTVCa0I7eUNBQ0s7QUEyQmhDLFNBQVNBLGlCQUNkQyxHQUFXLEVBQ1hDLElBQWEsRUFDYkMsVUFBaUI7SUFBakJBLElBQUFBLGVBQUFBLEtBQUFBLEdBQUFBLGFBQWE7SUFFYixNQUFNQyxhQUFhLElBQUlDLElBQ3JCLE1BQTZCLEdBQUcsQ0FBVSxHQUFHRSxDQUFBQSxHQUFBQSxPQUFBQSxpQkFBQUE7SUFHL0MsTUFBTUMsZUFBZU4sT0FDakIsSUFBSUcsSUFBSUgsTUFBTUUsY0FDZEgsSUFBSVEsVUFBVSxDQUFDLE9BQ2IsSUFBSUosSUFDRixNQUE2QixHQUFHLENBQVUsR0FBR0MsT0FBT0ksUUFBUSxDQUFDQyxJQUFJLElBRW5FUDtJQUVOLE1BQU0sRUFBRVEsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFSixJQUFJLEVBQUVLLE1BQU0sRUFBRSxHQUFHLElBQUlYLElBQ2pFSixLQUNBTztJQUdGLElBQUlRLFdBQVdaLFdBQVdZLE1BQU0sRUFBRTtRQUNoQyxNQUFNLHFCQUFvRSxDQUFwRSxJQUFJQyxNQUFPLHNEQUFtRGhCLE1BQTlEO21CQUFBO3dCQUFBOzBCQUFBO1FBQW1FO0lBQzNFO0lBRUEsT0FBTztRQUNMVztRQUNBTSxPQUFPZixhQUFhZ0IsQ0FBQUEsR0FBQUEsYUFBQUEsc0JBQUFBLEVBQXVCTixnQkFBZ0JPO1FBQzNETjtRQUNBQztRQUNBSixNQUFNQSxLQUFLVSxLQUFLLENBQUNMLE9BQU9NLE1BQU07UUFDOUIsZ0ZBQWdGO1FBQ2hGLHFDQUFxQztRQUNyQ0MsU0FBU0g7SUFDWDtBQUNGIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFx1dGlsc1xccGFyc2UtcmVsYXRpdmUtdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCB7IGdldExvY2F0aW9uT3JpZ2luIH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeXN0cmluZydcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRSZWxhdGl2ZVVybCB7XG4gIGhhc2g6IHN0cmluZ1xuICBocmVmOiBzdHJpbmdcbiAgcGF0aG5hbWU6IHN0cmluZ1xuICBxdWVyeTogUGFyc2VkVXJsUXVlcnlcbiAgc2VhcmNoOiBzdHJpbmdcbiAgc2xhc2hlczogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUGFyc2VzIHBhdGgtcmVsYXRpdmUgdXJscyAoZS5nLiBgL2hlbGxvL3dvcmxkP2Zvbz1iYXJgKS4gSWYgdXJsIGlzbid0IHBhdGgtcmVsYXRpdmVcbiAqIChlLmcuIGAuL2hlbGxvYCkgdGhlbiBhdCBsZWFzdCBiYXNlIG11c3QgYmUuXG4gKiBBYnNvbHV0ZSB1cmxzIGFyZSByZWplY3RlZCB3aXRoIG9uZSBleGNlcHRpb24sIGluIHRoZSBicm93c2VyLCBhYnNvbHV0ZSB1cmxzIHRoYXQgYXJlIG9uXG4gKiB0aGUgY3VycmVudCBvcmlnaW4gd2lsbCBiZSBwYXJzZWQgYXMgcmVsYXRpdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVVcmwoXG4gIHVybDogc3RyaW5nLFxuICBiYXNlPzogc3RyaW5nLFxuICBwYXJzZVF1ZXJ5PzogdHJ1ZVxuKTogUGFyc2VkUmVsYXRpdmVVcmxcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlbGF0aXZlVXJsKFxuICB1cmw6IHN0cmluZyxcbiAgYmFzZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwYXJzZVF1ZXJ5OiBmYWxzZVxuKTogT21pdDxQYXJzZWRSZWxhdGl2ZVVybCwgJ3F1ZXJ5Jz5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlbGF0aXZlVXJsKFxuICB1cmw6IHN0cmluZyxcbiAgYmFzZT86IHN0cmluZyxcbiAgcGFyc2VRdWVyeSA9IHRydWVcbik6IFBhcnNlZFJlbGF0aXZlVXJsIHwgT21pdDxQYXJzZWRSZWxhdGl2ZVVybCwgJ3F1ZXJ5Jz4ge1xuICBjb25zdCBnbG9iYWxCYXNlID0gbmV3IFVSTChcbiAgICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/ICdodHRwOi8vbicgOiBnZXRMb2NhdGlvbk9yaWdpbigpXG4gIClcblxuICBjb25zdCByZXNvbHZlZEJhc2UgPSBiYXNlXG4gICAgPyBuZXcgVVJMKGJhc2UsIGdsb2JhbEJhc2UpXG4gICAgOiB1cmwuc3RhcnRzV2l0aCgnLicpXG4gICAgICA/IG5ldyBVUkwoXG4gICAgICAgICAgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyAnaHR0cDovL24nIDogd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICAgICAgKVxuICAgICAgOiBnbG9iYWxCYXNlXG5cbiAgY29uc3QgeyBwYXRobmFtZSwgc2VhcmNoUGFyYW1zLCBzZWFyY2gsIGhhc2gsIGhyZWYsIG9yaWdpbiB9ID0gbmV3IFVSTChcbiAgICB1cmwsXG4gICAgcmVzb2x2ZWRCYXNlXG4gIClcblxuICBpZiAob3JpZ2luICE9PSBnbG9iYWxCYXNlLm9yaWdpbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YXJpYW50OiBpbnZhbGlkIHJlbGF0aXZlIFVSTCwgcm91dGVyIHJlY2VpdmVkICR7dXJsfWApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGhuYW1lLFxuICAgIHF1ZXJ5OiBwYXJzZVF1ZXJ5ID8gc2VhcmNoUGFyYW1zVG9VcmxRdWVyeShzZWFyY2hQYXJhbXMpIDogdW5kZWZpbmVkLFxuICAgIHNlYXJjaCxcbiAgICBoYXNoLFxuICAgIGhyZWY6IGhyZWYuc2xpY2Uob3JpZ2luLmxlbmd0aCksXG4gICAgLy8gV2UgZG9uJ3Qga25vdyBmb3IgcmVsYXRpdmUgVVJMcyBhdCB0aGlzIHBvaW50IHNpbmNlIHdlIHNldCBhIGN1c3RvbSwgaW50ZXJuYWxcbiAgICAvLyBiYXNlIHRoYXQgaXNuJ3Qgc3VyZmFjZWQgdG8gdXNlcnMuXG4gICAgc2xhc2hlczogdW5kZWZpbmVkLFxuICB9XG59XG4iXSwibmFtZXMiOlsicGFyc2VSZWxhdGl2ZVVybCIsInVybCIsImJhc2UiLCJwYXJzZVF1ZXJ5IiwiZ2xvYmFsQmFzZSIsIlVSTCIsIndpbmRvdyIsImdldExvY2F0aW9uT3JpZ2luIiwicmVzb2x2ZWRCYXNlIiwic3RhcnRzV2l0aCIsImxvY2F0aW9uIiwiaHJlZiIsInBhdGhuYW1lIiwic2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiaGFzaCIsIm9yaWdpbiIsIkVycm9yIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwidW5kZWZpbmVkIiwic2xpY2UiLCJsZW5ndGgiLCJzbGFzaGVzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pathHasPrefix\", ({\n enumerable: true,\n get: function() {\n return pathHasPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction pathHasPrefix(path, prefix) {\n if (typeof path !== 'string') {\n return false;\n }\n const { pathname } = (0, _parsepath.parsePath)(path);\n return pathname === prefix || pathname.startsWith(prefix + '/');\n} //# sourceMappingURL=path-has-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGF0aC1oYXMtcHJlZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBU2dCQTs7O2VBQUFBOzs7dUNBVFU7QUFTbkIsU0FBU0EsY0FBY0MsSUFBWSxFQUFFQyxNQUFjO0lBQ3hELElBQUksT0FBT0QsU0FBUyxVQUFVO1FBQzVCLE9BQU87SUFDVDtJQUVBLE1BQU0sRUFBRUUsUUFBUSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVIO0lBQy9CLE9BQU9FLGFBQWFELFVBQVVDLFNBQVNFLFVBQVUsQ0FBQ0gsU0FBUztBQUM3RCIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHJvdXRlclxcdXRpbHNcXHBhdGgtaGFzLXByZWZpeC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZVBhdGggfSBmcm9tICcuL3BhcnNlLXBhdGgnXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gcGF0aCBzdGFydHMgd2l0aCBhIGdpdmVuIHByZWZpeC4gSXQgZW5zdXJlcyBpdCBtYXRjaGVzXG4gKiBleGFjdGx5IHdpdGhvdXQgY29udGFpbmluZyBleHRyYSBjaGFycy4gZS5nLiBwcmVmaXggL2RvY3Mgc2hvdWxkIHJlcGxhY2VcbiAqIGZvciAvZG9jcywgL2RvY3MvLCAvZG9jcy9hIGJ1dCBub3QgL2RvY3Nzc1xuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0gcHJlZml4IFRoZSBwcmVmaXggdG8gY2hlY2sgYWdhaW5zdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhIYXNQcmVmaXgocGF0aDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZykge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB7IHBhdGhuYW1lIH0gPSBwYXJzZVBhdGgocGF0aClcbiAgcmV0dXJuIHBhdGhuYW1lID09PSBwcmVmaXggfHwgcGF0aG5hbWUuc3RhcnRzV2l0aChwcmVmaXggKyAnLycpXG59XG4iXSwibmFtZXMiOlsicGF0aEhhc1ByZWZpeCIsInBhdGgiLCJwcmVmaXgiLCJwYXRobmFtZSIsInBhcnNlUGF0aCIsInN0YXJ0c1dpdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/querystring.js ***!
|
||
\***********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n assign: function() {\n return assign;\n },\n searchParamsToUrlQuery: function() {\n return searchParamsToUrlQuery;\n },\n urlQueryToSearchParams: function() {\n return urlQueryToSearchParams;\n }\n});\nfunction searchParamsToUrlQuery(searchParams) {\n const query = {};\n for (const [key, value] of searchParams.entries()){\n const existing = query[key];\n if (typeof existing === 'undefined') {\n query[key] = value;\n } else if (Array.isArray(existing)) {\n existing.push(value);\n } else {\n query[key] = [\n existing,\n value\n ];\n }\n }\n return query;\n}\nfunction stringifyUrlQueryParam(param) {\n if (typeof param === 'string') {\n return param;\n }\n if (typeof param === 'number' && !isNaN(param) || typeof param === 'boolean') {\n return String(param);\n } else {\n return '';\n }\n}\nfunction urlQueryToSearchParams(query) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(query)){\n if (Array.isArray(value)) {\n for (const item of value){\n searchParams.append(key, stringifyUrlQueryParam(item));\n }\n } else {\n searchParams.set(key, stringifyUrlQueryParam(value));\n }\n }\n return searchParams;\n}\nfunction assign(target) {\n for(var _len = arguments.length, searchParamsList = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n searchParamsList[_key - 1] = arguments[_key];\n }\n for (const searchParams of searchParamsList){\n for (const key of searchParams.keys()){\n target.delete(key);\n }\n for (const [key, value] of searchParams.entries()){\n target.append(key, value);\n }\n }\n return target;\n} //# sourceMappingURL=querystring.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBZ0RnQkEsTUFBTTtlQUFOQTs7SUE5Q0FDLHNCQUFzQjtlQUF0QkE7O0lBZ0NBQyxzQkFBc0I7ZUFBdEJBOzs7QUFoQ1QsU0FBU0QsdUJBQ2RFLFlBQTZCO0lBRTdCLE1BQU1DLFFBQXdCLENBQUM7SUFDL0IsS0FBSyxNQUFNLENBQUNDLEtBQUtDLE1BQU0sSUFBSUgsYUFBYUksT0FBTyxHQUFJO1FBQ2pELE1BQU1DLFdBQVdKLEtBQUssQ0FBQ0MsSUFBSTtRQUMzQixJQUFJLE9BQU9HLGFBQWEsYUFBYTtZQUNuQ0osS0FBSyxDQUFDQyxJQUFJLEdBQUdDO1FBQ2YsT0FBTyxJQUFJRyxNQUFNQyxPQUFPLENBQUNGLFdBQVc7WUFDbENBLFNBQVNHLElBQUksQ0FBQ0w7UUFDaEIsT0FBTztZQUNMRixLQUFLLENBQUNDLElBQUksR0FBRztnQkFBQ0c7Z0JBQVVGO2FBQU07UUFDaEM7SUFDRjtJQUNBLE9BQU9GO0FBQ1Q7QUFFQSxTQUFTUSx1QkFBdUJDLEtBQWM7SUFDNUMsSUFBSSxPQUFPQSxVQUFVLFVBQVU7UUFDN0IsT0FBT0E7SUFDVDtJQUVBLElBQ0csT0FBT0EsVUFBVSxZQUFZLENBQUNDLE1BQU1ELFVBQ3JDLE9BQU9BLFVBQVUsV0FDakI7UUFDQSxPQUFPRSxPQUFPRjtJQUNoQixPQUFPO1FBQ0wsT0FBTztJQUNUO0FBQ0Y7QUFFTyxTQUFTWCx1QkFBdUJFLEtBQXFCO0lBQzFELE1BQU1ELGVBQWUsSUFBSWE7SUFDekIsS0FBSyxNQUFNLENBQUNYLEtBQUtDLE1BQU0sSUFBSVcsT0FBT1YsT0FBTyxDQUFDSCxPQUFRO1FBQ2hELElBQUlLLE1BQU1DLE9BQU8sQ0FBQ0osUUFBUTtZQUN4QixLQUFLLE1BQU1ZLFFBQVFaLE1BQU87Z0JBQ3hCSCxhQUFhZ0IsTUFBTSxDQUFDZCxLQUFLTyx1QkFBdUJNO1lBQ2xEO1FBQ0YsT0FBTztZQUNMZixhQUFhaUIsR0FBRyxDQUFDZixLQUFLTyx1QkFBdUJOO1FBQy9DO0lBQ0Y7SUFDQSxPQUFPSDtBQUNUO0FBRU8sU0FBU0gsT0FDZHFCLE1BQXVCO0lBQ3ZCLGlDQUFHQyxtQkFBSDtRQUFHQSxnQkFBQUEsQ0FBSCwyQkFBc0M7O0lBRXRDLEtBQUssTUFBTW5CLGdCQUFnQm1CLGlCQUFrQjtRQUMzQyxLQUFLLE1BQU1qQixPQUFPRixhQUFhb0IsSUFBSSxHQUFJO1lBQ3JDRixPQUFPRyxNQUFNLENBQUNuQjtRQUNoQjtRQUVBLEtBQUssTUFBTSxDQUFDQSxLQUFLQyxNQUFNLElBQUlILGFBQWFJLE9BQU8sR0FBSTtZQUNqRGMsT0FBT0YsTUFBTSxDQUFDZCxLQUFLQztRQUNyQjtJQUNGO0lBRUEsT0FBT2U7QUFDVCIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHJvdXRlclxcdXRpbHNcXHF1ZXJ5c3RyaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcblxuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFBhcmFtc1RvVXJsUXVlcnkoXG4gIHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zXG4pOiBQYXJzZWRVcmxRdWVyeSB7XG4gIGNvbnN0IHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeSA9IHt9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHNlYXJjaFBhcmFtcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHF1ZXJ5W2tleV1cbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcXVlcnlba2V5XSA9IHZhbHVlXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nKSkge1xuICAgICAgZXhpc3RpbmcucHVzaCh2YWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnlba2V5XSA9IFtleGlzdGluZywgdmFsdWVdXG4gICAgfVxuICB9XG4gIHJldHVybiBxdWVyeVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlVcmxRdWVyeVBhcmFtKHBhcmFtOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyYW1cbiAgfVxuXG4gIGlmIChcbiAgICAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJyAmJiAhaXNOYU4ocGFyYW0pKSB8fFxuICAgIHR5cGVvZiBwYXJhbSA9PT0gJ2Jvb2xlYW4nXG4gICkge1xuICAgIHJldHVybiBTdHJpbmcocGFyYW0pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMocXVlcnk6IFBhcnNlZFVybFF1ZXJ5KTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHF1ZXJ5KSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBzdHJpbmdpZnlVcmxRdWVyeVBhcmFtKGl0ZW0pKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWFyY2hQYXJhbXMuc2V0KGtleSwgc3RyaW5naWZ5VXJsUXVlcnlQYXJhbSh2YWx1ZSkpXG4gICAgfVxuICB9XG4gIHJldHVybiBzZWFyY2hQYXJhbXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbihcbiAgdGFyZ2V0OiBVUkxTZWFyY2hQYXJhbXMsXG4gIC4uLnNlYXJjaFBhcmFtc0xpc3Q6IFVSTFNlYXJjaFBhcmFtc1tdXG4pOiBVUkxTZWFyY2hQYXJhbXMge1xuICBmb3IgKGNvbnN0IHNlYXJjaFBhcmFtcyBvZiBzZWFyY2hQYXJhbXNMaXN0KSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2Ygc2VhcmNoUGFyYW1zLmtleXMoKSkge1xuICAgICAgdGFyZ2V0LmRlbGV0ZShrZXkpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc2VhcmNoUGFyYW1zLmVudHJpZXMoKSkge1xuICAgICAgdGFyZ2V0LmFwcGVuZChrZXksIHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRcbn1cbiJdLCJuYW1lcyI6WyJhc3NpZ24iLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInNlYXJjaFBhcmFtcyIsInF1ZXJ5Iiwia2V5IiwidmFsdWUiLCJlbnRyaWVzIiwiZXhpc3RpbmciLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwic3RyaW5naWZ5VXJsUXVlcnlQYXJhbSIsInBhcmFtIiwiaXNOYU4iLCJTdHJpbmciLCJVUkxTZWFyY2hQYXJhbXMiLCJPYmplY3QiLCJpdGVtIiwiYXBwZW5kIiwic2V0IiwidGFyZ2V0Iiwic2VhcmNoUGFyYW1zTGlzdCIsImtleXMiLCJkZWxldGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js ***!
|
||
\******************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removePathPrefix\", ({\n enumerable: true,\n get: function() {\n return removePathPrefix;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction removePathPrefix(path, prefix) {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!(0, _pathhasprefix.pathHasPrefix)(path, prefix)) {\n return path;\n }\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length);\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix;\n }\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return \"/\" + withoutPrefix;\n} //# sourceMappingURL=remove-path-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXBhdGgtcHJlZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7b0RBVWdCQTs7O2VBQUFBOzs7MkNBVmM7QUFVdkIsU0FBU0EsaUJBQWlCQyxJQUFZLEVBQUVDLE1BQWM7SUFDM0QseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSxrQkFBa0I7SUFDbEIsRUFBRTtJQUNGLG9CQUFvQjtJQUNwQixFQUFFO0lBQ0Ysa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLHdCQUF3QjtJQUN4Qix5QkFBeUI7SUFDekIsSUFBSSxDQUFDQyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFBQSxFQUFjRixNQUFNQyxTQUFTO1FBQ2hDLE9BQU9EO0lBQ1Q7SUFFQSwrQ0FBK0M7SUFDL0MsTUFBTUcsZ0JBQWdCSCxLQUFLSSxLQUFLLENBQUNILE9BQU9JLE1BQU07SUFFOUMsMkVBQTJFO0lBQzNFLElBQUlGLGNBQWNHLFVBQVUsQ0FBQyxNQUFNO1FBQ2pDLE9BQU9IO0lBQ1Q7SUFFQSw0RUFBNEU7SUFDNUUsbURBQW1EO0lBQ25ELE9BQVEsTUFBR0E7QUFDYiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHJvdXRlclxcdXRpbHNcXHJlbW92ZS1wYXRoLXByZWZpeC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXRoSGFzUHJlZml4IH0gZnJvbSAnLi9wYXRoLWhhcy1wcmVmaXgnXG5cbi8qKlxuICogR2l2ZW4gYSBwYXRoIGFuZCBhIHByZWZpeCBpdCB3aWxsIHJlbW92ZSB0aGUgcHJlZml4IHdoZW4gaXQgZXhpc3RzIGluIHRoZVxuICogZ2l2ZW4gcGF0aC4gSXQgZW5zdXJlcyBpdCBtYXRjaGVzIGV4YWN0bHkgd2l0aG91dCBjb250YWluaW5nIGV4dHJhIGNoYXJzXG4gKiBhbmQgaWYgdGhlIHByZWZpeCBpcyBub3QgdGhlcmUgaXQgd2lsbCBiZSBub29wLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHJlbW92ZSB0aGUgcHJlZml4IGZyb20uXG4gKiBAcGFyYW0gcHJlZml4IFRoZSBwcmVmaXggdG8gYmUgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVBhdGhQcmVmaXgocGF0aDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIElmIHRoZSBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCB0aGUgcHJlZml4IHdlIGNhbiByZXR1cm4gaXQgYXMgaXMuIFRoaXNcbiAgLy8gcHJvdGVjdHMgdXMgZnJvbSBzaXR1YXRpb25zIHdoZXJlIHRoZSBwcmVmaXggaXMgYSBzdWJzdHJpbmcgb2YgdGhlIHBhdGhcbiAgLy8gcHJlZml4IHN1Y2ggYXM6XG4gIC8vXG4gIC8vIEZvciBwcmVmaXg6IC9ibG9nXG4gIC8vXG4gIC8vICAgL2Jsb2cgLT4gdHJ1ZVxuICAvLyAgIC9ibG9nLyAtPiB0cnVlXG4gIC8vICAgL2Jsb2cvMSAtPiB0cnVlXG4gIC8vICAgL2Jsb2dnaW5nIC0+IGZhbHNlXG4gIC8vICAgL2Jsb2dnaW5nLyAtPiBmYWxzZVxuICAvLyAgIC9ibG9nZ2luZy8xIC0+IGZhbHNlXG4gIGlmICghcGF0aEhhc1ByZWZpeChwYXRoLCBwcmVmaXgpKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgcHJlZml4IGZyb20gdGhlIHBhdGggdmlhIHNsaWNpbmcuXG4gIGNvbnN0IHdpdGhvdXRQcmVmaXggPSBwYXRoLnNsaWNlKHByZWZpeC5sZW5ndGgpXG5cbiAgLy8gSWYgdGhlIHBhdGggd2l0aG91dCB0aGUgcHJlZml4IHN0YXJ0cyB3aXRoIGEgYC9gIHdlIGNhbiByZXR1cm4gaXQgYXMgaXMuXG4gIGlmICh3aXRob3V0UHJlZml4LnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiB3aXRob3V0UHJlZml4XG4gIH1cblxuICAvLyBJZiB0aGUgcGF0aCB3aXRob3V0IHRoZSBwcmVmaXggZG9lc24ndCBzdGFydCB3aXRoIGEgYC9gIHdlIG5lZWQgdG8gYWRkIGl0XG4gIC8vIGJhY2sgdG8gdGhlIHBhdGggdG8gbWFrZSBzdXJlIGl0J3MgYSB2YWxpZCBwYXRoLlxuICByZXR1cm4gYC8ke3dpdGhvdXRQcmVmaXh9YFxufVxuIl0sIm5hbWVzIjpbInJlbW92ZVBhdGhQcmVmaXgiLCJwYXRoIiwicHJlZml4IiwicGF0aEhhc1ByZWZpeCIsIndpdGhvdXRQcmVmaXgiLCJzbGljZSIsImxlbmd0aCIsInN0YXJ0c1dpdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js ***!
|
||
\*********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return removeTrailingSlash;\n }\n}));\nfunction removeTrailingSlash(route) {\n return route.replace(/\\/$/, '') || '/';\n} //# sourceMappingURL=remove-trailing-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Q0FNQzs7Ozt1REFDZUE7OztlQUFBQTs7O0FBQVQsU0FBU0Esb0JBQW9CQyxLQUFhO0lBQy9DLE9BQU9BLE1BQU1DLE9BQU8sQ0FBQyxPQUFPLE9BQU87QUFDckMiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxyb3V0ZXJcXHV0aWxzXFxyZW1vdmUtdHJhaWxpbmctc2xhc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmb3IgYSBnaXZlbiByb3V0ZSBvciBwYWdlIHBhdGguIFByZXNlcnZlcyB0aGVcbiAqIHJvb3QgcGFnZS4gRXhhbXBsZXM6XG4gKiAgIC0gYC9mb28vYmFyL2AgLT4gYC9mb28vYmFyYFxuICogICAtIGAvZm9vL2JhcmAgLT4gYC9mb28vYmFyYFxuICogICAtIGAvYCAtPiBgL2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nU2xhc2gocm91dGU6IHN0cmluZykge1xuICByZXR1cm4gcm91dGUucmVwbGFjZSgvXFwvJC8sICcnKSB8fCAnLydcbn1cbiJdLCJuYW1lcyI6WyJyZW1vdmVUcmFpbGluZ1NsYXNoIiwicm91dGUiLCJyZXBsYWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/route-matcher.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getRouteMatcher\", ({\n enumerable: true,\n get: function() {\n return getRouteMatcher;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nfunction getRouteMatcher(param) {\n let { re, groups } = param;\n return (pathname)=>{\n const routeMatch = re.exec(pathname);\n if (!routeMatch) return false;\n const decode = (param)=>{\n try {\n return decodeURIComponent(param);\n } catch (e) {\n throw Object.defineProperty(new _utils.DecodeError('failed to decode param'), \"__NEXT_ERROR_CODE\", {\n value: \"E528\",\n enumerable: false,\n configurable: true\n });\n }\n };\n const params = {};\n for (const [key, group] of Object.entries(groups)){\n const match = routeMatch[group.pos];\n if (match !== undefined) {\n if (group.repeat) {\n params[key] = match.split('/').map((entry)=>decode(entry));\n } else {\n params[key] = decode(match);\n }\n }\n }\n return params;\n };\n} //# sourceMappingURL=route-matcher.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2hlci5qcyIsIm1hcHBpbmdzIjoiOzs7O21EQWVnQkE7OztlQUFBQTs7O21DQWRZO0FBY3JCLFNBQVNBLGdCQUFnQixLQUdWO0lBSFUsTUFDOUJDLEVBQUUsRUFDRkMsTUFBTSxFQUNjLEdBSFU7SUFJOUIsT0FBTyxDQUFDQztRQUNOLE1BQU1DLGFBQWFILEdBQUdJLElBQUksQ0FBQ0Y7UUFDM0IsSUFBSSxDQUFDQyxZQUFZLE9BQU87UUFFeEIsTUFBTUUsU0FBUyxDQUFDQztZQUNkLElBQUk7Z0JBQ0YsT0FBT0MsbUJBQW1CRDtZQUM1QixFQUFFLFVBQU07Z0JBQ04sTUFBTSxxQkFBeUMsQ0FBekMsSUFBSUUsT0FBQUEsV0FBVyxDQUFDLDJCQUFoQjsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFBd0M7WUFDaEQ7UUFDRjtRQUVBLE1BQU1DLFNBQWlCLENBQUM7UUFDeEIsS0FBSyxNQUFNLENBQUNDLEtBQUtDLE1BQU0sSUFBSUMsT0FBT0MsT0FBTyxDQUFDWixRQUFTO1lBQ2pELE1BQU1hLFFBQVFYLFVBQVUsQ0FBQ1EsTUFBTUksR0FBRyxDQUFDO1lBQ25DLElBQUlELFVBQVVFLFdBQVc7Z0JBQ3ZCLElBQUlMLE1BQU1NLE1BQU0sRUFBRTtvQkFDaEJSLE1BQU0sQ0FBQ0MsSUFBSSxHQUFHSSxNQUFNSSxLQUFLLENBQUMsS0FBS0MsR0FBRyxDQUFDLENBQUNDLFFBQVVmLE9BQU9lO2dCQUN2RCxPQUFPO29CQUNMWCxNQUFNLENBQUNDLElBQUksR0FBR0wsT0FBT1M7Z0JBQ3ZCO1lBQ0Y7UUFDRjtRQUVBLE9BQU9MO0lBQ1Q7QUFDRiIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHJvdXRlclxcdXRpbHNcXHJvdXRlLW1hdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBHcm91cCB9IGZyb20gJy4vcm91dGUtcmVnZXgnXG5pbXBvcnQgeyBEZWNvZGVFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvcmVxdWVzdC9wYXJhbXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVNYXRjaEZuIHtcbiAgKHBhdGhuYW1lOiBzdHJpbmcpOiBmYWxzZSB8IFBhcmFtc1xufVxuXG50eXBlIFJvdXRlTWF0Y2hlck9wdGlvbnMgPSB7XG4gIC8vIFdlIG9ubHkgdXNlIHRoZSBleGVjIG1ldGhvZCBvZiB0aGUgUmVnRXhwIG9iamVjdC4gVGhpcyBoZWxwcyB1cyBhdm9pZCB1c2luZ1xuICAvLyB0eXBlIGFzc2VydGlvbnMgdGhhdCB0aGUgcGFzc2VkIGluIHByb3BlcnRpZXMgYXJlIG9mIHRoZSBjb3JyZWN0IHR5cGUuXG4gIHJlOiBQaWNrPFJlZ0V4cCwgJ2V4ZWMnPlxuICBncm91cHM6IFJlY29yZDxzdHJpbmcsIEdyb3VwPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVNYXRjaGVyKHtcbiAgcmUsXG4gIGdyb3Vwcyxcbn06IFJvdXRlTWF0Y2hlck9wdGlvbnMpOiBSb3V0ZU1hdGNoRm4ge1xuICByZXR1cm4gKHBhdGhuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByb3V0ZU1hdGNoID0gcmUuZXhlYyhwYXRobmFtZSlcbiAgICBpZiAoIXJvdXRlTWF0Y2gpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgZGVjb2RlID0gKHBhcmFtOiBzdHJpbmcpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocGFyYW0pXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IERlY29kZUVycm9yKCdmYWlsZWQgdG8gZGVjb2RlIHBhcmFtJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHt9XG4gICAgZm9yIChjb25zdCBba2V5LCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXBzKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSByb3V0ZU1hdGNoW2dyb3VwLnBvc11cbiAgICAgIGlmIChtYXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChncm91cC5yZXBlYXQpIHtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IG1hdGNoLnNwbGl0KCcvJykubWFwKChlbnRyeSkgPT4gZGVjb2RlKGVudHJ5KSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IGRlY29kZShtYXRjaClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxufVxuIl0sIm5hbWVzIjpbImdldFJvdXRlTWF0Y2hlciIsInJlIiwiZ3JvdXBzIiwicGF0aG5hbWUiLCJyb3V0ZU1hdGNoIiwiZXhlYyIsImRlY29kZSIsInBhcmFtIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiRGVjb2RlRXJyb3IiLCJwYXJhbXMiLCJrZXkiLCJncm91cCIsIk9iamVjdCIsImVudHJpZXMiLCJtYXRjaCIsInBvcyIsInVuZGVmaW5lZCIsInJlcGVhdCIsInNwbGl0IiwibWFwIiwiZW50cnkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/route-regex.js ***!
|
||
\***********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getNamedMiddlewareRegex: function() {\n return getNamedMiddlewareRegex;\n },\n getNamedRouteRegex: function() {\n return getNamedRouteRegex;\n },\n getRouteRegex: function() {\n return getRouteRegex;\n },\n parseParameter: function() {\n return parseParameter;\n }\n});\nconst _constants = __webpack_require__(/*! ../../../../lib/constants */ \"(pages-dir-browser)/./node_modules/next/dist/lib/constants.js\");\nconst _interceptionroutes = __webpack_require__(/*! ./interception-routes */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\n/**\n * Regular expression pattern used to match route parameters.\n * Matches both single parameters and parameter groups.\n * Examples:\n * - `[[...slug]]` matches parameter group with key 'slug', repeat: true, optional: true\n * - `[...slug]` matches parameter group with key 'slug', repeat: true, optional: false\n * - `[[foo]]` matches parameter with key 'foo', repeat: false, optional: true\n * - `[bar]` matches parameter with key 'bar', repeat: false, optional: false\n */ const PARAMETER_PATTERN = /^([^[]*)\\[((?:\\[[^\\]]*\\])|[^\\]]+)\\](.*)$/;\nfunction parseParameter(param) {\n const match = param.match(PARAMETER_PATTERN);\n if (!match) {\n return parseMatchedParameter(param);\n }\n return parseMatchedParameter(match[2]);\n}\n/**\n * Parses a matched parameter from the PARAMETER_PATTERN regex to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n * @param param - The matched parameter to parse.\n * @returns The parsed parameter as a data structure.\n */ function parseMatchedParameter(param) {\n const optional = param.startsWith('[') && param.endsWith(']');\n if (optional) {\n param = param.slice(1, -1);\n }\n const repeat = param.startsWith('...');\n if (repeat) {\n param = param.slice(3);\n }\n return {\n key: param,\n repeat,\n optional\n };\n}\nfunction getParametrizedRoute(route, includeSuffix, includePrefix) {\n const groups = {};\n let groupIndex = 1;\n const segments = [];\n for (const segment of (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split('/')){\n const markerMatch = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n ;\n if (markerMatch && paramMatches && paramMatches[2]) {\n const { key, optional, repeat } = parseMatchedParameter(paramMatches[2]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(markerMatch) + \"([^/]+?)\");\n } else if (paramMatches && paramMatches[2]) {\n const { key, repeat, optional } = parseMatchedParameter(paramMatches[2]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n if (includePrefix && paramMatches[1]) {\n segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(paramMatches[1]));\n }\n let s = repeat ? optional ? '(?:/(.+?))?' : '/(.+?)' : '/([^/]+?)';\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1);\n }\n segments.push(s);\n } else {\n segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(segment));\n }\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push((0, _escaperegexp.escapeStringRegexp)(paramMatches[3]));\n }\n }\n return {\n parameterizedRoute: segments.join(''),\n groups\n };\n}\nfunction getRouteRegex(normalizedRoute, param) {\n let { includeSuffix = false, includePrefix = false, excludeOptionalTrailingSlash = false } = param === void 0 ? {} : param;\n const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute, includeSuffix, includePrefix);\n let re = parameterizedRoute;\n if (!excludeOptionalTrailingSlash) {\n re += '(?:/)?';\n }\n return {\n re: new RegExp(\"^\" + re + \"$\"),\n groups: groups\n };\n}\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */ function buildGetSafeRouteKey() {\n let i = 0;\n return ()=>{\n let routeKey = '';\n let j = ++i;\n while(j > 0){\n routeKey += String.fromCharCode(97 + (j - 1) % 26);\n j = Math.floor((j - 1) / 26);\n }\n return routeKey;\n };\n}\nfunction getSafeKeyFromSegment(param) {\n let { interceptionMarker, getSafeRouteKey, segment, routeKeys, keyPrefix, backreferenceDuplicateKeys } = param;\n const { key, optional, repeat } = parseMatchedParameter(segment);\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, '');\n if (keyPrefix) {\n cleanedKey = \"\" + keyPrefix + cleanedKey;\n }\n let invalidKey = false;\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true;\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true;\n }\n if (invalidKey) {\n cleanedKey = getSafeRouteKey();\n }\n const duplicateKey = cleanedKey in routeKeys;\n if (keyPrefix) {\n routeKeys[cleanedKey] = \"\" + keyPrefix + key;\n } else {\n routeKeys[cleanedKey] = key;\n }\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker ? (0, _escaperegexp.escapeStringRegexp)(interceptionMarker) : '';\n let pattern;\n if (duplicateKey && backreferenceDuplicateKeys) {\n // Use a backreference to the key to ensure that the key is the same value\n // in each of the placeholders.\n pattern = \"\\\\k<\" + cleanedKey + \">\";\n } else if (repeat) {\n pattern = \"(?<\" + cleanedKey + \">.+?)\";\n } else {\n pattern = \"(?<\" + cleanedKey + \">[^/]+?)\";\n }\n return optional ? \"(?:/\" + interceptionPrefix + pattern + \")?\" : \"/\" + interceptionPrefix + pattern;\n}\nfunction getNamedParametrizedRoute(route, prefixRouteKeys, includeSuffix, includePrefix, backreferenceDuplicateKeys) {\n const getSafeRouteKey = buildGetSafeRouteKey();\n const routeKeys = {};\n const segments = [];\n for (const segment of (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split('/')){\n const hasInterceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m));\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n ;\n if (hasInterceptionMarker && paramMatches && paramMatches[2]) {\n // If there's an interception marker, add it to the segments.\n segments.push(getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: paramMatches[1],\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys ? _constants.NEXT_INTERCEPTION_MARKER_PREFIX : undefined,\n backreferenceDuplicateKeys\n }));\n } else if (paramMatches && paramMatches[2]) {\n // If there's a prefix, add it to the segments if it's enabled.\n if (includePrefix && paramMatches[1]) {\n segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(paramMatches[1]));\n }\n let s = getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys ? _constants.NEXT_QUERY_PARAM_PREFIX : undefined,\n backreferenceDuplicateKeys\n });\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1);\n }\n segments.push(s);\n } else {\n segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(segment));\n }\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push((0, _escaperegexp.escapeStringRegexp)(paramMatches[3]));\n }\n }\n return {\n namedParameterizedRoute: segments.join(''),\n routeKeys\n };\n}\nfunction getNamedRouteRegex(normalizedRoute, options) {\n var _options_includeSuffix, _options_includePrefix, _options_backreferenceDuplicateKeys;\n const result = getNamedParametrizedRoute(normalizedRoute, options.prefixRouteKeys, (_options_includeSuffix = options.includeSuffix) != null ? _options_includeSuffix : false, (_options_includePrefix = options.includePrefix) != null ? _options_includePrefix : false, (_options_backreferenceDuplicateKeys = options.backreferenceDuplicateKeys) != null ? _options_backreferenceDuplicateKeys : false);\n let namedRegex = result.namedParameterizedRoute;\n if (!options.excludeOptionalTrailingSlash) {\n namedRegex += '(?:/)?';\n }\n return {\n ...getRouteRegex(normalizedRoute, options),\n namedRegex: \"^\" + namedRegex + \"$\",\n routeKeys: result.routeKeys\n };\n}\nfunction getNamedMiddlewareRegex(normalizedRoute, options) {\n const { parameterizedRoute } = getParametrizedRoute(normalizedRoute, false, false);\n const { catchAll = true } = options;\n if (parameterizedRoute === '/') {\n let catchAllRegex = catchAll ? '.*' : '';\n return {\n namedRegex: \"^/\" + catchAllRegex + \"$\"\n };\n }\n const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false, false, false, false);\n let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : '';\n return {\n namedRegex: \"^\" + namedParameterizedRoute + catchAllGroupedRegex + \"$\"\n };\n} //# sourceMappingURL=route-regex.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtcmVnZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBd1pnQkEsdUJBQXVCO2VBQXZCQTs7SUE1QkFDLGtCQUFrQjtlQUFsQkE7O0lBN0xBQyxhQUFhO2VBQWJBOztJQXpGQUMsY0FBYztlQUFkQTs7O3VDQW5HVDtnREFDb0M7MENBQ1I7aURBQ0M7QUF5RXBDOzs7Ozs7OztDQVFDLEdBQ0QsTUFBTUMsb0JBQW9CO0FBY25CLFNBQVNELGVBQWVFLEtBQWE7SUFDMUMsTUFBTUMsUUFBUUQsTUFBTUMsS0FBSyxDQUFDRjtJQUUxQixJQUFJLENBQUNFLE9BQU87UUFDVixPQUFPQyxzQkFBc0JGO0lBQy9CO0lBRUEsT0FBT0Usc0JBQXNCRCxLQUFLLENBQUMsRUFBRTtBQUN2QztBQUVBOzs7Ozs7Ozs7O0NBVUMsR0FDRCxTQUFTQyxzQkFBc0JGLEtBQWE7SUFDMUMsTUFBTUcsV0FBV0gsTUFBTUksVUFBVSxDQUFDLFFBQVFKLE1BQU1LLFFBQVEsQ0FBQztJQUN6RCxJQUFJRixVQUFVO1FBQ1pILFFBQVFBLE1BQU1NLEtBQUssQ0FBQyxHQUFHLENBQUM7SUFDMUI7SUFDQSxNQUFNQyxTQUFTUCxNQUFNSSxVQUFVLENBQUM7SUFDaEMsSUFBSUcsUUFBUTtRQUNWUCxRQUFRQSxNQUFNTSxLQUFLLENBQUM7SUFDdEI7SUFDQSxPQUFPO1FBQUVFLEtBQUtSO1FBQU9PO1FBQVFKO0lBQVM7QUFDeEM7QUFFQSxTQUFTTSxxQkFDUEMsS0FBYSxFQUNiQyxhQUFzQixFQUN0QkMsYUFBc0I7SUFFdEIsTUFBTUMsU0FBeUMsQ0FBQztJQUNoRCxJQUFJQyxhQUFhO0lBRWpCLE1BQU1DLFdBQXFCLEVBQUU7SUFDN0IsS0FBSyxNQUFNQyxXQUFXQyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CUCxPQUFPSixLQUFLLENBQUMsR0FBR1ks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LE1BQU0sRUFBRXNDLFdBQVcsSUFBSSxFQUFFLEdBQUdIO0lBQzVCLElBQUlyQyx1QkFBdUIsS0FBSztRQUM5QixJQUFJeUMsZ0JBQWdCRCxXQUFXLE9BQU87UUFDdEMsT0FBTztZQUNMRCxZQUFhLE9BQUlFLGdCQUFjO1FBQ2pDO0lBQ0Y7SUFFQSxNQUFNLEVBQUVMLHVCQUF1QixFQUFFLEdBQUdQLDBCQUNsQzNCLGlCQUNBLE9BQ0EsT0FDQSxPQUNBO0lBRUYsSUFBSXdDLHVCQUF1QkYsV0FBVyxlQUFlO0lBQ3JELE9BQU87UUFDTEQsWUFBYSxNQUFHSCwwQkFBMEJNLHVCQUFxQjtJQUNqRTtBQUNGIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxccm91dGVyXFx1dGlsc1xccm91dGUtcmVnZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWCxcbiAgTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVgsXG59IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyB9IGZyb20gJy4vaW50ZXJjZXB0aW9uLXJvdXRlcydcbmltcG9ydCB7IGVzY2FwZVN0cmluZ1JlZ2V4cCB9IGZyb20gJy4uLy4uL2VzY2FwZS1yZWdleHAnXG5pbXBvcnQgeyByZW1vdmVUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi9yZW1vdmUtdHJhaWxpbmctc2xhc2gnXG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXAge1xuICBwb3M6IG51bWJlclxuICByZXBlYXQ6IGJvb2xlYW5cbiAgb3B0aW9uYWw6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVJlZ2V4IHtcbiAgZ3JvdXBzOiB7IFtncm91cE5hbWU6IHN0cmluZ106IEdyb3VwIH1cbiAgcmU6IFJlZ0V4cFxufVxuXG50eXBlIEdldE5hbWVkUm91dGVSZWdleE9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZWZpeCB0aGUgcm91dGUga2V5cyB3aXRoIHRoZSBORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYXG4gICAqIG9yIE5FWFRfUVVFUllfUEFSQU1fUFJFRklYLiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBjcmVhdGluZyB0aGVcbiAgICogcm91dGVzLW1hbmlmZXN0IGR1cmluZyB0aGUgYnVpbGQuXG4gICAqL1xuICBwcmVmaXhSb3V0ZUtleXM6IGJvb2xlYW5cblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBzdWZmaXggaW4gdGhlIHJvdXRlIHJlZ2V4LiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB5b3VcbiAgICogaGF2ZSBzb21ldGhpbmcgbGlrZSBgL1suLi5zbHVnXS5qc29uYCB0aGUgYC5qc29uYCBwYXJ0IHdpbGwgYmUgaW5jbHVkZWRcbiAgICogaW4gdGhlIHJlZ2V4LCB5aWVsZGluZyBgLyguKikuanNvbmAgYXMgdGhlIHJlZ2V4LlxuICAgKi9cbiAgaW5jbHVkZVN1ZmZpeD86IGJvb2xlYW5cblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBwcmVmaXggaW4gdGhlIHJvdXRlIHJlZ2V4LiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB5b3VcbiAgICogaGF2ZSBzb21ldGhpbmcgbGlrZSBgL1suLi5zbHVnXS5qc29uYCB0aGUgYC9gIHBhcnQgd2lsbCBiZSBpbmNsdWRlZFxuICAgKiBpbiB0aGUgcmVnZXgsIHlpZWxkaW5nIGBeLyguKikuanNvbiRgIGFzIHRoZSByZWdleC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGludGVyY2VwdGlvbiBtYXJrZXJzIHdpbGwgYWxyZWFkeSBiZSBpbmNsdWRlZCB3aXRob3V0IHRoZSBuZWVkXG4gICAqL1xuICBpbmNsdWRlUHJlZml4PzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIG9wdGlvbmFsIHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIHJvdXRlIHJlZ2V4LlxuICAgKi9cbiAgZXhjbHVkZU9wdGlvbmFsVHJhaWxpbmdTbGFzaD86IGJvb2xlYW5cblxuICAvKipcbiAgICogV2hldGhlciB0byBiYWNrdHJhY2sgZHVwbGljYXRlIGtleXMuIFRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIGNyZWF0aW5nXG4gICAqIHRoZSByb3V0ZXMtbWFuaWZlc3QgZHVyaW5nIHRoZSBidWlsZC5cbiAgICovXG4gIGJhY2tyZWZlcmVuY2VEdXBsaWNhdGVLZXlzPzogYm9vbGVhblxufVxuXG50eXBlIEdldFJvdXRlUmVnZXhPcHRpb25zID0ge1xuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIGV4dHJhIHBhcnRzIGluIHRoZSByb3V0ZSByZWdleC4gVGhpcyBtZWFucyB0aGF0IHdoZW4geW91XG4gICAqIGhhdmUgc29tZXRoaW5nIGxpa2UgYC9bLi4uc2x1Z10uanNvbmAgdGhlIGAuanNvbmAgcGFydCB3aWxsIGJlIGluY2x1ZGVkXG4gICAqIGluIHRoZSByZWdleCwgeWllbGRpbmcgYC8oLiopLmpzb25gIGFzIHRoZSByZWdleC5cbiAgICovXG4gIGluY2x1ZGVTdWZmaXg/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgcHJlZml4IGluIHRoZSByb3V0ZSByZWdleC4gVGhpcyBtZWFucyB0aGF0IHdoZW4geW91XG4gICAqIGhhdmUgc29tZXRoaW5nIGxpa2UgYC9bLi4uc2x1Z10uanNvbmAgdGhlIGAvYCBwYXJ0IHdpbGwgYmUgaW5jbHVkZWRcbiAgICogaW4gdGhlIHJlZ2V4LCB5aWVsZGluZyBgXi8oLiopLmpzb24kYCBhcyB0aGUgcmVnZXguXG4gICAqXG4gICAqIE5vdGUgdGhhdCBpbnRlcmNlcHRpb24gbWFya2VycyB3aWxsIGFscmVhZHkgYmUgaW5jbHVkZWQgd2l0aG91dCB0aGUgbmVlZFxuICAgKiBvZiBhZGRpbmcgdGhpcyBvcHRpb24uXG4gICAqL1xuICBpbmNsdWRlUHJlZml4PzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIG9wdGlvbmFsIHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIHJvdXRlIHJlZ2V4LlxuICAgKi9cbiAgZXhjbHVkZU9wdGlvbmFsVHJhaWxpbmdTbGFzaD86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB1c2VkIHRvIG1hdGNoIHJvdXRlIHBhcmFtZXRlcnMuXG4gKiBNYXRjaGVzIGJvdGggc2luZ2xlIHBhcmFtZXRlcnMgYW5kIHBhcmFtZXRlciBncm91cHMuXG4gKiBFeGFtcGxlczpcbiAqICAgLSBgW1suLi5zbHVnXV1gIG1hdGNoZXMgcGFyYW1ldGVyIGdyb3VwIHdpdGgga2V5ICdzbHVnJywgcmVwZWF0OiB0cnVlLCBvcHRpb25hbDogdHJ1ZVxuICogICAtIGBbLi4uc2x1Z11gIG1hdGNoZXMgcGFyYW1ldGVyIGdyb3VwIHdpdGgga2V5ICdzbHVnJywgcmVwZWF0OiB0cnVlLCBvcHRpb25hbDogZmFsc2VcbiAqICAgLSBgW1tmb29dXWAgbWF0Y2hlcyBwYXJhbWV0ZXIgd2l0aCBrZXkgJ2ZvbycsIHJlcGVhdDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlXG4gKiAgIC0gYFtiYXJdYCBtYXRjaGVzIHBhcmFtZXRlciB3aXRoIGtleSAnYmFyJywgcmVwZWF0OiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlXG4gKi9cbmNvbnN0IFBBUkFNRVRFUl9QQVRURVJOID0gL14oW15bXSopXFxbKCg/OlxcW1teXFxdXSpcXF0pfFteXFxdXSspXFxdKC4qKSQvXG5cbi8qKlxuICogUGFyc2VzIGEgZ2l2ZW4gcGFyYW1ldGVyIGZyb20gYSByb3V0ZSB0byBhIGRhdGEgc3RydWN0dXJlIHRoYXQgY2FuIGJlIHVzZWRcbiAqIHRvIGdlbmVyYXRlIHRoZSBwYXJhbWV0cml6ZWQgcm91dGUuXG4gKiBFeGFtcGxlczpcbiAqICAgLSBgW1suLi5zbHVnXV1gIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH1gXG4gKiAgIC0gYFsuLi5zbHVnXWAgLT4gYHsga2V5OiAnc2x1ZycsIHJlcGVhdDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlIH1gXG4gKiAgIC0gYFtbZm9vXV1gIC0+IGB7IGtleTogJ2ZvbycsIHJlcGVhdDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlIH1gXG4gKiAgIC0gYFtiYXJdYCAtPiBgeyBrZXk6ICdiYXInLCByZXBlYXQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UgfWBcbiAqICAgLSBgZml6emAgLT4gYHsga2V5OiAnZml6eicsIHJlcGVhdDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSB9YFxuICogQHBhcmFtIHBhcmFtIC0gVGhlIHBhcmFtZXRlciB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcGFyYW1ldGVyIGFzIGEgZGF0YSBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmFtZXRlcihwYXJhbTogc3RyaW5nKSB7XG4gIGNvbnN0IG1hdGNoID0gcGFyYW0ubWF0Y2goUEFSQU1FVEVSX1BBVFRFUk4pXG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBwYXJzZU1hdGNoZWRQYXJhbWV0ZXIocGFyYW0pXG4gIH1cblxuICByZXR1cm4gcGFyc2VNYXRjaGVkUGFyYW1ldGVyKG1hdGNoWzJdKVxufVxuXG4vKipcbiAqIFBhcnNlcyBhIG1hdGNoZWQgcGFyYW1ldGVyIGZyb20gdGhlIFBBUkFNRVRFUl9QQVRURVJOIHJlZ2V4IHRvIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdXNlZFxuICogdG8gZ2VuZXJhdGUgdGhlIHBhcmFtZXRyaXplZCByb3V0ZS5cbiAqIEV4YW1wbGVzOlxuICogICAtIGBbLi4uc2x1Z11gIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH1gXG4gKiAgIC0gYC4uLnNsdWdgIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSB9YFxuICogICAtIGBbZm9vXWAgLT4gYHsga2V5OiAnZm9vJywgcmVwZWF0OiBmYWxzZSwgb3B0aW9uYWw6IHRydWUgfWBcbiAqICAgLSBgYmFyYCAtPiBgeyBrZXk6ICdiYXInLCByZXBlYXQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UgfWBcbiAqIEBwYXJhbSBwYXJhbSAtIFRoZSBtYXRjaGVkIHBhcmFtZXRlciB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcGFyYW1ldGVyIGFzIGEgZGF0YSBzdHJ1Y3R1cmUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTWF0Y2hlZFBhcmFtZXRlcihwYXJhbTogc3RyaW5nKSB7XG4gIGNvbnN0IG9wdGlvbmFsID0gcGFyYW0uc3RhcnRzV2l0aCgnWycpICYmIHBhcmFtLmVuZHNXaXRoKCddJylcbiAgaWYgKG9wdGlvbmFsKSB7XG4gICAgcGFyYW0gPSBwYXJhbS5zbGljZSgxLCAtMSlcbiAgfVxuICBjb25zdCByZXBlYXQgPSBwYXJhbS5zdGFydHNXaXRoKCcuLi4nKVxuICBpZiAocmVwZWF0KSB7XG4gICAgcGFyYW0gPSBwYXJhbS5zbGljZSgzKVxuICB9XG4gIHJldHVybiB7IGtleTogcGFyYW0sIHJlcGVhdCwgb3B0aW9uYWwgfVxufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0cml6ZWRSb3V0ZShcbiAgcm91dGU6IHN0cmluZyxcbiAgaW5jbHVkZVN1ZmZpeDogYm9vbGVhbixcbiAgaW5jbHVkZVByZWZpeDogYm9vbGVhblxuKSB7XG4gIGNvbnN0IGdyb3VwczogeyBbZ3JvdXBOYW1lOiBzdHJpbmddOiBHcm91cCB9ID0ge31cbiAgbGV0IGdyb3VwSW5kZXggPSAxXG5cbiAgY29uc3Qgc2VnbWVudHM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHJlbW92ZVRyYWlsaW5nU2xhc2gocm91dGUpLnNsaWNlKDEpLnNwbGl0KCcvJykpIHtcbiAgICBjb25zdCBtYXJrZXJNYXRjaCA9IElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLmZpbmQoKG0pID0+XG4gICAgICBzZWdtZW50LnN0YXJ0c1dpdGgobSlcbiAgICApXG4gICAgY29uc3QgcGFyYW1NYXRjaGVzID0gc2VnbWVudC5tYXRjaChQQVJBTUVURVJfUEFUVEVSTikgLy8gQ2hlY2sgZm9yIHBhcmFtZXRlcnNcblxuICAgIGlmIChtYXJrZXJNYXRjaCAmJiBwYXJhbU1hdGNoZXMgJiYgcGFyYW1NYXRjaGVzWzJdKSB7XG4gICAgICBjb25zdCB7IGtleSwgb3B0aW9uYWwsIHJlcGVhdCB9ID0gcGFyc2VNYXRjaGVkUGFyYW1ldGVyKHBhcmFtTWF0Y2hlc1syXSlcbiAgICAgIGdyb3Vwc1trZXldID0geyBwb3M6IGdyb3VwSW5kZXgrKywgcmVwZWF0LCBvcHRpb25hbCB9XG4gICAgICBzZWdtZW50cy5wdXNoKGAvJHtlc2NhcGVTdHJpbmdSZWdleHAobWFya2VyTWF0Y2gpfShbXi9dKz8pYClcbiAgICB9IGVsc2UgaWYgKHBhcmFtTWF0Y2hlcyAmJiBwYXJhbU1hdGNoZXNbMl0pIHtcbiAgICAgIGNvbnN0IHsga2V5LCByZXBlYXQsIG9wdGlvbmFsIH0gPSBwYXJzZU1hdGNoZWRQYXJhbWV0ZXIocGFyYW1NYXRjaGVzWzJdKVxuICAgICAgZ3JvdXBzW2tleV0gPSB7IHBvczogZ3JvdXBJbmRleCsrLCByZXBlYXQsIG9wdGlvbmFsIH1cblxuICAgICAgaWYgKGluY2x1ZGVQcmVmaXggJiYgcGFyYW1NYXRjaGVzWzFdKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goYC8ke2VzY2FwZVN0cmluZ1JlZ2V4cChwYXJhbU1hdGNoZXNbMV0pfWApXG4gICAgICB9XG5cbiAgICAgIGxldCBzID0gcmVwZWF0ID8gKG9wdGlvbmFsID8gJyg/Oi8oLis/KSk/JyA6ICcvKC4rPyknKSA6ICcvKFteL10rPyknXG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgbGVhZGluZyBzbGFzaCBpZiBpbmNsdWRlUHJlZml4IGFscmVhZHkgYWRkZWQgaXQuXG4gICAgICBpZiAoaW5jbHVkZVByZWZpeCAmJiBwYXJhbU1hdGNoZXNbMV0pIHtcbiAgICAgICAgcyA9IHMuc3Vic3RyaW5nKDEpXG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnRzLnB1c2gocylcbiAgICB9IGVsc2Uge1xuICAgICAgc2VnbWVudHMucHVzaChgLyR7ZXNjYXBlU3RyaW5nUmVnZXhwKHNlZ21lbnQpfWApXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBhIHN1ZmZpeCwgYWRkIGl0IHRvIHRoZSBzZWdtZW50cyBpZiBpdCdzIGVuYWJsZWQuXG4gICAgaWYgKGluY2x1ZGVTdWZmaXggJiYgcGFyYW1NYXRjaGVzICYmIHBhcmFtTWF0Y2hlc1szXSkge1xuICAgICAgc2VnbWVudHMucHVzaChlc2NhcGVTdHJpbmdSZWdleHAocGFyYW1NYXRjaGVzWzNdKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcml6ZWRSb3V0ZTogc2VnbWVudHMuam9pbignJyksXG4gICAgZ3JvdXBzLFxuICB9XG59XG5cbi8qKlxuICogRnJvbSBhIG5vcm1hbGl6ZWQgcm91dGUgdGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kXG4gKiBhIGNvcnJlc3BvbmRpbmcgZ3JvdXBzIG9iamVjdCBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHN0b3JlIG1hdGNoaW5nIGdyb3Vwc1xuICogZnJvbSB0aGUgcmVndWxhciBleHByZXNzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVSZWdleChcbiAgbm9ybWFsaXplZFJvdXRlOiBzdHJpbmcsXG4gIHtcbiAgICBpbmNsdWRlU3VmZml4ID0gZmFsc2UsXG4gICAgaW5jbHVkZVByZWZpeCA9IGZhbHNlLFxuICAgIGV4Y2x1ZGVPcHRpb25hbFRyYWlsaW5nU2xhc2ggPSBmYWxzZSxcbiAgfTogR2V0Um91dGVSZWdleE9wdGlvbnMgPSB7fVxuKTogUm91dGVSZWdleCB7XG4gIGNvbnN0IHsgcGFyYW1ldGVyaXplZFJvdXRlLCBncm91cHMgfSA9IGdldFBhcmFtZXRyaXplZFJvdXRlKFxuICAgIG5vcm1hbGl6ZWRSb3V0ZSxcbiAgICBpbmNsdWRlU3VmZml4LFxuICAgIGluY2x1ZGVQcmVmaXhcbiAgKVxuXG4gIGxldCByZSA9IHBhcmFtZXRlcml6ZWRSb3V0ZVxuICBpZiAoIWV4Y2x1ZGVPcHRpb25hbFRyYWlsaW5nU2xhc2gpIHtcbiAgICByZSArPSAnKD86Lyk/J1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZTogbmV3IFJlZ0V4cChgXiR7cmV9JGApLFxuICAgIGdyb3VwczogZ3JvdXBzLFxuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBtaW5pbWFsIHJvdXRlS2V5IHVzaW5nIG9ubHkgYS16IGFuZCBtaW5pbWFsXG4gKiBudW1iZXIgb2YgY2hhcmFjdGVycy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRHZXRTYWZlUm91dGVLZXkoKSB7XG4gIGxldCBpID0gMFxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgbGV0IHJvdXRlS2V5ID0gJydcbiAgICBsZXQgaiA9ICsraVxuICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgcm91dGVLZXkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg5NyArICgoaiAtIDEpICUgMjYpKVxuICAgICAgaiA9IE1hdGguZmxvb3IoKGogLSAxKSAvIDI2KVxuICAgIH1cbiAgICByZXR1cm4gcm91dGVLZXlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTYWZlS2V5RnJvbVNlZ21lbnQoe1xuICBpbnRlcmNlcHRpb25NYXJrZXIsXG4gIGdldFNhZmVSb3V0ZUtleSxcbiAgc2VnbWVudCxcbiAgcm91dGVLZXlzLFxuICBrZXlQcmVmaXgsXG4gIGJhY2tyZWZlcmVuY2VEdXBsaWNhdGVLZXlzLFxufToge1xuICBpbnRlcmNlcHRpb25NYXJrZXI/OiBzdHJpbmdcbiAgZ2V0U2FmZVJvdXRlS2V5OiAoKSA9PiBzdHJpbmdcbiAgc2VnbWVudDogc3RyaW5nXG4gIHJvdXRlS2V5czogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICBrZXlQcmVmaXg/OiBzdHJpbmdcbiAgYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXM6IGJvb2xlYW5cbn0pIHtcbiAgY29uc3QgeyBrZXksIG9wdGlvbmFsLCByZXBlYXQgfSA9IHBhcnNlTWF0Y2hlZFBhcmFtZXRlcihzZWdtZW50KVxuXG4gIC8vIHJlcGxhY2UgYW55IG5vbi13b3JkIGNoYXJhY3RlcnMgc2luY2UgdGhleSBjYW4gYnJlYWtcbiAgLy8gdGhlIG5hbWVkIHJlZ2V4XG4gIGxldCBjbGVhbmVkS2V5ID0ga2V5LnJlcGxhY2UoL1xcVy9nLCAnJylcblxuICBpZiAoa2V5UHJlZml4KSB7XG4gICAgY2xlYW5lZEtleSA9IGAke2tleVByZWZpeH0ke2NsZWFuZWRLZXl9YFxuICB9XG4gIGxldCBpbnZhbGlkS2V5ID0gZmFsc2VcblxuICAvLyBjaGVjayBpZiB0aGUga2V5IGlzIHN0aWxsIGludmFsaWQgYW5kIGZhbGxiYWNrIHRvIHVzaW5nIGEga25vd25cbiAgLy8gc2FmZSBrZXlcbiAgaWYgKGNsZWFuZWRLZXkubGVuZ3RoID09PSAwIHx8IGNsZWFuZWRLZXkubGVuZ3RoID4gMzApIHtcbiAgICBpbnZhbGlkS2V5ID0gdHJ1ZVxuICB9XG4gIGlmICghaXNOYU4ocGFyc2VJbnQoY2xlYW5lZEtleS5zbGljZSgwLCAxKSkpKSB7XG4gICAgaW52YWxpZEtleSA9IHRydWVcbiAgfVxuXG4gIGlmIChpbnZhbGlkS2V5KSB7XG4gICAgY2xlYW5lZEtleSA9IGdldFNhZmVSb3V0ZUtleSgpXG4gIH1cblxuICBjb25zdCBkdXBsaWNhdGVLZXkgPSBjbGVhbmVkS2V5IGluIHJvdXRlS2V5c1xuXG4gIGlmIChrZXlQcmVmaXgpIHtcbiAgICByb3V0ZUtleXNbY2xlYW5lZEtleV0gPSBgJHtrZXlQcmVmaXh9JHtrZXl9YFxuICB9IGVsc2Uge1xuICAgIHJvdXRlS2V5c1tjbGVhbmVkS2V5XSA9IGtleVxuICB9XG5cbiAgLy8gaWYgdGhlIHNlZ21lbnQgaGFzIGFuIGludGVyY2VwdGlvbiBtYXJrZXIsIG1ha2Ugc3VyZSB0aGF0J3MgcGFydCBvZiB0aGUgcmVnZXggcGF0dGVyblxuICAvLyB0aGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSByb3V0ZSB3aXRoIHRoZSBpbnRlcmNlcHRpb24gbWFya2VyIGRvZXNuJ3QgaW5jb3JyZWN0bHkgbWF0Y2hcbiAgLy8gdGhlIG5vbi1pbnRlcmNlcHRlZCByb3V0ZSAoaWUgL2FwcC8oLilbdXNlcm5hbWVdIHNob3VsZCBub3QgbWF0Y2ggL2FwcC9bdXNlcm5hbWVdKVxuICBjb25zdCBpbnRlcmNlcHRpb25QcmVmaXggPSBpbnRlcmNlcHRpb25NYXJrZXJcbiAgICA/IGVzY2FwZVN0cmluZ1JlZ2V4cChpbnRlcmNlcHRpb25NYXJrZXIpXG4gICAgOiAnJ1xuXG4gIGxldCBwYXR0ZXJuOiBzdHJpbmdcbiAgaWYgKGR1cGxpY2F0ZUtleSAmJiBiYWNrcmVmZXJlbmNlRHVwbGljYXRlS2V5cykge1xuICAgIC8vIFVzZSBhIGJhY2tyZWZlcmVuY2UgdG8gdGhlIGtleSB0byBlbnN1cmUgdGhhdCB0aGUga2V5IGlzIHRoZSBzYW1lIHZhbHVlXG4gICAgLy8gaW4gZWFjaCBvZiB0aGUgcGxhY2Vob2xkZXJzLlxuICAgIHBhdHRlcm4gPSBgXFxcXGs8JHtjbGVhbmVkS2V5fT5gXG4gIH0gZWxzZSBpZiAocmVwZWF0KSB7XG4gICAgcGF0dGVybiA9IGAoPzwke2NsZWFuZWRLZXl9Pi4rPylgXG4gIH0gZWxzZSB7XG4gICAgcGF0dGVybiA9IGAoPzwke2NsZWFuZWRLZXl9PlteL10rPylgXG4gIH1cblxuICByZXR1cm4gb3B0aW9uYWxcbiAgICA/IGAoPzovJHtpbnRlcmNlcHRpb25QcmVmaXh9JHtwYXR0ZXJufSk/YFxuICAgIDogYC8ke2ludGVyY2VwdGlvblByZWZpeH0ke3BhdHRlcm59YFxufVxuXG5mdW5jdGlvbiBnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlKFxuICByb3V0ZTogc3RyaW5nLFxuICBwcmVmaXhSb3V0ZUtleXM6IGJvb2xlYW4sXG4gIGluY2x1ZGVTdWZmaXg6IGJvb2xlYW4sXG4gIGluY2x1ZGVQcmVmaXg6IGJvb2xlYW4sXG4gIGJhY2tyZWZlcmVuY2VEdXBsaWNhdGVLZXlzOiBib29sZWFuXG4pIHtcbiAgY29uc3QgZ2V0U2FmZVJvdXRlS2V5ID0gYnVpbGRHZXRTYWZlUm91dGVLZXkoKVxuICBjb25zdCByb3V0ZUtleXM6IHsgW25hbWVkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9XG5cbiAgY29uc3Qgc2VnbWVudHM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHJlbW92ZVRyYWlsaW5nU2xhc2gocm91dGUpLnNsaWNlKDEpLnNwbGl0KCcvJykpIHtcbiAgICBjb25zdCBoYXNJbnRlcmNlcHRpb25NYXJrZXIgPSBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5zb21lKChtKSA9PlxuICAgICAgc2VnbWVudC5zdGFydHNXaXRoKG0pXG4gICAgKVxuXG4gICAgY29uc3QgcGFyYW1NYXRjaGVzID0gc2VnbWVudC5tYXRjaChQQVJBTUVURVJfUEFUVEVSTikgLy8gQ2hlY2sgZm9yIHBhcmFtZXRlcnNcblxuICAgIGlmIChoYXNJbnRlcmNlcHRpb25NYXJrZXIgJiYgcGFyYW1NYXRjaGVzICYmIHBhcmFtTWF0Y2hlc1syXSkge1xuICAgICAgLy8gSWYgdGhlcmUncyBhbiBpbnRlcmNlcHRpb24gbWFya2VyLCBhZGQgaXQgdG8gdGhlIHNlZ21lbnRzLlxuICAgICAgc2VnbWVudHMucHVzaChcbiAgICAgICAgZ2V0U2FmZUtleUZyb21TZWdtZW50KHtcbiAgICAgICAgICBnZXRTYWZlUm91dGVLZXksXG4gICAgICAgICAgaW50ZXJjZXB0aW9uTWFya2VyOiBwYXJhbU1hdGNoZXNbMV0sXG4gICAgICAgICAgc2VnbWVudDogcGFyYW1NYXRjaGVzWzJdLFxuICAgICAgICAgIHJvdXRlS2V5cyxcbiAgICAgICAgICBrZXlQcmVmaXg6IHByZWZpeFJvdXRlS2V5c1xuICAgICAgICAgICAgPyBORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBiYWNrcmVmZXJlbmNlRHVwbGljYXRlS2V5cyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHBhcmFtTWF0Y2hlcyAmJiBwYXJhbU1hdGNoZXNbMl0pIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgYSBwcmVmaXgsIGFkZCBpdCB0byB0aGUgc2VnbWVudHMgaWYgaXQncyBlbmFibGVkLlxuICAgICAgaWYgKGluY2x1ZGVQcmVmaXggJiYgcGFyYW1NYXRjaGVzWzFdKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goYC8ke2VzY2FwZVN0cmluZ1JlZ2V4cChwYXJhbU1hdGNoZXNbMV0pfWApXG4gICAgICB9XG5cbiAgICAgIGxldCBzID0gZ2V0U2FmZUtleUZyb21TZWdtZW50KHtcbiAgICAgICAgZ2V0U2FmZVJvdXRlS2V5LFxuICAgICAgICBzZWdtZW50OiBwYXJhbU1hdGNoZXNbMl0sXG4gICAgICAgIHJvdXRlS2V5cyxcbiAgICAgICAga2V5UHJlZml4OiBwcmVmaXhSb3V0ZUtleXMgPyBORVhUX1FVRVJZX1BBUkFNX1BSRUZJWCA6IHVuZGVmaW5lZCxcbiAgICAgICAgYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXMsXG4gICAgICB9KVxuXG4gICAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgc2xhc2ggaWYgaW5jbHVkZVByZWZpeCBhbHJlYWR5IGFkZGVkIGl0LlxuICAgICAgaWYgKGluY2x1ZGVQcmVmaXggJiYgcGFyYW1NYXRjaGVzWzFdKSB7XG4gICAgICAgIHMgPSBzLnN1YnN0cmluZygxKVxuICAgICAgfVxuXG4gICAgICBzZWdtZW50cy5wdXNoKHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goYC8ke2VzY2FwZVN0cmluZ1JlZ2V4cChzZWdtZW50KX1gKVxuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSBzdWZmaXgsIGFkZCBpdCB0byB0aGUgc2VnbWVudHMgaWYgaXQncyBlbmFibGVkLlxuICAgIGlmIChpbmNsdWRlU3VmZml4ICYmIHBhcmFtTWF0Y2hlcyAmJiBwYXJhbU1hdGNoZXNbM10pIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goZXNjYXBlU3RyaW5nUmVnZXhwKHBhcmFtTWF0Y2hlc1szXSkpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lZFBhcmFtZXRlcml6ZWRSb3V0ZTogc2VnbWVudHMuam9pbignJyksXG4gICAgcm91dGVLZXlzLFxuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBleHRlbmRzIGBnZXRSb3V0ZVJlZ2V4YCBnZW5lcmF0aW5nIGFsc28gYSBuYW1lZCByZWdleHAgd2hlcmVcbiAqIGVhY2ggZ3JvdXAgaXMgbmFtZWQgYWxvbmcgd2l0aCBhIHJvdXRlS2V5cyBvYmplY3QgdGhhdCBpbmRleGVzIHRoZSBhc3NpZ25lZFxuICogbmFtZWQgZ3JvdXAgd2l0aCBpdHMgY29ycmVzcG9uZGluZyBrZXkuIFdoZW4gdGhlIHJvdXRlS2V5cyBuZWVkIHRvIGJlXG4gKiBwcmVmaXhlZCB0byB1bmlxdWVseSBpZGVudGlmeSBpbnRlcm5hbGx5IHRoZSBcInByZWZpeFJvdXRlS2V5XCIgYXJnIHNob3VsZFxuICogYmUgXCJ0cnVlXCIgY3VycmVudGx5IHRoaXMgaXMgb25seSB0aGUgY2FzZSB3aGVuIGNyZWF0aW5nIHRoZSByb3V0ZXMtbWFuaWZlc3RcbiAqIGR1cmluZyB0aGUgYnVpbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkUm91dGVSZWdleChcbiAgbm9ybWFsaXplZFJvdXRlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEdldE5hbWVkUm91dGVSZWdleE9wdGlvbnNcbikge1xuICBjb25zdCByZXN1bHQgPSBnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlKFxuICAgIG5vcm1hbGl6ZWRSb3V0ZSxcbiAgICBvcHRpb25zLnByZWZpeFJvdXRlS2V5cyxcbiAgICBvcHRpb25zLmluY2x1ZGVTdWZmaXggPz8gZmFsc2UsXG4gICAgb3B0aW9ucy5pbmNsdWRlUHJlZml4ID8/IGZhbHNlLFxuICAgIG9wdGlvbnMuYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXMgPz8gZmFsc2VcbiAgKVxuXG4gIGxldCBuYW1lZFJlZ2V4ID0gcmVzdWx0Lm5hbWVkUGFyYW1ldGVyaXplZFJvdXRlXG4gIGlmICghb3B0aW9ucy5leGNsdWRlT3B0aW9uYWxUcmFpbGluZ1NsYXNoKSB7XG4gICAgbmFtZWRSZWdleCArPSAnKD86Lyk/J1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5nZXRSb3V0ZVJlZ2V4KG5vcm1hbGl6ZWRSb3V0ZSwgb3B0aW9ucyksXG4gICAgbmFtZWRSZWdleDogYF4ke25hbWVkUmVnZXh9JGAsXG4gICAgcm91dGVLZXlzOiByZXN1bHQucm91dGVLZXlzLFxuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmFtZWQgcmVnZXhwLlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2luZyBmb3IgYnVpbGQgdGltZSBvbmx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRNaWRkbGV3YXJlUmVnZXgoXG4gIG5vcm1hbGl6ZWRSb3V0ZTogc3RyaW5nLFxuICBvcHRpb25zOiB7XG4gICAgY2F0Y2hBbGw/OiBib29sZWFuXG4gIH1cbikge1xuICBjb25zdCB7IHBhcmFtZXRlcml6ZWRSb3V0ZSB9ID0gZ2V0UGFyYW1ldHJpemVkUm91dGUoXG4gICAgbm9ybWFsaXplZFJvdXRlLFxuICAgIGZhbHNlLFxuICAgIGZhbHNlXG4gIClcbiAgY29uc3QgeyBjYXRjaEFsbCA9IHRydWUgfSA9IG9wdGlvbnNcbiAgaWYgKHBhcmFtZXRlcml6ZWRSb3V0ZSA9PT0gJy8nKSB7XG4gICAgbGV0IGNhdGNoQWxsUmVnZXggPSBjYXRjaEFsbCA/ICcuKicgOiAnJ1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lZFJlZ2V4OiBgXi8ke2NhdGNoQWxsUmVnZXh9JGAsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgeyBuYW1lZFBhcmFtZXRlcml6ZWRSb3V0ZSB9ID0gZ2V0TmFtZWRQYXJhbWV0cml6ZWRSb3V0ZShcbiAgICBub3JtYWxpemVkUm91dGUsXG4gICAgZmFsc2UsXG4gICAgZmFsc2UsXG4gICAgZmFsc2UsXG4gICAgZmFsc2VcbiAgKVxuICBsZXQgY2F0Y2hBbGxHcm91cGVkUmVnZXggPSBjYXRjaEFsbCA/ICcoPzooLy4qKT8pJyA6ICcnXG4gIHJldHVybiB7XG4gICAgbmFtZWRSZWdleDogYF4ke25hbWVkUGFyYW1ldGVyaXplZFJvdXRlfSR7Y2F0Y2hBbGxHcm91cGVkUmVnZXh9JGAsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJnZXROYW1lZE1pZGRsZXdhcmVSZWdleCIsImdldE5hbWVkUm91dGVSZWdleCIsImdldFJvdXRlUmVnZXgiLCJwYXJzZVBhcmFtZXRlciIsIlBBUkFNRVRFUl9QQVRURVJOIiwicGFyYW0iLCJtYXRjaCIsInBhcnNlTWF0Y2hlZFBhcmFtZXRlciIsIm9wdGlvbmFsIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic2xpY2UiLCJyZXBlYXQiLCJrZXkiLCJnZXRQYXJhbWV0cml6ZWRSb3V0ZSIsInJvdXRlIiwiaW5jbHVkZVN1ZmZpeCIsImluY2x1ZGVQcmVmaXgiLCJncm91cHMiLCJncm91cEluZGV4Iiwic2VnbWVudHMiLCJzZWdtZW50IiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInNwbGl0IiwibWFya2VyTWF0Y2giLCJJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyIsImZpbmQiLCJtIiwicGFyYW1NYXRjaGVzIiwicG9zIiwicHVzaCIsImVzY2FwZVN0cmluZ1JlZ2V4cCIsInMiLCJzdWJzdHJpbmciLCJwYXJhbWV0ZXJpemVkUm91dGUiLCJqb2luIiwibm9ybWFsaXplZFJvdXRlIiwiZXhjbHVkZU9wdGlvbmFsVHJhaWxpbmdTbGFzaCIsInJlIiwiUmVnRXhwIiwiYnVpbGRHZXRTYWZlUm91dGVLZXkiLCJpIiwicm91dGVLZXkiLCJqIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiTWF0aCIsImZsb29yIiwiZ2V0U2FmZUtleUZyb21TZWdtZW50IiwiaW50ZXJjZXB0aW9uTWFya2VyIiwiZ2V0U2FmZVJvdXRlS2V5Iiwicm91dGVLZXlzIiwia2V5UHJlZml4IiwiYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXMiLCJjbGVhbmVkS2V5IiwicmVwbGFjZSIsImludmFsaWRLZXkiLCJsZW5ndGgiLCJpc05hTiIsInBhcnNlSW50IiwiZHVwbGljYXRlS2V5IiwiaW50ZXJjZXB0aW9uUHJlZml4IiwicGF0dGVybiIsImdldE5hbWVkUGFyYW1ldHJpemVkUm91dGUiLCJwcmVmaXhSb3V0ZUtleXMiLCJoYXNJbnRlcmNlcHRpb25NYXJrZXIiLCJzb21lIiwiTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWCIsInVuZGVmaW5lZCIsIk5FWFRfUVVFUllfUEFSQU1fUFJFRklYIiwibmFtZWRQYXJhbWV0ZXJpemVkUm91dGUiLCJvcHRpb25zIiwicmVzdWx0IiwibmFtZWRSZWdleCIsImNhdGNoQWxsIiwiY2F0Y2hBbGxSZWdleCIsImNhdGNoQWxsR3JvdXBlZFJlZ2V4Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/route-regex.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getSortedRouteObjects: function() {\n return getSortedRouteObjects;\n },\n getSortedRoutes: function() {\n return getSortedRoutes;\n }\n});\nclass UrlNode {\n insert(urlPath) {\n this._insert(urlPath.split('/').filter(Boolean), [], false);\n }\n smoosh() {\n return this._smoosh();\n }\n _smoosh(prefix) {\n if (prefix === void 0) prefix = '/';\n const childrenPaths = [\n ...this.children.keys()\n ].sort();\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[]'), 1);\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[...]'), 1);\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf('[[...]]'), 1);\n }\n const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(\"\" + prefix + c + \"/\")).reduce((prev, curr)=>[\n ...prev,\n ...curr\n ], []);\n if (this.slugName !== null) {\n routes.push(...this.children.get('[]')._smoosh(prefix + \"[\" + this.slugName + \"]/\"));\n }\n if (!this.placeholder) {\n const r = prefix === '/' ? '/' : prefix.slice(0, -1);\n if (this.optionalRestSlugName != null) {\n throw Object.defineProperty(new Error('You cannot define a route with the same specificity as a optional catch-all route (\"' + r + '\" and \"' + r + \"[[...\" + this.optionalRestSlugName + ']]\").'), \"__NEXT_ERROR_CODE\", {\n value: \"E458\",\n enumerable: false,\n configurable: true\n });\n }\n routes.unshift(r);\n }\n if (this.restSlugName !== null) {\n routes.push(...this.children.get('[...]')._smoosh(prefix + \"[...\" + this.restSlugName + \"]/\"));\n }\n if (this.optionalRestSlugName !== null) {\n routes.push(...this.children.get('[[...]]')._smoosh(prefix + \"[[...\" + this.optionalRestSlugName + \"]]/\"));\n }\n return routes;\n }\n _insert(urlPaths, slugNames, isCatchAll) {\n if (urlPaths.length === 0) {\n this.placeholder = false;\n return;\n }\n if (isCatchAll) {\n throw Object.defineProperty(new Error(\"Catch-all must be the last part of the URL.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E392\",\n enumerable: false,\n configurable: true\n });\n }\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0];\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith('[') && nextSegment.endsWith(']')) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1);\n let isOptional = false;\n if (segmentName.startsWith('[') && segmentName.endsWith(']')) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1);\n isOptional = true;\n }\n if (segmentName.startsWith('…')) {\n throw Object.defineProperty(new Error(\"Detected a three-dot character ('…') at ('\" + segmentName + \"'). Did you mean ('...')?\"), \"__NEXT_ERROR_CODE\", {\n value: \"E147\",\n enumerable: false,\n configurable: true\n });\n }\n if (segmentName.startsWith('...')) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3);\n isCatchAll = true;\n }\n if (segmentName.startsWith('[') || segmentName.endsWith(']')) {\n throw Object.defineProperty(new Error(\"Segment names may not start or end with extra brackets ('\" + segmentName + \"').\"), \"__NEXT_ERROR_CODE\", {\n value: \"E421\",\n enumerable: false,\n configurable: true\n });\n }\n if (segmentName.startsWith('.')) {\n throw Object.defineProperty(new Error(\"Segment names may not start with erroneous periods ('\" + segmentName + \"').\"), \"__NEXT_ERROR_CODE\", {\n value: \"E288\",\n enumerable: false,\n configurable: true\n });\n }\n function handleSlug(previousSlug, nextSlug) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw Object.defineProperty(new Error(\"You cannot use different slug names for the same dynamic path ('\" + previousSlug + \"' !== '\" + nextSlug + \"').\"), \"__NEXT_ERROR_CODE\", {\n value: \"E337\",\n enumerable: false,\n configurable: true\n });\n }\n }\n slugNames.forEach((slug)=>{\n if (slug === nextSlug) {\n throw Object.defineProperty(new Error('You cannot have the same slug name \"' + nextSlug + '\" repeat within a single dynamic path'), \"__NEXT_ERROR_CODE\", {\n value: \"E247\",\n enumerable: false,\n configurable: true\n });\n }\n if (slug.replace(/\\W/g, '') === nextSegment.replace(/\\W/g, '')) {\n throw Object.defineProperty(new Error('You cannot have the slug names \"' + slug + '\" and \"' + nextSlug + '\" differ only by non-word symbols within a single dynamic path'), \"__NEXT_ERROR_CODE\", {\n value: \"E499\",\n enumerable: false,\n configurable: true\n });\n }\n });\n slugNames.push(nextSlug);\n }\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw Object.defineProperty(new Error('You cannot use both an required and optional catch-all route at the same level (\"[...' + this.restSlugName + ']\" and \"' + urlPaths[0] + '\" ).'), \"__NEXT_ERROR_CODE\", {\n value: \"E299\",\n enumerable: false,\n configurable: true\n });\n }\n handleSlug(this.optionalRestSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName;\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = '[[...]]';\n } else {\n if (this.optionalRestSlugName != null) {\n throw Object.defineProperty(new Error('You cannot use both an optional and required catch-all route at the same level (\"[[...' + this.optionalRestSlugName + ']]\" and \"' + urlPaths[0] + '\").'), \"__NEXT_ERROR_CODE\", {\n value: \"E300\",\n enumerable: false,\n configurable: true\n });\n }\n handleSlug(this.restSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName;\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = '[...]';\n }\n } else {\n if (isOptional) {\n throw Object.defineProperty(new Error('Optional route parameters are not yet supported (\"' + urlPaths[0] + '\").'), \"__NEXT_ERROR_CODE\", {\n value: \"E435\",\n enumerable: false,\n configurable: true\n });\n }\n handleSlug(this.slugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName;\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = '[]';\n }\n }\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode());\n }\n this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll);\n }\n constructor(){\n this.placeholder = true;\n this.children = new Map();\n this.slugName = null;\n this.restSlugName = null;\n this.optionalRestSlugName = null;\n }\n}\nfunction getSortedRoutes(normalizedPages) {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode();\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath)=>root.insert(pagePath));\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh();\n}\nfunction getSortedRouteObjects(objects, getter) {\n // We're assuming here that all the pathnames are unique, that way we can\n // sort the list and use the index as the key.\n const indexes = {};\n const pathnames = [];\n for(let i = 0; i < objects.length; i++){\n const pathname = getter(objects[i]);\n indexes[pathname] = i;\n pathnames[i] = pathname;\n }\n // Sort the pathnames.\n const sorted = getSortedRoutes(pathnames);\n // Map the sorted pathnames back to the original objects using the new sorted\n // index.\n return sorted.map((pathname)=>objects[indexes[pathname]]);\n} //# sourceMappingURL=sorted-routes.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvc29ydGVkLXJvdXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFpT2dCQSxxQkFBcUI7ZUFBckJBOztJQXRCQUMsZUFBZTtlQUFmQTs7O0FBM01oQixNQUFNQztJQU9KQyxPQUFPQyxPQUFlLEVBQVE7UUFDNUIsSUFBSSxDQUFDQyxPQUFPLENBQUNELFFBQVFFLEtBQUssQ0FBQyxLQUFLQyxNQUFNLENBQUNDLFVBQVUsRUFBRSxFQUFFO0lBQ3ZEO0lBRUFDLFNBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDQyxPQUFPO0lBQ3JCO0lBRVFBLFFBQVFDLE1BQW9CLEVBQVk7UUFBaENBLElBQUFBLFdBQUFBLEtBQUFBLEdBQUFBLFNBQWlCO1FBQy9CLE1BQU1DLGdCQUFnQjtlQUFJLElBQUksQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJO1NBQUcsQ0FBQ0MsSUFBSTtRQUNwRCxJQUFJLElBQUksQ0FBQ0MsUUFBUSxLQUFLLE1BQU07WUFDMUJKLGNBQWNLLE1BQU0sQ0FBQ0wsY0FBY00sT0FBTyxDQUFDLE9BQU87UUFDcEQ7UUFDQSxJQUFJLElBQUksQ0FBQ0MsWUFBWSxLQUFLLE1BQU07WUFDOUJQLGNBQWNLLE1BQU0sQ0FBQ0wsY0FBY00sT0FBTyxDQUFDLFVBQVU7UUFDdkQ7UUFDQSxJQUFJLElBQUksQ0FBQ0Usb0JBQW9CLEtBQUssTUFBTTtZQUN0Q1IsY0FBY0ssTUFBTSxDQUFDTCxjQUFjTSxPQUFPLENBQUMsWUFBWTtRQUN6RDtRQUVBLE1BQU1HLFNBQVNULGNBQ1pVLEdBQUcsQ0FBQyxDQUFDQyxJQUFNLElBQUksQ0FBQ1YsUUFBUSxDQUFDVyxHQUFHLENBQUNELEdBQUliLE9BQU8sQ0FBRSxLQUFFQyxTQUFTWSxJQUFFLE1BQ3ZERSxNQUFNLENBQUMsQ0FBQ0MsTUFBTUMsT0FBUzttQkFBSUQ7bUJBQVNDO2FBQUssRUFBRSxFQUFF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QixvQ0FBb0M7SUFDcEMsOEVBQThFO0lBQzlFLHdFQUF3RTtJQUN4RSxnSEFBZ0g7SUFDaEgsNEVBQTRFO0lBQzVFLE1BQU1DLE9BQU8sSUFBSXBEO0lBRWpCLDZGQUE2RjtJQUM3Rm1ELGdCQUFnQk4sT0FBTyxDQUFDLENBQUNRLFdBQWFELEtBQUtuRCxNQUFNLENBQUNvRDtJQUNsRCw0R0FBNEc7SUFDNUcsT0FBT0QsS0FBSzdDLE1BQU07QUFDcEI7QUFFTyxTQUFTVCxzQkFDZHdELE9BQVksRUFDWkMsTUFBMEI7SUFFMUIseUVBQXlFO0lBQ3pFLDhDQUE4QztJQUM5QyxNQUFNQyxVQUFrQyxDQUFDO0lBQ3pDLE1BQU1DLFlBQXNCLEVBQUU7SUFDOUIsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlKLFFBQVFuQixNQUFNLEVBQUV1QixJQUFLO1FBQ3ZDLE1BQU1DLFdBQVdKLE9BQU9ELE9BQU8sQ0FBQ0ksRUFBRTtRQUNsQ0YsT0FBTyxDQUFDRyxTQUFTLEdBQUdEO1FBQ3BCRCxTQUFTLENBQUNDLEVBQUUsR0FBR0M7SUFDakI7SUFFQSxzQkFBc0I7SUFDdEIsTUFBTUMsU0FBUzdELGdCQUFnQjBEO0lBRS9CLDZFQUE2RTtJQUM3RSxTQUFTO0lBQ1QsT0FBT0csT0FBT3hDLEdBQUcsQ0FBQyxDQUFDdUMsV0FBYUwsT0FBTyxDQUFDRSxPQUFPLENBQUNHLFNBQVMsQ0FBQztBQUM1RCIsInNvdXJjZXMiOlsiRDpcXHNyY1xcc2hhcmVkXFxsaWJcXHJvdXRlclxcdXRpbHNcXHNvcnRlZC1yb3V0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgVXJsTm9kZSB7XG4gIHBsYWNlaG9sZGVyOiBib29sZWFuID0gdHJ1ZVxuICBjaGlsZHJlbjogTWFwPHN0cmluZywgVXJsTm9kZT4gPSBuZXcgTWFwKClcbiAgc2x1Z05hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIHJlc3RTbHVnTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgb3B0aW9uYWxSZXN0U2x1Z05hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgaW5zZXJ0KHVybFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2luc2VydCh1cmxQYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pLCBbXSwgZmFsc2UpXG4gIH1cblxuICBzbW9vc2goKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zbW9vc2goKVxuICB9XG5cbiAgcHJpdmF0ZSBfc21vb3NoKHByZWZpeDogc3RyaW5nID0gJy8nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNoaWxkcmVuUGF0aHMgPSBbLi4udGhpcy5jaGlsZHJlbi5rZXlzKCldLnNvcnQoKVxuICAgIGlmICh0aGlzLnNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICBjaGlsZHJlblBhdGhzLnNwbGljZShjaGlsZHJlblBhdGhzLmluZGV4T2YoJ1tdJyksIDEpXG4gICAgfVxuICAgIGlmICh0aGlzLnJlc3RTbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgY2hpbGRyZW5QYXRocy5zcGxpY2UoY2hpbGRyZW5QYXRocy5pbmRleE9mKCdbLi4uXScpLCAxKVxuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgY2hpbGRyZW5QYXRocy5zcGxpY2UoY2hpbGRyZW5QYXRocy5pbmRleE9mKCdbWy4uLl1dJyksIDEpXG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVzID0gY2hpbGRyZW5QYXRoc1xuICAgICAgLm1hcCgoYykgPT4gdGhpcy5jaGlsZHJlbi5nZXQoYykhLl9zbW9vc2goYCR7cHJlZml4fSR7Y30vYCkpXG4gICAgICAucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBbLi4ucHJldiwgLi4uY3Vycl0sIFtdKVxuXG4gICAgaWYgKHRoaXMuc2x1Z05hbWUgIT09IG51bGwpIHtcbiAgICAgIHJvdXRlcy5wdXNoKFxuICAgICAgICAuLi50aGlzLmNoaWxkcmVuLmdldCgnW10nKSEuX3Ntb29zaChgJHtwcmVmaXh9WyR7dGhpcy5zbHVnTmFtZX1dL2ApXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICBjb25zdCByID0gcHJlZml4ID09PSAnLycgPyAnLycgOiBwcmVmaXguc2xpY2UoMCwgLTEpXG4gICAgICBpZiAodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgWW91IGNhbm5vdCBkZWZpbmUgYSByb3V0ZSB3aXRoIHRoZSBzYW1lIHNwZWNpZmljaXR5IGFzIGEgb3B0aW9uYWwgY2F0Y2gtYWxsIHJvdXRlIChcIiR7cn1cIiBhbmQgXCIke3J9W1suLi4ke3RoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWV9XV1cIikuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHJvdXRlcy51bnNoaWZ0KHIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICByb3V0ZXMucHVzaChcbiAgICAgICAgLi4udGhpcy5jaGlsZHJlblxuICAgICAgICAgIC5nZXQoJ1suLi5dJykhXG4gICAgICAgICAgLl9zbW9vc2goYCR7cHJlZml4fVsuLi4ke3RoaXMucmVzdFNsdWdOYW1lfV0vYClcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgcm91dGVzLnB1c2goXG4gICAgICAgIC4uLnRoaXMuY2hpbGRyZW5cbiAgICAgICAgICAuZ2V0KCdbWy4uLl1dJykhXG4gICAgICAgICAgLl9zbW9vc2goYCR7cHJlZml4fVtbLi4uJHt0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lfV1dL2ApXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJvdXRlc1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5zZXJ0KFxuICAgIHVybFBhdGhzOiBzdHJpbmdbXSxcbiAgICBzbHVnTmFtZXM6IHN0cmluZ1tdLFxuICAgIGlzQ2F0Y2hBbGw6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHVybFBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNDYXRjaEFsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYXRjaC1hbGwgbXVzdCBiZSB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBVUkwuYClcbiAgICB9XG5cbiAgICAvLyBUaGUgbmV4dCBzZWdtZW50IGluIHRoZSB1cmxQYXRocyBsaXN0XG4gICAgbGV0IG5leHRTZWdtZW50ID0gdXJsUGF0aHNbMF1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBzZWdtZW50IG1hdGNoZXMgYFtzb21ldGhpbmddYFxuICAgIGlmIChuZXh0U2VnbWVudC5zdGFydHNXaXRoKCdbJykgJiYgbmV4dFNlZ21lbnQuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgLy8gU3RyaXAgYFtgIGFuZCBgXWAsIGxlYXZpbmcgb25seSBgc29tZXRoaW5nYFxuICAgICAgbGV0IHNlZ21lbnROYW1lID0gbmV4dFNlZ21lbnQuc2xpY2UoMSwgLTEpXG5cbiAgICAgIGxldCBpc09wdGlvbmFsID0gZmFsc2VcbiAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKCdbJykgJiYgc2VnbWVudE5hbWUuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgICAvLyBTdHJpcCBvcHRpb25hbCBgW2AgYW5kIGBdYCwgbGVhdmluZyBvbmx5IGBzb21ldGhpbmdgXG4gICAgICAgIHNlZ21lbnROYW1lID0gc2VnbWVudE5hbWUuc2xpY2UoMSwgLTEpXG4gICAgICAgIGlzT3B0aW9uYWwgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKCfigKYnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYERldGVjdGVkIGEgdGhyZWUtZG90IGNoYXJhY3RlciAoJ+KApicpIGF0ICgnJHtzZWdtZW50TmFtZX0nKS4gRGlkIHlvdSBtZWFuICgnLi4uJyk/YFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKCcuLi4nKSkge1xuICAgICAgICAvLyBTdHJpcCBgLi4uYCwgbGVhdmluZyBvbmx5IGBzb21ldGhpbmdgXG4gICAgICAgIHNlZ21lbnROYW1lID0gc2VnbWVudE5hbWUuc3Vic3RyaW5nKDMpXG4gICAgICAgIGlzQ2F0Y2hBbGwgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKCdbJykgfHwgc2VnbWVudE5hbWUuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFNlZ21lbnQgbmFtZXMgbWF5IG5vdCBzdGFydCBvciBlbmQgd2l0aCBleHRyYSBicmFja2V0cyAoJyR7c2VnbWVudE5hbWV9JykuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTZWdtZW50IG5hbWVzIG1heSBub3Qgc3RhcnQgd2l0aCBlcnJvbmVvdXMgcGVyaW9kcyAoJyR7c2VnbWVudE5hbWV9JykuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZVNsdWcocHJldmlvdXNTbHVnOiBzdHJpbmcgfCBudWxsLCBuZXh0U2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIGlmIChwcmV2aW91c1NsdWcgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgc3BlY2lmaWMgc2VnbWVudCBhbHJlYWR5IGhhcyBhIHNsdWcgYnV0IHRoZSBzbHVnIGlzIG5vdCBgc29tZXRoaW5nYFxuICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgY29sbGlzaW9ucyBsaWtlOlxuICAgICAgICAgIC8vIHBhZ2VzL1twb3N0XS9pbmRleC5qc1xuICAgICAgICAgIC8vIHBhZ2VzL1tpZF0vaW5kZXguanNcbiAgICAgICAgICAvLyBCZWNhdXNlIGN1cnJlbnRseSBtdWx0aXBsZSBkeW5hbWljIHBhcmFtcyBvbiB0aGUgc2FtZSBzZWdtZW50IGxldmVsIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgICAgICAgaWYgKHByZXZpb3VzU2x1ZyAhPT0gbmV4dFNsdWcpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgZXJyb3Igc2VlbXMgdG8gYmUgY29uZnVzaW5nIGZvciB1c2VycywgbmVlZHMgYW4gZXJyb3IgbGluaywgdGhlIGRlc2NyaXB0aW9uIGNhbiBiZSBiYXNlZCBvbiBhYm92ZSBjb21tZW50LlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgWW91IGNhbm5vdCB1c2UgZGlmZmVyZW50IHNsdWcgbmFtZXMgZm9yIHRoZSBzYW1lIGR5bmFtaWMgcGF0aCAoJyR7cHJldmlvdXNTbHVnfScgIT09ICcke25leHRTbHVnfScpLmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzbHVnTmFtZXMuZm9yRWFjaCgoc2x1ZykgPT4ge1xuICAgICAgICAgIGlmIChzbHVnID09PSBuZXh0U2x1Zykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgWW91IGNhbm5vdCBoYXZlIHRoZSBzYW1lIHNsdWcgbmFtZSBcIiR7bmV4dFNsdWd9XCIgcmVwZWF0IHdpdGhpbiBhIHNpbmdsZSBkeW5hbWljIHBhdGhgXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNsdWcucmVwbGFjZSgvXFxXL2csICcnKSA9PT0gbmV4dFNlZ21lbnQucmVwbGFjZSgvXFxXL2csICcnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgWW91IGNhbm5vdCBoYXZlIHRoZSBzbHVnIG5hbWVzIFwiJHtzbHVnfVwiIGFuZCBcIiR7bmV4dFNsdWd9XCIgZGlmZmVyIG9ubHkgYnkgbm9uLXdvcmQgc3ltYm9scyB3aXRoaW4gYSBzaW5nbGUgZHluYW1pYyBwYXRoYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBzbHVnTmFtZXMucHVzaChuZXh0U2x1ZylcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ2F0Y2hBbGwpIHtcbiAgICAgICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXN0U2x1Z05hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgWW91IGNhbm5vdCB1c2UgYm90aCBhbiByZXF1aXJlZCBhbmQgb3B0aW9uYWwgY2F0Y2gtYWxsIHJvdXRlIGF0IHRoZSBzYW1lIGxldmVsIChcIlsuLi4ke3RoaXMucmVzdFNsdWdOYW1lfV1cIiBhbmQgXCIke3VybFBhdGhzWzBdfVwiICkuYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhbmRsZVNsdWcodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSwgc2VnbWVudE5hbWUpXG4gICAgICAgICAgLy8gc2x1Z05hbWUgaXMga2VwdCBhcyBpdCBjYW4gb25seSBiZSBvbmUgcGFydGljdWxhciBzbHVnTmFtZVxuICAgICAgICAgIHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgPSBzZWdtZW50TmFtZVxuICAgICAgICAgIC8vIG5leHRTZWdtZW50IGlzIG92ZXJ3cml0dGVuIHRvIFtbLi4uXV0gc28gdGhhdCBpdCBjYW4gbGF0ZXIgYmUgc29ydGVkIHNwZWNpZmljYWxseVxuICAgICAgICAgIG5leHRTZWdtZW50ID0gJ1tbLi4uXV0nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgWW91IGNhbm5vdCB1c2UgYm90aCBhbiBvcHRpb25hbCBhbmQgcmVxdWlyZWQgY2F0Y2gtYWxsIHJvdXRlIGF0IHRoZSBzYW1lIGxldmVsIChcIltbLi4uJHt0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lfV1dXCIgYW5kIFwiJHt1cmxQYXRoc1swXX1cIikuYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhbmRsZVNsdWcodGhpcy5yZXN0U2x1Z05hbWUsIHNlZ21lbnROYW1lKVxuICAgICAgICAgIC8vIHNsdWdOYW1lIGlzIGtlcHQgYXMgaXQgY2FuIG9ubHkgYmUgb25lIHBhcnRpY3VsYXIgc2x1Z05hbWVcbiAgICAgICAgICB0aGlzLnJlc3RTbHVnTmFtZSA9IHNlZ21lbnROYW1lXG4gICAgICAgICAgLy8gbmV4dFNlZ21lbnQgaXMgb3ZlcndyaXR0ZW4gdG8gWy4uLl0gc28gdGhhdCBpdCBjYW4gbGF0ZXIgYmUgc29ydGVkIHNwZWNpZmljYWxseVxuICAgICAgICAgIG5leHRTZWdtZW50ID0gJ1suLi5dJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNPcHRpb25hbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBPcHRpb25hbCByb3V0ZSBwYXJhbWV0ZXJzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCAoXCIke3VybFBhdGhzWzBdfVwiKS5gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVNsdWcodGhpcy5zbHVnTmFtZSwgc2VnbWVudE5hbWUpXG4gICAgICAgIC8vIHNsdWdOYW1lIGlzIGtlcHQgYXMgaXQgY2FuIG9ubHkgYmUgb25lIHBhcnRpY3VsYXIgc2x1Z05hbWVcbiAgICAgICAgdGhpcy5zbHVnTmFtZSA9IHNlZ21lbnROYW1lXG4gICAgICAgIC8vIG5leHRTZWdtZW50IGlzIG92ZXJ3cml0dGVuIHRvIFtdIHNvIHRoYXQgaXQgY2FuIGxhdGVyIGJlIHNvcnRlZCBzcGVjaWZpY2FsbHlcbiAgICAgICAgbmV4dFNlZ21lbnQgPSAnW10nXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBVcmxOb2RlIGRvZXNuJ3QgaGF2ZSB0aGUgbmV4dFNlZ21lbnQgeWV0IHdlIGNyZWF0ZSBhIG5ldyBjaGlsZCBVcmxOb2RlXG4gICAgaWYgKCF0aGlzLmNoaWxkcmVuLmhhcyhuZXh0U2VnbWVudCkpIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KG5leHRTZWdtZW50LCBuZXcgVXJsTm9kZSgpKVxuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5cbiAgICAgIC5nZXQobmV4dFNlZ21lbnQpIVxuICAgICAgLl9pbnNlcnQodXJsUGF0aHMuc2xpY2UoMSksIHNsdWdOYW1lcywgaXNDYXRjaEFsbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U29ydGVkUm91dGVzKFxuICBub3JtYWxpemVkUGFnZXM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPlxuKTogc3RyaW5nW10ge1xuICAvLyBGaXJzdCB0aGUgVXJsTm9kZSBpcyBjcmVhdGVkLCBhbmQgZXZlcnkgVXJsTm9kZSBjYW4gaGF2ZSBvbmx5IDEgZHluYW1pYyBzZWdtZW50XG4gIC8vIEVnIHlvdSBjYW4ndCBoYXZlIHBhZ2VzL1twb3N0XS9hYmMuanMgYW5kIHBhZ2VzL1toZWxsb10vc29tZXRoaW5nLWVsc2UuanNcbiAgLy8gT25seSAxIGR5bmFtaWMgc2VnbWVudCBwZXIgbmVzdGluZyBsZXZlbFxuXG4gIC8vIFNvIGluIHRoZSBjYXNlIHRoYXQgaXMgdGVzdC9pbnRlZ3JhdGlvbi9keW5hbWljLXJvdXRpbmcgaXQnbGwgYmUgdGhpczpcbiAgLy8gcGFnZXMvW3Bvc3RdL2NvbW1lbnRzLmpzXG4gIC8vIHBhZ2VzL2Jsb2cvW3Bvc3RdL2NvbW1lbnQvW2lkXS5qc1xuICAvLyBCb3RoIGFyZSBmaW5lIGJlY2F1c2UgYHBhZ2VzL1twb3N0XWAgYW5kIGBwYWdlcy9ibG9nYCBhcmUgb24gdGhlIHNhbWUgbGV2ZWxcbiAgLy8gU28gaW4gdGhpcyBjYXNlIGBVcmxOb2RlYCBjcmVhdGVkIGhlcmUgaGFzIGB0aGlzLnNsdWdOYW1lID09PSAncG9zdCdgXG4gIC8vIEFuZCBzaW5jZSB5b3VyIFBSIHBhc3NlZCB0aHJvdWdoIGBzbHVnTmFtZWAgYXMgYW4gYXJyYXkgYmFzaWNhbGx5IGl0J2QgaW5jbHVkaW5nIGl0IGluIHRvbyBtYW55IHBvc3NpYmlsaXRpZXNcbiAgLy8gSW5zdGVhZCB3aGF0IGhhcyB0byBiZSBwYXNzZWQgdGhyb3VnaCBpcyB0aGUgdXB3YXJkcyBwYXRoJ3MgZHluYW1pYyBuYW1lc1xuICBjb25zdCByb290ID0gbmV3IFVybE5vZGUoKVxuXG4gIC8vIEhlcmUgdGhlIGByb290YCBnZXRzIGluamVjdGVkIG11bHRpcGxlIHBhdGhzLCBhbmQgaW5zZXJ0IHdpbGwgYnJlYWsgdGhlbSB1cCBpbnRvIHN1YmxldmVsc1xuICBub3JtYWxpemVkUGFnZXMuZm9yRWFjaCgocGFnZVBhdGgpID0+IHJvb3QuaW5zZXJ0KHBhZ2VQYXRoKSlcbiAgLy8gU21vb3NoIHdpbGwgdGhlbiBzb3J0IHRob3NlIHN1YmxldmVscyB1cCB0byB0aGUgcG9pbnQgd2hlcmUgeW91IGdldCB0aGUgY29ycmVjdCByb3V0ZSBkZWZpbml0aW9uIHByaW9yaXR5XG4gIHJldHVybiByb290LnNtb29zaCgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3J0ZWRSb3V0ZU9iamVjdHM8VD4oXG4gIG9iamVjdHM6IFRbXSxcbiAgZ2V0dGVyOiAob2JqOiBUKSA9PiBzdHJpbmdcbik6IFRbXSB7XG4gIC8vIFdlJ3JlIGFzc3VtaW5nIGhlcmUgdGhhdCBhbGwgdGhlIHBhdGhuYW1lcyBhcmUgdW5pcXVlLCB0aGF0IHdheSB3ZSBjYW5cbiAgLy8gc29ydCB0aGUgbGlzdCBhbmQgdXNlIHRoZSBpbmRleCBhcyB0aGUga2V5LlxuICBjb25zdCBpbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgY29uc3QgcGF0aG5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHBhdGhuYW1lID0gZ2V0dGVyKG9iamVjdHNbaV0pXG4gICAgaW5kZXhlc1twYXRobmFtZV0gPSBpXG4gICAgcGF0aG5hbWVzW2ldID0gcGF0aG5hbWVcbiAgfVxuXG4gIC8vIFNvcnQgdGhlIHBhdGhuYW1lcy5cbiAgY29uc3Qgc29ydGVkID0gZ2V0U29ydGVkUm91dGVzKHBhdGhuYW1lcylcblxuICAvLyBNYXAgdGhlIHNvcnRlZCBwYXRobmFtZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgb2JqZWN0cyB1c2luZyB0aGUgbmV3IHNvcnRlZFxuICAvLyBpbmRleC5cbiAgcmV0dXJuIHNvcnRlZC5tYXAoKHBhdGhuYW1lKSA9PiBvYmplY3RzW2luZGV4ZXNbcGF0aG5hbWVdXSlcbn1cbiJdLCJuYW1lcyI6WyJnZXRTb3J0ZWRSb3V0ZU9iamVjdHMiLCJnZXRTb3J0ZWRSb3V0ZXMiLCJVcmxOb2RlIiwiaW5zZXJ0IiwidXJsUGF0aCIsIl9pbnNlcnQiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzbW9vc2giLCJfc21vb3NoIiwicHJlZml4IiwiY2hpbGRyZW5QYXRocyIsImNoaWxkcmVuIiwia2V5cyIsInNvcnQiLCJzbHVnTmFtZSIsInNwbGljZSIsImluZGV4T2YiLCJyZXN0U2x1Z05hbWUiLCJvcHRpb25hbFJlc3RTbHVnTmFtZSIsInJvdXRlcyIsIm1hcCIsImMiLCJnZXQiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsInB1c2giLCJwbGFjZWhvbGRlciIsInIiLCJzbGljZSIsIkVycm9yIiwidW5zaGlmdCIsInVybFBhdGhzIiwic2x1Z05hbWVzIiwiaXNDYXRjaEFsbCIsImxlbmd0aCIsIm5leHRTZWdtZW50Iiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic2VnbWVudE5hbWUiLCJpc09wdGlvbmFsIiwic3Vic3RyaW5nIiwiaGFuZGxlU2x1ZyIsInByZXZpb3VzU2x1ZyIsIm5leHRTbHVnIiwiZm9yRWFjaCIsInNsdWciLCJyZXBsYWNlIiwiaGFzIiwic2V0IiwiTWFwIiwibm9ybWFsaXplZFBhZ2VzIiwicm9vdCIsInBhZ2VQYXRoIiwib2JqZWN0cyIsImdldHRlciIsImluZGV4ZXMiLCJwYXRobmFtZXMiLCJpIiwicGF0aG5hbWUiLCJzb3J0ZWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/runtime-config.external.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/runtime-config.external.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return _default;\n },\n setConfig: function() {\n return setConfig;\n }\n});\nlet runtimeConfig;\nconst _default = ()=>{\n return runtimeConfig;\n};\nfunction setConfig(configValue) {\n runtimeConfig = configValue;\n} //# sourceMappingURL=runtime-config.external.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ydW50aW1lLWNvbmZpZy5leHRlcm5hbC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFFQSxPQUVDO2VBRkQ7O0lBSWdCQSxTQUFTO2VBQVRBOzs7QUFOaEIsSUFBSUM7TUFFSixXQUFlO0lBQ2IsT0FBT0E7QUFDVDtBQUVPLFNBQVNELFVBQVVFLFdBQWdCO0lBQ3hDRCxnQkFBZ0JDO0FBQ2xCIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxccnVudGltZS1jb25maWcuZXh0ZXJuYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsibGV0IHJ1bnRpbWVDb25maWc6IGFueVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIHJldHVybiBydW50aW1lQ29uZmlnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb25maWcoY29uZmlnVmFsdWU6IGFueSk6IHZvaWQge1xuICBydW50aW1lQ29uZmlnID0gY29uZmlnVmFsdWVcbn1cbiJdLCJuYW1lcyI6WyJzZXRDb25maWciLCJydW50aW1lQ29uZmlnIiwiY29uZmlnVmFsdWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/runtime-config.external.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/segment.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/segment.js ***!
|
||
\******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DEFAULT_SEGMENT_KEY: function() {\n return DEFAULT_SEGMENT_KEY;\n },\n PAGE_SEGMENT_KEY: function() {\n return PAGE_SEGMENT_KEY;\n },\n addSearchParamsIfPageSegment: function() {\n return addSearchParamsIfPageSegment;\n },\n isGroupSegment: function() {\n return isGroupSegment;\n },\n isParallelRouteSegment: function() {\n return isParallelRouteSegment;\n }\n});\nfunction isGroupSegment(segment) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')');\n}\nfunction isParallelRouteSegment(segment) {\n return segment.startsWith('@') && segment !== '@children';\n}\nfunction addSearchParamsIfPageSegment(segment, searchParams) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY);\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams);\n return stringifiedQuery !== '{}' ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery : PAGE_SEGMENT_KEY;\n }\n return segment;\n}\nconst PAGE_SEGMENT_KEY = '__PAGE__';\nconst DEFAULT_SEGMENT_KEY = '__DEFAULT__'; //# sourceMappingURL=segment.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zZWdtZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQTRCYUEsbUJBQW1CO2VBQW5CQTs7SUFEQUMsZ0JBQWdCO2VBQWhCQTs7SUFoQkdDLDRCQUE0QjtlQUE1QkE7O0lBVEFDLGNBQWM7ZUFBZEE7O0lBS0FDLHNCQUFzQjtlQUF0QkE7OztBQUxULFNBQVNELGVBQWVFLE9BQWU7SUFDNUMsc0NBQXNDO0lBQ3RDLE9BQU9BLE9BQU8sQ0FBQyxFQUFFLEtBQUssT0FBT0EsUUFBUUMsUUFBUSxDQUFDO0FBQ2hEO0FBRU8sU0FBU0YsdUJBQXVCQyxPQUFlO0lBQ3BELE9BQU9BLFFBQVFFLFVBQVUsQ0FBQyxRQUFRRixZQUFZO0FBQ2hEO0FBRU8sU0FBU0gsNkJBQ2RHLE9BQWdCLEVBQ2hCRyxZQUEyRDtJQUUzRCxNQUFNQyxnQkFBZ0JKLFFBQVFLLFFBQVEsQ0FBQ1Q7SUFFdkMsSUFBSVEsZUFBZTtRQUNqQixNQUFNRSxtQkFBbUJDLEtBQUtDLFNBQVMsQ0FBQ0w7UUFDeEMsT0FBT0cscUJBQXFCLE9BQ3hCVixtQkFBbUIsTUFBTVUsbUJBQ3pCVjtJQUNOO0lBRUEsT0FBT0k7QUFDVDtBQUVPLE1BQU1KLG1CQUFtQjtBQUN6QixNQUFNRCxzQkFBc0IiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFxzZWdtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VnbWVudCB9IGZyb20gJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaXNHcm91cFNlZ21lbnQoc2VnbWVudDogc3RyaW5nKSB7XG4gIC8vIFVzZSBhcnJheVswXSBmb3IgcGVyZm9ybWFudCBwdXJwb3NlXG4gIHJldHVybiBzZWdtZW50WzBdID09PSAnKCcgJiYgc2VnbWVudC5lbmRzV2l0aCgnKScpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcmFsbGVsUm91dGVTZWdtZW50KHNlZ21lbnQ6IHN0cmluZykge1xuICByZXR1cm4gc2VnbWVudC5zdGFydHNXaXRoKCdAJykgJiYgc2VnbWVudCAhPT0gJ0BjaGlsZHJlbidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFNlYXJjaFBhcmFtc0lmUGFnZVNlZ21lbnQoXG4gIHNlZ21lbnQ6IFNlZ21lbnQsXG4gIHNlYXJjaFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ+XG4pIHtcbiAgY29uc3QgaXNQYWdlU2VnbWVudCA9IHNlZ21lbnQuaW5jbHVkZXMoUEFHRV9TRUdNRU5UX0tFWSlcblxuICBpZiAoaXNQYWdlU2VnbWVudCkge1xuICAgIGNvbnN0IHN0cmluZ2lmaWVkUXVlcnkgPSBKU09OLnN0cmluZ2lmeShzZWFyY2hQYXJhbXMpXG4gICAgcmV0dXJuIHN0cmluZ2lmaWVkUXVlcnkgIT09ICd7fSdcbiAgICAgID8gUEFHRV9TRUdNRU5UX0tFWSArICc/JyArIHN0cmluZ2lmaWVkUXVlcnlcbiAgICAgIDogUEFHRV9TRUdNRU5UX0tFWVxuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnRcbn1cblxuZXhwb3J0IGNvbnN0IFBBR0VfU0VHTUVOVF9LRVkgPSAnX19QQUdFX18nXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRUdNRU5UX0tFWSA9ICdfX0RFRkFVTFRfXydcbiJdLCJuYW1lcyI6WyJERUZBVUxUX1NFR01FTlRfS0VZIiwiUEFHRV9TRUdNRU5UX0tFWSIsImFkZFNlYXJjaFBhcmFtc0lmUGFnZVNlZ21lbnQiLCJpc0dyb3VwU2VnbWVudCIsImlzUGFyYWxsZWxSb3V0ZVNlZ21lbnQiLCJzZWdtZW50IiwiZW5kc1dpdGgiLCJzdGFydHNXaXRoIiwic2VhcmNoUGFyYW1zIiwiaXNQYWdlU2VnbWVudCIsImluY2x1ZGVzIiwic3RyaW5naWZpZWRRdWVyeSIsIkpTT04iLCJzdHJpbmdpZnkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/segment.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils.js":
|
||
/*!****************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/utils.js ***!
|
||
\****************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DecodeError: function() {\n return DecodeError;\n },\n MiddlewareNotFoundError: function() {\n return MiddlewareNotFoundError;\n },\n MissingStaticPage: function() {\n return MissingStaticPage;\n },\n NormalizeError: function() {\n return NormalizeError;\n },\n PageNotFoundError: function() {\n return PageNotFoundError;\n },\n SP: function() {\n return SP;\n },\n ST: function() {\n return ST;\n },\n WEB_VITALS: function() {\n return WEB_VITALS;\n },\n execOnce: function() {\n return execOnce;\n },\n getDisplayName: function() {\n return getDisplayName;\n },\n getLocationOrigin: function() {\n return getLocationOrigin;\n },\n getURL: function() {\n return getURL;\n },\n isAbsoluteUrl: function() {\n return isAbsoluteUrl;\n },\n isResSent: function() {\n return isResSent;\n },\n loadGetInitialProps: function() {\n return loadGetInitialProps;\n },\n normalizeRepeatedSlashes: function() {\n return normalizeRepeatedSlashes;\n },\n stringifyError: function() {\n return stringifyError;\n }\n});\nconst WEB_VITALS = [\n 'CLS',\n 'FCP',\n 'FID',\n 'INP',\n 'LCP',\n 'TTFB'\n];\nfunction execOnce(fn) {\n let used = false;\n let result;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!used) {\n used = true;\n result = fn(...args);\n }\n return result;\n };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n const { protocol, hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? ':' + port : '');\n}\nfunction getURL() {\n const { href } = window.location;\n const origin = getLocationOrigin();\n return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown';\n}\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n const urlParts = url.split('?');\n const urlNoQuery = urlParts[0];\n return urlNoQuery // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/').replace(/\\/\\/+/g, '/') + (urlParts[1] ? \"?\" + urlParts.slice(1).join('?') : '');\n}\nasync function loadGetInitialProps(App, ctx) {\n if (true) {\n var _App_prototype;\n if ((_App_prototype = App.prototype) == null ? void 0 : _App_prototype.getInitialProps) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.';\n throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || ctx.ctx && ctx.ctx.res;\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n };\n }\n return {};\n }\n const props = await App.getInitialProps(ctx);\n if (res && isResSent(res)) {\n return props;\n }\n if (!props) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" should resolve to an object. But found \"' + props + '\" instead.';\n throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n }\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\"\" + getDisplayName(App) + \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\");\n }\n }\n return props;\n}\nconst SP = typeof performance !== 'undefined';\nconst ST = SP && [\n 'mark',\n 'measure',\n 'getEntriesByName'\n].every((method)=>typeof performance[method] === 'function');\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n constructor(page){\n super();\n this.code = 'ENOENT';\n this.name = 'PageNotFoundError';\n this.message = \"Cannot find module for page: \" + page;\n }\n}\nclass MissingStaticPage extends Error {\n constructor(page, message){\n super();\n this.message = \"Failed to load static file for page: \" + page + \" \" + message;\n }\n}\nclass MiddlewareNotFoundError extends Error {\n constructor(){\n super();\n this.code = 'ENOENT';\n this.message = \"Cannot find the middleware module\";\n }\n}\nfunction stringifyError(error) {\n return JSON.stringify({\n message: error.message,\n stack: error.stack\n });\n} //# sourceMappingURL=utils.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFvYWFBLFdBQVc7ZUFBWEE7O0lBb0JBQyx1QkFBdUI7ZUFBdkJBOztJQVBBQyxpQkFBaUI7ZUFBakJBOztJQVpBQyxjQUFjO2VBQWRBOztJQUNBQyxpQkFBaUI7ZUFBakJBOztJQVRBQyxFQUFFO2VBQUZBOztJQUNBQyxFQUFFO2VBQUZBOztJQWxYQUMsVUFBVTtlQUFWQTs7SUFzUUdDLFFBQVE7ZUFBUkE7O0lBK0JBQyxjQUFjO2VBQWRBOztJQVhBQyxpQkFBaUI7ZUFBakJBOztJQUtBQyxNQUFNO2VBQU5BOztJQVBIQyxhQUFhO2VBQWJBOztJQW1CR0MsU0FBUztlQUFUQTs7SUFrQk1DLG1CQUFtQjtlQUFuQkE7O0lBZE5DLHdCQUF3QjtlQUF4QkE7O0lBK0dBQyxjQUFjO2VBQWRBOzs7QUE5WlQsTUFBTVQsYUFBYTtJQUFDO0lBQU87SUFBTztJQUFPO0lBQU87SUFBTztDQUFPO0FBc1E5RCxTQUFTQyxTQUNkUyxFQUFLO0lBRUwsSUFBSUMsT0FBTztJQUNYLElBQUlDO0lBRUosT0FBUTt5Q0FBSUMsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7WUFBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O1FBQ1YsSUFBSSxDQUFDRixNQUFNO1lBQ1RBLE9BQU87WUFDUEMsU0FBU0YsTUFBTUc7UUFDakI7UUFDQSxPQUFPRDtJQUNUO0FBQ0Y7QUFFQSwwREFBMEQ7QUFDMUQsZ0VBQWdFO0FBQ2hFLE1BQU1FLHFCQUFxQjtBQUNwQixNQUFNVCxnQkFBZ0IsQ0FBQ1UsTUFBZ0JELG1CQUFtQkUsSUFBSSxDQUFDRDtBQUUvRCxTQUFTWjtJQUNkLE1BQU0sRUFBRWMsUUFBUSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRSxHQUFHQyxPQUFPQyxRQUFRO0lBQ3BELE9BQVVKLFdBQVMsT0FBSUMsV0FBV0MsUUFBTyxNQUFNQSxPQUFPLEdBQUM7QUFDekQ7QUFFTyxTQUFTZjtJQUNkLE1BQU0sRUFBRWtCLElBQUksRUFBRSxHQUFHRixPQUFPQyxRQUFRO0lBQ2hDLE1BQU1FLFNBQVNwQjtJQUNmLE9BQU9tQixLQUFLRSxTQUFTLENBQUNELE9BQU9FLE1BQU07QUFDckM7QUFFTyxTQUFTdkIsZUFBa0J3QixTQUEyQjtJQUMzRCxPQUFPLE9BQU9BLGNBQWMsV0FDeEJBLFlBQ0FBLFVBQVVDLFdBQVcsSUFBSUQsVUFBVUUsSUFBSSxJQUFJO0FBQ2pEO0FBRU8sU0FBU3RCLFVBQVV1QixHQUFtQjtJQUMzQyxPQUFPQSxJQUFJQyxRQUFRLElBQUlELElBQUlFLFdBQVc7QUFDeEM7QUFFTyxTQUFTdkIseUJBQXlCTyxHQUFXO0lBQ2xELE1BQU1pQixXQUFXakIsSUFBSWtCLEtBQUssQ0FBQztJQUMzQixNQUFNQyxhQUFhRixRQUFRLENBQUMsRUFBRTtJQUU5QixPQUNFRSxXQUNFLDREQUE0RDtJQUM1RCwwQ0FBMEM7S0FDekNDLE9BQU8sQ0FBQyxPQUFPLEtBQ2ZBLE9BQU8sQ0FBQyxVQUFVLE9BQ3BCSCxDQUFBQSxRQUFRLENBQUMsRUFBRSxHQUFJLE1BQUdBLFNBQVNJLEtBQUssQ0FBQyxHQUFHQyxJQUFJLENBQUMsT0FBUyxHQUFDO0FBRXhEO0FBRU8sZUFBZTlCLG9CQUlwQitCLEdBQWdDLEVBQUVDLEdBQU07SUFDeEMsSUFBSUMsSUFBb0IsRUFBbUI7WUFDckNGO1FBQUosS0FBSUEsaUJBQUFBLElBQUlLLFNBQUFBLEtBQVMsZ0JBQWJMLGVBQWVNLGVBQWUsRUFBRTtZQUNsQyxNQUFNQyxVQUFXLE1BQUczQyxlQUNsQm9DLE9BQ0E7WUFDRixNQUFNLHFCQUFrQixDQUFsQixJQUFJUSxNQUFNRCxVQUFWO3VCQUFBOzRCQUFBOzhCQUFBO1lBQWlCO1FBQ3pCO0lBQ0Y7SUFDQSxpREFBaUQ7SUFDakQsTUFBTWhCLE1BQU1VLElBQUlWLEdBQUcsSUFBS1UsSUFBSUEsR0FBRyxJQUFJQSxJQUFJQSxHQUFHLENBQUNWLEdBQUc7SUFFOUMsSUFBSSxDQUFDUyxJQUFJTSxlQUFlLEVBQUU7UUFDeEIsSUFBSUwsSUFBSUEsR0FBRyxJQUFJQSxJQUFJYixTQUFTLEVBQUU7WUFDNUIsK0JBQStCO1lBQy9CLE9BQU87Z0JBQ0xxQixXQUFXLE1BQU14QyxvQkFBb0JnQyxJQUFJYixTQUFTLEVBQUVhLElBQUlBLEdBQUc7WUFDN0Q7UUFDRjtRQUNBLE9BQU8sQ0FBQztJQUNWO0lBRUEsTUFBTVMsUUFBUSxNQUFNVixJQUFJTSxlQUFlLENBQUNMO0lBRXhDLElBQUlWLE9BQU92QixVQUFVdUIsTUFBTTtRQUN6QixPQUFPbUI7SUFDVDtJQUVBLElBQUksQ0FBQ0EsT0FBTztRQUNWLE1BQU1ILFVBQVcsTUFBRzNDLGVBQ2xCb0MsT0FDQSxpRUFBOERVLFFBQU07UUFDdEUsTUFBTSxxQkFBa0IsQ0FBbEIsSUFBSUYsTUFBTUQsVUFBVjttQkFBQTt3QkFBQTswQkFBQTtRQUFpQjtJQUN6QjtJQUVBLElBQUlMLElBQW9CLEVBQW1CO1FBQ3pDLElBQUlTLE9BQU9DLElBQUksQ0FBQ0YsT0FBT3ZCLE1BQU0sS0FBSyxLQUFLLENBQUNjLElBQUlBLEdBQUcsRUFBRTtZQUMvQ1ksUUFBUUMsSUFBSSxDQUNULEtBQUVsRCxlQUNEb0MsT0FDQTtRQUVOO0lBQ0Y7SUFFQSxPQUFPVTtBQUNUO0FBRU8sTUFBTWxELEtBQUssT0FBT3VELGdCQUFnQjtBQUNsQyxNQUFNdEQsS0FDWEQsTUFDQztJQUFDO0lBQVE7SUFBVztDQUFtQixDQUFXd0QsS0FBSyxDQUN0RCxDQUFDQyxTQUFXLE9BQU9GLFdBQVcsQ0FBQ0UsT0FBTyxLQUFLO0FBR3hDLE1BQU05RCxvQkFBb0JxRDtBQUFPO0FBQ2pDLE1BQU1sRCx1QkFBdUJrRDtBQUFPO0FBQ3BDLE1BQU1qRCwwQkFBMEJpRDtJQUdyQ1UsWUFBWUMsSUFBWSxDQUFFO1FBQ3hCLEtBQUs7UUFDTCxJQUFJLENBQUNDLElBQUksR0FBRztRQUNaLElBQUksQ0FBQzlCLElBQUksR0FBRztRQUNaLElBQUksQ0FBQ2lCLE9BQU8sR0FBSSxrQ0FBK0JZO0lBQ2pEO0FBQ0Y7QUFFTyxNQUFNOUQsMEJBQTBCbUQ7SUFDckNVLFlBQVlDLElBQVksRUFBRVosT0FBZSxDQUFFO1FBQ3pDLEtBQUs7UUFDTCxJQUFJLENBQUNBLE9BQU8sR0FBSSwwQ0FBdUNZLE9BQUssTUFBR1o7SUFDakU7QUFDRjtBQUVPLE1BQU1uRCxnQ0FBZ0NvRDtJQUUzQ1UsYUFBYztRQUNaLEtBQUs7UUFDTCxJQUFJLENBQUNFLElBQUksR0FBRztRQUNaLElBQUksQ0FBQ2IsT0FBTyxHQUFJO0lBQ2xCO0FBQ0Y7QUFXTyxTQUFTcEMsZUFBZWtELEtBQVk7SUFDekMsT0FBT0MsS0FBS0MsU0FBUyxDQUFDO1FBQUVoQixTQUFTYyxNQUFNZCxPQUFPO1FBQUVpQixPQUFPSCxNQUFNRyxLQUFLO0lBQUM7QUFDckUiLCJzb3VyY2VzIjpbIkQ6XFxzcmNcXHNoYXJlZFxcbGliXFx1dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEh0bWxQcm9wcyB9IGZyb20gJy4vaHRtbC1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRUeXBlLCBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRG9tYWluTG9jYWxlIH0gZnJvbSAnLi4vLi4vc2VydmVyL2NvbmZpZydcbmltcG9ydCB0eXBlIHsgRW52IH0gZnJvbSAnQG5leHQvZW52J1xuaW1wb3J0IHR5cGUgeyBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCdcbmltcG9ydCB0eXBlIHsgTmV4dFJvdXRlciB9IGZyb20gJy4vcm91dGVyL3JvdXRlcidcbmltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCB0eXBlIHsgUHJldmlld0RhdGEgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQ09NUElMRVJfTkFNRVMgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIGZzIGZyb20gJ2ZzJ1xuXG5leHBvcnQgdHlwZSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgQ29udGV4dCBleHRlbmRzIEJhc2VDb250ZXh0ID0gTmV4dFBhZ2VDb250ZXh0LFxuICBJbml0aWFsUHJvcHMgPSB7fSxcbiAgUHJvcHMgPSB7fSxcbj4gPSBDb21wb25lbnRUeXBlPFByb3BzPiAmIHtcbiAgLyoqXG4gICAqIFVzZWQgZm9yIGluaXRpYWwgcGFnZSBsb2FkIGRhdGEgcG9wdWxhdGlvbi4gRGF0YSByZXR1cm5lZCBmcm9tIGBnZXRJbml0aWFsUHJvcHNgIGlzIHNlcmlhbGl6ZWQgd2hlbiBzZXJ2ZXIgcmVuZGVyZWQuXG4gICAqIE1ha2Ugc3VyZSB0byByZXR1cm4gcGxhaW4gYE9iamVjdGAgd2l0aG91dCB1c2luZyBgRGF0ZWAsIGBNYXBgLCBgU2V0YC5cbiAgICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBvZiBgcGFnZWBcbiAgICovXG4gIGdldEluaXRpYWxQcm9wcz8oY29udGV4dDogQ29udGV4dCk6IEluaXRpYWxQcm9wcyB8IFByb21pc2U8SW5pdGlhbFByb3BzPlxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudFR5cGUgPSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgRG9jdW1lbnRDb250ZXh0LFxuICBEb2N1bWVudEluaXRpYWxQcm9wcyxcbiAgRG9jdW1lbnRQcm9wc1xuPlxuXG5leHBvcnQgdHlwZSBBcHBUeXBlPFAgPSB7fT4gPSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgQXBwQ29udGV4dFR5cGUsXG4gIFAsXG4gIEFwcFByb3BzVHlwZTxhbnksIFA+XG4+XG5cbmV4cG9ydCB0eXBlIEFwcFRyZWVUeXBlID0gQ29tcG9uZW50VHlwZTxcbiAgQXBwSW5pdGlhbFByb3BzICYgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbj5cblxuLyoqXG4gKiBXZWIgdml0YWxzIHByb3ZpZGVkIHRvIF9hcHAucmVwb3J0V2ViVml0YWxzIGJ5IENvcmUgV2ViIFZpdGFscyBwbHVnaW4gZGV2ZWxvcGVkIGJ5IEdvb2dsZSBDaHJvbWUgdGVhbS5cbiAqIGh0dHBzOi8vbmV4dGpzLm9yZy9ibG9nL25leHQtOS00I2ludGVncmF0ZWQtd2ViLXZpdGFscy1yZXBvcnRpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFdFQl9WSVRBTFMgPSBbJ0NMUycsICdGQ1AnLCAnRklEJywgJ0lOUCcsICdMQ1AnLCAnVFRGQiddIGFzIGNvbnN0XG5leHBvcnQgdHlwZSBOZXh0V2ViVml0YWxzTWV0cmljID0ge1xuICBpZDogc3RyaW5nXG4gIHN0YXJ0VGltZTogbnVtYmVyXG4gIHZhbHVlOiBudW1iZXJcbiAgYXR0cmlidXRpb24/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfVxufSAmIChcbiAgfCB7XG4gICAgICBsYWJlbDogJ3dlYi12aXRhbCdcbiAgICAgIG5hbWU6ICh0eXBlb2YgV0VCX1ZJVEFMUylbbnVtYmVyXVxuICAgIH1cbiAgfCB7XG4gICAgICBsYWJlbDogJ2N1c3RvbSdcbiAgICAgIG5hbWU6XG4gICAgICAgIHwgJ05leHQuanMtaHlkcmF0aW9uJ1xuICAgICAgICB8ICdOZXh0LmpzLXJvdXRlLWNoYW5nZS10by1yZW5kZXInXG4gICAgICAgIHwgJ05leHQuanMtcmVuZGVyJ1xuICAgIH1cbilcblxuZXhwb3J0IHR5cGUgRW5oYW5jZXI8Qz4gPSAoQ29tcG9uZW50OiBDKSA9PiBDXG5cbmV4cG9ydCB0eXBlIENvbXBvbmVudHNFbmhhbmNlciA9XG4gIHwge1xuICAgICAgZW5oYW5jZUFwcD86IEVuaGFuY2VyPEFwcFR5cGU+XG4gICAgICBlbmhhbmNlQ29tcG9uZW50PzogRW5oYW5jZXI8TmV4dENvbXBvbmVudFR5cGU+XG4gICAgfVxuICB8IEVuaGFuY2VyPE5leHRDb21wb25lbnRUeXBlPlxuXG5leHBvcnQgdHlwZSBSZW5kZXJQYWdlUmVzdWx0ID0ge1xuICBodG1sOiBzdHJpbmdcbiAgaGVhZD86IEFycmF5PEpTWC5FbGVtZW50IHwgbnVsbD5cbn1cblxuZXhwb3J0IHR5cGUgUmVuZGVyUGFnZSA9IChcbiAgb3B0aW9ucz86IENvbXBvbmVudHNFbmhhbmNlclxuKSA9PiBEb2N1bWVudEluaXRpYWxQcm9wcyB8IFByb21pc2U8RG9jdW1lbnRJbml0aWFsUHJvcHM+XG5cbmV4cG9ydCB0eXBlIEJhc2VDb250ZXh0ID0ge1xuICByZXM/OiBTZXJ2ZXJSZXNwb25zZVxuICBbazogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCB0eXBlIE5FWFRfREFUQSA9IHtcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgcGFnZTogc3RyaW5nXG4gIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeVxuICBidWlsZElkOiBzdHJpbmdcbiAgYXNzZXRQcmVmaXg/OiBzdHJpbmdcbiAgcnVudGltZUNvbmZpZz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgbmV4dEV4cG9ydD86IGJvb2xlYW5cbiAgYXV0b0V4cG9ydD86IGJvb2xlYW5cbiAgaXNGYWxsYmFjaz86IGJvb2xlYW5cbiAgaXNFeHBlcmltZW50YWxDb21waWxlPzogYm9vbGVhblxuICBkeW5hbWljSWRzPzogKHN0cmluZyB8IG51bWJlcilbXVxuICBlcnI/OiBFcnJvciAmIHtcbiAgICBzdGF0dXNDb2RlPzogbnVtYmVyXG4gICAgc291cmNlPzogdHlwZW9mIENPTVBJTEVSX05BTUVTLnNlcnZlciB8IHR5cGVvZiBDT01QSUxFUl9OQU1FUy5lZGdlU2VydmVyXG4gIH1cbiAgZ3NwPzogYm9vbGVhblxuICBnc3NwPzogYm9vbGVhblxuICBjdXN0b21TZXJ2ZXI/OiBib29sZWFuXG4gIGdpcD86IGJvb2xlYW5cbiAgYXBwR2lwPzogYm9vbGVhblxuICBsb2NhbGU/OiBzdHJpbmdcbiAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdXG4gIGRlZmF1bHRMb2NhbGU/OiBzdHJpbmdcbiAgZG9tYWluTG9jYWxlcz86IHJlYWRvbmx5IERvbWFpbkxvY2FsZVtdXG4gIHNjcmlwdExvYWRlcj86IGFueVtdXG4gIGlzUHJldmlldz86IGJvb2xlYW5cbiAgbm90Rm91bmRTcmNQYWdlPzogc3RyaW5nXG59XG5cbi8qKlxuICogYE5leHRgIGNvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0UGFnZUNvbnRleHQge1xuICAvKipcbiAgICogRXJyb3Igb2JqZWN0IGlmIGVuY291bnRlcmVkIGR1cmluZyByZW5kZXJpbmdcbiAgICovXG4gIGVycj86IChFcnJvciAmIHsgc3RhdHVzQ29kZT86IG51bWJlciB9KSB8IG51bGxcbiAgLyoqXG4gICAqIGBIVFRQYCByZXF1ZXN0IG9iamVjdC5cbiAgICovXG4gIHJlcT86IEluY29taW5nTWVzc2FnZVxuICAvKipcbiAgICogYEhUVFBgIHJlc3BvbnNlIG9iamVjdC5cbiAgICovXG4gIHJlcz86IFNlcnZlclJlc3BvbnNlXG4gIC8qKlxuICAgKiBQYXRoIHNlY3Rpb24gb2YgYFVSTGAuXG4gICAqL1xuICBwYXRobmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBRdWVyeSBzdHJpbmcgc2VjdGlvbiBvZiBgVVJMYCBwYXJzZWQgYXMgYW4gb2JqZWN0LlxuICAgKi9cbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIC8qKlxuICAgKiBgU3RyaW5nYCBvZiB0aGUgYWN0dWFsIHBhdGggaW5jbHVkaW5nIHF1ZXJ5LlxuICAgKi9cbiAgYXNQYXRoPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBsb2NhbGVcbiAgICovXG4gIGxvY2FsZT86IHN0cmluZ1xuICAvKipcbiAgICogQWxsIGNvbmZpZ3VyZWQgbG9jYWxlc1xuICAgKi9cbiAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJlZCBkZWZhdWx0IGxvY2FsZVxuICAgKi9cbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuICAvKipcbiAgICogYENvbXBvbmVudGAgdGhlIHRyZWUgb2YgdGhlIEFwcCB0byB1c2UgaWYgbmVlZGluZyB0byByZW5kZXIgc2VwYXJhdGVseVxuICAgKi9cbiAgQXBwVHJlZTogQXBwVHJlZVR5cGVcbn1cblxuZXhwb3J0IHR5cGUgQXBwQ29udGV4dFR5cGU8Um91dGVyIGV4dGVuZHMgTmV4dFJvdXRlciA9IE5leHRSb3V0ZXI+ID0ge1xuICBDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPE5leHRQYWdlQ29udGV4dD5cbiAgQXBwVHJlZTogQXBwVHJlZVR5cGVcbiAgY3R4OiBOZXh0UGFnZUNvbnRleHRcbiAgcm91dGVyOiBSb3V0ZXJcbn1cblxuZXhwb3J0IHR5cGUgQXBwSW5pdGlhbFByb3BzPFBhZ2VQcm9wcyA9IGFueT4gPSB7XG4gIHBhZ2VQcm9wczogUGFnZVByb3BzXG59XG5cbmV4cG9ydCB0eXBlIEFwcFByb3BzVHlwZTxcbiAgUm91dGVyIGV4dGVuZHMgTmV4dFJvdXRlciA9IE5leHRSb3V0ZXIsXG4gIFBhZ2VQcm9wcyA9IHt9LFxuPiA9IEFwcEluaXRpYWxQcm9wczxQYWdlUHJvcHM+ICYge1xuICBDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPE5leHRQYWdlQ29udGV4dCwgYW55LCBhbnk+XG4gIHJvdXRlcjogUm91dGVyXG4gIF9fTl9TU0c/OiBib29sZWFuXG4gIF9fTl9TU1A/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50Q29udGV4dCA9IE5leHRQYWdlQ29udGV4dCAmIHtcbiAgcmVuZGVyUGFnZTogUmVuZGVyUGFnZVxuICBkZWZhdWx0R2V0SW5pdGlhbFByb3BzKFxuICAgIGN0eDogRG9jdW1lbnRDb250ZXh0LFxuICAgIG9wdGlvbnM/OiB7IG5vbmNlPzogc3RyaW5nIH1cbiAgKTogUHJvbWlzZTxEb2N1bWVudEluaXRpYWxQcm9wcz5cbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRJbml0aWFsUHJvcHMgPSBSZW5kZXJQYWdlUmVzdWx0ICYge1xuICBzdHlsZXM/OiBSZWFjdC5SZWFjdEVsZW1lbnRbXSB8IEl0ZXJhYmxlPFJlYWN0LlJlYWN0Tm9kZT4gfCBKU1guRWxlbWVudFxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudFByb3BzID0gRG9jdW1lbnRJbml0aWFsUHJvcHMgJiBIdG1sUHJvcHNcblxuLyoqXG4gKiBOZXh0IGBBUElgIHJvdXRlIHJlcXVlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0QXBpUmVxdWVzdCBleHRlbmRzIEluY29taW5nTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgYHF1ZXJ5YCB2YWx1ZXMgZnJvbSB1cmxcbiAgICovXG4gIHF1ZXJ5OiBQYXJ0aWFsPHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXVxuICB9PlxuICAvKipcbiAgICogT2JqZWN0IG9mIGBjb29raWVzYCBmcm9tIGhlYWRlclxuICAgKi9cbiAgY29va2llczogUGFydGlhbDx7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nXG4gIH0+XG5cbiAgYm9keTogYW55XG5cbiAgZW52OiBFbnZcblxuICBkcmFmdE1vZGU/OiBib29sZWFuXG5cbiAgcHJldmlldz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFByZXZpZXcgZGF0YSBzZXQgb24gdGhlIHJlcXVlc3QsIGlmIGFueVxuICAgKiAqL1xuICBwcmV2aWV3RGF0YT86IFByZXZpZXdEYXRhXG59XG5cbi8qKlxuICogU2VuZCBib2R5IG9mIHJlc3BvbnNlXG4gKi9cbnR5cGUgU2VuZDxUPiA9IChib2R5OiBUKSA9PiB2b2lkXG5cbi8qKlxuICogTmV4dCBgQVBJYCByb3V0ZSByZXNwb25zZVxuICovXG5leHBvcnQgdHlwZSBOZXh0QXBpUmVzcG9uc2U8RGF0YSA9IGFueT4gPSBTZXJ2ZXJSZXNwb25zZSAmIHtcbiAgLyoqXG4gICAqIFNlbmQgZGF0YSBgYW55YCBkYXRhIGluIHJlc3BvbnNlXG4gICAqL1xuICBzZW5kOiBTZW5kPERhdGE+XG4gIC8qKlxuICAgKiBTZW5kIGRhdGEgYGpzb25gIGRhdGEgaW4gcmVzcG9uc2VcbiAgICovXG4gIGpzb246IFNlbmQ8RGF0YT5cbiAgc3RhdHVzOiAoc3RhdHVzQ29kZTogbnVtYmVyKSA9PiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cbiAgcmVkaXJlY3QodXJsOiBzdHJpbmcpOiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cbiAgcmVkaXJlY3Qoc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKTogTmV4dEFwaVJlc3BvbnNlPERhdGE+XG5cbiAgLyoqXG4gICAqIFNldCBkcmFmdCBtb2RlXG4gICAqL1xuICBzZXREcmFmdE1vZGU6IChvcHRpb25zOiB7IGVuYWJsZTogYm9vbGVhbiB9KSA9PiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cblxuICAvKipcbiAgICogU2V0IHByZXZpZXcgZGF0YSBmb3IgTmV4dC5qcycgcHJlcmVuZGVyIG1vZGVcbiAgICovXG4gIHNldFByZXZpZXdEYXRhOiAoXG4gICAgZGF0YTogb2JqZWN0IHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIChpbiBzZWNvbmRzKSBmb3IgdGhlIHByZXZpZXcgc2Vzc2lvbiB0byBsYXN0IGZvci5cbiAgICAgICAqIFRoZSBnaXZlbiBudW1iZXIgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBieSByb3VuZGluZyBkb3duLlxuICAgICAgICogQnkgZGVmYXVsdCwgbm8gbWF4aW11bSBhZ2UgaXMgc2V0IGFuZCB0aGUgcHJldmlldyBzZXNzaW9uIGZpbmlzaGVzXG4gICAgICAgKiB3aGVuIHRoZSBjbGllbnQgc2h1dHMgZG93biAoYnJvd3NlciBpcyBjbG9zZWQpLlxuICAgICAgICovXG4gICAgICBtYXhBZ2U/OiBudW1iZXJcbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHRoZSBwYXRoIGZvciB0aGUgcHJldmlldyBzZXNzaW9uIHRvIHdvcmsgdW5kZXIuIEJ5IGRlZmF1bHQsXG4gICAgICAgKiB0aGUgcGF0aCBpcyBjb25zaWRlcmVkIHRoZSBcImRlZmF1bHQgcGF0aFwiLCBpLmUuLCBhbnkgcGFnZXMgdW5kZXIgXCIvXCIuXG4gICAgICAgKi9cbiAgICAgIHBhdGg/OiBzdHJpbmdcbiAgICB9XG4gICkgPT4gTmV4dEFwaVJlc3BvbnNlPERhdGE+XG5cbiAgLyoqXG4gICAqIENsZWFyIHByZXZpZXcgZGF0YSBmb3IgTmV4dC5qcycgcHJlcmVuZGVyIG1vZGVcbiAgICovXG4gIGNsZWFyUHJldmlld0RhdGE6IChvcHRpb25zPzogeyBwYXRoPzogc3RyaW5nIH0pID0+IE5leHRBcGlSZXNwb25zZTxEYXRhPlxuXG4gIC8qKlxuICAgKiBSZXZhbGlkYXRlIGEgc3BlY2lmaWMgcGFnZSBhbmQgcmVnZW5lcmF0ZSBpdCB1c2luZyBPbi1EZW1hbmQgSW5jcmVtZW50YWxcbiAgICogU3RhdGljIFJlZ2VuZXJhdGlvbi5cbiAgICogVGhlIHBhdGggc2hvdWxkIGJlIGFuIGFjdHVhbCBwYXRoLCBub3QgYSByZXdyaXR0ZW4gcGF0aC4gRS5nLiBmb3JcbiAgICogXCIvYmxvZy9bc2x1Z11cIiB0aGlzIHNob3VsZCBiZSBcIi9ibG9nL3Bvc3QtMVwiLlxuICAgKiBAbGluayBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL2luY3JlbWVudGFsLXN0YXRpYy1yZWdlbmVyYXRpb24jb24tZGVtYW5kLXJldmFsaWRhdGlvbi13aXRoLXJldmFsaWRhdGVwYXRoXG4gICAqL1xuICByZXZhbGlkYXRlOiAoXG4gICAgdXJsUGF0aDogc3RyaW5nLFxuICAgIG9wdHM/OiB7XG4gICAgICB1bnN0YWJsZV9vbmx5R2VuZXJhdGVkPzogYm9vbGVhblxuICAgIH1cbiAgKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5cbi8qKlxuICogTmV4dCBgQVBJYCByb3V0ZSBoYW5kbGVyXG4gKi9cbmV4cG9ydCB0eXBlIE5leHRBcGlIYW5kbGVyPFQgPSBhbnk+ID0gKFxuICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICByZXM6IE5leHRBcGlSZXNwb25zZTxUPlxuKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPlxuXG4vKipcbiAqIFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjT25jZTxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBSZXR1cm5UeXBlPFQ+PihcbiAgZm46IFRcbik6IFQge1xuICBsZXQgdXNlZCA9IGZhbHNlXG4gIGxldCByZXN1bHQ6IFJldHVyblR5cGU8VD5cblxuICByZXR1cm4gKCguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIGlmICghdXNlZCkge1xuICAgICAgdXNlZCA9IHRydWVcbiAgICAgIHJlc3VsdCA9IGZuKC4uLmFyZ3MpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfSkgYXMgVFxufVxuXG4vLyBTY2hlbWU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xXG4vLyBBYnNvbHV0ZSBVUkw6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4zXG5jb25zdCBBQlNPTFVURV9VUkxfUkVHRVggPSAvXlthLXpBLVpdW2EtekEtWlxcZCtcXC0uXSo/Oi9cbmV4cG9ydCBjb25zdCBpc0Fic29sdXRlVXJsID0gKHVybDogc3RyaW5nKSA9PiBBQlNPTFVURV9VUkxfUkVHRVgudGVzdCh1cmwpXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhdGlvbk9yaWdpbigpIHtcbiAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IHdpbmRvdy5sb2NhdGlvblxuICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydCA/ICc6JyArIHBvcnQgOiAnJ31gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVUkwoKSB7XG4gIGNvbnN0IHsgaHJlZiB9ID0gd2luZG93LmxvY2F0aW9uXG4gIGNvbnN0IG9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgcmV0dXJuIGhyZWYuc3Vic3RyaW5nKG9yaWdpbi5sZW5ndGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZTxQPihDb21wb25lbnQ6IENvbXBvbmVudFR5cGU8UD4pIHtcbiAgcmV0dXJuIHR5cGVvZiBDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gICAgPyBDb21wb25lbnRcbiAgICA6IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnVW5rbm93bidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzU2VudChyZXM6IFNlcnZlclJlc3BvbnNlKSB7XG4gIHJldHVybiByZXMuZmluaXNoZWQgfHwgcmVzLmhlYWRlcnNTZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZXBlYXRlZFNsYXNoZXModXJsOiBzdHJpbmcpIHtcbiAgY29uc3QgdXJsUGFydHMgPSB1cmwuc3BsaXQoJz8nKVxuICBjb25zdCB1cmxOb1F1ZXJ5ID0gdXJsUGFydHNbMF1cblxuICByZXR1cm4gKFxuICAgIHVybE5vUXVlcnlcbiAgICAgIC8vIGZpcnN0IHdlIHJlcGxhY2UgYW55IG5vbi1lbmNvZGVkIGJhY2tzbGFzaGVzIHdpdGggZm9yd2FyZFxuICAgICAgLy8gdGhlbiBub3JtYWxpemUgcmVwZWF0ZWQgZm9yd2FyZCBzbGFzaGVzXG4gICAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgICAucmVwbGFjZSgvXFwvXFwvKy9nLCAnLycpICtcbiAgICAodXJsUGFydHNbMV0gPyBgPyR7dXJsUGFydHMuc2xpY2UoMSkuam9pbignPycpfWAgOiAnJylcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEdldEluaXRpYWxQcm9wczxcbiAgQyBleHRlbmRzIEJhc2VDb250ZXh0LFxuICBJUCA9IHt9LFxuICBQID0ge30sXG4+KEFwcDogTmV4dENvbXBvbmVudFR5cGU8QywgSVAsIFA+LCBjdHg6IEMpOiBQcm9taXNlPElQPiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKEFwcC5wcm90b3R5cGU/LmdldEluaXRpYWxQcm9wcykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBcIiR7Z2V0RGlzcGxheU5hbWUoXG4gICAgICAgIEFwcFxuICAgICAgKX0uZ2V0SW5pdGlhbFByb3BzKClcIiBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAtIHZpc2l0IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2dldC1pbml0aWFsLXByb3BzLWFzLWFuLWluc3RhbmNlLW1ldGhvZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSlcbiAgICB9XG4gIH1cbiAgLy8gd2hlbiBjYWxsZWQgZnJvbSBfYXBwIGBjdHhgIGlzIG5lc3RlZCBpbiBgY3R4YFxuICBjb25zdCByZXMgPSBjdHgucmVzIHx8IChjdHguY3R4ICYmIGN0eC5jdHgucmVzKVxuXG4gIGlmICghQXBwLmdldEluaXRpYWxQcm9wcykge1xuICAgIGlmIChjdHguY3R4ICYmIGN0eC5Db21wb25lbnQpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgcGFnZVByb3BzIGRlZmF1bHRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VQcm9wczogYXdhaXQgbG9hZEdldEluaXRpYWxQcm9wcyhjdHguQ29tcG9uZW50LCBjdHguY3R4KSxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9IGFzIElQXG4gIH1cblxuICBjb25zdCBwcm9wcyA9IGF3YWl0IEFwcC5nZXRJbml0aWFsUHJvcHMoY3R4KVxuXG4gIGlmIChyZXMgJiYgaXNSZXNTZW50KHJlcykpIHtcbiAgICByZXR1cm4gcHJvcHNcbiAgfVxuXG4gIGlmICghcHJvcHMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYFwiJHtnZXREaXNwbGF5TmFtZShcbiAgICAgIEFwcFxuICAgICl9LmdldEluaXRpYWxQcm9wcygpXCIgc2hvdWxkIHJlc29sdmUgdG8gYW4gb2JqZWN0LiBCdXQgZm91bmQgXCIke3Byb3BzfVwiIGluc3RlYWQuYFxuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMCAmJiAhY3R4LmN0eCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgJHtnZXREaXNwbGF5TmFtZShcbiAgICAgICAgICBBcHBcbiAgICAgICAgKX0gcmV0dXJuZWQgYW4gZW1wdHkgb2JqZWN0IGZyb20gXFxgZ2V0SW5pdGlhbFByb3BzXFxgLiBUaGlzIGRlLW9wdGltaXplcyBhbmQgcHJldmVudHMgYXV0b21hdGljIHN0YXRpYyBvcHRpbWl6YXRpb24uIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2VtcHR5LW9iamVjdC1nZXRJbml0aWFsUHJvcHNgXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb3BzXG59XG5cbmV4cG9ydCBjb25zdCBTUCA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCdcbmV4cG9ydCBjb25zdCBTVCA9XG4gIFNQICYmXG4gIChbJ21hcmsnLCAnbWVhc3VyZScsICdnZXRFbnRyaWVzQnlOYW1lJ10gYXMgY29uc3QpLmV2ZXJ5KFxuICAgIChtZXRob2QpID0+IHR5cGVvZiBwZXJmb3JtYW5jZVttZXRob2RdID09PSAnZnVuY3Rpb24nXG4gIClcblxuZXhwb3J0IGNsYXNzIERlY29kZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cbmV4cG9ydCBjbGFzcyBOb3JtYWxpemVFcnJvciBleHRlbmRzIEVycm9yIHt9XG5leHBvcnQgY2xhc3MgUGFnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmNvZGUgPSAnRU5PRU5UJ1xuICAgIHRoaXMubmFtZSA9ICdQYWdlTm90Rm91bmRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBgQ2Fubm90IGZpbmQgbW9kdWxlIGZvciBwYWdlOiAke3BhZ2V9YFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNaXNzaW5nU3RhdGljUGFnZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocGFnZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5tZXNzYWdlID0gYEZhaWxlZCB0byBsb2FkIHN0YXRpYyBmaWxlIGZvciBwYWdlOiAke3BhZ2V9ICR7bWVzc2FnZX1gXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb2RlOiBzdHJpbmdcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29kZSA9ICdFTk9FTlQnXG4gICAgdGhpcy5tZXNzYWdlID0gYENhbm5vdCBmaW5kIHRoZSBtaWRkbGV3YXJlIG1vZHVsZWBcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlRnMge1xuICBleGlzdHNTeW5jOiB0eXBlb2YgZnMuZXhpc3RzU3luY1xuICByZWFkRmlsZTogdHlwZW9mIGZzLnByb21pc2VzLnJlYWRGaWxlXG4gIHJlYWRGaWxlU3luYzogdHlwZW9mIGZzLnJlYWRGaWxlU3luY1xuICB3cml0ZUZpbGUoZjogc3RyaW5nLCBkOiBhbnkpOiBQcm9taXNlPHZvaWQ+XG4gIG1rZGlyKGRpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgc3RyaW5nPlxuICBzdGF0KGY6IHN0cmluZyk6IFByb21pc2U8eyBtdGltZTogRGF0ZSB9PlxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5RXJyb3IoZXJyb3I6IEVycm9yKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFjayB9KVxufVxuIl0sIm5hbWVzIjpbIkRlY29kZUVycm9yIiwiTWlkZGxld2FyZU5vdEZvdW5kRXJyb3IiLCJNaXNzaW5nU3RhdGljUGFnZSIsIk5vcm1hbGl6ZUVycm9yIiwiUGFnZU5vdEZvdW5kRXJyb3IiLCJTUCIsIlNUIiwiV0VCX1ZJVEFMUyIsImV4ZWNPbmNlIiwiZ2V0RGlzcGxheU5hbWUiLCJnZXRMb2NhdGlvbk9yaWdpbiIsImdldFVSTCIsImlzQWJzb2x1dGVVcmwiLCJpc1Jlc1NlbnQiLCJsb2FkR2V0SW5pdGlhbFByb3BzIiwibm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzIiwic3RyaW5naWZ5RXJyb3IiLCJmbiIsInVzZWQiLCJyZXN1bHQiLCJhcmdzIiwiQUJTT0xVVEVfVVJMX1JFR0VYIiwidXJsIiwidGVzdCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0Iiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwib3JpZ2luIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiLCJuYW1lIiwicmVzIiwiZmluaXNoZWQiLCJoZWFkZXJzU2VudCIsInVybFBhcnRzIiwic3BsaXQiLCJ1cmxOb1F1ZXJ5IiwicmVwbGFjZSIsInNsaWNlIiwiam9pbiIsIkFwcCIsImN0eCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInByb3RvdHlwZSIsImdldEluaXRpYWxQcm9wcyIsIm1lc3NhZ2UiLCJFcnJvciIsInBhZ2VQcm9wcyIsInByb3BzIiwiT2JqZWN0Iiwia2V5cyIsImNvbnNvbGUiLCJ3YXJuIiwicGVyZm9ybWFuY2UiLCJldmVyeSIsIm1ldGhvZCIsImNvbnN0cnVjdG9yIiwicGFnZSIsImNvZGUiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFjayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/utils/warn-once.js ***!
|
||
\**************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"warnOnce\", ({\n enumerable: true,\n get: function() {\n return warnOnce;\n }\n}));\nlet warnOnce = (_)=>{};\nif (true) {\n const warnings = new Set();\n warnOnce = (msg)=>{\n if (!warnings.has(msg)) {\n console.warn(msg);\n }\n warnings.add(msg);\n };\n} //# sourceMappingURL=warn-once.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs0Q0FXU0E7OztlQUFBQTs7O0FBWFQsSUFBSUEsV0FBVyxDQUFDQyxLQUFlO0FBQy9CLElBQUlDLElBQW9CLEVBQW1CO0lBQ3pDLE1BQU1HLFdBQVcsSUFBSUM7SUFDckJOLFdBQVcsQ0FBQ087UUFDVixJQUFJLENBQUNGLFNBQVNHLEdBQUcsQ0FBQ0QsTUFBTTtZQUN0QkUsUUFBUUMsSUFBSSxDQUFDSDtRQUNmO1FBQ0FGLFNBQVNNLEdBQUcsQ0FBQ0o7SUFDZjtBQUNGIiwic291cmNlcyI6WyJEOlxcc3JjXFxzaGFyZWRcXGxpYlxcdXRpbHNcXHdhcm4tb25jZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgd2Fybk9uY2UgPSAoXzogc3RyaW5nKSA9PiB7fVxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgY29uc3Qgd2FybmluZ3MgPSBuZXcgU2V0PHN0cmluZz4oKVxuICB3YXJuT25jZSA9IChtc2c6IHN0cmluZykgPT4ge1xuICAgIGlmICghd2FybmluZ3MuaGFzKG1zZykpIHtcbiAgICAgIGNvbnNvbGUud2Fybihtc2cpXG4gICAgfVxuICAgIHdhcm5pbmdzLmFkZChtc2cpXG4gIH1cbn1cblxuZXhwb3J0IHsgd2Fybk9uY2UgfVxuIl0sIm5hbWVzIjpbIndhcm5PbmNlIiwiXyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIndhcm5pbmdzIiwiU2V0IiwibXNnIiwiaGFzIiwiY29uc29sZSIsIndhcm4iLCJhZGQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/process/browser.js":
|
||
/*!*****************************************!*\
|
||
!*** ./node_modules/process/browser.js ***!
|
||
\*****************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xccHJvY2Vzc1xcYnJvd3Nlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/process/browser.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/react-dom/cjs/react-dom-client.development.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/react-dom/cjs/react-dom-client.development.js ***!
|
||
\********************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* provided dependency */ var process = __webpack_require__(/*! process */ \"(pages-dir-browser)/./node_modules/process/browser.js\");\n/**\n * @license React\n * react-dom-client.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\n true &&\n (function () {\n function findHook(fiber, id) {\n for (fiber = fiber.memoizedState; null !== fiber && 0 < id; )\n (fiber = fiber.next), id--;\n return fiber;\n }\n function copyWithSetImpl(obj, path, index, value) {\n if (index >= path.length) return value;\n var key = path[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);\n return updated;\n }\n function copyWithRename(obj, oldPath, newPath) {\n if (oldPath.length !== newPath.length)\n console.warn(\"copyWithRename() expects paths of the same length\");\n else {\n for (var i = 0; i < newPath.length - 1; i++)\n if (oldPath[i] !== newPath[i]) {\n console.warn(\n \"copyWithRename() expects paths to be the same except for the deepest key\"\n );\n return;\n }\n return copyWithRenameImpl(obj, oldPath, newPath, 0);\n }\n }\n function copyWithRenameImpl(obj, oldPath, newPath, index) {\n var oldKey = oldPath[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n index + 1 === oldPath.length\n ? ((updated[newPath[index]] = updated[oldKey]),\n isArrayImpl(updated)\n ? updated.splice(oldKey, 1)\n : delete updated[oldKey])\n : (updated[oldKey] = copyWithRenameImpl(\n obj[oldKey],\n oldPath,\n newPath,\n index + 1\n ));\n return updated;\n }\n function copyWithDeleteImpl(obj, path, index) {\n var key = path[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n if (index + 1 === path.length)\n return (\n isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key],\n updated\n );\n updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);\n return updated;\n }\n function shouldSuspendImpl() {\n return !1;\n }\n function shouldErrorImpl() {\n return null;\n }\n function warnForMissingKey() {}\n function warnInvalidHookAccess() {\n console.error(\n \"Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks\"\n );\n }\n function warnInvalidContextAccess() {\n console.error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n }\n function noop$2() {}\n function setToSortedString(set) {\n var array = [];\n set.forEach(function (value) {\n array.push(value);\n });\n return array.sort().join(\", \");\n }\n function createFiber(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n }\n function scheduleRoot(root, element) {\n root.context === emptyContextObject &&\n (updateContainerImpl(root.current, 2, element, root, null, null),\n flushSyncWork$1());\n }\n function scheduleRefresh(root, update) {\n if (null !== resolveFamily) {\n var staleFamilies = update.staleFamilies;\n update = update.updatedFamilies;\n flushPendingEffects();\n scheduleFibersWithFamiliesRecursively(\n root.current,\n update,\n staleFamilies\n );\n flushSyncWork$1();\n }\n }\n function setRefreshHandler(handler) {\n resolveFamily = handler;\n }\n function isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n }\n function getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 4098) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n }\n function getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n }\n function assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n function findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate)\n throw Error(\"Unable to find node on an unmounted component.\");\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, _child = parentA.child; _child; ) {\n if (_child === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (_child === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n _child = _child.sibling;\n }\n if (!didFindChild) {\n for (_child = parentB.child; _child; ) {\n if (_child === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (_child === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n _child = _child.sibling;\n }\n if (!didFindChild)\n throw Error(\n \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\"\n );\n }\n }\n if (a.alternate !== b)\n throw Error(\n \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n if (3 !== a.tag)\n throw Error(\"Unable to find node on an unmounted component.\");\n return a.stateNode.current === a ? fiber : alternate;\n }\n function findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function getComponentNameFromOwner(owner) {\n return \"number\" === typeof owner.tag\n ? getComponentNameFromFiber(owner)\n : \"string\" === typeof owner.name\n ? owner.name\n : null;\n }\n function getComponentNameFromFiber(fiber) {\n var type = fiber.type;\n switch (fiber.tag) {\n case 31:\n return \"Activity\";\n case 24:\n return \"Cache\";\n case 9:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case 10:\n return (type.displayName || \"Context\") + \".Provider\";\n case 18:\n return \"DehydratedFragment\";\n case 11:\n return (\n (fiber = type.render),\n (fiber = fiber.displayName || fiber.name || \"\"),\n type.displayName ||\n (\"\" !== fiber ? \"ForwardRef(\" + fiber + \")\" : \"ForwardRef\")\n );\n case 7:\n return \"Fragment\";\n case 26:\n case 27:\n case 5:\n return type;\n case 4:\n return \"Portal\";\n case 3:\n return \"Root\";\n case 6:\n return \"Text\";\n case 16:\n return getComponentNameFromType(type);\n case 8:\n return type === REACT_STRICT_MODE_TYPE ? \"StrictMode\" : \"Mode\";\n case 22:\n return \"Offscreen\";\n case 12:\n return \"Profiler\";\n case 21:\n return \"Scope\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 25:\n return \"TracingMarker\";\n case 1:\n case 0:\n case 14:\n case 15:\n if (\"function\" === typeof type)\n return type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n break;\n case 29:\n type = fiber._debugInfo;\n if (null != type)\n for (var i = type.length - 1; 0 <= i; i--)\n if (\"string\" === typeof type[i].name) return type[i].name;\n if (null !== fiber.return)\n return getComponentNameFromFiber(fiber.return);\n }\n return null;\n }\n function createCursor(defaultValue) {\n return { current: defaultValue };\n }\n function pop(cursor, fiber) {\n 0 > index$jscomp$0\n ? console.error(\"Unexpected pop.\")\n : (fiber !== fiberStack[index$jscomp$0] &&\n console.error(\"Unexpected Fiber popped.\"),\n (cursor.current = valueStack[index$jscomp$0]),\n (valueStack[index$jscomp$0] = null),\n (fiberStack[index$jscomp$0] = null),\n index$jscomp$0--);\n }\n function push(cursor, value, fiber) {\n index$jscomp$0++;\n valueStack[index$jscomp$0] = cursor.current;\n fiberStack[index$jscomp$0] = fiber;\n cursor.current = value;\n }\n function requiredContext(c) {\n null === c &&\n console.error(\n \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\"\n );\n return c;\n }\n function pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance, fiber);\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor, null, fiber);\n var nextRootContext = nextRootInstance.nodeType;\n switch (nextRootContext) {\n case 9:\n case 11:\n nextRootContext = 9 === nextRootContext ? \"#document\" : \"#fragment\";\n nextRootInstance = (nextRootInstance =\n nextRootInstance.documentElement)\n ? (nextRootInstance = nextRootInstance.namespaceURI)\n ? getOwnHostContext(nextRootInstance)\n : HostContextNamespaceNone\n : HostContextNamespaceNone;\n break;\n default:\n if (\n ((nextRootContext = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (nextRootInstance = getChildHostContextProd(\n nextRootInstance,\n nextRootContext\n ));\n else\n switch (nextRootContext) {\n case \"svg\":\n nextRootInstance = HostContextNamespaceSvg;\n break;\n case \"math\":\n nextRootInstance = HostContextNamespaceMath;\n break;\n default:\n nextRootInstance = HostContextNamespaceNone;\n }\n }\n nextRootContext = nextRootContext.toLowerCase();\n nextRootContext = updatedAncestorInfoDev(null, nextRootContext);\n nextRootContext = {\n context: nextRootInstance,\n ancestorInfo: nextRootContext\n };\n pop(contextStackCursor, fiber);\n push(contextStackCursor, nextRootContext, fiber);\n }\n function popHostContainer(fiber) {\n pop(contextStackCursor, fiber);\n pop(contextFiberStackCursor, fiber);\n pop(rootInstanceStackCursor, fiber);\n }\n function getHostContext() {\n return requiredContext(contextStackCursor.current);\n }\n function pushHostContext(fiber) {\n null !== fiber.memoizedState &&\n push(hostTransitionProviderCursor, fiber, fiber);\n var context = requiredContext(contextStackCursor.current);\n var type = fiber.type;\n var nextContext = getChildHostContextProd(context.context, type);\n type = updatedAncestorInfoDev(context.ancestorInfo, type);\n nextContext = { context: nextContext, ancestorInfo: type };\n context !== nextContext &&\n (push(contextFiberStackCursor, fiber, fiber),\n push(contextStackCursor, nextContext, fiber));\n }\n function popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor, fiber),\n (HostTransitionContext._currentValue = NotPendingTransition));\n }\n function typeName(value) {\n return (\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\"\n );\n }\n function willCoercionThrow(value) {\n try {\n return testStringCoercion(value), !1;\n } catch (e) {\n return !0;\n }\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkAttributeStringCoercion(value, attributeName) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.\",\n attributeName,\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function checkCSSPropertyStringCoercion(value, propName) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.\",\n propName,\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function checkFormFieldValueStringCoercion(value) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.\",\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function injectInternals(internals) {\n if (\"undefined\" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (hook.isDisabled) return !0;\n if (!hook.supportsFiber)\n return (\n console.error(\n \"The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools\"\n ),\n !0\n );\n try {\n (rendererID = hook.inject(internals)), (injectedHook = hook);\n } catch (err) {\n console.error(\"React instrumentation encountered an error: %s.\", err);\n }\n return hook.checkDCE ? !0 : !1;\n }\n function setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 &&\n unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n }\n function injectProfilingHooks(profilingHooks) {\n injectedProfilingHooks = profilingHooks;\n }\n function markCommitStopped() {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markCommitStopped &&\n injectedProfilingHooks.markCommitStopped();\n }\n function markComponentRenderStarted(fiber) {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentRenderStarted &&\n injectedProfilingHooks.markComponentRenderStarted(fiber);\n }\n function markComponentRenderStopped() {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentRenderStopped &&\n injectedProfilingHooks.markComponentRenderStopped();\n }\n function markRenderStarted(lanes) {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderStarted &&\n injectedProfilingHooks.markRenderStarted(lanes);\n }\n function markRenderStopped() {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderStopped &&\n injectedProfilingHooks.markRenderStopped();\n }\n function markStateUpdateScheduled(fiber, lane) {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markStateUpdateScheduled &&\n injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);\n }\n function clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n }\n function getLabelForLane(lane) {\n if (lane & 1) return \"SyncHydrationLane\";\n if (lane & 2) return \"Sync\";\n if (lane & 4) return \"InputContinuousHydration\";\n if (lane & 8) return \"InputContinuous\";\n if (lane & 16) return \"DefaultHydration\";\n if (lane & 32) return \"Default\";\n if (lane & 128) return \"TransitionHydration\";\n if (lane & 4194048) return \"Transition\";\n if (lane & 62914560) return \"Retry\";\n if (lane & 67108864) return \"SelectiveHydration\";\n if (lane & 134217728) return \"IdleHydration\";\n if (lane & 268435456) return \"Idle\";\n if (lane & 536870912) return \"Offscreen\";\n if (lane & 1073741824) return \"Deferred\";\n }\n function getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 4194048;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return (\n console.error(\n \"Should have found matching lanes. This is a bug in React.\"\n ),\n lanes\n );\n }\n }\n function getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes =\n getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n }\n function checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n }\n function computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return (\n console.error(\n \"Should have found matching lanes. This is a bug in React.\"\n ),\n -1\n );\n }\n }\n function claimNextTransitionLane() {\n var lane = nextTransitionLane;\n nextTransitionLane <<= 1;\n 0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);\n return lane;\n }\n function claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n }\n function createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n }\n function markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0),\n (root.pingedLanes = 0),\n (root.warmLanes = 0));\n }\n function markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n ) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index = 31 - clz32(remainingLanes),\n lane = 1 << index;\n entanglements[index] = 0;\n expirationTimes[index] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index] = null, index = 0;\n index < hiddenUpdatesForLane.length;\n index++\n ) {\n var update = hiddenUpdatesForLane[index];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n }\n function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 4194090);\n }\n function markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index = 31 - clz32(rootEntangledLanes),\n lane = 1 << index;\n (lane & entangledLanes) | (root[index] & entangledLanes) &&\n (root[index] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n }\n function getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n }\n function addFiberToLanesMap(root, fiber, lanes) {\n if (isDevToolsPresent)\n for (root = root.pendingUpdatersLaneMap; 0 < lanes; ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index;\n root[index].add(fiber);\n lanes &= ~lane;\n }\n }\n function movePendingFibersToMemoized(root, lanes) {\n if (isDevToolsPresent)\n for (\n var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap,\n memoizedUpdaters = root.memoizedUpdaters;\n 0 < lanes;\n\n ) {\n var index = 31 - clz32(lanes);\n root = 1 << index;\n index = pendingUpdatersLaneMap[index];\n 0 < index.size &&\n (index.forEach(function (fiber) {\n var alternate = fiber.alternate;\n (null !== alternate && memoizedUpdaters.has(alternate)) ||\n memoizedUpdaters.add(fiber);\n }),\n index.clear());\n lanes &= ~root;\n }\n }\n function lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes\n ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes\n ? 0 !== (lanes & 134217727)\n ? DefaultEventPriority\n : IdleEventPriority\n : ContinuousEventPriority\n : DiscreteEventPriority;\n }\n function resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority\n ? DefaultEventPriority\n : getEventPriority(updatePriority.type);\n }\n function runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n }\n function detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n }\n function getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n if (targetInst) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentSuspenseInstance(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey]))\n return parentNode;\n targetNode = getParentSuspenseInstance(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n }\n function getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n }\n function getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag)\n return inst.stateNode;\n throw Error(\"getNodeFromInstance: Invalid argument.\");\n }\n function getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n }\n function markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n }\n function registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n }\n function registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] &&\n console.error(\n \"EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.\",\n registrationName\n );\n registrationNameDependencies[registrationName] = dependencies;\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n \"onDoubleClick\" === registrationName &&\n (possibleRegistrationNames.ondblclick = registrationName);\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n }\n function checkControlledValueProps(tagName, props) {\n hasReadOnlyValue[props.type] ||\n props.onChange ||\n props.onInput ||\n props.readOnly ||\n props.disabled ||\n null == props.value ||\n (\"select\" === tagName\n ? console.error(\n \"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`.\"\n )\n : console.error(\n \"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.\"\n ));\n props.onChange ||\n props.readOnly ||\n props.disabled ||\n null == props.checked ||\n console.error(\n \"You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.\"\n );\n }\n function isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))\n return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n console.error(\"Invalid attribute name: `%s`\", attributeName);\n return !1;\n }\n function getValueForAttributeOnCustomComponent(node, name, expected) {\n if (isAttributeNameSafe(name)) {\n if (!node.hasAttribute(name)) {\n switch (typeof expected) {\n case \"symbol\":\n case \"object\":\n return expected;\n case \"function\":\n return expected;\n case \"boolean\":\n if (!1 === expected) return expected;\n }\n return void 0 === expected ? void 0 : null;\n }\n node = node.getAttribute(name);\n if (\"\" === node && !0 === expected) return !0;\n checkAttributeStringCoercion(expected, name);\n return node === \"\" + expected ? expected : node;\n }\n }\n function setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix && \"aria-\" !== prefix) {\n node.removeAttribute(name);\n return;\n }\n }\n checkAttributeStringCoercion(value, name);\n node.setAttribute(name, \"\" + value);\n }\n }\n function setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n checkAttributeStringCoercion(value, name);\n node.setAttribute(name, \"\" + value);\n }\n }\n function setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n checkAttributeStringCoercion(value, name);\n node.setAttributeNS(namespace, name, \"\" + value);\n }\n }\n function disabledLog() {}\n function disableLogs() {\n if (0 === disabledDepth) {\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd;\n var props = {\n configurable: !0,\n enumerable: !0,\n value: disabledLog,\n writable: !0\n };\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n }\n disabledDepth++;\n }\n function reenableLogs() {\n disabledDepth--;\n if (0 === disabledDepth) {\n var props = { configurable: !0, enumerable: !0, writable: !0 };\n Object.defineProperties(console, {\n log: assign({}, props, { value: prevLog }),\n info: assign({}, props, { value: prevInfo }),\n warn: assign({}, props, { value: prevWarn }),\n error: assign({}, props, { value: prevError }),\n group: assign({}, props, { value: prevGroup }),\n groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),\n groupEnd: assign({}, props, { value: prevGroupEnd })\n });\n }\n 0 > disabledDepth &&\n console.error(\n \"disabledDepth fell below zero. This is a bug in React. Please file an issue.\"\n );\n }\n function describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n }\n function describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n var frame = componentFrameCache.get(fn);\n if (void 0 !== frame) return frame;\n reentry = !0;\n frame = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var previousDispatcher = null;\n previousDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = null;\n disableLogs();\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$0) {\n control = x$0;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$1) {\n control = x$1;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter =\n RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n _RunInRootFrame$Deter = namePropDescriptor = 0;\n namePropDescriptor < sampleLines.length &&\n !sampleLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n for (\n ;\n _RunInRootFrame$Deter < controlLines.length &&\n !controlLines[_RunInRootFrame$Deter].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n _RunInRootFrame$Deter++;\n if (\n namePropDescriptor === sampleLines.length ||\n _RunInRootFrame$Deter === controlLines.length\n )\n for (\n namePropDescriptor = sampleLines.length - 1,\n _RunInRootFrame$Deter = controlLines.length - 1;\n 1 <= namePropDescriptor &&\n 0 <= _RunInRootFrame$Deter &&\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter];\n\n )\n _RunInRootFrame$Deter--;\n for (\n ;\n 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;\n namePropDescriptor--, _RunInRootFrame$Deter--\n )\n if (\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter]\n ) {\n if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {\n do\n if (\n (namePropDescriptor--,\n _RunInRootFrame$Deter--,\n 0 > _RunInRootFrame$Deter ||\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter])\n ) {\n var _frame =\n \"\\n\" +\n sampleLines[namePropDescriptor].replace(\n \" at new \",\n \" at \"\n );\n fn.displayName &&\n _frame.includes(\"<anonymous>\") &&\n (_frame = _frame.replace(\"<anonymous>\", fn.displayName));\n \"function\" === typeof fn &&\n componentFrameCache.set(fn, _frame);\n return _frame;\n }\n while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);\n }\n break;\n }\n }\n } finally {\n (reentry = !1),\n (ReactSharedInternals.H = previousDispatcher),\n reenableLogs(),\n (Error.prepareStackTrace = frame);\n }\n sampleLines = (sampleLines = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(sampleLines)\n : \"\";\n \"function\" === typeof fn && componentFrameCache.set(fn, sampleLines);\n return sampleLines;\n }\n function formatOwnerStack(error) {\n var prevPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n error = error.stack;\n Error.prepareStackTrace = prevPrepareStackTrace;\n error.startsWith(\"Error: react-stack-top-frame\\n\") &&\n (error = error.slice(29));\n prevPrepareStackTrace = error.indexOf(\"\\n\");\n -1 !== prevPrepareStackTrace &&\n (error = error.slice(prevPrepareStackTrace + 1));\n prevPrepareStackTrace = error.indexOf(\"react-stack-bottom-frame\");\n -1 !== prevPrepareStackTrace &&\n (prevPrepareStackTrace = error.lastIndexOf(\n \"\\n\",\n prevPrepareStackTrace\n ));\n if (-1 !== prevPrepareStackTrace)\n error = error.slice(0, prevPrepareStackTrace);\n else return \"\";\n return error;\n }\n function describeFiber(fiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n default:\n return \"\";\n }\n }\n function getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\";\n do {\n info += describeFiber(workInProgress);\n var debugInfo = workInProgress._debugInfo;\n if (debugInfo)\n for (var i = debugInfo.length - 1; 0 <= i; i--) {\n var entry = debugInfo[i];\n if (\"string\" === typeof entry.name) {\n var JSCompiler_temp_const = info,\n env = entry.env;\n var JSCompiler_inline_result = describeBuiltInComponentFrame(\n entry.name + (env ? \" [\" + env + \"]\" : \"\")\n );\n info = JSCompiler_temp_const + JSCompiler_inline_result;\n }\n }\n workInProgress = workInProgress.return;\n } while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n }\n function describeFunctionComponentFrameWithoutLineNumber(fn) {\n return (fn = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(fn)\n : \"\";\n }\n function getCurrentFiberOwnerNameInDevOrNull() {\n if (null === current) return null;\n var owner = current._debugOwner;\n return null != owner ? getComponentNameFromOwner(owner) : null;\n }\n function getCurrentFiberStackInDev() {\n if (null === current) return \"\";\n var workInProgress = current;\n try {\n var info = \"\";\n 6 === workInProgress.tag && (workInProgress = workInProgress.return);\n switch (workInProgress.tag) {\n case 26:\n case 27:\n case 5:\n info += describeBuiltInComponentFrame(workInProgress.type);\n break;\n case 13:\n info += describeBuiltInComponentFrame(\"Suspense\");\n break;\n case 19:\n info += describeBuiltInComponentFrame(\"SuspenseList\");\n break;\n case 31:\n info += describeBuiltInComponentFrame(\"Activity\");\n break;\n case 30:\n case 0:\n case 15:\n case 1:\n workInProgress._debugOwner ||\n \"\" !== info ||\n (info += describeFunctionComponentFrameWithoutLineNumber(\n workInProgress.type\n ));\n break;\n case 11:\n workInProgress._debugOwner ||\n \"\" !== info ||\n (info += describeFunctionComponentFrameWithoutLineNumber(\n workInProgress.type.render\n ));\n }\n for (; workInProgress; )\n if (\"number\" === typeof workInProgress.tag) {\n var fiber = workInProgress;\n workInProgress = fiber._debugOwner;\n var debugStack = fiber._debugStack;\n workInProgress &&\n debugStack &&\n (\"string\" !== typeof debugStack &&\n (fiber._debugStack = debugStack = formatOwnerStack(debugStack)),\n \"\" !== debugStack && (info += \"\\n\" + debugStack));\n } else if (null != workInProgress.debugStack) {\n var ownerStack = workInProgress.debugStack;\n (workInProgress = workInProgress.owner) &&\n ownerStack &&\n (info += \"\\n\" + formatOwnerStack(ownerStack));\n } else break;\n var JSCompiler_inline_result = info;\n } catch (x) {\n JSCompiler_inline_result =\n \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n return JSCompiler_inline_result;\n }\n function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) {\n var previousFiber = current;\n setCurrentFiber(fiber);\n try {\n return null !== fiber && fiber._debugTask\n ? fiber._debugTask.run(\n callback.bind(null, arg0, arg1, arg2, arg3, arg4)\n )\n : callback(arg0, arg1, arg2, arg3, arg4);\n } finally {\n setCurrentFiber(previousFiber);\n }\n throw Error(\n \"runWithFiberInDEV should never be called in production. This is a bug in React.\"\n );\n }\n function setCurrentFiber(fiber) {\n ReactSharedInternals.getCurrentStack =\n null === fiber ? null : getCurrentFiberStackInDev;\n isRendering = !1;\n current = fiber;\n }\n function getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return checkFormFieldValueStringCoercion(value), value;\n default:\n return \"\";\n }\n }\n function isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n }\n function trackValueOnNode(node) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\",\n descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n checkFormFieldValueStringCoercion(node[valueField]);\n var currentValue = \"\" + node[valueField];\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n checkFormFieldValueStringCoercion(value);\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n checkFormFieldValueStringCoercion(value);\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n }\n function track(node) {\n node._valueTracker || (node._valueTracker = trackValueOnNode(node));\n }\n function updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n }\n function getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n }\n function escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n }\n function validateInputProps(element, props) {\n void 0 === props.checked ||\n void 0 === props.defaultChecked ||\n didWarnCheckedDefaultChecked ||\n (console.error(\n \"%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\",\n props.type\n ),\n (didWarnCheckedDefaultChecked = !0));\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValueDefaultValue$1 ||\n (console.error(\n \"%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\",\n props.type\n ),\n (didWarnValueDefaultValue$1 = !0));\n }\n function updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n ) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (checkAttributeStringCoercion(type, \"type\"), (element.type = type))\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) ||\n element.removeAttribute(\"value\");\n null != value\n ? setDefaultValue(element, type, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, type, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked &&\n \"function\" !== typeof checked &&\n \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (checkAttributeStringCoercion(name, \"name\"),\n (element.name = \"\" + getToStringValue(name)))\n : element.removeAttribute(\"name\");\n }\n function initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n ) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (checkAttributeStringCoercion(type, \"type\"), (element.type = type));\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n )\n return;\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked &&\n \"symbol\" !== typeof checked &&\n !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (checkAttributeStringCoercion(name, \"name\"), (element.name = name));\n }\n function setDefaultValue(node, type, value) {\n (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n node.defaultValue === \"\" + value ||\n (node.defaultValue = \"\" + value);\n }\n function validateOptionProps(element, props) {\n null == props.value &&\n (\"object\" === typeof props.children && null !== props.children\n ? React.Children.forEach(props.children, function (child) {\n null == child ||\n \"string\" === typeof child ||\n \"number\" === typeof child ||\n \"bigint\" === typeof child ||\n didWarnInvalidChild ||\n ((didWarnInvalidChild = !0),\n console.error(\n \"Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>.\"\n ));\n })\n : null == props.dangerouslySetInnerHTML ||\n didWarnInvalidInnerHTML ||\n ((didWarnInvalidInnerHTML = !0),\n console.error(\n \"Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.\"\n )));\n null == props.selected ||\n didWarnSelectedSetOnOption ||\n (console.error(\n \"Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>.\"\n ),\n (didWarnSelectedSetOnOption = !0));\n }\n function getDeclarationErrorAddendum() {\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n return ownerName\n ? \"\\n\\nCheck the render method of `\" + ownerName + \"`.\"\n : \"\";\n }\n function updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n }\n function validateSelectProps(element, props) {\n for (element = 0; element < valuePropNames.length; element++) {\n var propName = valuePropNames[element];\n if (null != props[propName]) {\n var propNameIsArray = isArrayImpl(props[propName]);\n props.multiple && !propNameIsArray\n ? console.error(\n \"The `%s` prop supplied to <select> must be an array if `multiple` is true.%s\",\n propName,\n getDeclarationErrorAddendum()\n )\n : !props.multiple &&\n propNameIsArray &&\n console.error(\n \"The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.%s\",\n propName,\n getDeclarationErrorAddendum()\n );\n }\n }\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValueDefaultValue ||\n (console.error(\n \"Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnValueDefaultValue = !0));\n }\n function validateTextareaProps(element, props) {\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValDefaultVal ||\n (console.error(\n \"%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\"\n ),\n (didWarnValDefaultVal = !0));\n null != props.children &&\n null == props.value &&\n console.error(\n \"Use the `defaultValue` or `value` props instead of setting children on <textarea>.\"\n );\n }\n function updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n }\n function initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue)\n throw Error(\n \"If you supply `defaultValue` on a <textarea>, do not pass children.\"\n );\n if (isArrayImpl(children)) {\n if (1 < children.length)\n throw Error(\"<textarea> can only have at most one child.\");\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n }\n function findNotableNode(node, indent) {\n return void 0 === node.serverProps &&\n 0 === node.serverTail.length &&\n 1 === node.children.length &&\n 3 < node.distanceFromLeaf &&\n node.distanceFromLeaf > 15 - indent\n ? findNotableNode(node.children[0], indent)\n : node;\n }\n function indentation(indent) {\n return \" \" + \" \".repeat(indent);\n }\n function added(indent) {\n return \"+ \" + \" \".repeat(indent);\n }\n function removed(indent) {\n return \"- \" + \" \".repeat(indent);\n }\n function describeFiberType(fiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return fiber.type;\n case 16:\n return \"Lazy\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 0:\n case 15:\n return (fiber = fiber.type), fiber.displayName || fiber.name || null;\n case 11:\n return (\n (fiber = fiber.type.render), fiber.displayName || fiber.name || null\n );\n case 1:\n return (fiber = fiber.type), fiber.displayName || fiber.name || null;\n default:\n return null;\n }\n }\n function describeTextNode(content, maxLength) {\n return needsEscaping.test(content)\n ? ((content = JSON.stringify(content)),\n content.length > maxLength - 2\n ? 8 > maxLength\n ? '{\"...\"}'\n : \"{\" + content.slice(0, maxLength - 7) + '...\"}'\n : \"{\" + content + \"}\")\n : content.length > maxLength\n ? 5 > maxLength\n ? '{\"...\"}'\n : content.slice(0, maxLength - 3) + \"...\"\n : content;\n }\n function describeTextDiff(clientText, serverProps, indent) {\n var maxLength = 120 - 2 * indent;\n if (null === serverProps)\n return added(indent) + describeTextNode(clientText, maxLength) + \"\\n\";\n if (\"string\" === typeof serverProps) {\n for (\n var firstDiff = 0;\n firstDiff < serverProps.length &&\n firstDiff < clientText.length &&\n serverProps.charCodeAt(firstDiff) ===\n clientText.charCodeAt(firstDiff);\n firstDiff++\n );\n firstDiff > maxLength - 8 &&\n 10 < firstDiff &&\n ((clientText = \"...\" + clientText.slice(firstDiff - 8)),\n (serverProps = \"...\" + serverProps.slice(firstDiff - 8)));\n return (\n added(indent) +\n describeTextNode(clientText, maxLength) +\n \"\\n\" +\n removed(indent) +\n describeTextNode(serverProps, maxLength) +\n \"\\n\"\n );\n }\n return (\n indentation(indent) + describeTextNode(clientText, maxLength) + \"\\n\"\n );\n }\n function objectName(object) {\n return Object.prototype.toString\n .call(object)\n .replace(/^\\[object (.*)\\]$/, function (m, p0) {\n return p0;\n });\n }\n function describeValue(value, maxLength) {\n switch (typeof value) {\n case \"string\":\n return (\n (value = JSON.stringify(value)),\n value.length > maxLength\n ? 5 > maxLength\n ? '\"...\"'\n : value.slice(0, maxLength - 4) + '...\"'\n : value\n );\n case \"object\":\n if (null === value) return \"null\";\n if (isArrayImpl(value)) return \"[...]\";\n if (value.$$typeof === REACT_ELEMENT_TYPE)\n return (maxLength = getComponentNameFromType(value.type))\n ? \"<\" + maxLength + \">\"\n : \"<...>\";\n var name = objectName(value);\n if (\"Object\" === name) {\n name = \"\";\n maxLength -= 2;\n for (var propName in value)\n if (value.hasOwnProperty(propName)) {\n var jsonPropName = JSON.stringify(propName);\n jsonPropName !== '\"' + propName + '\"' &&\n (propName = jsonPropName);\n maxLength -= propName.length - 2;\n jsonPropName = describeValue(\n value[propName],\n 15 > maxLength ? maxLength : 15\n );\n maxLength -= jsonPropName.length;\n if (0 > maxLength) {\n name += \"\" === name ? \"...\" : \", ...\";\n break;\n }\n name +=\n (\"\" === name ? \"\" : \",\") + propName + \":\" + jsonPropName;\n }\n return \"{\" + name + \"}\";\n }\n return name;\n case \"function\":\n return (maxLength = value.displayName || value.name)\n ? \"function \" + maxLength\n : \"function\";\n default:\n return String(value);\n }\n }\n function describePropValue(value, maxLength) {\n return \"string\" !== typeof value || needsEscaping.test(value)\n ? \"{\" + describeValue(value, maxLength - 2) + \"}\"\n : value.length > maxLength - 2\n ? 5 > maxLength\n ? '\"...\"'\n : '\"' + value.slice(0, maxLength - 5) + '...\"'\n : '\"' + value + '\"';\n }\n function describeExpandedElement(type, props, rowPrefix) {\n var remainingRowLength = 120 - rowPrefix.length - type.length,\n properties = [],\n propName;\n for (propName in props)\n if (props.hasOwnProperty(propName) && \"children\" !== propName) {\n var propValue = describePropValue(\n props[propName],\n 120 - rowPrefix.length - propName.length - 1\n );\n remainingRowLength -= propName.length + propValue.length + 2;\n properties.push(propName + \"=\" + propValue);\n }\n return 0 === properties.length\n ? rowPrefix + \"<\" + type + \">\\n\"\n : 0 < remainingRowLength\n ? rowPrefix + \"<\" + type + \" \" + properties.join(\" \") + \">\\n\"\n : rowPrefix +\n \"<\" +\n type +\n \"\\n\" +\n rowPrefix +\n \" \" +\n properties.join(\"\\n\" + rowPrefix + \" \") +\n \"\\n\" +\n rowPrefix +\n \">\\n\";\n }\n function describePropertiesDiff(clientObject, serverObject, indent) {\n var properties = \"\",\n remainingServerProperties = assign({}, serverObject),\n propName;\n for (propName in clientObject)\n if (clientObject.hasOwnProperty(propName)) {\n delete remainingServerProperties[propName];\n var maxLength = 120 - 2 * indent - propName.length - 2,\n clientPropValue = describeValue(clientObject[propName], maxLength);\n serverObject.hasOwnProperty(propName)\n ? ((maxLength = describeValue(serverObject[propName], maxLength)),\n (properties +=\n added(indent) + propName + \": \" + clientPropValue + \"\\n\"),\n (properties +=\n removed(indent) + propName + \": \" + maxLength + \"\\n\"))\n : (properties +=\n added(indent) + propName + \": \" + clientPropValue + \"\\n\");\n }\n for (var _propName in remainingServerProperties)\n remainingServerProperties.hasOwnProperty(_propName) &&\n ((clientObject = describeValue(\n remainingServerProperties[_propName],\n 120 - 2 * indent - _propName.length - 2\n )),\n (properties +=\n removed(indent) + _propName + \": \" + clientObject + \"\\n\"));\n return properties;\n }\n function describeElementDiff(type, clientProps, serverProps, indent) {\n var content = \"\",\n serverPropNames = new Map();\n for (propName$jscomp$0 in serverProps)\n serverProps.hasOwnProperty(propName$jscomp$0) &&\n serverPropNames.set(\n propName$jscomp$0.toLowerCase(),\n propName$jscomp$0\n );\n if (1 === serverPropNames.size && serverPropNames.has(\"children\"))\n content += describeExpandedElement(\n type,\n clientProps,\n indentation(indent)\n );\n else {\n for (var _propName2 in clientProps)\n if (\n clientProps.hasOwnProperty(_propName2) &&\n \"children\" !== _propName2\n ) {\n var maxLength$jscomp$0 =\n 120 - 2 * (indent + 1) - _propName2.length - 1,\n serverPropName = serverPropNames.get(_propName2.toLowerCase());\n if (void 0 !== serverPropName) {\n serverPropNames.delete(_propName2.toLowerCase());\n var propName$jscomp$0 = clientProps[_propName2];\n serverPropName = serverProps[serverPropName];\n var clientPropValue = describePropValue(\n propName$jscomp$0,\n maxLength$jscomp$0\n );\n maxLength$jscomp$0 = describePropValue(\n serverPropName,\n maxLength$jscomp$0\n );\n \"object\" === typeof propName$jscomp$0 &&\n null !== propName$jscomp$0 &&\n \"object\" === typeof serverPropName &&\n null !== serverPropName &&\n \"Object\" === objectName(propName$jscomp$0) &&\n \"Object\" === objectName(serverPropName) &&\n (2 < Object.keys(propName$jscomp$0).length ||\n 2 < Object.keys(serverPropName).length ||\n -1 < clientPropValue.indexOf(\"...\") ||\n -1 < maxLength$jscomp$0.indexOf(\"...\"))\n ? (content +=\n indentation(indent + 1) +\n _propName2 +\n \"={{\\n\" +\n describePropertiesDiff(\n propName$jscomp$0,\n serverPropName,\n indent + 2\n ) +\n indentation(indent + 1) +\n \"}}\\n\")\n : ((content +=\n added(indent + 1) +\n _propName2 +\n \"=\" +\n clientPropValue +\n \"\\n\"),\n (content +=\n removed(indent + 1) +\n _propName2 +\n \"=\" +\n maxLength$jscomp$0 +\n \"\\n\"));\n } else\n content +=\n indentation(indent + 1) +\n _propName2 +\n \"=\" +\n describePropValue(clientProps[_propName2], maxLength$jscomp$0) +\n \"\\n\";\n }\n serverPropNames.forEach(function (propName) {\n if (\"children\" !== propName) {\n var maxLength = 120 - 2 * (indent + 1) - propName.length - 1;\n content +=\n removed(indent + 1) +\n propName +\n \"=\" +\n describePropValue(serverProps[propName], maxLength) +\n \"\\n\";\n }\n });\n content =\n \"\" === content\n ? indentation(indent) + \"<\" + type + \">\\n\"\n : indentation(indent) +\n \"<\" +\n type +\n \"\\n\" +\n content +\n indentation(indent) +\n \">\\n\";\n }\n type = serverProps.children;\n clientProps = clientProps.children;\n if (\n \"string\" === typeof type ||\n \"number\" === typeof type ||\n \"bigint\" === typeof type\n ) {\n serverPropNames = \"\";\n if (\n \"string\" === typeof clientProps ||\n \"number\" === typeof clientProps ||\n \"bigint\" === typeof clientProps\n )\n serverPropNames = \"\" + clientProps;\n content += describeTextDiff(serverPropNames, \"\" + type, indent + 1);\n } else if (\n \"string\" === typeof clientProps ||\n \"number\" === typeof clientProps ||\n \"bigint\" === typeof clientProps\n )\n content =\n null == type\n ? content + describeTextDiff(\"\" + clientProps, null, indent + 1)\n : content + describeTextDiff(\"\" + clientProps, void 0, indent + 1);\n return content;\n }\n function describeSiblingFiber(fiber, indent) {\n var type = describeFiberType(fiber);\n if (null === type) {\n type = \"\";\n for (fiber = fiber.child; fiber; )\n (type += describeSiblingFiber(fiber, indent)),\n (fiber = fiber.sibling);\n return type;\n }\n return indentation(indent) + \"<\" + type + \">\\n\";\n }\n function describeNode(node, indent) {\n var skipToNode = findNotableNode(node, indent);\n if (\n skipToNode !== node &&\n (1 !== node.children.length || node.children[0] !== skipToNode)\n )\n return (\n indentation(indent) + \"...\\n\" + describeNode(skipToNode, indent + 1)\n );\n skipToNode = \"\";\n var debugInfo = node.fiber._debugInfo;\n if (debugInfo)\n for (var i = 0; i < debugInfo.length; i++) {\n var serverComponentName = debugInfo[i].name;\n \"string\" === typeof serverComponentName &&\n ((skipToNode +=\n indentation(indent) + \"<\" + serverComponentName + \">\\n\"),\n indent++);\n }\n debugInfo = \"\";\n i = node.fiber.pendingProps;\n if (6 === node.fiber.tag)\n (debugInfo = describeTextDiff(i, node.serverProps, indent)), indent++;\n else if (\n ((serverComponentName = describeFiberType(node.fiber)),\n null !== serverComponentName)\n )\n if (void 0 === node.serverProps) {\n debugInfo = indent;\n var maxLength = 120 - 2 * debugInfo - serverComponentName.length - 2,\n content = \"\";\n for (propName in i)\n if (i.hasOwnProperty(propName) && \"children\" !== propName) {\n var propValue = describePropValue(i[propName], 15);\n maxLength -= propName.length + propValue.length + 2;\n if (0 > maxLength) {\n content += \" ...\";\n break;\n }\n content += \" \" + propName + \"=\" + propValue;\n }\n debugInfo =\n indentation(debugInfo) +\n \"<\" +\n serverComponentName +\n content +\n \">\\n\";\n indent++;\n } else\n null === node.serverProps\n ? ((debugInfo = describeExpandedElement(\n serverComponentName,\n i,\n added(indent)\n )),\n indent++)\n : \"string\" === typeof node.serverProps\n ? console.error(\n \"Should not have matched a non HostText fiber to a Text node. This is a bug in React.\"\n )\n : ((debugInfo = describeElementDiff(\n serverComponentName,\n i,\n node.serverProps,\n indent\n )),\n indent++);\n var propName = \"\";\n i = node.fiber.child;\n for (\n serverComponentName = 0;\n i && serverComponentName < node.children.length;\n\n )\n (maxLength = node.children[serverComponentName]),\n maxLength.fiber === i\n ? ((propName += describeNode(maxLength, indent)),\n serverComponentName++)\n : (propName += describeSiblingFiber(i, indent)),\n (i = i.sibling);\n i &&\n 0 < node.children.length &&\n (propName += indentation(indent) + \"...\\n\");\n i = node.serverTail;\n null === node.serverProps && indent--;\n for (node = 0; node < i.length; node++)\n (serverComponentName = i[node]),\n (propName =\n \"string\" === typeof serverComponentName\n ? propName +\n (removed(indent) +\n describeTextNode(serverComponentName, 120 - 2 * indent) +\n \"\\n\")\n : propName +\n describeExpandedElement(\n serverComponentName.type,\n serverComponentName.props,\n removed(indent)\n ));\n return skipToNode + debugInfo + propName;\n }\n function describeDiff(rootNode) {\n try {\n return \"\\n\\n\" + describeNode(rootNode, 0);\n } catch (x) {\n return \"\";\n }\n }\n function describeAncestors(ancestor, child, props) {\n for (var fiber = child, node = null, distanceFromLeaf = 0; fiber; )\n fiber === ancestor && (distanceFromLeaf = 0),\n (node = {\n fiber: fiber,\n children: null !== node ? [node] : [],\n serverProps:\n fiber === child ? props : fiber === ancestor ? null : void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n }),\n distanceFromLeaf++,\n (fiber = fiber.return);\n return null !== node ? describeDiff(node).replaceAll(/^[+-]/gm, \">\") : \"\";\n }\n function updatedAncestorInfoDev(oldInfo, tag) {\n var ancestorInfo = assign({}, oldInfo || emptyAncestorInfoDev),\n info = { tag: tag };\n -1 !== inScopeTags.indexOf(tag) &&\n ((ancestorInfo.aTagInScope = null),\n (ancestorInfo.buttonTagInScope = null),\n (ancestorInfo.nobrTagInScope = null));\n -1 !== buttonScopeTags.indexOf(tag) &&\n (ancestorInfo.pTagInButtonScope = null);\n -1 !== specialTags.indexOf(tag) &&\n \"address\" !== tag &&\n \"div\" !== tag &&\n \"p\" !== tag &&\n ((ancestorInfo.listItemTagAutoclosing = null),\n (ancestorInfo.dlItemTagAutoclosing = null));\n ancestorInfo.current = info;\n \"form\" === tag && (ancestorInfo.formTag = info);\n \"a\" === tag && (ancestorInfo.aTagInScope = info);\n \"button\" === tag && (ancestorInfo.buttonTagInScope = info);\n \"nobr\" === tag && (ancestorInfo.nobrTagInScope = info);\n \"p\" === tag && (ancestorInfo.pTagInButtonScope = info);\n \"li\" === tag && (ancestorInfo.listItemTagAutoclosing = info);\n if (\"dd\" === tag || \"dt\" === tag)\n ancestorInfo.dlItemTagAutoclosing = info;\n \"#document\" === tag || \"html\" === tag\n ? (ancestorInfo.containerTagInScope = null)\n : ancestorInfo.containerTagInScope ||\n (ancestorInfo.containerTagInScope = info);\n null !== oldInfo ||\n (\"#document\" !== tag && \"html\" !== tag && \"body\" !== tag)\n ? !0 === ancestorInfo.implicitRootScope &&\n (ancestorInfo.implicitRootScope = !1)\n : (ancestorInfo.implicitRootScope = !0);\n return ancestorInfo;\n }\n function isTagValidWithParent(tag, parentTag, implicitRootScope) {\n switch (parentTag) {\n case \"select\":\n return (\n \"hr\" === tag ||\n \"option\" === tag ||\n \"optgroup\" === tag ||\n \"script\" === tag ||\n \"template\" === tag ||\n \"#text\" === tag\n );\n case \"optgroup\":\n return \"option\" === tag || \"#text\" === tag;\n case \"option\":\n return \"#text\" === tag;\n case \"tr\":\n return (\n \"th\" === tag ||\n \"td\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"tbody\":\n case \"thead\":\n case \"tfoot\":\n return (\n \"tr\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"colgroup\":\n return \"col\" === tag || \"template\" === tag;\n case \"table\":\n return (\n \"caption\" === tag ||\n \"colgroup\" === tag ||\n \"tbody\" === tag ||\n \"tfoot\" === tag ||\n \"thead\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"head\":\n return (\n \"base\" === tag ||\n \"basefont\" === tag ||\n \"bgsound\" === tag ||\n \"link\" === tag ||\n \"meta\" === tag ||\n \"title\" === tag ||\n \"noscript\" === tag ||\n \"noframes\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"html\":\n if (implicitRootScope) break;\n return \"head\" === tag || \"body\" === tag || \"frameset\" === tag;\n case \"frameset\":\n return \"frame\" === tag;\n case \"#document\":\n if (!implicitRootScope) return \"html\" === tag;\n }\n switch (tag) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n return (\n \"h1\" !== parentTag &&\n \"h2\" !== parentTag &&\n \"h3\" !== parentTag &&\n \"h4\" !== parentTag &&\n \"h5\" !== parentTag &&\n \"h6\" !== parentTag\n );\n case \"rp\":\n case \"rt\":\n return -1 === impliedEndTags.indexOf(parentTag);\n case \"caption\":\n case \"col\":\n case \"colgroup\":\n case \"frameset\":\n case \"frame\":\n case \"tbody\":\n case \"td\":\n case \"tfoot\":\n case \"th\":\n case \"thead\":\n case \"tr\":\n return null == parentTag;\n case \"head\":\n return implicitRootScope || null === parentTag;\n case \"html\":\n return (\n (implicitRootScope && \"#document\" === parentTag) ||\n null === parentTag\n );\n case \"body\":\n return (\n (implicitRootScope &&\n (\"#document\" === parentTag || \"html\" === parentTag)) ||\n null === parentTag\n );\n }\n return !0;\n }\n function findInvalidAncestorForTag(tag, ancestorInfo) {\n switch (tag) {\n case \"address\":\n case \"article\":\n case \"aside\":\n case \"blockquote\":\n case \"center\":\n case \"details\":\n case \"dialog\":\n case \"dir\":\n case \"div\":\n case \"dl\":\n case \"fieldset\":\n case \"figcaption\":\n case \"figure\":\n case \"footer\":\n case \"header\":\n case \"hgroup\":\n case \"main\":\n case \"menu\":\n case \"nav\":\n case \"ol\":\n case \"p\":\n case \"section\":\n case \"summary\":\n case \"ul\":\n case \"pre\":\n case \"listing\":\n case \"table\":\n case \"hr\":\n case \"xmp\":\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n return ancestorInfo.pTagInButtonScope;\n case \"form\":\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n case \"li\":\n return ancestorInfo.listItemTagAutoclosing;\n case \"dd\":\n case \"dt\":\n return ancestorInfo.dlItemTagAutoclosing;\n case \"button\":\n return ancestorInfo.buttonTagInScope;\n case \"a\":\n return ancestorInfo.aTagInScope;\n case \"nobr\":\n return ancestorInfo.nobrTagInScope;\n }\n return null;\n }\n function findAncestor(parent, tagName) {\n for (; parent; ) {\n switch (parent.tag) {\n case 5:\n case 26:\n case 27:\n if (parent.type === tagName) return parent;\n }\n parent = parent.return;\n }\n return null;\n }\n function validateDOMNesting(childTag, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfoDev;\n var parentInfo = ancestorInfo.current;\n ancestorInfo = (parentInfo = isTagValidWithParent(\n childTag,\n parentInfo && parentInfo.tag,\n ancestorInfo.implicitRootScope\n )\n ? null\n : parentInfo)\n ? null\n : findInvalidAncestorForTag(childTag, ancestorInfo);\n ancestorInfo = parentInfo || ancestorInfo;\n if (!ancestorInfo) return !0;\n var ancestorTag = ancestorInfo.tag;\n ancestorInfo = String(!!parentInfo) + \"|\" + childTag + \"|\" + ancestorTag;\n if (didWarn[ancestorInfo]) return !1;\n didWarn[ancestorInfo] = !0;\n var ancestor = (ancestorInfo = current)\n ? findAncestor(ancestorInfo.return, ancestorTag)\n : null,\n ancestorDescription =\n null !== ancestorInfo && null !== ancestor\n ? describeAncestors(ancestor, ancestorInfo, null)\n : \"\",\n tagDisplayName = \"<\" + childTag + \">\";\n parentInfo\n ? ((parentInfo = \"\"),\n \"table\" === ancestorTag &&\n \"tr\" === childTag &&\n (parentInfo +=\n \" Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by the browser.\"),\n console.error(\n \"In HTML, %s cannot be a child of <%s>.%s\\nThis will cause a hydration error.%s\",\n tagDisplayName,\n ancestorTag,\n parentInfo,\n ancestorDescription\n ))\n : console.error(\n \"In HTML, %s cannot be a descendant of <%s>.\\nThis will cause a hydration error.%s\",\n tagDisplayName,\n ancestorTag,\n ancestorDescription\n );\n ancestorInfo &&\n ((childTag = ancestorInfo.return),\n null === ancestor ||\n null === childTag ||\n (ancestor === childTag &&\n childTag._debugOwner === ancestorInfo._debugOwner) ||\n runWithFiberInDEV(ancestor, function () {\n console.error(\n \"<%s> cannot contain a nested %s.\\nSee this log for the ancestor stack trace.\",\n ancestorTag,\n tagDisplayName\n );\n }));\n return !1;\n }\n function validateTextNesting(childText, parentTag, implicitRootScope) {\n if (implicitRootScope || isTagValidWithParent(\"#text\", parentTag, !1))\n return !0;\n implicitRootScope = \"#text|\" + parentTag;\n if (didWarn[implicitRootScope]) return !1;\n didWarn[implicitRootScope] = !0;\n var ancestor = (implicitRootScope = current)\n ? findAncestor(implicitRootScope, parentTag)\n : null;\n implicitRootScope =\n null !== implicitRootScope && null !== ancestor\n ? describeAncestors(\n ancestor,\n implicitRootScope,\n 6 !== implicitRootScope.tag ? { children: null } : null\n )\n : \"\";\n /\\S/.test(childText)\n ? console.error(\n \"In HTML, text nodes cannot be a child of <%s>.\\nThis will cause a hydration error.%s\",\n parentTag,\n implicitRootScope\n )\n : console.error(\n \"In HTML, whitespace text nodes cannot be a child of <%s>. Make sure you don't have any extra whitespace between tags on each line of your source code.\\nThis will cause a hydration error.%s\",\n parentTag,\n implicitRootScope\n );\n return !1;\n }\n function setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n }\n function camelize(string) {\n return string.replace(hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n }\n function setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n isCustomProperty ||\n (-1 < styleName.indexOf(\"-\")\n ? (warnedStyleNames.hasOwnProperty(styleName) &&\n warnedStyleNames[styleName]) ||\n ((warnedStyleNames[styleName] = !0),\n console.error(\n \"Unsupported style property %s. Did you mean %s?\",\n styleName,\n camelize(styleName.replace(msPattern, \"ms-\"))\n ))\n : badVendoredStyleNamePattern.test(styleName)\n ? (warnedStyleNames.hasOwnProperty(styleName) &&\n warnedStyleNames[styleName]) ||\n ((warnedStyleNames[styleName] = !0),\n console.error(\n \"Unsupported vendor-prefixed style property %s. Did you mean %s?\",\n styleName,\n styleName.charAt(0).toUpperCase() + styleName.slice(1)\n ))\n : !badStyleValueWithSemicolonPattern.test(value) ||\n (warnedStyleValues.hasOwnProperty(value) &&\n warnedStyleValues[value]) ||\n ((warnedStyleValues[value] = !0),\n console.error(\n 'Style property values shouldn\\'t contain a semicolon. Try \"%s: %s\" instead.',\n styleName,\n value.replace(badStyleValueWithSemicolonPattern, \"\")\n )),\n \"number\" === typeof value &&\n (isNaN(value)\n ? warnedForNaNValue ||\n ((warnedForNaNValue = !0),\n console.error(\n \"`NaN` is an invalid value for the `%s` css style property.\",\n styleName\n ))\n : isFinite(value) ||\n warnedForInfinityValue ||\n ((warnedForInfinityValue = !0),\n console.error(\n \"`Infinity` is an invalid value for the `%s` css style property.\",\n styleName\n ))));\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (checkCSSPropertyStringCoercion(value, styleName),\n (style[styleName] = (\"\" + value).trim()))\n : (style[styleName] = value + \"px\");\n }\n function setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(\n \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\"\n );\n styles && Object.freeze(styles);\n node = node.style;\n if (null != prevStyles) {\n if (styles) {\n var expandedUpdates = {};\n if (prevStyles)\n for (var key in prevStyles)\n if (prevStyles.hasOwnProperty(key) && !styles.hasOwnProperty(key))\n for (\n var longhands = shorthandToLonghand[key] || [key], i = 0;\n i < longhands.length;\n i++\n )\n expandedUpdates[longhands[i]] = key;\n for (var _key in styles)\n if (\n styles.hasOwnProperty(_key) &&\n (!prevStyles || prevStyles[_key] !== styles[_key])\n )\n for (\n key = shorthandToLonghand[_key] || [_key], longhands = 0;\n longhands < key.length;\n longhands++\n )\n expandedUpdates[key[longhands]] = _key;\n _key = {};\n for (var key$jscomp$0 in styles)\n for (\n key = shorthandToLonghand[key$jscomp$0] || [key$jscomp$0],\n longhands = 0;\n longhands < key.length;\n longhands++\n )\n _key[key[longhands]] = key$jscomp$0;\n key$jscomp$0 = {};\n for (var _key2 in expandedUpdates)\n if (\n ((key = expandedUpdates[_key2]),\n (longhands = _key[_key2]) &&\n key !== longhands &&\n ((i = key + \",\" + longhands), !key$jscomp$0[i]))\n ) {\n key$jscomp$0[i] = !0;\n i = console;\n var value = styles[key];\n i.error.call(\n i,\n \"%s a style property during rerender (%s) when a conflicting property is set (%s) can lead to styling bugs. To avoid this, don't mix shorthand and non-shorthand properties for the same value; instead, replace the shorthand with separate values.\",\n null == value || \"boolean\" === typeof value || \"\" === value\n ? \"Removing\"\n : \"Updating\",\n key,\n longhands\n );\n }\n }\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"));\n for (var _styleName in styles)\n (_key2 = styles[_styleName]),\n styles.hasOwnProperty(_styleName) &&\n prevStyles[_styleName] !== _key2 &&\n setValueForStyle(node, _styleName, _key2);\n } else\n for (expandedUpdates in styles)\n styles.hasOwnProperty(expandedUpdates) &&\n setValueForStyle(node, expandedUpdates, styles[expandedUpdates]);\n }\n function isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n }\n function getAttributeAlias(name) {\n return aliases.get(name) || name;\n }\n function validateProperty$1(tagName, name) {\n if (\n hasOwnProperty.call(warnedProperties$1, name) &&\n warnedProperties$1[name]\n )\n return !0;\n if (rARIACamel$1.test(name)) {\n tagName = \"aria-\" + name.slice(4).toLowerCase();\n tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;\n if (null == tagName)\n return (\n console.error(\n \"Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.\",\n name\n ),\n (warnedProperties$1[name] = !0)\n );\n if (name !== tagName)\n return (\n console.error(\n \"Invalid ARIA attribute `%s`. Did you mean `%s`?\",\n name,\n tagName\n ),\n (warnedProperties$1[name] = !0)\n );\n }\n if (rARIA$1.test(name)) {\n tagName = name.toLowerCase();\n tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;\n if (null == tagName) return (warnedProperties$1[name] = !0), !1;\n name !== tagName &&\n (console.error(\n \"Unknown ARIA attribute `%s`. Did you mean `%s`?\",\n name,\n tagName\n ),\n (warnedProperties$1[name] = !0));\n }\n return !0;\n }\n function validateProperties$2(type, props) {\n var invalidProps = [],\n key;\n for (key in props)\n validateProperty$1(type, key) || invalidProps.push(key);\n props = invalidProps\n .map(function (prop) {\n return \"`\" + prop + \"`\";\n })\n .join(\", \");\n 1 === invalidProps.length\n ? console.error(\n \"Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props\",\n props,\n type\n )\n : 1 < invalidProps.length &&\n console.error(\n \"Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props\",\n props,\n type\n );\n }\n function validateProperty(tagName, name, value, eventRegistry) {\n if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])\n return !0;\n var lowerCasedName = name.toLowerCase();\n if (\"onfocusin\" === lowerCasedName || \"onfocusout\" === lowerCasedName)\n return (\n console.error(\n \"React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\n \"function\" === typeof value &&\n ((\"form\" === tagName && \"action\" === name) ||\n (\"input\" === tagName && \"formAction\" === name) ||\n (\"button\" === tagName && \"formAction\" === name))\n )\n return !0;\n if (null != eventRegistry) {\n tagName = eventRegistry.possibleRegistrationNames;\n if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))\n return !0;\n eventRegistry = tagName.hasOwnProperty(lowerCasedName)\n ? tagName[lowerCasedName]\n : null;\n if (null != eventRegistry)\n return (\n console.error(\n \"Invalid event handler property `%s`. Did you mean `%s`?\",\n name,\n eventRegistry\n ),\n (warnedProperties[name] = !0)\n );\n if (EVENT_NAME_REGEX.test(name))\n return (\n console.error(\n \"Unknown event handler property `%s`. It will be ignored.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n } else if (EVENT_NAME_REGEX.test(name))\n return (\n INVALID_EVENT_NAME_REGEX.test(name) &&\n console.error(\n \"Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n if (rARIA.test(name) || rARIACamel.test(name)) return !0;\n if (\"innerhtml\" === lowerCasedName)\n return (\n console.error(\n \"Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\"aria\" === lowerCasedName)\n return (\n console.error(\n \"The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\n \"is\" === lowerCasedName &&\n null !== value &&\n void 0 !== value &&\n \"string\" !== typeof value\n )\n return (\n console.error(\n \"Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.\",\n typeof value\n ),\n (warnedProperties[name] = !0)\n );\n if (\"number\" === typeof value && isNaN(value))\n return (\n console.error(\n \"Received NaN for the `%s` attribute. If this is expected, cast the value to a string.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n if (\n ((lowerCasedName = possibleStandardNames[lowerCasedName]),\n lowerCasedName !== name)\n )\n return (\n console.error(\n \"Invalid DOM property `%s`. Did you mean `%s`?\",\n name,\n lowerCasedName\n ),\n (warnedProperties[name] = !0)\n );\n } else if (name !== lowerCasedName)\n return (\n console.error(\n \"React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.\",\n name,\n lowerCasedName\n ),\n (warnedProperties[name] = !0)\n );\n switch (name) {\n case \"dangerouslySetInnerHTML\":\n case \"children\":\n case \"style\":\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n return !0;\n case \"innerText\":\n case \"textContent\":\n return !0;\n }\n switch (typeof value) {\n case \"boolean\":\n switch (name) {\n case \"autoFocus\":\n case \"checked\":\n case \"multiple\":\n case \"muted\":\n case \"selected\":\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n case \"capture\":\n case \"download\":\n case \"inert\":\n return !0;\n default:\n lowerCasedName = name.toLowerCase().slice(0, 5);\n if (\"data-\" === lowerCasedName || \"aria-\" === lowerCasedName)\n return !0;\n value\n ? console.error(\n 'Received `%s` for a non-boolean attribute `%s`.\\n\\nIf you want to write it to the DOM, pass a string instead: %s=\"%s\" or %s={value.toString()}.',\n value,\n name,\n name,\n value,\n name\n )\n : console.error(\n 'Received `%s` for a non-boolean attribute `%s`.\\n\\nIf you want to write it to the DOM, pass a string instead: %s=\"%s\" or %s={value.toString()}.\\n\\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',\n value,\n name,\n name,\n value,\n name,\n name,\n name\n );\n return (warnedProperties[name] = !0);\n }\n case \"function\":\n case \"symbol\":\n return (warnedProperties[name] = !0), !1;\n case \"string\":\n if (\"false\" === value || \"true\" === value) {\n switch (name) {\n case \"checked\":\n case \"selected\":\n case \"multiple\":\n case \"muted\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n case \"inert\":\n break;\n default:\n return !0;\n }\n console.error(\n \"Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?\",\n value,\n name,\n \"false\" === value\n ? \"The browser will interpret it as a truthy value.\"\n : 'Although this works, it will not work as expected if you pass the string \"false\".',\n name,\n value\n );\n warnedProperties[name] = !0;\n }\n }\n return !0;\n }\n function warnUnknownProperties(type, props, eventRegistry) {\n var unknownProps = [],\n key;\n for (key in props)\n validateProperty(type, key, props[key], eventRegistry) ||\n unknownProps.push(key);\n props = unknownProps\n .map(function (prop) {\n return \"`\" + prop + \"`\";\n })\n .join(\", \");\n 1 === unknownProps.length\n ? console.error(\n \"Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior \",\n props,\n type\n )\n : 1 < unknownProps.length &&\n console.error(\n \"Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior \",\n props,\n type\n );\n }\n function sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n }\n function getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n }\n function restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (\n ((target = internalInstance.stateNode), internalInstance.type)\n ) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n checkAttributeStringCoercion(internalInstance, \"name\");\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps)\n throw Error(\n \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\"\n );\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form &&\n updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n }\n function batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n }\n function getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n \"Expected `\" +\n registrationName +\n \"` listener to be a function, instead got a value of `\" +\n typeof stateNode +\n \"` type.\"\n );\n return stateNode;\n }\n function getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n }\n function getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n }\n function functionThatReturnsTrue() {\n return !0;\n }\n function functionThatReturnsFalse() {\n return !1;\n }\n function createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue &&\n (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n }\n function modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n }\n function getEventModifierState() {\n return modifierStateGetter;\n }\n function isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return nativeEvent.keyCode !== START_KEYCODE;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n }\n function getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n }\n function getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (nativeEvent.which !== SPACEBAR_CODE) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress\n ? null\n : domEventName\n );\n default:\n return null;\n }\n }\n function getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(\n nativeEvent.ctrlKey ||\n nativeEvent.altKey ||\n nativeEvent.metaKey\n ) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which)\n return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n }\n function isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n }\n function isEventSupported(eventNameSuffix) {\n if (!canUseDOM) return !1;\n eventNameSuffix = \"on\" + eventNameSuffix;\n var isSupported = eventNameSuffix in document;\n isSupported ||\n ((isSupported = document.createElement(\"div\")),\n isSupported.setAttribute(eventNameSuffix, \"return;\"),\n (isSupported = \"function\" === typeof isSupported[eventNameSuffix]));\n return isSupported;\n }\n function createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n ) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n }\n function runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n }\n function getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n }\n function getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n }\n function stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n }\n function handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n }\n function handleEventsForInputEventPolyfill(\n domEventName,\n target,\n targetInst\n ) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n }\n function getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n }\n function getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n }\n function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n }\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n }\n function getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n }\n function getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n }\n function containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n }\n function getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n }\n function hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n }\n function constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n ) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n }\n function makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n }\n function getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n }\n function registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n }\n function createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n }\n function finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n }\n function enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n }\n function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber ||\n sourceFiber._visibility & OffscreenVisible ||\n (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n }\n function getRootForUpdatedFiber(sourceFiber) {\n if (nestedUpdateCount > NESTED_UPDATE_LIMIT)\n throw (\n ((nestedPassiveUpdateCount = nestedUpdateCount = 0),\n (rootWithPassiveNestedUpdates = rootWithNestedUpdates = null),\n Error(\n \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\"\n ))\n );\n nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT &&\n ((nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = null),\n console.error(\n \"Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.\"\n ));\n null === sourceFiber.alternate &&\n 0 !== (sourceFiber.flags & 4098) &&\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);\n for (var node = sourceFiber, parent = node.return; null !== parent; )\n null === node.alternate &&\n 0 !== (node.flags & 4098) &&\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber),\n (node = parent),\n (parent = node.return);\n return 3 === node.tag ? node.stateNode : null;\n }\n function resolveFunctionForHotReloading(type) {\n if (null === resolveFamily) return type;\n var family = resolveFamily(type);\n return void 0 === family ? type : family.current;\n }\n function resolveForwardRefForHotReloading(type) {\n if (null === resolveFamily) return type;\n var family = resolveFamily(type);\n return void 0 === family\n ? null !== type &&\n void 0 !== type &&\n \"function\" === typeof type.render &&\n ((family = resolveFunctionForHotReloading(type.render)),\n type.render !== family)\n ? ((family = { $$typeof: REACT_FORWARD_REF_TYPE, render: family }),\n void 0 !== type.displayName &&\n (family.displayName = type.displayName),\n family)\n : type\n : family.current;\n }\n function isCompatibleFamilyForHotReloading(fiber, element) {\n if (null === resolveFamily) return !1;\n var prevType = fiber.elementType;\n element = element.type;\n var needsCompareFamilies = !1,\n $$typeofNextType =\n \"object\" === typeof element && null !== element\n ? element.$$typeof\n : null;\n switch (fiber.tag) {\n case 1:\n \"function\" === typeof element && (needsCompareFamilies = !0);\n break;\n case 0:\n \"function\" === typeof element\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n case 11:\n $$typeofNextType === REACT_FORWARD_REF_TYPE\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n case 14:\n case 15:\n $$typeofNextType === REACT_MEMO_TYPE\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n default:\n return !1;\n }\n return needsCompareFamilies &&\n ((fiber = resolveFamily(prevType)),\n void 0 !== fiber && fiber === resolveFamily(element))\n ? !0\n : !1;\n }\n function markFailedErrorBoundaryForHotReloading(fiber) {\n null !== resolveFamily &&\n \"function\" === typeof WeakSet &&\n (null === failedBoundaries && (failedBoundaries = new WeakSet()),\n failedBoundaries.add(fiber));\n }\n function scheduleFibersWithFamiliesRecursively(\n fiber,\n updatedFamilies,\n staleFamilies\n ) {\n var alternate = fiber.alternate,\n child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type,\n candidateType = null;\n switch (tag) {\n case 0:\n case 15:\n case 1:\n candidateType = type;\n break;\n case 11:\n candidateType = type.render;\n }\n if (null === resolveFamily)\n throw Error(\"Expected resolveFamily to be set during hot reload.\");\n var needsRender = !1;\n type = !1;\n null !== candidateType &&\n ((candidateType = resolveFamily(candidateType)),\n void 0 !== candidateType &&\n (staleFamilies.has(candidateType)\n ? (type = !0)\n : updatedFamilies.has(candidateType) &&\n (1 === tag ? (type = !0) : (needsRender = !0))));\n null !== failedBoundaries &&\n (failedBoundaries.has(fiber) ||\n (null !== alternate && failedBoundaries.has(alternate))) &&\n (type = !0);\n type && (fiber._debugNeedsRemount = !0);\n if (type || needsRender)\n (alternate = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== alternate && scheduleUpdateOnFiber(alternate, fiber, 2);\n null === child ||\n type ||\n scheduleFibersWithFamiliesRecursively(\n child,\n updatedFamilies,\n staleFamilies\n );\n null !== sibling &&\n scheduleFibersWithFamiliesRecursively(\n sibling,\n updatedFamilies,\n staleFamilies\n );\n }\n function FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n this.actualDuration = -0;\n this.actualStartTime = -1.1;\n this.treeBaseDuration = this.selfBaseDuration = -0;\n this._debugTask =\n this._debugStack =\n this._debugOwner =\n this._debugInfo =\n null;\n this._debugNeedsRemount = !1;\n this._debugHookTypes = null;\n hasBadMapPolyfill ||\n \"function\" !== typeof Object.preventExtensions ||\n Object.preventExtensions(this);\n }\n function shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n }\n function createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiber(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress._debugOwner = current._debugOwner),\n (workInProgress._debugStack = current._debugStack),\n (workInProgress._debugTask = current._debugTask),\n (workInProgress._debugHookTypes = current._debugHookTypes),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.actualDuration = -0),\n (workInProgress.actualStartTime = -1.1));\n workInProgress.flags = current.flags & 65011712;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : {\n lanes: pendingProps.lanes,\n firstContext: pendingProps.firstContext,\n _debugThenableState: pendingProps._debugThenableState\n };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n workInProgress._debugInfo = current._debugInfo;\n workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n switch (workInProgress.tag) {\n case 0:\n case 15:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n case 1:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n case 11:\n workInProgress.type = resolveForwardRefForHotReloading(current.type);\n }\n return workInProgress;\n }\n function resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 65011714;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null),\n (workInProgress.selfBaseDuration = 0),\n (workInProgress.treeBaseDuration = 0))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext,\n _debugThenableState: renderLanes._debugThenableState\n }),\n (workInProgress.selfBaseDuration = current.selfBaseDuration),\n (workInProgress.treeBaseDuration = current.treeBaseDuration));\n return workInProgress;\n }\n function createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n ) {\n var fiberTag = 0,\n resolvedType = type;\n if (\"function\" === typeof type)\n shouldConstruct(type) && (fiberTag = 1),\n (resolvedType = resolveFunctionForHotReloading(resolvedType));\n else if (\"string\" === typeof type)\n (fiberTag = getHostContext()),\n (fiberTag = isHostHoistableType(type, pendingProps, fiberTag)\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5);\n else\n a: switch (type) {\n case REACT_ACTIVITY_TYPE:\n return (\n (key = createFiber(31, pendingProps, key, mode)),\n (key.elementType = REACT_ACTIVITY_TYPE),\n (key.lanes = lanes),\n key\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(\n pendingProps.children,\n mode,\n lanes,\n key\n );\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= StrictLegacyMode;\n mode |= StrictEffectsMode;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = pendingProps),\n (owner = mode),\n \"string\" !== typeof type.id &&\n console.error(\n 'Profiler must specify an \"id\" of type `string` as a prop. Received the type `%s` instead.',\n typeof type.id\n ),\n (key = createFiber(12, type, key, owner | ProfileMode)),\n (key.elementType = REACT_PROFILER_TYPE),\n (key.lanes = lanes),\n (key.stateNode = { effectDuration: 0, passiveEffectDuration: 0 }),\n key\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (key = createFiber(13, pendingProps, key, mode)),\n (key.elementType = REACT_SUSPENSE_TYPE),\n (key.lanes = lanes),\n key\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (key = createFiber(19, pendingProps, key, mode)),\n (key.elementType = REACT_SUSPENSE_LIST_TYPE),\n (key.lanes = lanes),\n key\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n resolvedType = resolveForwardRefForHotReloading(resolvedType);\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n resolvedType = null;\n break a;\n }\n resolvedType = \"\";\n if (\n void 0 === type ||\n (\"object\" === typeof type &&\n null !== type &&\n 0 === Object.keys(type).length)\n )\n resolvedType +=\n \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\";\n null === type\n ? (pendingProps = \"null\")\n : isArrayImpl(type)\n ? (pendingProps = \"array\")\n : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE\n ? ((pendingProps =\n \"<\" +\n (getComponentNameFromType(type.type) || \"Unknown\") +\n \" />\"),\n (resolvedType =\n \" Did you accidentally export a JSX literal instead of a component?\"))\n : (pendingProps = typeof type);\n (fiberTag = owner ? getComponentNameFromOwner(owner) : null) &&\n (resolvedType +=\n \"\\n\\nCheck the render method of `\" + fiberTag + \"`.\");\n fiberTag = 29;\n pendingProps = Error(\n \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" +\n (pendingProps + \".\" + resolvedType)\n );\n resolvedType = null;\n }\n key = createFiber(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = resolvedType;\n key.lanes = lanes;\n key._debugOwner = owner;\n return key;\n }\n function createFiberFromElement(element, mode, lanes) {\n mode = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n element._owner,\n mode,\n lanes\n );\n mode._debugOwner = element._owner;\n mode._debugStack = element._debugStack;\n mode._debugTask = element._debugTask;\n return mode;\n }\n function createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiber(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n }\n function createFiberFromText(content, mode, lanes) {\n content = createFiber(6, content, null, mode);\n content.lanes = lanes;\n return content;\n }\n function createFiberFromPortal(portal, mode, lanes) {\n mode = createFiber(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n }\n function pushTreeFork(workInProgress, totalChildren) {\n warnIfNotHydrating();\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n }\n function pushTreeId(workInProgress, totalChildren, index) {\n warnIfNotHydrating();\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n }\n function pushMaterializedTreeId(workInProgress) {\n warnIfNotHydrating();\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n }\n function popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n }\n function warnIfNotHydrating() {\n isHydrating ||\n console.error(\n \"Expected to be hydrating. This is a bug in React. Please file an issue.\"\n );\n }\n function buildHydrationDiffNode(fiber, distanceFromLeaf) {\n if (null === fiber.return) {\n if (null === hydrationDiffRootDEV)\n hydrationDiffRootDEV = {\n fiber: fiber,\n children: [],\n serverProps: void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n };\n else {\n if (hydrationDiffRootDEV.fiber !== fiber)\n throw Error(\n \"Saw multiple hydration diff roots in a pass. This is a bug in React.\"\n );\n hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf &&\n (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf);\n }\n return hydrationDiffRootDEV;\n }\n var siblings = buildHydrationDiffNode(\n fiber.return,\n distanceFromLeaf + 1\n ).children;\n if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber)\n return (\n (siblings = siblings[siblings.length - 1]),\n siblings.distanceFromLeaf > distanceFromLeaf &&\n (siblings.distanceFromLeaf = distanceFromLeaf),\n siblings\n );\n distanceFromLeaf = {\n fiber: fiber,\n children: [],\n serverProps: void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n };\n siblings.push(distanceFromLeaf);\n return distanceFromLeaf;\n }\n function warnNonHydratedInstance(fiber, rejectedCandidate) {\n didSuspendOrErrorDEV ||\n ((fiber = buildHydrationDiffNode(fiber, 0)),\n (fiber.serverProps = null),\n null !== rejectedCandidate &&\n ((rejectedCandidate =\n describeHydratableInstanceForDevWarnings(rejectedCandidate)),\n fiber.serverTail.push(rejectedCandidate)));\n }\n function throwOnHydrationMismatch(fiber) {\n var diff = \"\",\n diffRoot = hydrationDiffRootDEV;\n null !== diffRoot &&\n ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot)));\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\\n\\n- A server/client branch `if (typeof window !== 'undefined')`.\\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\\n- Date formatting in a user's locale which doesn't match the server.\\n- External changing data without sending a snapshot of it along with the HTML.\\n- Invalid HTML tag nesting.\\n\\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\\n\\nhttps://react.dev/link/hydration-mismatch\" +\n diff\n ),\n fiber\n )\n );\n throw HydrationMismatchException;\n }\n function prepareToHydrateHostInstance(fiber) {\n var didHydrate = fiber.stateNode;\n var type = fiber.type,\n props = fiber.memoizedProps;\n didHydrate[internalInstanceKey] = fiber;\n didHydrate[internalPropsKey] = props;\n validatePropertiesInDevelopment(type, props);\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", didHydrate);\n listenToNonDelegatedEvent(\"close\", didHydrate);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", didHydrate);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", didHydrate);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", didHydrate);\n listenToNonDelegatedEvent(\"load\", didHydrate);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", didHydrate);\n break;\n case \"input\":\n checkControlledValueProps(\"input\", props);\n listenToNonDelegatedEvent(\"invalid\", didHydrate);\n validateInputProps(didHydrate, props);\n initInput(\n didHydrate,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n track(didHydrate);\n break;\n case \"option\":\n validateOptionProps(didHydrate, props);\n break;\n case \"select\":\n checkControlledValueProps(\"select\", props);\n listenToNonDelegatedEvent(\"invalid\", didHydrate);\n validateSelectProps(didHydrate, props);\n break;\n case \"textarea\":\n checkControlledValueProps(\"textarea\", props),\n listenToNonDelegatedEvent(\"invalid\", didHydrate),\n validateTextareaProps(didHydrate, props),\n initTextarea(\n didHydrate,\n props.value,\n props.defaultValue,\n props.children\n ),\n track(didHydrate);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n didHydrate.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(didHydrate.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", didHydrate),\n listenToNonDelegatedEvent(\"toggle\", didHydrate)),\n null != props.onScroll &&\n listenToNonDelegatedEvent(\"scroll\", didHydrate),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", didHydrate),\n null != props.onClick && (didHydrate.onclick = noop$1),\n (didHydrate = !0))\n : (didHydrate = !1);\n didHydrate || throwOnHydrationMismatch(fiber);\n }\n function popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n }\n function popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating)\n return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n if (JSCompiler_temp && nextHydratableInstance) {\n for (JSCompiler_temp = nextHydratableInstance; JSCompiler_temp; ) {\n var diffNode = buildHydrationDiffNode(fiber, 0),\n description =\n describeHydratableInstanceForDevWarnings(JSCompiler_temp);\n diffNode.serverTail.push(description);\n JSCompiler_temp =\n \"Suspense\" === description.type\n ? getNextHydratableInstanceAfterSuspenseInstance(JSCompiler_temp)\n : getNextHydratable(JSCompiler_temp.nextSibling);\n }\n throwOnHydrationMismatch(fiber);\n }\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber)\n throw Error(\n \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n );\n nextHydratableInstance =\n getNextHydratableInstanceAfterSuspenseInstance(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n }\n function resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n didSuspendOrErrorDEV = isHydrating = !1;\n }\n function upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n }\n function queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n }\n function emitPendingHydrationWarnings() {\n var diffRoot = hydrationDiffRootDEV;\n if (null !== diffRoot) {\n hydrationDiffRootDEV = null;\n for (var diff = describeDiff(diffRoot); 0 < diffRoot.children.length; )\n diffRoot = diffRoot.children[0];\n runWithFiberInDEV(diffRoot.fiber, function () {\n console.error(\n \"A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\\n\\n- A server/client branch `if (typeof window !== 'undefined')`.\\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\\n- Date formatting in a user's locale which doesn't match the server.\\n- External changing data without sending a snapshot of it along with the HTML.\\n- Invalid HTML tag nesting.\\n\\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\\n\\n%s%s\",\n \"https://react.dev/link/hydration-mismatch\",\n diff\n );\n });\n }\n }\n function resetContextDependencies() {\n lastContextDependency = currentlyRenderingFiber$1 = null;\n isDisallowedContextReadInDEV = !1;\n }\n function pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue, providerFiber);\n context._currentValue = nextValue;\n push(rendererCursorDEV, context._currentRenderer, providerFiber);\n void 0 !== context._currentRenderer &&\n null !== context._currentRenderer &&\n context._currentRenderer !== rendererSigil &&\n console.error(\n \"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported.\"\n );\n context._currentRenderer = rendererSigil;\n }\n function popProvider(context, providerFiber) {\n context._currentValue = valueCursor.current;\n var currentRenderer = rendererCursorDEV.current;\n pop(rendererCursorDEV, providerFiber);\n context._currentRenderer = currentRenderer;\n pop(valueCursor, providerFiber);\n }\n function scheduleContextWorkOnParentPath(\n parent,\n renderLanes,\n propagationRoot\n ) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n parent !== propagationRoot &&\n console.error(\n \"Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n ) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber)\n throw Error(\n \"We just came from a parent so we must have had a parent. This is a bug in React.\"\n );\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n nextFiber,\n renderLanes,\n workInProgress\n );\n nextFiber = null;\n } else nextFiber = fiber.child;\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n }\n function propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n ) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent)\n throw Error(\"Should have a current fiber. This is a bug in React.\");\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current\n ? current.push(context)\n : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent)\n throw Error(\"Should have a current fiber. This is a bug in React.\");\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n }\n function checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n }\n function prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n }\n function readContext(context) {\n isDisallowedContextReadInDEV &&\n console.error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n }\n function readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n }\n function readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer)\n throw Error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n lastContextDependency = context;\n consumer.dependencies = {\n lanes: 0,\n firstContext: context,\n _debugThenableState: null\n };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n }\n function createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n }\n function retainCache(cache) {\n cache.controller.signal.aborted &&\n console.warn(\n \"A cache instance was retained after it was already freed. This likely indicates a bug in React.\"\n );\n cache.refCount++;\n }\n function releaseCache(cache) {\n cache.refCount--;\n 0 > cache.refCount &&\n console.warn(\n \"A cache instance was released after it was already freed. This likely indicates a bug in React.\"\n );\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n }\n function pushNestedEffectDurations() {\n var prevEffectDuration = profilerEffectDuration;\n profilerEffectDuration = 0;\n return prevEffectDuration;\n }\n function popNestedEffectDurations(prevEffectDuration) {\n var elapsedTime = profilerEffectDuration;\n profilerEffectDuration = prevEffectDuration;\n return elapsedTime;\n }\n function bubbleNestedEffectDurations(prevEffectDuration) {\n var elapsedTime = profilerEffectDuration;\n profilerEffectDuration += prevEffectDuration;\n return elapsedTime;\n }\n function startProfilerTimer(fiber) {\n profilerStartTime = now();\n 0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime);\n }\n function stopProfilerTimerIfRunningAndRecordDuration(fiber) {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n fiber.selfBaseDuration = elapsedTime;\n profilerStartTime = -1;\n }\n }\n function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n profilerStartTime = -1;\n }\n }\n function recordEffectDuration() {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n profilerStartTime = -1;\n profilerEffectDuration += elapsedTime;\n }\n }\n function startEffectTimer() {\n profilerStartTime = now();\n }\n function transferActualDuration(fiber) {\n for (var child = fiber.child; child; )\n (fiber.actualDuration += child.actualDuration), (child = child.sibling);\n }\n function entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n }\n function pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n null !== currentEntangledListeners\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n }\n function chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n }\n function peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n }\n function pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current, offscreenWorkInProgress)\n : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress);\n }\n function getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n }\n function createThenableState() {\n return { didWarnAboutUncachedPromise: !1, thenables: [] };\n }\n function isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n }\n function noop$3() {}\n function trackUsedThenable(thenableState, thenable, index) {\n null !== ReactSharedInternals.actQueue &&\n (ReactSharedInternals.didUsePromise = !0);\n var trackedThenables = thenableState.thenables;\n index = trackedThenables[index];\n void 0 === index\n ? trackedThenables.push(thenable)\n : index !== thenable &&\n (thenableState.didWarnAboutUncachedPromise ||\n ((thenableState.didWarnAboutUncachedPromise = !0),\n console.error(\n \"A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework.\"\n )),\n thenable.then(noop$3, noop$3),\n (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n default:\n if (\"string\" === typeof thenable.status)\n thenable.then(noop$3, noop$3);\n else {\n thenableState = workInProgressRoot;\n if (\n null !== thenableState &&\n 100 < thenableState.shellSuspendCounter\n )\n throw Error(\n \"An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n );\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n needsToResetSuspendedThenableDEV = !0;\n throw SuspenseException;\n }\n }\n function getSuspendedThenable() {\n if (null === suspendedThenable)\n throw Error(\n \"Expected a suspended thenable. This is a bug in React. Please file an issue.\"\n );\n var thenable = suspendedThenable;\n suspendedThenable = null;\n needsToResetSuspendedThenableDEV = !1;\n return thenable;\n }\n function checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(\n \"Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n );\n }\n function initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n }\n function cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n }\n function createUpdate(lane) {\n return {\n lane: lane,\n tag: UpdateState,\n payload: null,\n callback: null,\n next: null\n };\n }\n function enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (\n currentlyProcessingQueue === updateQueue &&\n !didWarnUpdateInsideUpdate\n ) {\n var componentName = getComponentNameFromFiber(fiber);\n console.error(\n \"An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.\\n\\nPlease update the following component: %s\",\n componentName\n );\n didWarnUpdateInsideUpdate = !0;\n }\n if ((executionContext & RenderContext) !== NoContext)\n return (\n (componentName = updateQueue.pending),\n null === componentName\n ? (update.next = update)\n : ((update.next = componentName.next),\n (componentName.next = update)),\n (updateQueue.pending = update),\n (update = getRootForUpdatedFiber(fiber)),\n markUpdateLaneFromFiberToRoot(fiber, null, lane),\n update\n );\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n }\n function enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n }\n function suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n }\n function processUpdateQueue(\n workInProgress,\n props,\n instance$jscomp$0,\n renderLanes\n ) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress.updateQueue;\n hasForceUpdate = !1;\n currentlyProcessingQueue = queue.shared;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n updateLane = workInProgress;\n var partialState = pendingQueue;\n var nextProps = props,\n instance = instance$jscomp$0;\n switch (partialState.tag) {\n case ReplaceState:\n partialState = partialState.payload;\n if (\"function\" === typeof partialState) {\n isDisallowedContextReadInDEV = !0;\n var nextState = partialState.call(\n instance,\n newState,\n nextProps\n );\n if (updateLane.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n partialState.call(instance, newState, nextProps);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n isDisallowedContextReadInDEV = !1;\n newState = nextState;\n break a;\n }\n newState = partialState;\n break a;\n case CaptureUpdate:\n updateLane.flags = (updateLane.flags & -65537) | 128;\n case UpdateState:\n nextState = partialState.payload;\n if (\"function\" === typeof nextState) {\n isDisallowedContextReadInDEV = !0;\n partialState = nextState.call(\n instance,\n newState,\n nextProps\n );\n if (updateLane.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n nextState.call(instance, newState, nextProps);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n isDisallowedContextReadInDEV = !1;\n } else partialState = nextState;\n if (null === partialState || void 0 === partialState) break a;\n newState = assign({}, newState, partialState);\n break a;\n case ForceUpdate:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress.flags |= 64),\n isHiddenUpdate && (workInProgress.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress.lanes = lastBaseUpdate;\n workInProgress.memoizedState = newState;\n }\n currentlyProcessingQueue = null;\n }\n function callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(\n \"Invalid argument passed as callback. Expected a function. Instead received: \" +\n callback\n );\n callback.call(context);\n }\n function commitHiddenCallbacks(updateQueue, context) {\n var hiddenCallbacks = updateQueue.shared.hiddenCallbacks;\n if (null !== hiddenCallbacks)\n for (\n updateQueue.shared.hiddenCallbacks = null, updateQueue = 0;\n updateQueue < hiddenCallbacks.length;\n updateQueue++\n )\n callCallback(hiddenCallbacks[updateQueue], context);\n }\n function commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n }\n function pushHiddenContext(fiber, context) {\n var prevEntangledRenderLanes = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber);\n push(currentTreeHiddenStackCursor, context, fiber);\n entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes;\n }\n function reuseHiddenContextOnStack(fiber) {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber);\n push(\n currentTreeHiddenStackCursor,\n currentTreeHiddenStackCursor.current,\n fiber\n );\n }\n function popHiddenContext(fiber) {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor, fiber);\n pop(prevEntangledRenderLanesCursor, fiber);\n }\n function mountHookTypesDev() {\n var hookName = currentHookNameInDev;\n null === hookTypesDev\n ? (hookTypesDev = [hookName])\n : hookTypesDev.push(hookName);\n }\n function updateHookTypesDev() {\n var hookName = currentHookNameInDev;\n if (\n null !== hookTypesDev &&\n (hookTypesUpdateIndexDev++,\n hookTypesDev[hookTypesUpdateIndexDev] !== hookName)\n ) {\n var componentName = getComponentNameFromFiber(currentlyRenderingFiber);\n if (\n !didWarnAboutMismatchedHooksForComponent.has(componentName) &&\n (didWarnAboutMismatchedHooksForComponent.add(componentName),\n null !== hookTypesDev)\n ) {\n for (var table = \"\", i = 0; i <= hookTypesUpdateIndexDev; i++) {\n var oldHookName = hookTypesDev[i],\n newHookName =\n i === hookTypesUpdateIndexDev ? hookName : oldHookName;\n for (\n oldHookName = i + 1 + \". \" + oldHookName;\n 30 > oldHookName.length;\n\n )\n oldHookName += \" \";\n oldHookName += newHookName + \"\\n\";\n table += oldHookName;\n }\n console.error(\n \"React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks\\n\\n Previous render Next render\\n ------------------------------------------------------\\n%s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n\",\n componentName,\n table\n );\n }\n }\n }\n function checkDepsAreArrayDev(deps) {\n void 0 === deps ||\n null === deps ||\n isArrayImpl(deps) ||\n console.error(\n \"%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.\",\n currentHookNameInDev,\n typeof deps\n );\n }\n function warnOnUseFormStateInDev() {\n var componentName = getComponentNameFromFiber(currentlyRenderingFiber);\n didWarnAboutUseFormState.has(componentName) ||\n (didWarnAboutUseFormState.add(componentName),\n console.error(\n \"ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.\",\n componentName\n ));\n }\n function throwInvalidHookError() {\n throw Error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n }\n function areHookInputsEqual(nextDeps, prevDeps) {\n if (ignorePreviousDependencies) return !1;\n if (null === prevDeps)\n return (\n console.error(\n \"%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.\",\n currentHookNameInDev\n ),\n !1\n );\n nextDeps.length !== prevDeps.length &&\n console.error(\n \"The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\\n\\nPrevious: %s\\nIncoming: %s\",\n currentHookNameInDev,\n \"[\" + prevDeps.join(\", \") + \"]\",\n \"[\" + nextDeps.join(\", \") + \"]\"\n );\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n }\n function renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n ) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n hookTypesDev = null !== current ? current._debugHookTypes : null;\n hookTypesUpdateIndexDev = -1;\n ignorePreviousDependencies =\n null !== current && current.type !== workInProgress.type;\n if (\n \"[object AsyncFunction]\" ===\n Object.prototype.toString.call(Component) ||\n \"[object AsyncGeneratorFunction]\" ===\n Object.prototype.toString.call(Component)\n )\n (nextRenderLanes = getComponentNameFromFiber(currentlyRenderingFiber)),\n didWarnAboutAsyncClientComponent.has(nextRenderLanes) ||\n (didWarnAboutAsyncClientComponent.add(nextRenderLanes),\n console.error(\n \"%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\",\n null === nextRenderLanes\n ? \"An unknown Component\"\n : \"<\" + nextRenderLanes + \">\"\n ));\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null !== current && null !== current.memoizedState\n ? HooksDispatcherOnUpdateInDEV\n : null !== hookTypesDev\n ? HooksDispatcherOnMountWithHookTypesInDEV\n : HooksDispatcherOnMountInDEV;\n shouldDoubleInvokeUserFnsInHooksDEV = nextRenderLanes =\n (workInProgress.mode & StrictLegacyMode) !== NoMode;\n var children = callComponentInDEV(Component, props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (children = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n if (nextRenderLanes) {\n setIsStrictModeForDevtools(!0);\n try {\n children = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n );\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n finishRenderingHooks(current, workInProgress);\n return children;\n }\n function finishRenderingHooks(current, workInProgress) {\n workInProgress._debugHookTypes = hookTypesDev;\n null === workInProgress.dependencies\n ? null !== thenableState$1 &&\n (workInProgress.dependencies = {\n lanes: 0,\n firstContext: null,\n _debugThenableState: thenableState$1\n })\n : (workInProgress.dependencies._debugThenableState = thenableState$1);\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks =\n null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n hookTypesDev =\n currentHookNameInDev =\n workInProgressHook =\n currentHook =\n currentlyRenderingFiber =\n null;\n hookTypesUpdateIndexDev = -1;\n null !== current &&\n (current.flags & 65011712) !== (workInProgress.flags & 65011712) &&\n console.error(\n \"Internal React error: Expected static flag was missing. Please notify the React team.\"\n );\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter$1 = 0;\n thenableState$1 = null;\n if (didRenderTooFewHooks)\n throw Error(\n \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\"\n );\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n needsToResetSuspendedThenableDEV\n ? ((needsToResetSuspendedThenableDEV = !1), (current = !0))\n : (current = !1);\n current &&\n ((workInProgress =\n getComponentNameFromFiber(workInProgress) || \"Unknown\"),\n didWarnAboutUseWrappedInTryCatch.has(workInProgress) ||\n didWarnAboutAsyncClientComponent.has(workInProgress) ||\n (didWarnAboutUseWrappedInTryCatch.add(workInProgress),\n console.error(\n \"`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary.\"\n )));\n }\n function renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);\n thenableIndexCounter$1 = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (numberOfReRenders >= RE_RENDER_LIMIT)\n throw Error(\n \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\"\n );\n numberOfReRenders += 1;\n ignorePreviousDependencies = !1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n hookTypesUpdateIndexDev = -1;\n ReactSharedInternals.H = HooksDispatcherOnRerenderInDEV;\n children = callComponentInDEV(Component, props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n }\n function TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !==\n dispatcher && (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n }\n function checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n }\n function bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags =\n (workInProgress.mode & StrictEffectsMode) !== NoMode\n ? workInProgress.flags & -402655237\n : workInProgress.flags & -2053;\n current.lanes &= ~lanes;\n }\n function resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n hookTypesDev =\n workInProgressHook =\n currentHook =\n currentlyRenderingFiber =\n null;\n hookTypesUpdateIndexDev = -1;\n currentHookNameInDev = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter$1 = localIdCounter = 0;\n thenableState$1 = null;\n }\n function mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n }\n function updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(\n \"Update hook called on initial render. This is likely a bug in React. Please file an issue.\"\n );\n throw Error(\"Rendered more hooks than during the previous render.\");\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n }\n function createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n }\n function useThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = createThenableState());\n thenable = trackUsedThenable(thenableState$1, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null !== index && null !== index.memoizedState\n ? HooksDispatcherOnUpdateInDEV\n : HooksDispatcherOnMountInDEV));\n return thenable;\n }\n function use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(\"An unsupported type was passed to use(): \" + String(usable));\n }\n function useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue || ignorePreviousDependencies)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size),\n current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n else\n updateQueue.length !== size &&\n console.error(\n \"Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.\",\n updateQueue.length,\n size\n );\n memoCache.index++;\n return updateQueue;\n }\n function basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n }\n function mountReducer(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n }\n function updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n }\n function updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\"\n );\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue !== baseQueue &&\n console.error(\n \"Internal error: Expected work-in-progress queue to be a clone. This is a bug in React.\"\n );\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n }\n function rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\"\n );\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do\n (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n }\n function mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(\n \"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\"\n );\n var nextSnapshot = getServerSnapshot();\n didWarnUncachedGetSnapshot ||\n nextSnapshot === getServerSnapshot() ||\n (console.error(\n \"The result of getServerSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n } else {\n nextSnapshot = getSnapshot();\n didWarnUncachedGetSnapshot ||\n ((getServerSnapshot = getSnapshot()),\n objectIs(nextSnapshot, getServerSnapshot) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0)));\n if (null === workInProgressRoot)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n 0 !== (workInProgressRootRenderLanes & 124) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n }\n hook.memoizedState = nextSnapshot;\n getServerSnapshot = { value: nextSnapshot, getSnapshot: getSnapshot };\n hook.queue = getServerSnapshot;\n mountEffect(\n subscribeToStore.bind(null, fiber, getServerSnapshot, subscribe),\n [subscribe]\n );\n fiber.flags |= 2048;\n pushSimpleEffect(\n HasEffect | Passive,\n createEffectInstance(),\n updateStoreInstance.bind(\n null,\n fiber,\n getServerSnapshot,\n nextSnapshot,\n getSnapshot\n ),\n null\n );\n return nextSnapshot;\n }\n function updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot)\n throw Error(\n \"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\"\n );\n getServerSnapshot = getServerSnapshot();\n } else if (\n ((getServerSnapshot = getSnapshot()), !didWarnUncachedGetSnapshot)\n ) {\n var cachedSnapshot = getSnapshot();\n objectIs(getServerSnapshot, cachedSnapshot) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n if (\n (cachedSnapshot = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n ))\n )\n (hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0);\n hook = hook.queue;\n var create = subscribeToStore.bind(null, fiber, hook, subscribe);\n updateEffectImpl(2048, Passive, create, [subscribe]);\n if (\n hook.getSnapshot !== getSnapshot ||\n cachedSnapshot ||\n (null !== workInProgressHook &&\n workInProgressHook.memoizedState.tag & HasEffect)\n ) {\n fiber.flags |= 2048;\n pushSimpleEffect(\n HasEffect | Passive,\n createEffectInstance(),\n updateStoreInstance.bind(\n null,\n fiber,\n hook,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n if (null === workInProgressRoot)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 124) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n }\n function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n }\n function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n }\n function subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n }\n function mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n }\n function mountState(initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n }\n function mountOptimistic(passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n }\n function updateOptimistic(passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n }\n function updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n }\n function rerenderOptimistic(passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n }\n function dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n ) {\n if (isRenderPhaseUpdate(fiber))\n throw Error(\"Cannot update form state while rendering.\");\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n }\n function runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n ReactSharedInternals.T._updatedFibers = new Set();\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n (ReactSharedInternals.T = prevTransition),\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((actionQueue = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < actionQueue &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n ));\n }\n } else\n try {\n (currentTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, currentTransition);\n } catch (error$4) {\n onActionError(actionQueue, node, error$4);\n }\n }\n function handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? (returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n ),\n node.isTransition ||\n console.error(\n \"An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop.\"\n ))\n : onActionSuccess(actionQueue, node, returnValue);\n }\n function onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n }\n function onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n }\n function notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n }\n function actionStateReducer(oldState, newState) {\n return newState;\n }\n function mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var isMatching = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var markerInstance = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== markerInstance.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n markerInstance = null;\n break b;\n }\n markerInstance = getNextHydratable(\n markerInstance.nextSibling\n );\n if (null === markerInstance) {\n markerInstance = null;\n break b;\n }\n }\n inRootOrSingleton = markerInstance.data;\n markerInstance =\n inRootOrSingleton === FORM_STATE_IS_MATCHING ||\n inRootOrSingleton === FORM_STATE_IS_NOT_MATCHING\n ? markerInstance\n : null;\n }\n if (markerInstance) {\n nextHydratableInstance = getNextHydratable(\n markerInstance.nextSibling\n );\n isMatching = markerInstance.data === FORM_STATE_IS_MATCHING;\n break a;\n }\n }\n throwOnHydrationMismatch(isMatching);\n }\n isMatching = !1;\n }\n isMatching && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n isMatching = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = isMatching;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n isMatching\n );\n isMatching.dispatch = ssrFormState;\n isMatching = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n isMatching.queue\n );\n isMatching = mountWorkInProgressHook();\n markerInstance = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n isMatching.queue = markerInstance;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n markerInstance,\n inRootOrSingleton,\n ssrFormState\n );\n markerInstance.dispatch = ssrFormState;\n isMatching.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n }\n function updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n }\n function updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n HasEffect | Passive,\n createEffectInstance(),\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n }\n function actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n }\n function rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n }\n function pushSimpleEffect(tag, inst, create, createDeps) {\n tag = {\n tag: tag,\n create: create,\n deps: createDeps,\n inst: inst,\n next: null\n };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((createDeps = create.next),\n (create.next = tag),\n (tag.next = createDeps),\n (inst.lastEffect = tag));\n return tag;\n }\n function createEffectInstance() {\n return { destroy: void 0, resource: void 0 };\n }\n function mountRef(initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n }\n function mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {\n var hook = mountWorkInProgressHook();\n createDeps = void 0 === createDeps ? null : createDeps;\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n HasEffect | hookFlags,\n createEffectInstance(),\n create,\n createDeps\n );\n }\n function updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n HasEffect | hookFlags,\n inst,\n create,\n deps\n )));\n }\n function mountEffect(create, createDeps) {\n (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&\n (currentlyRenderingFiber.mode & NoStrictPassiveEffectsMode) === NoMode\n ? mountEffectImpl(276826112, Passive, create, createDeps)\n : mountEffectImpl(8390656, Passive, create, createDeps);\n }\n function mountLayoutEffect(create, deps) {\n var fiberFlags = 4194308;\n (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&\n (fiberFlags |= 134217728);\n return mountEffectImpl(fiberFlags, Layout, create, deps);\n }\n function imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n ref.hasOwnProperty(\"current\") ||\n console.error(\n \"Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.\",\n \"an object with keys {\" + Object.keys(ref).join(\", \") + \"}\"\n ),\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n }\n function mountImperativeHandle(ref, create, deps) {\n \"function\" !== typeof create &&\n console.error(\n \"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\",\n null !== create ? typeof create : \"null\"\n );\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n var fiberFlags = 4194308;\n (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&\n (fiberFlags |= 134217728);\n mountEffectImpl(\n fiberFlags,\n Layout,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n }\n function updateImperativeHandle(ref, create, deps) {\n \"function\" !== typeof create &&\n console.error(\n \"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\",\n null !== create ? typeof create : \"null\"\n );\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(\n 4,\n Layout,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n }\n function mountCallback(callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n }\n function updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n }\n function mountMemo(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n }\n function updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n }\n function mountDeferredValue(value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n }\n function updateDeferredValue(value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n }\n function rerenderDeferredValue(value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n }\n function mountDeferredValueImpl(hook, value, initialValue) {\n if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n }\n function updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (0 === (renderLanes & 42))\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n }\n function startTransition(\n fiber,\n queue,\n pendingState,\n finishedState,\n callback\n ) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && previousPriority < ContinuousEventPriority\n ? previousPriority\n : ContinuousEventPriority;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n currentTransition._updatedFibers = new Set();\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane(fiber)\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition),\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((fiber = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < fiber &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n ));\n }\n }\n function startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag)\n throw Error(\n \"Expected the form instance to be a HostComponent. This is a bug in React.\"\n );\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n NotPendingTransition,\n null === action\n ? noop$2\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n }\n function ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: NotPendingTransition,\n baseState: NotPendingTransition,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: NotPendingTransition\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n }\n function requestFormReset$1(formFiber) {\n null === ReactSharedInternals.T &&\n console.error(\n \"requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition.\"\n );\n var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;\n dispatchSetStateInternal(\n formFiber,\n resetStateQueue,\n {},\n requestUpdateLane(formFiber)\n );\n }\n function mountTransition() {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n }\n function updateTransition() {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n }\n function rerenderTransition() {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n }\n function useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n }\n function mountId() {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var treeId = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n treeId =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + treeId;\n identifierPrefix = \"\\u00ab\" + identifierPrefix + \"R\" + treeId;\n treeId = localIdCounter++;\n 0 < treeId && (identifierPrefix += \"H\" + treeId.toString(32));\n identifierPrefix += \"\\u00bb\";\n } else\n (treeId = globalClientIdCounter++),\n (identifierPrefix =\n \"\\u00ab\" + identifierPrefix + \"r\" + treeId.toString(32) + \"\\u00bb\");\n return (hook.memoizedState = identifierPrefix);\n }\n function mountRefresh() {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n }\n function refreshCache(fiber, seedKey) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane(provider);\n fiber = createUpdate(lane);\n var root = enqueueUpdate(provider, fiber, lane);\n null !== root &&\n (scheduleUpdateOnFiber(root, provider, lane),\n entangleTransitions(root, provider, lane));\n provider = createCache();\n null !== seedKey &&\n void 0 !== seedKey &&\n null !== root &&\n console.error(\n \"The seed argument is not enabled outside experimental channels.\"\n );\n fiber.payload = { cache: provider };\n return;\n }\n provider = provider.return;\n }\n }\n function dispatchReducerAction(fiber, queue, action) {\n var args = arguments;\n \"function\" === typeof args[3] &&\n console.error(\n \"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"\n );\n args = requestUpdateLane(fiber);\n var update = {\n lane: args,\n revertLane: 0,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, update)\n : ((update = enqueueConcurrentHookUpdate(fiber, queue, update, args)),\n null !== update &&\n (scheduleUpdateOnFiber(update, fiber, args),\n entangleTransitionUpdate(update, queue, args)));\n markStateUpdateScheduled(fiber, args);\n }\n function dispatchSetState(fiber, queue, action) {\n var args = arguments;\n \"function\" === typeof args[3] &&\n console.error(\n \"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"\n );\n args = requestUpdateLane(fiber);\n dispatchSetStateInternal(fiber, queue, action, args);\n markStateUpdateScheduled(fiber, args);\n }\n function dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n ) {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot &&\n finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n }\n function dispatchOptimisticSetState(\n fiber,\n throwIfDuringRender,\n queue,\n action\n ) {\n null === ReactSharedInternals.T &&\n 0 === currentEntangledLane &&\n console.error(\n \"An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition.\"\n );\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender)\n throw Error(\"Cannot update optimistic state while rendering.\");\n console.error(\"Cannot call startTransition while rendering.\");\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n markStateUpdateScheduled(fiber, 2);\n }\n function isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n }\n function enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass =\n didScheduleRenderPhaseUpdate = !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n function entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n }\n function pushDebugInfo(debugInfo) {\n var previousDebugInfo = currentDebugInfo;\n null != debugInfo &&\n (currentDebugInfo =\n null === previousDebugInfo\n ? debugInfo\n : previousDebugInfo.concat(debugInfo));\n return previousDebugInfo;\n }\n function validateFragmentProps(element, fiber, returnFiber) {\n for (var keys = Object.keys(element.props), i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (\"children\" !== key && \"key\" !== key) {\n null === fiber &&\n ((fiber = createFiberFromElement(element, returnFiber.mode, 0)),\n (fiber._debugInfo = currentDebugInfo),\n (fiber.return = returnFiber));\n runWithFiberInDEV(\n fiber,\n function (erroredKey) {\n console.error(\n \"Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.\",\n erroredKey\n );\n },\n key\n );\n break;\n }\n }\n }\n function unwrapThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = createThenableState());\n return trackUsedThenable(thenableState, thenable, index);\n }\n function coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n }\n function throwOnInvalidObjectType(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(\n 'A React Element from an older version of React was rendered. This is not supported. It can happen if:\\n- Multiple copies of the \"react\" package is used.\\n- A library pre-bundled an old copy of \"react\" or \"react/jsx-runtime\".\\n- A compiler tries to \"inline\" JSX instead of using the runtime.'\n );\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n function warnOnFunctionType(returnFiber, invalidChild) {\n var parentName = getComponentNameFromFiber(returnFiber) || \"Component\";\n ownerHasFunctionTypeWarning[parentName] ||\n ((ownerHasFunctionTypeWarning[parentName] = !0),\n (invalidChild =\n invalidChild.displayName || invalidChild.name || \"Component\"),\n 3 === returnFiber.tag\n ? console.error(\n \"Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\\n root.render(%s)\",\n invalidChild,\n invalidChild,\n invalidChild\n )\n : console.error(\n \"Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\\n <%s>{%s}</%s>\",\n invalidChild,\n invalidChild,\n parentName,\n invalidChild,\n parentName\n ));\n }\n function warnOnSymbolType(returnFiber, invalidChild) {\n var parentName = getComponentNameFromFiber(returnFiber) || \"Component\";\n ownerHasSymbolTypeWarning[parentName] ||\n ((ownerHasSymbolTypeWarning[parentName] = !0),\n (invalidChild = String(invalidChild)),\n 3 === returnFiber.tag\n ? console.error(\n \"Symbols are not valid as a React child.\\n root.render(%s)\",\n invalidChild\n )\n : console.error(\n \"Symbols are not valid as a React child.\\n <%s>%s</%s>\",\n parentName,\n invalidChild,\n parentName\n ));\n }\n function createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]),\n (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n : existingChildren.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 67108866;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 67108866);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(\n textContent,\n returnFiber.mode,\n lanes\n )),\n (current.return = returnFiber),\n (current._debugOwner = returnFiber),\n (current._debugTask = returnFiber._debugTask),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return (\n (current = updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n )),\n validateFragmentProps(element, current, returnFiber),\n current\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n isCompatibleFamilyForHotReloading(current, element) ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n callLazyInitInDEV(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n (current._debugOwner = element._owner),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = createFiberFromElement(element, returnFiber.mode, lanes);\n coerceRef(current, element);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n (current._debugOwner = returnFiber),\n (current._debugTask = returnFiber._debugTask),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n (newChild._debugOwner = returnFiber),\n (newChild._debugTask = returnFiber._debugTask),\n (newChild._debugInfo = currentDebugInfo),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromElement(\n newChild,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = pushDebugInfo(newChild._debugInfo)),\n (lanes._debugInfo = currentDebugInfo),\n (currentDebugInfo = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n (newChild._debugInfo = currentDebugInfo),\n newChild\n );\n case REACT_LAZY_TYPE:\n var _prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n newChild = callLazyInitInDEV(newChild);\n returnFiber = createChild(returnFiber, newChild, lanes);\n currentDebugInfo = _prevDebugInfo;\n return returnFiber;\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (lanes = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugTask = returnFiber._debugTask),\n (returnFiber = pushDebugInfo(newChild._debugInfo)),\n (lanes._debugInfo = currentDebugInfo),\n (currentDebugInfo = returnFiber),\n lanes\n );\n if (\"function\" === typeof newChild.then)\n return (\n (_prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = createChild(\n returnFiber,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = _prevDebugInfo),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? ((key = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateElement(\n returnFiber,\n oldFiber,\n newChild,\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (key = pushDebugInfo(newChild._debugInfo)),\n (newChild = callLazyInitInDEV(newChild)),\n (returnFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChild,\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild)) {\n if (null !== key) return null;\n key = pushDebugInfo(newChild._debugInfo);\n returnFiber = updateFragment(\n returnFiber,\n oldFiber,\n newChild,\n lanes,\n null\n );\n currentDebugInfo = key;\n return returnFiber;\n }\n if (\"function\" === typeof newChild.then)\n return (\n (key = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (newIdx =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n (existingChildren = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateElement(\n returnFiber,\n newIdx,\n newChild,\n lanes\n )),\n (currentDebugInfo = existingChildren),\n returnFiber\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n var _prevDebugInfo7 = pushDebugInfo(newChild._debugInfo);\n newChild = callLazyInitInDEV(newChild);\n returnFiber = updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n );\n currentDebugInfo = _prevDebugInfo7;\n return returnFiber;\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newIdx = existingChildren.get(newIdx) || null),\n (existingChildren = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateFragment(\n returnFiber,\n newIdx,\n newChild,\n lanes,\n null\n )),\n (currentDebugInfo = existingChildren),\n returnFiber\n );\n if (\"function\" === typeof newChild.then)\n return (\n (_prevDebugInfo7 = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = _prevDebugInfo7),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys) {\n if (\"object\" !== typeof child || null === child) return knownKeys;\n switch (child.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n warnForMissingKey(returnFiber, workInProgress, child);\n var key = child.key;\n if (\"string\" !== typeof key) break;\n if (null === knownKeys) {\n knownKeys = new Set();\n knownKeys.add(key);\n break;\n }\n if (!knownKeys.has(key)) {\n knownKeys.add(key);\n break;\n }\n runWithFiberInDEV(workInProgress, function () {\n console.error(\n \"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted \\u2014 the behavior is unsupported and could change in a future version.\",\n key\n );\n });\n break;\n case REACT_LAZY_TYPE:\n (child = callLazyInitInDEV(child)),\n warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys);\n }\n return knownKeys;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var knownKeys = null,\n resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n knownKeys = warnOnInvalidKey(\n returnFiber,\n newFiber,\n newChildren[newIdx],\n knownKeys\n );\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n knownKeys\n )),\n (currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n nextOldFiber,\n newChildren[newIdx],\n knownKeys\n )),\n shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren)\n throw Error(\"An iterable object provided no iterator.\");\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n knownKeys = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n knownKeys = warnOnInvalidKey(\n returnFiber,\n newFiber,\n step.value,\n knownKeys\n );\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (oldFiber = createChild(returnFiber, step.value, lanes)),\n null !== oldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n oldFiber,\n step.value,\n knownKeys\n )),\n (currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n step.value,\n lanes\n )),\n null !== nextOldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n nextOldFiber,\n step.value,\n knownKeys\n )),\n shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n (validateFragmentProps(newChild, null, returnFiber),\n (newChild = newChild.props.children));\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n var prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n lanes.return = returnFiber;\n lanes._debugOwner = newChild._owner;\n lanes._debugInfo = currentDebugInfo;\n validateFragmentProps(newChild, lanes, returnFiber);\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n isCompatibleFamilyForHotReloading(\n currentFirstChild,\n newChild\n ) ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n callLazyInitInDEV(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n lanes._debugOwner = newChild._owner;\n lanes._debugInfo = currentDebugInfo;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugTask = returnFiber._debugTask),\n (lanes._debugInfo = currentDebugInfo),\n validateFragmentProps(newChild, lanes, returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromElement(\n newChild,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (lanes._debugInfo = currentDebugInfo),\n (returnFiber = lanes));\n }\n returnFiber = placeSingleChild(returnFiber);\n currentDebugInfo = prevDebugInfo;\n return returnFiber;\n case REACT_PORTAL_TYPE:\n a: {\n prevDebugInfo = newChild;\n for (\n newChild = prevDebugInfo.key;\n null !== currentFirstChild;\n\n ) {\n if (currentFirstChild.key === newChild)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n prevDebugInfo.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n prevDebugInfo.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n prevDebugInfo.children || []\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(\n prevDebugInfo,\n returnFiber.mode,\n lanes\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (newChild = callLazyInitInDEV(newChild)),\n (returnFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n }\n if (isArrayImpl(newChild))\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n if (getIteratorFn(newChild)) {\n prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key)\n throw Error(\n \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\"\n );\n var newChildren = key.call(newChild);\n if (newChildren === newChild) {\n if (\n 0 !== returnFiber.tag ||\n \"[object GeneratorFunction]\" !==\n Object.prototype.toString.call(returnFiber.type) ||\n \"[object Generator]\" !==\n Object.prototype.toString.call(newChildren)\n )\n didWarnAboutGenerators ||\n console.error(\n \"Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items.\"\n ),\n (didWarnAboutGenerators = !0);\n } else\n newChild.entries !== key ||\n didWarnAboutMaps ||\n (console.error(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0));\n returnFiber = reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n );\n currentDebugInfo = prevDebugInfo;\n return returnFiber;\n }\n if (\"function\" === typeof newChild.then)\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (prevDebugInfo = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n ),\n (lanes = useFiber(currentFirstChild, prevDebugInfo)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(\n prevDebugInfo,\n returnFiber.mode,\n lanes\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugTask = returnFiber._debugTask),\n (lanes._debugInfo = currentDebugInfo),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber)\n );\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n var prevDebugInfo = currentDebugInfo;\n currentDebugInfo = null;\n try {\n thenableIndexCounter = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiber(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n var debugInfo = (fiber._debugInfo = currentDebugInfo);\n fiber._debugOwner = returnFiber._debugOwner;\n fiber._debugTask = returnFiber._debugTask;\n if (null != debugInfo)\n for (var i = debugInfo.length - 1; 0 <= i; i--)\n if (\"string\" === typeof debugInfo[i].stack) {\n fiber._debugOwner = debugInfo[i];\n fiber._debugTask = debugInfo[i].debugTask;\n break;\n }\n return fiber;\n } finally {\n currentDebugInfo = prevDebugInfo;\n }\n };\n }\n function pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(\n suspenseStackCursor,\n suspenseStackCursor.current & SubtreeSuspenseContextMask,\n handler\n );\n push(suspenseHandlerStackCursor, handler, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n }\n function pushOffscreenSuspenseHandler(fiber) {\n if (22 === fiber.tag) {\n if (\n (push(suspenseStackCursor, suspenseStackCursor.current, fiber),\n push(suspenseHandlerStackCursor, fiber, fiber),\n null === shellBoundary)\n ) {\n var current = fiber.alternate;\n null !== current &&\n null !== current.memoizedState &&\n (shellBoundary = fiber);\n }\n } else reuseSuspenseHandlerOnStack(fiber);\n }\n function reuseSuspenseHandlerOnStack(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current, fiber);\n push(\n suspenseHandlerStackCursor,\n suspenseHandlerStackCursor.current,\n fiber\n );\n }\n function popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor, fiber);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor, fiber);\n }\n function findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n state.data === SUSPENSE_PENDING_START_DATA ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n void 0 !== node.memoizedProps.revealOrder\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n }\n function warnOnInvalidCallback(callback) {\n if (null !== callback && \"function\" !== typeof callback) {\n var key = String(callback);\n didWarnOnInvalidCallback.has(key) ||\n (didWarnOnInvalidCallback.add(key),\n console.error(\n \"Expected the last optional `callback` argument to be a function. Instead received: %s.\",\n callback\n ));\n }\n }\n function applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n ) {\n var prevState = workInProgress.memoizedState,\n partialState = getDerivedStateFromProps(nextProps, prevState);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n partialState = getDerivedStateFromProps(nextProps, prevState);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n void 0 === partialState &&\n ((ctor = getComponentNameFromType(ctor) || \"Component\"),\n didWarnAboutUndefinedDerivedState.has(ctor) ||\n (didWarnAboutUndefinedDerivedState.add(ctor),\n console.error(\n \"%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.\",\n ctor\n )));\n prevState =\n null === partialState || void 0 === partialState\n ? prevState\n : assign({}, prevState, partialState);\n workInProgress.memoizedState = prevState;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = prevState);\n }\n function checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n ) {\n var instance = workInProgress.stateNode;\n if (\"function\" === typeof instance.shouldComponentUpdate) {\n oldProps = instance.shouldComponentUpdate(\n newProps,\n newState,\n nextContext\n );\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n oldProps = instance.shouldComponentUpdate(\n newProps,\n newState,\n nextContext\n );\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n void 0 === oldProps &&\n console.error(\n \"%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.\",\n getComponentNameFromType(ctor) || \"Component\"\n );\n return oldProps;\n }\n return ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n }\n function callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n ) {\n var oldState = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== oldState &&\n ((workInProgress =\n getComponentNameFromFiber(workInProgress) || \"Component\"),\n didWarnAboutStateAssignmentForComponent.has(workInProgress) ||\n (didWarnAboutStateAssignmentForComponent.add(workInProgress),\n console.error(\n \"%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\",\n workInProgress\n )),\n classComponentUpdater.enqueueReplaceState(\n instance,\n instance.state,\n null\n ));\n }\n function resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var _propName in Component)\n void 0 === newProps[_propName] &&\n (newProps[_propName] = Component[_propName]);\n }\n return newProps;\n }\n function defaultOnUncaughtError(error) {\n reportGlobalError(error);\n console.warn(\n \"%s\\n\\n%s\\n\",\n componentName\n ? \"An error occurred in the <\" + componentName + \"> component.\"\n : \"An error occurred in one of your React components.\",\n \"Consider adding an error boundary to your tree to customize error handling behavior.\\nVisit https://react.dev/link/error-boundaries to learn more about error boundaries.\"\n );\n }\n function defaultOnCaughtError(error) {\n var componentNameMessage = componentName\n ? \"The above error occurred in the <\" + componentName + \"> component.\"\n : \"The above error occurred in one of your React components.\",\n recreateMessage =\n \"React will try to recreate this component tree from scratch using the error boundary you provided, \" +\n ((errorBoundaryName || \"Anonymous\") + \".\");\n if (\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.environmentName\n ) {\n var JSCompiler_inline_result = error.environmentName;\n error = [\n \"%o\\n\\n%s\\n\\n%s\\n\",\n error,\n componentNameMessage,\n recreateMessage\n ].slice(0);\n \"string\" === typeof error[0]\n ? error.splice(\n 0,\n 1,\n badgeFormat + error[0],\n badgeStyle,\n pad + JSCompiler_inline_result + pad,\n resetStyle\n )\n : error.splice(\n 0,\n 0,\n badgeFormat,\n badgeStyle,\n pad + JSCompiler_inline_result + pad,\n resetStyle\n );\n error.unshift(console);\n JSCompiler_inline_result = bind.apply(console.error, error);\n JSCompiler_inline_result();\n } else\n console.error(\n \"%o\\n\\n%s\\n\\n%s\\n\",\n error,\n componentNameMessage,\n recreateMessage\n );\n }\n function defaultOnRecoverableError(error) {\n reportGlobalError(error);\n }\n function logUncaughtError(root, errorInfo) {\n try {\n componentName = errorInfo.source\n ? getComponentNameFromFiber(errorInfo.source)\n : null;\n errorBoundaryName = null;\n var error = errorInfo.value;\n if (null !== ReactSharedInternals.actQueue)\n ReactSharedInternals.thrownErrors.push(error);\n else {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(error, { componentStack: errorInfo.stack });\n }\n } catch (e$5) {\n setTimeout(function () {\n throw e$5;\n });\n }\n }\n function logCaughtError(root, boundary, errorInfo) {\n try {\n componentName = errorInfo.source\n ? getComponentNameFromFiber(errorInfo.source)\n : null;\n errorBoundaryName = getComponentNameFromFiber(boundary);\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$6) {\n setTimeout(function () {\n throw e$6;\n });\n }\n }\n function createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = CaptureUpdate;\n lane.payload = { element: null };\n lane.callback = function () {\n runWithFiberInDEV(errorInfo.source, logUncaughtError, root, errorInfo);\n };\n return lane;\n }\n function createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = CaptureUpdate;\n return lane;\n }\n function initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n markFailedErrorBoundaryForHotReloading(fiber);\n runWithFiberInDEV(\n errorInfo.source,\n logCaughtError,\n root,\n fiber,\n errorInfo\n );\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n markFailedErrorBoundaryForHotReloading(fiber);\n runWithFiberInDEV(\n errorInfo.source,\n logCaughtError,\n root,\n fiber,\n errorInfo\n );\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n callComponentDidCatchInDEV(this, errorInfo);\n \"function\" === typeof getDerivedStateFromError ||\n (0 === (fiber.lanes & 2) &&\n console.error(\n \"%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.\",\n getComponentNameFromFiber(fiber) || \"Unknown\"\n ));\n });\n }\n function throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n ) {\n sourceFiber.flags |= 32768;\n isDevToolsPresent && restorePendingUpdaters(root, rootRenderLanes);\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n isHydrating && (didSuspendOrErrorDEV = !0);\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 13:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n workInProgressRootExitStatus === RootInProgress &&\n (workInProgressRootExitStatus = RootSuspended),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(\n \"Unexpected Suspense handler tag (\" +\n sourceFiber.tag +\n \"). This is a bug in React.\"\n );\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (didSuspendOrErrorDEV = !0),\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.\",\n { cause: value }\n ),\n sourceFiber\n )\n ))\n : (value !== HydrationMismatchException &&\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"There was an error while hydrating but React was able to recover by instead client rendering the entire root.\",\n { cause: value }\n ),\n sourceFiber\n )\n ),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n workInProgressRootExitStatus !== RootSuspendedWithDelay &&\n (workInProgressRootExitStatus = RootErrored)),\n !1\n );\n var error = createCapturedValueAtFiber(\n Error(\n \"There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.\",\n { cause: value }\n ),\n sourceFiber\n );\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [error])\n : workInProgressRootConcurrentErrors.push(error);\n workInProgressRootExitStatus !== RootSuspendedWithDelay &&\n (workInProgressRootExitStatus = RootErrored);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(\n sourceFiber.stateNode,\n value,\n root\n )),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n if (\n ((returnFiber = sourceFiber.type),\n (error = sourceFiber.stateNode),\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== error &&\n \"function\" === typeof error.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(error)))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n }\n function reconcileChildren(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n ) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n }\n function updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n }\n function updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (Component = resolveFunctionForHotReloading(type)),\n (workInProgress.tag = 15),\n (workInProgress.type = Component),\n validateFunctionComponentInDev(workInProgress, type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (\n Component(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n return bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n function updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref &&\n workInProgress.type === current.type\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n }\n function updateOffscreenComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n nextProps =\n null !== prevState\n ? prevState.baseLanes | renderLanes\n : renderLanes;\n if (null !== current) {\n nextChildren = workInProgress.child = current.child;\n for (prevState = 0; null !== nextChildren; )\n (prevState =\n prevState | nextChildren.lanes | nextChildren.childLanes),\n (nextChildren = nextChildren.sibling);\n workInProgress.childLanes = prevState & ~nextProps;\n } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextProps,\n renderLanes\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(workInProgress),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (workInProgress.lanes = workInProgress.childLanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState\n ? prevState.baseLanes | renderLanes\n : renderLanes,\n renderLanes\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(workInProgress),\n reuseSuspenseHandlerOnStack(workInProgress));\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n }\n function deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes\n ) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : {\n parent: CacheContext._currentValue,\n pool: JSCompiler_inline_result\n };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack(workInProgress);\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n return null;\n }\n function markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(\n \"Expected ref to be a function, an object returned by React.createRef(), or undefined/null.\"\n );\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n }\n function updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (\n Component.prototype &&\n \"function\" === typeof Component.prototype.render\n ) {\n var componentName = getComponentNameFromType(Component) || \"Unknown\";\n didWarnAboutBadClass[componentName] ||\n (console.error(\n \"The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.\",\n componentName,\n componentName\n ),\n (didWarnAboutBadClass[componentName] = !0));\n }\n workInProgress.mode & StrictLegacyMode &&\n ReactStrictModeWarnings.recordLegacyContextWarning(\n workInProgress,\n null\n );\n null === current &&\n (validateFunctionComponentInDev(workInProgress, workInProgress.type),\n Component.contextTypes &&\n ((componentName = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutContextTypes[componentName] ||\n ((didWarnAboutContextTypes[componentName] = !0),\n console.error(\n \"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)\",\n componentName\n ))));\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n }\n function replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n ) {\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n hookTypesUpdateIndexDev = -1;\n ignorePreviousDependencies =\n null !== current && current.type !== workInProgress.type;\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current, workInProgress);\n Component = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n }\n function updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n switch (shouldErrorImpl(workInProgress)) {\n case !1:\n var _instance = workInProgress.stateNode,\n state = new workInProgress.type(\n workInProgress.memoizedProps,\n _instance.context\n ).state;\n _instance.updater.enqueueSetState(_instance, state, null);\n break;\n case !0:\n workInProgress.flags |= 128;\n workInProgress.flags |= 65536;\n _instance = Error(\"Simulated error coming from DevTools\");\n var lane = renderLanes & -renderLanes;\n workInProgress.lanes |= lane;\n state = workInProgressRoot;\n if (null === state)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n lane = createClassErrorUpdate(lane);\n initializeClassErrorUpdate(\n lane,\n state,\n workInProgress,\n createCapturedValueAtFiber(_instance, workInProgress)\n );\n enqueueCapturedUpdate(workInProgress, lane);\n }\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n state = emptyContextObject;\n _instance = Component.contextType;\n \"contextType\" in Component &&\n null !== _instance &&\n (void 0 === _instance || _instance.$$typeof !== REACT_CONTEXT_TYPE) &&\n !didWarnAboutInvalidateContextType.has(Component) &&\n (didWarnAboutInvalidateContextType.add(Component),\n (lane =\n void 0 === _instance\n ? \" However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file.\"\n : \"object\" !== typeof _instance\n ? \" However, it is set to a \" + typeof _instance + \".\"\n : _instance.$$typeof === REACT_CONSUMER_TYPE\n ? \" Did you accidentally pass the Context.Consumer instead?\"\n : \" However, it is set to an object with keys {\" +\n Object.keys(_instance).join(\", \") +\n \"}.\"),\n console.error(\n \"%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s\",\n getComponentNameFromType(Component) || \"Component\",\n lane\n ));\n \"object\" === typeof _instance &&\n null !== _instance &&\n (state = readContext(_instance));\n _instance = new Component(nextProps, state);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n _instance = new Component(nextProps, state);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n state = workInProgress.memoizedState =\n null !== _instance.state && void 0 !== _instance.state\n ? _instance.state\n : null;\n _instance.updater = classComponentUpdater;\n workInProgress.stateNode = _instance;\n _instance._reactInternals = workInProgress;\n _instance._reactInternalInstance = fakeInternalInstance;\n \"function\" === typeof Component.getDerivedStateFromProps &&\n null === state &&\n ((state = getComponentNameFromType(Component) || \"Component\"),\n didWarnAboutUninitializedState.has(state) ||\n (didWarnAboutUninitializedState.add(state),\n console.error(\n \"`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.\",\n state,\n null === _instance.state ? \"null\" : \"undefined\",\n state\n )));\n if (\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate\n ) {\n var foundWillUpdateName = (lane = state = null);\n \"function\" === typeof _instance.componentWillMount &&\n !0 !== _instance.componentWillMount.__suppressDeprecationWarning\n ? (state = \"componentWillMount\")\n : \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n (state = \"UNSAFE_componentWillMount\");\n \"function\" === typeof _instance.componentWillReceiveProps &&\n !0 !==\n _instance.componentWillReceiveProps.__suppressDeprecationWarning\n ? (lane = \"componentWillReceiveProps\")\n : \"function\" ===\n typeof _instance.UNSAFE_componentWillReceiveProps &&\n (lane = \"UNSAFE_componentWillReceiveProps\");\n \"function\" === typeof _instance.componentWillUpdate &&\n !0 !== _instance.componentWillUpdate.__suppressDeprecationWarning\n ? (foundWillUpdateName = \"componentWillUpdate\")\n : \"function\" === typeof _instance.UNSAFE_componentWillUpdate &&\n (foundWillUpdateName = \"UNSAFE_componentWillUpdate\");\n if (null !== state || null !== lane || null !== foundWillUpdateName) {\n _instance = getComponentNameFromType(Component) || \"Component\";\n var newApiName =\n \"function\" === typeof Component.getDerivedStateFromProps\n ? \"getDerivedStateFromProps()\"\n : \"getSnapshotBeforeUpdate()\";\n didWarnAboutLegacyLifecyclesAndDerivedState.has(_instance) ||\n (didWarnAboutLegacyLifecyclesAndDerivedState.add(_instance),\n console.error(\n \"Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\nhttps://react.dev/link/unsafe-component-lifecycles\",\n _instance,\n newApiName,\n null !== state ? \"\\n \" + state : \"\",\n null !== lane ? \"\\n \" + lane : \"\",\n null !== foundWillUpdateName ? \"\\n \" + foundWillUpdateName : \"\"\n ));\n }\n }\n _instance = workInProgress.stateNode;\n state = getComponentNameFromType(Component) || \"Component\";\n _instance.render ||\n (Component.prototype &&\n \"function\" === typeof Component.prototype.render\n ? console.error(\n \"No `render` method found on the %s instance: did you accidentally return an object from the constructor?\",\n state\n )\n : console.error(\n \"No `render` method found on the %s instance: you may have forgotten to define `render`.\",\n state\n ));\n !_instance.getInitialState ||\n _instance.getInitialState.isReactClassApproved ||\n _instance.state ||\n console.error(\n \"getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?\",\n state\n );\n _instance.getDefaultProps &&\n !_instance.getDefaultProps.isReactClassApproved &&\n console.error(\n \"getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.\",\n state\n );\n _instance.contextType &&\n console.error(\n \"contextType was defined as an instance property on %s. Use a static property to define contextType instead.\",\n state\n );\n Component.childContextTypes &&\n !didWarnAboutChildContextTypes.has(Component) &&\n (didWarnAboutChildContextTypes.add(Component),\n console.error(\n \"%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)\",\n state\n ));\n Component.contextTypes &&\n !didWarnAboutContextTypes$1.has(Component) &&\n (didWarnAboutContextTypes$1.add(Component),\n console.error(\n \"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)\",\n state\n ));\n \"function\" === typeof _instance.componentShouldUpdate &&\n console.error(\n \"%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.\",\n state\n );\n Component.prototype &&\n Component.prototype.isPureReactComponent &&\n \"undefined\" !== typeof _instance.shouldComponentUpdate &&\n console.error(\n \"%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.\",\n getComponentNameFromType(Component) || \"A pure component\"\n );\n \"function\" === typeof _instance.componentDidUnmount &&\n console.error(\n \"%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?\",\n state\n );\n \"function\" === typeof _instance.componentDidReceiveProps &&\n console.error(\n \"%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().\",\n state\n );\n \"function\" === typeof _instance.componentWillRecieveProps &&\n console.error(\n \"%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?\",\n state\n );\n \"function\" === typeof _instance.UNSAFE_componentWillRecieveProps &&\n console.error(\n \"%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?\",\n state\n );\n lane = _instance.props !== nextProps;\n void 0 !== _instance.props &&\n lane &&\n console.error(\n \"When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.\",\n state\n );\n _instance.defaultProps &&\n console.error(\n \"Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.\",\n state,\n state\n );\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n \"function\" === typeof _instance.componentDidUpdate ||\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(Component) ||\n (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(Component),\n console.error(\n \"%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.\",\n getComponentNameFromType(Component)\n ));\n \"function\" === typeof _instance.getDerivedStateFromProps &&\n console.error(\n \"%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.\",\n state\n );\n \"function\" === typeof _instance.getDerivedStateFromError &&\n console.error(\n \"%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.\",\n state\n );\n \"function\" === typeof Component.getSnapshotBeforeUpdate &&\n console.error(\n \"%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.\",\n state\n );\n (lane = _instance.state) &&\n (\"object\" !== typeof lane || isArrayImpl(lane)) &&\n console.error(\"%s.state: must be set to an object or null\", state);\n \"function\" === typeof _instance.getChildContext &&\n \"object\" !== typeof Component.childContextTypes &&\n console.error(\n \"%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().\",\n state\n );\n _instance = workInProgress.stateNode;\n _instance.props = nextProps;\n _instance.state = workInProgress.memoizedState;\n _instance.refs = {};\n initializeUpdateQueue(workInProgress);\n state = Component.contextType;\n _instance.context =\n \"object\" === typeof state && null !== state\n ? readContext(state)\n : emptyContextObject;\n _instance.state === nextProps &&\n ((state = getComponentNameFromType(Component) || \"Component\"),\n didWarnAboutDirectlyAssigningPropsToState.has(state) ||\n (didWarnAboutDirectlyAssigningPropsToState.add(state),\n console.error(\n \"%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.\",\n state\n )));\n workInProgress.mode & StrictLegacyMode &&\n ReactStrictModeWarnings.recordLegacyContextWarning(\n workInProgress,\n _instance\n );\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(\n workInProgress,\n _instance\n );\n _instance.state = workInProgress.memoizedState;\n state = Component.getDerivedStateFromProps;\n \"function\" === typeof state &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n state,\n nextProps\n ),\n (_instance.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof _instance.componentWillMount) ||\n ((state = _instance.state),\n \"function\" === typeof _instance.componentWillMount &&\n _instance.componentWillMount(),\n \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n _instance.UNSAFE_componentWillMount(),\n state !== _instance.state &&\n (console.error(\n \"%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\",\n getComponentNameFromFiber(workInProgress) || \"Component\"\n ),\n classComponentUpdater.enqueueReplaceState(\n _instance,\n _instance.state,\n null\n )),\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (_instance.state = workInProgress.memoizedState));\n \"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308);\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728);\n _instance = !0;\n } else if (null === current) {\n _instance = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps;\n lane = resolveClassComponentProps(Component, unresolvedOldProps);\n _instance.props = lane;\n var oldContext = _instance.context;\n foundWillUpdateName = Component.contextType;\n state = emptyContextObject;\n \"object\" === typeof foundWillUpdateName &&\n null !== foundWillUpdateName &&\n (state = readContext(foundWillUpdateName));\n newApiName = Component.getDerivedStateFromProps;\n foundWillUpdateName =\n \"function\" === typeof newApiName ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n foundWillUpdateName ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof _instance.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== state) &&\n callComponentWillReceiveProps(\n workInProgress,\n _instance,\n nextProps,\n state\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n _instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof newApiName &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n newApiName,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (lane =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n lane,\n nextProps,\n oldState,\n oldContext,\n state\n ))\n ? (foundWillUpdateName ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof _instance.componentWillMount) ||\n (\"function\" === typeof _instance.componentWillMount &&\n _instance.componentWillMount(),\n \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n _instance.UNSAFE_componentWillMount()),\n \"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728))\n : (\"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (_instance.props = nextProps),\n (_instance.state = oldContext),\n (_instance.context = state),\n (_instance = lane))\n : (\"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728),\n (_instance = !1));\n } else {\n _instance = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n state = workInProgress.memoizedProps;\n foundWillUpdateName = resolveClassComponentProps(Component, state);\n _instance.props = foundWillUpdateName;\n newApiName = workInProgress.pendingProps;\n oldState = _instance.context;\n oldContext = Component.contextType;\n lane = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (lane = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof _instance.componentWillReceiveProps) ||\n ((state !== newApiName || oldState !== lane) &&\n callComponentWillReceiveProps(\n workInProgress,\n _instance,\n nextProps,\n lane\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n _instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n state !== newApiName ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (foundWillUpdateName =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n foundWillUpdateName,\n nextProps,\n oldState,\n newState,\n lane\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof _instance.componentWillUpdate) ||\n (\"function\" === typeof _instance.componentWillUpdate &&\n _instance.componentWillUpdate(nextProps, newState, lane),\n \"function\" === typeof _instance.UNSAFE_componentWillUpdate &&\n _instance.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n lane\n )),\n \"function\" === typeof _instance.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof _instance.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof _instance.componentDidUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (_instance.props = nextProps),\n (_instance.state = newState),\n (_instance.context = lane),\n (_instance = foundWillUpdateName))\n : (\"function\" !== typeof _instance.componentDidUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (_instance = !1));\n }\n lane = _instance;\n markRef(current, workInProgress);\n state = 0 !== (workInProgress.flags & 128);\n if (lane || state) {\n lane = workInProgress.stateNode;\n setCurrentFiber(workInProgress);\n if (state && \"function\" !== typeof Component.getDerivedStateFromError)\n (Component = null), (profilerStartTime = -1);\n else {\n markComponentRenderStarted(workInProgress);\n Component = callRenderInDEV(lane);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n callRenderInDEV(lane);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n markComponentRenderStopped();\n }\n workInProgress.flags |= 1;\n null !== current && state\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes);\n workInProgress.memoizedState = lane.state;\n current = workInProgress.child;\n } else\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n renderLanes = workInProgress.stateNode;\n _instance &&\n renderLanes.props !== nextProps &&\n (didWarnAboutReassigningProps ||\n console.error(\n \"It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.\",\n getComponentNameFromFiber(workInProgress) || \"a component\"\n ),\n (didWarnAboutReassigningProps = !0));\n return current;\n }\n function mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n ) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n }\n function validateFunctionComponentInDev(workInProgress, Component) {\n Component &&\n Component.childContextTypes &&\n console.error(\n \"childContextTypes cannot be defined on a function component.\\n %s.childContextTypes = ...\",\n Component.displayName || Component.name || \"Component\"\n );\n \"function\" === typeof Component.getDerivedStateFromProps &&\n ((workInProgress = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] ||\n (console.error(\n \"%s: Function components do not support getDerivedStateFromProps.\",\n workInProgress\n ),\n (didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] =\n !0)));\n \"object\" === typeof Component.contextType &&\n null !== Component.contextType &&\n ((Component = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutContextTypeOnFunctionComponent[Component] ||\n (console.error(\n \"%s: Function components do not support contextType.\",\n Component\n ),\n (didWarnAboutContextTypeOnFunctionComponent[Component] = !0)));\n }\n function mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n }\n function getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n ) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n }\n function updateSuspenseComponent(current, workInProgress, renderLanes) {\n var JSCompiler_object_inline_digest_2451;\n var JSCompiler_object_inline_stack_2452 = workInProgress.pendingProps;\n shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128);\n var JSCompiler_object_inline_componentStack_2453 = !1;\n var didSuspend = 0 !== (workInProgress.flags & 128);\n (JSCompiler_object_inline_digest_2451 = didSuspend) ||\n (JSCompiler_object_inline_digest_2451 =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback));\n JSCompiler_object_inline_digest_2451 &&\n ((JSCompiler_object_inline_componentStack_2453 = !0),\n (workInProgress.flags &= -129));\n JSCompiler_object_inline_digest_2451 = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n JSCompiler_object_inline_componentStack_2453\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack(workInProgress);\n if (isHydrating) {\n var JSCompiler_object_inline_message_2450 = nextHydratableInstance;\n var JSCompiler_temp;\n if (!(JSCompiler_temp = !JSCompiler_object_inline_message_2450)) {\n c: {\n var instance = JSCompiler_object_inline_message_2450;\n for (\n JSCompiler_temp = rootOrSingletonContext;\n 8 !== instance.nodeType;\n\n ) {\n if (!JSCompiler_temp) {\n JSCompiler_temp = null;\n break c;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) {\n JSCompiler_temp = null;\n break c;\n }\n }\n JSCompiler_temp = instance;\n }\n null !== JSCompiler_temp\n ? (warnIfNotHydrating(),\n (workInProgress.memoizedState = {\n dehydrated: JSCompiler_temp,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (instance = createFiber(18, null, null, NoMode)),\n (instance.stateNode = JSCompiler_temp),\n (instance.return = workInProgress),\n (workInProgress.child = instance),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (JSCompiler_temp = !0))\n : (JSCompiler_temp = !1);\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp &&\n (warnNonHydratedInstance(\n workInProgress,\n JSCompiler_object_inline_message_2450\n ),\n throwOnHydrationMismatch(workInProgress));\n }\n JSCompiler_object_inline_message_2450 = workInProgress.memoizedState;\n if (\n null !== JSCompiler_object_inline_message_2450 &&\n ((JSCompiler_object_inline_message_2450 =\n JSCompiler_object_inline_message_2450.dehydrated),\n null !== JSCompiler_object_inline_message_2450)\n )\n return (\n isSuspenseInstanceFallback(JSCompiler_object_inline_message_2450)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912),\n null\n );\n popSuspenseHandler(workInProgress);\n }\n JSCompiler_object_inline_message_2450 =\n JSCompiler_object_inline_stack_2452.children;\n JSCompiler_object_inline_stack_2452 =\n JSCompiler_object_inline_stack_2452.fallback;\n if (JSCompiler_object_inline_componentStack_2453)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (JSCompiler_object_inline_componentStack_2453 =\n workInProgress.mode),\n (JSCompiler_object_inline_message_2450 =\n mountWorkInProgressOffscreenFiber(\n {\n mode: \"hidden\",\n children: JSCompiler_object_inline_message_2450\n },\n JSCompiler_object_inline_componentStack_2453\n )),\n (JSCompiler_object_inline_stack_2452 = createFiberFromFragment(\n JSCompiler_object_inline_stack_2452,\n JSCompiler_object_inline_componentStack_2453,\n renderLanes,\n null\n )),\n (JSCompiler_object_inline_message_2450.return = workInProgress),\n (JSCompiler_object_inline_stack_2452.return = workInProgress),\n (JSCompiler_object_inline_message_2450.sibling =\n JSCompiler_object_inline_stack_2452),\n (workInProgress.child = JSCompiler_object_inline_message_2450),\n (JSCompiler_object_inline_componentStack_2453 =\n workInProgress.child),\n (JSCompiler_object_inline_componentStack_2453.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (JSCompiler_object_inline_componentStack_2453.childLanes =\n getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2451,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n JSCompiler_object_inline_stack_2452\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(\n workInProgress,\n JSCompiler_object_inline_message_2450\n );\n }\n var prevState = current.memoizedState;\n if (\n null !== prevState &&\n ((JSCompiler_object_inline_message_2450 = prevState.dehydrated),\n null !== JSCompiler_object_inline_message_2450)\n ) {\n if (didSuspend)\n workInProgress.flags & 256\n ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n (workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )))\n : null !== workInProgress.memoizedState\n ? (reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null))\n : (reuseSuspenseHandlerOnStack(workInProgress),\n (JSCompiler_object_inline_componentStack_2453 =\n JSCompiler_object_inline_stack_2452.fallback),\n (JSCompiler_object_inline_message_2450 = workInProgress.mode),\n (JSCompiler_object_inline_stack_2452 =\n mountWorkInProgressOffscreenFiber(\n {\n mode: \"visible\",\n children: JSCompiler_object_inline_stack_2452.children\n },\n JSCompiler_object_inline_message_2450\n )),\n (JSCompiler_object_inline_componentStack_2453 =\n createFiberFromFragment(\n JSCompiler_object_inline_componentStack_2453,\n JSCompiler_object_inline_message_2450,\n renderLanes,\n null\n )),\n (JSCompiler_object_inline_componentStack_2453.flags |= 2),\n (JSCompiler_object_inline_stack_2452.return = workInProgress),\n (JSCompiler_object_inline_componentStack_2453.return =\n workInProgress),\n (JSCompiler_object_inline_stack_2452.sibling =\n JSCompiler_object_inline_componentStack_2453),\n (workInProgress.child = JSCompiler_object_inline_stack_2452),\n reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n ),\n (JSCompiler_object_inline_stack_2452 = workInProgress.child),\n (JSCompiler_object_inline_stack_2452.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (JSCompiler_object_inline_stack_2452.childLanes =\n getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2451,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress =\n JSCompiler_object_inline_componentStack_2453));\n else if (\n (pushPrimaryTreeSuspenseHandler(workInProgress),\n isHydrating &&\n console.error(\n \"We should not be hydrating here. This is a bug in React. Please file a bug.\"\n ),\n isSuspenseInstanceFallback(JSCompiler_object_inline_message_2450))\n ) {\n JSCompiler_object_inline_digest_2451 =\n JSCompiler_object_inline_message_2450.nextSibling &&\n JSCompiler_object_inline_message_2450.nextSibling.dataset;\n if (JSCompiler_object_inline_digest_2451) {\n JSCompiler_temp = JSCompiler_object_inline_digest_2451.dgst;\n var message = JSCompiler_object_inline_digest_2451.msg;\n instance = JSCompiler_object_inline_digest_2451.stck;\n var componentStack = JSCompiler_object_inline_digest_2451.cstck;\n }\n JSCompiler_object_inline_message_2450 = message;\n JSCompiler_object_inline_digest_2451 = JSCompiler_temp;\n JSCompiler_object_inline_stack_2452 = instance;\n JSCompiler_temp = JSCompiler_object_inline_componentStack_2453 =\n componentStack;\n JSCompiler_object_inline_componentStack_2453 =\n JSCompiler_object_inline_message_2450\n ? Error(JSCompiler_object_inline_message_2450)\n : Error(\n \"The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering.\"\n );\n JSCompiler_object_inline_componentStack_2453.stack =\n JSCompiler_object_inline_stack_2452 || \"\";\n JSCompiler_object_inline_componentStack_2453.digest =\n JSCompiler_object_inline_digest_2451;\n JSCompiler_object_inline_digest_2451 =\n void 0 === JSCompiler_temp ? null : JSCompiler_temp;\n JSCompiler_object_inline_stack_2452 = {\n value: JSCompiler_object_inline_componentStack_2453,\n source: null,\n stack: JSCompiler_object_inline_digest_2451\n };\n \"string\" === typeof JSCompiler_object_inline_digest_2451 &&\n CapturedStacks.set(\n JSCompiler_object_inline_componentStack_2453,\n JSCompiler_object_inline_stack_2452\n );\n queueHydrationError(JSCompiler_object_inline_stack_2452);\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (JSCompiler_object_inline_digest_2451 =\n 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || JSCompiler_object_inline_digest_2451)\n ) {\n JSCompiler_object_inline_digest_2451 = workInProgressRoot;\n if (\n null !== JSCompiler_object_inline_digest_2451 &&\n ((JSCompiler_object_inline_stack_2452 = renderLanes & -renderLanes),\n (JSCompiler_object_inline_stack_2452 =\n 0 !== (JSCompiler_object_inline_stack_2452 & 42)\n ? 1\n : getBumpedLaneForHydrationByLane(\n JSCompiler_object_inline_stack_2452\n )),\n (JSCompiler_object_inline_stack_2452 =\n 0 !==\n (JSCompiler_object_inline_stack_2452 &\n (JSCompiler_object_inline_digest_2451.suspendedLanes |\n renderLanes))\n ? 0\n : JSCompiler_object_inline_stack_2452),\n 0 !== JSCompiler_object_inline_stack_2452 &&\n JSCompiler_object_inline_stack_2452 !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = JSCompiler_object_inline_stack_2452),\n enqueueConcurrentRenderForLane(\n current,\n JSCompiler_object_inline_stack_2452\n ),\n scheduleUpdateOnFiber(\n JSCompiler_object_inline_digest_2451,\n current,\n JSCompiler_object_inline_stack_2452\n ),\n SelectiveHydrationException)\n );\n JSCompiler_object_inline_message_2450.data ===\n SUSPENSE_PENDING_START_DATA || renderDidSuspendDelayIfPossible();\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n JSCompiler_object_inline_message_2450.data ===\n SUSPENSE_PENDING_START_DATA\n ? ((workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n (workInProgress = null))\n : ((current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(\n JSCompiler_object_inline_message_2450.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (didSuspendOrErrorDEV = !1),\n (hydrationDiffRootDEV = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n (warnIfNotHydrating(),\n (idStack[idStackIndex++] = treeContextId),\n (idStack[idStackIndex++] = treeContextOverflow),\n (idStack[idStackIndex++] = treeContextProvider),\n (treeContextId = current.id),\n (treeContextOverflow = current.overflow),\n (treeContextProvider = workInProgress)),\n (workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n JSCompiler_object_inline_stack_2452.children\n )),\n (workInProgress.flags |= 4096));\n return workInProgress;\n }\n if (JSCompiler_object_inline_componentStack_2453)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (JSCompiler_object_inline_componentStack_2453 =\n JSCompiler_object_inline_stack_2452.fallback),\n (JSCompiler_object_inline_message_2450 = workInProgress.mode),\n (JSCompiler_temp = current.child),\n (instance = JSCompiler_temp.sibling),\n (JSCompiler_object_inline_stack_2452 = createWorkInProgress(\n JSCompiler_temp,\n {\n mode: \"hidden\",\n children: JSCompiler_object_inline_stack_2452.children\n }\n )),\n (JSCompiler_object_inline_stack_2452.subtreeFlags =\n JSCompiler_temp.subtreeFlags & 65011712),\n null !== instance\n ? (JSCompiler_object_inline_componentStack_2453 =\n createWorkInProgress(\n instance,\n JSCompiler_object_inline_componentStack_2453\n ))\n : ((JSCompiler_object_inline_componentStack_2453 =\n createFiberFromFragment(\n JSCompiler_object_inline_componentStack_2453,\n JSCompiler_object_inline_message_2450,\n renderLanes,\n null\n )),\n (JSCompiler_object_inline_componentStack_2453.flags |= 2)),\n (JSCompiler_object_inline_componentStack_2453.return =\n workInProgress),\n (JSCompiler_object_inline_stack_2452.return = workInProgress),\n (JSCompiler_object_inline_stack_2452.sibling =\n JSCompiler_object_inline_componentStack_2453),\n (workInProgress.child = JSCompiler_object_inline_stack_2452),\n (JSCompiler_object_inline_stack_2452 =\n JSCompiler_object_inline_componentStack_2453),\n (JSCompiler_object_inline_componentStack_2453 = workInProgress.child),\n (JSCompiler_object_inline_message_2450 = current.child.memoizedState),\n null === JSCompiler_object_inline_message_2450\n ? (JSCompiler_object_inline_message_2450 =\n mountSuspenseOffscreenState(renderLanes))\n : ((JSCompiler_temp =\n JSCompiler_object_inline_message_2450.cachePool),\n null !== JSCompiler_temp\n ? ((instance = CacheContext._currentValue),\n (JSCompiler_temp =\n JSCompiler_temp.parent !== instance\n ? { parent: instance, pool: instance }\n : JSCompiler_temp))\n : (JSCompiler_temp = getSuspendedCache()),\n (JSCompiler_object_inline_message_2450 = {\n baseLanes:\n JSCompiler_object_inline_message_2450.baseLanes | renderLanes,\n cachePool: JSCompiler_temp\n })),\n (JSCompiler_object_inline_componentStack_2453.memoizedState =\n JSCompiler_object_inline_message_2450),\n (JSCompiler_object_inline_componentStack_2453.childLanes =\n getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2451,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n JSCompiler_object_inline_stack_2452\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: JSCompiler_object_inline_stack_2452.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_object_inline_digest_2451 = workInProgress.deletions),\n null === JSCompiler_object_inline_digest_2451\n ? ((workInProgress.deletions = [current]),\n (workInProgress.flags |= 16))\n : JSCompiler_object_inline_digest_2451.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n }\n function mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n }\n function mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiber(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n offscreenProps.stateNode = {\n _visibility: OffscreenVisible,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n };\n return offscreenProps;\n }\n function retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n }\n function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n fiber.return,\n renderLanes,\n propagationRoot\n );\n }\n function validateSuspenseListNestedChild(childSlot, index) {\n var isAnArray = isArrayImpl(childSlot);\n childSlot = !isAnArray && \"function\" === typeof getIteratorFn(childSlot);\n return isAnArray || childSlot\n ? ((isAnArray = isAnArray ? \"array\" : \"iterable\"),\n console.error(\n \"A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>\",\n isAnArray,\n index,\n isAnArray\n ),\n !1)\n : !0;\n }\n function initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode\n ) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode));\n }\n function updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n if (\n void 0 !== revealOrder &&\n \"forwards\" !== revealOrder &&\n \"backwards\" !== revealOrder &&\n \"together\" !== revealOrder &&\n !didWarnAboutRevealOrder[revealOrder]\n )\n if (\n ((didWarnAboutRevealOrder[revealOrder] = !0),\n \"string\" === typeof revealOrder)\n )\n switch (revealOrder.toLowerCase()) {\n case \"together\":\n case \"forwards\":\n case \"backwards\":\n console.error(\n '\"%s\" is not a valid value for revealOrder on <SuspenseList />. Use lowercase \"%s\" instead.',\n revealOrder,\n revealOrder.toLowerCase()\n );\n break;\n case \"forward\":\n case \"backward\":\n console.error(\n '\"%s\" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use \"%ss\" instead.',\n revealOrder,\n revealOrder.toLowerCase()\n );\n break;\n default:\n console.error(\n '\"%s\" is not a supported revealOrder on <SuspenseList />. Did you mean \"together\", \"forwards\" or \"backwards\"?',\n revealOrder\n );\n }\n else\n console.error(\n '%s is not a supported value for revealOrder on <SuspenseList />. Did you mean \"together\", \"forwards\" or \"backwards\"?',\n revealOrder\n );\n void 0 === tailMode ||\n didWarnAboutTailOptions[tailMode] ||\n (\"collapsed\" !== tailMode && \"hidden\" !== tailMode\n ? ((didWarnAboutTailOptions[tailMode] = !0),\n console.error(\n '\"%s\" is not a supported value for tail on <SuspenseList />. Did you mean \"collapsed\" or \"hidden\"?',\n tailMode\n ))\n : \"forwards\" !== revealOrder &&\n \"backwards\" !== revealOrder &&\n ((didWarnAboutTailOptions[tailMode] = !0),\n console.error(\n '<SuspenseList tail=\"%s\" /> is only valid if revealOrder is \"forwards\" or \"backwards\". Did you mean to specify revealOrder=\"forwards\"?',\n tailMode\n )));\n a: if (\n (\"forwards\" === revealOrder || \"backwards\" === revealOrder) &&\n void 0 !== nextProps &&\n null !== nextProps &&\n !1 !== nextProps\n )\n if (isArrayImpl(nextProps))\n for (var i = 0; i < nextProps.length; i++) {\n if (!validateSuspenseListNestedChild(nextProps[i], i)) break a;\n }\n else if (((i = getIteratorFn(nextProps)), \"function\" === typeof i)) {\n if ((i = i.call(nextProps)))\n for (var step = i.next(), _i = 0; !step.done; step = i.next()) {\n if (!validateSuspenseListNestedChild(step.value, _i)) break a;\n _i++;\n }\n } else\n console.error(\n 'A single row was passed to a <SuspenseList revealOrder=\"%s\" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',\n revealOrder\n );\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = suspenseStackCursor.current;\n if (0 !== (nextProps & ForceSuspenseFallback))\n (nextProps =\n (nextProps & SubtreeSuspenseContextMask) | ForceSuspenseFallback),\n (workInProgress.flags |= 128);\n else {\n if (null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(\n current,\n renderLanes,\n workInProgress\n );\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n nextProps &= SubtreeSuspenseContextMask;\n }\n push(suspenseStackCursor, nextProps, workInProgress);\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child),\n (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling),\n (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode\n );\n break;\n case \"backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode\n );\n break;\n case \"together\":\n initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n }\n function bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n profilerStartTime = -1;\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(\"Resuming work not yet implemented.\");\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n }\n function checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n }\n function attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n ) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n pushProvider(\n workInProgress,\n CacheContext,\n current.memoizedState.cache\n );\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 12:\n 0 !== (renderLanes & workInProgress.childLanes) &&\n (workInProgress.flags |= 4);\n workInProgress.flags |= 2048;\n var stateNode = workInProgress.stateNode;\n stateNode.effectDuration = -0;\n stateNode.passiveEffectDuration = -0;\n break;\n case 13:\n stateNode = workInProgress.memoizedState;\n if (null !== stateNode) {\n if (null !== stateNode.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(\n current,\n workInProgress,\n renderLanes\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n var didSuspendBefore = 0 !== (current.flags & 128);\n stateNode = 0 !== (renderLanes & workInProgress.childLanes);\n stateNode ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (stateNode = 0 !== (renderLanes & workInProgress.childLanes)));\n if (didSuspendBefore) {\n if (stateNode)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n didSuspendBefore = workInProgress.memoizedState;\n null !== didSuspendBefore &&\n ((didSuspendBefore.rendering = null),\n (didSuspendBefore.tail = null),\n (didSuspendBefore.lastEffect = null));\n push(\n suspenseStackCursor,\n suspenseStackCursor.current,\n workInProgress\n );\n if (stateNode) break;\n else return null;\n case 22:\n case 23:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(current, workInProgress, renderLanes)\n );\n case 24:\n pushProvider(\n workInProgress,\n CacheContext,\n current.memoizedState.cache\n );\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n function beginWork(current, workInProgress, renderLanes) {\n if (workInProgress._debugNeedsRemount && null !== current) {\n renderLanes = createFiberFromTypeAndProps(\n workInProgress.type,\n workInProgress.key,\n workInProgress.pendingProps,\n workInProgress._debugOwner || null,\n workInProgress.mode,\n workInProgress.lanes\n );\n renderLanes._debugStack = workInProgress._debugStack;\n renderLanes._debugTask = workInProgress._debugTask;\n var returnFiber = workInProgress.return;\n if (null === returnFiber) throw Error(\"Cannot swap the root fiber.\");\n current.alternate = null;\n workInProgress.alternate = null;\n renderLanes.index = workInProgress.index;\n renderLanes.sibling = workInProgress.sibling;\n renderLanes.return = workInProgress.return;\n renderLanes.ref = workInProgress.ref;\n renderLanes._debugInfo = workInProgress._debugInfo;\n if (workInProgress === returnFiber.child)\n returnFiber.child = renderLanes;\n else {\n var prevSibling = returnFiber.child;\n if (null === prevSibling)\n throw Error(\"Expected parent to have a child.\");\n for (; prevSibling.sibling !== workInProgress; )\n if (((prevSibling = prevSibling.sibling), null === prevSibling))\n throw Error(\"Expected to find the previous sibling.\");\n prevSibling.sibling = renderLanes;\n }\n workInProgress = returnFiber.deletions;\n null === workInProgress\n ? ((returnFiber.deletions = [current]), (returnFiber.flags |= 16))\n : workInProgress.push(current);\n renderLanes.flags |= 2;\n return renderLanes;\n }\n if (null !== current)\n if (\n current.memoizedProps !== workInProgress.pendingProps ||\n workInProgress.type !== current.type\n )\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else {\n didReceiveUpdate = !1;\n if ((returnFiber = isHydrating))\n warnIfNotHydrating(),\n (returnFiber = 0 !== (workInProgress.flags & 1048576));\n returnFiber &&\n ((returnFiber = workInProgress.index),\n warnIfNotHydrating(),\n pushTreeId(workInProgress, treeForkCount, returnFiber));\n }\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: if (\n ((returnFiber = workInProgress.pendingProps),\n (current = callLazyInitInDEV(workInProgress.elementType)),\n (workInProgress.type = current),\n \"function\" === typeof current)\n )\n shouldConstruct(current)\n ? ((returnFiber = resolveClassComponentProps(\n current,\n returnFiber\n )),\n (workInProgress.tag = 1),\n (workInProgress.type = current =\n resolveFunctionForHotReloading(current)),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n validateFunctionComponentInDev(workInProgress, current),\n (workInProgress.type = current =\n resolveFunctionForHotReloading(current)),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current)\n if (\n ((prevSibling = current.$$typeof),\n prevSibling === REACT_FORWARD_REF_TYPE)\n ) {\n workInProgress.tag = 11;\n workInProgress.type = current =\n resolveForwardRefForHotReloading(current);\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n );\n break a;\n } else if (prevSibling === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n );\n break a;\n }\n workInProgress = \"\";\n null !== current &&\n \"object\" === typeof current &&\n current.$$typeof === REACT_LAZY_TYPE &&\n (workInProgress =\n \" Did you wrap a component in React.lazy() more than once?\");\n current = getComponentNameFromType(current) || current;\n throw Error(\n \"Element type is invalid. Received a promise that resolves to: \" +\n current +\n \". Lazy element type must resolve to a class or function.\" +\n workInProgress\n );\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (returnFiber = workInProgress.type),\n (prevSibling = resolveClassComponentProps(\n returnFiber,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n returnFiber,\n prevSibling,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current)\n throw Error(\n \"Should have a current fiber. This is a bug in React.\"\n );\n returnFiber = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n prevSibling = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, returnFiber, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n returnFiber = nextState.cache;\n pushProvider(workInProgress, CacheContext, returnFiber);\n returnFiber !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n returnFiber = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: returnFiber,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n );\n break a;\n } else if (returnFiber !== prevSibling) {\n prevSibling = createCapturedValueAtFiber(\n Error(\n \"This root received an early update, before anything was able hydrate. Switched the entire root to client rendering.\"\n ),\n workInProgress\n );\n queueHydrationError(prevSibling);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n didSuspendOrErrorDEV = !1;\n hydrationDiffRootDEV = null;\n rootOrSingletonContext = !0;\n current = mountChildFibers(\n workInProgress,\n null,\n returnFiber,\n renderLanes\n );\n for (workInProgress.child = current; current; )\n (current.flags = (current.flags & -3) | 4096),\n (current = current.sibling);\n }\n else {\n resetHydrationState();\n if (returnFiber === prevSibling) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n );\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (current = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = current)\n : isHydrating ||\n ((current = workInProgress.type),\n (renderLanes = workInProgress.pendingProps),\n (returnFiber = requiredContext(\n rootInstanceStackCursor.current\n )),\n (returnFiber =\n getOwnerDocumentFromRootContainer(\n returnFiber\n ).createElement(current)),\n (returnFiber[internalInstanceKey] = workInProgress),\n (returnFiber[internalPropsKey] = renderLanes),\n setInitialProperties(returnFiber, current, renderLanes),\n markNodeAsHoistable(returnFiber),\n (workInProgress.stateNode = returnFiber))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((returnFiber = requiredContext(rootInstanceStackCursor.current)),\n (prevSibling = getHostContext()),\n (returnFiber = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n returnFiber,\n prevSibling,\n !1\n )),\n didSuspendOrErrorDEV ||\n ((prevSibling = diffHydratedProperties(\n returnFiber,\n workInProgress.type,\n workInProgress.pendingProps,\n prevSibling\n )),\n null !== prevSibling &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n prevSibling)),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n (prevSibling = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = prevSibling),\n (nextHydratableInstance = getNextHydratable(\n returnFiber.firstChild\n )))\n : (nextHydratableInstance = prevSibling)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n return (\n null === current &&\n isHydrating &&\n ((prevState = getHostContext()),\n (returnFiber = validateDOMNesting(\n workInProgress.type,\n prevState.ancestorInfo\n )),\n (prevSibling = nextHydratableInstance),\n (nextState = !prevSibling) ||\n ((nextState = canHydrateInstance(\n prevSibling,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== nextState\n ? ((workInProgress.stateNode = nextState),\n didSuspendOrErrorDEV ||\n ((prevState = diffHydratedProperties(\n nextState,\n workInProgress.type,\n workInProgress.pendingProps,\n prevState\n )),\n null !== prevState &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n prevState)),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(\n nextState.firstChild\n )),\n (rootOrSingletonContext = !1),\n (prevState = !0))\n : (prevState = !1),\n (nextState = !prevState)),\n nextState &&\n (returnFiber &&\n warnNonHydratedInstance(workInProgress, prevSibling),\n throwOnHydrationMismatch(workInProgress))),\n pushHostContext(workInProgress),\n (prevSibling = workInProgress.type),\n (prevState = workInProgress.pendingProps),\n (nextState = null !== current ? current.memoizedProps : null),\n (returnFiber = prevState.children),\n shouldSetTextContent(prevSibling, prevState)\n ? (returnFiber = null)\n : null !== nextState &&\n shouldSetTextContent(prevSibling, nextState) &&\n (workInProgress.flags |= 32),\n null !== workInProgress.memoizedState &&\n ((prevSibling = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = prevSibling)),\n markRef(current, workInProgress),\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 6:\n return (\n null === current &&\n isHydrating &&\n ((current = workInProgress.pendingProps),\n (renderLanes = getHostContext()),\n (returnFiber = renderLanes.ancestorInfo.current),\n (current =\n null != returnFiber\n ? validateTextNesting(\n current,\n returnFiber.tag,\n renderLanes.ancestorInfo.implicitRootScope\n )\n : !0),\n (renderLanes = nextHydratableInstance),\n (returnFiber = !renderLanes) ||\n ((returnFiber = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== returnFiber\n ? ((workInProgress.stateNode = returnFiber),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (returnFiber = !0))\n : (returnFiber = !1),\n (returnFiber = !returnFiber)),\n returnFiber &&\n (current &&\n warnNonHydratedInstance(workInProgress, renderLanes),\n throwOnHydrationMismatch(workInProgress))),\n null\n );\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (returnFiber = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n returnFiber,\n renderLanes\n ))\n : reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n (workInProgress.flags |= 4),\n (workInProgress.flags |= 2048),\n (returnFiber = workInProgress.stateNode),\n (returnFiber.effectDuration = -0),\n (returnFiber.passiveEffectDuration = -0),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return (\n (returnFiber = workInProgress.type),\n (prevSibling = workInProgress.pendingProps),\n (prevState = prevSibling.value),\n \"value\" in prevSibling ||\n hasWarnedAboutUsingNoValuePropOnContextProvider ||\n ((hasWarnedAboutUsingNoValuePropOnContextProvider = !0),\n console.error(\n \"The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?\"\n )),\n pushProvider(workInProgress, returnFiber, prevState),\n reconcileChildren(\n current,\n workInProgress,\n prevSibling.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 9:\n return (\n (prevSibling = workInProgress.type._context),\n (returnFiber = workInProgress.pendingProps.children),\n \"function\" !== typeof returnFiber &&\n console.error(\n \"A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it.\"\n ),\n prepareToReadContext(workInProgress),\n (prevSibling = readContext(prevSibling)),\n markComponentRenderStarted(workInProgress),\n (returnFiber = callComponentInDEV(\n returnFiber,\n prevSibling,\n void 0\n )),\n markComponentRenderStopped(),\n (workInProgress.flags |= 1),\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n case 31:\n return (\n (returnFiber = workInProgress.pendingProps),\n (renderLanes = workInProgress.mode),\n (returnFiber = {\n mode: returnFiber.mode,\n children: returnFiber.children\n }),\n null === current\n ? ((current = mountWorkInProgressOffscreenFiber(\n returnFiber,\n renderLanes\n )),\n (current.ref = workInProgress.ref),\n (workInProgress.child = current),\n (current.return = workInProgress),\n (workInProgress = current))\n : ((current = createWorkInProgress(current.child, returnFiber)),\n (current.ref = workInProgress.ref),\n (workInProgress.child = current),\n (current.return = workInProgress),\n (workInProgress = current)),\n workInProgress\n );\n case 22:\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (returnFiber = readContext(CacheContext)),\n null === current\n ? ((prevSibling = peekCacheFromPool()),\n null === prevSibling &&\n ((prevSibling = workInProgressRoot),\n (prevState = createCache()),\n (prevSibling.pooledCache = prevState),\n retainCache(prevState),\n null !== prevState &&\n (prevSibling.pooledCacheLanes |= renderLanes),\n (prevSibling = prevState)),\n (workInProgress.memoizedState = {\n parent: returnFiber,\n cache: prevSibling\n }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, prevSibling))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n (prevSibling = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n prevSibling.parent !== returnFiber\n ? ((prevSibling = {\n parent: returnFiber,\n cache: returnFiber\n }),\n (workInProgress.memoizedState = prevSibling),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n prevSibling),\n pushProvider(workInProgress, CacheContext, returnFiber))\n : ((returnFiber = prevState.cache),\n pushProvider(workInProgress, CacheContext, returnFiber),\n returnFiber !== prevSibling.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n }\n function preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\n \"stylesheet\" !== resource.type ||\n (resource.state.loading & Inserted) !== NotLoaded\n )\n workInProgress.flags &= -16777217;\n else if (\n ((workInProgress.flags |= 16777216), !preloadResource(resource))\n ) {\n resource = suspenseHandlerStackCursor.current;\n if (\n null !== resource &&\n ((workInProgressRootRenderLanes & 4194048) ===\n workInProgressRootRenderLanes\n ? null !== shellBoundary\n : ((workInProgressRootRenderLanes & 62914560) !==\n workInProgressRootRenderLanes &&\n 0 === (workInProgressRootRenderLanes & 536870912)) ||\n resource !== shellBoundary)\n )\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n workInProgress.flags |= 8192;\n }\n }\n function scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n }\n function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var _lastTailNode = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (_lastTailNode = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === _lastTailNode\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (_lastTailNode.sibling = null);\n }\n }\n function bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n if ((completedWork.mode & ProfileMode) !== NoMode) {\n for (\n var _treeBaseDuration = completedWork.selfBaseDuration,\n _child2 = completedWork.child;\n null !== _child2;\n\n )\n (newChildLanes |= _child2.lanes | _child2.childLanes),\n (subtreeFlags |= _child2.subtreeFlags & 65011712),\n (subtreeFlags |= _child2.flags & 65011712),\n (_treeBaseDuration += _child2.treeBaseDuration),\n (_child2 = _child2.sibling);\n completedWork.treeBaseDuration = _treeBaseDuration;\n } else\n for (\n _treeBaseDuration = completedWork.child;\n null !== _treeBaseDuration;\n\n )\n (newChildLanes |=\n _treeBaseDuration.lanes | _treeBaseDuration.childLanes),\n (subtreeFlags |= _treeBaseDuration.subtreeFlags & 65011712),\n (subtreeFlags |= _treeBaseDuration.flags & 65011712),\n (_treeBaseDuration.return = completedWork),\n (_treeBaseDuration = _treeBaseDuration.sibling);\n else if ((completedWork.mode & ProfileMode) !== NoMode) {\n _treeBaseDuration = completedWork.actualDuration;\n _child2 = completedWork.selfBaseDuration;\n for (var child = completedWork.child; null !== child; )\n (newChildLanes |= child.lanes | child.childLanes),\n (subtreeFlags |= child.subtreeFlags),\n (subtreeFlags |= child.flags),\n (_treeBaseDuration += child.actualDuration),\n (_child2 += child.treeBaseDuration),\n (child = child.sibling);\n completedWork.actualDuration = _treeBaseDuration;\n completedWork.treeBaseDuration = _child2;\n } else\n for (\n _treeBaseDuration = completedWork.child;\n null !== _treeBaseDuration;\n\n )\n (newChildLanes |=\n _treeBaseDuration.lanes | _treeBaseDuration.childLanes),\n (subtreeFlags |= _treeBaseDuration.subtreeFlags),\n (subtreeFlags |= _treeBaseDuration.flags),\n (_treeBaseDuration.return = completedWork),\n (_treeBaseDuration = _treeBaseDuration.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n }\n function completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 31:\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext, workInProgress);\n popHostContainer(workInProgress);\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? (emitPendingHydrationWarnings(), markUpdate(workInProgress))\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n return (\n (renderLanes = workInProgress.memoizedState),\n null === current\n ? (markUpdate(workInProgress),\n null !== renderLanes\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(\n workInProgress,\n renderLanes\n ))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217)))\n : renderLanes\n ? renderLanes !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(\n workInProgress,\n renderLanes\n ))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : (current.memoizedProps !== newProps &&\n markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217)),\n null\n );\n case 27:\n popHostContext(workInProgress);\n renderLanes = requiredContext(rootInstanceStackCursor.current);\n var _type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n bubbleProperties(workInProgress);\n return null;\n }\n current = getHostContext();\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(\n _type,\n newProps,\n renderLanes,\n current,\n !0\n )),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n return null;\n case 5:\n popHostContext(workInProgress);\n renderLanes = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n bubbleProperties(workInProgress);\n return null;\n }\n _type = getHostContext();\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, _type);\n else {\n current = requiredContext(rootInstanceStackCursor.current);\n validateDOMNesting(renderLanes, _type.ancestorInfo);\n _type = _type.context;\n current = getOwnerDocumentFromRootContainer(current);\n switch (_type) {\n case HostContextNamespaceSvg:\n current = current.createElementNS(SVG_NAMESPACE, renderLanes);\n break;\n case HostContextNamespaceMath:\n current = current.createElementNS(\n MATH_NAMESPACE,\n renderLanes\n );\n break;\n default:\n switch (renderLanes) {\n case \"svg\":\n current = current.createElementNS(\n SVG_NAMESPACE,\n renderLanes\n );\n break;\n case \"math\":\n current = current.createElementNS(\n MATH_NAMESPACE,\n renderLanes\n );\n break;\n case \"script\":\n current = current.createElement(\"div\");\n current.innerHTML = \"<script>\\x3c/script>\";\n current = current.removeChild(current.firstChild);\n break;\n case \"select\":\n current =\n \"string\" === typeof newProps.is\n ? current.createElement(\"select\", { is: newProps.is })\n : current.createElement(\"select\");\n newProps.multiple\n ? (current.multiple = !0)\n : newProps.size && (current.size = newProps.size);\n break;\n default:\n (current =\n \"string\" === typeof newProps.is\n ? current.createElement(renderLanes, {\n is: newProps.is\n })\n : current.createElement(renderLanes)),\n -1 === renderLanes.indexOf(\"-\") &&\n (renderLanes !== renderLanes.toLowerCase() &&\n console.error(\n \"<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.\",\n renderLanes\n ),\n \"[object HTMLUnknownElement]\" !==\n Object.prototype.toString.call(current) ||\n hasOwnProperty.call(\n warnedUnknownTags,\n renderLanes\n ) ||\n ((warnedUnknownTags[renderLanes] = !0),\n console.error(\n \"The tag <%s> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.\",\n renderLanes\n )));\n }\n }\n current[internalInstanceKey] = workInProgress;\n current[internalPropsKey] = newProps;\n a: for (_type = workInProgress.child; null !== _type; ) {\n if (5 === _type.tag || 6 === _type.tag)\n current.appendChild(_type.stateNode);\n else if (\n 4 !== _type.tag &&\n 27 !== _type.tag &&\n null !== _type.child\n ) {\n _type.child.return = _type;\n _type = _type.child;\n continue;\n }\n if (_type === workInProgress) break a;\n for (; null === _type.sibling; ) {\n if (null === _type.return || _type.return === workInProgress)\n break a;\n _type = _type.return;\n }\n _type.sibling.return = _type.return;\n _type = _type.sibling;\n }\n workInProgress.stateNode = current;\n a: switch (\n (setInitialProperties(current, renderLanes, newProps),\n renderLanes)\n ) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n current = !!newProps.autoFocus;\n break a;\n case \"img\":\n current = !0;\n break a;\n default:\n current = !1;\n }\n current && markUpdate(workInProgress);\n }\n }\n bubbleProperties(workInProgress);\n workInProgress.flags &= -16777217;\n return null;\n case 6:\n if (current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (\n \"string\" !== typeof newProps &&\n null === workInProgress.stateNode\n )\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n current = requiredContext(rootInstanceStackCursor.current);\n renderLanes = getHostContext();\n if (popHydrationState(workInProgress)) {\n current = workInProgress.stateNode;\n renderLanes = workInProgress.memoizedProps;\n _type = !didSuspendOrErrorDEV;\n newProps = null;\n var returnFiber = hydrationParentFiber;\n if (null !== returnFiber)\n switch (returnFiber.tag) {\n case 3:\n _type &&\n ((_type = diffHydratedTextForDevWarnings(\n current,\n renderLanes,\n newProps\n )),\n null !== _type &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n _type));\n break;\n case 27:\n case 5:\n (newProps = returnFiber.memoizedProps),\n _type &&\n ((_type = diffHydratedTextForDevWarnings(\n current,\n renderLanes,\n newProps\n )),\n null !== _type &&\n (buildHydrationDiffNode(\n workInProgress,\n 0\n ).serverProps = _type));\n }\n current[internalInstanceKey] = workInProgress;\n current =\n current.nodeValue === renderLanes ||\n (null !== newProps &&\n !0 === newProps.suppressHydrationWarning) ||\n checkForUnmatchedText(current.nodeValue, renderLanes)\n ? !0\n : !1;\n current || throwOnHydrationMismatch(workInProgress);\n } else\n (_type = renderLanes.ancestorInfo.current),\n null != _type &&\n validateTextNesting(\n newProps,\n _type.tag,\n renderLanes.ancestorInfo.implicitRootScope\n ),\n (current =\n getOwnerDocumentFromRootContainer(current).createTextNode(\n newProps\n )),\n (current[internalInstanceKey] = workInProgress),\n (workInProgress.stateNode = current);\n }\n bubbleProperties(workInProgress);\n return null;\n case 13:\n newProps = workInProgress.memoizedState;\n if (\n null === current ||\n (null !== current.memoizedState &&\n null !== current.memoizedState.dehydrated)\n ) {\n _type = popHydrationState(workInProgress);\n if (null !== newProps && null !== newProps.dehydrated) {\n if (null === current) {\n if (!_type)\n throw Error(\n \"A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.\"\n );\n _type = workInProgress.memoizedState;\n _type = null !== _type ? _type.dehydrated : null;\n if (!_type)\n throw Error(\n \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n );\n _type[internalInstanceKey] = workInProgress;\n bubbleProperties(workInProgress);\n (workInProgress.mode & ProfileMode) !== NoMode &&\n null !== newProps &&\n ((_type = workInProgress.child),\n null !== _type &&\n (workInProgress.treeBaseDuration -=\n _type.treeBaseDuration));\n } else\n emitPendingHydrationWarnings(),\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4),\n bubbleProperties(workInProgress),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n null !== newProps &&\n ((_type = workInProgress.child),\n null !== _type &&\n (workInProgress.treeBaseDuration -=\n _type.treeBaseDuration));\n _type = !1;\n } else\n (_type = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = _type),\n (_type = !0);\n if (!_type) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n }\n popSuspenseHandler(workInProgress);\n if (0 !== (workInProgress.flags & 128))\n return (\n (workInProgress.lanes = renderLanes),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress\n );\n renderLanes = null !== newProps;\n current = null !== current && null !== current.memoizedState;\n renderLanes &&\n ((newProps = workInProgress.child),\n (_type = null),\n null !== newProps.alternate &&\n null !== newProps.alternate.memoizedState &&\n null !== newProps.alternate.memoizedState.cachePool &&\n (_type = newProps.alternate.memoizedState.cachePool.pool),\n (returnFiber = null),\n null !== newProps.memoizedState &&\n null !== newProps.memoizedState.cachePool &&\n (returnFiber = newProps.memoizedState.cachePool.pool),\n returnFiber !== _type && (newProps.flags |= 2048));\n renderLanes !== current &&\n renderLanes &&\n (workInProgress.child.flags |= 8192);\n scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n bubbleProperties(workInProgress);\n (workInProgress.mode & ProfileMode) !== NoMode &&\n renderLanes &&\n ((current = workInProgress.child),\n null !== current &&\n (workInProgress.treeBaseDuration -= current.treeBaseDuration));\n return null;\n case 4:\n return (\n popHostContainer(workInProgress),\n null === current &&\n listenToAllSupportedEvents(\n workInProgress.stateNode.containerInfo\n ),\n bubbleProperties(workInProgress),\n null\n );\n case 10:\n return (\n popProvider(workInProgress.type, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 19:\n pop(suspenseStackCursor, workInProgress);\n _type = workInProgress.memoizedState;\n if (null === _type) return bubbleProperties(workInProgress), null;\n newProps = 0 !== (workInProgress.flags & 128);\n returnFiber = _type.rendering;\n if (null === returnFiber)\n if (newProps) cutOffTailIfNeeded(_type, !1);\n else {\n if (\n workInProgressRootExitStatus !== RootInProgress ||\n (null !== current && 0 !== (current.flags & 128))\n )\n for (current = workInProgress.child; null !== current; ) {\n returnFiber = findFirstSuspended(current);\n if (null !== returnFiber) {\n workInProgress.flags |= 128;\n cutOffTailIfNeeded(_type, !1);\n current = returnFiber.updateQueue;\n workInProgress.updateQueue = current;\n scheduleRetryEffect(workInProgress, current);\n workInProgress.subtreeFlags = 0;\n current = renderLanes;\n for (\n renderLanes = workInProgress.child;\n null !== renderLanes;\n\n )\n resetWorkInProgress(renderLanes, current),\n (renderLanes = renderLanes.sibling);\n push(\n suspenseStackCursor,\n (suspenseStackCursor.current &\n SubtreeSuspenseContextMask) |\n ForceSuspenseFallback,\n workInProgress\n );\n return workInProgress.child;\n }\n current = current.sibling;\n }\n null !== _type.tail &&\n now$1() > workInProgressRootRenderTargetTime &&\n ((workInProgress.flags |= 128),\n (newProps = !0),\n cutOffTailIfNeeded(_type, !1),\n (workInProgress.lanes = 4194304));\n }\n else {\n if (!newProps)\n if (\n ((current = findFirstSuspended(returnFiber)), null !== current)\n ) {\n if (\n ((workInProgress.flags |= 128),\n (newProps = !0),\n (current = current.updateQueue),\n (workInProgress.updateQueue = current),\n scheduleRetryEffect(workInProgress, current),\n cutOffTailIfNeeded(_type, !0),\n null === _type.tail &&\n \"hidden\" === _type.tailMode &&\n !returnFiber.alternate &&\n !isHydrating)\n )\n return bubbleProperties(workInProgress), null;\n } else\n 2 * now$1() - _type.renderingStartTime >\n workInProgressRootRenderTargetTime &&\n 536870912 !== renderLanes &&\n ((workInProgress.flags |= 128),\n (newProps = !0),\n cutOffTailIfNeeded(_type, !1),\n (workInProgress.lanes = 4194304));\n _type.isBackwards\n ? ((returnFiber.sibling = workInProgress.child),\n (workInProgress.child = returnFiber))\n : ((current = _type.last),\n null !== current\n ? (current.sibling = returnFiber)\n : (workInProgress.child = returnFiber),\n (_type.last = returnFiber));\n }\n if (null !== _type.tail)\n return (\n (current = _type.tail),\n (_type.rendering = current),\n (_type.tail = current.sibling),\n (_type.renderingStartTime = now$1()),\n (current.sibling = null),\n (renderLanes = suspenseStackCursor.current),\n (renderLanes = newProps\n ? (renderLanes & SubtreeSuspenseContextMask) |\n ForceSuspenseFallback\n : renderLanes & SubtreeSuspenseContextMask),\n push(suspenseStackCursor, renderLanes, workInProgress),\n current\n );\n bubbleProperties(workInProgress);\n return null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(workInProgress),\n (newProps = null !== workInProgress.memoizedState),\n null !== current\n ? (null !== current.memoizedState) !== newProps &&\n (workInProgress.flags |= 8192)\n : newProps && (workInProgress.flags |= 8192),\n newProps\n ? 0 !== (renderLanes & 536870912) &&\n 0 === (workInProgress.flags & 128) &&\n (bubbleProperties(workInProgress),\n workInProgress.subtreeFlags & 6 &&\n (workInProgress.flags |= 8192))\n : bubbleProperties(workInProgress),\n (renderLanes = workInProgress.updateQueue),\n null !== renderLanes &&\n scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n (renderLanes = null),\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (renderLanes = current.memoizedState.cachePool.pool),\n (newProps = null),\n null !== workInProgress.memoizedState &&\n null !== workInProgress.memoizedState.cachePool &&\n (newProps = workInProgress.memoizedState.cachePool.pool),\n newProps !== renderLanes && (workInProgress.flags |= 2048),\n null !== current && pop(resumedCache, workInProgress),\n null\n );\n case 24:\n return (\n (renderLanes = null),\n null !== current && (renderLanes = current.memoizedState.cache),\n workInProgress.memoizedState.cache !== renderLanes &&\n (workInProgress.flags |= 2048),\n popProvider(CacheContext, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 25:\n return null;\n case 30:\n return null;\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function unwindWork(current, workInProgress) {\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 1:\n return (\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null\n );\n case 3:\n return (\n popProvider(CacheContext, workInProgress),\n popHostContainer(workInProgress),\n (current = workInProgress.flags),\n 0 !== (current & 65536) && 0 === (current & 128)\n ? ((workInProgress.flags = (current & -65537) | 128),\n workInProgress)\n : null\n );\n case 26:\n case 27:\n case 5:\n return popHostContext(workInProgress), null;\n case 13:\n popSuspenseHandler(workInProgress);\n current = workInProgress.memoizedState;\n if (null !== current && null !== current.dehydrated) {\n if (null === workInProgress.alternate)\n throw Error(\n \"Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.\"\n );\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null;\n case 19:\n return pop(suspenseStackCursor, workInProgress), null;\n case 4:\n return popHostContainer(workInProgress), null;\n case 10:\n return popProvider(workInProgress.type, workInProgress), null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(workInProgress),\n null !== current && pop(resumedCache, workInProgress),\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null\n );\n case 24:\n return popProvider(CacheContext, workInProgress), null;\n case 25:\n return null;\n default:\n return null;\n }\n }\n function unwindInterruptedWork(current, interruptedWork) {\n popTreeContext(interruptedWork);\n switch (interruptedWork.tag) {\n case 3:\n popProvider(CacheContext, interruptedWork);\n popHostContainer(interruptedWork);\n break;\n case 26:\n case 27:\n case 5:\n popHostContext(interruptedWork);\n break;\n case 4:\n popHostContainer(interruptedWork);\n break;\n case 13:\n popSuspenseHandler(interruptedWork);\n break;\n case 19:\n pop(suspenseStackCursor, interruptedWork);\n break;\n case 10:\n popProvider(interruptedWork.type, interruptedWork);\n break;\n case 22:\n case 23:\n popSuspenseHandler(interruptedWork);\n popHiddenContext(interruptedWork);\n null !== current && pop(resumedCache, interruptedWork);\n break;\n case 24:\n popProvider(CacheContext, interruptedWork);\n }\n }\n function shouldProfile(current) {\n return (current.mode & ProfileMode) !== NoMode;\n }\n function commitHookLayoutEffects(finishedWork, hookFlags) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListMount(hookFlags, finishedWork),\n recordEffectDuration())\n : commitHookEffectListMount(hookFlags, finishedWork);\n }\n function commitHookLayoutUnmountEffects(\n finishedWork,\n nearestMountedAncestor,\n hookFlags\n ) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n ),\n recordEffectDuration())\n : commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n );\n }\n function commitHookEffectListMount(flags, finishedWork) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if (\n (updateQueue.tag & flags) === flags &&\n ((flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted &&\n injectedProfilingHooks.markComponentPassiveEffectMountStarted(\n finishedWork\n )\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted &&\n injectedProfilingHooks.markComponentLayoutEffectMountStarted(\n finishedWork\n ),\n (lastEffect = void 0),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !0),\n (lastEffect = runWithFiberInDEV(\n finishedWork,\n callCreateInDEV,\n updateQueue\n )),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !1),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped &&\n injectedProfilingHooks.markComponentPassiveEffectMountStopped()\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped &&\n injectedProfilingHooks.markComponentLayoutEffectMountStopped(),\n void 0 !== lastEffect && \"function\" !== typeof lastEffect)\n ) {\n var hookName = void 0;\n hookName =\n 0 !== (updateQueue.tag & Layout)\n ? \"useLayoutEffect\"\n : 0 !== (updateQueue.tag & Insertion)\n ? \"useInsertionEffect\"\n : \"useEffect\";\n var addendum = void 0;\n addendum =\n null === lastEffect\n ? \" You returned null. If your effect does not require clean up, return undefined (or nothing).\"\n : \"function\" === typeof lastEffect.then\n ? \"\\n\\nIt looks like you wrote \" +\n hookName +\n \"(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:\\n\\n\" +\n hookName +\n \"(() => {\\n async function fetchData() {\\n // You can await here\\n const response = await MyAPI.getData(someId);\\n // ...\\n }\\n fetchData();\\n}, [someId]); // Or [] if effect doesn't need props or state\\n\\nLearn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching\"\n : \" You returned: \" + lastEffect;\n runWithFiberInDEV(\n finishedWork,\n function (n, a) {\n console.error(\n \"%s must not return anything besides a function, which is used for clean-up.%s\",\n n,\n a\n );\n },\n hookName,\n addendum\n );\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHookEffectListUnmount(\n flags,\n finishedWork,\n nearestMountedAncestor\n ) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n var inst = updateQueue.inst,\n destroy = inst.destroy;\n void 0 !== destroy &&\n ((inst.destroy = void 0),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted &&\n injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(\n finishedWork\n )\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted &&\n injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(\n finishedWork\n ),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !0),\n (lastEffect = finishedWork),\n runWithFiberInDEV(\n lastEffect,\n callDestroyInDEV,\n lastEffect,\n nearestMountedAncestor,\n destroy\n ),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !1),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped &&\n injectedProfilingHooks.markComponentPassiveEffectUnmountStopped()\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped &&\n injectedProfilingHooks.markComponentLayoutEffectUnmountStopped());\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHookPassiveMountEffects(finishedWork, hookFlags) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListMount(hookFlags, finishedWork),\n recordEffectDuration())\n : commitHookEffectListMount(hookFlags, finishedWork);\n }\n function commitHookPassiveUnmountEffects(\n finishedWork,\n nearestMountedAncestor,\n hookFlags\n ) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n ),\n recordEffectDuration())\n : commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n );\n }\n function commitClassCallbacks(finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n if (null !== updateQueue) {\n var instance = finishedWork.stateNode;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (instance.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n instance.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n try {\n runWithFiberInDEV(\n finishedWork,\n commitCallbacks,\n updateQueue,\n instance\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n function callGetSnapshotBeforeUpdates(instance, prevProps, prevState) {\n return instance.getSnapshotBeforeUpdate(prevProps, prevState);\n }\n function commitClassSnapshot(finishedWork, current) {\n var prevProps = current.memoizedProps,\n prevState = current.memoizedState;\n current = finishedWork.stateNode;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (current.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n current.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n try {\n var resolvedPrevProps = resolveClassComponentProps(\n finishedWork.type,\n prevProps,\n finishedWork.elementType === finishedWork.type\n );\n var snapshot = runWithFiberInDEV(\n finishedWork,\n callGetSnapshotBeforeUpdates,\n current,\n resolvedPrevProps,\n prevState\n );\n prevProps = didWarnAboutUndefinedSnapshotBeforeUpdate;\n void 0 !== snapshot ||\n prevProps.has(finishedWork.type) ||\n (prevProps.add(finishedWork.type),\n runWithFiberInDEV(finishedWork, function () {\n console.error(\n \"%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.\",\n getComponentNameFromFiber(finishedWork)\n );\n }));\n current.__reactInternalSnapshotBeforeUpdate = snapshot;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function safelyCallComponentWillUnmount(\n current,\n nearestMountedAncestor,\n instance\n ) {\n instance.props = resolveClassComponentProps(\n current.type,\n current.memoizedProps\n );\n instance.state = current.memoizedState;\n shouldProfile(current)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n current,\n callComponentWillUnmountInDEV,\n current,\n nearestMountedAncestor,\n instance\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n current,\n callComponentWillUnmountInDEV,\n current,\n nearestMountedAncestor,\n instance\n );\n }\n function commitAttachRef(finishedWork) {\n var ref = finishedWork.ref;\n if (null !== ref) {\n switch (finishedWork.tag) {\n case 26:\n case 27:\n case 5:\n var instanceToUse = finishedWork.stateNode;\n break;\n case 30:\n instanceToUse = finishedWork.stateNode;\n break;\n default:\n instanceToUse = finishedWork.stateNode;\n }\n if (\"function\" === typeof ref)\n if (shouldProfile(finishedWork))\n try {\n startEffectTimer(),\n (finishedWork.refCleanup = ref(instanceToUse));\n } finally {\n recordEffectDuration();\n }\n else finishedWork.refCleanup = ref(instanceToUse);\n else\n \"string\" === typeof ref\n ? console.error(\"String refs are no longer supported.\")\n : ref.hasOwnProperty(\"current\") ||\n console.error(\n \"Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().\",\n getComponentNameFromFiber(finishedWork)\n ),\n (ref.current = instanceToUse);\n }\n }\n function safelyAttachRef(current, nearestMountedAncestor) {\n try {\n runWithFiberInDEV(current, commitAttachRef, current);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n function safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref,\n refCleanup = current.refCleanup;\n if (null !== ref)\n if (\"function\" === typeof refCleanup)\n try {\n if (shouldProfile(current))\n try {\n startEffectTimer(), runWithFiberInDEV(current, refCleanup);\n } finally {\n recordEffectDuration(current);\n }\n else runWithFiberInDEV(current, refCleanup);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n } finally {\n (current.refCleanup = null),\n (current = current.alternate),\n null != current && (current.refCleanup = null);\n }\n else if (\"function\" === typeof ref)\n try {\n if (shouldProfile(current))\n try {\n startEffectTimer(), runWithFiberInDEV(current, ref, null);\n } finally {\n recordEffectDuration(current);\n }\n else runWithFiberInDEV(current, ref, null);\n } catch (error$7) {\n captureCommitPhaseError(current, nearestMountedAncestor, error$7);\n }\n else ref.current = null;\n }\n function commitProfiler(\n finishedWork,\n current,\n commitStartTime,\n effectDuration\n ) {\n var _finishedWork$memoize = finishedWork.memoizedProps,\n id = _finishedWork$memoize.id,\n onCommit = _finishedWork$memoize.onCommit;\n _finishedWork$memoize = _finishedWork$memoize.onRender;\n current = null === current ? \"mount\" : \"update\";\n currentUpdateIsNested && (current = \"nested-update\");\n \"function\" === typeof _finishedWork$memoize &&\n _finishedWork$memoize(\n id,\n current,\n finishedWork.actualDuration,\n finishedWork.treeBaseDuration,\n finishedWork.actualStartTime,\n commitStartTime\n );\n \"function\" === typeof onCommit &&\n onCommit(\n finishedWork.memoizedProps.id,\n current,\n effectDuration,\n commitStartTime\n );\n }\n function commitProfilerPostCommitImpl(\n finishedWork,\n current,\n commitStartTime,\n passiveEffectDuration\n ) {\n var _finishedWork$memoize2 = finishedWork.memoizedProps;\n finishedWork = _finishedWork$memoize2.id;\n _finishedWork$memoize2 = _finishedWork$memoize2.onPostCommit;\n current = null === current ? \"mount\" : \"update\";\n currentUpdateIsNested && (current = \"nested-update\");\n \"function\" === typeof _finishedWork$memoize2 &&\n _finishedWork$memoize2(\n finishedWork,\n current,\n passiveEffectDuration,\n commitStartTime\n );\n }\n function commitHostMount(finishedWork) {\n var type = finishedWork.type,\n props = finishedWork.memoizedProps,\n instance = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitMount,\n instance,\n type,\n props,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHostUpdate(finishedWork, newProps, oldProps) {\n try {\n runWithFiberInDEV(\n finishedWork,\n commitUpdate,\n finishedWork.stateNode,\n finishedWork.type,\n oldProps,\n newProps,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function isHostParent(fiber) {\n return (\n 5 === fiber.tag ||\n 3 === fiber.tag ||\n 26 === fiber.tag ||\n (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n 4 === fiber.tag\n );\n }\n function getHostSibling(fiber) {\n a: for (;;) {\n for (; null === fiber.sibling; ) {\n if (null === fiber.return || isHostParent(fiber.return)) return null;\n fiber = fiber.return;\n }\n fiber.sibling.return = fiber.return;\n for (\n fiber = fiber.sibling;\n 5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n ) {\n if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n if (fiber.flags & 2) continue a;\n if (null === fiber.child || 4 === fiber.tag) continue a;\n else (fiber.child.return = fiber), (fiber = fiber.child);\n }\n if (!(fiber.flags & 2)) return fiber.stateNode;\n }\n }\n function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before\n ? (9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent\n ).insertBefore(node, before)\n : ((before =\n 9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent),\n before.appendChild(node),\n (parent = parent._reactRootContainer),\n (null !== parent && void 0 !== parent) ||\n null !== before.onclick ||\n (before.onclick = noop$1));\n else if (\n 4 !== tag &&\n (27 === tag &&\n isSingletonScope(node.type) &&\n ((parent = node.stateNode), (before = null)),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n (node = node.sibling);\n }\n function insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before ? parent.insertBefore(node, before) : parent.appendChild(node);\n else if (\n 4 !== tag &&\n (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNode(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNode(node, before, parent),\n (node = node.sibling);\n }\n function commitPlacement(finishedWork) {\n for (\n var hostParentFiber, parentFiber = finishedWork.return;\n null !== parentFiber;\n\n ) {\n if (isHostParent(parentFiber)) {\n hostParentFiber = parentFiber;\n break;\n }\n parentFiber = parentFiber.return;\n }\n if (null == hostParentFiber)\n throw Error(\n \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n switch (hostParentFiber.tag) {\n case 27:\n hostParentFiber = hostParentFiber.stateNode;\n parentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(\n finishedWork,\n parentFiber,\n hostParentFiber\n );\n break;\n case 5:\n parentFiber = hostParentFiber.stateNode;\n hostParentFiber.flags & 32 &&\n (resetTextContent(parentFiber), (hostParentFiber.flags &= -33));\n hostParentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(\n finishedWork,\n hostParentFiber,\n parentFiber\n );\n break;\n case 3:\n case 4:\n hostParentFiber = hostParentFiber.stateNode.containerInfo;\n parentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNodeIntoContainer(\n finishedWork,\n parentFiber,\n hostParentFiber\n );\n break;\n default:\n throw Error(\n \"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n }\n function commitHostSingletonAcquisition(finishedWork) {\n var singleton = finishedWork.stateNode,\n props = finishedWork.memoizedProps;\n try {\n runWithFiberInDEV(\n finishedWork,\n acquireSingletonInstance,\n finishedWork.type,\n props,\n singleton,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitBeforeMutationEffects(root, firstChild) {\n root = root.containerInfo;\n eventsEnabled = _enabled;\n root = getActiveElementDeep(root);\n if (hasSelectionCapabilities(root)) {\n if (\"selectionStart\" in root)\n var JSCompiler_temp = {\n start: root.selectionStart,\n end: root.selectionEnd\n };\n else\n a: {\n JSCompiler_temp =\n ((JSCompiler_temp = root.ownerDocument) &&\n JSCompiler_temp.defaultView) ||\n window;\n var selection =\n JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n if (selection && 0 !== selection.rangeCount) {\n JSCompiler_temp = selection.anchorNode;\n var anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode;\n selection = selection.focusOffset;\n try {\n JSCompiler_temp.nodeType, focusNode.nodeType;\n } catch (e$2) {\n JSCompiler_temp = null;\n break a;\n }\n var length = 0,\n start = -1,\n end = -1,\n indexWithinAnchor = 0,\n indexWithinFocus = 0,\n node = root,\n parentNode = null;\n b: for (;;) {\n for (var next; ; ) {\n node !== JSCompiler_temp ||\n (0 !== anchorOffset && 3 !== node.nodeType) ||\n (start = length + anchorOffset);\n node !== focusNode ||\n (0 !== selection && 3 !== node.nodeType) ||\n (end = length + selection);\n 3 === node.nodeType && (length += node.nodeValue.length);\n if (null === (next = node.firstChild)) break;\n parentNode = node;\n node = next;\n }\n for (;;) {\n if (node === root) break b;\n parentNode === JSCompiler_temp &&\n ++indexWithinAnchor === anchorOffset &&\n (start = length);\n parentNode === focusNode &&\n ++indexWithinFocus === selection &&\n (end = length);\n if (null !== (next = node.nextSibling)) break;\n node = parentNode;\n parentNode = node.parentNode;\n }\n node = next;\n }\n JSCompiler_temp =\n -1 === start || -1 === end ? null : { start: start, end: end };\n } else JSCompiler_temp = null;\n }\n JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n } else JSCompiler_temp = null;\n selectionInformation = {\n focusedElem: root,\n selectionRange: JSCompiler_temp\n };\n _enabled = !1;\n for (nextEffect = firstChild; null !== nextEffect; )\n if (\n ((firstChild = nextEffect),\n (root = firstChild.child),\n 0 !== (firstChild.subtreeFlags & 1024) && null !== root)\n )\n (root.return = firstChild), (nextEffect = root);\n else\n for (; null !== nextEffect; ) {\n root = firstChild = nextEffect;\n JSCompiler_temp = root.alternate;\n anchorOffset = root.flags;\n switch (root.tag) {\n case 0:\n break;\n case 11:\n case 15:\n break;\n case 1:\n 0 !== (anchorOffset & 1024) &&\n null !== JSCompiler_temp &&\n commitClassSnapshot(root, JSCompiler_temp);\n break;\n case 3:\n if (0 !== (anchorOffset & 1024))\n if (\n ((root = root.stateNode.containerInfo),\n (JSCompiler_temp = root.nodeType),\n 9 === JSCompiler_temp)\n )\n clearContainerSparingly(root);\n else if (1 === JSCompiler_temp)\n switch (root.nodeName) {\n case \"HEAD\":\n case \"HTML\":\n case \"BODY\":\n clearContainerSparingly(root);\n break;\n default:\n root.textContent = \"\";\n }\n break;\n case 5:\n case 26:\n case 27:\n case 6:\n case 4:\n case 17:\n break;\n default:\n if (0 !== (anchorOffset & 1024))\n throw Error(\n \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n root = firstChild.sibling;\n if (null !== root) {\n root.return = firstChild.return;\n nextEffect = root;\n break;\n }\n nextEffect = firstChild.return;\n }\n }\n function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 &&\n commitHookLayoutEffects(finishedWork, Layout | HasEffect);\n break;\n case 1:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (flags & 4)\n if (((finishedRoot = finishedWork.stateNode), null === current))\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (finishedRoot.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n finishedRoot.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n )),\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n finishedRoot\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n finishedRoot\n );\n else {\n var prevProps = resolveClassComponentProps(\n finishedWork.type,\n current.memoizedProps\n );\n current = current.memoizedState;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (finishedRoot.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n finishedRoot.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n finishedWork,\n callComponentDidUpdateInDEV,\n finishedWork,\n finishedRoot,\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n finishedWork,\n callComponentDidUpdateInDEV,\n finishedWork,\n finishedRoot,\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n );\n }\n flags & 64 && commitClassCallbacks(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 3:\n current = pushNestedEffectDurations();\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (\n flags & 64 &&\n ((flags = finishedWork.updateQueue), null !== flags)\n ) {\n prevProps = null;\n if (null !== finishedWork.child)\n switch (finishedWork.child.tag) {\n case 27:\n case 5:\n prevProps = finishedWork.child.stateNode;\n break;\n case 1:\n prevProps = finishedWork.child.stateNode;\n }\n try {\n runWithFiberInDEV(\n finishedWork,\n commitCallbacks,\n flags,\n prevProps\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n finishedRoot.effectDuration += popNestedEffectDurations(current);\n break;\n case 27:\n null === current &&\n flags & 4 &&\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n null === current && flags & 4 && commitHostMount(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n if (flags & 4) {\n flags = pushNestedEffectDurations();\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n finishedRoot = finishedWork.stateNode;\n finishedRoot.effectDuration += bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfiler,\n finishedWork,\n current,\n commitStartTime,\n finishedRoot.effectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n flags & 64 &&\n ((finishedRoot = finishedWork.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated),\n null !== finishedRoot &&\n ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n null,\n finishedWork\n )),\n registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n break;\n case 22:\n flags =\n null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n if (!flags) {\n current =\n (null !== current && null !== current.memoizedState) ||\n offscreenSubtreeWasHidden;\n prevProps = offscreenSubtreeIsHidden;\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = flags;\n (offscreenSubtreeWasHidden = current) &&\n !prevOffscreenSubtreeWasHidden\n ? recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n 0 !== (finishedWork.subtreeFlags & 8772)\n )\n : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n offscreenSubtreeIsHidden = prevProps;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n }\n break;\n case 30:\n break;\n default:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n }\n }\n function detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n null !== alternate &&\n ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null;\n 5 === fiber.tag &&\n ((alternate = fiber.stateNode),\n null !== alternate && detachDeletedInstance(alternate));\n fiber.stateNode = null;\n fiber._debugOwner = null;\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null;\n fiber.updateQueue = null;\n }\n function recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n parent\n ) {\n for (parent = parent.child; null !== parent; )\n commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n parent\n ),\n (parent = parent.sibling);\n }\n function commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n ) {\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onCommitFiberUnmount\n )\n try {\n injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n switch (deletedFiber.tag) {\n case 26:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n deletedFiber.memoizedState\n ? deletedFiber.memoizedState.count--\n : deletedFiber.stateNode &&\n ((deletedFiber = deletedFiber.stateNode),\n deletedFiber.parentNode.removeChild(deletedFiber));\n break;\n case 27:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n var prevHostParent = hostParent,\n prevHostParentIsContainer = hostParentIsContainer;\n isSingletonScope(deletedFiber.type) &&\n ((hostParent = deletedFiber.stateNode),\n (hostParentIsContainer = !1));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n runWithFiberInDEV(\n deletedFiber,\n releaseSingletonInstance,\n deletedFiber.stateNode\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 5:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n case 6:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = null;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n if (null !== hostParent)\n if (hostParentIsContainer)\n try {\n runWithFiberInDEV(\n deletedFiber,\n removeChildFromContainer,\n hostParent,\n deletedFiber.stateNode\n );\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n else\n try {\n runWithFiberInDEV(\n deletedFiber,\n removeChild,\n hostParent,\n deletedFiber.stateNode\n );\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n break;\n case 18:\n null !== hostParent &&\n (hostParentIsContainer\n ? ((finishedRoot = hostParent),\n clearSuspenseBoundary(\n 9 === finishedRoot.nodeType\n ? finishedRoot.body\n : \"HTML\" === finishedRoot.nodeName\n ? finishedRoot.ownerDocument.body\n : finishedRoot,\n deletedFiber.stateNode\n ),\n retryIfBlockedOn(finishedRoot))\n : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));\n break;\n case 4:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode.containerInfo;\n hostParentIsContainer = !0;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 0:\n case 11:\n case 14:\n case 15:\n offscreenSubtreeWasHidden ||\n commitHookEffectListUnmount(\n Insertion,\n deletedFiber,\n nearestMountedAncestor\n );\n offscreenSubtreeWasHidden ||\n commitHookLayoutUnmountEffects(\n deletedFiber,\n nearestMountedAncestor,\n Layout\n );\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 1:\n offscreenSubtreeWasHidden ||\n (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n (prevHostParent = deletedFiber.stateNode),\n \"function\" === typeof prevHostParent.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n deletedFiber,\n nearestMountedAncestor,\n prevHostParent\n ));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 21:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 22:\n offscreenSubtreeWasHidden =\n (prevHostParent = offscreenSubtreeWasHidden) ||\n null !== deletedFiber.memoizedState;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n offscreenSubtreeWasHidden = prevHostParent;\n break;\n default:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n }\n }\n function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n )\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHydratedSuspenseInstance,\n finishedRoot\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function getRetryCache(finishedWork) {\n switch (finishedWork.tag) {\n case 13:\n case 19:\n var retryCache = finishedWork.stateNode;\n null === retryCache &&\n (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n return retryCache;\n case 22:\n return (\n (finishedWork = finishedWork.stateNode),\n (retryCache = finishedWork._retryCache),\n null === retryCache &&\n (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n retryCache\n );\n default:\n throw Error(\n \"Unexpected Suspense handler tag (\" +\n finishedWork.tag +\n \"). This is a bug in React.\"\n );\n }\n }\n function attachSuspenseRetryListeners(finishedWork, wakeables) {\n var retryCache = getRetryCache(finishedWork);\n wakeables.forEach(function (wakeable) {\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n if (!retryCache.has(wakeable)) {\n retryCache.add(wakeable);\n if (isDevToolsPresent)\n if (null !== inProgressLanes && null !== inProgressRoot)\n restorePendingUpdaters(inProgressRoot, inProgressLanes);\n else\n throw Error(\n \"Expected finished root and lanes to be set. This is a bug in React.\"\n );\n wakeable.then(retry, retry);\n }\n });\n }\n function recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n var deletions = parentFiber.deletions;\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var root = root$jscomp$0,\n returnFiber = parentFiber,\n deletedFiber = deletions[i],\n parent = returnFiber;\n a: for (; null !== parent; ) {\n switch (parent.tag) {\n case 27:\n if (isSingletonScope(parent.type)) {\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n }\n break;\n case 5:\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n case 3:\n case 4:\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = !0;\n break a;\n }\n parent = parent.return;\n }\n if (null === hostParent)\n throw Error(\n \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);\n hostParent = null;\n hostParentIsContainer = !1;\n root = deletedFiber;\n returnFiber = root.alternate;\n null !== returnFiber && (returnFiber.return = null);\n root.return = null;\n }\n if (parentFiber.subtreeFlags & 13878)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n (parentFiber = parentFiber.sibling);\n }\n function commitMutationEffectsOnFiber(finishedWork, root) {\n var current = finishedWork.alternate,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n (commitHookEffectListUnmount(\n Insertion | HasEffect,\n finishedWork,\n finishedWork.return\n ),\n commitHookEffectListMount(Insertion | HasEffect, finishedWork),\n commitHookLayoutUnmountEffects(\n finishedWork,\n finishedWork.return,\n Layout | HasEffect\n ));\n break;\n case 1:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n flags & 64 &&\n offscreenSubtreeIsHidden &&\n ((finishedWork = finishedWork.updateQueue),\n null !== finishedWork &&\n ((flags = finishedWork.callbacks),\n null !== flags &&\n ((current = finishedWork.shared.hiddenCallbacks),\n (finishedWork.shared.hiddenCallbacks =\n null === current ? flags : current.concat(flags)))));\n break;\n case 26:\n var hoistableRoot = currentHoistableRoot;\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (flags & 4)\n if (\n ((root = null !== current ? current.memoizedState : null),\n (flags = finishedWork.memoizedState),\n null === current)\n )\n if (null === flags)\n if (null === finishedWork.stateNode) {\n a: {\n flags = finishedWork.type;\n current = finishedWork.memoizedProps;\n root = hoistableRoot.ownerDocument || hoistableRoot;\n b: switch (flags) {\n case \"title\":\n hoistableRoot = root.getElementsByTagName(\"title\")[0];\n if (\n !hoistableRoot ||\n hoistableRoot[internalHoistableMarker] ||\n hoistableRoot[internalInstanceKey] ||\n hoistableRoot.namespaceURI === SVG_NAMESPACE ||\n hoistableRoot.hasAttribute(\"itemprop\")\n )\n (hoistableRoot = root.createElement(flags)),\n root.head.insertBefore(\n hoistableRoot,\n root.querySelector(\"head > title\")\n );\n setInitialProperties(hoistableRoot, flags, current);\n hoistableRoot[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(hoistableRoot);\n flags = hoistableRoot;\n break a;\n case \"link\":\n var maybeNodes = getHydratableHoistableCache(\n \"link\",\n \"href\",\n root\n ).get(flags + (current.href || \"\"));\n if (maybeNodes)\n for (var i = 0; i < maybeNodes.length; i++)\n if (\n ((hoistableRoot = maybeNodes[i]),\n hoistableRoot.getAttribute(\"href\") ===\n (null == current.href || \"\" === current.href\n ? null\n : current.href) &&\n hoistableRoot.getAttribute(\"rel\") ===\n (null == current.rel ? null : current.rel) &&\n hoistableRoot.getAttribute(\"title\") ===\n (null == current.title\n ? null\n : current.title) &&\n hoistableRoot.getAttribute(\"crossorigin\") ===\n (null == current.crossOrigin\n ? null\n : current.crossOrigin))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n hoistableRoot = root.createElement(flags);\n setInitialProperties(hoistableRoot, flags, current);\n root.head.appendChild(hoistableRoot);\n break;\n case \"meta\":\n if (\n (maybeNodes = getHydratableHoistableCache(\n \"meta\",\n \"content\",\n root\n ).get(flags + (current.content || \"\")))\n )\n for (i = 0; i < maybeNodes.length; i++)\n if (\n ((hoistableRoot = maybeNodes[i]),\n checkAttributeStringCoercion(\n current.content,\n \"content\"\n ),\n hoistableRoot.getAttribute(\"content\") ===\n (null == current.content\n ? null\n : \"\" + current.content) &&\n hoistableRoot.getAttribute(\"name\") ===\n (null == current.name\n ? null\n : current.name) &&\n hoistableRoot.getAttribute(\"property\") ===\n (null == current.property\n ? null\n : current.property) &&\n hoistableRoot.getAttribute(\"http-equiv\") ===\n (null == current.httpEquiv\n ? null\n : current.httpEquiv) &&\n hoistableRoot.getAttribute(\"charset\") ===\n (null == current.charSet\n ? null\n : current.charSet))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n hoistableRoot = root.createElement(flags);\n setInitialProperties(hoistableRoot, flags, current);\n root.head.appendChild(hoistableRoot);\n break;\n default:\n throw Error(\n 'getNodesForType encountered a type it did not expect: \"' +\n flags +\n '\". This is a bug in React.'\n );\n }\n hoistableRoot[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(hoistableRoot);\n flags = hoistableRoot;\n }\n finishedWork.stateNode = flags;\n } else\n mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n );\n else\n finishedWork.stateNode = acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n );\n else\n root !== flags\n ? (null === root\n ? null !== current.stateNode &&\n ((current = current.stateNode),\n current.parentNode.removeChild(current))\n : root.count--,\n null === flags\n ? mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n )\n : acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n ))\n : null === flags &&\n null !== finishedWork.stateNode &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 27:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n null !== current &&\n flags & 4 &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 5:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (finishedWork.flags & 32) {\n root = finishedWork.stateNode;\n try {\n runWithFiberInDEV(finishedWork, resetTextContent, root);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n flags & 4 &&\n null != finishedWork.stateNode &&\n ((root = finishedWork.memoizedProps),\n commitHostUpdate(\n finishedWork,\n root,\n null !== current ? current.memoizedProps : root\n ));\n flags & 1024 &&\n ((needsFormReset = !0),\n \"form\" !== finishedWork.type &&\n console.error(\n \"Unexpected host component type. Expected a form. This is a bug in React.\"\n ));\n break;\n case 6:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n if (flags & 4) {\n if (null === finishedWork.stateNode)\n throw Error(\n \"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\"\n );\n flags = finishedWork.memoizedProps;\n current = null !== current ? current.memoizedProps : flags;\n root = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitTextUpdate,\n root,\n current,\n flags\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 3:\n hoistableRoot = pushNestedEffectDurations();\n tagCaches = null;\n maybeNodes = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(root.containerInfo);\n recursivelyTraverseMutationEffects(root, finishedWork);\n currentHoistableRoot = maybeNodes;\n commitReconciliationEffects(finishedWork);\n if (\n flags & 4 &&\n null !== current &&\n current.memoizedState.isDehydrated\n )\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHydratedContainer,\n root.containerInfo\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n needsFormReset &&\n ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n root.effectDuration += popNestedEffectDurations(hoistableRoot);\n break;\n case 4:\n flags = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n finishedWork.stateNode.containerInfo\n );\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n currentHoistableRoot = flags;\n break;\n case 12:\n flags = pushNestedEffectDurations();\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.stateNode.effectDuration +=\n bubbleNestedEffectDurations(flags);\n break;\n case 13:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.child.flags & 8192 &&\n (null !== finishedWork.memoizedState) !==\n (null !== current && null !== current.memoizedState) &&\n (globalMostRecentFallbackTime = now$1());\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 22:\n hoistableRoot = null !== finishedWork.memoizedState;\n var wasHidden = null !== current && null !== current.memoizedState,\n prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden =\n prevOffscreenSubtreeIsHidden || hoistableRoot;\n offscreenSubtreeWasHidden =\n prevOffscreenSubtreeWasHidden || wasHidden;\n recursivelyTraverseMutationEffects(root, finishedWork);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n commitReconciliationEffects(finishedWork);\n if (flags & 8192)\n a: for (\n root = finishedWork.stateNode,\n root._visibility = hoistableRoot\n ? root._visibility & ~OffscreenVisible\n : root._visibility | OffscreenVisible,\n hoistableRoot &&\n (null === current ||\n wasHidden ||\n offscreenSubtreeIsHidden ||\n offscreenSubtreeWasHidden ||\n recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n current = null,\n root = finishedWork;\n ;\n\n ) {\n if (5 === root.tag || 26 === root.tag) {\n if (null === current) {\n wasHidden = current = root;\n try {\n (maybeNodes = wasHidden.stateNode),\n hoistableRoot\n ? runWithFiberInDEV(wasHidden, hideInstance, maybeNodes)\n : runWithFiberInDEV(\n wasHidden,\n unhideInstance,\n wasHidden.stateNode,\n wasHidden.memoizedProps\n );\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (6 === root.tag) {\n if (null === current) {\n wasHidden = root;\n try {\n (i = wasHidden.stateNode),\n hoistableRoot\n ? runWithFiberInDEV(wasHidden, hideTextInstance, i)\n : runWithFiberInDEV(\n wasHidden,\n unhideTextInstance,\n i,\n wasHidden.memoizedProps\n );\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (\n ((22 !== root.tag && 23 !== root.tag) ||\n null === root.memoizedState ||\n root === finishedWork) &&\n null !== root.child\n ) {\n root.child.return = root;\n root = root.child;\n continue;\n }\n if (root === finishedWork) break a;\n for (; null === root.sibling; ) {\n if (null === root.return || root.return === finishedWork)\n break a;\n current === root && (current = null);\n root = root.return;\n }\n current === root && (current = null);\n root.sibling.return = root.return;\n root = root.sibling;\n }\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((current = flags.retryQueue),\n null !== current &&\n ((flags.retryQueue = null),\n attachSuspenseRetryListeners(finishedWork, current))));\n break;\n case 19:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 30:\n break;\n case 21:\n break;\n default:\n recursivelyTraverseMutationEffects(root, finishedWork),\n commitReconciliationEffects(finishedWork);\n }\n }\n function commitReconciliationEffects(finishedWork) {\n var flags = finishedWork.flags;\n if (flags & 2) {\n try {\n runWithFiberInDEV(finishedWork, commitPlacement, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n finishedWork.flags &= -3;\n }\n flags & 4096 && (finishedWork.flags &= -4097);\n }\n function recursivelyResetForms(parentFiber) {\n if (parentFiber.subtreeFlags & 1024)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var fiber = parentFiber;\n recursivelyResetForms(fiber);\n 5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n parentFiber = parentFiber.sibling;\n }\n }\n function recursivelyTraverseLayoutEffects(root, parentFiber) {\n if (parentFiber.subtreeFlags & 8772)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function disappearLayoutEffects(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookLayoutUnmountEffects(\n finishedWork,\n finishedWork.return,\n Layout\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 1:\n safelyDetachRef(finishedWork, finishedWork.return);\n var instance = finishedWork.stateNode;\n \"function\" === typeof instance.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n finishedWork,\n finishedWork.return,\n instance\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 27:\n runWithFiberInDEV(\n finishedWork,\n releaseSingletonInstance,\n finishedWork.stateNode\n );\n case 26:\n case 5:\n safelyDetachRef(finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 30:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n default:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n }\n }\n function recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n disappearLayoutEffects(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function reappearLayoutEffects(\n finishedRoot,\n current,\n finishedWork,\n includeWorkInProgressEffects\n ) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n commitHookLayoutEffects(finishedWork, Layout);\n break;\n case 1:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n current = finishedWork.stateNode;\n \"function\" === typeof current.componentDidMount &&\n runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n current\n );\n current = finishedWork.updateQueue;\n if (null !== current) {\n finishedRoot = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHiddenCallbacks,\n current,\n finishedRoot\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n includeWorkInProgressEffects &&\n flags & 64 &&\n commitClassCallbacks(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 27:\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n null === current &&\n flags & 4 &&\n commitHostMount(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n if (includeWorkInProgressEffects && flags & 4) {\n flags = pushNestedEffectDurations();\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects = finishedWork.stateNode;\n includeWorkInProgressEffects.effectDuration +=\n bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfiler,\n finishedWork,\n current,\n commitStartTime,\n includeWorkInProgressEffects.effectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n break;\n case 13:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 30:\n break;\n default:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n }\n }\n function recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n parentFiber,\n includeWorkInProgressEffects\n ) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n reappearLayoutEffects(\n finishedRoot,\n parentFiber.alternate,\n parentFiber,\n includeWorkInProgressEffects\n ),\n (parentFiber = parentFiber.sibling);\n }\n function commitOffscreenPassiveMountEffects(current, finishedWork) {\n var previousCache = null;\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (previousCache = current.memoizedState.cachePool.pool);\n current = null;\n null !== finishedWork.memoizedState &&\n null !== finishedWork.memoizedState.cachePool &&\n (current = finishedWork.memoizedState.cachePool.pool);\n current !== previousCache &&\n (null != current && retainCache(current),\n null != previousCache && releaseCache(previousCache));\n }\n function commitCachePassiveMountEffect(current, finishedWork) {\n current = null;\n null !== finishedWork.alternate &&\n (current = finishedWork.alternate.memoizedState.cache);\n finishedWork = finishedWork.memoizedState.cache;\n finishedWork !== current &&\n (retainCache(finishedWork), null != current && releaseCache(current));\n }\n function recursivelyTraversePassiveMountEffects(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveMountOnFiber(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ),\n (parentFiber = parentFiber.sibling);\n }\n function commitPassiveMountOnFiber(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n ) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitHookPassiveMountEffects(finishedWork, Passive | HasEffect);\n break;\n case 1:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 3:\n var prevEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n ((committedLanes = null),\n null !== finishedWork.alternate &&\n (committedLanes = finishedWork.alternate.memoizedState.cache),\n (finishedWork = finishedWork.memoizedState.cache),\n finishedWork !== committedLanes &&\n (retainCache(finishedWork),\n null != committedLanes && releaseCache(committedLanes)));\n finishedRoot.passiveEffectDuration +=\n popNestedEffectDurations(prevEffectDuration);\n break;\n case 12:\n if (flags & 2048) {\n flags = pushNestedEffectDurations();\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n finishedRoot = finishedWork.stateNode;\n finishedRoot.passiveEffectDuration +=\n bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfilerPostCommitImpl,\n finishedWork,\n finishedWork.alternate,\n commitStartTime,\n finishedRoot.passiveEffectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 13:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 23:\n break;\n case 22:\n prevEffectDuration = finishedWork.stateNode;\n var _current = finishedWork.alternate;\n null !== finishedWork.memoizedState\n ? prevEffectDuration._visibility & OffscreenPassiveEffectsConnected\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : prevEffectDuration._visibility & OffscreenPassiveEffectsConnected\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : ((prevEffectDuration._visibility |=\n OffscreenPassiveEffectsConnected),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n 0 !== (finishedWork.subtreeFlags & 10256)\n ));\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(_current, finishedWork);\n break;\n case 24:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n }\n }\n function recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n parentFiber,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects &&\n 0 !== (parentFiber.subtreeFlags & 10256);\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n reconnectPassiveEffects(\n finishedRoot,\n parentFiber,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ),\n (parentFiber = parentFiber.sibling);\n }\n function reconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n commitHookPassiveMountEffects(finishedWork, Passive);\n break;\n case 23:\n break;\n case 22:\n var _instance2 = finishedWork.stateNode;\n null !== finishedWork.memoizedState\n ? _instance2._visibility & OffscreenPassiveEffectsConnected\n ? recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : ((_instance2._visibility |= OffscreenPassiveEffectsConnected),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ));\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n }\n }\n function recursivelyTraverseAtomicPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber\n ) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 22:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(\n finishedWork.alternate,\n finishedWork\n );\n break;\n default:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n }\n parentFiber = parentFiber.sibling;\n }\n }\n function recursivelyAccumulateSuspenseyCommit(parentFiber) {\n if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n accumulateSuspenseyCommitOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function accumulateSuspenseyCommitOnFiber(fiber) {\n switch (fiber.tag) {\n case 26:\n recursivelyAccumulateSuspenseyCommit(fiber);\n fiber.flags & suspenseyCommitFlag &&\n null !== fiber.memoizedState &&\n suspendResource(\n currentHoistableRoot,\n fiber.memoizedState,\n fiber.memoizedProps\n );\n break;\n case 5:\n recursivelyAccumulateSuspenseyCommit(fiber);\n break;\n case 3:\n case 4:\n var previousHoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n fiber.stateNode.containerInfo\n );\n recursivelyAccumulateSuspenseyCommit(fiber);\n currentHoistableRoot = previousHoistableRoot;\n break;\n case 22:\n null === fiber.memoizedState &&\n ((previousHoistableRoot = fiber.alternate),\n null !== previousHoistableRoot &&\n null !== previousHoistableRoot.memoizedState\n ? ((previousHoistableRoot = suspenseyCommitFlag),\n (suspenseyCommitFlag = 16777216),\n recursivelyAccumulateSuspenseyCommit(fiber),\n (suspenseyCommitFlag = previousHoistableRoot))\n : recursivelyAccumulateSuspenseyCommit(fiber));\n break;\n default:\n recursivelyAccumulateSuspenseyCommit(fiber);\n }\n }\n function detachAlternateSiblings(parentFiber) {\n var previousFiber = parentFiber.alternate;\n if (\n null !== previousFiber &&\n ((parentFiber = previousFiber.child), null !== parentFiber)\n ) {\n previousFiber.child = null;\n do\n (previousFiber = parentFiber.sibling),\n (parentFiber.sibling = null),\n (parentFiber = previousFiber);\n while (null !== parentFiber);\n }\n }\n function recursivelyTraversePassiveUnmountEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveUnmountOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function commitPassiveUnmountOnFiber(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.flags & 2048 &&\n commitHookPassiveUnmountEffects(\n finishedWork,\n finishedWork.return,\n Passive | HasEffect\n );\n break;\n case 3:\n var prevEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.stateNode.passiveEffectDuration +=\n popNestedEffectDurations(prevEffectDuration);\n break;\n case 12:\n prevEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.stateNode.passiveEffectDuration +=\n bubbleNestedEffectDurations(prevEffectDuration);\n break;\n case 22:\n prevEffectDuration = finishedWork.stateNode;\n null !== finishedWork.memoizedState &&\n prevEffectDuration._visibility & OffscreenPassiveEffectsConnected &&\n (null === finishedWork.return || 13 !== finishedWork.return.tag)\n ? ((prevEffectDuration._visibility &=\n ~OffscreenPassiveEffectsConnected),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n : recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n default:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n }\n }\n function recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n disconnectPassiveEffect(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function disconnectPassiveEffect(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n commitHookPassiveUnmountEffects(\n finishedWork,\n finishedWork.return,\n Passive\n );\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n break;\n case 22:\n var instance = finishedWork.stateNode;\n instance._visibility & OffscreenPassiveEffectsConnected &&\n ((instance._visibility &= ~OffscreenPassiveEffectsConnected),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork));\n break;\n default:\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n }\n }\n function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n deletedSubtreeRoot,\n nearestMountedAncestor\n ) {\n for (; null !== nextEffect; ) {\n var fiber = nextEffect,\n current = fiber;\n switch (current.tag) {\n case 0:\n case 11:\n case 15:\n commitHookPassiveUnmountEffects(\n current,\n nearestMountedAncestor,\n Passive\n );\n break;\n case 23:\n case 22:\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n ((current = current.memoizedState.cachePool.pool),\n null != current && retainCache(current));\n break;\n case 24:\n releaseCache(current.memoizedState.cache);\n }\n current = fiber.child;\n if (null !== current) (current.return = fiber), (nextEffect = current);\n else\n a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n current = nextEffect;\n var sibling = current.sibling,\n returnFiber = current.return;\n detachFiberAfterEffects(current);\n if (current === fiber) {\n nextEffect = null;\n break a;\n }\n if (null !== sibling) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n break a;\n }\n nextEffect = returnFiber;\n }\n }\n }\n function onCommitRoot() {\n commitHooks.forEach(function (commitHook) {\n return commitHook();\n });\n }\n function isConcurrentActEnvironment() {\n var isReactActEnvironmentGlobal =\n \"undefined\" !== typeof IS_REACT_ACT_ENVIRONMENT\n ? IS_REACT_ACT_ENVIRONMENT\n : void 0;\n isReactActEnvironmentGlobal ||\n null === ReactSharedInternals.actQueue ||\n console.error(\n \"The current testing environment is not configured to support act(...)\"\n );\n return isReactActEnvironmentGlobal;\n }\n function requestUpdateLane(fiber) {\n if (\n (executionContext & RenderContext) !== NoContext &&\n 0 !== workInProgressRootRenderLanes\n )\n return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n var transition = ReactSharedInternals.T;\n return null !== transition\n ? (transition._updatedFibers || (transition._updatedFibers = new Set()),\n transition._updatedFibers.add(fiber),\n (fiber = currentEntangledLane),\n 0 !== fiber ? fiber : requestTransitionLane())\n : resolveUpdatePriority();\n }\n function requestDeferredLane() {\n 0 === workInProgressDeferredLane &&\n (workInProgressDeferredLane =\n 0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n ? claimNextTransitionLane()\n : 536870912);\n var suspenseHandler = suspenseHandlerStackCursor.current;\n null !== suspenseHandler && (suspenseHandler.flags |= 32);\n return workInProgressDeferredLane;\n }\n function scheduleUpdateOnFiber(root, fiber, lane) {\n isRunningInsertionEffect &&\n console.error(\"useInsertionEffect must not schedule updates.\");\n isFlushingPassiveEffects && (didScheduleUpdateDuringPassiveEffects = !0);\n if (\n (root === workInProgressRoot &&\n (workInProgressSuspendedReason === SuspendedOnData ||\n workInProgressSuspendedReason === SuspendedOnAction)) ||\n null !== root.cancelPendingCommit\n )\n prepareFreshStack(root, 0),\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n markRootUpdated$1(root, lane);\n if (\n 0 !== (executionContext & RenderContext) &&\n root === workInProgressRoot\n ) {\n if (isRendering)\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n root =\n (workInProgress && getComponentNameFromFiber(workInProgress)) ||\n \"Unknown\";\n didWarnAboutUpdateInRenderForAnotherComponent.has(root) ||\n (didWarnAboutUpdateInRenderForAnotherComponent.add(root),\n (fiber = getComponentNameFromFiber(fiber) || \"Unknown\"),\n console.error(\n \"Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render\",\n fiber,\n root,\n root\n ));\n break;\n case 1:\n didWarnAboutUpdateInRender ||\n (console.error(\n \"Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.\"\n ),\n (didWarnAboutUpdateInRender = !0));\n }\n } else\n isDevToolsPresent && addFiberToLanesMap(root, fiber, lane),\n warnIfUpdatesNotWrappedWithActDEV(fiber),\n root === workInProgressRoot &&\n ((executionContext & RenderContext) === NoContext &&\n (workInProgressRootInterleavedUpdatedLanes |= lane),\n workInProgressRootExitStatus === RootSuspendedWithDelay &&\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n )),\n ensureRootIsScheduled(root);\n }\n function performWorkOnRoot(root, lanes, forceSync) {\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Should not already be working.\");\n var shouldTimeSlice =\n (!forceSync &&\n 0 === (lanes & 124) &&\n 0 === (lanes & root.expiredLanes)) ||\n checkIfRootIsPrerendering(root, lanes),\n exitStatus = shouldTimeSlice\n ? renderRootConcurrent(root, lanes)\n : renderRootSync(root, lanes, !0),\n renderWasConcurrent = shouldTimeSlice;\n do {\n if (exitStatus === RootInProgress) {\n workInProgressRootIsPrerendering &&\n !shouldTimeSlice &&\n markRootSuspended(root, lanes, 0, !1);\n break;\n } else {\n forceSync = root.current.alternate;\n if (\n renderWasConcurrent &&\n !isRenderConsistentWithExternalStores(forceSync)\n ) {\n exitStatus = renderRootSync(root, lanes, !1);\n renderWasConcurrent = !1;\n continue;\n }\n if (exitStatus === RootErrored) {\n renderWasConcurrent = lanes;\n if (root.errorRecoveryDisabledLanes & renderWasConcurrent)\n var errorRetryLanes = 0;\n else\n (errorRetryLanes = root.pendingLanes & -536870913),\n (errorRetryLanes =\n 0 !== errorRetryLanes\n ? errorRetryLanes\n : errorRetryLanes & 536870912\n ? 536870912\n : 0);\n if (0 !== errorRetryLanes) {\n lanes = errorRetryLanes;\n a: {\n exitStatus = root;\n var errorRetryLanes$jscomp$0 = errorRetryLanes;\n errorRetryLanes = workInProgressRootConcurrentErrors;\n var wasRootDehydrated =\n exitStatus.current.memoizedState.isDehydrated;\n wasRootDehydrated &&\n (prepareFreshStack(\n exitStatus,\n errorRetryLanes$jscomp$0\n ).flags |= 256);\n errorRetryLanes$jscomp$0 = renderRootSync(\n exitStatus,\n errorRetryLanes$jscomp$0,\n !1\n );\n if (errorRetryLanes$jscomp$0 !== RootErrored) {\n if (\n workInProgressRootDidAttachPingListener &&\n !wasRootDehydrated\n ) {\n exitStatus.errorRecoveryDisabledLanes |=\n renderWasConcurrent;\n workInProgressRootInterleavedUpdatedLanes |=\n renderWasConcurrent;\n exitStatus = RootSuspendedWithDelay;\n break a;\n }\n exitStatus = workInProgressRootRecoverableErrors;\n workInProgressRootRecoverableErrors = errorRetryLanes;\n null !== exitStatus &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = exitStatus)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n exitStatus\n ));\n }\n exitStatus = errorRetryLanes$jscomp$0;\n }\n renderWasConcurrent = !1;\n if (exitStatus !== RootErrored) continue;\n }\n }\n if (exitStatus === RootFatalErrored) {\n prepareFreshStack(root, 0);\n markRootSuspended(root, lanes, 0, !0);\n break;\n }\n a: {\n shouldTimeSlice = root;\n switch (exitStatus) {\n case RootInProgress:\n case RootFatalErrored:\n throw Error(\"Root did not complete. This is a bug in React.\");\n case RootSuspendedWithDelay:\n if ((lanes & 4194048) !== lanes) break;\n case RootSuspendedAtTheShell:\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n break a;\n case RootErrored:\n workInProgressRootRecoverableErrors = null;\n break;\n case RootSuspended:\n case RootCompleted:\n break;\n default:\n throw Error(\"Unknown root exit status.\");\n }\n if (null !== ReactSharedInternals.actQueue)\n commitRoot(\n shouldTimeSlice,\n forceSync,\n lanes,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes\n );\n else {\n if (\n (lanes & 62914560) === lanes &&\n ((renderWasConcurrent =\n globalMostRecentFallbackTime +\n FALLBACK_THROTTLE_MS -\n now$1()),\n 10 < renderWasConcurrent)\n ) {\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n shouldTimeSlice.timeoutHandle = scheduleTimeout(\n commitRootWhenReady.bind(\n null,\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n exitStatus,\n THROTTLED_COMMIT,\n renderStartTime,\n 0\n ),\n renderWasConcurrent\n );\n break a;\n }\n commitRootWhenReady(\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n exitStatus,\n IMMEDIATE_COMMIT,\n renderStartTime,\n 0\n );\n }\n }\n }\n break;\n } while (1);\n ensureRootIsScheduled(root);\n }\n function commitRootWhenReady(\n root,\n finishedWork,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n lanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n exitStatus,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n ) {\n root.timeoutHandle = noTimeout;\n suspendedCommitReason = finishedWork.subtreeFlags;\n if (\n suspendedCommitReason & 8192 ||\n 16785408 === (suspendedCommitReason & 16785408)\n )\n if (\n ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),\n accumulateSuspenseyCommitOnFiber(finishedWork),\n (suspendedCommitReason = waitForCommitToBeReady()),\n null !== suspendedCommitReason)\n ) {\n root.cancelPendingCommit = suspendedCommitReason(\n commitRoot.bind(\n null,\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n exitStatus,\n SUSPENDED_COMMIT,\n completedRenderStartTime,\n completedRenderEndTime\n )\n );\n markRootSuspended(\n root,\n lanes,\n spawnedLane,\n !didSkipSuspendedSiblings\n );\n return;\n }\n commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n }\n function isRenderConsistentWithExternalStores(finishedWork) {\n for (var node = finishedWork; ; ) {\n var tag = node.tag;\n if (\n (0 === tag || 11 === tag || 15 === tag) &&\n node.flags & 16384 &&\n ((tag = node.updateQueue),\n null !== tag && ((tag = tag.stores), null !== tag))\n )\n for (var i = 0; i < tag.length; i++) {\n var check = tag[i],\n getSnapshot = check.getSnapshot;\n check = check.value;\n try {\n if (!objectIs(getSnapshot(), check)) return !1;\n } catch (error) {\n return !1;\n }\n }\n tag = node.child;\n if (node.subtreeFlags & 16384 && null !== tag)\n (tag.return = node), (node = tag);\n else {\n if (node === finishedWork) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === finishedWork) return !0;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n return !0;\n }\n function markRootSuspended(\n root,\n suspendedLanes,\n spawnedLane,\n didAttemptEntireTree\n ) {\n suspendedLanes &= ~workInProgressRootPingedLanes;\n suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes;\n didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n didAttemptEntireTree = root.expirationTimes;\n for (var lanes = suspendedLanes; 0 < lanes; ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index;\n didAttemptEntireTree[index] = -1;\n lanes &= ~lane;\n }\n 0 !== spawnedLane &&\n markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n }\n function flushSyncWork$1() {\n return (executionContext & (RenderContext | CommitContext)) === NoContext\n ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n : !0;\n }\n function resetWorkInProgressStack() {\n if (null !== workInProgress) {\n if (workInProgressSuspendedReason === NotSuspended)\n var interruptedWork = workInProgress.return;\n else\n (interruptedWork = workInProgress),\n resetContextDependencies(),\n resetHooksOnUnwind(interruptedWork),\n (thenableState = null),\n (thenableIndexCounter = 0),\n (interruptedWork = workInProgress);\n for (; null !== interruptedWork; )\n unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n (interruptedWork = interruptedWork.return);\n workInProgress = null;\n }\n }\n function prepareFreshStack(root, lanes) {\n var timeoutHandle = root.timeoutHandle;\n timeoutHandle !== noTimeout &&\n ((root.timeoutHandle = noTimeout), cancelTimeout(timeoutHandle));\n timeoutHandle = root.cancelPendingCommit;\n null !== timeoutHandle &&\n ((root.cancelPendingCommit = null), timeoutHandle());\n resetWorkInProgressStack();\n workInProgressRoot = root;\n workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n workInProgressRootRenderLanes = lanes;\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n workInProgressRootDidSkipSuspendedSiblings = !1;\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n workInProgressRootDidAttachPingListener = !1;\n workInProgressRootExitStatus = RootInProgress;\n workInProgressSuspendedRetryLanes =\n workInProgressDeferredLane =\n workInProgressRootPingedLanes =\n workInProgressRootInterleavedUpdatedLanes =\n workInProgressRootSkippedLanes =\n 0;\n workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n null;\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n 0 !== (lanes & 8) && (lanes |= lanes & 32);\n var allEntangledLanes = root.entangledLanes;\n if (0 !== allEntangledLanes)\n for (\n root = root.entanglements, allEntangledLanes &= lanes;\n 0 < allEntangledLanes;\n\n ) {\n var index = 31 - clz32(allEntangledLanes),\n lane = 1 << index;\n lanes |= root[index];\n allEntangledLanes &= ~lane;\n }\n entangledRenderLanes = lanes;\n finishQueueingConcurrentUpdates();\n lanes = getCurrentTime();\n 1e3 < lanes - lastResetTime &&\n ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),\n (lastResetTime = lanes));\n ReactStrictModeWarnings.discardPendingWarnings();\n return timeoutHandle;\n }\n function handleThrow(root, thrownValue) {\n currentlyRenderingFiber = null;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n ReactSharedInternals.getCurrentStack = null;\n isRendering = !1;\n current = null;\n thrownValue === SuspenseException ||\n thrownValue === SuspenseActionException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = SuspendedOnImmediate))\n : thrownValue === SuspenseyCommitException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = SuspendedOnInstance))\n : (workInProgressSuspendedReason =\n thrownValue === SelectiveHydrationException\n ? SuspendedOnHydration\n : null !== thrownValue &&\n \"object\" === typeof thrownValue &&\n \"function\" === typeof thrownValue.then\n ? SuspendedOnDeprecatedThrowPromise\n : SuspendedOnError);\n workInProgressThrownValue = thrownValue;\n var erroredWork = workInProgress;\n if (null === erroredWork)\n (workInProgressRootExitStatus = RootFatalErrored),\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n else\n switch (\n (erroredWork.mode & ProfileMode &&\n stopProfilerTimerIfRunningAndRecordDuration(erroredWork),\n markComponentRenderStopped(),\n workInProgressSuspendedReason)\n ) {\n case SuspendedOnError:\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentErrored &&\n injectedProfilingHooks.markComponentErrored(\n erroredWork,\n thrownValue,\n workInProgressRootRenderLanes\n );\n break;\n case SuspendedOnData:\n case SuspendedOnAction:\n case SuspendedOnImmediate:\n case SuspendedOnDeprecatedThrowPromise:\n case SuspendedAndReadyToContinue:\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentSuspended &&\n injectedProfilingHooks.markComponentSuspended(\n erroredWork,\n thrownValue,\n workInProgressRootRenderLanes\n );\n }\n }\n function pushDispatcher() {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n }\n function pushAsyncDispatcher() {\n var prevAsyncDispatcher = ReactSharedInternals.A;\n ReactSharedInternals.A = DefaultAsyncDispatcher;\n return prevAsyncDispatcher;\n }\n function renderDidSuspendDelayIfPossible() {\n workInProgressRootExitStatus = RootSuspendedWithDelay;\n workInProgressRootDidSkipSuspendedSiblings ||\n ((workInProgressRootRenderLanes & 4194048) !==\n workInProgressRootRenderLanes &&\n null !== suspenseHandlerStackCursor.current) ||\n (workInProgressRootIsPrerendering = !0);\n (0 === (workInProgressRootSkippedLanes & 134217727) &&\n 0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n null === workInProgressRoot ||\n markRootSuspended(\n workInProgressRoot,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n }\n function renderRootSync(root, lanes, shouldYieldForPrerendering) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (\n workInProgressRoot !== root ||\n workInProgressRootRenderLanes !== lanes\n ) {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n 0 < memoizedUpdaters.size &&\n (restorePendingUpdaters(root, workInProgressRootRenderLanes),\n memoizedUpdaters.clear());\n movePendingFibersToMemoized(root, lanes);\n }\n workInProgressTransitions = null;\n prepareFreshStack(root, lanes);\n }\n markRenderStarted(lanes);\n lanes = !1;\n memoizedUpdaters = workInProgressRootExitStatus;\n a: do\n try {\n if (\n workInProgressSuspendedReason !== NotSuspended &&\n null !== workInProgress\n ) {\n var unitOfWork = workInProgress,\n thrownValue = workInProgressThrownValue;\n switch (workInProgressSuspendedReason) {\n case SuspendedOnHydration:\n resetWorkInProgressStack();\n memoizedUpdaters = RootSuspendedAtTheShell;\n break a;\n case SuspendedOnImmediate:\n case SuspendedOnData:\n case SuspendedOnAction:\n case SuspendedOnDeprecatedThrowPromise:\n null === suspenseHandlerStackCursor.current && (lanes = !0);\n var reason = workInProgressSuspendedReason;\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n if (\n shouldYieldForPrerendering &&\n workInProgressRootIsPrerendering\n ) {\n memoizedUpdaters = RootInProgress;\n break a;\n }\n break;\n default:\n (reason = workInProgressSuspendedReason),\n (workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n }\n }\n workLoopSync();\n memoizedUpdaters = workInProgressRootExitStatus;\n break;\n } catch (thrownValue$8) {\n handleThrow(root, thrownValue$8);\n }\n while (1);\n lanes && root.shellSuspendCounter++;\n resetContextDependencies();\n executionContext = prevExecutionContext;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n markRenderStopped();\n null === workInProgress &&\n ((workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0),\n finishQueueingConcurrentUpdates());\n return memoizedUpdaters;\n }\n function workLoopSync() {\n for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n }\n function renderRootConcurrent(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (\n workInProgressRoot !== root ||\n workInProgressRootRenderLanes !== lanes\n ) {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n 0 < memoizedUpdaters.size &&\n (restorePendingUpdaters(root, workInProgressRootRenderLanes),\n memoizedUpdaters.clear());\n movePendingFibersToMemoized(root, lanes);\n }\n workInProgressTransitions = null;\n workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS;\n prepareFreshStack(root, lanes);\n } else\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n root,\n lanes\n );\n markRenderStarted(lanes);\n a: do\n try {\n if (\n workInProgressSuspendedReason !== NotSuspended &&\n null !== workInProgress\n )\n b: switch (\n ((lanes = workInProgress),\n (memoizedUpdaters = workInProgressThrownValue),\n workInProgressSuspendedReason)\n ) {\n case SuspendedOnError:\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnError\n );\n break;\n case SuspendedOnData:\n case SuspendedOnAction:\n if (isThenableResolved(memoizedUpdaters)) {\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n replaySuspendedUnitOfWork(lanes);\n break;\n }\n lanes = function () {\n (workInProgressSuspendedReason !== SuspendedOnData &&\n workInProgressSuspendedReason !== SuspendedOnAction) ||\n workInProgressRoot !== root ||\n (workInProgressSuspendedReason =\n SuspendedAndReadyToContinue);\n ensureRootIsScheduled(root);\n };\n memoizedUpdaters.then(lanes, lanes);\n break a;\n case SuspendedOnImmediate:\n workInProgressSuspendedReason = SuspendedAndReadyToContinue;\n break a;\n case SuspendedOnInstance:\n workInProgressSuspendedReason =\n SuspendedOnInstanceAndReadyToContinue;\n break a;\n case SuspendedAndReadyToContinue:\n isThenableResolved(memoizedUpdaters)\n ? ((workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n replaySuspendedUnitOfWork(lanes))\n : ((workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedAndReadyToContinue\n ));\n break;\n case SuspendedOnInstanceAndReadyToContinue:\n var resource = null;\n switch (workInProgress.tag) {\n case 26:\n resource = workInProgress.memoizedState;\n case 5:\n case 27:\n var hostFiber = workInProgress;\n if (resource ? preloadResource(resource) : 1) {\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n var sibling = hostFiber.sibling;\n if (null !== sibling) workInProgress = sibling;\n else {\n var returnFiber = hostFiber.return;\n null !== returnFiber\n ? ((workInProgress = returnFiber),\n completeUnitOfWork(returnFiber))\n : (workInProgress = null);\n }\n break b;\n }\n break;\n default:\n console.error(\n \"Unexpected type of fiber triggered a suspensey commit. This is a bug in React.\"\n );\n }\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnInstanceAndReadyToContinue\n );\n break;\n case SuspendedOnDeprecatedThrowPromise:\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnDeprecatedThrowPromise\n );\n break;\n case SuspendedOnHydration:\n resetWorkInProgressStack();\n workInProgressRootExitStatus = RootSuspendedAtTheShell;\n break a;\n default:\n throw Error(\n \"Unexpected SuspendedReason. This is a bug in React.\"\n );\n }\n null !== ReactSharedInternals.actQueue\n ? workLoopSync()\n : workLoopConcurrentByScheduler();\n break;\n } catch (thrownValue$9) {\n handleThrow(root, thrownValue$9);\n }\n while (1);\n resetContextDependencies();\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n executionContext = prevExecutionContext;\n if (null !== workInProgress)\n return (\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderYielded &&\n injectedProfilingHooks.markRenderYielded(),\n RootInProgress\n );\n markRenderStopped();\n workInProgressRoot = null;\n workInProgressRootRenderLanes = 0;\n finishQueueingConcurrentUpdates();\n return workInProgressRootExitStatus;\n }\n function workLoopConcurrentByScheduler() {\n for (; null !== workInProgress && !shouldYield(); )\n performUnitOfWork(workInProgress);\n }\n function performUnitOfWork(unitOfWork) {\n var current = unitOfWork.alternate;\n (unitOfWork.mode & ProfileMode) !== NoMode\n ? (startProfilerTimer(unitOfWork),\n (current = runWithFiberInDEV(\n unitOfWork,\n beginWork,\n current,\n unitOfWork,\n entangledRenderLanes\n )),\n stopProfilerTimerIfRunningAndRecordDuration(unitOfWork))\n : (current = runWithFiberInDEV(\n unitOfWork,\n beginWork,\n current,\n unitOfWork,\n entangledRenderLanes\n ));\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === current\n ? completeUnitOfWork(unitOfWork)\n : (workInProgress = current);\n }\n function replaySuspendedUnitOfWork(unitOfWork) {\n var next = runWithFiberInDEV(unitOfWork, replayBeginWork, unitOfWork);\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n }\n function replayBeginWork(unitOfWork) {\n var current = unitOfWork.alternate,\n isProfilingMode = (unitOfWork.mode & ProfileMode) !== NoMode;\n isProfilingMode && startProfilerTimer(unitOfWork);\n switch (unitOfWork.tag) {\n case 15:\n case 0:\n current = replayFunctionComponent(\n current,\n unitOfWork,\n unitOfWork.pendingProps,\n unitOfWork.type,\n void 0,\n workInProgressRootRenderLanes\n );\n break;\n case 11:\n current = replayFunctionComponent(\n current,\n unitOfWork,\n unitOfWork.pendingProps,\n unitOfWork.type.render,\n unitOfWork.ref,\n workInProgressRootRenderLanes\n );\n break;\n case 5:\n resetHooksOnUnwind(unitOfWork);\n default:\n unwindInterruptedWork(current, unitOfWork),\n (unitOfWork = workInProgress =\n resetWorkInProgress(unitOfWork, entangledRenderLanes)),\n (current = beginWork(current, unitOfWork, entangledRenderLanes));\n }\n isProfilingMode &&\n stopProfilerTimerIfRunningAndRecordDuration(unitOfWork);\n return current;\n }\n function throwAndUnwindWorkLoop(\n root,\n unitOfWork,\n thrownValue,\n suspendedReason\n ) {\n resetContextDependencies();\n resetHooksOnUnwind(unitOfWork);\n thenableState = null;\n thenableIndexCounter = 0;\n var returnFiber = unitOfWork.return;\n try {\n if (\n throwException(\n root,\n returnFiber,\n unitOfWork,\n thrownValue,\n workInProgressRootRenderLanes\n )\n ) {\n workInProgressRootExitStatus = RootFatalErrored;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n } catch (error) {\n if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n workInProgressRootExitStatus = RootFatalErrored;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n if (unitOfWork.flags & 32768) {\n if (isHydrating || suspendedReason === SuspendedOnError) root = !0;\n else if (\n workInProgressRootIsPrerendering ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n )\n root = !1;\n else if (\n ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n suspendedReason === SuspendedOnData ||\n suspendedReason === SuspendedOnAction ||\n suspendedReason === SuspendedOnImmediate ||\n suspendedReason === SuspendedOnDeprecatedThrowPromise)\n )\n (suspendedReason = suspenseHandlerStackCursor.current),\n null !== suspendedReason &&\n 13 === suspendedReason.tag &&\n (suspendedReason.flags |= 16384);\n unwindUnitOfWork(unitOfWork, root);\n } else completeUnitOfWork(unitOfWork);\n }\n function completeUnitOfWork(unitOfWork) {\n var completedWork = unitOfWork;\n do {\n if (0 !== (completedWork.flags & 32768)) {\n unwindUnitOfWork(\n completedWork,\n workInProgressRootDidSkipSuspendedSiblings\n );\n return;\n }\n var current = completedWork.alternate;\n unitOfWork = completedWork.return;\n startProfilerTimer(completedWork);\n current = runWithFiberInDEV(\n completedWork,\n completeWork,\n current,\n completedWork,\n entangledRenderLanes\n );\n (completedWork.mode & ProfileMode) !== NoMode &&\n stopProfilerTimerIfRunningAndRecordIncompleteDuration(completedWork);\n if (null !== current) {\n workInProgress = current;\n return;\n }\n completedWork = completedWork.sibling;\n if (null !== completedWork) {\n workInProgress = completedWork;\n return;\n }\n workInProgress = completedWork = unitOfWork;\n } while (null !== completedWork);\n workInProgressRootExitStatus === RootInProgress &&\n (workInProgressRootExitStatus = RootCompleted);\n }\n function unwindUnitOfWork(unitOfWork, skipSiblings) {\n do {\n var next = unwindWork(unitOfWork.alternate, unitOfWork);\n if (null !== next) {\n next.flags &= 32767;\n workInProgress = next;\n return;\n }\n if ((unitOfWork.mode & ProfileMode) !== NoMode) {\n stopProfilerTimerIfRunningAndRecordIncompleteDuration(unitOfWork);\n next = unitOfWork.actualDuration;\n for (var child = unitOfWork.child; null !== child; )\n (next += child.actualDuration), (child = child.sibling);\n unitOfWork.actualDuration = next;\n }\n next = unitOfWork.return;\n null !== next &&\n ((next.flags |= 32768),\n (next.subtreeFlags = 0),\n (next.deletions = null));\n if (\n !skipSiblings &&\n ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n ) {\n workInProgress = unitOfWork;\n return;\n }\n workInProgress = unitOfWork = next;\n } while (null !== unitOfWork);\n workInProgressRootExitStatus = RootSuspendedAtTheShell;\n workInProgress = null;\n }\n function commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n ) {\n root.cancelPendingCommit = null;\n do flushPendingEffects();\n while (pendingEffectsStatus !== NO_PENDING_EFFECTS);\n ReactStrictModeWarnings.flushLegacyContextWarning();\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Should not already be working.\");\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markCommitStarted &&\n injectedProfilingHooks.markCommitStarted(lanes);\n if (null === finishedWork) markCommitStopped();\n else {\n 0 === lanes &&\n console.error(\n \"finishedLanes should not be empty during a commit. This is a bug in React.\"\n );\n if (finishedWork === root.current)\n throw Error(\n \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\"\n );\n didIncludeRenderPhaseUpdate =\n finishedWork.lanes | finishedWork.childLanes;\n didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n markRootFinished(\n root,\n lanes,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n root === workInProgressRoot &&\n ((workInProgress = workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0));\n pendingFinishedWork = finishedWork;\n pendingEffectsRoot = root;\n pendingEffectsLanes = lanes;\n pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n pendingPassiveTransitions = transitions;\n pendingRecoverableErrors = recoverableErrors;\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256)\n ? ((root.callbackNode = null),\n (root.callbackPriority = 0),\n scheduleCallback$1(NormalPriority$1, function () {\n flushPassiveEffects(!0);\n return null;\n }))\n : ((root.callbackNode = null), (root.callbackPriority = 0));\n commitStartTime = now();\n recoverableErrors = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n recoverableErrors = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n transitions = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n spawnedLane = executionContext;\n executionContext |= CommitContext;\n try {\n commitBeforeMutationEffects(root, finishedWork, lanes);\n } finally {\n (executionContext = spawnedLane),\n (ReactDOMSharedInternals.p = transitions),\n (ReactSharedInternals.T = recoverableErrors);\n }\n }\n pendingEffectsStatus = PENDING_MUTATION_PHASE;\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n }\n }\n function flushMutationEffects() {\n if (pendingEffectsStatus === PENDING_MUTATION_PHASE) {\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n if (\n 0 !== (finishedWork.subtreeFlags & 13878) ||\n rootMutationHasEffect\n ) {\n rootMutationHasEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n try {\n inProgressLanes = lanes;\n inProgressRoot = root;\n commitMutationEffectsOnFiber(finishedWork, root);\n inProgressRoot = inProgressLanes = null;\n lanes = selectionInformation;\n var curFocusedElem = getActiveElementDeep(root.containerInfo),\n priorFocusedElem = lanes.focusedElem,\n priorSelectionRange = lanes.selectionRange;\n if (\n curFocusedElem !== priorFocusedElem &&\n priorFocusedElem &&\n priorFocusedElem.ownerDocument &&\n containsNode(\n priorFocusedElem.ownerDocument.documentElement,\n priorFocusedElem\n )\n ) {\n if (\n null !== priorSelectionRange &&\n hasSelectionCapabilities(priorFocusedElem)\n ) {\n var start = priorSelectionRange.start,\n end = priorSelectionRange.end;\n void 0 === end && (end = start);\n if (\"selectionStart\" in priorFocusedElem)\n (priorFocusedElem.selectionStart = start),\n (priorFocusedElem.selectionEnd = Math.min(\n end,\n priorFocusedElem.value.length\n ));\n else {\n var doc = priorFocusedElem.ownerDocument || document,\n win = (doc && doc.defaultView) || window;\n if (win.getSelection) {\n var selection = win.getSelection(),\n length = priorFocusedElem.textContent.length,\n start$jscomp$0 = Math.min(\n priorSelectionRange.start,\n length\n ),\n end$jscomp$0 =\n void 0 === priorSelectionRange.end\n ? start$jscomp$0\n : Math.min(priorSelectionRange.end, length);\n !selection.extend &&\n start$jscomp$0 > end$jscomp$0 &&\n ((curFocusedElem = end$jscomp$0),\n (end$jscomp$0 = start$jscomp$0),\n (start$jscomp$0 = curFocusedElem));\n var startMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n start$jscomp$0\n ),\n endMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n end$jscomp$0\n );\n if (\n startMarker &&\n endMarker &&\n (1 !== selection.rangeCount ||\n selection.anchorNode !== startMarker.node ||\n selection.anchorOffset !== startMarker.offset ||\n selection.focusNode !== endMarker.node ||\n selection.focusOffset !== endMarker.offset)\n ) {\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n start$jscomp$0 > end$jscomp$0\n ? (selection.addRange(range),\n selection.extend(endMarker.node, endMarker.offset))\n : (range.setEnd(endMarker.node, endMarker.offset),\n selection.addRange(range));\n }\n }\n }\n }\n doc = [];\n for (\n selection = priorFocusedElem;\n (selection = selection.parentNode);\n\n )\n 1 === selection.nodeType &&\n doc.push({\n element: selection,\n left: selection.scrollLeft,\n top: selection.scrollTop\n });\n \"function\" === typeof priorFocusedElem.focus &&\n priorFocusedElem.focus();\n for (\n priorFocusedElem = 0;\n priorFocusedElem < doc.length;\n priorFocusedElem++\n ) {\n var info = doc[priorFocusedElem];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n _enabled = !!eventsEnabled;\n selectionInformation = eventsEnabled = null;\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootMutationHasEffect);\n }\n }\n root.current = finishedWork;\n pendingEffectsStatus = PENDING_LAYOUT_PHASE;\n }\n }\n function flushLayoutEffects() {\n if (pendingEffectsStatus === PENDING_LAYOUT_PHASE) {\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n rootHasLayoutEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n try {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markLayoutEffectsStarted &&\n injectedProfilingHooks.markLayoutEffectsStarted(lanes),\n (inProgressLanes = lanes),\n (inProgressRoot = root),\n commitLayoutEffectOnFiber(\n root,\n finishedWork.alternate,\n finishedWork\n ),\n (inProgressRoot = inProgressLanes = null),\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markLayoutEffectsStopped &&\n injectedProfilingHooks.markLayoutEffectsStopped();\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootHasLayoutEffect);\n }\n }\n pendingEffectsStatus = PENDING_AFTER_MUTATION_PHASE;\n }\n }\n function flushSpawnedWork() {\n if (\n pendingEffectsStatus === PENDING_SPAWNED_WORK ||\n pendingEffectsStatus === PENDING_AFTER_MUTATION_PHASE\n ) {\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n requestPaint();\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n recoverableErrors = pendingRecoverableErrors,\n rootDidHavePassiveEffects =\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256);\n rootDidHavePassiveEffects\n ? (pendingEffectsStatus = PENDING_PASSIVE_PHASE)\n : ((pendingEffectsStatus = NO_PENDING_EFFECTS),\n (pendingFinishedWork = pendingEffectsRoot = null),\n releaseRootPooledCache(root, root.pendingLanes),\n (nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = null));\n var remainingLanes = root.pendingLanes;\n 0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n rootDidHavePassiveEffects || commitDoubleInvokeEffectsInDEV(root);\n rootDidHavePassiveEffects = lanesToEventPriority(lanes);\n finishedWork = finishedWork.stateNode;\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onCommitFiberRoot\n )\n try {\n var didError = 128 === (finishedWork.current.flags & 128);\n switch (rootDidHavePassiveEffects) {\n case DiscreteEventPriority:\n var schedulerPriority = ImmediatePriority;\n break;\n case ContinuousEventPriority:\n schedulerPriority = UserBlockingPriority;\n break;\n case DefaultEventPriority:\n schedulerPriority = NormalPriority$1;\n break;\n case IdleEventPriority:\n schedulerPriority = IdlePriority;\n break;\n default:\n schedulerPriority = NormalPriority$1;\n }\n injectedHook.onCommitFiberRoot(\n rendererID,\n finishedWork,\n schedulerPriority,\n didError\n );\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n isDevToolsPresent && root.memoizedUpdaters.clear();\n onCommitRoot();\n if (null !== recoverableErrors) {\n didError = ReactSharedInternals.T;\n schedulerPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n ReactSharedInternals.T = null;\n try {\n var onRecoverableError = root.onRecoverableError;\n for (\n finishedWork = 0;\n finishedWork < recoverableErrors.length;\n finishedWork++\n ) {\n var recoverableError = recoverableErrors[finishedWork],\n errorInfo = makeErrorInfo(recoverableError.stack);\n runWithFiberInDEV(\n recoverableError.source,\n onRecoverableError,\n recoverableError.value,\n errorInfo\n );\n }\n } finally {\n (ReactSharedInternals.T = didError),\n (ReactDOMSharedInternals.p = schedulerPriority);\n }\n }\n 0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n ensureRootIsScheduled(root);\n remainingLanes = root.pendingLanes;\n 0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)\n ? ((nestedUpdateScheduled = !0),\n root === rootWithNestedUpdates\n ? nestedUpdateCount++\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root)))\n : (nestedUpdateCount = 0);\n flushSyncWorkAcrossRoots_impl(0, !1);\n markCommitStopped();\n }\n }\n function makeErrorInfo(componentStack) {\n componentStack = { componentStack: componentStack };\n Object.defineProperty(componentStack, \"digest\", {\n get: function () {\n console.error(\n 'You are accessing \"digest\" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.'\n );\n }\n });\n return componentStack;\n }\n function releaseRootPooledCache(root, remainingLanes) {\n 0 === (root.pooledCacheLanes &= remainingLanes) &&\n ((remainingLanes = root.pooledCache),\n null != remainingLanes &&\n ((root.pooledCache = null), releaseCache(remainingLanes)));\n }\n function flushPendingEffects(wasDelayedCommit) {\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n return flushPassiveEffects(wasDelayedCommit);\n }\n function flushPassiveEffects() {\n if (pendingEffectsStatus !== PENDING_PASSIVE_PHASE) return !1;\n var root = pendingEffectsRoot,\n remainingLanes = pendingEffectsRemainingLanes;\n pendingEffectsRemainingLanes = 0;\n var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n priority =\n 0 === DefaultEventPriority || DefaultEventPriority > renderPriority\n ? DefaultEventPriority\n : renderPriority;\n renderPriority = ReactSharedInternals.T;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n ReactDOMSharedInternals.p = priority;\n ReactSharedInternals.T = null;\n priority = pendingPassiveTransitions;\n pendingPassiveTransitions = null;\n var root$jscomp$0 = pendingEffectsRoot,\n lanes = pendingEffectsLanes;\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n pendingFinishedWork = pendingEffectsRoot = null;\n pendingEffectsLanes = 0;\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Cannot flush passive effects while already rendering.\");\n isFlushingPassiveEffects = !0;\n didScheduleUpdateDuringPassiveEffects = !1;\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markPassiveEffectsStarted &&\n injectedProfilingHooks.markPassiveEffectsStarted(lanes);\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n commitPassiveUnmountOnFiber(root$jscomp$0.current);\n commitPassiveMountOnFiber(\n root$jscomp$0,\n root$jscomp$0.current,\n lanes,\n priority\n );\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markPassiveEffectsStopped &&\n injectedProfilingHooks.markPassiveEffectsStopped();\n commitDoubleInvokeEffectsInDEV(root$jscomp$0);\n executionContext = prevExecutionContext;\n flushSyncWorkAcrossRoots_impl(0, !1);\n didScheduleUpdateDuringPassiveEffects\n ? root$jscomp$0 === rootWithPassiveNestedUpdates\n ? nestedPassiveUpdateCount++\n : ((nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = root$jscomp$0))\n : (nestedPassiveUpdateCount = 0);\n didScheduleUpdateDuringPassiveEffects = isFlushingPassiveEffects = !1;\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onPostCommitFiberRoot\n )\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n var stateNode = root$jscomp$0.current.stateNode;\n stateNode.effectDuration = 0;\n stateNode.passiveEffectDuration = 0;\n return !0;\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = renderPriority),\n releaseRootPooledCache(root, remainingLanes);\n }\n }\n function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n null !== rootFiber &&\n (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n }\n function captureCommitPhaseError(\n sourceFiber,\n nearestMountedAncestor,\n error\n ) {\n isRunningInsertionEffect = !1;\n if (3 === sourceFiber.tag)\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n else {\n for (; null !== nearestMountedAncestor; ) {\n if (3 === nearestMountedAncestor.tag) {\n captureCommitPhaseErrorOnRoot(\n nearestMountedAncestor,\n sourceFiber,\n error\n );\n return;\n }\n if (1 === nearestMountedAncestor.tag) {\n var instance = nearestMountedAncestor.stateNode;\n if (\n \"function\" ===\n typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n (\"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n ) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n error = createClassErrorUpdate(2);\n instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n null !== instance &&\n (initializeClassErrorUpdate(\n error,\n instance,\n nearestMountedAncestor,\n sourceFiber\n ),\n markRootUpdated$1(instance, 2),\n ensureRootIsScheduled(instance));\n return;\n }\n }\n nearestMountedAncestor = nearestMountedAncestor.return;\n }\n console.error(\n \"Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.\\n\\nError message:\\n\\n%s\",\n error\n );\n }\n }\n function attachPingListener(root, wakeable, lanes) {\n var pingCache = root.pingCache;\n if (null === pingCache) {\n pingCache = root.pingCache = new PossiblyWeakMap();\n var threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n } else\n (threadIDs = pingCache.get(wakeable)),\n void 0 === threadIDs &&\n ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n threadIDs.has(lanes) ||\n ((workInProgressRootDidAttachPingListener = !0),\n threadIDs.add(lanes),\n (pingCache = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n isDevToolsPresent && restorePendingUpdaters(root, lanes),\n wakeable.then(pingCache, pingCache));\n }\n function pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n null !== pingCache && pingCache.delete(wakeable);\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n root.warmLanes &= ~pingedLanes;\n isConcurrentActEnvironment() &&\n null === ReactSharedInternals.actQueue &&\n console.error(\n \"A suspended resource finished loading inside a test, but the event was not wrapped in act(...).\\n\\nWhen testing, code that resolves suspended data should be wrapped into act(...):\\n\\nact(() => {\\n /* finish loading suspended data */\\n});\\n/* assert on the output */\\n\\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act\"\n );\n workInProgressRoot === root &&\n (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n (workInProgressRootExitStatus === RootSuspendedWithDelay ||\n (workInProgressRootExitStatus === RootSuspended &&\n (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes &&\n now$1() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS)\n ? (executionContext & RenderContext) === NoContext &&\n prepareFreshStack(root, 0)\n : (workInProgressRootPingedLanes |= pingedLanes),\n workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n (workInProgressSuspendedRetryLanes = 0));\n ensureRootIsScheduled(root);\n }\n function retryTimedOutBoundary(boundaryFiber, retryLane) {\n 0 === retryLane && (retryLane = claimNextRetryLane());\n boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n null !== boundaryFiber &&\n (markRootUpdated$1(boundaryFiber, retryLane),\n ensureRootIsScheduled(boundaryFiber));\n }\n function retryDehydratedSuspenseBoundary(boundaryFiber) {\n var suspenseState = boundaryFiber.memoizedState,\n retryLane = 0;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n }\n function resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryLane = 0;\n switch (boundaryFiber.tag) {\n case 13:\n var retryCache = boundaryFiber.stateNode;\n var suspenseState = boundaryFiber.memoizedState;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n break;\n case 19:\n retryCache = boundaryFiber.stateNode;\n break;\n case 22:\n retryCache = boundaryFiber.stateNode._retryCache;\n break;\n default:\n throw Error(\n \"Pinged unknown suspense boundary type. This is probably a bug in React.\"\n );\n }\n null !== retryCache && retryCache.delete(wakeable);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n }\n function recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root$jscomp$0,\n parentFiber,\n isInStrictMode\n ) {\n if (0 !== (parentFiber.subtreeFlags & 67117056))\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var root = root$jscomp$0,\n fiber = parentFiber,\n isStrictModeFiber = fiber.type === REACT_STRICT_MODE_TYPE;\n isStrictModeFiber = isInStrictMode || isStrictModeFiber;\n 22 !== fiber.tag\n ? fiber.flags & 67108864\n ? isStrictModeFiber &&\n runWithFiberInDEV(\n fiber,\n doubleInvokeEffectsOnFiber,\n root,\n fiber,\n (fiber.mode & NoStrictPassiveEffectsMode) === NoMode\n )\n : recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root,\n fiber,\n isStrictModeFiber\n )\n : null === fiber.memoizedState &&\n (isStrictModeFiber && fiber.flags & 8192\n ? runWithFiberInDEV(\n fiber,\n doubleInvokeEffectsOnFiber,\n root,\n fiber\n )\n : fiber.subtreeFlags & 67108864 &&\n runWithFiberInDEV(\n fiber,\n recursivelyTraverseAndDoubleInvokeEffectsInDEV,\n root,\n fiber,\n isStrictModeFiber\n ));\n parentFiber = parentFiber.sibling;\n }\n }\n function doubleInvokeEffectsOnFiber(root, fiber) {\n var shouldDoubleInvokePassiveEffects =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : !0;\n setIsStrictModeForDevtools(!0);\n try {\n disappearLayoutEffects(fiber),\n shouldDoubleInvokePassiveEffects && disconnectPassiveEffect(fiber),\n reappearLayoutEffects(root, fiber.alternate, fiber, !1),\n shouldDoubleInvokePassiveEffects &&\n reconnectPassiveEffects(root, fiber, 0, null, !1, 0);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n function commitDoubleInvokeEffectsInDEV(root) {\n var doubleInvokeEffects = !0;\n root.current.mode & (StrictLegacyMode | StrictEffectsMode) ||\n (doubleInvokeEffects = !1);\n recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root,\n root.current,\n doubleInvokeEffects\n );\n }\n function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {\n if ((executionContext & RenderContext) === NoContext) {\n var tag = fiber.tag;\n if (\n 3 === tag ||\n 1 === tag ||\n 0 === tag ||\n 11 === tag ||\n 14 === tag ||\n 15 === tag\n ) {\n tag = getComponentNameFromFiber(fiber) || \"ReactComponent\";\n if (null !== didWarnStateUpdateForNotYetMountedComponent) {\n if (didWarnStateUpdateForNotYetMountedComponent.has(tag)) return;\n didWarnStateUpdateForNotYetMountedComponent.add(tag);\n } else didWarnStateUpdateForNotYetMountedComponent = new Set([tag]);\n runWithFiberInDEV(fiber, function () {\n console.error(\n \"Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously later calls tries to update the component. Move this work to useEffect instead.\"\n );\n });\n }\n }\n }\n function restorePendingUpdaters(root, lanes) {\n isDevToolsPresent &&\n root.memoizedUpdaters.forEach(function (schedulingFiber) {\n addFiberToLanesMap(root, schedulingFiber, lanes);\n });\n }\n function scheduleCallback$1(priorityLevel, callback) {\n var actQueue = ReactSharedInternals.actQueue;\n return null !== actQueue\n ? (actQueue.push(callback), fakeActCallbackNode$1)\n : scheduleCallback$3(priorityLevel, callback);\n }\n function warnIfUpdatesNotWrappedWithActDEV(fiber) {\n isConcurrentActEnvironment() &&\n null === ReactSharedInternals.actQueue &&\n runWithFiberInDEV(fiber, function () {\n console.error(\n \"An update to %s inside a test was not wrapped in act(...).\\n\\nWhen testing, code that causes React state updates should be wrapped into act(...):\\n\\nact(() => {\\n /* fire events that update state */\\n});\\n/* assert on the output */\\n\\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act\",\n getComponentNameFromFiber(fiber)\n );\n });\n }\n function ensureRootIsScheduled(root) {\n root !== lastScheduledRoot &&\n null === root.next &&\n (null === lastScheduledRoot\n ? (firstScheduledRoot = lastScheduledRoot = root)\n : (lastScheduledRoot = lastScheduledRoot.next = root));\n mightHavePendingSyncWork = !0;\n null !== ReactSharedInternals.actQueue\n ? didScheduleMicrotask_act ||\n ((didScheduleMicrotask_act = !0), scheduleImmediateRootScheduleTask())\n : didScheduleMicrotask ||\n ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n }\n function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n if (!isFlushingWork && mightHavePendingSyncWork) {\n isFlushingWork = !0;\n do {\n var didPerformSomeWork = !1;\n for (var root = firstScheduledRoot; null !== root; ) {\n if (!onlyLegacy)\n if (0 !== syncTransitionLanes) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) var nextLanes = 0;\n else {\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n nextLanes =\n (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n nextLanes &= pendingLanes & ~(suspendedLanes & ~pingedLanes);\n nextLanes =\n nextLanes & 201326741\n ? (nextLanes & 201326741) | 1\n : nextLanes\n ? nextLanes | 2\n : 0;\n }\n 0 !== nextLanes &&\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root, nextLanes));\n } else\n (nextLanes = workInProgressRootRenderLanes),\n (nextLanes = getNextLanes(\n root,\n root === workInProgressRoot ? nextLanes : 0,\n null !== root.cancelPendingCommit ||\n root.timeoutHandle !== noTimeout\n )),\n 0 === (nextLanes & 3) ||\n checkIfRootIsPrerendering(root, nextLanes) ||\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root, nextLanes));\n root = root.next;\n }\n } while (didPerformSomeWork);\n isFlushingWork = !1;\n }\n }\n function processRootScheduleInImmediateTask() {\n processRootScheduleInMicrotask();\n }\n function processRootScheduleInMicrotask() {\n mightHavePendingSyncWork =\n didScheduleMicrotask_act =\n didScheduleMicrotask =\n !1;\n var syncTransitionLanes = 0;\n 0 !== currentEventTransitionLane &&\n (shouldAttemptEagerTransition() &&\n (syncTransitionLanes = currentEventTransitionLane),\n (currentEventTransitionLane = 0));\n for (\n var currentTime = now$1(), prev = null, root = firstScheduledRoot;\n null !== root;\n\n ) {\n var next = root.next,\n nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n if (0 === nextLanes)\n (root.next = null),\n null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n null === next && (lastScheduledRoot = prev);\n else if (\n ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n )\n mightHavePendingSyncWork = !0;\n root = next;\n }\n flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n }\n function scheduleTaskForRootDuringMicrotask(root, currentTime) {\n for (\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n expirationTimes = root.expirationTimes,\n lanes = root.pendingLanes & -62914561;\n 0 < lanes;\n\n ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index,\n expirationTime = expirationTimes[index];\n if (-1 === expirationTime) {\n if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n expirationTimes[index] = computeExpirationTime(lane, currentTime);\n } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n lanes &= ~lane;\n }\n currentTime = workInProgressRoot;\n suspendedLanes = workInProgressRootRenderLanes;\n suspendedLanes = getNextLanes(\n root,\n root === currentTime ? suspendedLanes : 0,\n null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout\n );\n pingedLanes = root.callbackNode;\n if (\n 0 === suspendedLanes ||\n (root === currentTime &&\n (workInProgressSuspendedReason === SuspendedOnData ||\n workInProgressSuspendedReason === SuspendedOnAction)) ||\n null !== root.cancelPendingCommit\n )\n return (\n null !== pingedLanes && cancelCallback(pingedLanes),\n (root.callbackNode = null),\n (root.callbackPriority = 0)\n );\n if (\n 0 === (suspendedLanes & 3) ||\n checkIfRootIsPrerendering(root, suspendedLanes)\n ) {\n currentTime = suspendedLanes & -suspendedLanes;\n if (\n currentTime !== root.callbackPriority ||\n (null !== ReactSharedInternals.actQueue &&\n pingedLanes !== fakeActCallbackNode)\n )\n cancelCallback(pingedLanes);\n else return currentTime;\n switch (lanesToEventPriority(suspendedLanes)) {\n case DiscreteEventPriority:\n case ContinuousEventPriority:\n suspendedLanes = UserBlockingPriority;\n break;\n case DefaultEventPriority:\n suspendedLanes = NormalPriority$1;\n break;\n case IdleEventPriority:\n suspendedLanes = IdlePriority;\n break;\n default:\n suspendedLanes = NormalPriority$1;\n }\n pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n null !== ReactSharedInternals.actQueue\n ? (ReactSharedInternals.actQueue.push(pingedLanes),\n (suspendedLanes = fakeActCallbackNode))\n : (suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes));\n root.callbackPriority = currentTime;\n root.callbackNode = suspendedLanes;\n return currentTime;\n }\n null !== pingedLanes && cancelCallback(pingedLanes);\n root.callbackPriority = 2;\n root.callbackNode = null;\n return 2;\n }\n function performWorkOnRootViaSchedulerTask(root, didTimeout) {\n nestedUpdateScheduled = currentUpdateIsNested = !1;\n if (\n pendingEffectsStatus !== NO_PENDING_EFFECTS &&\n pendingEffectsStatus !== PENDING_PASSIVE_PHASE\n )\n return (root.callbackNode = null), (root.callbackPriority = 0), null;\n var originalCallbackNode = root.callbackNode;\n if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)\n return null;\n var workInProgressRootRenderLanes$jscomp$0 =\n workInProgressRootRenderLanes;\n workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n root,\n root === workInProgressRoot\n ? workInProgressRootRenderLanes$jscomp$0\n : 0,\n null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout\n );\n if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n performWorkOnRoot(\n root,\n workInProgressRootRenderLanes$jscomp$0,\n didTimeout\n );\n scheduleTaskForRootDuringMicrotask(root, now$1());\n return null != root.callbackNode &&\n root.callbackNode === originalCallbackNode\n ? performWorkOnRootViaSchedulerTask.bind(null, root)\n : null;\n }\n function performSyncWorkOnRoot(root, lanes) {\n if (flushPendingEffects()) return null;\n currentUpdateIsNested = nestedUpdateScheduled;\n nestedUpdateScheduled = !1;\n performWorkOnRoot(root, lanes, !0);\n }\n function cancelCallback(callbackNode) {\n callbackNode !== fakeActCallbackNode &&\n null !== callbackNode &&\n cancelCallback$1(callbackNode);\n }\n function scheduleImmediateRootScheduleTask() {\n null !== ReactSharedInternals.actQueue &&\n ReactSharedInternals.actQueue.push(function () {\n processRootScheduleInMicrotask();\n return null;\n });\n scheduleMicrotask(function () {\n (executionContext & (RenderContext | CommitContext)) !== NoContext\n ? scheduleCallback$3(\n ImmediatePriority,\n processRootScheduleInImmediateTask\n )\n : processRootScheduleInMicrotask();\n });\n }\n function requestTransitionLane() {\n 0 === currentEventTransitionLane &&\n (currentEventTransitionLane = claimNextTransitionLane());\n return currentEventTransitionLane;\n }\n function coerceFormActionProp(actionProp) {\n if (\n null == actionProp ||\n \"symbol\" === typeof actionProp ||\n \"boolean\" === typeof actionProp\n )\n return null;\n if (\"function\" === typeof actionProp) return actionProp;\n checkAttributeStringCoercion(actionProp, \"action\");\n return sanitizeURL(\"\" + actionProp);\n }\n function createFormDataWithSubmitter(form, submitter) {\n var temp = submitter.ownerDocument.createElement(\"input\");\n temp.name = submitter.name;\n temp.value = submitter.value;\n form.id && temp.setAttribute(\"form\", form.id);\n submitter.parentNode.insertBefore(temp, submitter);\n form = new FormData(form);\n temp.parentNode.removeChild(temp);\n return form;\n }\n function extractEvents$1(\n dispatchQueue,\n domEventName,\n maybeTargetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n if (\n \"submit\" === domEventName &&\n maybeTargetInst &&\n maybeTargetInst.stateNode === nativeEventTarget\n ) {\n var action = coerceFormActionProp(\n (nativeEventTarget[internalPropsKey] || null).action\n ),\n submitter = nativeEvent.submitter;\n submitter &&\n ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n ? coerceFormActionProp(domEventName.formAction)\n : submitter.getAttribute(\"formAction\")),\n null !== domEventName &&\n ((action = domEventName), (submitter = null)));\n var event = new SyntheticEvent(\n \"action\",\n \"action\",\n null,\n nativeEvent,\n nativeEventTarget\n );\n dispatchQueue.push({\n event: event,\n listeners: [\n {\n instance: null,\n listener: function () {\n if (nativeEvent.defaultPrevented) {\n if (0 !== currentEventTransitionLane) {\n var formData = submitter\n ? createFormDataWithSubmitter(\n nativeEventTarget,\n submitter\n )\n : new FormData(nativeEventTarget),\n pendingState = {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n };\n Object.freeze(pendingState);\n startHostTransition(\n maybeTargetInst,\n pendingState,\n null,\n formData\n );\n }\n } else\n \"function\" === typeof action &&\n (event.preventDefault(),\n (formData = submitter\n ? createFormDataWithSubmitter(\n nativeEventTarget,\n submitter\n )\n : new FormData(nativeEventTarget)),\n (pendingState = {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n }),\n Object.freeze(pendingState),\n startHostTransition(\n maybeTargetInst,\n pendingState,\n action,\n formData\n ));\n },\n currentTarget: nativeEventTarget\n }\n ]\n });\n }\n }\n function executeDispatch(event, listener, currentTarget) {\n event.currentTarget = currentTarget;\n try {\n listener(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n }\n function processDispatchQueue(dispatchQueue, eventSystemFlags) {\n eventSystemFlags = 0 !== (eventSystemFlags & 4);\n for (var i = 0; i < dispatchQueue.length; i++) {\n var _dispatchQueue$i = dispatchQueue[i];\n a: {\n var previousInstance = void 0,\n event = _dispatchQueue$i.event;\n _dispatchQueue$i = _dispatchQueue$i.listeners;\n if (eventSystemFlags)\n for (\n var i$jscomp$0 = _dispatchQueue$i.length - 1;\n 0 <= i$jscomp$0;\n i$jscomp$0--\n ) {\n var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n instance = _dispatchListeners$i.instance,\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n null !== instance\n ? runWithFiberInDEV(\n instance,\n executeDispatch,\n event,\n _dispatchListeners$i,\n currentTarget\n )\n : executeDispatch(event, _dispatchListeners$i, currentTarget);\n previousInstance = instance;\n }\n else\n for (\n i$jscomp$0 = 0;\n i$jscomp$0 < _dispatchQueue$i.length;\n i$jscomp$0++\n ) {\n _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n instance = _dispatchListeners$i.instance;\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n null !== instance\n ? runWithFiberInDEV(\n instance,\n executeDispatch,\n event,\n _dispatchListeners$i,\n currentTarget\n )\n : executeDispatch(event, _dispatchListeners$i, currentTarget);\n previousInstance = instance;\n }\n }\n }\n }\n function listenToNonDelegatedEvent(domEventName, targetElement) {\n nonDelegatedEvents.has(domEventName) ||\n console.error(\n 'Did not expect a listenToNonDelegatedEvent() call for \"%s\". This is a bug in React. Please file an issue.',\n domEventName\n );\n var listenerSet = targetElement[internalEventHandlersKey];\n void 0 === listenerSet &&\n (listenerSet = targetElement[internalEventHandlersKey] = new Set());\n var listenerSetKey = domEventName + \"__bubble\";\n listenerSet.has(listenerSetKey) ||\n (addTrappedEventListener(targetElement, domEventName, 2, !1),\n listenerSet.add(listenerSetKey));\n }\n function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n nonDelegatedEvents.has(domEventName) &&\n !isCapturePhaseListener &&\n console.error(\n 'Did not expect a listenToNativeEvent() call for \"%s\" in the bubble phase. This is a bug in React. Please file an issue.',\n domEventName\n );\n var eventSystemFlags = 0;\n isCapturePhaseListener && (eventSystemFlags |= 4);\n addTrappedEventListener(\n target,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n );\n }\n function listenToAllSupportedEvents(rootContainerElement) {\n if (!rootContainerElement[listeningMarker]) {\n rootContainerElement[listeningMarker] = !0;\n allNativeEvents.forEach(function (domEventName) {\n \"selectionchange\" !== domEventName &&\n (nonDelegatedEvents.has(domEventName) ||\n listenToNativeEvent(domEventName, !1, rootContainerElement),\n listenToNativeEvent(domEventName, !0, rootContainerElement));\n });\n var ownerDocument =\n 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n null === ownerDocument ||\n ownerDocument[listeningMarker] ||\n ((ownerDocument[listeningMarker] = !0),\n listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n }\n }\n function addTrappedEventListener(\n targetContainer,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n ) {\n switch (getEventPriority(domEventName)) {\n case DiscreteEventPriority:\n var listenerWrapper = dispatchDiscreteEvent;\n break;\n case ContinuousEventPriority:\n listenerWrapper = dispatchContinuousEvent;\n break;\n default:\n listenerWrapper = dispatchEvent;\n }\n eventSystemFlags = listenerWrapper.bind(\n null,\n domEventName,\n eventSystemFlags,\n targetContainer\n );\n listenerWrapper = void 0;\n !passiveBrowserEventsSupported ||\n (\"touchstart\" !== domEventName &&\n \"touchmove\" !== domEventName &&\n \"wheel\" !== domEventName) ||\n (listenerWrapper = !0);\n isCapturePhaseListener\n ? void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n capture: !0,\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n : void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(\n domEventName,\n eventSystemFlags,\n !1\n );\n }\n function dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n targetInst$jscomp$0,\n targetContainer\n ) {\n var ancestorInst = targetInst$jscomp$0;\n if (\n 0 === (eventSystemFlags & 1) &&\n 0 === (eventSystemFlags & 2) &&\n null !== targetInst$jscomp$0\n )\n a: for (;;) {\n if (null === targetInst$jscomp$0) return;\n var nodeTag = targetInst$jscomp$0.tag;\n if (3 === nodeTag || 4 === nodeTag) {\n var container = targetInst$jscomp$0.stateNode.containerInfo;\n if (container === targetContainer) break;\n if (4 === nodeTag)\n for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n var grandTag = nodeTag.tag;\n if (\n (3 === grandTag || 4 === grandTag) &&\n nodeTag.stateNode.containerInfo === targetContainer\n )\n return;\n nodeTag = nodeTag.return;\n }\n for (; null !== container; ) {\n nodeTag = getClosestInstanceFromNode(container);\n if (null === nodeTag) return;\n grandTag = nodeTag.tag;\n if (\n 5 === grandTag ||\n 6 === grandTag ||\n 26 === grandTag ||\n 27 === grandTag\n ) {\n targetInst$jscomp$0 = ancestorInst = nodeTag;\n continue a;\n }\n container = container.parentNode;\n }\n }\n targetInst$jscomp$0 = targetInst$jscomp$0.return;\n }\n batchedUpdates$1(function () {\n var targetInst = ancestorInst,\n nativeEventTarget = getEventTarget(nativeEvent),\n dispatchQueue = [];\n a: {\n var reactName = topLevelEventsToReactNames.get(domEventName);\n if (void 0 !== reactName) {\n var SyntheticEventCtor = SyntheticEvent,\n reactEventType = domEventName;\n switch (domEventName) {\n case \"keypress\":\n if (0 === getEventCharCode(nativeEvent)) break a;\n case \"keydown\":\n case \"keyup\":\n SyntheticEventCtor = SyntheticKeyboardEvent;\n break;\n case \"focusin\":\n reactEventType = \"focus\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"focusout\":\n reactEventType = \"blur\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"beforeblur\":\n case \"afterblur\":\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"click\":\n if (2 === nativeEvent.button) break a;\n case \"auxclick\":\n case \"dblclick\":\n case \"mousedown\":\n case \"mousemove\":\n case \"mouseup\":\n case \"mouseout\":\n case \"mouseover\":\n case \"contextmenu\":\n SyntheticEventCtor = SyntheticMouseEvent;\n break;\n case \"drag\":\n case \"dragend\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"dragstart\":\n case \"drop\":\n SyntheticEventCtor = SyntheticDragEvent;\n break;\n case \"touchcancel\":\n case \"touchend\":\n case \"touchmove\":\n case \"touchstart\":\n SyntheticEventCtor = SyntheticTouchEvent;\n break;\n case ANIMATION_END:\n case ANIMATION_ITERATION:\n case ANIMATION_START:\n SyntheticEventCtor = SyntheticAnimationEvent;\n break;\n case TRANSITION_END:\n SyntheticEventCtor = SyntheticTransitionEvent;\n break;\n case \"scroll\":\n case \"scrollend\":\n SyntheticEventCtor = SyntheticUIEvent;\n break;\n case \"wheel\":\n SyntheticEventCtor = SyntheticWheelEvent;\n break;\n case \"copy\":\n case \"cut\":\n case \"paste\":\n SyntheticEventCtor = SyntheticClipboardEvent;\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"pointerup\":\n SyntheticEventCtor = SyntheticPointerEvent;\n break;\n case \"toggle\":\n case \"beforetoggle\":\n SyntheticEventCtor = SyntheticToggleEvent;\n }\n var inCapturePhase = 0 !== (eventSystemFlags & 4),\n accumulateTargetOnly =\n !inCapturePhase &&\n (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n reactEventName = inCapturePhase\n ? null !== reactName\n ? reactName + \"Capture\"\n : null\n : reactName;\n inCapturePhase = [];\n for (\n var instance = targetInst, lastHostComponent;\n null !== instance;\n\n ) {\n var _instance2 = instance;\n lastHostComponent = _instance2.stateNode;\n _instance2 = _instance2.tag;\n (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n null === lastHostComponent ||\n null === reactEventName ||\n ((_instance2 = getListener(instance, reactEventName)),\n null != _instance2 &&\n inCapturePhase.push(\n createDispatchListener(\n instance,\n _instance2,\n lastHostComponent\n )\n ));\n if (accumulateTargetOnly) break;\n instance = instance.return;\n }\n 0 < inCapturePhase.length &&\n ((reactName = new SyntheticEventCtor(\n reactName,\n reactEventType,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: reactName,\n listeners: inCapturePhase\n }));\n }\n }\n if (0 === (eventSystemFlags & 7)) {\n a: {\n reactName =\n \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n SyntheticEventCtor =\n \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n if (\n reactName &&\n nativeEvent !== currentReplayingEvent &&\n (reactEventType =\n nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n (getClosestInstanceFromNode(reactEventType) ||\n reactEventType[internalContainerInstanceKey])\n )\n break a;\n if (SyntheticEventCtor || reactName) {\n reactName =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget\n : (reactName = nativeEventTarget.ownerDocument)\n ? reactName.defaultView || reactName.parentWindow\n : window;\n if (SyntheticEventCtor) {\n if (\n ((reactEventType =\n nativeEvent.relatedTarget || nativeEvent.toElement),\n (SyntheticEventCtor = targetInst),\n (reactEventType = reactEventType\n ? getClosestInstanceFromNode(reactEventType)\n : null),\n null !== reactEventType &&\n ((accumulateTargetOnly =\n getNearestMountedFiber(reactEventType)),\n (inCapturePhase = reactEventType.tag),\n reactEventType !== accumulateTargetOnly ||\n (5 !== inCapturePhase &&\n 27 !== inCapturePhase &&\n 6 !== inCapturePhase)))\n )\n reactEventType = null;\n } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n if (SyntheticEventCtor !== reactEventType) {\n inCapturePhase = SyntheticMouseEvent;\n _instance2 = \"onMouseLeave\";\n reactEventName = \"onMouseEnter\";\n instance = \"mouse\";\n if (\n \"pointerout\" === domEventName ||\n \"pointerover\" === domEventName\n )\n (inCapturePhase = SyntheticPointerEvent),\n (_instance2 = \"onPointerLeave\"),\n (reactEventName = \"onPointerEnter\"),\n (instance = \"pointer\");\n accumulateTargetOnly =\n null == SyntheticEventCtor\n ? reactName\n : getNodeFromInstance(SyntheticEventCtor);\n lastHostComponent =\n null == reactEventType\n ? reactName\n : getNodeFromInstance(reactEventType);\n reactName = new inCapturePhase(\n _instance2,\n instance + \"leave\",\n SyntheticEventCtor,\n nativeEvent,\n nativeEventTarget\n );\n reactName.target = accumulateTargetOnly;\n reactName.relatedTarget = lastHostComponent;\n _instance2 = null;\n getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n ((inCapturePhase = new inCapturePhase(\n reactEventName,\n instance + \"enter\",\n reactEventType,\n nativeEvent,\n nativeEventTarget\n )),\n (inCapturePhase.target = lastHostComponent),\n (inCapturePhase.relatedTarget = accumulateTargetOnly),\n (_instance2 = inCapturePhase));\n accumulateTargetOnly = _instance2;\n if (SyntheticEventCtor && reactEventType)\n b: {\n inCapturePhase = SyntheticEventCtor;\n reactEventName = reactEventType;\n instance = 0;\n for (\n lastHostComponent = inCapturePhase;\n lastHostComponent;\n lastHostComponent = getParent(lastHostComponent)\n )\n instance++;\n lastHostComponent = 0;\n for (\n _instance2 = reactEventName;\n _instance2;\n _instance2 = getParent(_instance2)\n )\n lastHostComponent++;\n for (; 0 < instance - lastHostComponent; )\n (inCapturePhase = getParent(inCapturePhase)), instance--;\n for (; 0 < lastHostComponent - instance; )\n (reactEventName = getParent(reactEventName)),\n lastHostComponent--;\n for (; instance--; ) {\n if (\n inCapturePhase === reactEventName ||\n (null !== reactEventName &&\n inCapturePhase === reactEventName.alternate)\n )\n break b;\n inCapturePhase = getParent(inCapturePhase);\n reactEventName = getParent(reactEventName);\n }\n inCapturePhase = null;\n }\n else inCapturePhase = null;\n null !== SyntheticEventCtor &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n reactName,\n SyntheticEventCtor,\n inCapturePhase,\n !1\n );\n null !== reactEventType &&\n null !== accumulateTargetOnly &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n accumulateTargetOnly,\n reactEventType,\n inCapturePhase,\n !0\n );\n }\n }\n }\n a: {\n reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n SyntheticEventCtor =\n reactName.nodeName && reactName.nodeName.toLowerCase();\n if (\n \"select\" === SyntheticEventCtor ||\n (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n )\n var getTargetInstFunc = getTargetInstForChangeEvent;\n else if (isTextInputElement(reactName))\n if (isInputEventSupported)\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n var handleEventFunc = handleEventsForInputEventPolyfill;\n }\n else\n (SyntheticEventCtor = reactName.nodeName),\n !SyntheticEventCtor ||\n \"input\" !== SyntheticEventCtor.toLowerCase() ||\n (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n ? targetInst &&\n isCustomElement(targetInst.elementType) &&\n (getTargetInstFunc = getTargetInstForChangeEvent)\n : (getTargetInstFunc = getTargetInstForClickEvent);\n if (\n getTargetInstFunc &&\n (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n ) {\n createAndAccumulateChangeEvent(\n dispatchQueue,\n getTargetInstFunc,\n nativeEvent,\n nativeEventTarget\n );\n break a;\n }\n handleEventFunc &&\n handleEventFunc(domEventName, reactName, targetInst);\n \"focusout\" === domEventName &&\n targetInst &&\n \"number\" === reactName.type &&\n null != targetInst.memoizedProps.value &&\n setDefaultValue(reactName, \"number\", reactName.value);\n }\n handleEventFunc = targetInst\n ? getNodeFromInstance(targetInst)\n : window;\n switch (domEventName) {\n case \"focusin\":\n if (\n isTextInputElement(handleEventFunc) ||\n \"true\" === handleEventFunc.contentEditable\n )\n (activeElement = handleEventFunc),\n (activeElementInst = targetInst),\n (lastSelection = null);\n break;\n case \"focusout\":\n lastSelection = activeElementInst = activeElement = null;\n break;\n case \"mousedown\":\n mouseDown = !0;\n break;\n case \"contextmenu\":\n case \"mouseup\":\n case \"dragend\":\n mouseDown = !1;\n constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n );\n break;\n case \"selectionchange\":\n if (skipSelectionChangeEvent) break;\n case \"keydown\":\n case \"keyup\":\n constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n );\n }\n var fallbackData;\n if (canUseCompositionEvent)\n b: {\n switch (domEventName) {\n case \"compositionstart\":\n var eventType = \"onCompositionStart\";\n break b;\n case \"compositionend\":\n eventType = \"onCompositionEnd\";\n break b;\n case \"compositionupdate\":\n eventType = \"onCompositionUpdate\";\n break b;\n }\n eventType = void 0;\n }\n else\n isComposing\n ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n (eventType = \"onCompositionEnd\")\n : \"keydown\" === domEventName &&\n nativeEvent.keyCode === START_KEYCODE &&\n (eventType = \"onCompositionStart\");\n eventType &&\n (useFallbackCompositionData &&\n \"ko\" !== nativeEvent.locale &&\n (isComposing || \"onCompositionStart\" !== eventType\n ? \"onCompositionEnd\" === eventType &&\n isComposing &&\n (fallbackData = getData())\n : ((root = nativeEventTarget),\n (startText = \"value\" in root ? root.value : root.textContent),\n (isComposing = !0))),\n (handleEventFunc = accumulateTwoPhaseListeners(\n targetInst,\n eventType\n )),\n 0 < handleEventFunc.length &&\n ((eventType = new SyntheticCompositionEvent(\n eventType,\n domEventName,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: eventType,\n listeners: handleEventFunc\n }),\n fallbackData\n ? (eventType.data = fallbackData)\n : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n null !== fallbackData && (eventType.data = fallbackData))));\n if (\n (fallbackData = canUseTextInputEvent\n ? getNativeBeforeInputChars(domEventName, nativeEvent)\n : getFallbackBeforeInputChars(domEventName, nativeEvent))\n )\n (eventType = accumulateTwoPhaseListeners(\n targetInst,\n \"onBeforeInput\"\n )),\n 0 < eventType.length &&\n ((handleEventFunc = new SyntheticInputEvent(\n \"onBeforeInput\",\n \"beforeinput\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: handleEventFunc,\n listeners: eventType\n }),\n (handleEventFunc.data = fallbackData));\n extractEvents$1(\n dispatchQueue,\n domEventName,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n }\n processDispatchQueue(dispatchQueue, eventSystemFlags);\n });\n }\n function createDispatchListener(instance, listener, currentTarget) {\n return {\n instance: instance,\n listener: listener,\n currentTarget: currentTarget\n };\n }\n function accumulateTwoPhaseListeners(targetFiber, reactName) {\n for (\n var captureName = reactName + \"Capture\", listeners = [];\n null !== targetFiber;\n\n ) {\n var _instance3 = targetFiber,\n stateNode = _instance3.stateNode;\n _instance3 = _instance3.tag;\n (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n null === stateNode ||\n ((_instance3 = getListener(targetFiber, captureName)),\n null != _instance3 &&\n listeners.unshift(\n createDispatchListener(targetFiber, _instance3, stateNode)\n ),\n (_instance3 = getListener(targetFiber, reactName)),\n null != _instance3 &&\n listeners.push(\n createDispatchListener(targetFiber, _instance3, stateNode)\n ));\n if (3 === targetFiber.tag) return listeners;\n targetFiber = targetFiber.return;\n }\n return [];\n }\n function getParent(inst) {\n if (null === inst) return null;\n do inst = inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag);\n return inst ? inst : null;\n }\n function accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n event,\n target,\n common,\n inCapturePhase\n ) {\n for (\n var registrationName = event._reactName, listeners = [];\n null !== target && target !== common;\n\n ) {\n var _instance4 = target,\n alternate = _instance4.alternate,\n stateNode = _instance4.stateNode;\n _instance4 = _instance4.tag;\n if (null !== alternate && alternate === common) break;\n (5 !== _instance4 && 26 !== _instance4 && 27 !== _instance4) ||\n null === stateNode ||\n ((alternate = stateNode),\n inCapturePhase\n ? ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.unshift(\n createDispatchListener(target, stateNode, alternate)\n ))\n : inCapturePhase ||\n ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.push(\n createDispatchListener(target, stateNode, alternate)\n )));\n target = target.return;\n }\n 0 !== listeners.length &&\n dispatchQueue.push({ event: event, listeners: listeners });\n }\n function validatePropertiesInDevelopment(type, props) {\n validateProperties$2(type, props);\n (\"input\" !== type && \"textarea\" !== type && \"select\" !== type) ||\n null == props ||\n null !== props.value ||\n didWarnValueNull ||\n ((didWarnValueNull = !0),\n \"select\" === type && props.multiple\n ? console.error(\n \"`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.\",\n type\n )\n : console.error(\n \"`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.\",\n type\n ));\n var eventRegistry = {\n registrationNameDependencies: registrationNameDependencies,\n possibleRegistrationNames: possibleRegistrationNames\n };\n isCustomElement(type) ||\n \"string\" === typeof props.is ||\n warnUnknownProperties(type, props, eventRegistry);\n props.contentEditable &&\n !props.suppressContentEditableWarning &&\n null != props.children &&\n console.error(\n \"A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional.\"\n );\n }\n function warnForPropDifference(\n propName,\n serverValue,\n clientValue,\n serverDifferences\n ) {\n serverValue !== clientValue &&\n ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),\n normalizeMarkupForTextOrAttribute(serverValue) !== clientValue &&\n (serverDifferences[propName] = serverValue));\n }\n function warnForExtraAttributes(\n domElement,\n attributeNames,\n serverDifferences\n ) {\n attributeNames.forEach(function (attributeName) {\n serverDifferences[getPropNameFromAttributeName(attributeName)] =\n \"style\" === attributeName\n ? getStylesObjectFromElement(domElement)\n : domElement.getAttribute(attributeName);\n });\n }\n function warnForInvalidEventListener(registrationName, listener) {\n !1 === listener\n ? console.error(\n \"Expected `%s` listener to be a function, instead got `false`.\\n\\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.\",\n registrationName,\n registrationName,\n registrationName\n )\n : console.error(\n \"Expected `%s` listener to be a function, instead got a value of `%s` type.\",\n registrationName,\n typeof listener\n );\n }\n function normalizeHTML(parent, html) {\n parent =\n parent.namespaceURI === MATH_NAMESPACE ||\n parent.namespaceURI === SVG_NAMESPACE\n ? parent.ownerDocument.createElementNS(\n parent.namespaceURI,\n parent.tagName\n )\n : parent.ownerDocument.createElement(parent.tagName);\n parent.innerHTML = html;\n return parent.innerHTML;\n }\n function normalizeMarkupForTextOrAttribute(markup) {\n willCoercionThrow(markup) &&\n (console.error(\n \"The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.\",\n typeName(markup)\n ),\n testStringCoercion(markup));\n return (\"string\" === typeof markup ? markup : \"\" + markup)\n .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n }\n function checkForUnmatchedText(serverText, clientText) {\n clientText = normalizeMarkupForTextOrAttribute(clientText);\n return normalizeMarkupForTextOrAttribute(serverText) === clientText\n ? !0\n : !1;\n }\n function noop$1() {}\n function setProp(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"children\":\n if (\"string\" === typeof value)\n validateTextNesting(value, tag, !1),\n \"body\" === tag ||\n (\"textarea\" === tag && \"\" === value) ||\n setTextContent(domElement, value);\n else if (\"number\" === typeof value || \"bigint\" === typeof value)\n validateTextNesting(\"\" + value, tag, !1),\n \"body\" !== tag && setTextContent(domElement, \"\" + value);\n break;\n case \"className\":\n setValueForKnownAttribute(domElement, \"class\", value);\n break;\n case \"tabIndex\":\n setValueForKnownAttribute(domElement, \"tabindex\", value);\n break;\n case \"dir\":\n case \"role\":\n case \"viewBox\":\n case \"width\":\n case \"height\":\n setValueForKnownAttribute(domElement, key, value);\n break;\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"data\":\n if (\"object\" !== tag) {\n setValueForKnownAttribute(domElement, \"data\", value);\n break;\n }\n case \"src\":\n case \"href\":\n if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n \"src\" === key\n ? console.error(\n 'An empty string (\"\") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n key,\n key\n )\n : console.error(\n 'An empty string (\"\") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n key,\n key\n );\n domElement.removeAttribute(key);\n break;\n }\n if (\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n checkAttributeStringCoercion(value, key);\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"action\":\n case \"formAction\":\n null != value &&\n (\"form\" === tag\n ? \"formAction\" === key\n ? console.error(\n \"You can only pass the formAction prop to <input> or <button>. Use the action prop on <form>.\"\n )\n : \"function\" === typeof value &&\n ((null == props.encType && null == props.method) ||\n didWarnFormActionMethod ||\n ((didWarnFormActionMethod = !0),\n console.error(\n \"Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden.\"\n )),\n null == props.target ||\n didWarnFormActionTarget ||\n ((didWarnFormActionTarget = !0),\n console.error(\n \"Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window.\"\n )))\n : \"input\" === tag || \"button\" === tag\n ? \"action\" === key\n ? console.error(\n \"You can only pass the action prop to <form>. Use the formAction prop on <input> or <button>.\"\n )\n : \"input\" !== tag ||\n \"submit\" === props.type ||\n \"image\" === props.type ||\n didWarnFormActionType\n ? \"button\" !== tag ||\n null == props.type ||\n \"submit\" === props.type ||\n didWarnFormActionType\n ? \"function\" === typeof value &&\n (null == props.name ||\n didWarnFormActionName ||\n ((didWarnFormActionName = !0),\n console.error(\n 'Cannot specify a \"name\" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'\n )),\n (null == props.formEncType &&\n null == props.formMethod) ||\n didWarnFormActionMethod ||\n ((didWarnFormActionMethod = !0),\n console.error(\n \"Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden.\"\n )),\n null == props.formTarget ||\n didWarnFormActionTarget ||\n ((didWarnFormActionTarget = !0),\n console.error(\n \"Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window.\"\n )))\n : ((didWarnFormActionType = !0),\n console.error(\n 'A button can only specify a formAction along with type=\"submit\" or no type.'\n ))\n : ((didWarnFormActionType = !0),\n console.error(\n 'An input can only specify a formAction along with type=\"submit\" or type=\"image\".'\n ))\n : \"action\" === key\n ? console.error(\n \"You can only pass the action prop to <form>.\"\n )\n : console.error(\n \"You can only pass the formAction prop to <input> or <button>.\"\n ));\n if (\"function\" === typeof value) {\n domElement.setAttribute(\n key,\n \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n );\n break;\n } else\n \"function\" === typeof prevValue &&\n (\"formAction\" === key\n ? (\"input\" !== tag &&\n setProp(domElement, tag, \"name\", props.name, props, null),\n setProp(\n domElement,\n tag,\n \"formEncType\",\n props.formEncType,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formMethod\",\n props.formMethod,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formTarget\",\n props.formTarget,\n props,\n null\n ))\n : (setProp(\n domElement,\n tag,\n \"encType\",\n props.encType,\n props,\n null\n ),\n setProp(domElement, tag, \"method\", props.method, props, null),\n setProp(\n domElement,\n tag,\n \"target\",\n props.target,\n props,\n null\n )));\n if (\n null == value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n checkAttributeStringCoercion(value, key);\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"onClick\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n (domElement.onclick = noop$1));\n break;\n case \"onScroll\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scroll\", domElement));\n break;\n case \"onScrollEnd\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scrollend\", domElement));\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(\n \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.\"\n );\n key = value.__html;\n if (null != key) {\n if (null != props.children)\n throw Error(\n \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\"\n );\n domElement.innerHTML = key;\n }\n }\n break;\n case \"multiple\":\n domElement.multiple =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"muted\":\n domElement.muted =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"autoFocus\":\n break;\n case \"xlinkHref\":\n if (\n null == value ||\n \"function\" === typeof value ||\n \"boolean\" === typeof value ||\n \"symbol\" === typeof value\n ) {\n domElement.removeAttribute(\"xlink:href\");\n break;\n }\n checkAttributeStringCoercion(value, key);\n key = sanitizeURL(\"\" + value);\n domElement.setAttributeNS(xlinkNamespace, \"xlink:href\", key);\n break;\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, \"\" + value))\n : domElement.removeAttribute(key);\n break;\n case \"inert\":\n \"\" !== value ||\n didWarnForNewBooleanPropsWithEmptyValue[key] ||\n ((didWarnForNewBooleanPropsWithEmptyValue[key] = !0),\n console.error(\n \"Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.\",\n key\n ));\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\")\n : domElement.removeAttribute(key);\n break;\n case \"capture\":\n case \"download\":\n !0 === value\n ? domElement.setAttribute(key, \"\")\n : !1 !== value &&\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value))\n : domElement.removeAttribute(key);\n break;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value &&\n !isNaN(value) &&\n 1 <= value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value))\n : domElement.removeAttribute(key);\n break;\n case \"rowSpan\":\n case \"start\":\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n isNaN(value)\n ? domElement.removeAttribute(key)\n : (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value));\n break;\n case \"popover\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n setValueForAttribute(domElement, \"popover\", value);\n break;\n case \"xlinkActuate\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:actuate\",\n value\n );\n break;\n case \"xlinkArcrole\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:arcrole\",\n value\n );\n break;\n case \"xlinkRole\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:role\",\n value\n );\n break;\n case \"xlinkShow\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:show\",\n value\n );\n break;\n case \"xlinkTitle\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:title\",\n value\n );\n break;\n case \"xlinkType\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:type\",\n value\n );\n break;\n case \"xmlBase\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:base\",\n value\n );\n break;\n case \"xmlLang\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:lang\",\n value\n );\n break;\n case \"xmlSpace\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:space\",\n value\n );\n break;\n case \"is\":\n null != prevValue &&\n console.error(\n 'Cannot update the \"is\" prop after it has been initialized.'\n );\n setValueForAttribute(domElement, \"is\", value);\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n case \"popoverTarget\":\n didWarnPopoverTargetObject ||\n null == value ||\n \"object\" !== typeof value ||\n ((didWarnPopoverTargetObject = !0),\n console.error(\n \"The `popoverTarget` prop expects the ID of an Element as a string. Received %s instead.\",\n value\n ));\n default:\n !(2 < key.length) ||\n (\"o\" !== key[0] && \"O\" !== key[0]) ||\n (\"n\" !== key[1] && \"N\" !== key[1])\n ? ((key = getAttributeAlias(key)),\n setValueForAttribute(domElement, key, value))\n : registrationNameDependencies.hasOwnProperty(key) &&\n null != value &&\n \"function\" !== typeof value &&\n warnForInvalidEventListener(key, value);\n }\n }\n function setPropOnCustomElement(\n domElement,\n tag,\n key,\n value,\n props,\n prevValue\n ) {\n switch (key) {\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(\n \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.\"\n );\n key = value.__html;\n if (null != key) {\n if (null != props.children)\n throw Error(\n \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\"\n );\n domElement.innerHTML = key;\n }\n }\n break;\n case \"children\":\n \"string\" === typeof value\n ? setTextContent(domElement, value)\n : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n setTextContent(domElement, \"\" + value);\n break;\n case \"onScroll\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scroll\", domElement));\n break;\n case \"onScrollEnd\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scrollend\", domElement));\n break;\n case \"onClick\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n (domElement.onclick = noop$1));\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n default:\n if (registrationNameDependencies.hasOwnProperty(key))\n null != value &&\n \"function\" !== typeof value &&\n warnForInvalidEventListener(key, value);\n else\n a: {\n if (\n \"o\" === key[0] &&\n \"n\" === key[1] &&\n ((props = key.endsWith(\"Capture\")),\n (tag = key.slice(2, props ? key.length - 7 : void 0)),\n (prevValue = domElement[internalPropsKey] || null),\n (prevValue = null != prevValue ? prevValue[key] : null),\n \"function\" === typeof prevValue &&\n domElement.removeEventListener(tag, prevValue, props),\n \"function\" === typeof value)\n ) {\n \"function\" !== typeof prevValue &&\n null !== prevValue &&\n (key in domElement\n ? (domElement[key] = null)\n : domElement.hasAttribute(key) &&\n domElement.removeAttribute(key));\n domElement.addEventListener(tag, value, props);\n break a;\n }\n key in domElement\n ? (domElement[key] = value)\n : !0 === value\n ? domElement.setAttribute(key, \"\")\n : setValueForAttribute(domElement, key, value);\n }\n }\n }\n function setInitialProperties(domElement, tag, props) {\n validatePropertiesInDevelopment(tag, props);\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"img\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n var hasSrc = !1,\n hasSrcSet = !1,\n propKey;\n for (propKey in props)\n if (props.hasOwnProperty(propKey)) {\n var propValue = props[propKey];\n if (null != propValue)\n switch (propKey) {\n case \"src\":\n hasSrc = !0;\n break;\n case \"srcSet\":\n hasSrcSet = !0;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n default:\n setProp(domElement, tag, propKey, propValue, props, null);\n }\n }\n hasSrcSet &&\n setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n return;\n case \"input\":\n checkControlledValueProps(\"input\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n var defaultValue = (propKey = propValue = hasSrcSet = null),\n checked = null,\n defaultChecked = null;\n for (hasSrc in props)\n if (props.hasOwnProperty(hasSrc)) {\n var _propValue = props[hasSrc];\n if (null != _propValue)\n switch (hasSrc) {\n case \"name\":\n hasSrcSet = _propValue;\n break;\n case \"type\":\n propValue = _propValue;\n break;\n case \"checked\":\n checked = _propValue;\n break;\n case \"defaultChecked\":\n defaultChecked = _propValue;\n break;\n case \"value\":\n propKey = _propValue;\n break;\n case \"defaultValue\":\n defaultValue = _propValue;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != _propValue)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n setProp(domElement, tag, hasSrc, _propValue, props, null);\n }\n }\n validateInputProps(domElement, props);\n initInput(\n domElement,\n propKey,\n defaultValue,\n checked,\n defaultChecked,\n propValue,\n hasSrcSet,\n !1\n );\n track(domElement);\n return;\n case \"select\":\n checkControlledValueProps(\"select\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n hasSrc = propValue = propKey = null;\n for (hasSrcSet in props)\n if (\n props.hasOwnProperty(hasSrcSet) &&\n ((defaultValue = props[hasSrcSet]), null != defaultValue)\n )\n switch (hasSrcSet) {\n case \"value\":\n propKey = defaultValue;\n break;\n case \"defaultValue\":\n propValue = defaultValue;\n break;\n case \"multiple\":\n hasSrc = defaultValue;\n default:\n setProp(\n domElement,\n tag,\n hasSrcSet,\n defaultValue,\n props,\n null\n );\n }\n validateSelectProps(domElement, props);\n tag = propKey;\n props = propValue;\n domElement.multiple = !!hasSrc;\n null != tag\n ? updateOptions(domElement, !!hasSrc, tag, !1)\n : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n return;\n case \"textarea\":\n checkControlledValueProps(\"textarea\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n propKey = hasSrcSet = hasSrc = null;\n for (propValue in props)\n if (\n props.hasOwnProperty(propValue) &&\n ((defaultValue = props[propValue]), null != defaultValue)\n )\n switch (propValue) {\n case \"value\":\n hasSrc = defaultValue;\n break;\n case \"defaultValue\":\n hasSrcSet = defaultValue;\n break;\n case \"children\":\n propKey = defaultValue;\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != defaultValue)\n throw Error(\n \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\"\n );\n break;\n default:\n setProp(\n domElement,\n tag,\n propValue,\n defaultValue,\n props,\n null\n );\n }\n validateTextareaProps(domElement, props);\n initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n track(domElement);\n return;\n case \"option\":\n validateOptionProps(domElement, props);\n for (checked in props)\n if (\n props.hasOwnProperty(checked) &&\n ((hasSrc = props[checked]), null != hasSrc)\n )\n switch (checked) {\n case \"selected\":\n domElement.selected =\n hasSrc &&\n \"function\" !== typeof hasSrc &&\n \"symbol\" !== typeof hasSrc;\n break;\n default:\n setProp(domElement, tag, checked, hasSrc, props, null);\n }\n return;\n case \"dialog\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n listenToNonDelegatedEvent(\"cancel\", domElement);\n listenToNonDelegatedEvent(\"close\", domElement);\n break;\n case \"iframe\":\n case \"object\":\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"video\":\n case \"audio\":\n for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n break;\n case \"image\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", domElement);\n break;\n case \"embed\":\n case \"source\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", domElement),\n listenToNonDelegatedEvent(\"load\", domElement);\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (defaultChecked in props)\n if (\n props.hasOwnProperty(defaultChecked) &&\n ((hasSrc = props[defaultChecked]), null != hasSrc)\n )\n switch (defaultChecked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n default:\n setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (_propValue in props)\n props.hasOwnProperty(_propValue) &&\n ((hasSrc = props[_propValue]),\n void 0 !== hasSrc &&\n setPropOnCustomElement(\n domElement,\n tag,\n _propValue,\n hasSrc,\n props,\n void 0\n ));\n return;\n }\n }\n for (defaultValue in props)\n props.hasOwnProperty(defaultValue) &&\n ((hasSrc = props[defaultValue]),\n null != hasSrc &&\n setProp(domElement, tag, defaultValue, hasSrc, props, null));\n }\n function updateProperties(domElement, tag, lastProps, nextProps) {\n validatePropertiesInDevelopment(tag, nextProps);\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"input\":\n var name = null,\n type = null,\n value = null,\n defaultValue = null,\n lastDefaultValue = null,\n checked = null,\n defaultChecked = null;\n for (propKey in lastProps) {\n var lastProp = lastProps[propKey];\n if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n switch (propKey) {\n case \"checked\":\n break;\n case \"value\":\n break;\n case \"defaultValue\":\n lastDefaultValue = lastProp;\n default:\n nextProps.hasOwnProperty(propKey) ||\n setProp(\n domElement,\n tag,\n propKey,\n null,\n nextProps,\n lastProp\n );\n }\n }\n for (var _propKey8 in nextProps) {\n var propKey = nextProps[_propKey8];\n lastProp = lastProps[_propKey8];\n if (\n nextProps.hasOwnProperty(_propKey8) &&\n (null != propKey || null != lastProp)\n )\n switch (_propKey8) {\n case \"type\":\n type = propKey;\n break;\n case \"name\":\n name = propKey;\n break;\n case \"checked\":\n checked = propKey;\n break;\n case \"defaultChecked\":\n defaultChecked = propKey;\n break;\n case \"value\":\n value = propKey;\n break;\n case \"defaultValue\":\n defaultValue = propKey;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n propKey !== lastProp &&\n setProp(\n domElement,\n tag,\n _propKey8,\n propKey,\n nextProps,\n lastProp\n );\n }\n }\n tag =\n \"checkbox\" === lastProps.type || \"radio\" === lastProps.type\n ? null != lastProps.checked\n : null != lastProps.value;\n nextProps =\n \"checkbox\" === nextProps.type || \"radio\" === nextProps.type\n ? null != nextProps.checked\n : null != nextProps.value;\n tag ||\n !nextProps ||\n didWarnUncontrolledToControlled ||\n (console.error(\n \"A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnUncontrolledToControlled = !0));\n !tag ||\n nextProps ||\n didWarnControlledToUncontrolled ||\n (console.error(\n \"A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnControlledToUncontrolled = !0));\n updateInput(\n domElement,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n );\n return;\n case \"select\":\n propKey = value = defaultValue = _propKey8 = null;\n for (type in lastProps)\n if (\n ((lastDefaultValue = lastProps[type]),\n lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n )\n switch (type) {\n case \"value\":\n break;\n case \"multiple\":\n propKey = lastDefaultValue;\n default:\n nextProps.hasOwnProperty(type) ||\n setProp(\n domElement,\n tag,\n type,\n null,\n nextProps,\n lastDefaultValue\n );\n }\n for (name in nextProps)\n if (\n ((type = nextProps[name]),\n (lastDefaultValue = lastProps[name]),\n nextProps.hasOwnProperty(name) &&\n (null != type || null != lastDefaultValue))\n )\n switch (name) {\n case \"value\":\n _propKey8 = type;\n break;\n case \"defaultValue\":\n defaultValue = type;\n break;\n case \"multiple\":\n value = type;\n default:\n type !== lastDefaultValue &&\n setProp(\n domElement,\n tag,\n name,\n type,\n nextProps,\n lastDefaultValue\n );\n }\n nextProps = defaultValue;\n tag = value;\n lastProps = propKey;\n null != _propKey8\n ? updateOptions(domElement, !!tag, _propKey8, !1)\n : !!lastProps !== !!tag &&\n (null != nextProps\n ? updateOptions(domElement, !!tag, nextProps, !0)\n : updateOptions(domElement, !!tag, tag ? [] : \"\", !1));\n return;\n case \"textarea\":\n propKey = _propKey8 = null;\n for (defaultValue in lastProps)\n if (\n ((name = lastProps[defaultValue]),\n lastProps.hasOwnProperty(defaultValue) &&\n null != name &&\n !nextProps.hasOwnProperty(defaultValue))\n )\n switch (defaultValue) {\n case \"value\":\n break;\n case \"children\":\n break;\n default:\n setProp(domElement, tag, defaultValue, null, nextProps, name);\n }\n for (value in nextProps)\n if (\n ((name = nextProps[value]),\n (type = lastProps[value]),\n nextProps.hasOwnProperty(value) && (null != name || null != type))\n )\n switch (value) {\n case \"value\":\n _propKey8 = name;\n break;\n case \"defaultValue\":\n propKey = name;\n break;\n case \"children\":\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != name)\n throw Error(\n \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\"\n );\n break;\n default:\n name !== type &&\n setProp(domElement, tag, value, name, nextProps, type);\n }\n updateTextarea(domElement, _propKey8, propKey);\n return;\n case \"option\":\n for (var _propKey13 in lastProps)\n if (\n ((_propKey8 = lastProps[_propKey13]),\n lastProps.hasOwnProperty(_propKey13) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey13))\n )\n switch (_propKey13) {\n case \"selected\":\n domElement.selected = !1;\n break;\n default:\n setProp(\n domElement,\n tag,\n _propKey13,\n null,\n nextProps,\n _propKey8\n );\n }\n for (lastDefaultValue in nextProps)\n if (\n ((_propKey8 = nextProps[lastDefaultValue]),\n (propKey = lastProps[lastDefaultValue]),\n nextProps.hasOwnProperty(lastDefaultValue) &&\n _propKey8 !== propKey &&\n (null != _propKey8 || null != propKey))\n )\n switch (lastDefaultValue) {\n case \"selected\":\n domElement.selected =\n _propKey8 &&\n \"function\" !== typeof _propKey8 &&\n \"symbol\" !== typeof _propKey8;\n break;\n default:\n setProp(\n domElement,\n tag,\n lastDefaultValue,\n _propKey8,\n nextProps,\n propKey\n );\n }\n return;\n case \"img\":\n case \"link\":\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"embed\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"source\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (var _propKey15 in lastProps)\n (_propKey8 = lastProps[_propKey15]),\n lastProps.hasOwnProperty(_propKey15) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey15) &&\n setProp(\n domElement,\n tag,\n _propKey15,\n null,\n nextProps,\n _propKey8\n );\n for (checked in nextProps)\n if (\n ((_propKey8 = nextProps[checked]),\n (propKey = lastProps[checked]),\n nextProps.hasOwnProperty(checked) &&\n _propKey8 !== propKey &&\n (null != _propKey8 || null != propKey))\n )\n switch (checked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != _propKey8)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n setProp(\n domElement,\n tag,\n checked,\n _propKey8,\n nextProps,\n propKey\n );\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (var _propKey17 in lastProps)\n (_propKey8 = lastProps[_propKey17]),\n lastProps.hasOwnProperty(_propKey17) &&\n void 0 !== _propKey8 &&\n !nextProps.hasOwnProperty(_propKey17) &&\n setPropOnCustomElement(\n domElement,\n tag,\n _propKey17,\n void 0,\n nextProps,\n _propKey8\n );\n for (defaultChecked in nextProps)\n (_propKey8 = nextProps[defaultChecked]),\n (propKey = lastProps[defaultChecked]),\n !nextProps.hasOwnProperty(defaultChecked) ||\n _propKey8 === propKey ||\n (void 0 === _propKey8 && void 0 === propKey) ||\n setPropOnCustomElement(\n domElement,\n tag,\n defaultChecked,\n _propKey8,\n nextProps,\n propKey\n );\n return;\n }\n }\n for (var _propKey19 in lastProps)\n (_propKey8 = lastProps[_propKey19]),\n lastProps.hasOwnProperty(_propKey19) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey19) &&\n setProp(domElement, tag, _propKey19, null, nextProps, _propKey8);\n for (lastProp in nextProps)\n (_propKey8 = nextProps[lastProp]),\n (propKey = lastProps[lastProp]),\n !nextProps.hasOwnProperty(lastProp) ||\n _propKey8 === propKey ||\n (null == _propKey8 && null == propKey) ||\n setProp(domElement, tag, lastProp, _propKey8, nextProps, propKey);\n }\n function getPropNameFromAttributeName(attrName) {\n switch (attrName) {\n case \"class\":\n return \"className\";\n case \"for\":\n return \"htmlFor\";\n default:\n return attrName;\n }\n }\n function getStylesObjectFromElement(domElement) {\n var serverValueInObjectForm = {};\n domElement = domElement.style;\n for (var i = 0; i < domElement.length; i++) {\n var styleName = domElement[i];\n serverValueInObjectForm[styleName] =\n domElement.getPropertyValue(styleName);\n }\n return serverValueInObjectForm;\n }\n function diffHydratedStyles(domElement, value$jscomp$0, serverDifferences) {\n if (null != value$jscomp$0 && \"object\" !== typeof value$jscomp$0)\n console.error(\n \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\"\n );\n else {\n var clientValue;\n var delimiter = (clientValue = \"\"),\n styleName;\n for (styleName in value$jscomp$0)\n if (value$jscomp$0.hasOwnProperty(styleName)) {\n var value = value$jscomp$0[styleName];\n null != value &&\n \"boolean\" !== typeof value &&\n \"\" !== value &&\n (0 === styleName.indexOf(\"--\")\n ? (checkCSSPropertyStringCoercion(value, styleName),\n (clientValue +=\n delimiter + styleName + \":\" + (\"\" + value).trim()))\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? (checkCSSPropertyStringCoercion(value, styleName),\n (clientValue +=\n delimiter +\n styleName\n .replace(uppercasePattern, \"-$1\")\n .toLowerCase()\n .replace(msPattern$1, \"-ms-\") +\n \":\" +\n (\"\" + value).trim()))\n : (clientValue +=\n delimiter +\n styleName\n .replace(uppercasePattern, \"-$1\")\n .toLowerCase()\n .replace(msPattern$1, \"-ms-\") +\n \":\" +\n value +\n \"px\"),\n (delimiter = \";\"));\n }\n clientValue = clientValue || null;\n value$jscomp$0 = domElement.getAttribute(\"style\");\n value$jscomp$0 !== clientValue &&\n ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),\n normalizeMarkupForTextOrAttribute(value$jscomp$0) !== clientValue &&\n (serverDifferences.style = getStylesObjectFromElement(domElement)));\n }\n }\n function hydrateAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, propKey),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateBooleanAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement) {\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n return;\n }\n if (!value) return;\n } else\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n break;\n default:\n if (value) return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateBooleanishAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, attributeName),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateNumericAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n default:\n if (isNaN(value)) return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n !isNaN(value) &&\n (checkAttributeStringCoercion(value, propKey),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateSanitizedAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, propKey),\n (attributeName = sanitizeURL(\"\" + value)),\n domElement === attributeName)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function diffHydratedProperties(domElement, tag, props, hostContext) {\n for (\n var serverDifferences = {},\n extraAttributes = new Set(),\n attributes = domElement.attributes,\n i = 0;\n i < attributes.length;\n i++\n )\n switch (attributes[i].name.toLowerCase()) {\n case \"value\":\n break;\n case \"checked\":\n break;\n case \"selected\":\n break;\n default:\n extraAttributes.add(attributes[i].name);\n }\n if (isCustomElement(tag))\n for (var propKey in props) {\n if (props.hasOwnProperty(propKey)) {\n var value = props[propKey];\n if (null != value)\n if (registrationNameDependencies.hasOwnProperty(propKey))\n \"function\" !== typeof value &&\n warnForInvalidEventListener(propKey, value);\n else if (!0 !== props.suppressHydrationWarning)\n switch (propKey) {\n case \"children\":\n (\"string\" !== typeof value && \"number\" !== typeof value) ||\n warnForPropDifference(\n \"children\",\n domElement.textContent,\n value,\n serverDifferences\n );\n continue;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n continue;\n case \"dangerouslySetInnerHTML\":\n attributes = domElement.innerHTML;\n value = value ? value.__html : void 0;\n null != value &&\n ((value = normalizeHTML(domElement, value)),\n warnForPropDifference(\n propKey,\n attributes,\n value,\n serverDifferences\n ));\n continue;\n case \"style\":\n extraAttributes.delete(propKey);\n diffHydratedStyles(domElement, value, serverDifferences);\n continue;\n case \"offsetParent\":\n case \"offsetTop\":\n case \"offsetLeft\":\n case \"offsetWidth\":\n case \"offsetHeight\":\n case \"isContentEditable\":\n case \"outerText\":\n case \"outerHTML\":\n extraAttributes.delete(propKey.toLowerCase());\n console.error(\n \"Assignment to read-only property will result in a no-op: `%s`\",\n propKey\n );\n continue;\n case \"className\":\n extraAttributes.delete(\"class\");\n attributes = getValueForAttributeOnCustomComponent(\n domElement,\n \"class\",\n value\n );\n warnForPropDifference(\n \"className\",\n attributes,\n value,\n serverDifferences\n );\n continue;\n default:\n hostContext.context === HostContextNamespaceNone &&\n \"svg\" !== tag &&\n \"math\" !== tag\n ? extraAttributes.delete(propKey.toLowerCase())\n : extraAttributes.delete(propKey),\n (attributes = getValueForAttributeOnCustomComponent(\n domElement,\n propKey,\n value\n )),\n warnForPropDifference(\n propKey,\n attributes,\n value,\n serverDifferences\n );\n }\n }\n }\n else\n for (value in props)\n if (\n props.hasOwnProperty(value) &&\n ((propKey = props[value]), null != propKey)\n )\n if (registrationNameDependencies.hasOwnProperty(value))\n \"function\" !== typeof propKey &&\n warnForInvalidEventListener(value, propKey);\n else if (!0 !== props.suppressHydrationWarning)\n switch (value) {\n case \"children\":\n (\"string\" !== typeof propKey &&\n \"number\" !== typeof propKey) ||\n warnForPropDifference(\n \"children\",\n domElement.textContent,\n propKey,\n serverDifferences\n );\n continue;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"value\":\n case \"checked\":\n case \"selected\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n continue;\n case \"dangerouslySetInnerHTML\":\n attributes = domElement.innerHTML;\n propKey = propKey ? propKey.__html : void 0;\n null != propKey &&\n ((propKey = normalizeHTML(domElement, propKey)),\n attributes !== propKey &&\n (serverDifferences[value] = { __html: attributes }));\n continue;\n case \"className\":\n hydrateAttribute(\n domElement,\n value,\n \"class\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"tabIndex\":\n hydrateAttribute(\n domElement,\n value,\n \"tabindex\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"style\":\n extraAttributes.delete(value);\n diffHydratedStyles(domElement, propKey, serverDifferences);\n continue;\n case \"multiple\":\n extraAttributes.delete(value);\n warnForPropDifference(\n value,\n domElement.multiple,\n propKey,\n serverDifferences\n );\n continue;\n case \"muted\":\n extraAttributes.delete(value);\n warnForPropDifference(\n value,\n domElement.muted,\n propKey,\n serverDifferences\n );\n continue;\n case \"autoFocus\":\n extraAttributes.delete(\"autofocus\");\n warnForPropDifference(\n value,\n domElement.autofocus,\n propKey,\n serverDifferences\n );\n continue;\n case \"data\":\n if (\"object\" !== tag) {\n extraAttributes.delete(value);\n attributes = domElement.getAttribute(\"data\");\n warnForPropDifference(\n value,\n attributes,\n propKey,\n serverDifferences\n );\n continue;\n }\n case \"src\":\n case \"href\":\n if (\n !(\n \"\" !== propKey ||\n (\"a\" === tag && \"href\" === value) ||\n (\"object\" === tag && \"data\" === value)\n )\n ) {\n \"src\" === value\n ? console.error(\n 'An empty string (\"\") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n value,\n value\n )\n : console.error(\n 'An empty string (\"\") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n value,\n value\n );\n continue;\n }\n hydrateSanitizedAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"action\":\n case \"formAction\":\n attributes = domElement.getAttribute(value);\n if (\"function\" === typeof propKey) {\n extraAttributes.delete(value.toLowerCase());\n \"formAction\" === value\n ? (extraAttributes.delete(\"name\"),\n extraAttributes.delete(\"formenctype\"),\n extraAttributes.delete(\"formmethod\"),\n extraAttributes.delete(\"formtarget\"))\n : (extraAttributes.delete(\"enctype\"),\n extraAttributes.delete(\"method\"),\n extraAttributes.delete(\"target\"));\n continue;\n } else if (attributes === EXPECTED_FORM_ACTION_URL) {\n extraAttributes.delete(value.toLowerCase());\n warnForPropDifference(\n value,\n \"function\",\n propKey,\n serverDifferences\n );\n continue;\n }\n hydrateSanitizedAttribute(\n domElement,\n value,\n value.toLowerCase(),\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkHref\":\n hydrateSanitizedAttribute(\n domElement,\n value,\n \"xlink:href\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"contentEditable\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n \"contenteditable\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"spellCheck\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n \"spellcheck\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"draggable\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n hydrateBooleanAttribute(\n domElement,\n value,\n value.toLowerCase(),\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"capture\":\n case \"download\":\n a: {\n i = domElement;\n var attributeName = (attributes = value),\n serverDifferences$jscomp$0 = serverDifferences;\n extraAttributes.delete(attributeName);\n i = i.getAttribute(attributeName);\n if (null === i)\n switch (typeof propKey) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n break a;\n default:\n if (!1 === propKey) break a;\n }\n else if (null != propKey)\n switch (typeof propKey) {\n case \"function\":\n case \"symbol\":\n break;\n case \"boolean\":\n if (!0 === propKey && \"\" === i) break a;\n break;\n default:\n if (\n (checkAttributeStringCoercion(propKey, attributes),\n i === \"\" + propKey)\n )\n break a;\n }\n warnForPropDifference(\n attributes,\n i,\n propKey,\n serverDifferences$jscomp$0\n );\n }\n continue;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n a: {\n i = domElement;\n attributeName = attributes = value;\n serverDifferences$jscomp$0 = serverDifferences;\n extraAttributes.delete(attributeName);\n i = i.getAttribute(attributeName);\n if (null === i)\n switch (typeof propKey) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break a;\n default:\n if (isNaN(propKey) || 1 > propKey) break a;\n }\n else if (null != propKey)\n switch (typeof propKey) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n !(isNaN(propKey) || 1 > propKey) &&\n (checkAttributeStringCoercion(propKey, attributes),\n i === \"\" + propKey)\n )\n break a;\n }\n warnForPropDifference(\n attributes,\n i,\n propKey,\n serverDifferences$jscomp$0\n );\n }\n continue;\n case \"rowSpan\":\n hydrateNumericAttribute(\n domElement,\n value,\n \"rowspan\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"start\":\n hydrateNumericAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xHeight\":\n hydrateAttribute(\n domElement,\n value,\n \"x-height\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkActuate\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:actuate\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkArcrole\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:arcrole\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkRole\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:role\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkShow\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:show\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkTitle\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:title\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkType\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:type\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlBase\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:base\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlLang\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:lang\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlSpace\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:space\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"inert\":\n \"\" !== propKey ||\n didWarnForNewBooleanPropsWithEmptyValue[value] ||\n ((didWarnForNewBooleanPropsWithEmptyValue[value] = !0),\n console.error(\n \"Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.\",\n value\n ));\n hydrateBooleanAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n default:\n if (\n !(2 < value.length) ||\n (\"o\" !== value[0] && \"O\" !== value[0]) ||\n (\"n\" !== value[1] && \"N\" !== value[1])\n ) {\n i = getAttributeAlias(value);\n attributes = !1;\n hostContext.context === HostContextNamespaceNone &&\n \"svg\" !== tag &&\n \"math\" !== tag\n ? extraAttributes.delete(i.toLowerCase())\n : ((attributeName = value.toLowerCase()),\n (attributeName = possibleStandardNames.hasOwnProperty(\n attributeName\n )\n ? possibleStandardNames[attributeName] || null\n : null),\n null !== attributeName &&\n attributeName !== value &&\n ((attributes = !0),\n extraAttributes.delete(attributeName)),\n extraAttributes.delete(i));\n a: if (\n ((attributeName = domElement),\n (serverDifferences$jscomp$0 = i),\n (i = propKey),\n isAttributeNameSafe(serverDifferences$jscomp$0))\n )\n if (\n attributeName.hasAttribute(serverDifferences$jscomp$0)\n )\n (attributeName = attributeName.getAttribute(\n serverDifferences$jscomp$0\n )),\n checkAttributeStringCoercion(\n i,\n serverDifferences$jscomp$0\n ),\n (i = attributeName === \"\" + i ? i : attributeName);\n else {\n switch (typeof i) {\n case \"function\":\n case \"symbol\":\n break a;\n case \"boolean\":\n if (\n ((attributeName = serverDifferences$jscomp$0\n .toLowerCase()\n .slice(0, 5)),\n \"data-\" !== attributeName &&\n \"aria-\" !== attributeName)\n )\n break a;\n }\n i = void 0 === i ? void 0 : null;\n }\n else i = void 0;\n attributes ||\n warnForPropDifference(\n value,\n i,\n propKey,\n serverDifferences\n );\n }\n }\n 0 < extraAttributes.size &&\n !0 !== props.suppressHydrationWarning &&\n warnForExtraAttributes(domElement, extraAttributes, serverDifferences);\n return 0 === Object.keys(serverDifferences).length\n ? null\n : serverDifferences;\n }\n function propNamesListJoin(list, combinator) {\n switch (list.length) {\n case 0:\n return \"\";\n case 1:\n return list[0];\n case 2:\n return list[0] + \" \" + combinator + \" \" + list[1];\n default:\n return (\n list.slice(0, -1).join(\", \") +\n \", \" +\n combinator +\n \" \" +\n list[list.length - 1]\n );\n }\n }\n function getOwnerDocumentFromRootContainer(rootContainerElement) {\n return 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n }\n function getOwnHostContext(namespaceURI) {\n switch (namespaceURI) {\n case SVG_NAMESPACE:\n return HostContextNamespaceSvg;\n case MATH_NAMESPACE:\n return HostContextNamespaceMath;\n default:\n return HostContextNamespaceNone;\n }\n }\n function getChildHostContextProd(parentNamespace, type) {\n if (parentNamespace === HostContextNamespaceNone)\n switch (type) {\n case \"svg\":\n return HostContextNamespaceSvg;\n case \"math\":\n return HostContextNamespaceMath;\n default:\n return HostContextNamespaceNone;\n }\n return parentNamespace === HostContextNamespaceSvg &&\n \"foreignObject\" === type\n ? HostContextNamespaceNone\n : parentNamespace;\n }\n function shouldSetTextContent(type, props) {\n return (\n \"textarea\" === type ||\n \"noscript\" === type ||\n \"string\" === typeof props.children ||\n \"number\" === typeof props.children ||\n \"bigint\" === typeof props.children ||\n (\"object\" === typeof props.dangerouslySetInnerHTML &&\n null !== props.dangerouslySetInnerHTML &&\n null != props.dangerouslySetInnerHTML.__html)\n );\n }\n function shouldAttemptEagerTransition() {\n var event = window.event;\n if (event && \"popstate\" === event.type) {\n if (event === currentPopstateTransitionEvent) return !1;\n currentPopstateTransitionEvent = event;\n return !0;\n }\n currentPopstateTransitionEvent = null;\n return !1;\n }\n function handleErrorInNextTick(error) {\n setTimeout(function () {\n throw error;\n });\n }\n function commitMount(domElement, type, newProps) {\n switch (type) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n newProps.autoFocus && domElement.focus();\n break;\n case \"img\":\n newProps.src\n ? (domElement.src = newProps.src)\n : newProps.srcSet && (domElement.srcset = newProps.srcSet);\n }\n }\n function commitUpdate(domElement, type, oldProps, newProps) {\n updateProperties(domElement, type, oldProps, newProps);\n domElement[internalPropsKey] = newProps;\n }\n function resetTextContent(domElement) {\n setTextContent(domElement, \"\");\n }\n function commitTextUpdate(textInstance, oldText, newText) {\n textInstance.nodeValue = newText;\n }\n function isSingletonScope(type) {\n return \"head\" === type;\n }\n function removeChild(parentInstance, child) {\n parentInstance.removeChild(child);\n }\n function removeChildFromContainer(container, child) {\n (9 === container.nodeType\n ? container.body\n : \"HTML\" === container.nodeName\n ? container.ownerDocument.body\n : container\n ).removeChild(child);\n }\n function clearSuspenseBoundary(parentInstance, suspenseInstance) {\n var node = suspenseInstance,\n possiblePreambleContribution = 0,\n depth = 0;\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), node === SUSPENSE_END_DATA)) {\n if (\n 0 < possiblePreambleContribution &&\n 8 > possiblePreambleContribution\n ) {\n node = possiblePreambleContribution;\n var ownerDocument = parentInstance.ownerDocument;\n node & PREAMBLE_CONTRIBUTION_HTML &&\n releaseSingletonInstance(ownerDocument.documentElement);\n node & PREAMBLE_CONTRIBUTION_BODY &&\n releaseSingletonInstance(ownerDocument.body);\n if (node & PREAMBLE_CONTRIBUTION_HEAD)\n for (\n node = ownerDocument.head,\n releaseSingletonInstance(node),\n ownerDocument = node.firstChild;\n ownerDocument;\n\n ) {\n var nextNode$jscomp$0 = ownerDocument.nextSibling,\n nodeName = ownerDocument.nodeName;\n ownerDocument[internalHoistableMarker] ||\n \"SCRIPT\" === nodeName ||\n \"STYLE\" === nodeName ||\n (\"LINK\" === nodeName &&\n \"stylesheet\" === ownerDocument.rel.toLowerCase()) ||\n node.removeChild(ownerDocument);\n ownerDocument = nextNode$jscomp$0;\n }\n }\n if (0 === depth) {\n parentInstance.removeChild(nextNode);\n retryIfBlockedOn(suspenseInstance);\n return;\n }\n depth--;\n } else\n node === SUSPENSE_START_DATA ||\n node === SUSPENSE_PENDING_START_DATA ||\n node === SUSPENSE_FALLBACK_START_DATA\n ? depth++\n : (possiblePreambleContribution = node.charCodeAt(0) - 48);\n else possiblePreambleContribution = 0;\n node = nextNode;\n } while (node);\n retryIfBlockedOn(suspenseInstance);\n }\n function hideInstance(instance) {\n instance = instance.style;\n \"function\" === typeof instance.setProperty\n ? instance.setProperty(\"display\", \"none\", \"important\")\n : (instance.display = \"none\");\n }\n function hideTextInstance(textInstance) {\n textInstance.nodeValue = \"\";\n }\n function unhideInstance(instance, props) {\n props = props[STYLE];\n props =\n void 0 !== props && null !== props && props.hasOwnProperty(\"display\")\n ? props.display\n : null;\n instance.style.display =\n null == props || \"boolean\" === typeof props ? \"\" : (\"\" + props).trim();\n }\n function unhideTextInstance(textInstance, text) {\n textInstance.nodeValue = text;\n }\n function clearContainerSparingly(container) {\n var nextNode = container.firstChild;\n nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n for (; nextNode; ) {\n var node = nextNode;\n nextNode = nextNode.nextSibling;\n switch (node.nodeName) {\n case \"HTML\":\n case \"HEAD\":\n case \"BODY\":\n clearContainerSparingly(node);\n detachDeletedInstance(node);\n continue;\n case \"SCRIPT\":\n case \"STYLE\":\n continue;\n case \"LINK\":\n if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n }\n container.removeChild(node);\n }\n }\n function canHydrateInstance(instance, type, props, inRootOrSingleton) {\n for (; 1 === instance.nodeType; ) {\n var anyProps = props;\n if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n if (\n !inRootOrSingleton &&\n (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n )\n break;\n } else if (!inRootOrSingleton)\n if (\"input\" === type && \"hidden\" === instance.type) {\n checkAttributeStringCoercion(anyProps.name, \"name\");\n var name = null == anyProps.name ? null : \"\" + anyProps.name;\n if (\n \"hidden\" === anyProps.type &&\n instance.getAttribute(\"name\") === name\n )\n return instance;\n } else return instance;\n else if (!instance[internalHoistableMarker])\n switch (type) {\n case \"meta\":\n if (!instance.hasAttribute(\"itemprop\")) break;\n return instance;\n case \"link\":\n name = instance.getAttribute(\"rel\");\n if (\n \"stylesheet\" === name &&\n instance.hasAttribute(\"data-precedence\")\n )\n break;\n else if (\n name !== anyProps.rel ||\n instance.getAttribute(\"href\") !==\n (null == anyProps.href || \"\" === anyProps.href\n ? null\n : anyProps.href) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin\n ? null\n : anyProps.crossOrigin) ||\n instance.getAttribute(\"title\") !==\n (null == anyProps.title ? null : anyProps.title)\n )\n break;\n return instance;\n case \"style\":\n if (instance.hasAttribute(\"data-precedence\")) break;\n return instance;\n case \"script\":\n name = instance.getAttribute(\"src\");\n if (\n (name !== (null == anyProps.src ? null : anyProps.src) ||\n instance.getAttribute(\"type\") !==\n (null == anyProps.type ? null : anyProps.type) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin\n ? null\n : anyProps.crossOrigin)) &&\n name &&\n instance.hasAttribute(\"async\") &&\n !instance.hasAttribute(\"itemprop\")\n )\n break;\n return instance;\n default:\n return instance;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) break;\n }\n return null;\n }\n function canHydrateTextInstance(instance, text, inRootOrSingleton) {\n if (\"\" === text) return null;\n for (; 3 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n }\n function isSuspenseInstanceFallback(instance) {\n return (\n instance.data === SUSPENSE_FALLBACK_START_DATA ||\n (instance.data === SUSPENSE_PENDING_START_DATA &&\n instance.ownerDocument.readyState === DOCUMENT_READY_STATE_COMPLETE)\n );\n }\n function registerSuspenseInstanceRetry(instance, callback) {\n var ownerDocument = instance.ownerDocument;\n if (\n instance.data !== SUSPENSE_PENDING_START_DATA ||\n ownerDocument.readyState === DOCUMENT_READY_STATE_COMPLETE\n )\n callback();\n else {\n var listener = function () {\n callback();\n ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n };\n ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n instance._reactRetry = listener;\n }\n }\n function getNextHydratable(node) {\n for (; null != node; node = node.nextSibling) {\n var nodeType = node.nodeType;\n if (1 === nodeType || 3 === nodeType) break;\n if (8 === nodeType) {\n nodeType = node.data;\n if (\n nodeType === SUSPENSE_START_DATA ||\n nodeType === SUSPENSE_FALLBACK_START_DATA ||\n nodeType === SUSPENSE_PENDING_START_DATA ||\n nodeType === FORM_STATE_IS_MATCHING ||\n nodeType === FORM_STATE_IS_NOT_MATCHING\n )\n break;\n if (nodeType === SUSPENSE_END_DATA) return null;\n }\n }\n return node;\n }\n function describeHydratableInstanceForDevWarnings(instance) {\n if (1 === instance.nodeType) {\n for (\n var JSCompiler_temp_const = instance.nodeName.toLowerCase(),\n serverDifferences = {},\n attributes = instance.attributes,\n i = 0;\n i < attributes.length;\n i++\n ) {\n var attr = attributes[i];\n serverDifferences[getPropNameFromAttributeName(attr.name)] =\n \"style\" === attr.name.toLowerCase()\n ? getStylesObjectFromElement(instance)\n : attr.value;\n }\n return { type: JSCompiler_temp_const, props: serverDifferences };\n }\n return 8 === instance.nodeType\n ? { type: \"Suspense\", props: {} }\n : instance.nodeValue;\n }\n function diffHydratedTextForDevWarnings(textInstance, text, parentProps) {\n return null === parentProps ||\n !0 !== parentProps[SUPPRESS_HYDRATION_WARNING]\n ? (textInstance.nodeValue === text\n ? (textInstance = null)\n : ((text = normalizeMarkupForTextOrAttribute(text)),\n (textInstance =\n normalizeMarkupForTextOrAttribute(textInstance.nodeValue) ===\n text\n ? null\n : textInstance.nodeValue)),\n textInstance)\n : null;\n }\n function getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n suspenseInstance = suspenseInstance.nextSibling;\n for (var depth = 0; suspenseInstance; ) {\n if (8 === suspenseInstance.nodeType) {\n var data = suspenseInstance.data;\n if (data === SUSPENSE_END_DATA) {\n if (0 === depth)\n return getNextHydratable(suspenseInstance.nextSibling);\n depth--;\n } else\n (data !== SUSPENSE_START_DATA &&\n data !== SUSPENSE_FALLBACK_START_DATA &&\n data !== SUSPENSE_PENDING_START_DATA) ||\n depth++;\n }\n suspenseInstance = suspenseInstance.nextSibling;\n }\n return null;\n }\n function getParentSuspenseInstance(targetInstance) {\n targetInstance = targetInstance.previousSibling;\n for (var depth = 0; targetInstance; ) {\n if (8 === targetInstance.nodeType) {\n var data = targetInstance.data;\n if (\n data === SUSPENSE_START_DATA ||\n data === SUSPENSE_FALLBACK_START_DATA ||\n data === SUSPENSE_PENDING_START_DATA\n ) {\n if (0 === depth) return targetInstance;\n depth--;\n } else data === SUSPENSE_END_DATA && depth++;\n }\n targetInstance = targetInstance.previousSibling;\n }\n return null;\n }\n function commitHydratedContainer(container) {\n retryIfBlockedOn(container);\n }\n function commitHydratedSuspenseInstance(suspenseInstance) {\n retryIfBlockedOn(suspenseInstance);\n }\n function resolveSingletonInstance(\n type,\n props,\n rootContainerInstance,\n hostContext,\n validateDOMNestingDev\n ) {\n validateDOMNestingDev &&\n validateDOMNesting(type, hostContext.ancestorInfo);\n props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n switch (type) {\n case \"html\":\n type = props.documentElement;\n if (!type)\n throw Error(\n \"React expected an <html> element (document.documentElement) to exist in the Document but one was not found. React never removes the documentElement for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n case \"head\":\n type = props.head;\n if (!type)\n throw Error(\n \"React expected a <head> element (document.head) to exist in the Document but one was not found. React never removes the head for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n case \"body\":\n type = props.body;\n if (!type)\n throw Error(\n \"React expected a <body> element (document.body) to exist in the Document but one was not found. React never removes the body for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n default:\n throw Error(\n \"resolveSingletonInstance was called with an element type that is not supported. This is a bug in React.\"\n );\n }\n }\n function acquireSingletonInstance(\n type,\n props,\n instance,\n internalInstanceHandle\n ) {\n if (\n !instance[internalContainerInstanceKey] &&\n getInstanceFromNode(instance)\n ) {\n var tagName = instance.tagName.toLowerCase();\n console.error(\n \"You are mounting a new %s component when a previous one has not first unmounted. It is an error to render more than one %s component at a time and attributes and children of these components will likely fail in unpredictable ways. Please only render a single instance of <%s> and if you need to mount a new one, ensure any previous ones have unmounted first.\",\n tagName,\n tagName,\n tagName\n );\n }\n switch (type) {\n case \"html\":\n case \"head\":\n case \"body\":\n break;\n default:\n console.error(\n \"acquireSingletonInstance was called with an element type that is not supported. This is a bug in React.\"\n );\n }\n for (tagName = instance.attributes; tagName.length; )\n instance.removeAttributeNode(tagName[0]);\n setInitialProperties(instance, type, props);\n instance[internalInstanceKey] = internalInstanceHandle;\n instance[internalPropsKey] = props;\n }\n function releaseSingletonInstance(instance) {\n for (var attributes = instance.attributes; attributes.length; )\n instance.removeAttributeNode(attributes[0]);\n detachDeletedInstance(instance);\n }\n function getHoistableRoot(container) {\n return \"function\" === typeof container.getRootNode\n ? container.getRootNode()\n : 9 === container.nodeType\n ? container\n : container.ownerDocument;\n }\n function preconnectAs(rel, href, crossOrigin) {\n var ownerDocument = globalDocument;\n if (ownerDocument && \"string\" === typeof href && href) {\n var limitedEscapedHref =\n escapeSelectorAttributeValueInsideDoubleQuotes(href);\n limitedEscapedHref =\n 'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n \"string\" === typeof crossOrigin &&\n (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n preconnectsSet.has(limitedEscapedHref) ||\n (preconnectsSet.add(limitedEscapedHref),\n (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n null === ownerDocument.querySelector(limitedEscapedHref) &&\n ((href = ownerDocument.createElement(\"link\")),\n setInitialProperties(href, \"link\", rel),\n markNodeAsHoistable(href),\n ownerDocument.head.appendChild(href)));\n }\n }\n function getResource(type, currentProps, pendingProps, currentResource) {\n var resourceRoot = (resourceRoot = rootInstanceStackCursor.current)\n ? getHoistableRoot(resourceRoot)\n : null;\n if (!resourceRoot)\n throw Error(\n '\"resourceRoot\" was expected to exist. This is a bug in React.'\n );\n switch (type) {\n case \"meta\":\n case \"title\":\n return null;\n case \"style\":\n return \"string\" === typeof pendingProps.precedence &&\n \"string\" === typeof pendingProps.href\n ? ((pendingProps = getStyleKey(pendingProps.href)),\n (currentProps =\n getResourcesFromRoot(resourceRoot).hoistableStyles),\n (currentResource = currentProps.get(pendingProps)),\n currentResource ||\n ((currentResource = {\n type: \"style\",\n instance: null,\n count: 0,\n state: null\n }),\n currentProps.set(pendingProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null };\n case \"link\":\n if (\n \"stylesheet\" === pendingProps.rel &&\n \"string\" === typeof pendingProps.href &&\n \"string\" === typeof pendingProps.precedence\n ) {\n type = getStyleKey(pendingProps.href);\n var _styles = getResourcesFromRoot(resourceRoot).hoistableStyles,\n _resource = _styles.get(type);\n if (\n !_resource &&\n ((resourceRoot = resourceRoot.ownerDocument || resourceRoot),\n (_resource = {\n type: \"stylesheet\",\n instance: null,\n count: 0,\n state: { loading: NotLoaded, preload: null }\n }),\n _styles.set(type, _resource),\n (_styles = resourceRoot.querySelector(\n getStylesheetSelectorFromKey(type)\n )) &&\n !_styles._p &&\n ((_resource.instance = _styles),\n (_resource.state.loading = Loaded | Inserted)),\n !preloadPropsMap.has(type))\n ) {\n var preloadProps = {\n rel: \"preload\",\n as: \"style\",\n href: pendingProps.href,\n crossOrigin: pendingProps.crossOrigin,\n integrity: pendingProps.integrity,\n media: pendingProps.media,\n hrefLang: pendingProps.hrefLang,\n referrerPolicy: pendingProps.referrerPolicy\n };\n preloadPropsMap.set(type, preloadProps);\n _styles ||\n preloadStylesheet(\n resourceRoot,\n type,\n preloadProps,\n _resource.state\n );\n }\n if (currentProps && null === currentResource)\n throw (\n ((pendingProps =\n \"\\n\\n - \" +\n describeLinkForResourceErrorDEV(currentProps) +\n \"\\n + \" +\n describeLinkForResourceErrorDEV(pendingProps)),\n Error(\n \"Expected <link> not to update to be updated to a stylesheet with precedence. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key.\" +\n pendingProps\n ))\n );\n return _resource;\n }\n if (currentProps && null !== currentResource)\n throw (\n ((pendingProps =\n \"\\n\\n - \" +\n describeLinkForResourceErrorDEV(currentProps) +\n \"\\n + \" +\n describeLinkForResourceErrorDEV(pendingProps)),\n Error(\n \"Expected stylesheet with precedence to not be updated to a different kind of <link>. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key.\" +\n pendingProps\n ))\n );\n return null;\n case \"script\":\n return (\n (currentProps = pendingProps.async),\n (pendingProps = pendingProps.src),\n \"string\" === typeof pendingProps &&\n currentProps &&\n \"function\" !== typeof currentProps &&\n \"symbol\" !== typeof currentProps\n ? ((pendingProps = getScriptKey(pendingProps)),\n (currentProps =\n getResourcesFromRoot(resourceRoot).hoistableScripts),\n (currentResource = currentProps.get(pendingProps)),\n currentResource ||\n ((currentResource = {\n type: \"script\",\n instance: null,\n count: 0,\n state: null\n }),\n currentProps.set(pendingProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null }\n );\n default:\n throw Error(\n 'getResource encountered a type it did not expect: \"' +\n type +\n '\". this is a bug in React.'\n );\n }\n }\n function describeLinkForResourceErrorDEV(props) {\n var describedProps = 0,\n description = \"<link\";\n \"string\" === typeof props.rel\n ? (describedProps++, (description += ' rel=\"' + props.rel + '\"'))\n : hasOwnProperty.call(props, \"rel\") &&\n (describedProps++,\n (description +=\n ' rel=\"' +\n (null === props.rel ? \"null\" : \"invalid type \" + typeof props.rel) +\n '\"'));\n \"string\" === typeof props.href\n ? (describedProps++, (description += ' href=\"' + props.href + '\"'))\n : hasOwnProperty.call(props, \"href\") &&\n (describedProps++,\n (description +=\n ' href=\"' +\n (null === props.href\n ? \"null\"\n : \"invalid type \" + typeof props.href) +\n '\"'));\n \"string\" === typeof props.precedence\n ? (describedProps++,\n (description += ' precedence=\"' + props.precedence + '\"'))\n : hasOwnProperty.call(props, \"precedence\") &&\n (describedProps++,\n (description +=\n \" precedence={\" +\n (null === props.precedence\n ? \"null\"\n : \"invalid type \" + typeof props.precedence) +\n \"}\"));\n Object.getOwnPropertyNames(props).length > describedProps &&\n (description += \" ...\");\n return description + \" />\";\n }\n function getStyleKey(href) {\n return (\n 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"'\n );\n }\n function getStylesheetSelectorFromKey(key) {\n return 'link[rel=\"stylesheet\"][' + key + \"]\";\n }\n function stylesheetPropsFromRawProps(rawProps) {\n return assign({}, rawProps, {\n \"data-precedence\": rawProps.precedence,\n precedence: null\n });\n }\n function preloadStylesheet(ownerDocument, key, preloadProps, state) {\n ownerDocument.querySelector(\n 'link[rel=\"preload\"][as=\"style\"][' + key + \"]\"\n )\n ? (state.loading = Loaded)\n : ((key = ownerDocument.createElement(\"link\")),\n (state.preload = key),\n key.addEventListener(\"load\", function () {\n return (state.loading |= Loaded);\n }),\n key.addEventListener(\"error\", function () {\n return (state.loading |= Errored);\n }),\n setInitialProperties(key, \"link\", preloadProps),\n markNodeAsHoistable(key),\n ownerDocument.head.appendChild(key));\n }\n function getScriptKey(src) {\n return (\n '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]'\n );\n }\n function getScriptSelectorFromKey(key) {\n return \"script[async]\" + key;\n }\n function acquireResource(hoistableRoot, resource, props) {\n resource.count++;\n if (null === resource.instance)\n switch (resource.type) {\n case \"style\":\n var instance = hoistableRoot.querySelector(\n 'style[data-href~=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n '\"]'\n );\n if (instance)\n return (\n (resource.instance = instance),\n markNodeAsHoistable(instance),\n instance\n );\n var styleProps = assign({}, props, {\n \"data-href\": props.href,\n \"data-precedence\": props.precedence,\n href: null,\n precedence: null\n });\n instance = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"style\");\n markNodeAsHoistable(instance);\n setInitialProperties(instance, \"style\", styleProps);\n insertStylesheet(instance, props.precedence, hoistableRoot);\n return (resource.instance = instance);\n case \"stylesheet\":\n styleProps = getStyleKey(props.href);\n var _instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(styleProps)\n );\n if (_instance)\n return (\n (resource.state.loading |= Inserted),\n (resource.instance = _instance),\n markNodeAsHoistable(_instance),\n _instance\n );\n instance = stylesheetPropsFromRawProps(props);\n (styleProps = preloadPropsMap.get(styleProps)) &&\n adoptPreloadPropsForStylesheet(instance, styleProps);\n _instance = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"link\");\n markNodeAsHoistable(_instance);\n var linkInstance = _instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(_instance, \"link\", instance);\n resource.state.loading |= Inserted;\n insertStylesheet(_instance, props.precedence, hoistableRoot);\n return (resource.instance = _instance);\n case \"script\":\n _instance = getScriptKey(props.src);\n if (\n (styleProps = hoistableRoot.querySelector(\n getScriptSelectorFromKey(_instance)\n ))\n )\n return (\n (resource.instance = styleProps),\n markNodeAsHoistable(styleProps),\n styleProps\n );\n instance = props;\n if ((styleProps = preloadPropsMap.get(_instance)))\n (instance = assign({}, props)),\n adoptPreloadPropsForScript(instance, styleProps);\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n styleProps = hoistableRoot.createElement(\"script\");\n markNodeAsHoistable(styleProps);\n setInitialProperties(styleProps, \"link\", instance);\n hoistableRoot.head.appendChild(styleProps);\n return (resource.instance = styleProps);\n case \"void\":\n return null;\n default:\n throw Error(\n 'acquireResource encountered a resource type it did not expect: \"' +\n resource.type +\n '\". this is a bug in React.'\n );\n }\n else\n \"stylesheet\" === resource.type &&\n (resource.state.loading & Inserted) === NotLoaded &&\n ((instance = resource.instance),\n (resource.state.loading |= Inserted),\n insertStylesheet(instance, props.precedence, hoistableRoot));\n return resource.instance;\n }\n function insertStylesheet(instance, precedence, root) {\n for (\n var nodes = root.querySelectorAll(\n 'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n ),\n last = nodes.length ? nodes[nodes.length - 1] : null,\n prior = last,\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (node.dataset.precedence === precedence) prior = node;\n else if (prior !== last) break;\n }\n prior\n ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n : ((precedence = 9 === root.nodeType ? root.head : root),\n precedence.insertBefore(instance, precedence.firstChild));\n }\n function adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n null == stylesheetProps.crossOrigin &&\n (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n null == stylesheetProps.referrerPolicy &&\n (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n null == stylesheetProps.title &&\n (stylesheetProps.title = preloadProps.title);\n }\n function adoptPreloadPropsForScript(scriptProps, preloadProps) {\n null == scriptProps.crossOrigin &&\n (scriptProps.crossOrigin = preloadProps.crossOrigin);\n null == scriptProps.referrerPolicy &&\n (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n null == scriptProps.integrity &&\n (scriptProps.integrity = preloadProps.integrity);\n }\n function getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n if (null === tagCaches) {\n var cache = new Map();\n var caches = (tagCaches = new Map());\n caches.set(ownerDocument, cache);\n } else\n (caches = tagCaches),\n (cache = caches.get(ownerDocument)),\n cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n if (cache.has(type)) return cache;\n cache.set(type, null);\n ownerDocument = ownerDocument.getElementsByTagName(type);\n for (caches = 0; caches < ownerDocument.length; caches++) {\n var node = ownerDocument[caches];\n if (\n !(\n node[internalHoistableMarker] ||\n node[internalInstanceKey] ||\n (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n ) &&\n node.namespaceURI !== SVG_NAMESPACE\n ) {\n var nodeKey = node.getAttribute(keyAttribute) || \"\";\n nodeKey = type + nodeKey;\n var existing = cache.get(nodeKey);\n existing ? existing.push(node) : cache.set(nodeKey, [node]);\n }\n }\n return cache;\n }\n function mountHoistable(hoistableRoot, type, instance) {\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n hoistableRoot.head.insertBefore(\n instance,\n \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n );\n }\n function isHostHoistableType(type, props, hostContext) {\n var outsideHostContainerContext =\n !hostContext.ancestorInfo.containerTagInScope;\n if (\n hostContext.context === HostContextNamespaceSvg ||\n null != props.itemProp\n )\n return (\n !outsideHostContainerContext ||\n null == props.itemProp ||\n (\"meta\" !== type &&\n \"title\" !== type &&\n \"style\" !== type &&\n \"link\" !== type &&\n \"script\" !== type) ||\n console.error(\n \"Cannot render a <%s> outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this <%s> remove the `itemProp` prop. Otherwise, try moving this tag into the <head> or <body> of the Document.\",\n type,\n type\n ),\n !1\n );\n switch (type) {\n case \"meta\":\n case \"title\":\n return !0;\n case \"style\":\n if (\n \"string\" !== typeof props.precedence ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n ) {\n outsideHostContainerContext &&\n console.error(\n 'Cannot render a <style> outside the main document without knowing its precedence and a unique href key. React can hoist and deduplicate <style> tags if you provide a `precedence` prop along with an `href` prop that does not conflict with the `href` values used in any other hoisted <style> or <link rel=\"stylesheet\" ...> tags. Note that hoisting <style> tags is considered an advanced feature that most will not use directly. Consider moving the <style> tag to the <head> or consider adding a `precedence=\"default\"` and `href=\"some unique resource identifier\"`.'\n );\n break;\n }\n return !0;\n case \"link\":\n if (\n \"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href ||\n props.onLoad ||\n props.onError\n ) {\n if (\n \"stylesheet\" === props.rel &&\n \"string\" === typeof props.precedence\n ) {\n type = props.href;\n var onError = props.onError,\n disabled = props.disabled;\n hostContext = [];\n props.onLoad && hostContext.push(\"`onLoad`\");\n onError && hostContext.push(\"`onError`\");\n null != disabled && hostContext.push(\"`disabled`\");\n onError = propNamesListJoin(hostContext, \"and\");\n onError += 1 === hostContext.length ? \" prop\" : \" props\";\n disabled =\n 1 === hostContext.length ? \"an \" + onError : \"the \" + onError;\n hostContext.length &&\n console.error(\n 'React encountered a <link rel=\"stylesheet\" href=\"%s\" ... /> with a `precedence` prop that also included %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',\n type,\n disabled,\n onError\n );\n }\n outsideHostContainerContext &&\n (\"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n ? console.error(\n \"Cannot render a <link> outside the main document without a `rel` and `href` prop. Try adding a `rel` and/or `href` prop to this <link> or moving the link into the <head> tag\"\n )\n : (props.onError || props.onLoad) &&\n console.error(\n \"Cannot render a <link> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>.\"\n ));\n break;\n }\n switch (props.rel) {\n case \"stylesheet\":\n return (\n (type = props.precedence),\n (props = props.disabled),\n \"string\" !== typeof type &&\n outsideHostContainerContext &&\n console.error(\n 'Cannot render a <link rel=\"stylesheet\" /> outside the main document without knowing its precedence. Consider adding precedence=\"default\" or moving it into the root <head> tag.'\n ),\n \"string\" === typeof type && null == props\n );\n default:\n return !0;\n }\n case \"script\":\n type =\n props.async &&\n \"function\" !== typeof props.async &&\n \"symbol\" !== typeof props.async;\n if (\n !type ||\n props.onLoad ||\n props.onError ||\n !props.src ||\n \"string\" !== typeof props.src\n ) {\n outsideHostContainerContext &&\n (type\n ? props.onLoad || props.onError\n ? console.error(\n \"Cannot render a <script> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>.\"\n )\n : console.error(\n \"Cannot render a <script> outside the main document without `async={true}` and a non-empty `src` prop. Ensure there is a valid `src` and either make the script async or move it into the root <head> tag or somewhere in the <body>.\"\n )\n : console.error(\n 'Cannot render a sync or defer <script> outside the main document without knowing its order. Try adding async=\"\" or moving it into the root <head> tag.'\n ));\n break;\n }\n return !0;\n case \"noscript\":\n case \"template\":\n outsideHostContainerContext &&\n console.error(\n \"Cannot render <%s> outside the main document. Try moving it into the root <head> tag.\",\n type\n );\n }\n return !1;\n }\n function preloadResource(resource) {\n return \"stylesheet\" === resource.type &&\n (resource.state.loading & Settled) === NotLoaded\n ? !1\n : !0;\n }\n function noop() {}\n function suspendResource(hoistableRoot, resource, props) {\n if (null === suspendedState)\n throw Error(\n \"Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.\"\n );\n var state = suspendedState;\n if (\n \"stylesheet\" === resource.type &&\n (\"string\" !== typeof props.media ||\n !1 !== matchMedia(props.media).matches) &&\n (resource.state.loading & Inserted) === NotLoaded\n ) {\n if (null === resource.instance) {\n var key = getStyleKey(props.href),\n instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(key)\n );\n if (instance) {\n hoistableRoot = instance._p;\n null !== hoistableRoot &&\n \"object\" === typeof hoistableRoot &&\n \"function\" === typeof hoistableRoot.then &&\n (state.count++,\n (state = onUnsuspend.bind(state)),\n hoistableRoot.then(state, state));\n resource.state.loading |= Inserted;\n resource.instance = instance;\n markNodeAsHoistable(instance);\n return;\n }\n instance = hoistableRoot.ownerDocument || hoistableRoot;\n props = stylesheetPropsFromRawProps(props);\n (key = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(props, key);\n instance = instance.createElement(\"link\");\n markNodeAsHoistable(instance);\n var linkInstance = instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance, \"link\", props);\n resource.instance = instance;\n }\n null === state.stylesheets && (state.stylesheets = new Map());\n state.stylesheets.set(resource, hoistableRoot);\n (hoistableRoot = resource.state.preload) &&\n (resource.state.loading & Settled) === NotLoaded &&\n (state.count++,\n (resource = onUnsuspend.bind(state)),\n hoistableRoot.addEventListener(\"load\", resource),\n hoistableRoot.addEventListener(\"error\", resource));\n }\n }\n function waitForCommitToBeReady() {\n if (null === suspendedState)\n throw Error(\n \"Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.\"\n );\n var state = suspendedState;\n state.stylesheets &&\n 0 === state.count &&\n insertSuspendedStylesheets(state, state.stylesheets);\n return 0 < state.count\n ? function (commit) {\n var stylesheetTimer = setTimeout(function () {\n state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets);\n if (state.unsuspend) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n }, 6e4);\n state.unsuspend = commit;\n return function () {\n state.unsuspend = null;\n clearTimeout(stylesheetTimer);\n };\n }\n : null;\n }\n function onUnsuspend() {\n this.count--;\n if (0 === this.count)\n if (this.stylesheets)\n insertSuspendedStylesheets(this, this.stylesheets);\n else if (this.unsuspend) {\n var unsuspend = this.unsuspend;\n this.unsuspend = null;\n unsuspend();\n }\n }\n function insertSuspendedStylesheets(state, resources) {\n state.stylesheets = null;\n null !== state.unsuspend &&\n (state.count++,\n (precedencesByRoot = new Map()),\n resources.forEach(insertStylesheetIntoRoot, state),\n (precedencesByRoot = null),\n onUnsuspend.call(state));\n }\n function insertStylesheetIntoRoot(root, resource) {\n if (!(resource.state.loading & Inserted)) {\n var precedences = precedencesByRoot.get(root);\n if (precedences) var last = precedences.get(LAST_PRECEDENCE);\n else {\n precedences = new Map();\n precedencesByRoot.set(root, precedences);\n for (\n var nodes = root.querySelectorAll(\n \"link[data-precedence],style[data-precedence]\"\n ),\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (\n \"LINK\" === node.nodeName ||\n \"not all\" !== node.getAttribute(\"media\")\n )\n precedences.set(node.dataset.precedence, node), (last = node);\n }\n last && precedences.set(LAST_PRECEDENCE, last);\n }\n nodes = resource.instance;\n node = nodes.getAttribute(\"data-precedence\");\n i = precedences.get(node) || last;\n i === last && precedences.set(LAST_PRECEDENCE, nodes);\n precedences.set(node, nodes);\n this.count++;\n last = onUnsuspend.bind(this);\n nodes.addEventListener(\"load\", last);\n nodes.addEventListener(\"error\", last);\n i\n ? i.parentNode.insertBefore(nodes, i.nextSibling)\n : ((root = 9 === root.nodeType ? root.head : root),\n root.insertBefore(nodes, root.firstChild));\n resource.state.loading |= Inserted;\n }\n }\n function FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n formState\n ) {\n this.tag = 1;\n this.containerInfo = containerInfo;\n this.pingCache = this.current = this.pendingChildren = null;\n this.timeoutHandle = noTimeout;\n this.callbackNode =\n this.next =\n this.pendingContext =\n this.context =\n this.cancelPendingCommit =\n null;\n this.callbackPriority = 0;\n this.expirationTimes = createLaneMap(-1);\n this.entangledLanes =\n this.shellSuspendCounter =\n this.errorRecoveryDisabledLanes =\n this.expiredLanes =\n this.warmLanes =\n this.pingedLanes =\n this.suspendedLanes =\n this.pendingLanes =\n 0;\n this.entanglements = createLaneMap(0);\n this.hiddenUpdates = createLaneMap(null);\n this.identifierPrefix = identifierPrefix;\n this.onUncaughtError = onUncaughtError;\n this.onCaughtError = onCaughtError;\n this.onRecoverableError = onRecoverableError;\n this.pooledCache = null;\n this.pooledCacheLanes = 0;\n this.formState = formState;\n this.incompleteTransitions = new Map();\n this.passiveEffectDuration = this.effectDuration = -0;\n this.memoizedUpdaters = new Set();\n containerInfo = this.pendingUpdatersLaneMap = [];\n for (tag = 0; 31 > tag; tag++) containerInfo.push(new Set());\n this._debugRootType = hydrate ? \"hydrateRoot()\" : \"createRoot()\";\n }\n function createFiberRoot(\n containerInfo,\n tag,\n hydrate,\n initialChildren,\n hydrationCallbacks,\n isStrictMode,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n formState\n ) {\n containerInfo = new FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n formState\n );\n tag = ConcurrentMode;\n !0 === isStrictMode && (tag |= StrictLegacyMode | StrictEffectsMode);\n isDevToolsPresent && (tag |= ProfileMode);\n isStrictMode = createFiber(3, null, null, tag);\n containerInfo.current = isStrictMode;\n isStrictMode.stateNode = containerInfo;\n tag = createCache();\n retainCache(tag);\n containerInfo.pooledCache = tag;\n retainCache(tag);\n isStrictMode.memoizedState = {\n element: initialChildren,\n isDehydrated: hydrate,\n cache: tag\n };\n initializeUpdateQueue(isStrictMode);\n return containerInfo;\n }\n function getContextForSubtree(parentComponent) {\n if (!parentComponent) return emptyContextObject;\n parentComponent = emptyContextObject;\n return parentComponent;\n }\n function updateContainerImpl(\n rootFiber,\n lane,\n element,\n container,\n parentComponent,\n callback\n ) {\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onScheduleFiberRoot\n )\n try {\n injectedHook.onScheduleFiberRoot(rendererID, container, element);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderScheduled &&\n injectedProfilingHooks.markRenderScheduled(lane);\n parentComponent = getContextForSubtree(parentComponent);\n null === container.context\n ? (container.context = parentComponent)\n : (container.pendingContext = parentComponent);\n isRendering &&\n null !== current &&\n !didWarnAboutNestedUpdates &&\n ((didWarnAboutNestedUpdates = !0),\n console.error(\n \"Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.\\n\\nCheck the render method of %s.\",\n getComponentNameFromFiber(current) || \"Unknown\"\n ));\n container = createUpdate(lane);\n container.payload = { element: element };\n callback = void 0 === callback ? null : callback;\n null !== callback &&\n (\"function\" !== typeof callback &&\n console.error(\n \"Expected the last optional `callback` argument to be a function. Instead received: %s.\",\n callback\n ),\n (container.callback = callback));\n element = enqueueUpdate(rootFiber, container, lane);\n null !== element &&\n (scheduleUpdateOnFiber(element, rootFiber, lane),\n entangleTransitions(element, rootFiber, lane));\n }\n function markRetryLaneImpl(fiber, retryLane) {\n fiber = fiber.memoizedState;\n if (null !== fiber && null !== fiber.dehydrated) {\n var a = fiber.retryLane;\n fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n }\n }\n function markRetryLaneIfNotHydrated(fiber, retryLane) {\n markRetryLaneImpl(fiber, retryLane);\n (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n }\n function attemptContinuousHydration(fiber) {\n if (13 === fiber.tag) {\n var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n markRetryLaneIfNotHydrated(fiber, 67108864);\n }\n }\n function getCurrentFiberForDevTools() {\n return current;\n }\n function getLaneLabelMap() {\n for (var map = new Map(), lane = 1, index = 0; 31 > index; index++) {\n var label = getLabelForLane(lane);\n map.set(lane, label);\n lane *= 2;\n }\n return map;\n }\n function dispatchDiscreteEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n ) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = DiscreteEventPriority),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n }\n function dispatchContinuousEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n ) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = ContinuousEventPriority),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n }\n function dispatchEvent(\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n if (_enabled) {\n var blockedOn = findInstanceBlockingEvent(nativeEvent);\n if (null === blockedOn)\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n ),\n clearIfContinuousEvent(domEventName, nativeEvent);\n else if (\n queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n )\n nativeEvent.stopPropagation();\n else if (\n (clearIfContinuousEvent(domEventName, nativeEvent),\n eventSystemFlags & 4 &&\n -1 < discreteReplayableEvents.indexOf(domEventName))\n ) {\n for (; null !== blockedOn; ) {\n var fiber = getInstanceFromNode(blockedOn);\n if (null !== fiber)\n switch (fiber.tag) {\n case 3:\n fiber = fiber.stateNode;\n if (fiber.current.memoizedState.isDehydrated) {\n var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n if (0 !== lanes) {\n var root = fiber;\n root.pendingLanes |= 2;\n for (root.entangledLanes |= 2; lanes; ) {\n var lane = 1 << (31 - clz32(lanes));\n root.entanglements[1] |= lane;\n lanes &= ~lane;\n }\n ensureRootIsScheduled(fiber);\n (executionContext & (RenderContext | CommitContext)) ===\n NoContext &&\n ((workInProgressRootRenderTargetTime =\n now$1() + RENDER_TIMEOUT_MS),\n flushSyncWorkAcrossRoots_impl(0, !1));\n }\n }\n break;\n case 13:\n (root = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n flushSyncWork$1(),\n markRetryLaneIfNotHydrated(fiber, 2);\n }\n fiber = findInstanceBlockingEvent(nativeEvent);\n null === fiber &&\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n );\n if (fiber === blockedOn) break;\n blockedOn = fiber;\n }\n null !== blockedOn && nativeEvent.stopPropagation();\n } else\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n null,\n targetContainer\n );\n }\n }\n function findInstanceBlockingEvent(nativeEvent) {\n nativeEvent = getEventTarget(nativeEvent);\n return findInstanceBlockingTarget(nativeEvent);\n }\n function findInstanceBlockingTarget(targetNode) {\n return_targetInst = null;\n targetNode = getClosestInstanceFromNode(targetNode);\n if (null !== targetNode) {\n var nearestMounted = getNearestMountedFiber(targetNode);\n if (null === nearestMounted) targetNode = null;\n else {\n var tag = nearestMounted.tag;\n if (13 === tag) {\n targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (3 === tag) {\n if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n return 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n targetNode = null;\n } else nearestMounted !== targetNode && (targetNode = null);\n }\n }\n return_targetInst = targetNode;\n return null;\n }\n function getEventPriority(domEventName) {\n switch (domEventName) {\n case \"beforetoggle\":\n case \"cancel\":\n case \"click\":\n case \"close\":\n case \"contextmenu\":\n case \"copy\":\n case \"cut\":\n case \"auxclick\":\n case \"dblclick\":\n case \"dragend\":\n case \"dragstart\":\n case \"drop\":\n case \"focusin\":\n case \"focusout\":\n case \"input\":\n case \"invalid\":\n case \"keydown\":\n case \"keypress\":\n case \"keyup\":\n case \"mousedown\":\n case \"mouseup\":\n case \"paste\":\n case \"pause\":\n case \"play\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointerup\":\n case \"ratechange\":\n case \"reset\":\n case \"resize\":\n case \"seeked\":\n case \"submit\":\n case \"toggle\":\n case \"touchcancel\":\n case \"touchend\":\n case \"touchstart\":\n case \"volumechange\":\n case \"change\":\n case \"selectionchange\":\n case \"textInput\":\n case \"compositionstart\":\n case \"compositionend\":\n case \"compositionupdate\":\n case \"beforeblur\":\n case \"afterblur\":\n case \"beforeinput\":\n case \"blur\":\n case \"fullscreenchange\":\n case \"focus\":\n case \"hashchange\":\n case \"popstate\":\n case \"select\":\n case \"selectstart\":\n return DiscreteEventPriority;\n case \"drag\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"mousemove\":\n case \"mouseout\":\n case \"mouseover\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"scroll\":\n case \"touchmove\":\n case \"wheel\":\n case \"mouseenter\":\n case \"mouseleave\":\n case \"pointerenter\":\n case \"pointerleave\":\n return ContinuousEventPriority;\n case \"message\":\n switch (getCurrentPriorityLevel()) {\n case ImmediatePriority:\n return DiscreteEventPriority;\n case UserBlockingPriority:\n return ContinuousEventPriority;\n case NormalPriority$1:\n case LowPriority:\n return DefaultEventPriority;\n case IdlePriority:\n return IdleEventPriority;\n default:\n return DefaultEventPriority;\n }\n default:\n return DefaultEventPriority;\n }\n }\n function clearIfContinuousEvent(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"focusin\":\n case \"focusout\":\n queuedFocus = null;\n break;\n case \"dragenter\":\n case \"dragleave\":\n queuedDrag = null;\n break;\n case \"mouseover\":\n case \"mouseout\":\n queuedMouse = null;\n break;\n case \"pointerover\":\n case \"pointerout\":\n queuedPointers.delete(nativeEvent.pointerId);\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n queuedPointerCaptures.delete(nativeEvent.pointerId);\n }\n }\n function accumulateOrCreateContinuousQueuedReplayableEvent(\n existingQueuedEvent,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n if (\n null === existingQueuedEvent ||\n existingQueuedEvent.nativeEvent !== nativeEvent\n )\n return (\n (existingQueuedEvent = {\n blockedOn: blockedOn,\n domEventName: domEventName,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetContainers: [targetContainer]\n }),\n null !== blockedOn &&\n ((blockedOn = getInstanceFromNode(blockedOn)),\n null !== blockedOn && attemptContinuousHydration(blockedOn)),\n existingQueuedEvent\n );\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n blockedOn = existingQueuedEvent.targetContainers;\n null !== targetContainer &&\n -1 === blockedOn.indexOf(targetContainer) &&\n blockedOn.push(targetContainer);\n return existingQueuedEvent;\n }\n function queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n switch (domEventName) {\n case \"focusin\":\n return (\n (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedFocus,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"dragenter\":\n return (\n (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedDrag,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"mouseover\":\n return (\n (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedMouse,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"pointerover\":\n var pointerId = nativeEvent.pointerId;\n queuedPointers.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointers.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n );\n return !0;\n case \"gotpointercapture\":\n return (\n (pointerId = nativeEvent.pointerId),\n queuedPointerCaptures.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointerCaptures.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n ),\n !0\n );\n }\n return !1;\n }\n function attemptExplicitHydrationTarget(queuedTarget) {\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n if (null !== targetInst) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n if (null !== nearestMounted)\n if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n if (\n ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n if (13 === nearestMounted.tag) {\n var lane = requestUpdateLane(nearestMounted);\n lane = getBumpedLaneForHydrationByLane(lane);\n var root = enqueueConcurrentRenderForLane(\n nearestMounted,\n lane\n );\n null !== root &&\n scheduleUpdateOnFiber(root, nearestMounted, lane);\n markRetryLaneIfNotHydrated(nearestMounted, lane);\n }\n });\n return;\n }\n } else if (\n 3 === targetInst &&\n nearestMounted.stateNode.current.memoizedState.isDehydrated\n ) {\n queuedTarget.blockedOn =\n 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n return;\n }\n }\n queuedTarget.blockedOn = null;\n }\n function attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (null !== queuedEvent.blockedOn) return !1;\n for (\n var targetContainers = queuedEvent.targetContainers;\n 0 < targetContainers.length;\n\n ) {\n var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n if (null === nextBlockedOn) {\n nextBlockedOn = queuedEvent.nativeEvent;\n var nativeEventClone = new nextBlockedOn.constructor(\n nextBlockedOn.type,\n nextBlockedOn\n ),\n event = nativeEventClone;\n null !== currentReplayingEvent &&\n console.error(\n \"Expected currently replaying event to be null. This error is likely caused by a bug in React. Please file an issue.\"\n );\n currentReplayingEvent = event;\n nextBlockedOn.target.dispatchEvent(nativeEventClone);\n null === currentReplayingEvent &&\n console.error(\n \"Expected currently replaying event to not be null. This error is likely caused by a bug in React. Please file an issue.\"\n );\n currentReplayingEvent = null;\n } else\n return (\n (targetContainers = getInstanceFromNode(nextBlockedOn)),\n null !== targetContainers &&\n attemptContinuousHydration(targetContainers),\n (queuedEvent.blockedOn = nextBlockedOn),\n !1\n );\n targetContainers.shift();\n }\n return !0;\n }\n function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n }\n function replayUnblockedEvents() {\n hasScheduledReplayAttempt = !1;\n null !== queuedFocus &&\n attemptReplayContinuousQueuedEvent(queuedFocus) &&\n (queuedFocus = null);\n null !== queuedDrag &&\n attemptReplayContinuousQueuedEvent(queuedDrag) &&\n (queuedDrag = null);\n null !== queuedMouse &&\n attemptReplayContinuousQueuedEvent(queuedMouse) &&\n (queuedMouse = null);\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n }\n function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n queuedEvent.blockedOn === unblocked &&\n ((queuedEvent.blockedOn = null),\n hasScheduledReplayAttempt ||\n ((hasScheduledReplayAttempt = !0),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n replayUnblockedEvents\n )));\n }\n function scheduleReplayQueueIfNeeded(formReplayingQueue) {\n lastScheduledReplayQueue !== formReplayingQueue &&\n ((lastScheduledReplayQueue = formReplayingQueue),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n function () {\n lastScheduledReplayQueue === formReplayingQueue &&\n (lastScheduledReplayQueue = null);\n for (var i = 0; i < formReplayingQueue.length; i += 3) {\n var form = formReplayingQueue[i],\n submitterOrAction = formReplayingQueue[i + 1],\n formData = formReplayingQueue[i + 2];\n if (\"function\" !== typeof submitterOrAction)\n if (\n null === findInstanceBlockingTarget(submitterOrAction || form)\n )\n continue;\n else break;\n var formInst = getInstanceFromNode(form);\n null !== formInst &&\n (formReplayingQueue.splice(i, 3),\n (i -= 3),\n (form = {\n pending: !0,\n data: formData,\n method: form.method,\n action: submitterOrAction\n }),\n Object.freeze(form),\n startHostTransition(\n formInst,\n form,\n submitterOrAction,\n formData\n ));\n }\n }\n ));\n }\n function retryIfBlockedOn(unblocked) {\n function unblock(queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n }\n null !== queuedFocus &&\n scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n null !== queuedMouse &&\n scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n var queuedTarget = queuedExplicitHydrationTargets[i];\n queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n }\n for (\n ;\n 0 < queuedExplicitHydrationTargets.length &&\n ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n )\n attemptExplicitHydrationTarget(i),\n null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n if (null != i)\n for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n var form = i[queuedTarget],\n submitterOrAction = i[queuedTarget + 1],\n formProps = form[internalPropsKey] || null;\n if (\"function\" === typeof submitterOrAction)\n formProps || scheduleReplayQueueIfNeeded(i);\n else if (formProps) {\n var action = null;\n if (\n submitterOrAction &&\n submitterOrAction.hasAttribute(\"formAction\")\n )\n if (\n ((form = submitterOrAction),\n (formProps = submitterOrAction[internalPropsKey] || null))\n )\n action = formProps.formAction;\n else {\n if (null !== findInstanceBlockingTarget(form)) continue;\n }\n else action = formProps.action;\n \"function\" === typeof action\n ? (i[queuedTarget + 1] = action)\n : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n scheduleReplayQueueIfNeeded(i);\n }\n }\n }\n function ReactDOMRoot(internalRoot) {\n this._internalRoot = internalRoot;\n }\n function ReactDOMHydrationRoot(internalRoot) {\n this._internalRoot = internalRoot;\n }\n function warnIfReactDOMContainerInDEV(container) {\n container[internalContainerInstanceKey] &&\n (container._reactRootContainer\n ? console.error(\n \"You are calling ReactDOMClient.createRoot() on a container that was previously passed to ReactDOM.render(). This is not supported.\"\n )\n : console.error(\n \"You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it.\"\n ));\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var Scheduler = __webpack_require__(/*! scheduler */ \"(pages-dir-browser)/./node_modules/scheduler/index.js\"),\n React = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"),\n ReactDOM = __webpack_require__(/*! react-dom */ \"(pages-dir-browser)/./node_modules/react-dom/index.js\"),\n assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\n Symbol.for(\"react.scope\");\n var REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\n Symbol.for(\"react.legacy_hidden\");\n Symbol.for(\"react.tracing_marker\");\n var REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\n Symbol.for(\"react.view_transition\");\n var MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n NotPending = Object.freeze({\n pending: !1,\n data: null,\n method: null,\n action: null\n }),\n valueStack = [];\n var fiberStack = [];\n var index$jscomp$0 = -1,\n contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null),\n hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now$1 = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null,\n injectedProfilingHooks = null,\n hasLoggedError = !1,\n isDevToolsPresent = \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__,\n clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2,\n nextTransitionLane = 256,\n nextRetryLane = 4194304,\n DiscreteEventPriority = 2,\n ContinuousEventPriority = 8,\n DefaultEventPriority = 32,\n IdleEventPriority = 268435456,\n randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey,\n allNativeEvents = new Set(),\n registrationNameDependencies = {},\n possibleRegistrationNames = {},\n hasReadOnlyValue = {\n button: !0,\n checkbox: !0,\n image: !0,\n hidden: !0,\n radio: !0,\n reset: !0,\n submit: !0\n },\n VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {},\n disabledDepth = 0,\n prevLog,\n prevInfo,\n prevWarn,\n prevError,\n prevGroup,\n prevGroupCollapsed,\n prevGroupEnd;\n disabledLog.__reactDisabledLog = !0;\n var prefix,\n suffix,\n reentry = !1;\n var componentFrameCache = new (\n \"function\" === typeof WeakMap ? WeakMap : Map\n )();\n var current = null,\n isRendering = !1,\n escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g,\n didWarnValueDefaultValue$1 = !1,\n didWarnCheckedDefaultChecked = !1,\n didWarnSelectedSetOnOption = !1,\n didWarnInvalidChild = !1,\n didWarnInvalidInnerHTML = !1;\n var didWarnValueDefaultValue = !1;\n var valuePropNames = [\"value\", \"defaultValue\"],\n didWarnValDefaultVal = !1,\n needsEscaping = /[\"'&<>\\n\\t]|^\\s|\\s$/,\n specialTags =\n \"address applet area article aside base basefont bgsound blockquote body br button caption center col colgroup dd details dir div dl dt embed fieldset figcaption figure footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html iframe img input isindex li link listing main marquee menu menuitem meta nav noembed noframes noscript object ol p param plaintext pre script section select source style summary table tbody td template textarea tfoot th thead title tr track ul wbr xmp\".split(\n \" \"\n ),\n inScopeTags =\n \"applet caption html table td th marquee object template foreignObject desc title\".split(\n \" \"\n ),\n buttonScopeTags = inScopeTags.concat([\"button\"]),\n impliedEndTags = \"dd dt li option optgroup p rp rt\".split(\" \"),\n emptyAncestorInfoDev = {\n current: null,\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null,\n containerTagInScope: null,\n implicitRootScope: !1\n },\n didWarn = {},\n shorthandToLonghand = {\n animation:\n \"animationDelay animationDirection animationDuration animationFillMode animationIterationCount animationName animationPlayState animationTimingFunction\".split(\n \" \"\n ),\n background:\n \"backgroundAttachment backgroundClip backgroundColor backgroundImage backgroundOrigin backgroundPositionX backgroundPositionY backgroundRepeat backgroundSize\".split(\n \" \"\n ),\n backgroundPosition: [\"backgroundPositionX\", \"backgroundPositionY\"],\n border:\n \"borderBottomColor borderBottomStyle borderBottomWidth borderImageOutset borderImageRepeat borderImageSlice borderImageSource borderImageWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderTopColor borderTopStyle borderTopWidth\".split(\n \" \"\n ),\n borderBlockEnd: [\n \"borderBlockEndColor\",\n \"borderBlockEndStyle\",\n \"borderBlockEndWidth\"\n ],\n borderBlockStart: [\n \"borderBlockStartColor\",\n \"borderBlockStartStyle\",\n \"borderBlockStartWidth\"\n ],\n borderBottom: [\n \"borderBottomColor\",\n \"borderBottomStyle\",\n \"borderBottomWidth\"\n ],\n borderColor: [\n \"borderBottomColor\",\n \"borderLeftColor\",\n \"borderRightColor\",\n \"borderTopColor\"\n ],\n borderImage: [\n \"borderImageOutset\",\n \"borderImageRepeat\",\n \"borderImageSlice\",\n \"borderImageSource\",\n \"borderImageWidth\"\n ],\n borderInlineEnd: [\n \"borderInlineEndColor\",\n \"borderInlineEndStyle\",\n \"borderInlineEndWidth\"\n ],\n borderInlineStart: [\n \"borderInlineStartColor\",\n \"borderInlineStartStyle\",\n \"borderInlineStartWidth\"\n ],\n borderLeft: [\"borderLeftColor\", \"borderLeftStyle\", \"borderLeftWidth\"],\n borderRadius: [\n \"borderBottomLeftRadius\",\n \"borderBottomRightRadius\",\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\"\n ],\n borderRight: [\n \"borderRightColor\",\n \"borderRightStyle\",\n \"borderRightWidth\"\n ],\n borderStyle: [\n \"borderBottomStyle\",\n \"borderLeftStyle\",\n \"borderRightStyle\",\n \"borderTopStyle\"\n ],\n borderTop: [\"borderTopColor\", \"borderTopStyle\", \"borderTopWidth\"],\n borderWidth: [\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"borderRightWidth\",\n \"borderTopWidth\"\n ],\n columnRule: [\"columnRuleColor\", \"columnRuleStyle\", \"columnRuleWidth\"],\n columns: [\"columnCount\", \"columnWidth\"],\n flex: [\"flexBasis\", \"flexGrow\", \"flexShrink\"],\n flexFlow: [\"flexDirection\", \"flexWrap\"],\n font: \"fontFamily fontFeatureSettings fontKerning fontLanguageOverride fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition fontWeight lineHeight\".split(\n \" \"\n ),\n fontVariant:\n \"fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition\".split(\n \" \"\n ),\n gap: [\"columnGap\", \"rowGap\"],\n grid: \"gridAutoColumns gridAutoFlow gridAutoRows gridTemplateAreas gridTemplateColumns gridTemplateRows\".split(\n \" \"\n ),\n gridArea: [\n \"gridColumnEnd\",\n \"gridColumnStart\",\n \"gridRowEnd\",\n \"gridRowStart\"\n ],\n gridColumn: [\"gridColumnEnd\", \"gridColumnStart\"],\n gridColumnGap: [\"columnGap\"],\n gridGap: [\"columnGap\", \"rowGap\"],\n gridRow: [\"gridRowEnd\", \"gridRowStart\"],\n gridRowGap: [\"rowGap\"],\n gridTemplate: [\n \"gridTemplateAreas\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\"\n ],\n listStyle: [\"listStyleImage\", \"listStylePosition\", \"listStyleType\"],\n margin: [\"marginBottom\", \"marginLeft\", \"marginRight\", \"marginTop\"],\n marker: [\"markerEnd\", \"markerMid\", \"markerStart\"],\n mask: \"maskClip maskComposite maskImage maskMode maskOrigin maskPositionX maskPositionY maskRepeat maskSize\".split(\n \" \"\n ),\n maskPosition: [\"maskPositionX\", \"maskPositionY\"],\n outline: [\"outlineColor\", \"outlineStyle\", \"outlineWidth\"],\n overflow: [\"overflowX\", \"overflowY\"],\n padding: [\"paddingBottom\", \"paddingLeft\", \"paddingRight\", \"paddingTop\"],\n placeContent: [\"alignContent\", \"justifyContent\"],\n placeItems: [\"alignItems\", \"justifyItems\"],\n placeSelf: [\"alignSelf\", \"justifySelf\"],\n textDecoration: [\n \"textDecorationColor\",\n \"textDecorationLine\",\n \"textDecorationStyle\"\n ],\n textEmphasis: [\"textEmphasisColor\", \"textEmphasisStyle\"],\n transition: [\n \"transitionDelay\",\n \"transitionDuration\",\n \"transitionProperty\",\n \"transitionTimingFunction\"\n ],\n wordWrap: [\"overflowWrap\"]\n },\n uppercasePattern = /([A-Z])/g,\n msPattern$1 = /^ms-/,\n badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,\n msPattern = /^-ms-/,\n hyphenPattern = /-(.)/g,\n badStyleValueWithSemicolonPattern = /;\\s*$/,\n warnedStyleNames = {},\n warnedStyleValues = {},\n warnedForNaNValue = !1,\n warnedForInfinityValue = !1,\n unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n ),\n MATH_NAMESPACE = \"http://www.w3.org/1998/Math/MathML\",\n SVG_NAMESPACE = \"http://www.w3.org/2000/svg\",\n aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n possibleStandardNames = {\n accept: \"accept\",\n acceptcharset: \"acceptCharset\",\n \"accept-charset\": \"acceptCharset\",\n accesskey: \"accessKey\",\n action: \"action\",\n allowfullscreen: \"allowFullScreen\",\n alt: \"alt\",\n as: \"as\",\n async: \"async\",\n autocapitalize: \"autoCapitalize\",\n autocomplete: \"autoComplete\",\n autocorrect: \"autoCorrect\",\n autofocus: \"autoFocus\",\n autoplay: \"autoPlay\",\n autosave: \"autoSave\",\n capture: \"capture\",\n cellpadding: \"cellPadding\",\n cellspacing: \"cellSpacing\",\n challenge: \"challenge\",\n charset: \"charSet\",\n checked: \"checked\",\n children: \"children\",\n cite: \"cite\",\n class: \"className\",\n classid: \"classID\",\n classname: \"className\",\n cols: \"cols\",\n colspan: \"colSpan\",\n content: \"content\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n controls: \"controls\",\n controlslist: \"controlsList\",\n coords: \"coords\",\n crossorigin: \"crossOrigin\",\n dangerouslysetinnerhtml: \"dangerouslySetInnerHTML\",\n data: \"data\",\n datetime: \"dateTime\",\n default: \"default\",\n defaultchecked: \"defaultChecked\",\n defaultvalue: \"defaultValue\",\n defer: \"defer\",\n dir: \"dir\",\n disabled: \"disabled\",\n disablepictureinpicture: \"disablePictureInPicture\",\n disableremoteplayback: \"disableRemotePlayback\",\n download: \"download\",\n draggable: \"draggable\",\n enctype: \"encType\",\n enterkeyhint: \"enterKeyHint\",\n fetchpriority: \"fetchPriority\",\n for: \"htmlFor\",\n form: \"form\",\n formmethod: \"formMethod\",\n formaction: \"formAction\",\n formenctype: \"formEncType\",\n formnovalidate: \"formNoValidate\",\n formtarget: \"formTarget\",\n frameborder: \"frameBorder\",\n headers: \"headers\",\n height: \"height\",\n hidden: \"hidden\",\n high: \"high\",\n href: \"href\",\n hreflang: \"hrefLang\",\n htmlfor: \"htmlFor\",\n httpequiv: \"httpEquiv\",\n \"http-equiv\": \"httpEquiv\",\n icon: \"icon\",\n id: \"id\",\n imagesizes: \"imageSizes\",\n imagesrcset: \"imageSrcSet\",\n inert: \"inert\",\n innerhtml: \"innerHTML\",\n inputmode: \"inputMode\",\n integrity: \"integrity\",\n is: \"is\",\n itemid: \"itemID\",\n itemprop: \"itemProp\",\n itemref: \"itemRef\",\n itemscope: \"itemScope\",\n itemtype: \"itemType\",\n keyparams: \"keyParams\",\n keytype: \"keyType\",\n kind: \"kind\",\n label: \"label\",\n lang: \"lang\",\n list: \"list\",\n loop: \"loop\",\n low: \"low\",\n manifest: \"manifest\",\n marginwidth: \"marginWidth\",\n marginheight: \"marginHeight\",\n max: \"max\",\n maxlength: \"maxLength\",\n media: \"media\",\n mediagroup: \"mediaGroup\",\n method: \"method\",\n min: \"min\",\n minlength: \"minLength\",\n multiple: \"multiple\",\n muted: \"muted\",\n name: \"name\",\n nomodule: \"noModule\",\n nonce: \"nonce\",\n novalidate: \"noValidate\",\n open: \"open\",\n optimum: \"optimum\",\n pattern: \"pattern\",\n placeholder: \"placeholder\",\n playsinline: \"playsInline\",\n poster: \"poster\",\n preload: \"preload\",\n profile: \"profile\",\n radiogroup: \"radioGroup\",\n readonly: \"readOnly\",\n referrerpolicy: \"referrerPolicy\",\n rel: \"rel\",\n required: \"required\",\n reversed: \"reversed\",\n role: \"role\",\n rows: \"rows\",\n rowspan: \"rowSpan\",\n sandbox: \"sandbox\",\n scope: \"scope\",\n scoped: \"scoped\",\n scrolling: \"scrolling\",\n seamless: \"seamless\",\n selected: \"selected\",\n shape: \"shape\",\n size: \"size\",\n sizes: \"sizes\",\n span: \"span\",\n spellcheck: \"spellCheck\",\n src: \"src\",\n srcdoc: \"srcDoc\",\n srclang: \"srcLang\",\n srcset: \"srcSet\",\n start: \"start\",\n step: \"step\",\n style: \"style\",\n summary: \"summary\",\n tabindex: \"tabIndex\",\n target: \"target\",\n title: \"title\",\n type: \"type\",\n usemap: \"useMap\",\n value: \"value\",\n width: \"width\",\n wmode: \"wmode\",\n wrap: \"wrap\",\n about: \"about\",\n accentheight: \"accentHeight\",\n \"accent-height\": \"accentHeight\",\n accumulate: \"accumulate\",\n additive: \"additive\",\n alignmentbaseline: \"alignmentBaseline\",\n \"alignment-baseline\": \"alignmentBaseline\",\n allowreorder: \"allowReorder\",\n alphabetic: \"alphabetic\",\n amplitude: \"amplitude\",\n arabicform: \"arabicForm\",\n \"arabic-form\": \"arabicForm\",\n ascent: \"ascent\",\n attributename: \"attributeName\",\n attributetype: \"attributeType\",\n autoreverse: \"autoReverse\",\n azimuth: \"azimuth\",\n basefrequency: \"baseFrequency\",\n baselineshift: \"baselineShift\",\n \"baseline-shift\": \"baselineShift\",\n baseprofile: \"baseProfile\",\n bbox: \"bbox\",\n begin: \"begin\",\n bias: \"bias\",\n by: \"by\",\n calcmode: \"calcMode\",\n capheight: \"capHeight\",\n \"cap-height\": \"capHeight\",\n clip: \"clip\",\n clippath: \"clipPath\",\n \"clip-path\": \"clipPath\",\n clippathunits: \"clipPathUnits\",\n cliprule: \"clipRule\",\n \"clip-rule\": \"clipRule\",\n color: \"color\",\n colorinterpolation: \"colorInterpolation\",\n \"color-interpolation\": \"colorInterpolation\",\n colorinterpolationfilters: \"colorInterpolationFilters\",\n \"color-interpolation-filters\": \"colorInterpolationFilters\",\n colorprofile: \"colorProfile\",\n \"color-profile\": \"colorProfile\",\n colorrendering: \"colorRendering\",\n \"color-rendering\": \"colorRendering\",\n contentscripttype: \"contentScriptType\",\n contentstyletype: \"contentStyleType\",\n cursor: \"cursor\",\n cx: \"cx\",\n cy: \"cy\",\n d: \"d\",\n datatype: \"datatype\",\n decelerate: \"decelerate\",\n descent: \"descent\",\n diffuseconstant: \"diffuseConstant\",\n direction: \"direction\",\n display: \"display\",\n divisor: \"divisor\",\n dominantbaseline: \"dominantBaseline\",\n \"dominant-baseline\": \"dominantBaseline\",\n dur: \"dur\",\n dx: \"dx\",\n dy: \"dy\",\n edgemode: \"edgeMode\",\n elevation: \"elevation\",\n enablebackground: \"enableBackground\",\n \"enable-background\": \"enableBackground\",\n end: \"end\",\n exponent: \"exponent\",\n externalresourcesrequired: \"externalResourcesRequired\",\n fill: \"fill\",\n fillopacity: \"fillOpacity\",\n \"fill-opacity\": \"fillOpacity\",\n fillrule: \"fillRule\",\n \"fill-rule\": \"fillRule\",\n filter: \"filter\",\n filterres: \"filterRes\",\n filterunits: \"filterUnits\",\n floodopacity: \"floodOpacity\",\n \"flood-opacity\": \"floodOpacity\",\n floodcolor: \"floodColor\",\n \"flood-color\": \"floodColor\",\n focusable: \"focusable\",\n fontfamily: \"fontFamily\",\n \"font-family\": \"fontFamily\",\n fontsize: \"fontSize\",\n \"font-size\": \"fontSize\",\n fontsizeadjust: \"fontSizeAdjust\",\n \"font-size-adjust\": \"fontSizeAdjust\",\n fontstretch: \"fontStretch\",\n \"font-stretch\": \"fontStretch\",\n fontstyle: \"fontStyle\",\n \"font-style\": \"fontStyle\",\n fontvariant: \"fontVariant\",\n \"font-variant\": \"fontVariant\",\n fontweight: \"fontWeight\",\n \"font-weight\": \"fontWeight\",\n format: \"format\",\n from: \"from\",\n fx: \"fx\",\n fy: \"fy\",\n g1: \"g1\",\n g2: \"g2\",\n glyphname: \"glyphName\",\n \"glyph-name\": \"glyphName\",\n glyphorientationhorizontal: \"glyphOrientationHorizontal\",\n \"glyph-orientation-horizontal\": \"glyphOrientationHorizontal\",\n glyphorientationvertical: \"glyphOrientationVertical\",\n \"glyph-orientation-vertical\": \"glyphOrientationVertical\",\n glyphref: \"glyphRef\",\n gradienttransform: \"gradientTransform\",\n gradientunits: \"gradientUnits\",\n hanging: \"hanging\",\n horizadvx: \"horizAdvX\",\n \"horiz-adv-x\": \"horizAdvX\",\n horizoriginx: \"horizOriginX\",\n \"horiz-origin-x\": \"horizOriginX\",\n ideographic: \"ideographic\",\n imagerendering: \"imageRendering\",\n \"image-rendering\": \"imageRendering\",\n in2: \"in2\",\n in: \"in\",\n inlist: \"inlist\",\n intercept: \"intercept\",\n k1: \"k1\",\n k2: \"k2\",\n k3: \"k3\",\n k4: \"k4\",\n k: \"k\",\n kernelmatrix: \"kernelMatrix\",\n kernelunitlength: \"kernelUnitLength\",\n kerning: \"kerning\",\n keypoints: \"keyPoints\",\n keysplines: \"keySplines\",\n keytimes: \"keyTimes\",\n lengthadjust: \"lengthAdjust\",\n letterspacing: \"letterSpacing\",\n \"letter-spacing\": \"letterSpacing\",\n lightingcolor: \"lightingColor\",\n \"lighting-color\": \"lightingColor\",\n limitingconeangle: \"limitingConeAngle\",\n local: \"local\",\n markerend: \"markerEnd\",\n \"marker-end\": \"markerEnd\",\n markerheight: \"markerHeight\",\n markermid: \"markerMid\",\n \"marker-mid\": \"markerMid\",\n markerstart: \"markerStart\",\n \"marker-start\": \"markerStart\",\n markerunits: \"markerUnits\",\n markerwidth: \"markerWidth\",\n mask: \"mask\",\n maskcontentunits: \"maskContentUnits\",\n maskunits: \"maskUnits\",\n mathematical: \"mathematical\",\n mode: \"mode\",\n numoctaves: \"numOctaves\",\n offset: \"offset\",\n opacity: \"opacity\",\n operator: \"operator\",\n order: \"order\",\n orient: \"orient\",\n orientation: \"orientation\",\n origin: \"origin\",\n overflow: \"overflow\",\n overlineposition: \"overlinePosition\",\n \"overline-position\": \"overlinePosition\",\n overlinethickness: \"overlineThickness\",\n \"overline-thickness\": \"overlineThickness\",\n paintorder: \"paintOrder\",\n \"paint-order\": \"paintOrder\",\n panose1: \"panose1\",\n \"panose-1\": \"panose1\",\n pathlength: \"pathLength\",\n patterncontentunits: \"patternContentUnits\",\n patterntransform: \"patternTransform\",\n patternunits: \"patternUnits\",\n pointerevents: \"pointerEvents\",\n \"pointer-events\": \"pointerEvents\",\n points: \"points\",\n pointsatx: \"pointsAtX\",\n pointsaty: \"pointsAtY\",\n pointsatz: \"pointsAtZ\",\n popover: \"popover\",\n popovertarget: \"popoverTarget\",\n popovertargetaction: \"popoverTargetAction\",\n prefix: \"prefix\",\n preservealpha: \"preserveAlpha\",\n preserveaspectratio: \"preserveAspectRatio\",\n primitiveunits: \"primitiveUnits\",\n property: \"property\",\n r: \"r\",\n radius: \"radius\",\n refx: \"refX\",\n refy: \"refY\",\n renderingintent: \"renderingIntent\",\n \"rendering-intent\": \"renderingIntent\",\n repeatcount: \"repeatCount\",\n repeatdur: \"repeatDur\",\n requiredextensions: \"requiredExtensions\",\n requiredfeatures: \"requiredFeatures\",\n resource: \"resource\",\n restart: \"restart\",\n result: \"result\",\n results: \"results\",\n rotate: \"rotate\",\n rx: \"rx\",\n ry: \"ry\",\n scale: \"scale\",\n security: \"security\",\n seed: \"seed\",\n shaperendering: \"shapeRendering\",\n \"shape-rendering\": \"shapeRendering\",\n slope: \"slope\",\n spacing: \"spacing\",\n specularconstant: \"specularConstant\",\n specularexponent: \"specularExponent\",\n speed: \"speed\",\n spreadmethod: \"spreadMethod\",\n startoffset: \"startOffset\",\n stddeviation: \"stdDeviation\",\n stemh: \"stemh\",\n stemv: \"stemv\",\n stitchtiles: \"stitchTiles\",\n stopcolor: \"stopColor\",\n \"stop-color\": \"stopColor\",\n stopopacity: \"stopOpacity\",\n \"stop-opacity\": \"stopOpacity\",\n strikethroughposition: \"strikethroughPosition\",\n \"strikethrough-position\": \"strikethroughPosition\",\n strikethroughthickness: \"strikethroughThickness\",\n \"strikethrough-thickness\": \"strikethroughThickness\",\n string: \"string\",\n stroke: \"stroke\",\n strokedasharray: \"strokeDasharray\",\n \"stroke-dasharray\": \"strokeDasharray\",\n strokedashoffset: \"strokeDashoffset\",\n \"stroke-dashoffset\": \"strokeDashoffset\",\n strokelinecap: \"strokeLinecap\",\n \"stroke-linecap\": \"strokeLinecap\",\n strokelinejoin: \"strokeLinejoin\",\n \"stroke-linejoin\": \"strokeLinejoin\",\n strokemiterlimit: \"strokeMiterlimit\",\n \"stroke-miterlimit\": \"strokeMiterlimit\",\n strokewidth: \"strokeWidth\",\n \"stroke-width\": \"strokeWidth\",\n strokeopacity: \"strokeOpacity\",\n \"stroke-opacity\": \"strokeOpacity\",\n suppresscontenteditablewarning: \"suppressContentEditableWarning\",\n suppresshydrationwarning: \"suppressHydrationWarning\",\n surfacescale: \"surfaceScale\",\n systemlanguage: \"systemLanguage\",\n tablevalues: \"tableValues\",\n targetx: \"targetX\",\n targety: \"targetY\",\n textanchor: \"textAnchor\",\n \"text-anchor\": \"textAnchor\",\n textdecoration: \"textDecoration\",\n \"text-decoration\": \"textDecoration\",\n textlength: \"textLength\",\n textrendering: \"textRendering\",\n \"text-rendering\": \"textRendering\",\n to: \"to\",\n transform: \"transform\",\n transformorigin: \"transformOrigin\",\n \"transform-origin\": \"transformOrigin\",\n typeof: \"typeof\",\n u1: \"u1\",\n u2: \"u2\",\n underlineposition: \"underlinePosition\",\n \"underline-position\": \"underlinePosition\",\n underlinethickness: \"underlineThickness\",\n \"underline-thickness\": \"underlineThickness\",\n unicode: \"unicode\",\n unicodebidi: \"unicodeBidi\",\n \"unicode-bidi\": \"unicodeBidi\",\n unicoderange: \"unicodeRange\",\n \"unicode-range\": \"unicodeRange\",\n unitsperem: \"unitsPerEm\",\n \"units-per-em\": \"unitsPerEm\",\n unselectable: \"unselectable\",\n valphabetic: \"vAlphabetic\",\n \"v-alphabetic\": \"vAlphabetic\",\n values: \"values\",\n vectoreffect: \"vectorEffect\",\n \"vector-effect\": \"vectorEffect\",\n version: \"version\",\n vertadvy: \"vertAdvY\",\n \"vert-adv-y\": \"vertAdvY\",\n vertoriginx: \"vertOriginX\",\n \"vert-origin-x\": \"vertOriginX\",\n vertoriginy: \"vertOriginY\",\n \"vert-origin-y\": \"vertOriginY\",\n vhanging: \"vHanging\",\n \"v-hanging\": \"vHanging\",\n videographic: \"vIdeographic\",\n \"v-ideographic\": \"vIdeographic\",\n viewbox: \"viewBox\",\n viewtarget: \"viewTarget\",\n visibility: \"visibility\",\n vmathematical: \"vMathematical\",\n \"v-mathematical\": \"vMathematical\",\n vocab: \"vocab\",\n widths: \"widths\",\n wordspacing: \"wordSpacing\",\n \"word-spacing\": \"wordSpacing\",\n writingmode: \"writingMode\",\n \"writing-mode\": \"writingMode\",\n x1: \"x1\",\n x2: \"x2\",\n x: \"x\",\n xchannelselector: \"xChannelSelector\",\n xheight: \"xHeight\",\n \"x-height\": \"xHeight\",\n xlinkactuate: \"xlinkActuate\",\n \"xlink:actuate\": \"xlinkActuate\",\n xlinkarcrole: \"xlinkArcrole\",\n \"xlink:arcrole\": \"xlinkArcrole\",\n xlinkhref: \"xlinkHref\",\n \"xlink:href\": \"xlinkHref\",\n xlinkrole: \"xlinkRole\",\n \"xlink:role\": \"xlinkRole\",\n xlinkshow: \"xlinkShow\",\n \"xlink:show\": \"xlinkShow\",\n xlinktitle: \"xlinkTitle\",\n \"xlink:title\": \"xlinkTitle\",\n xlinktype: \"xlinkType\",\n \"xlink:type\": \"xlinkType\",\n xmlbase: \"xmlBase\",\n \"xml:base\": \"xmlBase\",\n xmllang: \"xmlLang\",\n \"xml:lang\": \"xmlLang\",\n xmlns: \"xmlns\",\n \"xml:space\": \"xmlSpace\",\n xmlnsxlink: \"xmlnsXlink\",\n \"xmlns:xlink\": \"xmlnsXlink\",\n xmlspace: \"xmlSpace\",\n y1: \"y1\",\n y2: \"y2\",\n y: \"y\",\n ychannelselector: \"yChannelSelector\",\n z: \"z\",\n zoomandpan: \"zoomAndPan\"\n },\n ariaProperties = {\n \"aria-current\": 0,\n \"aria-description\": 0,\n \"aria-details\": 0,\n \"aria-disabled\": 0,\n \"aria-hidden\": 0,\n \"aria-invalid\": 0,\n \"aria-keyshortcuts\": 0,\n \"aria-label\": 0,\n \"aria-roledescription\": 0,\n \"aria-autocomplete\": 0,\n \"aria-checked\": 0,\n \"aria-expanded\": 0,\n \"aria-haspopup\": 0,\n \"aria-level\": 0,\n \"aria-modal\": 0,\n \"aria-multiline\": 0,\n \"aria-multiselectable\": 0,\n \"aria-orientation\": 0,\n \"aria-placeholder\": 0,\n \"aria-pressed\": 0,\n \"aria-readonly\": 0,\n \"aria-required\": 0,\n \"aria-selected\": 0,\n \"aria-sort\": 0,\n \"aria-valuemax\": 0,\n \"aria-valuemin\": 0,\n \"aria-valuenow\": 0,\n \"aria-valuetext\": 0,\n \"aria-atomic\": 0,\n \"aria-busy\": 0,\n \"aria-live\": 0,\n \"aria-relevant\": 0,\n \"aria-dropeffect\": 0,\n \"aria-grabbed\": 0,\n \"aria-activedescendant\": 0,\n \"aria-colcount\": 0,\n \"aria-colindex\": 0,\n \"aria-colspan\": 0,\n \"aria-controls\": 0,\n \"aria-describedby\": 0,\n \"aria-errormessage\": 0,\n \"aria-flowto\": 0,\n \"aria-labelledby\": 0,\n \"aria-owns\": 0,\n \"aria-posinset\": 0,\n \"aria-rowcount\": 0,\n \"aria-rowindex\": 0,\n \"aria-rowspan\": 0,\n \"aria-setsize\": 0\n },\n warnedProperties$1 = {},\n rARIA$1 = RegExp(\n \"^(aria)-[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n rARIACamel$1 = RegExp(\n \"^(aria)[A-Z][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n didWarnValueNull = !1,\n warnedProperties = {},\n EVENT_NAME_REGEX = /^on./,\n INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,\n rARIA = RegExp(\n \"^(aria)-[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n rARIACamel = RegExp(\n \"^(aria)[A-Z][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i,\n currentReplayingEvent = null,\n restoreTarget = null,\n restoreQueue = null,\n isInsideEventHandler = !1,\n canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\n if (canUseDOM)\n try {\n var options$jscomp$0 = {};\n Object.defineProperty(options$jscomp$0, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options$jscomp$0, options$jscomp$0);\n window.removeEventListener(\"test\", options$jscomp$0, options$jscomp$0);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\n var root = null,\n startText = null,\n fallbackText = null,\n EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(\n CompositionEventInterface\n ),\n SyntheticInputEvent = SyntheticCompositionEvent,\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n },\n KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n START_KEYCODE = 229,\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\n canUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\n var canUseTextInputEvent =\n canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CODE = 32,\n SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE),\n hasSpaceKeypress = !1,\n isComposing = !1,\n supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n },\n activeElement$1 = null,\n activeElementInst$1 = null,\n isInputEventSupported = !1;\n canUseDOM &&\n (isInputEventSupported =\n isEventSupported(\"input\") &&\n (!document.documentMode || 9 < document.documentMode));\n var objectIs = \"function\" === typeof Object.is ? Object.is : is,\n skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1,\n vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\n canUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\n var ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n \" \"\n );\n simpleEventPluginEvents.push(\"scrollEnd\");\n var CapturedStacks = new WeakMap(),\n OffscreenVisible = 1,\n OffscreenPassiveEffectsConnected = 2,\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0,\n emptyContextObject = {};\n Object.freeze(emptyContextObject);\n var resolveFamily = null,\n failedBoundaries = null,\n NoMode = 0,\n ConcurrentMode = 1,\n ProfileMode = 2,\n StrictLegacyMode = 8,\n StrictEffectsMode = 16,\n NoStrictPassiveEffectsMode = 64;\n var hasBadMapPolyfill = !1;\n try {\n var nonExtensibleObject = Object.preventExtensions({});\n new Map([[nonExtensibleObject, null]]);\n new Set([nonExtensibleObject]);\n } catch (e$3) {\n hasBadMapPolyfill = !0;\n }\n var forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\",\n hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n didSuspendOrErrorDEV = !1,\n hydrationDiffRootDEV = null,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(\n \"Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"\n ),\n lastResetTime = 0;\n if (\n \"object\" === typeof performance &&\n \"function\" === typeof performance.now\n ) {\n var localPerformance = performance;\n var getCurrentTime = function () {\n return localPerformance.now();\n };\n } else {\n var localDate = Date;\n getCurrentTime = function () {\n return localDate.now();\n };\n }\n var valueCursor = createCursor(null);\n var rendererCursorDEV = createCursor(null);\n var rendererSigil = {};\n var currentlyRenderingFiber$1 = null,\n lastContextDependency = null,\n isDisallowedContextReadInDEV = !1,\n AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0,\n _currentRenderer: null,\n _currentRenderer2: null\n },\n now = Scheduler.unstable_now,\n renderStartTime = -0,\n commitStartTime = -0,\n profilerStartTime = -1.1,\n profilerEffectDuration = -0,\n currentUpdateIsNested = !1,\n nestedUpdateScheduled = !1,\n currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null,\n prevOnStartTransitionFinish = ReactSharedInternals.S;\n ReactSharedInternals.S = function (transition, returnValue) {\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n };\n var resumedCache = createCursor(null),\n ReactStrictModeWarnings = {\n recordUnsafeLifecycleWarnings: function () {},\n flushPendingUnsafeLifecycleWarnings: function () {},\n recordLegacyContextWarning: function () {},\n flushLegacyContextWarning: function () {},\n discardPendingWarnings: function () {}\n },\n pendingComponentWillMountWarnings = [],\n pendingUNSAFE_ComponentWillMountWarnings = [],\n pendingComponentWillReceivePropsWarnings = [],\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [],\n pendingComponentWillUpdateWarnings = [],\n pendingUNSAFE_ComponentWillUpdateWarnings = [],\n didWarnAboutUnsafeLifecycles = new Set();\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (\n fiber,\n instance\n ) {\n didWarnAboutUnsafeLifecycles.has(fiber.type) ||\n (\"function\" === typeof instance.componentWillMount &&\n !0 !== instance.componentWillMount.__suppressDeprecationWarning &&\n pendingComponentWillMountWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillMount &&\n pendingUNSAFE_ComponentWillMountWarnings.push(fiber),\n \"function\" === typeof instance.componentWillReceiveProps &&\n !0 !==\n instance.componentWillReceiveProps.__suppressDeprecationWarning &&\n pendingComponentWillReceivePropsWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber),\n \"function\" === typeof instance.componentWillUpdate &&\n !0 !== instance.componentWillUpdate.__suppressDeprecationWarning &&\n pendingComponentWillUpdateWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillUpdate &&\n pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber));\n };\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n var componentWillMountUniqueNames = new Set();\n 0 < pendingComponentWillMountWarnings.length &&\n (pendingComponentWillMountWarnings.forEach(function (fiber) {\n componentWillMountUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillMountWarnings = []));\n var UNSAFE_componentWillMountUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillMountWarnings.length &&\n (pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n UNSAFE_componentWillMountUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingUNSAFE_ComponentWillMountWarnings = []));\n var componentWillReceivePropsUniqueNames = new Set();\n 0 < pendingComponentWillReceivePropsWarnings.length &&\n (pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n componentWillReceivePropsUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillReceivePropsWarnings = []));\n var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillReceivePropsWarnings.length &&\n (pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(\n function (fiber) {\n UNSAFE_componentWillReceivePropsUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }\n ),\n (pendingUNSAFE_ComponentWillReceivePropsWarnings = []));\n var componentWillUpdateUniqueNames = new Set();\n 0 < pendingComponentWillUpdateWarnings.length &&\n (pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n componentWillUpdateUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillUpdateWarnings = []));\n var UNSAFE_componentWillUpdateUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillUpdateWarnings.length &&\n (pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n UNSAFE_componentWillUpdateUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingUNSAFE_ComponentWillUpdateWarnings = []));\n if (0 < UNSAFE_componentWillMountUniqueNames.size) {\n var sortedNames = setToSortedString(\n UNSAFE_componentWillMountUniqueNames\n );\n console.error(\n \"Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n\\nPlease update the following components: %s\",\n sortedNames\n );\n }\n 0 < UNSAFE_componentWillReceivePropsUniqueNames.size &&\n ((sortedNames = setToSortedString(\n UNSAFE_componentWillReceivePropsUniqueNames\n )),\n console.error(\n \"Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < UNSAFE_componentWillUpdateUniqueNames.size &&\n ((sortedNames = setToSortedString(\n UNSAFE_componentWillUpdateUniqueNames\n )),\n console.error(\n \"Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillMountUniqueNames.size &&\n ((sortedNames = setToSortedString(componentWillMountUniqueNames)),\n console.warn(\n \"componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillReceivePropsUniqueNames.size &&\n ((sortedNames = setToSortedString(\n componentWillReceivePropsUniqueNames\n )),\n console.warn(\n \"componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\\n* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillUpdateUniqueNames.size &&\n ((sortedNames = setToSortedString(componentWillUpdateUniqueNames)),\n console.warn(\n \"componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n };\n var pendingLegacyContextWarning = new Map(),\n didWarnAboutLegacyContext = new Set();\n ReactStrictModeWarnings.recordLegacyContextWarning = function (\n fiber,\n instance\n ) {\n var strictRoot = null;\n for (var node = fiber; null !== node; )\n node.mode & StrictLegacyMode && (strictRoot = node),\n (node = node.return);\n null === strictRoot\n ? console.error(\n \"Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue.\"\n )\n : !didWarnAboutLegacyContext.has(fiber.type) &&\n ((node = pendingLegacyContextWarning.get(strictRoot)),\n null != fiber.type.contextTypes ||\n null != fiber.type.childContextTypes ||\n (null !== instance &&\n \"function\" === typeof instance.getChildContext)) &&\n (void 0 === node &&\n ((node = []), pendingLegacyContextWarning.set(strictRoot, node)),\n node.push(fiber));\n };\n ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n pendingLegacyContextWarning.forEach(function (fiberArray) {\n if (0 !== fiberArray.length) {\n var firstFiber = fiberArray[0],\n uniqueNames = new Set();\n fiberArray.forEach(function (fiber) {\n uniqueNames.add(getComponentNameFromFiber(fiber) || \"Component\");\n didWarnAboutLegacyContext.add(fiber.type);\n });\n var sortedNames = setToSortedString(uniqueNames);\n runWithFiberInDEV(firstFiber, function () {\n console.error(\n \"Legacy context API has been detected within a strict-mode tree.\\n\\nThe old API will be supported in all 16.x releases, but applications using it should migrate to the new version.\\n\\nPlease update the following components: %s\\n\\nLearn more about this warning here: https://react.dev/link/legacy-context\",\n sortedNames\n );\n });\n }\n });\n };\n ReactStrictModeWarnings.discardPendingWarnings = function () {\n pendingComponentWillMountWarnings = [];\n pendingUNSAFE_ComponentWillMountWarnings = [];\n pendingComponentWillReceivePropsWarnings = [];\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n pendingComponentWillUpdateWarnings = [];\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n pendingLegacyContextWarning = new Map();\n };\n var SuspenseException = Error(\n \"Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`.\"\n ),\n SuspenseyCommitException = Error(\n \"Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"\n ),\n SuspenseActionException = Error(\n \"Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary.\"\n ),\n noopSuspenseyCommitThenable = {\n then: function () {\n console.error(\n 'Internal React error: A listener was unexpectedly attached to a \"noop\" thenable. This is a bug in React. Please file an issue.'\n );\n }\n },\n suspendedThenable = null,\n needsToResetSuspendedThenableDEV = !1,\n NoFlags = 0,\n HasEffect = 1,\n Insertion = 2,\n Layout = 4,\n Passive = 8,\n UpdateState = 0,\n ReplaceState = 1,\n ForceUpdate = 2,\n CaptureUpdate = 3,\n hasForceUpdate = !1;\n var didWarnUpdateInsideUpdate = !1;\n var currentlyProcessingQueue = null;\n var didReadFromEntangledAsyncAction = !1,\n currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0),\n didWarnUncachedGetSnapshot;\n var didWarnAboutMismatchedHooksForComponent = new Set();\n var didWarnAboutUseWrappedInTryCatch = new Set();\n var didWarnAboutAsyncClientComponent = new Set();\n var didWarnAboutUseFormState = new Set();\n var renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter$1 = 0,\n thenableState$1 = null,\n globalClientIdCounter = 0,\n RE_RENDER_LIMIT = 25,\n currentHookNameInDev = null,\n hookTypesDev = null,\n hookTypesUpdateIndexDev = -1,\n ignorePreviousDependencies = !1,\n ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError\n },\n HooksDispatcherOnMountInDEV = null,\n HooksDispatcherOnMountWithHookTypesInDEV = null,\n HooksDispatcherOnUpdateInDEV = null,\n HooksDispatcherOnRerenderInDEV = null,\n InvalidNestedHooksDispatcherOnMountInDEV = null,\n InvalidNestedHooksDispatcherOnUpdateInDEV = null,\n InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n HooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(createDeps);\n return mountEffect(create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n mountHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n mountHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n mountHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n mountHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n mountHookTypesDev();\n return mountId();\n },\n useFormState: function (action, initialState) {\n currentHookNameInDev = \"useFormState\";\n mountHookTypesDev();\n warnOnUseFormStateInDev();\n return mountActionState(action, initialState);\n },\n useActionState: function (action, initialState) {\n currentHookNameInDev = \"useActionState\";\n mountHookTypesDev();\n return mountActionState(action, initialState);\n },\n useOptimistic: function (passthrough) {\n currentHookNameInDev = \"useOptimistic\";\n mountHookTypesDev();\n return mountOptimistic(passthrough);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n mountHookTypesDev();\n return mountRefresh();\n }\n };\n HooksDispatcherOnMountWithHookTypesInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n return mountEffect(create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return mountId();\n },\n useActionState: function (action, initialState) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return mountActionState(action, initialState);\n },\n useFormState: function (action, initialState) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return mountActionState(action, initialState);\n },\n useOptimistic: function (passthrough) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return mountOptimistic(passthrough);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return mountRefresh();\n }\n };\n HooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return updateDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return updateTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return updateActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return updateActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return updateOptimistic(passthrough, reducer);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n HooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return rerenderReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return rerenderDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return rerenderTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return rerenderActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return rerenderActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return rerenderOptimistic(passthrough, reducer);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n InvalidNestedHooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountEffect(create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountId();\n },\n useFormState: function (action, initialState) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountActionState(action, initialState);\n },\n useActionState: function (action, initialState) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountActionState(action, initialState);\n },\n useOptimistic: function (passthrough) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountOptimistic(passthrough);\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n mountHookTypesDev();\n return mountRefresh();\n }\n };\n InvalidNestedHooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateOptimistic(passthrough, reducer);\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n InvalidNestedHooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, createDeps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, createDeps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return rerenderReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderOptimistic(passthrough, reducer);\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n var callComponent = {\n \"react-stack-bottom-frame\": function (Component, props, secondArg) {\n var wasRendering = isRendering;\n isRendering = !0;\n try {\n return Component(props, secondArg);\n } finally {\n isRendering = wasRendering;\n }\n }\n },\n callComponentInDEV =\n callComponent[\"react-stack-bottom-frame\"].bind(callComponent),\n callRender = {\n \"react-stack-bottom-frame\": function (instance) {\n var wasRendering = isRendering;\n isRendering = !0;\n try {\n return instance.render();\n } finally {\n isRendering = wasRendering;\n }\n }\n },\n callRenderInDEV = callRender[\"react-stack-bottom-frame\"].bind(callRender),\n callComponentDidMount = {\n \"react-stack-bottom-frame\": function (finishedWork, instance) {\n try {\n instance.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n },\n callComponentDidMountInDEV = callComponentDidMount[\n \"react-stack-bottom-frame\"\n ].bind(callComponentDidMount),\n callComponentDidUpdate = {\n \"react-stack-bottom-frame\": function (\n finishedWork,\n instance,\n prevProps,\n prevState,\n snapshot\n ) {\n try {\n instance.componentDidUpdate(prevProps, prevState, snapshot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n },\n callComponentDidUpdateInDEV = callComponentDidUpdate[\n \"react-stack-bottom-frame\"\n ].bind(callComponentDidUpdate),\n callComponentDidCatch = {\n \"react-stack-bottom-frame\": function (instance, errorInfo) {\n var stack = errorInfo.stack;\n instance.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n }\n },\n callComponentDidCatchInDEV = callComponentDidCatch[\n \"react-stack-bottom-frame\"\n ].bind(callComponentDidCatch),\n callComponentWillUnmount = {\n \"react-stack-bottom-frame\": function (\n current,\n nearestMountedAncestor,\n instance\n ) {\n try {\n instance.componentWillUnmount();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n },\n callComponentWillUnmountInDEV = callComponentWillUnmount[\n \"react-stack-bottom-frame\"\n ].bind(callComponentWillUnmount),\n callCreate = {\n \"react-stack-bottom-frame\": function (effect) {\n null != effect.resourceKind &&\n console.error(\n \"Expected only SimpleEffects when enableUseEffectCRUDOverload is disabled, got %s\",\n effect.resourceKind\n );\n var create = effect.create;\n effect = effect.inst;\n create = create();\n return (effect.destroy = create);\n }\n },\n callCreateInDEV = callCreate[\"react-stack-bottom-frame\"].bind(callCreate),\n callDestroy = {\n \"react-stack-bottom-frame\": function (\n current,\n nearestMountedAncestor,\n destroy\n ) {\n try {\n destroy();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n },\n callDestroyInDEV =\n callDestroy[\"react-stack-bottom-frame\"].bind(callDestroy),\n callLazyInit = {\n \"react-stack-bottom-frame\": function (lazy) {\n var init = lazy._init;\n return init(lazy._payload);\n }\n },\n callLazyInitInDEV =\n callLazyInit[\"react-stack-bottom-frame\"].bind(callLazyInit),\n thenableState = null,\n thenableIndexCounter = 0,\n currentDebugInfo = null,\n didWarnAboutMaps;\n var didWarnAboutGenerators = (didWarnAboutMaps = !1);\n var ownerHasKeyUseWarning = {};\n var ownerHasFunctionTypeWarning = {};\n var ownerHasSymbolTypeWarning = {};\n warnForMissingKey = function (returnFiber, workInProgress, child) {\n if (\n null !== child &&\n \"object\" === typeof child &&\n child._store &&\n ((!child._store.validated && null == child.key) ||\n 2 === child._store.validated)\n ) {\n if (\"object\" !== typeof child._store)\n throw Error(\n \"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\"\n );\n child._store.validated = 1;\n var componentName = getComponentNameFromFiber(returnFiber),\n componentKey = componentName || \"null\";\n if (!ownerHasKeyUseWarning[componentKey]) {\n ownerHasKeyUseWarning[componentKey] = !0;\n child = child._owner;\n returnFiber = returnFiber._debugOwner;\n var currentComponentErrorInfo = \"\";\n returnFiber &&\n \"number\" === typeof returnFiber.tag &&\n (componentKey = getComponentNameFromFiber(returnFiber)) &&\n (currentComponentErrorInfo =\n \"\\n\\nCheck the render method of `\" + componentKey + \"`.\");\n currentComponentErrorInfo ||\n (componentName &&\n (currentComponentErrorInfo =\n \"\\n\\nCheck the top-level render call using <\" +\n componentName +\n \">.\"));\n var childOwnerAppendix = \"\";\n null != child &&\n returnFiber !== child &&\n ((componentName = null),\n \"number\" === typeof child.tag\n ? (componentName = getComponentNameFromFiber(child))\n : \"string\" === typeof child.name && (componentName = child.name),\n componentName &&\n (childOwnerAppendix =\n \" It was passed a child from \" + componentName + \".\"));\n runWithFiberInDEV(workInProgress, function () {\n console.error(\n 'Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.',\n currentComponentErrorInfo,\n childOwnerAppendix\n );\n });\n }\n }\n };\n var reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null,\n SubtreeSuspenseContextMask = 1,\n ForceSuspenseFallback = 2,\n suspenseStackCursor = createCursor(0),\n fakeInternalInstance = {};\n var didWarnAboutStateAssignmentForComponent = new Set();\n var didWarnAboutUninitializedState = new Set();\n var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n var didWarnAboutDirectlyAssigningPropsToState = new Set();\n var didWarnAboutUndefinedDerivedState = new Set();\n var didWarnAboutContextTypes$1 = new Set();\n var didWarnAboutChildContextTypes = new Set();\n var didWarnAboutInvalidateContextType = new Set();\n var didWarnOnInvalidCallback = new Set();\n Object.freeze(fakeInternalInstance);\n var classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n markStateUpdateScheduled(inst, lane);\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.tag = ReplaceState;\n update.payload = payload;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n markStateUpdateScheduled(inst, lane);\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.tag = ForceUpdate;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markForceUpdateScheduled &&\n injectedProfilingHooks.markForceUpdateScheduled(inst, lane);\n }\n },\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n componentName = null,\n errorBoundaryName = null,\n SelectiveHydrationException = Error(\n \"This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue.\"\n ),\n didReceiveUpdate = !1;\n var didWarnAboutBadClass = {};\n var didWarnAboutContextTypeOnFunctionComponent = {};\n var didWarnAboutContextTypes = {};\n var didWarnAboutGetDerivedStateOnFunctionComponent = {};\n var didWarnAboutReassigningProps = !1;\n var didWarnAboutRevealOrder = {};\n var didWarnAboutTailOptions = {};\n var SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n },\n hasWarnedAboutUsingNoValuePropOnContextProvider = !1,\n didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n var offscreenSubtreeIsHidden = !1,\n offscreenSubtreeWasHidden = !1,\n needsFormReset = !1,\n PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n nextEffect = null,\n inProgressLanes = null,\n inProgressRoot = null,\n hostParent = null,\n hostParentIsContainer = !1,\n currentHoistableRoot = null,\n suspenseyCommitFlag = 8192,\n DefaultAsyncDispatcher = {\n getCacheForType: function (resourceType) {\n var cache = readContext(CacheContext),\n cacheForType = cache.data.get(resourceType);\n void 0 === cacheForType &&\n ((cacheForType = resourceType()),\n cache.data.set(resourceType, cacheForType));\n return cacheForType;\n },\n getOwner: function () {\n return current;\n }\n };\n if (\"function\" === typeof Symbol && Symbol.for) {\n var symbolFor = Symbol.for;\n symbolFor(\"selector.component\");\n symbolFor(\"selector.has_pseudo_class\");\n symbolFor(\"selector.role\");\n symbolFor(\"selector.test_id\");\n symbolFor(\"selector.text\");\n }\n var commitHooks = [],\n PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n NoContext = 0,\n RenderContext = 2,\n CommitContext = 4,\n RootInProgress = 0,\n RootFatalErrored = 1,\n RootErrored = 2,\n RootSuspended = 3,\n RootSuspendedWithDelay = 4,\n RootSuspendedAtTheShell = 6,\n RootCompleted = 5,\n executionContext = NoContext,\n workInProgressRoot = null,\n workInProgress = null,\n workInProgressRootRenderLanes = 0,\n NotSuspended = 0,\n SuspendedOnError = 1,\n SuspendedOnData = 2,\n SuspendedOnImmediate = 3,\n SuspendedOnInstance = 4,\n SuspendedOnInstanceAndReadyToContinue = 5,\n SuspendedOnDeprecatedThrowPromise = 6,\n SuspendedAndReadyToContinue = 7,\n SuspendedOnHydration = 8,\n SuspendedOnAction = 9,\n workInProgressSuspendedReason = NotSuspended,\n workInProgressThrownValue = null,\n workInProgressRootDidSkipSuspendedSiblings = !1,\n workInProgressRootIsPrerendering = !1,\n workInProgressRootDidAttachPingListener = !1,\n entangledRenderLanes = 0,\n workInProgressRootExitStatus = RootInProgress,\n workInProgressRootSkippedLanes = 0,\n workInProgressRootInterleavedUpdatedLanes = 0,\n workInProgressRootPingedLanes = 0,\n workInProgressDeferredLane = 0,\n workInProgressSuspendedRetryLanes = 0,\n workInProgressRootConcurrentErrors = null,\n workInProgressRootRecoverableErrors = null,\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n globalMostRecentFallbackTime = 0,\n FALLBACK_THROTTLE_MS = 300,\n workInProgressRootRenderTargetTime = Infinity,\n RENDER_TIMEOUT_MS = 500,\n workInProgressTransitions = null,\n legacyErrorBoundariesThatAlreadyFailed = null,\n IMMEDIATE_COMMIT = 0,\n SUSPENDED_COMMIT = 1,\n THROTTLED_COMMIT = 2,\n NO_PENDING_EFFECTS = 0,\n PENDING_MUTATION_PHASE = 1,\n PENDING_LAYOUT_PHASE = 2,\n PENDING_AFTER_MUTATION_PHASE = 3,\n PENDING_SPAWNED_WORK = 4,\n PENDING_PASSIVE_PHASE = 5,\n pendingEffectsStatus = 0,\n pendingEffectsRoot = null,\n pendingFinishedWork = null,\n pendingEffectsLanes = 0,\n pendingEffectsRemainingLanes = 0,\n pendingPassiveTransitions = null,\n pendingRecoverableErrors = null,\n NESTED_UPDATE_LIMIT = 50,\n nestedUpdateCount = 0,\n rootWithNestedUpdates = null,\n isFlushingPassiveEffects = !1,\n didScheduleUpdateDuringPassiveEffects = !1,\n NESTED_PASSIVE_UPDATE_LIMIT = 50,\n nestedPassiveUpdateCount = 0,\n rootWithPassiveNestedUpdates = null,\n isRunningInsertionEffect = !1,\n didWarnStateUpdateForNotYetMountedComponent = null,\n didWarnAboutUpdateInRender = !1;\n var didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n var fakeActCallbackNode$1 = {},\n firstScheduledRoot = null,\n lastScheduledRoot = null,\n didScheduleMicrotask = !1,\n didScheduleMicrotask_act = !1,\n mightHavePendingSyncWork = !1,\n isFlushingWork = !1,\n currentEventTransitionLane = 0,\n fakeActCallbackNode = {};\n (function () {\n for (var i = 0; i < simpleEventPluginEvents.length; i++) {\n var eventName = simpleEventPluginEvents[i],\n domEventName = eventName.toLowerCase();\n eventName = eventName[0].toUpperCase() + eventName.slice(1);\n registerSimpleEvent(domEventName, \"on\" + eventName);\n }\n registerSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\n registerSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\n registerSimpleEvent(ANIMATION_START, \"onAnimationStart\");\n registerSimpleEvent(\"dblclick\", \"onDoubleClick\");\n registerSimpleEvent(\"focusin\", \"onFocus\");\n registerSimpleEvent(\"focusout\", \"onBlur\");\n registerSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\n registerSimpleEvent(TRANSITION_START, \"onTransitionStart\");\n registerSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\n registerSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\n })();\n registerDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\n registerDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\n registerDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\n registerDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\n registerTwoPhaseEvent(\n \"onChange\",\n \"change click focusin focusout input keydown keyup selectionchange\".split(\n \" \"\n )\n );\n registerTwoPhaseEvent(\n \"onSelect\",\n \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n \" \"\n )\n );\n registerTwoPhaseEvent(\"onBeforeInput\", [\n \"compositionend\",\n \"keypress\",\n \"textInput\",\n \"paste\"\n ]);\n registerTwoPhaseEvent(\n \"onCompositionEnd\",\n \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n );\n registerTwoPhaseEvent(\n \"onCompositionStart\",\n \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n );\n registerTwoPhaseEvent(\n \"onCompositionUpdate\",\n \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n );\n var mediaEventTypes =\n \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n \" \"\n ),\n nonDelegatedEvents = new Set(\n \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n .split(\" \")\n .concat(mediaEventTypes)\n ),\n listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2),\n didWarnControlledToUncontrolled = !1,\n didWarnUncontrolledToControlled = !1,\n didWarnFormActionType = !1,\n didWarnFormActionName = !1,\n didWarnFormActionTarget = !1,\n didWarnFormActionMethod = !1,\n didWarnPopoverTargetObject = !1;\n var didWarnForNewBooleanPropsWithEmptyValue = {};\n var NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g,\n xlinkNamespace = \"http://www.w3.org/1999/xlink\",\n xmlNamespace = \"http://www.w3.org/XML/1998/namespace\",\n EXPECTED_FORM_ACTION_URL =\n \"javascript:throw new Error('React form unexpectedly submitted.')\",\n SUPPRESS_HYDRATION_WARNING = \"suppressHydrationWarning\",\n SUSPENSE_START_DATA = \"$\",\n SUSPENSE_END_DATA = \"/$\",\n SUSPENSE_PENDING_START_DATA = \"$?\",\n SUSPENSE_FALLBACK_START_DATA = \"$!\",\n PREAMBLE_CONTRIBUTION_HTML = 1,\n PREAMBLE_CONTRIBUTION_BODY = 2,\n PREAMBLE_CONTRIBUTION_HEAD = 4,\n FORM_STATE_IS_MATCHING = \"F!\",\n FORM_STATE_IS_NOT_MATCHING = \"F\",\n DOCUMENT_READY_STATE_COMPLETE = \"complete\",\n STYLE = \"style\",\n HostContextNamespaceNone = 0,\n HostContextNamespaceSvg = 1,\n HostContextNamespaceMath = 2,\n eventsEnabled = null,\n selectionInformation = null,\n warnedUnknownTags = { dialog: !0, webview: !0 },\n currentPopstateTransitionEvent = null,\n scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n cancelTimeout =\n \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n noTimeout = -1,\n localPromise = \"function\" === typeof Promise ? Promise : void 0,\n scheduleMicrotask =\n \"function\" === typeof queueMicrotask\n ? queueMicrotask\n : \"undefined\" !== typeof localPromise\n ? function (callback) {\n return localPromise\n .resolve(null)\n .then(callback)\n .catch(handleErrorInNextTick);\n }\n : scheduleTimeout,\n previousHydratableOnEnteringScopedSingleton = null,\n NotLoaded = 0,\n Loaded = 1,\n Errored = 2,\n Settled = 3,\n Inserted = 4,\n preloadPropsMap = new Map(),\n preconnectsSet = new Set(),\n previousDispatcher = ReactDOMSharedInternals.d;\n ReactDOMSharedInternals.d = {\n f: function () {\n var previousWasRendering = previousDispatcher.f(),\n wasRendering = flushSyncWork$1();\n return previousWasRendering || wasRendering;\n },\n r: function (form) {\n var formInst = getInstanceFromNode(form);\n null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n ? requestFormReset$1(formInst)\n : previousDispatcher.r(form);\n },\n D: function (href) {\n previousDispatcher.D(href);\n preconnectAs(\"dns-prefetch\", href, null);\n },\n C: function (href, crossOrigin) {\n previousDispatcher.C(href, crossOrigin);\n preconnectAs(\"preconnect\", href, crossOrigin);\n },\n L: function (href, as, options) {\n previousDispatcher.L(href, as, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href && as) {\n var preloadSelector =\n 'link[rel=\"preload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"]';\n \"image\" === as\n ? options && options.imageSrcSet\n ? ((preloadSelector +=\n '[imagesrcset=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSrcSet\n ) +\n '\"]'),\n \"string\" === typeof options.imageSizes &&\n (preloadSelector +=\n '[imagesizes=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSizes\n ) +\n '\"]'))\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]')\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]');\n var key = preloadSelector;\n switch (as) {\n case \"style\":\n key = getStyleKey(href);\n break;\n case \"script\":\n key = getScriptKey(href);\n }\n preloadPropsMap.has(key) ||\n ((href = assign(\n {\n rel: \"preload\",\n href:\n \"image\" === as && options && options.imageSrcSet\n ? void 0\n : href,\n as: as\n },\n options\n )),\n preloadPropsMap.set(key, href),\n null !== ownerDocument.querySelector(preloadSelector) ||\n (\"style\" === as &&\n ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n )) ||\n (\"script\" === as &&\n ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n ((as = ownerDocument.createElement(\"link\")),\n setInitialProperties(as, \"link\", href),\n markNodeAsHoistable(as),\n ownerDocument.head.appendChild(as)));\n }\n },\n m: function (href, options) {\n previousDispatcher.m(href, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var as =\n options && \"string\" === typeof options.as ? options.as : \"script\",\n preloadSelector =\n 'link[rel=\"modulepreload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"][href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]',\n key = preloadSelector;\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n key = getScriptKey(href);\n }\n if (\n !preloadPropsMap.has(key) &&\n ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n preloadPropsMap.set(key, href),\n null === ownerDocument.querySelector(preloadSelector))\n ) {\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n return;\n }\n as = ownerDocument.createElement(\"link\");\n setInitialProperties(as, \"link\", href);\n markNodeAsHoistable(as);\n ownerDocument.head.appendChild(as);\n }\n }\n },\n X: function (src, options) {\n previousDispatcher.X(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(\n getScriptSelectorFromKey(key)\n )),\n resource ||\n ((src = assign({ src: src, async: !0 }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n },\n S: function (href, precedence, options) {\n previousDispatcher.S(href, precedence, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n key = getStyleKey(href);\n precedence = precedence || \"default\";\n var resource = styles.get(key);\n if (!resource) {\n var state = { loading: NotLoaded, preload: null };\n if (\n (resource = ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n ))\n )\n state.loading = Loaded | Inserted;\n else {\n href = assign(\n {\n rel: \"stylesheet\",\n href: href,\n \"data-precedence\": precedence\n },\n options\n );\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(href, options);\n var link = (resource = ownerDocument.createElement(\"link\"));\n markNodeAsHoistable(link);\n setInitialProperties(link, \"link\", href);\n link._p = new Promise(function (resolve, reject) {\n link.onload = resolve;\n link.onerror = reject;\n });\n link.addEventListener(\"load\", function () {\n state.loading |= Loaded;\n });\n link.addEventListener(\"error\", function () {\n state.loading |= Errored;\n });\n state.loading |= Inserted;\n insertStylesheet(resource, precedence, ownerDocument);\n }\n resource = {\n type: \"stylesheet\",\n instance: resource,\n count: 1,\n state: state\n };\n styles.set(key, resource);\n }\n }\n },\n M: function (src, options) {\n previousDispatcher.M(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(\n getScriptSelectorFromKey(key)\n )),\n resource ||\n ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n }\n };\n var globalDocument = \"undefined\" === typeof document ? null : document,\n tagCaches = null,\n suspendedState = null,\n LAST_PRECEDENCE = null,\n precedencesByRoot = null,\n NotPendingTransition = NotPending,\n HostTransitionContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Provider: null,\n Consumer: null,\n _currentValue: NotPendingTransition,\n _currentValue2: NotPendingTransition,\n _threadCount: 0\n },\n badgeFormat = \"%c%s%c \",\n badgeStyle =\n \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\",\n resetStyle = \"\",\n pad = \" \",\n bind = Function.prototype.bind;\n var didWarnAboutNestedUpdates = !1;\n var overrideHookState = null,\n overrideHookStateDeletePath = null,\n overrideHookStateRenamePath = null,\n overrideProps = null,\n overridePropsDeletePath = null,\n overridePropsRenamePath = null,\n scheduleUpdate = null,\n setErrorHandler = null,\n setSuspenseHandler = null;\n overrideHookState = function (fiber, id, path, value) {\n id = findHook(fiber, id);\n null !== id &&\n ((path = copyWithSetImpl(id.memoizedState, path, 0, value)),\n (id.memoizedState = path),\n (id.baseState = path),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (path = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== path && scheduleUpdateOnFiber(path, fiber, 2));\n };\n overrideHookStateDeletePath = function (fiber, id, path) {\n id = findHook(fiber, id);\n null !== id &&\n ((path = copyWithDeleteImpl(id.memoizedState, path, 0)),\n (id.memoizedState = path),\n (id.baseState = path),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (path = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== path && scheduleUpdateOnFiber(path, fiber, 2));\n };\n overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {\n id = findHook(fiber, id);\n null !== id &&\n ((oldPath = copyWithRename(id.memoizedState, oldPath, newPath)),\n (id.memoizedState = oldPath),\n (id.baseState = oldPath),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (oldPath = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2));\n };\n overrideProps = function (fiber, path, value) {\n fiber.pendingProps = copyWithSetImpl(fiber.memoizedProps, path, 0, value);\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n path = enqueueConcurrentRenderForLane(fiber, 2);\n null !== path && scheduleUpdateOnFiber(path, fiber, 2);\n };\n overridePropsDeletePath = function (fiber, path) {\n fiber.pendingProps = copyWithDeleteImpl(fiber.memoizedProps, path, 0);\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n path = enqueueConcurrentRenderForLane(fiber, 2);\n null !== path && scheduleUpdateOnFiber(path, fiber, 2);\n };\n overridePropsRenamePath = function (fiber, oldPath, newPath) {\n fiber.pendingProps = copyWithRename(\n fiber.memoizedProps,\n oldPath,\n newPath\n );\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n oldPath = enqueueConcurrentRenderForLane(fiber, 2);\n null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2);\n };\n scheduleUpdate = function (fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n };\n setErrorHandler = function (newShouldErrorImpl) {\n shouldErrorImpl = newShouldErrorImpl;\n };\n setSuspenseHandler = function (newShouldSuspendImpl) {\n shouldSuspendImpl = newShouldSuspendImpl;\n };\n var _enabled = !0,\n return_targetInst = null,\n hasScheduledReplayAttempt = !1,\n queuedFocus = null,\n queuedDrag = null,\n queuedMouse = null,\n queuedPointers = new Map(),\n queuedPointerCaptures = new Map(),\n queuedExplicitHydrationTargets = [],\n discreteReplayableEvents =\n \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n \" \"\n ),\n lastScheduledReplayQueue = null;\n ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n function (children) {\n var root = this._internalRoot;\n if (null === root) throw Error(\"Cannot update an unmounted root.\");\n var args = arguments;\n \"function\" === typeof args[1]\n ? console.error(\n \"does not support the second callback argument. To execute a side effect after rendering, declare it in a component body with useEffect().\"\n )\n : isValidContainer(args[1])\n ? console.error(\n \"You passed a container to the second argument of root.render(...). You don't need to pass it again since you already passed it to create the root.\"\n )\n : \"undefined\" !== typeof args[1] &&\n console.error(\n \"You passed a second argument to root.render(...) but it only accepts one argument.\"\n );\n args = children;\n var current = root.current,\n lane = requestUpdateLane(current);\n updateContainerImpl(current, lane, args, root, null, null);\n };\n ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n function () {\n var args = arguments;\n \"function\" === typeof args[0] &&\n console.error(\n \"does not support a callback argument. To execute a side effect after rendering, declare it in a component body with useEffect().\"\n );\n args = this._internalRoot;\n if (null !== args) {\n this._internalRoot = null;\n var container = args.containerInfo;\n (executionContext & (RenderContext | CommitContext)) !== NoContext &&\n console.error(\n \"Attempted to synchronously unmount a root while React was already rendering. React cannot finish unmounting the root until the current render has completed, which may lead to a race condition.\"\n );\n updateContainerImpl(args.current, 2, null, args, null, null);\n flushSyncWork$1();\n container[internalContainerInstanceKey] = null;\n }\n };\n ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (\n target\n ) {\n if (target) {\n var updatePriority = resolveUpdatePriority();\n target = { blockedOn: null, target: target, priority: updatePriority };\n for (\n var i = 0;\n i < queuedExplicitHydrationTargets.length &&\n 0 !== updatePriority &&\n updatePriority < queuedExplicitHydrationTargets[i].priority;\n i++\n );\n queuedExplicitHydrationTargets.splice(i, 0, target);\n 0 === i && attemptExplicitHydrationTarget(target);\n }\n };\n (function () {\n var isomorphicReactPackageVersion = React.version;\n if (\"19.1.0\" !== isomorphicReactPackageVersion)\n throw Error(\n 'Incompatible React versions: The \"react\" and \"react-dom\" packages must have the exact same version. Instead got:\\n - react: ' +\n (isomorphicReactPackageVersion +\n \"\\n - react-dom: 19.1.0\\nLearn more: https://react.dev/warnings/version-mismatch\")\n );\n })();\n (\"function\" === typeof Map &&\n null != Map.prototype &&\n \"function\" === typeof Map.prototype.forEach &&\n \"function\" === typeof Set &&\n null != Set.prototype &&\n \"function\" === typeof Set.prototype.clear &&\n \"function\" === typeof Set.prototype.forEach) ||\n console.error(\n \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://react.dev/link/react-polyfills\"\n );\n ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n var fiber = componentOrElement._reactInternals;\n if (void 0 === fiber) {\n if (\"function\" === typeof componentOrElement.render)\n throw Error(\"Unable to find node on an unmounted component.\");\n componentOrElement = Object.keys(componentOrElement).join(\",\");\n throw Error(\n \"Argument appears to not be a ReactComponent. Keys: \" +\n componentOrElement\n );\n }\n componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n componentOrElement =\n null !== componentOrElement\n ? findCurrentHostFiberImpl(componentOrElement)\n : null;\n componentOrElement =\n null === componentOrElement ? null : componentOrElement.stateNode;\n return componentOrElement;\n };\n if (\n !(function () {\n var internals = {\n bundleType: 1,\n version: \"19.1.0\",\n rendererPackageName: \"react-dom\",\n currentDispatcherRef: ReactSharedInternals,\n reconcilerVersion: \"19.1.0\"\n };\n internals.overrideHookState = overrideHookState;\n internals.overrideHookStateDeletePath = overrideHookStateDeletePath;\n internals.overrideHookStateRenamePath = overrideHookStateRenamePath;\n internals.overrideProps = overrideProps;\n internals.overridePropsDeletePath = overridePropsDeletePath;\n internals.overridePropsRenamePath = overridePropsRenamePath;\n internals.scheduleUpdate = scheduleUpdate;\n internals.setErrorHandler = setErrorHandler;\n internals.setSuspenseHandler = setSuspenseHandler;\n internals.scheduleRefresh = scheduleRefresh;\n internals.scheduleRoot = scheduleRoot;\n internals.setRefreshHandler = setRefreshHandler;\n internals.getCurrentFiber = getCurrentFiberForDevTools;\n internals.getLaneLabelMap = getLaneLabelMap;\n internals.injectProfilingHooks = injectProfilingHooks;\n return injectInternals(internals);\n })() &&\n canUseDOM &&\n window.top === window.self &&\n ((-1 < navigator.userAgent.indexOf(\"Chrome\") &&\n -1 === navigator.userAgent.indexOf(\"Edge\")) ||\n -1 < navigator.userAgent.indexOf(\"Firefox\"))\n ) {\n var protocol = window.location.protocol;\n /^(https?|file):$/.test(protocol) &&\n console.info(\n \"%cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools\" +\n (\"file:\" === protocol\n ? \"\\nYou might need to use a local HTTP server (instead of file://): https://react.dev/link/react-devtools-faq\"\n : \"\"),\n \"font-weight:bold\"\n );\n }\n exports.createRoot = function (container, options) {\n if (!isValidContainer(container))\n throw Error(\"Target container is not a DOM element.\");\n warnIfReactDOMContainerInDEV(container);\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n transitionCallbacks = null;\n null !== options &&\n void 0 !== options &&\n (options.hydrate\n ? console.warn(\n \"hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead.\"\n )\n : \"object\" === typeof options &&\n null !== options &&\n options.$$typeof === REACT_ELEMENT_TYPE &&\n console.error(\n \"You passed a JSX element to createRoot. You probably meant to call root.render instead. Example usage:\\n\\n let root = createRoot(domContainer);\\n root.render(<App />);\"\n ),\n !0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError &&\n (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.unstable_transitionCallbacks &&\n (transitionCallbacks = options.unstable_transitionCallbacks));\n options = createFiberRoot(\n container,\n 1,\n !1,\n null,\n null,\n isStrictMode,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n null\n );\n container[internalContainerInstanceKey] = options.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMRoot(options);\n };\n exports.hydrateRoot = function (container, initialChildren, options) {\n if (!isValidContainer(container))\n throw Error(\"Target container is not a DOM element.\");\n warnIfReactDOMContainerInDEV(container);\n void 0 === initialChildren &&\n console.error(\n \"Must provide initial children as second argument to hydrateRoot. Example usage: hydrateRoot(domContainer, <App />)\"\n );\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n transitionCallbacks = null,\n formState = null;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError &&\n (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.unstable_transitionCallbacks &&\n (transitionCallbacks = options.unstable_transitionCallbacks),\n void 0 !== options.formState && (formState = options.formState));\n initialChildren = createFiberRoot(\n container,\n 1,\n !0,\n initialChildren,\n null != options ? options : null,\n isStrictMode,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n transitionCallbacks,\n formState\n );\n initialChildren.context = getContextForSubtree(null);\n options = initialChildren.current;\n isStrictMode = requestUpdateLane(options);\n isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n identifierPrefix = createUpdate(isStrictMode);\n identifierPrefix.callback = null;\n enqueueUpdate(options, identifierPrefix, isStrictMode);\n options = isStrictMode;\n initialChildren.current.lanes = options;\n markRootUpdated$1(initialChildren, options);\n ensureRootIsScheduled(initialChildren);\n container[internalContainerInstanceKey] = initialChildren.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMHydrationRoot(initialChildren);\n };\n exports.version = \"19.1.0\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS1jbGllbnQuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDYTtBQUNiLEtBQXFDO0FBQ3JDO0FBQ0E7QUFDQSx3Q0FBd0MsMEJBQTBCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix3QkFBd0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsYUFBYTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsUUFBUTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsUUFBUTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGVBQWU7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsUUFBUTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsUUFBUTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxvQkFBb0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELFdBQVc7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5REFBeUQ7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSx3QkFBd0IsV0FBVyxnQkFBZ0I7QUFDbkQseUJBQXlCLFdBQVcsaUJBQWlCO0FBQ3JELHlCQUF5QixXQUFXLGlCQUFpQjtBQUNyRCwwQkFBMEIsV0FBVyxrQkFBa0I7QUFDdkQsMEJBQTBCLFdBQVcsa0JBQWtCO0FBQ3ZELG1DQUFtQyxXQUFXLDJCQUEyQjtBQUN6RSw2QkFBNkIsV0FBVyxxQkFBcUI7QUFDN0QsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBLDRCQUE0Qix5QkFBeUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUNBQWlDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE1BQU07QUFDeEIsa0JBQWtCLDRDQUE0QztBQUM5RCxnQkFBZ0IsZ0JBQWdCO0FBQ2hDO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsYUFBYTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDRDQUE0QztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsT0FBTztBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsaUJBQWlCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0hBQWtILDhCQUE4QjtBQUNoSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnTkFBZ047QUFDaE47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0pBQWtKLGlCQUFpQjtBQUNuSztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtKQUFrSixpQkFBaUIsbURBQW1ELG1CQUFtQixXQUFXLCtCQUErQjtBQUNuUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEYsR0FBRztBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsa0JBQWtCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCwrQkFBK0I7QUFDL0I7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIscUNBQXFDO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHNCQUFzQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEseUJBQXlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsTUFBTTtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsa0RBQWtEO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLG9DQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELGlCQUFpQjtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsaUJBQWlCO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrREFBa0Q7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLDZDQUE2QztBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHFDQUFxQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsd0NBQXdDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsK0JBQStCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHNCQUFzQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxpQkFBaUI7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELDhCQUE4QjtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxnQkFBZ0I7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQztBQUNBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGtDQUFrQyxvQkFBb0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsc0JBQXNCO0FBQ2hELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsMEJBQTBCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdEQUFnRDtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLDhCQUE4QjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDRDQUE0QztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsMENBQTBDLG9CQUFvQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsdUJBQXVCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxvQ0FBb0M7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0JBQW9CLHFDQUFxQztBQUNyRTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLG1CQUFtQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsaUJBQWlCO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLHlDQUF5QztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpTUFBaU0sR0FBRztBQUNwTTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLDRCQUE0QjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw2QkFBNkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsNEJBQTRCO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixlQUFlO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsaUNBQWlDO0FBQ3BFO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyx1QkFBdUI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QywrQkFBK0I7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDRDQUE0QztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBNQUEwTSxHQUFHO0FBQzdNO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsWUFBWTtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELGtCQUFrQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHNCQUFzQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxzQkFBc0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELDBCQUEwQjtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHdDQUF3QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxTQUFTO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsbUNBQW1DO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1QkFBdUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxnQkFBZ0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOERBQThELGlCQUFpQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxnQkFBZ0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHdCQUF3QjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxrQkFBa0I7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGdDQUFnQyw4RUFBOEUsaUJBQWlCLGdCQUFnQixHQUFHLGFBQWE7QUFDOUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGVBQWUsd0JBQXdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQsY0FBYztBQUNkO0FBQ0EsK0NBQStDO0FBQy9DLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLHFCQUFxQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixxQkFBcUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxpQkFBaUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyx1QkFBdUI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyx1QkFBdUI7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsdUJBQXVCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsc0JBQXNCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxzQkFBc0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxzQkFBc0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHNCQUFzQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsc0JBQXNCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHFCQUFxQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxxQkFBcUI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDhDQUE4QztBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsV0FBVztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBCQUEwQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSwyQ0FBMkM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxnQkFBZ0I7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQ0FBaUM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNk1BQTZNLDBDQUEwQyxFQUFFO0FBQ3pQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2S0FBNkssMENBQTBDLEVBQUU7QUFDek47QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxlQUFlO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDBCQUEwQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxrQkFBa0I7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsa0NBQWtDO0FBQzdEO0FBQ0EsMkJBQTJCLGtDQUFrQztBQUM3RDtBQUNBO0FBQ0EsMkJBQTJCLFlBQVk7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixvQ0FBb0M7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0SEFBNEgsbUJBQW1CLFdBQVcsK0JBQStCO0FBQ3pMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLFlBQVk7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsWUFBWTtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixpQ0FBaUM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix1QkFBdUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0hBQWtILDhCQUE4QjtBQUNoSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELG9CQUFvQjtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGNBQWM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsa0JBQWtCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGdCQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxnQkFBZ0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELG1CQUFtQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZ0RBQWdEO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLCtCQUErQjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZIQUE2SCxLQUFLLGFBQWEsS0FBSztBQUNwSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlJQUFpSSxLQUFLLGFBQWEsS0FBSztBQUN4SjtBQUNBO0FBQ0EsMEZBQTBGLEtBQUs7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixVQUFVO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RTtBQUN4RTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxZQUFZO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELE9BQU87QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUMsMkJBQTJCO0FBQzNCLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esa0NBQWtDLG9CQUFvQixvQkFBb0I7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLG9DQUFvQyx5QkFBeUIsaUJBQWlCO0FBQzlFO0FBQ0EscUNBQXFDLHNCQUFzQixrQkFBa0I7QUFDN0U7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSwyQ0FBMkMsb0JBQW9CLFNBQVM7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCwyREFBMkQ7QUFDM0Qsa0RBQWtEO0FBQ2xELGlEQUFpRDtBQUNqRDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZUFBZTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCO0FBQ2hCLG9DQUFvQyxPQUFPO0FBQzNDLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG9DQUFvQztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHlCQUF5QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksa0JBQWtCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0pBQStKLHlCQUF5QjtBQUN4TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG1CQUFtQjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyJEOlxcZG9uZ3l1bi1wcm9qZWN0c1xcdHdvXFxub2RlX21vZHVsZXNcXHJlYWN0LWRvbVxcY2pzXFxyZWFjdC1kb20tY2xpZW50LmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWRvbS1jbGllbnQuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8qXG4gTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4qL1xuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBmaW5kSG9vayhmaWJlciwgaWQpIHtcbiAgICAgIGZvciAoZmliZXIgPSBmaWJlci5tZW1vaXplZFN0YXRlOyBudWxsICE9PSBmaWJlciAmJiAwIDwgaWQ7IClcbiAgICAgICAgKGZpYmVyID0gZmliZXIubmV4dCksIGlkLS07XG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvcHlXaXRoU2V0SW1wbChvYmosIHBhdGgsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgaWYgKGluZGV4ID49IHBhdGgubGVuZ3RoKSByZXR1cm4gdmFsdWU7XG4gICAgICB2YXIga2V5ID0gcGF0aFtpbmRleF0sXG4gICAgICAgIHVwZGF0ZWQgPSBpc0FycmF5SW1wbChvYmopID8gb2JqLnNsaWNlKCkgOiBhc3NpZ24oe30sIG9iaik7XG4gICAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aFNldEltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvcHlXaXRoUmVuYW1lKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgICAgaWYgKG9sZFBhdGgubGVuZ3RoICE9PSBuZXdQYXRoLmxlbmd0aClcbiAgICAgICAgY29uc29sZS53YXJuKFwiY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIG9mIHRoZSBzYW1lIGxlbmd0aFwiKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhdGgubGVuZ3RoIC0gMTsgaSsrKVxuICAgICAgICAgIGlmIChvbGRQYXRoW2ldICE9PSBuZXdQYXRoW2ldKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIFwiY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGRlZXBlc3Qga2V5XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvcHlXaXRoUmVuYW1lSW1wbChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4KSB7XG4gICAgICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF0sXG4gICAgICAgIHVwZGF0ZWQgPSBpc0FycmF5SW1wbChvYmopID8gb2JqLnNsaWNlKCkgOiBhc3NpZ24oe30sIG9iaik7XG4gICAgICBpbmRleCArIDEgPT09IG9sZFBhdGgubGVuZ3RoXG4gICAgICAgID8gKCh1cGRhdGVkW25ld1BhdGhbaW5kZXhdXSA9IHVwZGF0ZWRbb2xkS2V5XSksXG4gICAgICAgICAgaXNBcnJheUltcGwodXBkYXRlZClcbiAgICAgICAgICAgID8gdXBkYXRlZC5zcGxpY2Uob2xkS2V5LCAxKVxuICAgICAgICAgICAgOiBkZWxldGUgdXBkYXRlZFtvbGRLZXldKVxuICAgICAgICA6ICh1cGRhdGVkW29sZEtleV0gPSBjb3B5V2l0aFJlbmFtZUltcGwoXG4gICAgICAgICAgICBvYmpbb2xkS2V5XSxcbiAgICAgICAgICAgIG9sZFBhdGgsXG4gICAgICAgICAgICBuZXdQYXRoLFxuICAgICAgICAgICAgaW5kZXggKyAxXG4gICAgICAgICAgKSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29weVdpdGhEZWxldGVJbXBsKG9iaiwgcGF0aCwgaW5kZXgpIHtcbiAgICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XSxcbiAgICAgICAgdXBkYXRlZCA9IGlzQXJyYXlJbXBsKG9iaikgPyBvYmouc2xpY2UoKSA6IGFzc2lnbih7fSwgb2JqKTtcbiAgICAgIGlmIChpbmRleCArIDEgPT09IHBhdGgubGVuZ3RoKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGlzQXJyYXlJbXBsKHVwZGF0ZWQpID8gdXBkYXRlZC5zcGxpY2Uoa2V5LCAxKSA6IGRlbGV0ZSB1cGRhdGVkW2tleV0sXG4gICAgICAgICAgdXBkYXRlZFxuICAgICAgICApO1xuICAgICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhEZWxldGVJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFN1c3BlbmRJbXBsKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRFcnJvckltcGwoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkZvck1pc3NpbmdLZXkoKSB7fVxuICAgIGZ1bmN0aW9uIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiRG8gbm90IGNhbGwgSG9va3MgaW5zaWRlIHVzZUVmZmVjdCguLi4pLCB1c2VNZW1vKC4uLiksIG9yIG90aGVyIGJ1aWx0LWluIEhvb2tzLiBZb3UgY2FuIG9ubHkgY2FsbCBIb29rcyBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgUmVhY3QgZnVuY3Rpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9ydWxlcy1vZi1ob29rc1wiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wJDIoKSB7fVxuICAgIGZ1bmN0aW9uIHNldFRvU29ydGVkU3RyaW5nKHNldCkge1xuICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcnJheS5zb3J0KCkuam9pbihcIiwgXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlcih0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gICAgICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVSb290KHJvb3QsIGVsZW1lbnQpIHtcbiAgICAgIHJvb3QuY29udGV4dCA9PT0gZW1wdHlDb250ZXh0T2JqZWN0ICYmXG4gICAgICAgICh1cGRhdGVDb250YWluZXJJbXBsKHJvb3QuY3VycmVudCwgMiwgZWxlbWVudCwgcm9vdCwgbnVsbCwgbnVsbCksXG4gICAgICAgIGZsdXNoU3luY1dvcmskMSgpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVSZWZyZXNoKHJvb3QsIHVwZGF0ZSkge1xuICAgICAgaWYgKG51bGwgIT09IHJlc29sdmVGYW1pbHkpIHtcbiAgICAgICAgdmFyIHN0YWxlRmFtaWxpZXMgPSB1cGRhdGUuc3RhbGVGYW1pbGllcztcbiAgICAgICAgdXBkYXRlID0gdXBkYXRlLnVwZGF0ZWRGYW1pbGllcztcbiAgICAgICAgZmx1c2hQZW5kaW5nRWZmZWN0cygpO1xuICAgICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgIHJvb3QuY3VycmVudCxcbiAgICAgICAgICB1cGRhdGUsXG4gICAgICAgICAgc3RhbGVGYW1pbGllc1xuICAgICAgICApO1xuICAgICAgICBmbHVzaFN5bmNXb3JrJDEoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0UmVmcmVzaEhhbmRsZXIoaGFuZGxlcikge1xuICAgICAgcmVzb2x2ZUZhbWlseSA9IGhhbmRsZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVmFsaWRDb250YWluZXIobm9kZSkge1xuICAgICAgcmV0dXJuICEoXG4gICAgICAgICFub2RlIHx8XG4gICAgICAgICgxICE9PSBub2RlLm5vZGVUeXBlICYmIDkgIT09IG5vZGUubm9kZVR5cGUgJiYgMTEgIT09IG5vZGUubm9kZVR5cGUpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gICAgICB2YXIgbm9kZSA9IGZpYmVyLFxuICAgICAgICBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuICAgICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkgZm9yICg7IG5vZGUucmV0dXJuOyApIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIGVsc2Uge1xuICAgICAgICBmaWJlciA9IG5vZGU7XG4gICAgICAgIGRvXG4gICAgICAgICAgKG5vZGUgPSBmaWJlciksXG4gICAgICAgICAgICAwICE9PSAobm9kZS5mbGFncyAmIDQwOTgpICYmIChuZWFyZXN0TW91bnRlZCA9IG5vZGUucmV0dXJuKSxcbiAgICAgICAgICAgIChmaWJlciA9IG5vZGUucmV0dXJuKTtcbiAgICAgICAgd2hpbGUgKGZpYmVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAzID09PSBub2RlLnRhZyA/IG5lYXJlc3RNb3VudGVkIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihmaWJlcikge1xuICAgICAgaWYgKDEzID09PSBmaWJlci50YWcpIHtcbiAgICAgICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgICBudWxsID09PSBzdXNwZW5zZVN0YXRlICYmXG4gICAgICAgICAgKChmaWJlciA9IGZpYmVyLmFsdGVybmF0ZSksXG4gICAgICAgICAgbnVsbCAhPT0gZmliZXIgJiYgKHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlKSk7XG4gICAgICAgIGlmIChudWxsICE9PSBzdXNwZW5zZVN0YXRlKSByZXR1cm4gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICAgICAgaWYgKGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpICE9PSBmaWJlcilcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChmaWJlcikge1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgICAgIGFsdGVybmF0ZSA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpO1xuICAgICAgICBpZiAobnVsbCA9PT0gYWx0ZXJuYXRlKVxuICAgICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICAgICAgcmV0dXJuIGFsdGVybmF0ZSAhPT0gZmliZXIgPyBudWxsIDogZmliZXI7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBhID0gZmliZXIsIGIgPSBhbHRlcm5hdGU7IDsgKSB7XG4gICAgICAgIHZhciBwYXJlbnRBID0gYS5yZXR1cm47XG4gICAgICAgIGlmIChudWxsID09PSBwYXJlbnRBKSBicmVhaztcbiAgICAgICAgdmFyIHBhcmVudEIgPSBwYXJlbnRBLmFsdGVybmF0ZTtcbiAgICAgICAgaWYgKG51bGwgPT09IHBhcmVudEIpIHtcbiAgICAgICAgICBiID0gcGFyZW50QS5yZXR1cm47XG4gICAgICAgICAgaWYgKG51bGwgIT09IGIpIHtcbiAgICAgICAgICAgIGEgPSBiO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICAgICAgZm9yIChwYXJlbnRCID0gcGFyZW50QS5jaGlsZDsgcGFyZW50QjsgKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50QiA9PT0gYSkgcmV0dXJuIGFzc2VydElzTW91bnRlZChwYXJlbnRBKSwgZmliZXI7XG4gICAgICAgICAgICBpZiAocGFyZW50QiA9PT0gYikgcmV0dXJuIGFzc2VydElzTW91bnRlZChwYXJlbnRBKSwgYWx0ZXJuYXRlO1xuICAgICAgICAgICAgcGFyZW50QiA9IHBhcmVudEIuc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLnJldHVybiAhPT0gYi5yZXR1cm4pIChhID0gcGFyZW50QSksIChiID0gcGFyZW50Qik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvciAodmFyIGRpZEZpbmRDaGlsZCA9ICExLCBfY2hpbGQgPSBwYXJlbnRBLmNoaWxkOyBfY2hpbGQ7ICkge1xuICAgICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgICAgIGZvciAoX2NoaWxkID0gcGFyZW50Qi5jaGlsZDsgX2NoaWxkOyApIHtcbiAgICAgICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9ICEwO1xuICAgICAgICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGlkRmluZENoaWxkKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkNoaWxkIHdhcyBub3QgZm91bmQgaW4gZWl0aGVyIHBhcmVudCBzZXQuIFRoaXMgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0IHJlbGF0ZWQgdG8gdGhlIHJldHVybiBwb2ludGVyLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5hbHRlcm5hdGUgIT09IGIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlJldHVybiBmaWJlcnMgc2hvdWxkIGFsd2F5cyBiZSBlYWNoIG90aGVycycgYWx0ZXJuYXRlcy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoMyAhPT0gYS50YWcpXG4gICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICAgIHJldHVybiBhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhID8gZmliZXIgOiBhbHRlcm5hdGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChub2RlKSB7XG4gICAgICB2YXIgdGFnID0gbm9kZS50YWc7XG4gICAgICBpZiAoNSA9PT0gdGFnIHx8IDI2ID09PSB0YWcgfHwgMjcgPT09IHRhZyB8fCA2ID09PSB0YWcpIHJldHVybiBub2RlO1xuICAgICAgZm9yIChub2RlID0gbm9kZS5jaGlsZDsgbnVsbCAhPT0gbm9kZTsgKSB7XG4gICAgICAgIHRhZyA9IGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChub2RlKTtcbiAgICAgICAgaWYgKG51bGwgIT09IHRhZykgcmV0dXJuIHRhZztcbiAgICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICAgIGlmIChudWxsID09PSBtYXliZUl0ZXJhYmxlIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIG1heWJlSXRlcmFibGUgPVxuICAgICAgICAoTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSkgfHxcbiAgICAgICAgbWF5YmVJdGVyYWJsZVtcIkBAaXRlcmF0b3JcIl07XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSA/IG1heWJlSXRlcmFibGUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgcmV0dXJuIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0VcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgICBjYXNlIFJFQUNUX0FDVElWSVRZX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiQWN0aXZpdHlcIjtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHR5cGUudGFnICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgdHlwZS4kJHR5cGVvZilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLlByb3ZpZGVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLkNvbnN1bWVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgdmFyIGlubmVyVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0eXBlIHx8XG4gICAgICAgICAgICAgICgodHlwZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCBcIlwiKSxcbiAgICAgICAgICAgICAgKHR5cGUgPSBcIlwiICE9PSB0eXBlID8gXCJGb3J3YXJkUmVmKFwiICsgdHlwZSArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGlubmVyVHlwZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgID8gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIk1lbW9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIGlubmVyVHlwZSA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZShpbm5lclR5cGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbU93bmVyKG93bmVyKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXJcIiA9PT0gdHlwZW9mIG93bmVyLnRhZ1xuICAgICAgICA/IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIob3duZXIpXG4gICAgICAgIDogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG93bmVyLm5hbWVcbiAgICAgICAgICA/IG93bmVyLm5hbWVcbiAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHtcbiAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgcmV0dXJuIFwiQWN0aXZpdHlcIjtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZXR1cm4gXCJDYWNoZVwiO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLkNvbnN1bWVyXCI7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuICh0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLlByb3ZpZGVyXCI7XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgcmV0dXJuIFwiRGVoeWRyYXRlZEZyYWdtZW50XCI7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChmaWJlciA9IHR5cGUucmVuZGVyKSxcbiAgICAgICAgICAgIChmaWJlciA9IGZpYmVyLmRpc3BsYXlOYW1lIHx8IGZpYmVyLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICB0eXBlLmRpc3BsYXlOYW1lIHx8XG4gICAgICAgICAgICAgIChcIlwiICE9PSBmaWJlciA/IFwiRm9yd2FyZFJlZihcIiArIGZpYmVyICsgXCIpXCIgOiBcIkZvcndhcmRSZWZcIilcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFwiUG9ydGFsXCI7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gXCJSb290XCI7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gXCJUZXh0XCI7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID8gXCJTdHJpY3RNb2RlXCIgOiBcIk1vZGVcIjtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICByZXR1cm4gXCJPZmZzY3JlZW5cIjtcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICByZXR1cm4gXCJQcm9maWxlclwiO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHJldHVybiBcIlNjb3BlXCI7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICByZXR1cm4gXCJUcmFjaW5nTWFya2VyXCI7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICAgICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICB0eXBlID0gZmliZXIuX2RlYnVnSW5mbztcbiAgICAgICAgICBpZiAobnVsbCAhPSB0eXBlKVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHR5cGUubGVuZ3RoIC0gMTsgMCA8PSBpOyBpLS0pXG4gICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZVtpXS5uYW1lKSByZXR1cm4gdHlwZVtpXS5uYW1lO1xuICAgICAgICAgIGlmIChudWxsICE9PSBmaWJlci5yZXR1cm4pXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlci5yZXR1cm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUN1cnNvcihkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB7IGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZSB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3AoY3Vyc29yLCBmaWJlcikge1xuICAgICAgMCA+IGluZGV4JGpzY29tcCQwXG4gICAgICAgID8gY29uc29sZS5lcnJvcihcIlVuZXhwZWN0ZWQgcG9wLlwiKVxuICAgICAgICA6IChmaWJlciAhPT0gZmliZXJTdGFja1tpbmRleCRqc2NvbXAkMF0gJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJVbmV4cGVjdGVkIEZpYmVyIHBvcHBlZC5cIiksXG4gICAgICAgICAgKGN1cnNvci5jdXJyZW50ID0gdmFsdWVTdGFja1tpbmRleCRqc2NvbXAkMF0pLFxuICAgICAgICAgICh2YWx1ZVN0YWNrW2luZGV4JGpzY29tcCQwXSA9IG51bGwpLFxuICAgICAgICAgIChmaWJlclN0YWNrW2luZGV4JGpzY29tcCQwXSA9IG51bGwpLFxuICAgICAgICAgIGluZGV4JGpzY29tcCQwLS0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUsIGZpYmVyKSB7XG4gICAgICBpbmRleCRqc2NvbXAkMCsrO1xuICAgICAgdmFsdWVTdGFja1tpbmRleCRqc2NvbXAkMF0gPSBjdXJzb3IuY3VycmVudDtcbiAgICAgIGZpYmVyU3RhY2tbaW5kZXgkanNjb21wJDBdID0gZmliZXI7XG4gICAgICBjdXJzb3IuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1aXJlZENvbnRleHQoYykge1xuICAgICAgbnVsbCA9PT0gYyAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgaG9zdCBjb250ZXh0IHRvIGV4aXN0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaEhvc3RDb250YWluZXIoZmliZXIsIG5leHRSb290SW5zdGFuY2UpIHtcbiAgICAgIHB1c2gocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIG5leHRSb290SW5zdGFuY2UsIGZpYmVyKTtcbiAgICAgIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbnVsbCwgZmliZXIpO1xuICAgICAgdmFyIG5leHRSb290Q29udGV4dCA9IG5leHRSb290SW5zdGFuY2Uubm9kZVR5cGU7XG4gICAgICBzd2l0Y2ggKG5leHRSb290Q29udGV4dCkge1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgbmV4dFJvb3RDb250ZXh0ID0gOSA9PT0gbmV4dFJvb3RDb250ZXh0ID8gXCIjZG9jdW1lbnRcIiA6IFwiI2ZyYWdtZW50XCI7XG4gICAgICAgICAgbmV4dFJvb3RJbnN0YW5jZSA9IChuZXh0Um9vdEluc3RhbmNlID1cbiAgICAgICAgICAgIG5leHRSb290SW5zdGFuY2UuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgICAgICAgPyAobmV4dFJvb3RJbnN0YW5jZSA9IG5leHRSb290SW5zdGFuY2UubmFtZXNwYWNlVVJJKVxuICAgICAgICAgICAgICA/IGdldE93bkhvc3RDb250ZXh0KG5leHRSb290SW5zdGFuY2UpXG4gICAgICAgICAgICAgIDogSG9zdENvbnRleHROYW1lc3BhY2VOb25lXG4gICAgICAgICAgICA6IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoKG5leHRSb290Q29udGV4dCA9IG5leHRSb290SW5zdGFuY2UudGFnTmFtZSksXG4gICAgICAgICAgICAobmV4dFJvb3RJbnN0YW5jZSA9IG5leHRSb290SW5zdGFuY2UubmFtZXNwYWNlVVJJKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICAobmV4dFJvb3RJbnN0YW5jZSA9IGdldE93bkhvc3RDb250ZXh0KG5leHRSb290SW5zdGFuY2UpKSxcbiAgICAgICAgICAgICAgKG5leHRSb290SW5zdGFuY2UgPSBnZXRDaGlsZEhvc3RDb250ZXh0UHJvZChcbiAgICAgICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlLFxuICAgICAgICAgICAgICAgIG5leHRSb290Q29udGV4dFxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBzd2l0Y2ggKG5leHRSb290Q29udGV4dCkge1xuICAgICAgICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgICAgICAgICAgbmV4dFJvb3RJbnN0YW5jZSA9IEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwibWF0aFwiOlxuICAgICAgICAgICAgICAgIG5leHRSb290SW5zdGFuY2UgPSBIb3N0Q29udGV4dE5hbWVzcGFjZU1hdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgbmV4dFJvb3RJbnN0YW5jZSA9IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5leHRSb290Q29udGV4dCA9IG5leHRSb290Q29udGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgbmV4dFJvb3RDb250ZXh0ID0gdXBkYXRlZEFuY2VzdG9ySW5mb0RldihudWxsLCBuZXh0Um9vdENvbnRleHQpO1xuICAgICAgbmV4dFJvb3RDb250ZXh0ID0ge1xuICAgICAgICBjb250ZXh0OiBuZXh0Um9vdEluc3RhbmNlLFxuICAgICAgICBhbmNlc3RvckluZm86IG5leHRSb290Q29udGV4dFxuICAgICAgfTtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBuZXh0Um9vdENvbnRleHQsIGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wSG9zdENvbnRhaW5lcihmaWJlcikge1xuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBwb3Aocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SG9zdENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gICAgICBudWxsICE9PSBmaWJlci5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgIHB1c2goaG9zdFRyYW5zaXRpb25Qcm92aWRlckN1cnNvciwgZmliZXIsIGZpYmVyKTtcbiAgICAgIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgIHZhciBuZXh0Q29udGV4dCA9IGdldENoaWxkSG9zdENvbnRleHRQcm9kKGNvbnRleHQuY29udGV4dCwgdHlwZSk7XG4gICAgICB0eXBlID0gdXBkYXRlZEFuY2VzdG9ySW5mb0Rldihjb250ZXh0LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICBuZXh0Q29udGV4dCA9IHsgY29udGV4dDogbmV4dENvbnRleHQsIGFuY2VzdG9ySW5mbzogdHlwZSB9O1xuICAgICAgY29udGV4dCAhPT0gbmV4dENvbnRleHQgJiZcbiAgICAgICAgKHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlciksXG4gICAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBuZXh0Q29udGV4dCwgZmliZXIpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wSG9zdENvbnRleHQoZmliZXIpIHtcbiAgICAgIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLmN1cnJlbnQgPT09IGZpYmVyICYmXG4gICAgICAgIChwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlciksIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpKTtcbiAgICAgIGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IuY3VycmVudCA9PT0gZmliZXIgJiZcbiAgICAgICAgKHBvcChob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yLCBmaWJlciksXG4gICAgICAgIChIb3N0VHJhbnNpdGlvbkNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IE5vdFBlbmRpbmdUcmFuc2l0aW9uKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHR5cGVOYW1lKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU3ltYm9sICYmXG4gICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkgfHxcbiAgICAgICAgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICBcIk9iamVjdFwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSksICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgYXR0cmlidXRlTmFtZSkge1xuICAgICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgcHJvdmlkZWQgYCVzYCBhdHRyaWJ1dGUgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgICBhdHRyaWJ1dGVOYW1lLFxuICAgICAgICAgICAgdHlwZU5hbWUodmFsdWUpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrQ1NTUHJvcGVydHlTdHJpbmdDb2VyY2lvbih2YWx1ZSwgcHJvcE5hbWUpIHtcbiAgICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGAlc2AgQ1NTIHByb3BlcnR5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgICB0eXBlTmFtZSh2YWx1ZSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tGb3JtRmllbGRWYWx1ZVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkZvcm0gZmllbGQgdmFsdWVzICh2YWx1ZSwgY2hlY2tlZCwgZGVmYXVsdFZhbHVlLCBvciBkZWZhdWx0Q2hlY2tlZCBwcm9wcykgbXVzdCBiZSBzdHJpbmdzLCBub3QgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgICAgdHlwZU5hbWUodmFsdWUpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluamVjdEludGVybmFscyhpbnRlcm5hbHMpIHtcbiAgICAgIGlmIChcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKSByZXR1cm4gITE7XG4gICAgICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbiAgICAgIGlmIChob29rLmlzRGlzYWJsZWQpIHJldHVybiAhMDtcbiAgICAgIGlmICghaG9vay5zdXBwb3J0c0ZpYmVyKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBSZWFjdCBEZXZUb29scyBpcyB0b28gb2xkIGFuZCB3aWxsIG5vdCB3b3JrIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSZWFjdC4gUGxlYXNlIHVwZGF0ZSBSZWFjdCBEZXZUb29scy4gaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9yZWFjdC1kZXZ0b29sc1wiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAhMFxuICAgICAgICApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgKHJlbmRlcmVySUQgPSBob29rLmluamVjdChpbnRlcm5hbHMpKSwgKGluamVjdGVkSG9vayA9IGhvb2spO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzLlwiLCBlcnIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhvb2suY2hlY2tEQ0UgPyAhMCA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhuZXdJc1N0cmljdE1vZGUpIHtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGxvZyQxICYmXG4gICAgICAgIHVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlKG5ld0lzU3RyaWN0TW9kZSk7XG4gICAgICBpZiAoaW5qZWN0ZWRIb29rICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5zZXRTdHJpY3RNb2RlKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluamVjdGVkSG9vay5zZXRTdHJpY3RNb2RlKHJlbmRlcmVySUQsIG5ld0lzU3RyaWN0TW9kZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yIHx8XG4gICAgICAgICAgICAoKGhhc0xvZ2dlZEVycm9yID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsXG4gICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5qZWN0UHJvZmlsaW5nSG9va3MocHJvZmlsaW5nSG9va3MpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MgPSBwcm9maWxpbmdIb29rcztcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0NvbW1pdFN0b3BwZWQoKSB7XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbW1pdFN0b3BwZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tbWl0U3RvcHBlZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZChmaWJlcikge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZChmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCkge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUmVuZGVyU3RhcnRlZChsYW5lcykge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdGFydGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUmVuZGVyU3RvcHBlZCgpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU3RvcHBlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdG9wcGVkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSkge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsejMyRmFsbGJhY2soeCkge1xuICAgICAgeCA+Pj49IDA7XG4gICAgICByZXR1cm4gMCA9PT0geCA/IDMyIDogKDMxIC0gKChsb2coeCkgLyBMTjIpIHwgMCkpIHwgMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TGFiZWxGb3JMYW5lKGxhbmUpIHtcbiAgICAgIGlmIChsYW5lICYgMSkgcmV0dXJuIFwiU3luY0h5ZHJhdGlvbkxhbmVcIjtcbiAgICAgIGlmIChsYW5lICYgMikgcmV0dXJuIFwiU3luY1wiO1xuICAgICAgaWYgKGxhbmUgJiA0KSByZXR1cm4gXCJJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25cIjtcbiAgICAgIGlmIChsYW5lICYgOCkgcmV0dXJuIFwiSW5wdXRDb250aW51b3VzXCI7XG4gICAgICBpZiAobGFuZSAmIDE2KSByZXR1cm4gXCJEZWZhdWx0SHlkcmF0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDMyKSByZXR1cm4gXCJEZWZhdWx0XCI7XG4gICAgICBpZiAobGFuZSAmIDEyOCkgcmV0dXJuIFwiVHJhbnNpdGlvbkh5ZHJhdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiA0MTk0MDQ4KSByZXR1cm4gXCJUcmFuc2l0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDYyOTE0NTYwKSByZXR1cm4gXCJSZXRyeVwiO1xuICAgICAgaWYgKGxhbmUgJiA2NzEwODg2NCkgcmV0dXJuIFwiU2VsZWN0aXZlSHlkcmF0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDEzNDIxNzcyOCkgcmV0dXJuIFwiSWRsZUh5ZHJhdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiAyNjg0MzU0NTYpIHJldHVybiBcIklkbGVcIjtcbiAgICAgIGlmIChsYW5lICYgNTM2ODcwOTEyKSByZXR1cm4gXCJPZmZzY3JlZW5cIjtcbiAgICAgIGlmIChsYW5lICYgMTA3Mzc0MTgyNCkgcmV0dXJuIFwiRGVmZXJyZWRcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgICAgIHZhciBwZW5kaW5nU3luY0xhbmVzID0gbGFuZXMgJiA0MjtcbiAgICAgIGlmICgwICE9PSBwZW5kaW5nU3luY0xhbmVzKSByZXR1cm4gcGVuZGluZ1N5bmNMYW5lcztcbiAgICAgIHN3aXRjaCAobGFuZXMgJiAtbGFuZXMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICByZXR1cm4gMzI7XG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICByZXR1cm4gMTI4O1xuICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgY2FzZSA1MTI6XG4gICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgY2FzZSAyMDQ4OlxuICAgICAgICBjYXNlIDQwOTY6XG4gICAgICAgIGNhc2UgODE5MjpcbiAgICAgICAgY2FzZSAxNjM4NDpcbiAgICAgICAgY2FzZSAzMjc2ODpcbiAgICAgICAgY2FzZSA2NTUzNjpcbiAgICAgICAgY2FzZSAxMzEwNzI6XG4gICAgICAgIGNhc2UgMjYyMTQ0OlxuICAgICAgICBjYXNlIDUyNDI4ODpcbiAgICAgICAgY2FzZSAxMDQ4NTc2OlxuICAgICAgICBjYXNlIDIwOTcxNTI6XG4gICAgICAgICAgcmV0dXJuIGxhbmVzICYgNDE5NDA0ODtcbiAgICAgICAgY2FzZSA0MTk0MzA0OlxuICAgICAgICBjYXNlIDgzODg2MDg6XG4gICAgICAgIGNhc2UgMTY3NzcyMTY6XG4gICAgICAgIGNhc2UgMzM1NTQ0MzI6XG4gICAgICAgICAgcmV0dXJuIGxhbmVzICYgNjI5MTQ1NjA7XG4gICAgICAgIGNhc2UgNjcxMDg4NjQ6XG4gICAgICAgICAgcmV0dXJuIDY3MTA4ODY0O1xuICAgICAgICBjYXNlIDEzNDIxNzcyODpcbiAgICAgICAgICByZXR1cm4gMTM0MjE3NzI4O1xuICAgICAgICBjYXNlIDI2ODQzNTQ1NjpcbiAgICAgICAgICByZXR1cm4gMjY4NDM1NDU2O1xuICAgICAgICBjYXNlIDUzNjg3MDkxMjpcbiAgICAgICAgICByZXR1cm4gNTM2ODcwOTEyO1xuICAgICAgICBjYXNlIDEwNzM3NDE4MjQ6XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiU2hvdWxkIGhhdmUgZm91bmQgbWF0Y2hpbmcgbGFuZXMuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5leHRMYW5lcyhyb290LCB3aXBMYW5lcywgcm9vdEhhc1BlbmRpbmdDb21taXQpIHtcbiAgICAgIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgICAgIGlmICgwID09PSBwZW5kaW5nTGFuZXMpIHJldHVybiAwO1xuICAgICAgdmFyIG5leHRMYW5lcyA9IDAsXG4gICAgICAgIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcyxcbiAgICAgICAgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzO1xuICAgICAgcm9vdCA9IHJvb3Qud2FybUxhbmVzO1xuICAgICAgdmFyIG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiAxMzQyMTc3Mjc7XG4gICAgICAwICE9PSBub25JZGxlUGVuZGluZ0xhbmVzXG4gICAgICAgID8gKChwZW5kaW5nTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzKSxcbiAgICAgICAgICAwICE9PSBwZW5kaW5nTGFuZXNcbiAgICAgICAgICAgID8gKG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBlbmRpbmdMYW5lcykpXG4gICAgICAgICAgICA6ICgocGluZ2VkTGFuZXMgJj0gbm9uSWRsZVBlbmRpbmdMYW5lcyksXG4gICAgICAgICAgICAgIDAgIT09IHBpbmdlZExhbmVzXG4gICAgICAgICAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGluZ2VkTGFuZXMpKVxuICAgICAgICAgICAgICAgIDogcm9vdEhhc1BlbmRpbmdDb21taXQgfHxcbiAgICAgICAgICAgICAgICAgICgocm9vdEhhc1BlbmRpbmdDb21taXQgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnJvb3QpLFxuICAgICAgICAgICAgICAgICAgMCAhPT0gcm9vdEhhc1BlbmRpbmdDb21taXQgJiZcbiAgICAgICAgICAgICAgICAgICAgKG5leHRMYW5lcyA9XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocm9vdEhhc1BlbmRpbmdDb21taXQpKSkpKVxuICAgICAgICA6ICgobm9uSWRsZVBlbmRpbmdMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcyksXG4gICAgICAgICAgMCAhPT0gbm9uSWRsZVBlbmRpbmdMYW5lc1xuICAgICAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVBlbmRpbmdMYW5lcykpXG4gICAgICAgICAgICA6IDAgIT09IHBpbmdlZExhbmVzXG4gICAgICAgICAgICAgID8gKG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBpbmdlZExhbmVzKSlcbiAgICAgICAgICAgICAgOiByb290SGFzUGVuZGluZ0NvbW1pdCB8fFxuICAgICAgICAgICAgICAgICgocm9vdEhhc1BlbmRpbmdDb21taXQgPSBwZW5kaW5nTGFuZXMgJiB+cm9vdCksXG4gICAgICAgICAgICAgICAgMCAhPT0gcm9vdEhhc1BlbmRpbmdDb21taXQgJiZcbiAgICAgICAgICAgICAgICAgIChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhyb290SGFzUGVuZGluZ0NvbW1pdCkpKSk7XG4gICAgICByZXR1cm4gMCA9PT0gbmV4dExhbmVzXG4gICAgICAgID8gMFxuICAgICAgICA6IDAgIT09IHdpcExhbmVzICYmXG4gICAgICAgICAgICB3aXBMYW5lcyAhPT0gbmV4dExhbmVzICYmXG4gICAgICAgICAgICAwID09PSAod2lwTGFuZXMgJiBzdXNwZW5kZWRMYW5lcykgJiZcbiAgICAgICAgICAgICgoc3VzcGVuZGVkTGFuZXMgPSBuZXh0TGFuZXMgJiAtbmV4dExhbmVzKSxcbiAgICAgICAgICAgIChyb290SGFzUGVuZGluZ0NvbW1pdCA9IHdpcExhbmVzICYgLXdpcExhbmVzKSxcbiAgICAgICAgICAgIHN1c3BlbmRlZExhbmVzID49IHJvb3RIYXNQZW5kaW5nQ29tbWl0IHx8XG4gICAgICAgICAgICAgICgzMiA9PT0gc3VzcGVuZGVkTGFuZXMgJiYgMCAhPT0gKHJvb3RIYXNQZW5kaW5nQ29tbWl0ICYgNDE5NDA0OCkpKVxuICAgICAgICAgID8gd2lwTGFuZXNcbiAgICAgICAgICA6IG5leHRMYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCByZW5kZXJMYW5lcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgMCA9PT1cbiAgICAgICAgKHJvb3QucGVuZGluZ0xhbmVzICZcbiAgICAgICAgICB+KHJvb3Quc3VzcGVuZGVkTGFuZXMgJiB+cm9vdC5waW5nZWRMYW5lcykgJlxuICAgICAgICAgIHJlbmRlckxhbmVzKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKSB7XG4gICAgICBzd2l0Y2ggKGxhbmUpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICBjYXNlIDI6XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgIHJldHVybiBjdXJyZW50VGltZSArIDI1MDtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgIGNhc2UgMjU2OlxuICAgICAgICBjYXNlIDUxMjpcbiAgICAgICAgY2FzZSAxMDI0OlxuICAgICAgICBjYXNlIDIwNDg6XG4gICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgY2FzZSA4MTkyOlxuICAgICAgICBjYXNlIDE2Mzg0OlxuICAgICAgICBjYXNlIDMyNzY4OlxuICAgICAgICBjYXNlIDY1NTM2OlxuICAgICAgICBjYXNlIDEzMTA3MjpcbiAgICAgICAgY2FzZSAyNjIxNDQ6XG4gICAgICAgIGNhc2UgNTI0Mjg4OlxuICAgICAgICBjYXNlIDEwNDg1NzY6XG4gICAgICAgIGNhc2UgMjA5NzE1MjpcbiAgICAgICAgICByZXR1cm4gY3VycmVudFRpbWUgKyA1ZTM7XG4gICAgICAgIGNhc2UgNDE5NDMwNDpcbiAgICAgICAgY2FzZSA4Mzg4NjA4OlxuICAgICAgICBjYXNlIDE2Nzc3MjE2OlxuICAgICAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgY2FzZSA2NzEwODg2NDpcbiAgICAgICAgY2FzZSAxMzQyMTc3Mjg6XG4gICAgICAgIGNhc2UgMjY4NDM1NDU2OlxuICAgICAgICBjYXNlIDUzNjg3MDkxMjpcbiAgICAgICAgY2FzZSAxMDczNzQxODI0OlxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC0xXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKSB7XG4gICAgICB2YXIgbGFuZSA9IG5leHRUcmFuc2l0aW9uTGFuZTtcbiAgICAgIG5leHRUcmFuc2l0aW9uTGFuZSA8PD0gMTtcbiAgICAgIDAgPT09IChuZXh0VHJhbnNpdGlvbkxhbmUgJiA0MTk0MDQ4KSAmJiAobmV4dFRyYW5zaXRpb25MYW5lID0gMjU2KTtcbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGFpbU5leHRSZXRyeUxhbmUoKSB7XG4gICAgICB2YXIgbGFuZSA9IG5leHRSZXRyeUxhbmU7XG4gICAgICBuZXh0UmV0cnlMYW5lIDw8PSAxO1xuICAgICAgMCA9PT0gKG5leHRSZXRyeUxhbmUgJiA2MjkxNDU2MCkgJiYgKG5leHRSZXRyeUxhbmUgPSA0MTk0MzA0KTtcbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVMYW5lTWFwKGluaXRpYWwpIHtcbiAgICAgIGZvciAodmFyIGxhbmVNYXAgPSBbXSwgaSA9IDA7IDMxID4gaTsgaSsrKSBsYW5lTWFwLnB1c2goaW5pdGlhbCk7XG4gICAgICByZXR1cm4gbGFuZU1hcDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1Jvb3RVcGRhdGVkJDEocm9vdCwgdXBkYXRlTGFuZSkge1xuICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gdXBkYXRlTGFuZTtcbiAgICAgIDI2ODQzNTQ1NiAhPT0gdXBkYXRlTGFuZSAmJlxuICAgICAgICAoKHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwKSxcbiAgICAgICAgKHJvb3QucGluZ2VkTGFuZXMgPSAwKSxcbiAgICAgICAgKHJvb3Qud2FybUxhbmVzID0gMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKFxuICAgICAgcm9vdCxcbiAgICAgIGZpbmlzaGVkTGFuZXMsXG4gICAgICByZW1haW5pbmdMYW5lcyxcbiAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lc1xuICAgICkge1xuICAgICAgdmFyIHByZXZpb3VzbHlQZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgICAgIHJvb3QucGVuZGluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXM7XG4gICAgICByb290LnN1c3BlbmRlZExhbmVzID0gMDtcbiAgICAgIHJvb3QucGluZ2VkTGFuZXMgPSAwO1xuICAgICAgcm9vdC53YXJtTGFuZXMgPSAwO1xuICAgICAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gICAgICByb290LmVudGFuZ2xlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICAgICAgcm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgICAgIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlciA9IDA7XG4gICAgICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cyxcbiAgICAgICAgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXMsXG4gICAgICAgIGhpZGRlblVwZGF0ZXMgPSByb290LmhpZGRlblVwZGF0ZXM7XG4gICAgICBmb3IgKFxuICAgICAgICByZW1haW5pbmdMYW5lcyA9IHByZXZpb3VzbHlQZW5kaW5nTGFuZXMgJiB+cmVtYWluaW5nTGFuZXM7XG4gICAgICAgIDAgPCByZW1haW5pbmdMYW5lcztcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIocmVtYWluaW5nTGFuZXMpLFxuICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSA9IDA7XG4gICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSAtMTtcbiAgICAgICAgdmFyIGhpZGRlblVwZGF0ZXNGb3JMYW5lID0gaGlkZGVuVXBkYXRlc1tpbmRleF07XG4gICAgICAgIGlmIChudWxsICE9PSBoaWRkZW5VcGRhdGVzRm9yTGFuZSlcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgaGlkZGVuVXBkYXRlc1tpbmRleF0gPSBudWxsLCBpbmRleCA9IDA7XG4gICAgICAgICAgICBpbmRleCA8IGhpZGRlblVwZGF0ZXNGb3JMYW5lLmxlbmd0aDtcbiAgICAgICAgICAgIGluZGV4KytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSBoaWRkZW5VcGRhdGVzRm9yTGFuZVtpbmRleF07XG4gICAgICAgICAgICBudWxsICE9PSB1cGRhdGUgJiYgKHVwZGF0ZS5sYW5lICY9IC01MzY4NzA5MTMpO1xuICAgICAgICAgIH1cbiAgICAgICAgcmVtYWluaW5nTGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgICAwICE9PSBzcGF3bmVkTGFuZSAmJiBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgMCk7XG4gICAgICAwICE9PSBzdXNwZW5kZWRSZXRyeUxhbmVzICYmXG4gICAgICAgIDAgPT09IHVwZGF0ZWRMYW5lcyAmJlxuICAgICAgICAwICE9PSByb290LnRhZyAmJlxuICAgICAgICAocm9vdC5zdXNwZW5kZWRMYW5lcyB8PVxuICAgICAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXMgJiB+KHByZXZpb3VzbHlQZW5kaW5nTGFuZXMgJiB+ZmluaXNoZWRMYW5lcykpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgZW50YW5nbGVkTGFuZXMpIHtcbiAgICAgIHJvb3QucGVuZGluZ0xhbmVzIHw9IHNwYXduZWRMYW5lO1xuICAgICAgcm9vdC5zdXNwZW5kZWRMYW5lcyAmPSB+c3Bhd25lZExhbmU7XG4gICAgICB2YXIgc3Bhd25lZExhbmVJbmRleCA9IDMxIC0gY2x6MzIoc3Bhd25lZExhbmUpO1xuICAgICAgcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBzcGF3bmVkTGFuZTtcbiAgICAgIHJvb3QuZW50YW5nbGVtZW50c1tzcGF3bmVkTGFuZUluZGV4XSA9XG4gICAgICAgIHJvb3QuZW50YW5nbGVtZW50c1tzcGF3bmVkTGFuZUluZGV4XSB8XG4gICAgICAgIDEwNzM3NDE4MjQgfFxuICAgICAgICAoZW50YW5nbGVkTGFuZXMgJiA0MTk0MDkwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgZW50YW5nbGVkTGFuZXMpIHtcbiAgICAgIHZhciByb290RW50YW5nbGVkTGFuZXMgPSAocm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBlbnRhbmdsZWRMYW5lcyk7XG4gICAgICBmb3IgKHJvb3QgPSByb290LmVudGFuZ2xlbWVudHM7IHJvb3RFbnRhbmdsZWRMYW5lczsgKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIocm9vdEVudGFuZ2xlZExhbmVzKSxcbiAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgKGxhbmUgJiBlbnRhbmdsZWRMYW5lcykgfCAocm9vdFtpbmRleF0gJiBlbnRhbmdsZWRMYW5lcykgJiZcbiAgICAgICAgICAocm9vdFtpbmRleF0gfD0gZW50YW5nbGVkTGFuZXMpO1xuICAgICAgICByb290RW50YW5nbGVkTGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb25CeUxhbmUobGFuZSkge1xuICAgICAgc3dpdGNoIChsYW5lKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBsYW5lID0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIGxhbmUgPSA0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIGxhbmUgPSAxNjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgIGNhc2UgNTEyOlxuICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgY2FzZSA0MDk2OlxuICAgICAgICBjYXNlIDgxOTI6XG4gICAgICAgIGNhc2UgMTYzODQ6XG4gICAgICAgIGNhc2UgMzI3Njg6XG4gICAgICAgIGNhc2UgNjU1MzY6XG4gICAgICAgIGNhc2UgMTMxMDcyOlxuICAgICAgICBjYXNlIDI2MjE0NDpcbiAgICAgICAgY2FzZSA1MjQyODg6XG4gICAgICAgIGNhc2UgMTA0ODU3NjpcbiAgICAgICAgY2FzZSAyMDk3MTUyOlxuICAgICAgICBjYXNlIDQxOTQzMDQ6XG4gICAgICAgIGNhc2UgODM4ODYwODpcbiAgICAgICAgY2FzZSAxNjc3NzIxNjpcbiAgICAgICAgY2FzZSAzMzU1NDQzMjpcbiAgICAgICAgICBsYW5lID0gMTI4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2ODQzNTQ1NjpcbiAgICAgICAgICBsYW5lID0gMTM0MjE3NzI4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxhbmUgPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZEZpYmVyVG9MYW5lc01hcChyb290LCBmaWJlciwgbGFuZXMpIHtcbiAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudClcbiAgICAgICAgZm9yIChyb290ID0gcm9vdC5wZW5kaW5nVXBkYXRlcnNMYW5lTWFwOyAwIDwgbGFuZXM7ICkge1xuICAgICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIobGFuZXMpLFxuICAgICAgICAgICAgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICAgICAgcm9vdFtpbmRleF0uYWRkKGZpYmVyKTtcbiAgICAgICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtb3ZlUGVuZGluZ0ZpYmVyc1RvTWVtb2l6ZWQocm9vdCwgbGFuZXMpIHtcbiAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudClcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB2YXIgcGVuZGluZ1VwZGF0ZXJzTGFuZU1hcCA9IHJvb3QucGVuZGluZ1VwZGF0ZXJzTGFuZU1hcCxcbiAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG4gICAgICAgICAgMCA8IGxhbmVzO1xuXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIobGFuZXMpO1xuICAgICAgICAgIHJvb3QgPSAxIDw8IGluZGV4O1xuICAgICAgICAgIGluZGV4ID0gcGVuZGluZ1VwZGF0ZXJzTGFuZU1hcFtpbmRleF07XG4gICAgICAgICAgMCA8IGluZGV4LnNpemUgJiZcbiAgICAgICAgICAgIChpbmRleC5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgICAobnVsbCAhPT0gYWx0ZXJuYXRlICYmIG1lbW9pemVkVXBkYXRlcnMuaGFzKGFsdGVybmF0ZSkpIHx8XG4gICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycy5hZGQoZmliZXIpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBpbmRleC5jbGVhcigpKTtcbiAgICAgICAgICBsYW5lcyAmPSB+cm9vdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsYW5lc1RvRXZlbnRQcmlvcml0eShsYW5lcykge1xuICAgICAgbGFuZXMgJj0gLWxhbmVzO1xuICAgICAgcmV0dXJuIDAgIT09IERpc2NyZXRlRXZlbnRQcmlvcml0eSAmJiBEaXNjcmV0ZUV2ZW50UHJpb3JpdHkgPCBsYW5lc1xuICAgICAgICA/IDAgIT09IENvbnRpbnVvdXNFdmVudFByaW9yaXR5ICYmIENvbnRpbnVvdXNFdmVudFByaW9yaXR5IDwgbGFuZXNcbiAgICAgICAgICA/IDAgIT09IChsYW5lcyAmIDEzNDIxNzcyNylcbiAgICAgICAgICAgID8gRGVmYXVsdEV2ZW50UHJpb3JpdHlcbiAgICAgICAgICAgIDogSWRsZUV2ZW50UHJpb3JpdHlcbiAgICAgICAgICA6IENvbnRpbnVvdXNFdmVudFByaW9yaXR5XG4gICAgICAgIDogRGlzY3JldGVFdmVudFByaW9yaXR5O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlVXBkYXRlUHJpb3JpdHkoKSB7XG4gICAgICB2YXIgdXBkYXRlUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgaWYgKDAgIT09IHVwZGF0ZVByaW9yaXR5KSByZXR1cm4gdXBkYXRlUHJpb3JpdHk7XG4gICAgICB1cGRhdGVQcmlvcml0eSA9IHdpbmRvdy5ldmVudDtcbiAgICAgIHJldHVybiB2b2lkIDAgPT09IHVwZGF0ZVByaW9yaXR5XG4gICAgICAgID8gRGVmYXVsdEV2ZW50UHJpb3JpdHlcbiAgICAgICAgOiBnZXRFdmVudFByaW9yaXR5KHVwZGF0ZVByaW9yaXR5LnR5cGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBydW5XaXRoUHJpb3JpdHkocHJpb3JpdHksIGZuKSB7XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmlvcml0eSksIGZuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNQcmlvcml0eTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGV0YWNoRGVsZXRlZEluc3RhbmNlKG5vZGUpIHtcbiAgICAgIGRlbGV0ZSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuICAgICAgZGVsZXRlIG5vZGVbaW50ZXJuYWxQcm9wc0tleV07XG4gICAgICBkZWxldGUgbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldO1xuICAgICAgZGVsZXRlIG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJMaXN0ZW5lcnNLZXldO1xuICAgICAgZGVsZXRlIG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXNTZXRLZXldO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXROb2RlKSB7XG4gICAgICB2YXIgdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG4gICAgICBpZiAodGFyZ2V0SW5zdCkgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgICBmb3IgKHZhciBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlOyBwYXJlbnROb2RlOyApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0YXJnZXRJbnN0ID1cbiAgICAgICAgICAgIHBhcmVudE5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gfHxcbiAgICAgICAgICAgIHBhcmVudE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0pXG4gICAgICAgICkge1xuICAgICAgICAgIHBhcmVudE5vZGUgPSB0YXJnZXRJbnN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsICE9PSB0YXJnZXRJbnN0LmNoaWxkIHx8XG4gICAgICAgICAgICAobnVsbCAhPT0gcGFyZW50Tm9kZSAmJiBudWxsICE9PSBwYXJlbnROb2RlLmNoaWxkKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIHRhcmdldE5vZGUgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgICBudWxsICE9PSB0YXJnZXROb2RlO1xuXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKChwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIHRhcmdldE5vZGUgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldE5vZGUgPSBwYXJlbnROb2RlO1xuICAgICAgICBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICAobm9kZSA9IG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHwgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSlcbiAgICAgICkge1xuICAgICAgICB2YXIgdGFnID0gbm9kZS50YWc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICA1ID09PSB0YWcgfHxcbiAgICAgICAgICA2ID09PSB0YWcgfHxcbiAgICAgICAgICAxMyA9PT0gdGFnIHx8XG4gICAgICAgICAgMjYgPT09IHRhZyB8fFxuICAgICAgICAgIDI3ID09PSB0YWcgfHxcbiAgICAgICAgICAzID09PSB0YWdcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICAgICAgdmFyIHRhZyA9IGluc3QudGFnO1xuICAgICAgaWYgKDUgPT09IHRhZyB8fCAyNiA9PT0gdGFnIHx8IDI3ID09PSB0YWcgfHwgNiA9PT0gdGFnKVxuICAgICAgICByZXR1cm4gaW5zdC5zdGF0ZU5vZGU7XG4gICAgICB0aHJvdyBFcnJvcihcImdldE5vZGVGcm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRSZXNvdXJjZXNGcm9tUm9vdChyb290KSB7XG4gICAgICB2YXIgcmVzb3VyY2VzID0gcm9vdFtpbnRlcm5hbFJvb3ROb2RlUmVzb3VyY2VzS2V5XTtcbiAgICAgIHJlc291cmNlcyB8fFxuICAgICAgICAocmVzb3VyY2VzID0gcm9vdFtpbnRlcm5hbFJvb3ROb2RlUmVzb3VyY2VzS2V5XSA9XG4gICAgICAgICAgeyBob2lzdGFibGVTdHlsZXM6IG5ldyBNYXAoKSwgaG9pc3RhYmxlU2NyaXB0czogbmV3IE1hcCgpIH0pO1xuICAgICAgcmV0dXJuIHJlc291cmNlcztcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya05vZGVBc0hvaXN0YWJsZShub2RlKSB7XG4gICAgICBub2RlW2ludGVybmFsSG9pc3RhYmxlTWFya2VyXSA9ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gICAgICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcyk7XG4gICAgICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUgKyBcIkNhcHR1cmVcIiwgZGVwZW5kZW5jaWVzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkV2ZW50UmVnaXN0cnk6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lIHJlZ2lzdHJhdGlvbiBuYW1lLCBgJXNgLlwiLFxuICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWVcbiAgICAgICAgKTtcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBkZXBlbmRlbmNpZXM7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSByZWdpc3RyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA9IHJlZ2lzdHJhdGlvbk5hbWU7XG4gICAgICBcIm9uRG91YmxlQ2xpY2tcIiA9PT0gcmVnaXN0cmF0aW9uTmFtZSAmJlxuICAgICAgICAocG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5vbmRibGNsaWNrID0gcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgICBmb3IgKFxuICAgICAgICByZWdpc3RyYXRpb25OYW1lID0gMDtcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUrK1xuICAgICAgKVxuICAgICAgICBhbGxOYXRpdmVFdmVudHMuYWRkKGRlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHModGFnTmFtZSwgcHJvcHMpIHtcbiAgICAgIGhhc1JlYWRPbmx5VmFsdWVbcHJvcHMudHlwZV0gfHxcbiAgICAgICAgcHJvcHMub25DaGFuZ2UgfHxcbiAgICAgICAgcHJvcHMub25JbnB1dCB8fFxuICAgICAgICBwcm9wcy5yZWFkT25seSB8fFxuICAgICAgICBwcm9wcy5kaXNhYmxlZCB8fFxuICAgICAgICBudWxsID09IHByb3BzLnZhbHVlIHx8XG4gICAgICAgIChcInNlbGVjdFwiID09PSB0YWdOYW1lXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiBgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmIHRoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgc2V0IGBvbkNoYW5nZWAuXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuIGBvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgdGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCBzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC5cIlxuICAgICAgICAgICAgKSk7XG4gICAgICBwcm9wcy5vbkNoYW5nZSB8fFxuICAgICAgICBwcm9wcy5yZWFkT25seSB8fFxuICAgICAgICBwcm9wcy5kaXNhYmxlZCB8fFxuICAgICAgICBudWxsID09IHByb3BzLmNoZWNrZWQgfHxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIllvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuIGBvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgdGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdENoZWNrZWRgLiBPdGhlcndpc2UsIHNldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQXR0cmlidXRlTmFtZVNhZmUoYXR0cmlidXRlTmFtZSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSlcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIGlmIChWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWC50ZXN0KGF0dHJpYnV0ZU5hbWUpKVxuICAgICAgICByZXR1cm4gKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9ICEwKTtcbiAgICAgIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSAhMDtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgXCIsIGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUZvckF0dHJpYnV0ZU9uQ3VzdG9tQ29tcG9uZW50KG5vZGUsIG5hbWUsIGV4cGVjdGVkKSB7XG4gICAgICBpZiAoaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXhwZWN0ZWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgIGlmICghMSA9PT0gZXhwZWN0ZWQpIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gZXhwZWN0ZWQgPyB2b2lkIDAgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgaWYgKFwiXCIgPT09IG5vZGUgJiYgITAgPT09IGV4cGVjdGVkKSByZXR1cm4gITA7XG4gICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24oZXhwZWN0ZWQsIG5hbWUpO1xuICAgICAgICByZXR1cm4gbm9kZSA9PT0gXCJcIiArIGV4cGVjdGVkID8gZXhwZWN0ZWQgOiBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRWYWx1ZUZvckF0dHJpYnV0ZShub2RlLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKGlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpXG4gICAgICAgIGlmIChudWxsID09PSB2YWx1ZSkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgIHZhciBwcmVmaXggPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgICAgIGlmIChcImRhdGEtXCIgIT09IHByZWZpeCAmJiBcImFyaWEtXCIgIT09IHByZWZpeCkge1xuICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBuYW1lKTtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCBcIlwiICsgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIGlmIChudWxsID09PSB2YWx1ZSkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBuYW1lKTtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgXCJcIiArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKG5vZGUsIG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIGlmIChudWxsID09PSB2YWx1ZSkgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBuYW1lKTtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUsIFwiXCIgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cbiAgICBmdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAgICAgIGlmICgwID09PSBkaXNhYmxlZERlcHRoKSB7XG4gICAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kO1xuICAgICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgICAgd3JpdGFibGU6ICEwXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGRpc2FibGVkRGVwdGgrKztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICAgICAgZGlzYWJsZWREZXB0aC0tO1xuICAgICAgaWYgKDAgPT09IGRpc2FibGVkRGVwdGgpIHtcbiAgICAgICAgdmFyIHByb3BzID0geyBjb25maWd1cmFibGU6ICEwLCBlbnVtZXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgICBsb2c6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZMb2cgfSksXG4gICAgICAgICAgaW5mbzogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkluZm8gfSksXG4gICAgICAgICAgd2FybjogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldldhcm4gfSksXG4gICAgICAgICAgZXJyb3I6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZFcnJvciB9KSxcbiAgICAgICAgICBncm91cDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwIH0pLFxuICAgICAgICAgIGdyb3VwQ29sbGFwc2VkOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWQgfSksXG4gICAgICAgICAgZ3JvdXBFbmQ6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cEVuZCB9KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIDAgPiBkaXNhYmxlZERlcHRoICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkge1xuICAgICAgaWYgKHZvaWQgMCA9PT0gcHJlZml4KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICAgIHByZWZpeCA9IChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgXCJcIjtcbiAgICAgICAgICBzdWZmaXggPVxuICAgICAgICAgICAgLTEgPCB4LnN0YWNrLmluZGV4T2YoXCJcXG4gICAgYXRcIilcbiAgICAgICAgICAgICAgPyBcIiAoPGFub255bW91cz4pXCJcbiAgICAgICAgICAgICAgOiAtMSA8IHguc3RhY2suaW5kZXhPZihcIkBcIilcbiAgICAgICAgICAgICAgICA/IFwiQHVua25vd246MDowXCJcbiAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBcIlxcblwiICsgcHJlZml4ICsgbmFtZSArIHN1ZmZpeDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gICAgICBpZiAoIWZuIHx8IHJlZW50cnkpIHJldHVybiBcIlwiO1xuICAgICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gZnJhbWUpIHJldHVybiBmcmFtZTtcbiAgICAgIHJlZW50cnkgPSAhMDtcbiAgICAgIGZyYW1lID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHZvaWQgMDtcbiAgICAgIHZhciBwcmV2aW91c0Rpc3BhdGNoZXIgPSBudWxsO1xuICAgICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBudWxsO1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBSdW5JblJvb3RGcmFtZSA9IHtcbiAgICAgICAgICBEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsIFwicHJvcHNcIiwge1xuICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBSZWZsZWN0ICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sID0geDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoeCQwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSB4JDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoeCQxKSB7XG4gICAgICAgICAgICAgICAgICBjb250cm9sID0geCQxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoRmFrZSA9IGZuKCkpICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBGYWtlLmNhdGNoICYmXG4gICAgICAgICAgICAgICAgICBGYWtlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgICAgICAgICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2FtcGxlLnN0YWNrKVxuICAgICAgICAgICAgICAgIHJldHVybiBbc2FtcGxlLnN0YWNrLCBjb250cm9sLnN0YWNrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPVxuICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCI7XG4gICAgICAgIHZhciBuYW1lUHJvcERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCxcbiAgICAgICAgICBcIm5hbWVcIlxuICAgICAgICApO1xuICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgJiZcbiAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IuY29uZmlndXJhYmxlICYmXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFxuICAgICAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgICAgICB7IHZhbHVlOiBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiIH1cbiAgICAgICAgICApO1xuICAgICAgICB2YXIgX1J1bkluUm9vdEZyYW1lJERldGVyID1cbiAgICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCgpLFxuICAgICAgICAgIHNhbXBsZVN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzBdLFxuICAgICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcbiAgICAgICAgaWYgKHNhbXBsZVN0YWNrICYmIGNvbnRyb2xTdGFjaykge1xuICAgICAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KFwiXFxuXCIpLFxuICAgICAgICAgICAgY29udHJvbExpbmVzID0gY29udHJvbFN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBuYW1lUHJvcERlc2NyaXB0b3IgPSAwO1xuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yIDwgc2FtcGxlTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAhc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvcisrO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPCBjb250cm9sTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAhY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICApXG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIrKztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fFxuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyID09PSBjb250cm9sTGluZXMubGVuZ3RoXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiZcbiAgICAgICAgICAgICAgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgJiZcbiAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgICBjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXTtcblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLTtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiYgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXI7XG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3ItLSwgX1J1bkluUm9vdEZyYW1lJERldGVyLS1cbiAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0gIT09XG4gICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKDEgIT09IG5hbWVQcm9wRGVzY3JpcHRvciB8fCAxICE9PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIpIHtcbiAgICAgICAgICAgICAgICBkb1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAobmFtZVByb3BEZXNjcmlwdG9yLS0sXG4gICAgICAgICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlci0tLFxuICAgICAgICAgICAgICAgICAgICAwID4gX1J1bkluUm9vdEZyYW1lJERldGVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPVxuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0ucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF0IG5ldyBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF0IFwiXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZm4uZGlzcGxheU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBfZnJhbWUuaW5jbHVkZXMoXCI8YW5vbnltb3VzPlwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAgIChfZnJhbWUgPSBfZnJhbWUucmVwbGFjZShcIjxhbm9ueW1vdXM+XCIsIGZuLmRpc3BsYXlOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGZuICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEgPD0gbmFtZVByb3BEZXNjcmlwdG9yICYmIDAgPD0gX1J1bkluUm9vdEZyYW1lJERldGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKHJlZW50cnkgPSAhMSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2aW91c0Rpc3BhdGNoZXIpLFxuICAgICAgICAgIHJlZW5hYmxlTG9ncygpLFxuICAgICAgICAgIChFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZyYW1lKTtcbiAgICAgIH1cbiAgICAgIHNhbXBsZUxpbmVzID0gKHNhbXBsZUxpbmVzID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogXCJcIilcbiAgICAgICAgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShzYW1wbGVMaW5lcylcbiAgICAgICAgOiBcIlwiO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiYgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHNhbXBsZUxpbmVzKTtcbiAgICAgIHJldHVybiBzYW1wbGVMaW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZm9ybWF0T3duZXJTdGFjayhlcnJvcikge1xuICAgICAgdmFyIHByZXZQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xuICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB2b2lkIDA7XG4gICAgICBlcnJvciA9IGVycm9yLnN0YWNrO1xuICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2UHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICBlcnJvci5zdGFydHNXaXRoKFwiRXJyb3I6IHJlYWN0LXN0YWNrLXRvcC1mcmFtZVxcblwiKSAmJlxuICAgICAgICAoZXJyb3IgPSBlcnJvci5zbGljZSgyOSkpO1xuICAgICAgcHJldlByZXBhcmVTdGFja1RyYWNlID0gZXJyb3IuaW5kZXhPZihcIlxcblwiKTtcbiAgICAgIC0xICE9PSBwcmV2UHJlcGFyZVN0YWNrVHJhY2UgJiZcbiAgICAgICAgKGVycm9yID0gZXJyb3Iuc2xpY2UocHJldlByZXBhcmVTdGFja1RyYWNlICsgMSkpO1xuICAgICAgcHJldlByZXBhcmVTdGFja1RyYWNlID0gZXJyb3IuaW5kZXhPZihcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiKTtcbiAgICAgIC0xICE9PSBwcmV2UHJlcGFyZVN0YWNrVHJhY2UgJiZcbiAgICAgICAgKHByZXZQcmVwYXJlU3RhY2tUcmFjZSA9IGVycm9yLmxhc3RJbmRleE9mKFxuICAgICAgICAgIFwiXFxuXCIsXG4gICAgICAgICAgcHJldlByZXBhcmVTdGFja1RyYWNlXG4gICAgICAgICkpO1xuICAgICAgaWYgKC0xICE9PSBwcmV2UHJlcGFyZVN0YWNrVHJhY2UpXG4gICAgICAgIGVycm9yID0gZXJyb3Iuc2xpY2UoMCwgcHJldlByZXBhcmVTdGFja1RyYWNlKTtcbiAgICAgIGVsc2UgcmV0dXJuIFwiXCI7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRmliZXIoZmliZXIpIHtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiTGF6eVwiKTtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZVwiKTtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZUxpc3RcIik7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmaWJlci50eXBlLCAhMSk7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIsICExKTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUsICEwKTtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJBY3Rpdml0eVwiKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaW5mbyA9IFwiXCI7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpbmZvICs9IGRlc2NyaWJlRmliZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHZhciBkZWJ1Z0luZm8gPSB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJbmZvO1xuICAgICAgICAgIGlmIChkZWJ1Z0luZm8pXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZGVidWdJbmZvLmxlbmd0aCAtIDE7IDAgPD0gaTsgaS0tKSB7XG4gICAgICAgICAgICAgIHZhciBlbnRyeSA9IGRlYnVnSW5mb1tpXTtcbiAgICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBlbnRyeS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcF9jb25zdCA9IGluZm8sXG4gICAgICAgICAgICAgICAgICBlbnYgPSBlbnRyeS5lbnY7XG4gICAgICAgICAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFxuICAgICAgICAgICAgICAgICAgZW50cnkubmFtZSArIChlbnYgPyBcIiBbXCIgKyBlbnYgKyBcIl1cIiA6IFwiXCIpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpbmZvID0gSlNDb21waWxlcl90ZW1wX2NvbnN0ICsgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgICAgIH0gd2hpbGUgKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIGluZm87XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHJldHVybiBcIlxcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IFwiICsgeC5tZXNzYWdlICsgXCJcXG5cIiArIHguc3RhY2s7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZVdpdGhvdXRMaW5lTnVtYmVyKGZuKSB7XG4gICAgICByZXR1cm4gKGZuID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogXCJcIilcbiAgICAgICAgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShmbilcbiAgICAgICAgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHtcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBvd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG4gICAgICByZXR1cm4gbnVsbCAhPSBvd25lciA/IGdldENvbXBvbmVudE5hbWVGcm9tT3duZXIob3duZXIpIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpIHtcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSByZXR1cm4gXCJcIjtcbiAgICAgIHZhciB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaW5mbyA9IFwiXCI7XG4gICAgICAgIDYgPT09IHdvcmtJblByb2dyZXNzLnRhZyAmJiAod29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm4pO1xuICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBpbmZvICs9IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGluZm8gKz0gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICBpbmZvICs9IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VMaXN0XCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIGluZm8gKz0gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJBY3Rpdml0eVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgfHxcbiAgICAgICAgICAgICAgXCJcIiAhPT0gaW5mbyB8fFxuICAgICAgICAgICAgICAoaW5mbyArPSBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWVXaXRob3V0TGluZU51bWJlcihcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8XG4gICAgICAgICAgICAgIFwiXCIgIT09IGluZm8gfHxcbiAgICAgICAgICAgICAgKGluZm8gKz0gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lV2l0aG91dExpbmVOdW1iZXIoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZS5yZW5kZXJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICg7IHdvcmtJblByb2dyZXNzOyApXG4gICAgICAgICAgaWYgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgICAgIHZhciBmaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBmaWJlci5fZGVidWdPd25lcjtcbiAgICAgICAgICAgIHZhciBkZWJ1Z1N0YWNrID0gZmliZXIuX2RlYnVnU3RhY2s7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyAmJlxuICAgICAgICAgICAgICBkZWJ1Z1N0YWNrICYmXG4gICAgICAgICAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgZGVidWdTdGFjayAmJlxuICAgICAgICAgICAgICAgIChmaWJlci5fZGVidWdTdGFjayA9IGRlYnVnU3RhY2sgPSBmb3JtYXRPd25lclN0YWNrKGRlYnVnU3RhY2spKSxcbiAgICAgICAgICAgICAgXCJcIiAhPT0gZGVidWdTdGFjayAmJiAoaW5mbyArPSBcIlxcblwiICsgZGVidWdTdGFjaykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5kZWJ1Z1N0YWNrKSB7XG4gICAgICAgICAgICB2YXIgb3duZXJTdGFjayA9IHdvcmtJblByb2dyZXNzLmRlYnVnU3RhY2s7XG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5vd25lcikgJiZcbiAgICAgICAgICAgICAgb3duZXJTdGFjayAmJlxuICAgICAgICAgICAgICAoaW5mbyArPSBcIlxcblwiICsgZm9ybWF0T3duZXJTdGFjayhvd25lclN0YWNrKSk7XG4gICAgICAgICAgfSBlbHNlIGJyZWFrO1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gaW5mbztcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICBcIlxcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IFwiICsgeC5tZXNzYWdlICsgXCJcXG5cIiArIHguc3RhY2s7XG4gICAgICB9XG4gICAgICByZXR1cm4gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBydW5XaXRoRmliZXJJbkRFVihmaWJlciwgY2FsbGJhY2ssIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbnVsbCAhPT0gZmliZXIgJiYgZmliZXIuX2RlYnVnVGFza1xuICAgICAgICAgID8gZmliZXIuX2RlYnVnVGFzay5ydW4oXG4gICAgICAgICAgICAgIGNhbGxiYWNrLmJpbmQobnVsbCwgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNClcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGNhbGxiYWNrKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZpb3VzRmliZXIpO1xuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwicnVuV2l0aEZpYmVySW5ERVYgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBpbiBwcm9kdWN0aW9uLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRDdXJyZW50RmliZXIoZmliZXIpIHtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjayA9XG4gICAgICAgIG51bGwgPT09IGZpYmVyID8gbnVsbCA6IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgICBpc1JlbmRlcmluZyA9ICExO1xuICAgICAgY3VycmVudCA9IGZpYmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgcmV0dXJuIGNoZWNrRm9ybUZpZWxkVmFsdWVTdHJpbmdDb2VyY2lvbih2YWx1ZSksIHZhbHVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0NoZWNrYWJsZShlbGVtKSB7XG4gICAgICB2YXIgdHlwZSA9IGVsZW0udHlwZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChlbGVtID0gZWxlbS5ub2RlTmFtZSkgJiZcbiAgICAgICAgXCJpbnB1dFwiID09PSBlbGVtLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgKFwiY2hlY2tib3hcIiA9PT0gdHlwZSB8fCBcInJhZGlvXCIgPT09IHR5cGUpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpIHtcbiAgICAgIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyBcImNoZWNrZWRcIiA6IFwidmFsdWVcIixcbiAgICAgICAgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgbm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG4gICAgICAgICAgdmFsdWVGaWVsZFxuICAgICAgICApO1xuICAgICAgY2hlY2tGb3JtRmllbGRWYWx1ZVN0cmluZ0NvZXJjaW9uKG5vZGVbdmFsdWVGaWVsZF0pO1xuICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IFwiXCIgKyBub2RlW3ZhbHVlRmllbGRdO1xuICAgICAgaWYgKFxuICAgICAgICAhbm9kZS5oYXNPd25Qcm9wZXJ0eSh2YWx1ZUZpZWxkKSAmJlxuICAgICAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgZGVzY3JpcHRvciAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBkZXNjcmlwdG9yLnNldFxuICAgICAgKSB7XG4gICAgICAgIHZhciBnZXQgPSBkZXNjcmlwdG9yLmdldCxcbiAgICAgICAgICBzZXQgPSBkZXNjcmlwdG9yLnNldDtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldC5jYWxsKHRoaXMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNoZWNrRm9ybUZpZWxkVmFsdWVTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBcIlwiICsgdmFsdWU7XG4gICAgICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBkZXNjcmlwdG9yLmVudW1lcmFibGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgICAgICAgY3VycmVudFZhbHVlID0gXCJcIiArIHZhbHVlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBub2RlLl92YWx1ZVRyYWNrZXIgPSBudWxsO1xuICAgICAgICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFjayhub2RlKSB7XG4gICAgICBub2RlLl92YWx1ZVRyYWNrZXIgfHwgKG5vZGUuX3ZhbHVlVHJhY2tlciA9IHRyYWNrVmFsdWVPbk5vZGUobm9kZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChub2RlKSB7XG4gICAgICBpZiAoIW5vZGUpIHJldHVybiAhMTtcbiAgICAgIHZhciB0cmFja2VyID0gbm9kZS5fdmFsdWVUcmFja2VyO1xuICAgICAgaWYgKCF0cmFja2VyKSByZXR1cm4gITA7XG4gICAgICB2YXIgbGFzdFZhbHVlID0gdHJhY2tlci5nZXRWYWx1ZSgpO1xuICAgICAgdmFyIHZhbHVlID0gXCJcIjtcbiAgICAgIG5vZGUgJiZcbiAgICAgICAgKHZhbHVlID0gaXNDaGVja2FibGUobm9kZSlcbiAgICAgICAgICA/IG5vZGUuY2hlY2tlZFxuICAgICAgICAgICAgPyBcInRydWVcIlxuICAgICAgICAgICAgOiBcImZhbHNlXCJcbiAgICAgICAgICA6IG5vZGUudmFsdWUpO1xuICAgICAgbm9kZSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIG5vZGUgIT09IGxhc3RWYWx1ZSA/ICh0cmFja2VyLnNldFZhbHVlKG5vZGUpLCAhMCkgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHtcbiAgICAgIGRvYyA9IGRvYyB8fCAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGRvY3VtZW50ID8gZG9jdW1lbnQgOiB2b2lkIDApO1xuICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiBkb2MpIHJldHVybiBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRvYy5hY3RpdmVFbGVtZW50IHx8IGRvYy5ib2R5O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZG9jLmJvZHk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXModmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKFxuICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzUmVnZXgsXG4gICAgICAgIGZ1bmN0aW9uIChjaCkge1xuICAgICAgICAgIHJldHVybiBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpICsgXCIgXCI7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSW5wdXRQcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICAgICAgdm9pZCAwID09PSBwcm9wcy5jaGVja2VkIHx8XG4gICAgICAgIHZvaWQgMCA9PT0gcHJvcHMuZGVmYXVsdENoZWNrZWQgfHxcbiAgICAgICAgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCB8fFxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIiVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiBJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAoc3BlY2lmeSBlaXRoZXIgdGhlIGNoZWNrZWQgcHJvcCwgb3IgdGhlIGRlZmF1bHRDaGVja2VkIHByb3AsIGJ1dCBub3QgYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0LmRldi9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50c1wiLFxuICAgICAgICAgIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgXCJBIGNvbXBvbmVudFwiLFxuICAgICAgICAgIHByb3BzLnR5cGVcbiAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSAhMCkpO1xuICAgICAgdm9pZCAwID09PSBwcm9wcy52YWx1ZSB8fFxuICAgICAgICB2b2lkIDAgPT09IHByb3BzLmRlZmF1bHRWYWx1ZSB8fFxuICAgICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSB8fFxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIiVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuIElucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIChzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90IGJvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0IGVsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIixcbiAgICAgICAgICBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8IFwiQSBjb21wb25lbnRcIixcbiAgICAgICAgICBwcm9wcy50eXBlXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9ICEwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUlucHV0KFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgbGFzdERlZmF1bHRWYWx1ZSxcbiAgICAgIGNoZWNrZWQsXG4gICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIHR5cGUsXG4gICAgICBuYW1lXG4gICAgKSB7XG4gICAgICBlbGVtZW50Lm5hbWUgPSBcIlwiO1xuICAgICAgbnVsbCAhPSB0eXBlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgXCJib29sZWFuXCIgIT09IHR5cGVvZiB0eXBlXG4gICAgICAgID8gKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odHlwZSwgXCJ0eXBlXCIpLCAoZWxlbWVudC50eXBlID0gdHlwZSkpXG4gICAgICAgIDogZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgICAgaWYgKG51bGwgIT0gdmFsdWUpXG4gICAgICAgIGlmIChcIm51bWJlclwiID09PSB0eXBlKSB7XG4gICAgICAgICAgaWYgKCgwID09PSB2YWx1ZSAmJiBcIlwiID09PSBlbGVtZW50LnZhbHVlKSB8fCBlbGVtZW50LnZhbHVlICE9IHZhbHVlKVxuICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgZWxlbWVudC52YWx1ZSAhPT0gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUodmFsdWUpICYmXG4gICAgICAgICAgICAoZWxlbWVudC52YWx1ZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSk7XG4gICAgICBlbHNlXG4gICAgICAgIChcInN1Ym1pdFwiICE9PSB0eXBlICYmIFwicmVzZXRcIiAhPT0gdHlwZSkgfHxcbiAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpO1xuICAgICAgbnVsbCAhPSB2YWx1ZVxuICAgICAgICA/IHNldERlZmF1bHRWYWx1ZShlbGVtZW50LCB0eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSlcbiAgICAgICAgOiBudWxsICE9IGRlZmF1bHRWYWx1ZVxuICAgICAgICAgID8gc2V0RGVmYXVsdFZhbHVlKGVsZW1lbnQsIHR5cGUsIGdldFRvU3RyaW5nVmFsdWUoZGVmYXVsdFZhbHVlKSlcbiAgICAgICAgICA6IG51bGwgIT0gbGFzdERlZmF1bHRWYWx1ZSAmJiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpO1xuICAgICAgbnVsbCA9PSBjaGVja2VkICYmXG4gICAgICAgIG51bGwgIT0gZGVmYXVsdENoZWNrZWQgJiZcbiAgICAgICAgKGVsZW1lbnQuZGVmYXVsdENoZWNrZWQgPSAhIWRlZmF1bHRDaGVja2VkKTtcbiAgICAgIG51bGwgIT0gY2hlY2tlZCAmJlxuICAgICAgICAoZWxlbWVudC5jaGVja2VkID1cbiAgICAgICAgICBjaGVja2VkICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2hlY2tlZCAmJlxuICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjaGVja2VkKTtcbiAgICAgIG51bGwgIT0gbmFtZSAmJlxuICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgbmFtZSAmJlxuICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgbmFtZVxuICAgICAgICA/IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKG5hbWUsIFwibmFtZVwiKSxcbiAgICAgICAgICAoZWxlbWVudC5uYW1lID0gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUobmFtZSkpKVxuICAgICAgICA6IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdElucHV0KFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgY2hlY2tlZCxcbiAgICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICAgdHlwZSxcbiAgICAgIG5hbWUsXG4gICAgICBpc0h5ZHJhdGluZ1xuICAgICkge1xuICAgICAgbnVsbCAhPSB0eXBlICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgXCJib29sZWFuXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHR5cGUsIFwidHlwZVwiKSwgKGVsZW1lbnQudHlwZSA9IHR5cGUpKTtcbiAgICAgIGlmIChudWxsICE9IHZhbHVlIHx8IG51bGwgIT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgKFwic3VibWl0XCIgIT09IHR5cGUgJiYgXCJyZXNldFwiICE9PSB0eXBlKSB8fFxuICAgICAgICAgICAgKHZvaWQgMCAhPT0gdmFsdWUgJiYgbnVsbCAhPT0gdmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0VmFsdWUgPVxuICAgICAgICAgIG51bGwgIT0gZGVmYXVsdFZhbHVlID8gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUoZGVmYXVsdFZhbHVlKSA6IFwiXCI7XG4gICAgICAgIHZhbHVlID0gbnVsbCAhPSB2YWx1ZSA/IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgaXNIeWRyYXRpbmcgfHwgdmFsdWUgPT09IGVsZW1lbnQudmFsdWUgfHwgKGVsZW1lbnQudmFsdWUgPSB2YWx1ZSk7XG4gICAgICAgIGVsZW1lbnQuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBjaGVja2VkID0gbnVsbCAhPSBjaGVja2VkID8gY2hlY2tlZCA6IGRlZmF1bHRDaGVja2VkO1xuICAgICAgY2hlY2tlZCA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNoZWNrZWQgJiZcbiAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIGNoZWNrZWQgJiZcbiAgICAgICAgISFjaGVja2VkO1xuICAgICAgZWxlbWVudC5jaGVja2VkID0gaXNIeWRyYXRpbmcgPyBlbGVtZW50LmNoZWNrZWQgOiAhIWNoZWNrZWQ7XG4gICAgICBlbGVtZW50LmRlZmF1bHRDaGVja2VkID0gISFjaGVja2VkO1xuICAgICAgbnVsbCAhPSBuYW1lICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgICAgICAgXCJib29sZWFuXCIgIT09IHR5cGVvZiBuYW1lICYmXG4gICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKG5hbWUsIFwibmFtZVwiKSwgKGVsZW1lbnQubmFtZSA9IG5hbWUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHR5cGUsIHZhbHVlKSB7XG4gICAgICAoXCJudW1iZXJcIiA9PT0gdHlwZSAmJiBnZXRBY3RpdmVFbGVtZW50KG5vZGUub3duZXJEb2N1bWVudCkgPT09IG5vZGUpIHx8XG4gICAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID09PSBcIlwiICsgdmFsdWUgfHxcbiAgICAgICAgKG5vZGUuZGVmYXVsdFZhbHVlID0gXCJcIiArIHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVPcHRpb25Qcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICAgICAgbnVsbCA9PSBwcm9wcy52YWx1ZSAmJlxuICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb3BzLmNoaWxkcmVuICYmIG51bGwgIT09IHByb3BzLmNoaWxkcmVuXG4gICAgICAgICAgPyBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgbnVsbCA9PSBjaGlsZCB8fFxuICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBjaGlsZCB8fFxuICAgICAgICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBjaGlsZCB8fFxuICAgICAgICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBjaGlsZCB8fFxuICAgICAgICAgICAgICAgIGRpZFdhcm5JbnZhbGlkQ2hpbGQgfHxcbiAgICAgICAgICAgICAgICAoKGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSAhMCksXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IGluZmVyIHRoZSBvcHRpb24gdmFsdWUgb2YgY29tcGxleCBjaGlsZHJlbi4gUGFzcyBhIGB2YWx1ZWAgcHJvcCBvciB1c2UgYSBwbGFpbiBzdHJpbmcgYXMgY2hpbGRyZW4gdG8gPG9wdGlvbj4uXCJcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsID09IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIHx8XG4gICAgICAgICAgICBkaWRXYXJuSW52YWxpZElubmVySFRNTCB8fFxuICAgICAgICAgICAgKChkaWRXYXJuSW52YWxpZElubmVySFRNTCA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUGFzcyBhIGB2YWx1ZWAgcHJvcCBpZiB5b3Ugc2V0IGRhbmdlcm91c2x5SW5uZXJIVE1MIHNvIFJlYWN0IGtub3dzIHdoaWNoIHZhbHVlIHNob3VsZCBiZSBzZWxlY3RlZC5cIlxuICAgICAgICAgICAgKSkpO1xuICAgICAgbnVsbCA9PSBwcm9wcy5zZWxlY3RlZCB8fFxuICAgICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiB8fFxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlVzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBvbiA8c2VsZWN0PiBpbnN0ZWFkIG9mIHNldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi5cIlxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSAhMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gICAgICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcbiAgICAgIHJldHVybiBvd25lck5hbWVcbiAgICAgICAgPyBcIlxcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGBcIiArIG93bmVyTmFtZSArIFwiYC5cIlxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMobm9kZSwgbXVsdGlwbGUsIHByb3BWYWx1ZSwgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICBub2RlID0gbm9kZS5vcHRpb25zO1xuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIG11bHRpcGxlID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIG11bHRpcGxlW1wiJFwiICsgcHJvcFZhbHVlW2ldXSA9ICEwO1xuICAgICAgICBmb3IgKHByb3BWYWx1ZSA9IDA7IHByb3BWYWx1ZSA8IG5vZGUubGVuZ3RoOyBwcm9wVmFsdWUrKylcbiAgICAgICAgICAoaSA9IG11bHRpcGxlLmhhc093blByb3BlcnR5KFwiJFwiICsgbm9kZVtwcm9wVmFsdWVdLnZhbHVlKSksXG4gICAgICAgICAgICBub2RlW3Byb3BWYWx1ZV0uc2VsZWN0ZWQgIT09IGkgJiYgKG5vZGVbcHJvcFZhbHVlXS5zZWxlY3RlZCA9IGkpLFxuICAgICAgICAgICAgaSAmJiBzZXREZWZhdWx0U2VsZWN0ZWQgJiYgKG5vZGVbcHJvcFZhbHVlXS5kZWZhdWx0U2VsZWN0ZWQgPSAhMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wVmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZShwcm9wVmFsdWUpO1xuICAgICAgICBtdWx0aXBsZSA9IG51bGw7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG5vZGVbaV0udmFsdWUgPT09IHByb3BWYWx1ZSkge1xuICAgICAgICAgICAgbm9kZVtpXS5zZWxlY3RlZCA9ICEwO1xuICAgICAgICAgICAgc2V0RGVmYXVsdFNlbGVjdGVkICYmIChub2RlW2ldLmRlZmF1bHRTZWxlY3RlZCA9ICEwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbnVsbCAhPT0gbXVsdGlwbGUgfHwgbm9kZVtpXS5kaXNhYmxlZCB8fCAobXVsdGlwbGUgPSBub2RlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBudWxsICE9PSBtdWx0aXBsZSAmJiAobXVsdGlwbGUuc2VsZWN0ZWQgPSAhMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU2VsZWN0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgICAgIGZvciAoZWxlbWVudCA9IDA7IGVsZW1lbnQgPCB2YWx1ZVByb3BOYW1lcy5sZW5ndGg7IGVsZW1lbnQrKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSB2YWx1ZVByb3BOYW1lc1tlbGVtZW50XTtcbiAgICAgICAgaWYgKG51bGwgIT0gcHJvcHNbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgdmFyIHByb3BOYW1lSXNBcnJheSA9IGlzQXJyYXlJbXBsKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgICAgcHJvcHMubXVsdGlwbGUgJiYgIXByb3BOYW1lSXNBcnJheVxuICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmIGBtdWx0aXBsZWAgaXMgdHJ1ZS4lc1wiLFxuICAgICAgICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgICAgICAgIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogIXByb3BzLm11bHRpcGxlICYmXG4gICAgICAgICAgICAgIHByb3BOYW1lSXNBcnJheSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyIHZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXNcIixcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKVxuICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2b2lkIDAgPT09IHByb3BzLnZhbHVlIHx8XG4gICAgICAgIHZvaWQgMCA9PT0gcHJvcHMuZGVmYXVsdFZhbHVlIHx8XG4gICAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSB8fFxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlNlbGVjdCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCBib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBzZWxlY3QgZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0LmRldi9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50c1wiXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSAhMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVRleHRhcmVhUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgICAgIHZvaWQgMCA9PT0gcHJvcHMudmFsdWUgfHxcbiAgICAgICAgdm9pZCAwID09PSBwcm9wcy5kZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgZGlkV2FyblZhbERlZmF1bHRWYWwgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyBjb250YWlucyBhIHRleHRhcmVhIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiBUZXh0YXJlYSBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCBib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB0ZXh0YXJlYSBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0LmRldi9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50c1wiLFxuICAgICAgICAgIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgXCJBIGNvbXBvbmVudFwiXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuVmFsRGVmYXVsdFZhbCA9ICEwKSk7XG4gICAgICBudWxsICE9IHByb3BzLmNoaWxkcmVuICYmXG4gICAgICAgIG51bGwgPT0gcHJvcHMudmFsdWUgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlVzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgY2hpbGRyZW4gb24gPHRleHRhcmVhPi5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVUZXh0YXJlYShlbGVtZW50LCB2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgKCh2YWx1ZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSksXG4gICAgICAgIHZhbHVlICE9PSBlbGVtZW50LnZhbHVlICYmIChlbGVtZW50LnZhbHVlID0gdmFsdWUpLFxuICAgICAgICBudWxsID09IGRlZmF1bHRWYWx1ZSlcbiAgICAgICkge1xuICAgICAgICBlbGVtZW50LmRlZmF1bHRWYWx1ZSAhPT0gdmFsdWUgJiYgKGVsZW1lbnQuZGVmYXVsdFZhbHVlID0gdmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LmRlZmF1bHRWYWx1ZSA9XG4gICAgICAgIG51bGwgIT0gZGVmYXVsdFZhbHVlID8gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUoZGVmYXVsdFZhbHVlKSA6IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRUZXh0YXJlYShlbGVtZW50LCB2YWx1ZSwgZGVmYXVsdFZhbHVlLCBjaGlsZHJlbikge1xuICAgICAgaWYgKG51bGwgPT0gdmFsdWUpIHtcbiAgICAgICAgaWYgKG51bGwgIT0gY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAobnVsbCAhPSBkZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJJZiB5b3Ugc3VwcGx5IGBkZWZhdWx0VmFsdWVgIG9uIGEgPHRleHRhcmVhPiwgZG8gbm90IHBhc3MgY2hpbGRyZW4uXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgaWYgKDEgPCBjaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFwiPHRleHRhcmVhPiBjYW4gb25seSBoYXZlIGF0IG1vc3Qgb25lIGNoaWxkLlwiKTtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIG51bGwgPT0gZGVmYXVsdFZhbHVlICYmIChkZWZhdWx0VmFsdWUgPSBcIlwiKTtcbiAgICAgICAgdmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgICBkZWZhdWx0VmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKTtcbiAgICAgIGVsZW1lbnQuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgY2hpbGRyZW4gPSBlbGVtZW50LnRleHRDb250ZW50O1xuICAgICAgY2hpbGRyZW4gPT09IGRlZmF1bHRWYWx1ZSAmJlxuICAgICAgICBcIlwiICE9PSBjaGlsZHJlbiAmJlxuICAgICAgICBudWxsICE9PSBjaGlsZHJlbiAmJlxuICAgICAgICAoZWxlbWVudC52YWx1ZSA9IGNoaWxkcmVuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZE5vdGFibGVOb2RlKG5vZGUsIGluZGVudCkge1xuICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gbm9kZS5zZXJ2ZXJQcm9wcyAmJlxuICAgICAgICAwID09PSBub2RlLnNlcnZlclRhaWwubGVuZ3RoICYmXG4gICAgICAgIDEgPT09IG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmXG4gICAgICAgIDMgPCBub2RlLmRpc3RhbmNlRnJvbUxlYWYgJiZcbiAgICAgICAgbm9kZS5kaXN0YW5jZUZyb21MZWFmID4gMTUgLSBpbmRlbnRcbiAgICAgICAgPyBmaW5kTm90YWJsZU5vZGUobm9kZS5jaGlsZHJlblswXSwgaW5kZW50KVxuICAgICAgICA6IG5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluZGVudGF0aW9uKGluZGVudCkge1xuICAgICAgcmV0dXJuIFwiICBcIiArIFwiICBcIi5yZXBlYXQoaW5kZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkZWQoaW5kZW50KSB7XG4gICAgICByZXR1cm4gXCIrIFwiICsgXCIgIFwiLnJlcGVhdChpbmRlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVkKGluZGVudCkge1xuICAgICAgcmV0dXJuIFwiLSBcIiArIFwiICBcIi5yZXBlYXQoaW5kZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVGaWJlclR5cGUoZmliZXIpIHtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gZmliZXIudHlwZTtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICByZXR1cm4gXCJMYXp5XCI7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJldHVybiAoZmliZXIgPSBmaWJlci50eXBlKSwgZmliZXIuZGlzcGxheU5hbWUgfHwgZmliZXIubmFtZSB8fCBudWxsO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZmliZXIgPSBmaWJlci50eXBlLnJlbmRlciksIGZpYmVyLmRpc3BsYXlOYW1lIHx8IGZpYmVyLm5hbWUgfHwgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gKGZpYmVyID0gZmliZXIudHlwZSksIGZpYmVyLmRpc3BsYXlOYW1lIHx8IGZpYmVyLm5hbWUgfHwgbnVsbDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVUZXh0Tm9kZShjb250ZW50LCBtYXhMZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZWVkc0VzY2FwaW5nLnRlc3QoY29udGVudClcbiAgICAgICAgPyAoKGNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShjb250ZW50KSksXG4gICAgICAgICAgY29udGVudC5sZW5ndGggPiBtYXhMZW5ndGggLSAyXG4gICAgICAgICAgICA/IDggPiBtYXhMZW5ndGhcbiAgICAgICAgICAgICAgPyAne1wiLi4uXCJ9J1xuICAgICAgICAgICAgICA6IFwie1wiICsgY29udGVudC5zbGljZSgwLCBtYXhMZW5ndGggLSA3KSArICcuLi5cIn0nXG4gICAgICAgICAgICA6IFwie1wiICsgY29udGVudCArIFwifVwiKVxuICAgICAgICA6IGNvbnRlbnQubGVuZ3RoID4gbWF4TGVuZ3RoXG4gICAgICAgICAgPyA1ID4gbWF4TGVuZ3RoXG4gICAgICAgICAgICA/ICd7XCIuLi5cIn0nXG4gICAgICAgICAgICA6IGNvbnRlbnQuc2xpY2UoMCwgbWF4TGVuZ3RoIC0gMykgKyBcIi4uLlwiXG4gICAgICAgICAgOiBjb250ZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVRleHREaWZmKGNsaWVudFRleHQsIHNlcnZlclByb3BzLCBpbmRlbnQpIHtcbiAgICAgIHZhciBtYXhMZW5ndGggPSAxMjAgLSAyICogaW5kZW50O1xuICAgICAgaWYgKG51bGwgPT09IHNlcnZlclByb3BzKVxuICAgICAgICByZXR1cm4gYWRkZWQoaW5kZW50KSArIGRlc2NyaWJlVGV4dE5vZGUoY2xpZW50VGV4dCwgbWF4TGVuZ3RoKSArIFwiXFxuXCI7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHNlcnZlclByb3BzKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIGZpcnN0RGlmZiA9IDA7XG4gICAgICAgICAgZmlyc3REaWZmIDwgc2VydmVyUHJvcHMubGVuZ3RoICYmXG4gICAgICAgICAgZmlyc3REaWZmIDwgY2xpZW50VGV4dC5sZW5ndGggJiZcbiAgICAgICAgICBzZXJ2ZXJQcm9wcy5jaGFyQ29kZUF0KGZpcnN0RGlmZikgPT09XG4gICAgICAgICAgICBjbGllbnRUZXh0LmNoYXJDb2RlQXQoZmlyc3REaWZmKTtcbiAgICAgICAgICBmaXJzdERpZmYrK1xuICAgICAgICApO1xuICAgICAgICBmaXJzdERpZmYgPiBtYXhMZW5ndGggLSA4ICYmXG4gICAgICAgICAgMTAgPCBmaXJzdERpZmYgJiZcbiAgICAgICAgICAoKGNsaWVudFRleHQgPSBcIi4uLlwiICsgY2xpZW50VGV4dC5zbGljZShmaXJzdERpZmYgLSA4KSksXG4gICAgICAgICAgKHNlcnZlclByb3BzID0gXCIuLi5cIiArIHNlcnZlclByb3BzLnNsaWNlKGZpcnN0RGlmZiAtIDgpKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgYWRkZWQoaW5kZW50KSArXG4gICAgICAgICAgZGVzY3JpYmVUZXh0Tm9kZShjbGllbnRUZXh0LCBtYXhMZW5ndGgpICtcbiAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICByZW1vdmVkKGluZGVudCkgK1xuICAgICAgICAgIGRlc2NyaWJlVGV4dE5vZGUoc2VydmVyUHJvcHMsIG1heExlbmd0aCkgK1xuICAgICAgICAgIFwiXFxuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIGluZGVudGF0aW9uKGluZGVudCkgKyBkZXNjcmliZVRleHROb2RlKGNsaWVudFRleHQsIG1heExlbmd0aCkgKyBcIlxcblwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvYmplY3ROYW1lKG9iamVjdCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbiAgICAgICAgLmNhbGwob2JqZWN0KVxuICAgICAgICAucmVwbGFjZSgvXlxcW29iamVjdCAoLiopXFxdJC8sIGZ1bmN0aW9uIChtLCBwMCkge1xuICAgICAgICAgIHJldHVybiBwMDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlVmFsdWUodmFsdWUsIG1heExlbmd0aCkge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpLFxuICAgICAgICAgICAgdmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoXG4gICAgICAgICAgICAgID8gNSA+IG1heExlbmd0aFxuICAgICAgICAgICAgICAgID8gJ1wiLi4uXCInXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5zbGljZSgwLCBtYXhMZW5ndGggLSA0KSArICcuLi5cIidcbiAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICBpZiAobnVsbCA9PT0gdmFsdWUpIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwodmFsdWUpKSByZXR1cm4gXCJbLi4uXVwiO1xuICAgICAgICAgIGlmICh2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKVxuICAgICAgICAgICAgcmV0dXJuIChtYXhMZW5ndGggPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodmFsdWUudHlwZSkpXG4gICAgICAgICAgICAgID8gXCI8XCIgKyBtYXhMZW5ndGggKyBcIj5cIlxuICAgICAgICAgICAgICA6IFwiPC4uLj5cIjtcbiAgICAgICAgICB2YXIgbmFtZSA9IG9iamVjdE5hbWUodmFsdWUpO1xuICAgICAgICAgIGlmIChcIk9iamVjdFwiID09PSBuYW1lKSB7XG4gICAgICAgICAgICBuYW1lID0gXCJcIjtcbiAgICAgICAgICAgIG1heExlbmd0aCAtPSAyO1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdmFsdWUpXG4gICAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIganNvblByb3BOYW1lID0gSlNPTi5zdHJpbmdpZnkocHJvcE5hbWUpO1xuICAgICAgICAgICAgICAgIGpzb25Qcm9wTmFtZSAhPT0gJ1wiJyArIHByb3BOYW1lICsgJ1wiJyAmJlxuICAgICAgICAgICAgICAgICAgKHByb3BOYW1lID0ganNvblByb3BOYW1lKTtcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGggLT0gcHJvcE5hbWUubGVuZ3RoIC0gMjtcbiAgICAgICAgICAgICAgICBqc29uUHJvcE5hbWUgPSBkZXNjcmliZVZhbHVlKFxuICAgICAgICAgICAgICAgICAgdmFsdWVbcHJvcE5hbWVdLFxuICAgICAgICAgICAgICAgICAgMTUgPiBtYXhMZW5ndGggPyBtYXhMZW5ndGggOiAxNVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoIC09IGpzb25Qcm9wTmFtZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKDAgPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIG5hbWUgKz0gXCJcIiA9PT0gbmFtZSA/IFwiLi4uXCIgOiBcIiwgLi4uXCI7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmFtZSArPVxuICAgICAgICAgICAgICAgICAgKFwiXCIgPT09IG5hbWUgPyBcIlwiIDogXCIsXCIpICsgcHJvcE5hbWUgKyBcIjpcIiArIGpzb25Qcm9wTmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwie1wiICsgbmFtZSArIFwifVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgcmV0dXJuIChtYXhMZW5ndGggPSB2YWx1ZS5kaXNwbGF5TmFtZSB8fCB2YWx1ZS5uYW1lKVxuICAgICAgICAgICAgPyBcImZ1bmN0aW9uIFwiICsgbWF4TGVuZ3RoXG4gICAgICAgICAgICA6IFwiZnVuY3Rpb25cIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVQcm9wVmFsdWUodmFsdWUsIG1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCIgIT09IHR5cGVvZiB2YWx1ZSB8fCBuZWVkc0VzY2FwaW5nLnRlc3QodmFsdWUpXG4gICAgICAgID8gXCJ7XCIgKyBkZXNjcmliZVZhbHVlKHZhbHVlLCBtYXhMZW5ndGggLSAyKSArIFwifVwiXG4gICAgICAgIDogdmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoIC0gMlxuICAgICAgICAgID8gNSA+IG1heExlbmd0aFxuICAgICAgICAgICAgPyAnXCIuLi5cIidcbiAgICAgICAgICAgIDogJ1wiJyArIHZhbHVlLnNsaWNlKDAsIG1heExlbmd0aCAtIDUpICsgJy4uLlwiJ1xuICAgICAgICAgIDogJ1wiJyArIHZhbHVlICsgJ1wiJztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVFeHBhbmRlZEVsZW1lbnQodHlwZSwgcHJvcHMsIHJvd1ByZWZpeCkge1xuICAgICAgdmFyIHJlbWFpbmluZ1Jvd0xlbmd0aCA9IDEyMCAtIHJvd1ByZWZpeC5sZW5ndGggLSB0eXBlLmxlbmd0aCxcbiAgICAgICAgcHJvcGVydGllcyA9IFtdLFxuICAgICAgICBwcm9wTmFtZTtcbiAgICAgIGZvciAocHJvcE5hbWUgaW4gcHJvcHMpXG4gICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgJiYgXCJjaGlsZHJlblwiICE9PSBwcm9wTmFtZSkge1xuICAgICAgICAgIHZhciBwcm9wVmFsdWUgPSBkZXNjcmliZVByb3BWYWx1ZShcbiAgICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSxcbiAgICAgICAgICAgIDEyMCAtIHJvd1ByZWZpeC5sZW5ndGggLSBwcm9wTmFtZS5sZW5ndGggLSAxXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZW1haW5pbmdSb3dMZW5ndGggLT0gcHJvcE5hbWUubGVuZ3RoICsgcHJvcFZhbHVlLmxlbmd0aCArIDI7XG4gICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BOYW1lICsgXCI9XCIgKyBwcm9wVmFsdWUpO1xuICAgICAgICB9XG4gICAgICByZXR1cm4gMCA9PT0gcHJvcGVydGllcy5sZW5ndGhcbiAgICAgICAgPyByb3dQcmVmaXggKyBcIjxcIiArIHR5cGUgKyBcIj5cXG5cIlxuICAgICAgICA6IDAgPCByZW1haW5pbmdSb3dMZW5ndGhcbiAgICAgICAgICA/IHJvd1ByZWZpeCArIFwiPFwiICsgdHlwZSArIFwiIFwiICsgcHJvcGVydGllcy5qb2luKFwiIFwiKSArIFwiPlxcblwiXG4gICAgICAgICAgOiByb3dQcmVmaXggK1xuICAgICAgICAgICAgXCI8XCIgK1xuICAgICAgICAgICAgdHlwZSArXG4gICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgIHJvd1ByZWZpeCArXG4gICAgICAgICAgICBcIiAgXCIgK1xuICAgICAgICAgICAgcHJvcGVydGllcy5qb2luKFwiXFxuXCIgKyByb3dQcmVmaXggKyBcIiAgXCIpICtcbiAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgcm93UHJlZml4ICtcbiAgICAgICAgICAgIFwiPlxcblwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVByb3BlcnRpZXNEaWZmKGNsaWVudE9iamVjdCwgc2VydmVyT2JqZWN0LCBpbmRlbnQpIHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gXCJcIixcbiAgICAgICAgcmVtYWluaW5nU2VydmVyUHJvcGVydGllcyA9IGFzc2lnbih7fSwgc2VydmVyT2JqZWN0KSxcbiAgICAgICAgcHJvcE5hbWU7XG4gICAgICBmb3IgKHByb3BOYW1lIGluIGNsaWVudE9iamVjdClcbiAgICAgICAgaWYgKGNsaWVudE9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgICBkZWxldGUgcmVtYWluaW5nU2VydmVyUHJvcGVydGllc1twcm9wTmFtZV07XG4gICAgICAgICAgdmFyIG1heExlbmd0aCA9IDEyMCAtIDIgKiBpbmRlbnQgLSBwcm9wTmFtZS5sZW5ndGggLSAyLFxuICAgICAgICAgICAgY2xpZW50UHJvcFZhbHVlID0gZGVzY3JpYmVWYWx1ZShjbGllbnRPYmplY3RbcHJvcE5hbWVdLCBtYXhMZW5ndGgpO1xuICAgICAgICAgIHNlcnZlck9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSlcbiAgICAgICAgICAgID8gKChtYXhMZW5ndGggPSBkZXNjcmliZVZhbHVlKHNlcnZlck9iamVjdFtwcm9wTmFtZV0sIG1heExlbmd0aCkpLFxuICAgICAgICAgICAgICAocHJvcGVydGllcyArPVxuICAgICAgICAgICAgICAgIGFkZGVkKGluZGVudCkgKyBwcm9wTmFtZSArIFwiOiBcIiArIGNsaWVudFByb3BWYWx1ZSArIFwiXFxuXCIpLFxuICAgICAgICAgICAgICAocHJvcGVydGllcyArPVxuICAgICAgICAgICAgICAgIHJlbW92ZWQoaW5kZW50KSArIHByb3BOYW1lICsgXCI6IFwiICsgbWF4TGVuZ3RoICsgXCJcXG5cIikpXG4gICAgICAgICAgICA6IChwcm9wZXJ0aWVzICs9XG4gICAgICAgICAgICAgICAgYWRkZWQoaW5kZW50KSArIHByb3BOYW1lICsgXCI6IFwiICsgY2xpZW50UHJvcFZhbHVlICsgXCJcXG5cIik7XG4gICAgICAgIH1cbiAgICAgIGZvciAodmFyIF9wcm9wTmFtZSBpbiByZW1haW5pbmdTZXJ2ZXJQcm9wZXJ0aWVzKVxuICAgICAgICByZW1haW5pbmdTZXJ2ZXJQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KF9wcm9wTmFtZSkgJiZcbiAgICAgICAgICAoKGNsaWVudE9iamVjdCA9IGRlc2NyaWJlVmFsdWUoXG4gICAgICAgICAgICByZW1haW5pbmdTZXJ2ZXJQcm9wZXJ0aWVzW19wcm9wTmFtZV0sXG4gICAgICAgICAgICAxMjAgLSAyICogaW5kZW50IC0gX3Byb3BOYW1lLmxlbmd0aCAtIDJcbiAgICAgICAgICApKSxcbiAgICAgICAgICAocHJvcGVydGllcyArPVxuICAgICAgICAgICAgcmVtb3ZlZChpbmRlbnQpICsgX3Byb3BOYW1lICsgXCI6IFwiICsgY2xpZW50T2JqZWN0ICsgXCJcXG5cIikpO1xuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRWxlbWVudERpZmYodHlwZSwgY2xpZW50UHJvcHMsIHNlcnZlclByb3BzLCBpbmRlbnQpIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIixcbiAgICAgICAgc2VydmVyUHJvcE5hbWVzID0gbmV3IE1hcCgpO1xuICAgICAgZm9yIChwcm9wTmFtZSRqc2NvbXAkMCBpbiBzZXJ2ZXJQcm9wcylcbiAgICAgICAgc2VydmVyUHJvcHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUkanNjb21wJDApICYmXG4gICAgICAgICAgc2VydmVyUHJvcE5hbWVzLnNldChcbiAgICAgICAgICAgIHByb3BOYW1lJGpzY29tcCQwLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBwcm9wTmFtZSRqc2NvbXAkMFxuICAgICAgICAgICk7XG4gICAgICBpZiAoMSA9PT0gc2VydmVyUHJvcE5hbWVzLnNpemUgJiYgc2VydmVyUHJvcE5hbWVzLmhhcyhcImNoaWxkcmVuXCIpKVxuICAgICAgICBjb250ZW50ICs9IGRlc2NyaWJlRXhwYW5kZWRFbGVtZW50KFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgY2xpZW50UHJvcHMsXG4gICAgICAgICAgaW5kZW50YXRpb24oaW5kZW50KVxuICAgICAgICApO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGZvciAodmFyIF9wcm9wTmFtZTIgaW4gY2xpZW50UHJvcHMpXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2xpZW50UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BOYW1lMikgJiZcbiAgICAgICAgICAgIFwiY2hpbGRyZW5cIiAhPT0gX3Byb3BOYW1lMlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIG1heExlbmd0aCRqc2NvbXAkMCA9XG4gICAgICAgICAgICAgICAgMTIwIC0gMiAqIChpbmRlbnQgKyAxKSAtIF9wcm9wTmFtZTIubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWUgPSBzZXJ2ZXJQcm9wTmFtZXMuZ2V0KF9wcm9wTmFtZTIudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICBpZiAodm9pZCAwICE9PSBzZXJ2ZXJQcm9wTmFtZSkge1xuICAgICAgICAgICAgICBzZXJ2ZXJQcm9wTmFtZXMuZGVsZXRlKF9wcm9wTmFtZTIudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIHZhciBwcm9wTmFtZSRqc2NvbXAkMCA9IGNsaWVudFByb3BzW19wcm9wTmFtZTJdO1xuICAgICAgICAgICAgICBzZXJ2ZXJQcm9wTmFtZSA9IHNlcnZlclByb3BzW3NlcnZlclByb3BOYW1lXTtcbiAgICAgICAgICAgICAgdmFyIGNsaWVudFByb3BWYWx1ZSA9IGRlc2NyaWJlUHJvcFZhbHVlKFxuICAgICAgICAgICAgICAgIHByb3BOYW1lJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgIG1heExlbmd0aCRqc2NvbXAkMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBtYXhMZW5ndGgkanNjb21wJDAgPSBkZXNjcmliZVByb3BWYWx1ZShcbiAgICAgICAgICAgICAgICBzZXJ2ZXJQcm9wTmFtZSxcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGgkanNjb21wJDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb3BOYW1lJGpzY29tcCQwICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IHByb3BOYW1lJGpzY29tcCQwICYmXG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBzZXJ2ZXJQcm9wTmFtZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBzZXJ2ZXJQcm9wTmFtZSAmJlxuICAgICAgICAgICAgICBcIk9iamVjdFwiID09PSBvYmplY3ROYW1lKHByb3BOYW1lJGpzY29tcCQwKSAmJlxuICAgICAgICAgICAgICBcIk9iamVjdFwiID09PSBvYmplY3ROYW1lKHNlcnZlclByb3BOYW1lKSAmJlxuICAgICAgICAgICAgICAoMiA8IE9iamVjdC5rZXlzKHByb3BOYW1lJGpzY29tcCQwKS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAyIDwgT2JqZWN0LmtleXMoc2VydmVyUHJvcE5hbWUpLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgIC0xIDwgY2xpZW50UHJvcFZhbHVlLmluZGV4T2YoXCIuLi5cIikgfHxcbiAgICAgICAgICAgICAgICAtMSA8IG1heExlbmd0aCRqc2NvbXAkMC5pbmRleE9mKFwiLi4uXCIpKVxuICAgICAgICAgICAgICAgID8gKGNvbnRlbnQgKz1cbiAgICAgICAgICAgICAgICAgICAgaW5kZW50YXRpb24oaW5kZW50ICsgMSkgK1xuICAgICAgICAgICAgICAgICAgICBfcHJvcE5hbWUyICtcbiAgICAgICAgICAgICAgICAgICAgXCI9e3tcXG5cIiArXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlUHJvcGVydGllc0RpZmYoXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUkanNjb21wJDAsXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICsgMlxuICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50YXRpb24oaW5kZW50ICsgMSkgK1xuICAgICAgICAgICAgICAgICAgICBcIn19XFxuXCIpXG4gICAgICAgICAgICAgICAgOiAoKGNvbnRlbnQgKz1cbiAgICAgICAgICAgICAgICAgICAgYWRkZWQoaW5kZW50ICsgMSkgK1xuICAgICAgICAgICAgICAgICAgICBfcHJvcE5hbWUyICtcbiAgICAgICAgICAgICAgICAgICAgXCI9XCIgK1xuICAgICAgICAgICAgICAgICAgICBjbGllbnRQcm9wVmFsdWUgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcblwiKSxcbiAgICAgICAgICAgICAgICAgIChjb250ZW50ICs9XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQoaW5kZW50ICsgMSkgK1xuICAgICAgICAgICAgICAgICAgICBfcHJvcE5hbWUyICtcbiAgICAgICAgICAgICAgICAgICAgXCI9XCIgK1xuICAgICAgICAgICAgICAgICAgICBtYXhMZW5ndGgkanNjb21wJDAgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcblwiKSk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgY29udGVudCArPVxuICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICBfcHJvcE5hbWUyICtcbiAgICAgICAgICAgICAgICBcIj1cIiArXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVQcm9wVmFsdWUoY2xpZW50UHJvcHNbX3Byb3BOYW1lMl0sIG1heExlbmd0aCRqc2NvbXAkMCkgK1xuICAgICAgICAgICAgICAgIFwiXFxuXCI7XG4gICAgICAgICAgfVxuICAgICAgICBzZXJ2ZXJQcm9wTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICAgICAgICBpZiAoXCJjaGlsZHJlblwiICE9PSBwcm9wTmFtZSkge1xuICAgICAgICAgICAgdmFyIG1heExlbmd0aCA9IDEyMCAtIDIgKiAoaW5kZW50ICsgMSkgLSBwcm9wTmFtZS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29udGVudCArPVxuICAgICAgICAgICAgICByZW1vdmVkKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgcHJvcE5hbWUgK1xuICAgICAgICAgICAgICBcIj1cIiArXG4gICAgICAgICAgICAgIGRlc2NyaWJlUHJvcFZhbHVlKHNlcnZlclByb3BzW3Byb3BOYW1lXSwgbWF4TGVuZ3RoKSArXG4gICAgICAgICAgICAgIFwiXFxuXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29udGVudCA9XG4gICAgICAgICAgXCJcIiA9PT0gY29udGVudFxuICAgICAgICAgICAgPyBpbmRlbnRhdGlvbihpbmRlbnQpICsgXCI8XCIgKyB0eXBlICsgXCI+XFxuXCJcbiAgICAgICAgICAgIDogaW5kZW50YXRpb24oaW5kZW50KSArXG4gICAgICAgICAgICAgIFwiPFwiICtcbiAgICAgICAgICAgICAgdHlwZSArXG4gICAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgICBjb250ZW50ICtcbiAgICAgICAgICAgICAgaW5kZW50YXRpb24oaW5kZW50KSArXG4gICAgICAgICAgICAgIFwiPlxcblwiO1xuICAgICAgfVxuICAgICAgdHlwZSA9IHNlcnZlclByb3BzLmNoaWxkcmVuO1xuICAgICAgY2xpZW50UHJvcHMgPSBjbGllbnRQcm9wcy5jaGlsZHJlbjtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUgfHxcbiAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIHR5cGUgfHxcbiAgICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIHR5cGVcbiAgICAgICkge1xuICAgICAgICBzZXJ2ZXJQcm9wTmFtZXMgPSBcIlwiO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGNsaWVudFByb3BzIHx8XG4gICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIGNsaWVudFByb3BzIHx8XG4gICAgICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIGNsaWVudFByb3BzXG4gICAgICAgIClcbiAgICAgICAgICBzZXJ2ZXJQcm9wTmFtZXMgPSBcIlwiICsgY2xpZW50UHJvcHM7XG4gICAgICAgIGNvbnRlbnQgKz0gZGVzY3JpYmVUZXh0RGlmZihzZXJ2ZXJQcm9wTmFtZXMsIFwiXCIgKyB0eXBlLCBpbmRlbnQgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBjbGllbnRQcm9wcyB8fFxuICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgY2xpZW50UHJvcHMgfHxcbiAgICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIGNsaWVudFByb3BzXG4gICAgICApXG4gICAgICAgIGNvbnRlbnQgPVxuICAgICAgICAgIG51bGwgPT0gdHlwZVxuICAgICAgICAgICAgPyBjb250ZW50ICsgZGVzY3JpYmVUZXh0RGlmZihcIlwiICsgY2xpZW50UHJvcHMsIG51bGwsIGluZGVudCArIDEpXG4gICAgICAgICAgICA6IGNvbnRlbnQgKyBkZXNjcmliZVRleHREaWZmKFwiXCIgKyBjbGllbnRQcm9wcywgdm9pZCAwLCBpbmRlbnQgKyAxKTtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVNpYmxpbmdGaWJlcihmaWJlciwgaW5kZW50KSB7XG4gICAgICB2YXIgdHlwZSA9IGRlc2NyaWJlRmliZXJUeXBlKGZpYmVyKTtcbiAgICAgIGlmIChudWxsID09PSB0eXBlKSB7XG4gICAgICAgIHR5cGUgPSBcIlwiO1xuICAgICAgICBmb3IgKGZpYmVyID0gZmliZXIuY2hpbGQ7IGZpYmVyOyApXG4gICAgICAgICAgKHR5cGUgKz0gZGVzY3JpYmVTaWJsaW5nRmliZXIoZmliZXIsIGluZGVudCkpLFxuICAgICAgICAgICAgKGZpYmVyID0gZmliZXIuc2libGluZyk7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGVudGF0aW9uKGluZGVudCkgKyBcIjxcIiArIHR5cGUgKyBcIj5cXG5cIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVOb2RlKG5vZGUsIGluZGVudCkge1xuICAgICAgdmFyIHNraXBUb05vZGUgPSBmaW5kTm90YWJsZU5vZGUobm9kZSwgaW5kZW50KTtcbiAgICAgIGlmIChcbiAgICAgICAgc2tpcFRvTm9kZSAhPT0gbm9kZSAmJlxuICAgICAgICAoMSAhPT0gbm9kZS5jaGlsZHJlbi5sZW5ndGggfHwgbm9kZS5jaGlsZHJlblswXSAhPT0gc2tpcFRvTm9kZSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQpICsgXCIuLi5cXG5cIiArIGRlc2NyaWJlTm9kZShza2lwVG9Ob2RlLCBpbmRlbnQgKyAxKVxuICAgICAgICApO1xuICAgICAgc2tpcFRvTm9kZSA9IFwiXCI7XG4gICAgICB2YXIgZGVidWdJbmZvID0gbm9kZS5maWJlci5fZGVidWdJbmZvO1xuICAgICAgaWYgKGRlYnVnSW5mbylcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWJ1Z0luZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgc2VydmVyQ29tcG9uZW50TmFtZSA9IGRlYnVnSW5mb1tpXS5uYW1lO1xuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBzZXJ2ZXJDb21wb25lbnROYW1lICYmXG4gICAgICAgICAgICAoKHNraXBUb05vZGUgKz1cbiAgICAgICAgICAgICAgaW5kZW50YXRpb24oaW5kZW50KSArIFwiPFwiICsgc2VydmVyQ29tcG9uZW50TmFtZSArIFwiPlxcblwiKSxcbiAgICAgICAgICAgIGluZGVudCsrKTtcbiAgICAgICAgfVxuICAgICAgZGVidWdJbmZvID0gXCJcIjtcbiAgICAgIGkgPSBub2RlLmZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgIGlmICg2ID09PSBub2RlLmZpYmVyLnRhZylcbiAgICAgICAgKGRlYnVnSW5mbyA9IGRlc2NyaWJlVGV4dERpZmYoaSwgbm9kZS5zZXJ2ZXJQcm9wcywgaW5kZW50KSksIGluZGVudCsrO1xuICAgICAgZWxzZSBpZiAoXG4gICAgICAgICgoc2VydmVyQ29tcG9uZW50TmFtZSA9IGRlc2NyaWJlRmliZXJUeXBlKG5vZGUuZmliZXIpKSxcbiAgICAgICAgbnVsbCAhPT0gc2VydmVyQ29tcG9uZW50TmFtZSlcbiAgICAgIClcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gbm9kZS5zZXJ2ZXJQcm9wcykge1xuICAgICAgICAgIGRlYnVnSW5mbyA9IGluZGVudDtcbiAgICAgICAgICB2YXIgbWF4TGVuZ3RoID0gMTIwIC0gMiAqIGRlYnVnSW5mbyAtIHNlcnZlckNvbXBvbmVudE5hbWUubGVuZ3RoIC0gMixcbiAgICAgICAgICAgIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgIGZvciAocHJvcE5hbWUgaW4gaSlcbiAgICAgICAgICAgIGlmIChpLmhhc093blByb3BlcnR5KHByb3BOYW1lKSAmJiBcImNoaWxkcmVuXCIgIT09IHByb3BOYW1lKSB7XG4gICAgICAgICAgICAgIHZhciBwcm9wVmFsdWUgPSBkZXNjcmliZVByb3BWYWx1ZShpW3Byb3BOYW1lXSwgMTUpO1xuICAgICAgICAgICAgICBtYXhMZW5ndGggLT0gcHJvcE5hbWUubGVuZ3RoICsgcHJvcFZhbHVlLmxlbmd0aCArIDI7XG4gICAgICAgICAgICAgIGlmICgwID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCArPSBcIiAuLi5cIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb250ZW50ICs9IFwiIFwiICsgcHJvcE5hbWUgKyBcIj1cIiArIHByb3BWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBkZWJ1Z0luZm8gPVxuICAgICAgICAgICAgaW5kZW50YXRpb24oZGVidWdJbmZvKSArXG4gICAgICAgICAgICBcIjxcIiArXG4gICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lICtcbiAgICAgICAgICAgIGNvbnRlbnQgK1xuICAgICAgICAgICAgXCI+XFxuXCI7XG4gICAgICAgICAgaW5kZW50Kys7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIG51bGwgPT09IG5vZGUuc2VydmVyUHJvcHNcbiAgICAgICAgICAgID8gKChkZWJ1Z0luZm8gPSBkZXNjcmliZUV4cGFuZGVkRWxlbWVudChcbiAgICAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgYWRkZWQoaW5kZW50KVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgaW5kZW50KyspXG4gICAgICAgICAgICA6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBub2RlLnNlcnZlclByb3BzXG4gICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiU2hvdWxkIG5vdCBoYXZlIG1hdGNoZWQgYSBub24gSG9zdFRleHQgZmliZXIgdG8gYSBUZXh0IG5vZGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogKChkZWJ1Z0luZm8gPSBkZXNjcmliZUVsZW1lbnREaWZmKFxuICAgICAgICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICBub2RlLnNlcnZlclByb3BzLFxuICAgICAgICAgICAgICAgICAgaW5kZW50XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgaW5kZW50KyspO1xuICAgICAgdmFyIHByb3BOYW1lID0gXCJcIjtcbiAgICAgIGkgPSBub2RlLmZpYmVyLmNoaWxkO1xuICAgICAgZm9yIChcbiAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZSA9IDA7XG4gICAgICAgIGkgJiYgc2VydmVyQ29tcG9uZW50TmFtZSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xuXG4gICAgICApXG4gICAgICAgIChtYXhMZW5ndGggPSBub2RlLmNoaWxkcmVuW3NlcnZlckNvbXBvbmVudE5hbWVdKSxcbiAgICAgICAgICBtYXhMZW5ndGguZmliZXIgPT09IGlcbiAgICAgICAgICAgID8gKChwcm9wTmFtZSArPSBkZXNjcmliZU5vZGUobWF4TGVuZ3RoLCBpbmRlbnQpKSxcbiAgICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZSsrKVxuICAgICAgICAgICAgOiAocHJvcE5hbWUgKz0gZGVzY3JpYmVTaWJsaW5nRmliZXIoaSwgaW5kZW50KSksXG4gICAgICAgICAgKGkgPSBpLnNpYmxpbmcpO1xuICAgICAgaSAmJlxuICAgICAgICAwIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGggJiZcbiAgICAgICAgKHByb3BOYW1lICs9IGluZGVudGF0aW9uKGluZGVudCkgKyBcIi4uLlxcblwiKTtcbiAgICAgIGkgPSBub2RlLnNlcnZlclRhaWw7XG4gICAgICBudWxsID09PSBub2RlLnNlcnZlclByb3BzICYmIGluZGVudC0tO1xuICAgICAgZm9yIChub2RlID0gMDsgbm9kZSA8IGkubGVuZ3RoOyBub2RlKyspXG4gICAgICAgIChzZXJ2ZXJDb21wb25lbnROYW1lID0gaVtub2RlXSksXG4gICAgICAgICAgKHByb3BOYW1lID1cbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBzZXJ2ZXJDb21wb25lbnROYW1lXG4gICAgICAgICAgICAgID8gcHJvcE5hbWUgK1xuICAgICAgICAgICAgICAgIChyZW1vdmVkKGluZGVudCkgK1xuICAgICAgICAgICAgICAgICAgZGVzY3JpYmVUZXh0Tm9kZShzZXJ2ZXJDb21wb25lbnROYW1lLCAxMjAgLSAyICogaW5kZW50KSArXG4gICAgICAgICAgICAgICAgICBcIlxcblwiKVxuICAgICAgICAgICAgICA6IHByb3BOYW1lICtcbiAgICAgICAgICAgICAgICBkZXNjcmliZUV4cGFuZGVkRWxlbWVudChcbiAgICAgICAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUudHlwZSxcbiAgICAgICAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUucHJvcHMsXG4gICAgICAgICAgICAgICAgICByZW1vdmVkKGluZGVudClcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgIHJldHVybiBza2lwVG9Ob2RlICsgZGVidWdJbmZvICsgcHJvcE5hbWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRGlmZihyb290Tm9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIFwiXFxuXFxuXCIgKyBkZXNjcmliZU5vZGUocm9vdE5vZGUsIDApO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVBbmNlc3RvcnMoYW5jZXN0b3IsIGNoaWxkLCBwcm9wcykge1xuICAgICAgZm9yICh2YXIgZmliZXIgPSBjaGlsZCwgbm9kZSA9IG51bGwsIGRpc3RhbmNlRnJvbUxlYWYgPSAwOyBmaWJlcjsgKVxuICAgICAgICBmaWJlciA9PT0gYW5jZXN0b3IgJiYgKGRpc3RhbmNlRnJvbUxlYWYgPSAwKSxcbiAgICAgICAgICAobm9kZSA9IHtcbiAgICAgICAgICAgIGZpYmVyOiBmaWJlcixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBudWxsICE9PSBub2RlID8gW25vZGVdIDogW10sXG4gICAgICAgICAgICBzZXJ2ZXJQcm9wczpcbiAgICAgICAgICAgICAgZmliZXIgPT09IGNoaWxkID8gcHJvcHMgOiBmaWJlciA9PT0gYW5jZXN0b3IgPyBudWxsIDogdm9pZCAwLFxuICAgICAgICAgICAgc2VydmVyVGFpbDogW10sXG4gICAgICAgICAgICBkaXN0YW5jZUZyb21MZWFmOiBkaXN0YW5jZUZyb21MZWFmXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGlzdGFuY2VGcm9tTGVhZisrLFxuICAgICAgICAgIChmaWJlciA9IGZpYmVyLnJldHVybik7XG4gICAgICByZXR1cm4gbnVsbCAhPT0gbm9kZSA/IGRlc2NyaWJlRGlmZihub2RlKS5yZXBsYWNlQWxsKC9eWystXS9nbSwgXCI+XCIpIDogXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlZEFuY2VzdG9ySW5mb0RldihvbGRJbmZvLCB0YWcpIHtcbiAgICAgIHZhciBhbmNlc3RvckluZm8gPSBhc3NpZ24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm9EZXYpLFxuICAgICAgICBpbmZvID0geyB0YWc6IHRhZyB9O1xuICAgICAgLTEgIT09IGluU2NvcGVUYWdzLmluZGV4T2YodGFnKSAmJlxuICAgICAgICAoKGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IG51bGwpLFxuICAgICAgICAoYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBudWxsKSxcbiAgICAgICAgKGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGwpKTtcbiAgICAgIC0xICE9PSBidXR0b25TY29wZVRhZ3MuaW5kZXhPZih0YWcpICYmXG4gICAgICAgIChhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBudWxsKTtcbiAgICAgIC0xICE9PSBzcGVjaWFsVGFncy5pbmRleE9mKHRhZykgJiZcbiAgICAgICAgXCJhZGRyZXNzXCIgIT09IHRhZyAmJlxuICAgICAgICBcImRpdlwiICE9PSB0YWcgJiZcbiAgICAgICAgXCJwXCIgIT09IHRhZyAmJlxuICAgICAgICAoKGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbCksXG4gICAgICAgIChhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsKSk7XG4gICAgICBhbmNlc3RvckluZm8uY3VycmVudCA9IGluZm87XG4gICAgICBcImZvcm1cIiA9PT0gdGFnICYmIChhbmNlc3RvckluZm8uZm9ybVRhZyA9IGluZm8pO1xuICAgICAgXCJhXCIgPT09IHRhZyAmJiAoYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gaW5mbyk7XG4gICAgICBcImJ1dHRvblwiID09PSB0YWcgJiYgKGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gaW5mbyk7XG4gICAgICBcIm5vYnJcIiA9PT0gdGFnICYmIChhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBpbmZvKTtcbiAgICAgIFwicFwiID09PSB0YWcgJiYgKGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IGluZm8pO1xuICAgICAgXCJsaVwiID09PSB0YWcgJiYgKGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbyk7XG4gICAgICBpZiAoXCJkZFwiID09PSB0YWcgfHwgXCJkdFwiID09PSB0YWcpXG4gICAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgICBcIiNkb2N1bWVudFwiID09PSB0YWcgfHwgXCJodG1sXCIgPT09IHRhZ1xuICAgICAgICA/IChhbmNlc3RvckluZm8uY29udGFpbmVyVGFnSW5TY29wZSA9IG51bGwpXG4gICAgICAgIDogYW5jZXN0b3JJbmZvLmNvbnRhaW5lclRhZ0luU2NvcGUgfHxcbiAgICAgICAgICAoYW5jZXN0b3JJbmZvLmNvbnRhaW5lclRhZ0luU2NvcGUgPSBpbmZvKTtcbiAgICAgIG51bGwgIT09IG9sZEluZm8gfHxcbiAgICAgIChcIiNkb2N1bWVudFwiICE9PSB0YWcgJiYgXCJodG1sXCIgIT09IHRhZyAmJiBcImJvZHlcIiAhPT0gdGFnKVxuICAgICAgICA/ICEwID09PSBhbmNlc3RvckluZm8uaW1wbGljaXRSb290U2NvcGUgJiZcbiAgICAgICAgICAoYW5jZXN0b3JJbmZvLmltcGxpY2l0Um9vdFNjb3BlID0gITEpXG4gICAgICAgIDogKGFuY2VzdG9ySW5mby5pbXBsaWNpdFJvb3RTY29wZSA9ICEwKTtcbiAgICAgIHJldHVybiBhbmNlc3RvckluZm87XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVGFnVmFsaWRXaXRoUGFyZW50KHRhZywgcGFyZW50VGFnLCBpbXBsaWNpdFJvb3RTY29wZSkge1xuICAgICAgc3dpdGNoIChwYXJlbnRUYWcpIHtcbiAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcImhyXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJvcHRpb25cIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcIm9wdGdyb3VwXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzY3JpcHRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRlbXBsYXRlXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCIjdGV4dFwiID09PSB0YWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwib3B0Z3JvdXBcIjpcbiAgICAgICAgICByZXR1cm4gXCJvcHRpb25cIiA9PT0gdGFnIHx8IFwiI3RleHRcIiA9PT0gdGFnO1xuICAgICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgICAgcmV0dXJuIFwiI3RleHRcIiA9PT0gdGFnO1xuICAgICAgICBjYXNlIFwidHJcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJ0aFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInN0eWxlXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzY3JpcHRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRlbXBsYXRlXCIgPT09IHRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJ0Ym9keVwiOlxuICAgICAgICBjYXNlIFwidGhlYWRcIjpcbiAgICAgICAgY2FzZSBcInRmb290XCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFwidHJcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInN0eWxlXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzY3JpcHRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRlbXBsYXRlXCIgPT09IHRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJjb2xncm91cFwiOlxuICAgICAgICAgIHJldHVybiBcImNvbFwiID09PSB0YWcgfHwgXCJ0ZW1wbGF0ZVwiID09PSB0YWc7XG4gICAgICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcImNhcHRpb25cIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcImNvbGdyb3VwXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0Ym9keVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGZvb3RcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRoZWFkXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzdHlsZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiID09PSB0YWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiaGVhZFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcImJhc2VcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcImJhc2Vmb250XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJiZ3NvdW5kXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJsaW5rXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJtZXRhXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0aXRsZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwibm9zY3JpcHRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcIm5vZnJhbWVzXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzdHlsZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiID09PSB0YWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICAgIGlmIChpbXBsaWNpdFJvb3RTY29wZSkgYnJlYWs7XG4gICAgICAgICAgcmV0dXJuIFwiaGVhZFwiID09PSB0YWcgfHwgXCJib2R5XCIgPT09IHRhZyB8fCBcImZyYW1lc2V0XCIgPT09IHRhZztcbiAgICAgICAgY2FzZSBcImZyYW1lc2V0XCI6XG4gICAgICAgICAgcmV0dXJuIFwiZnJhbWVcIiA9PT0gdGFnO1xuICAgICAgICBjYXNlIFwiI2RvY3VtZW50XCI6XG4gICAgICAgICAgaWYgKCFpbXBsaWNpdFJvb3RTY29wZSkgcmV0dXJuIFwiaHRtbFwiID09PSB0YWc7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIFwiaDFcIjpcbiAgICAgICAgY2FzZSBcImgyXCI6XG4gICAgICAgIGNhc2UgXCJoM1wiOlxuICAgICAgICBjYXNlIFwiaDRcIjpcbiAgICAgICAgY2FzZSBcImg1XCI6XG4gICAgICAgIGNhc2UgXCJoNlwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcImgxXCIgIT09IHBhcmVudFRhZyAmJlxuICAgICAgICAgICAgXCJoMlwiICE9PSBwYXJlbnRUYWcgJiZcbiAgICAgICAgICAgIFwiaDNcIiAhPT0gcGFyZW50VGFnICYmXG4gICAgICAgICAgICBcImg0XCIgIT09IHBhcmVudFRhZyAmJlxuICAgICAgICAgICAgXCJoNVwiICE9PSBwYXJlbnRUYWcgJiZcbiAgICAgICAgICAgIFwiaDZcIiAhPT0gcGFyZW50VGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcInJwXCI6XG4gICAgICAgIGNhc2UgXCJydFwiOlxuICAgICAgICAgIHJldHVybiAtMSA9PT0gaW1wbGllZEVuZFRhZ3MuaW5kZXhPZihwYXJlbnRUYWcpO1xuICAgICAgICBjYXNlIFwiY2FwdGlvblwiOlxuICAgICAgICBjYXNlIFwiY29sXCI6XG4gICAgICAgIGNhc2UgXCJjb2xncm91cFwiOlxuICAgICAgICBjYXNlIFwiZnJhbWVzZXRcIjpcbiAgICAgICAgY2FzZSBcImZyYW1lXCI6XG4gICAgICAgIGNhc2UgXCJ0Ym9keVwiOlxuICAgICAgICBjYXNlIFwidGRcIjpcbiAgICAgICAgY2FzZSBcInRmb290XCI6XG4gICAgICAgIGNhc2UgXCJ0aFwiOlxuICAgICAgICBjYXNlIFwidGhlYWRcIjpcbiAgICAgICAgY2FzZSBcInRyXCI6XG4gICAgICAgICAgcmV0dXJuIG51bGwgPT0gcGFyZW50VGFnO1xuICAgICAgICBjYXNlIFwiaGVhZFwiOlxuICAgICAgICAgIHJldHVybiBpbXBsaWNpdFJvb3RTY29wZSB8fCBudWxsID09PSBwYXJlbnRUYWc7XG4gICAgICAgIGNhc2UgXCJodG1sXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbXBsaWNpdFJvb3RTY29wZSAmJiBcIiNkb2N1bWVudFwiID09PSBwYXJlbnRUYWcpIHx8XG4gICAgICAgICAgICBudWxsID09PSBwYXJlbnRUYWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiYm9keVwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaW1wbGljaXRSb290U2NvcGUgJiZcbiAgICAgICAgICAgICAgKFwiI2RvY3VtZW50XCIgPT09IHBhcmVudFRhZyB8fCBcImh0bWxcIiA9PT0gcGFyZW50VGFnKSkgfHxcbiAgICAgICAgICAgIG51bGwgPT09IHBhcmVudFRhZ1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcodGFnLCBhbmNlc3RvckluZm8pIHtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgXCJhZGRyZXNzXCI6XG4gICAgICAgIGNhc2UgXCJhcnRpY2xlXCI6XG4gICAgICAgIGNhc2UgXCJhc2lkZVwiOlxuICAgICAgICBjYXNlIFwiYmxvY2txdW90ZVwiOlxuICAgICAgICBjYXNlIFwiY2VudGVyXCI6XG4gICAgICAgIGNhc2UgXCJkZXRhaWxzXCI6XG4gICAgICAgIGNhc2UgXCJkaWFsb2dcIjpcbiAgICAgICAgY2FzZSBcImRpclwiOlxuICAgICAgICBjYXNlIFwiZGl2XCI6XG4gICAgICAgIGNhc2UgXCJkbFwiOlxuICAgICAgICBjYXNlIFwiZmllbGRzZXRcIjpcbiAgICAgICAgY2FzZSBcImZpZ2NhcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImZpZ3VyZVwiOlxuICAgICAgICBjYXNlIFwiZm9vdGVyXCI6XG4gICAgICAgIGNhc2UgXCJoZWFkZXJcIjpcbiAgICAgICAgY2FzZSBcImhncm91cFwiOlxuICAgICAgICBjYXNlIFwibWFpblwiOlxuICAgICAgICBjYXNlIFwibWVudVwiOlxuICAgICAgICBjYXNlIFwibmF2XCI6XG4gICAgICAgIGNhc2UgXCJvbFwiOlxuICAgICAgICBjYXNlIFwicFwiOlxuICAgICAgICBjYXNlIFwic2VjdGlvblwiOlxuICAgICAgICBjYXNlIFwic3VtbWFyeVwiOlxuICAgICAgICBjYXNlIFwidWxcIjpcbiAgICAgICAgY2FzZSBcInByZVwiOlxuICAgICAgICBjYXNlIFwibGlzdGluZ1wiOlxuICAgICAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgICAgY2FzZSBcImhyXCI6XG4gICAgICAgIGNhc2UgXCJ4bXBcIjpcbiAgICAgICAgY2FzZSBcImgxXCI6XG4gICAgICAgIGNhc2UgXCJoMlwiOlxuICAgICAgICBjYXNlIFwiaDNcIjpcbiAgICAgICAgY2FzZSBcImg0XCI6XG4gICAgICAgIGNhc2UgXCJoNVwiOlxuICAgICAgICBjYXNlIFwiaDZcIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuICAgICAgICBjYXNlIFwiZm9ybVwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZm9ybVRhZyB8fCBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG4gICAgICAgIGNhc2UgXCJsaVwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZztcbiAgICAgICAgY2FzZSBcImRkXCI6XG4gICAgICAgIGNhc2UgXCJkdFwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3Npbmc7XG4gICAgICAgIGNhc2UgXCJidXR0b25cIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGU7XG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZTtcbiAgICAgICAgY2FzZSBcIm5vYnJcIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRBbmNlc3RvcihwYXJlbnQsIHRhZ05hbWUpIHtcbiAgICAgIGZvciAoOyBwYXJlbnQ7ICkge1xuICAgICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgaWYgKHBhcmVudC50eXBlID09PSB0YWdOYW1lKSByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVET01OZXN0aW5nKGNoaWxkVGFnLCBhbmNlc3RvckluZm8pIHtcbiAgICAgIGFuY2VzdG9ySW5mbyA9IGFuY2VzdG9ySW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mb0RldjtcbiAgICAgIHZhciBwYXJlbnRJbmZvID0gYW5jZXN0b3JJbmZvLmN1cnJlbnQ7XG4gICAgICBhbmNlc3RvckluZm8gPSAocGFyZW50SW5mbyA9IGlzVGFnVmFsaWRXaXRoUGFyZW50KFxuICAgICAgICBjaGlsZFRhZyxcbiAgICAgICAgcGFyZW50SW5mbyAmJiBwYXJlbnRJbmZvLnRhZyxcbiAgICAgICAgYW5jZXN0b3JJbmZvLmltcGxpY2l0Um9vdFNjb3BlXG4gICAgICApXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHBhcmVudEluZm8pXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgICBhbmNlc3RvckluZm8gPSBwYXJlbnRJbmZvIHx8IGFuY2VzdG9ySW5mbztcbiAgICAgIGlmICghYW5jZXN0b3JJbmZvKSByZXR1cm4gITA7XG4gICAgICB2YXIgYW5jZXN0b3JUYWcgPSBhbmNlc3RvckluZm8udGFnO1xuICAgICAgYW5jZXN0b3JJbmZvID0gU3RyaW5nKCEhcGFyZW50SW5mbykgKyBcInxcIiArIGNoaWxkVGFnICsgXCJ8XCIgKyBhbmNlc3RvclRhZztcbiAgICAgIGlmIChkaWRXYXJuW2FuY2VzdG9ySW5mb10pIHJldHVybiAhMTtcbiAgICAgIGRpZFdhcm5bYW5jZXN0b3JJbmZvXSA9ICEwO1xuICAgICAgdmFyIGFuY2VzdG9yID0gKGFuY2VzdG9ySW5mbyA9IGN1cnJlbnQpXG4gICAgICAgICAgPyBmaW5kQW5jZXN0b3IoYW5jZXN0b3JJbmZvLnJldHVybiwgYW5jZXN0b3JUYWcpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBhbmNlc3RvckRlc2NyaXB0aW9uID1cbiAgICAgICAgICBudWxsICE9PSBhbmNlc3RvckluZm8gJiYgbnVsbCAhPT0gYW5jZXN0b3JcbiAgICAgICAgICAgID8gZGVzY3JpYmVBbmNlc3RvcnMoYW5jZXN0b3IsIGFuY2VzdG9ySW5mbywgbnVsbClcbiAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSBcIjxcIiArIGNoaWxkVGFnICsgXCI+XCI7XG4gICAgICBwYXJlbnRJbmZvXG4gICAgICAgID8gKChwYXJlbnRJbmZvID0gXCJcIiksXG4gICAgICAgICAgXCJ0YWJsZVwiID09PSBhbmNlc3RvclRhZyAmJlxuICAgICAgICAgICAgXCJ0clwiID09PSBjaGlsZFRhZyAmJlxuICAgICAgICAgICAgKHBhcmVudEluZm8gKz1cbiAgICAgICAgICAgICAgXCIgQWRkIGEgPHRib2R5PiwgPHRoZWFkPiBvciA8dGZvb3Q+IHRvIHlvdXIgY29kZSB0byBtYXRjaCB0aGUgRE9NIHRyZWUgZ2VuZXJhdGVkIGJ5IHRoZSBicm93c2VyLlwiKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbiBIVE1MLCAlcyBjYW5ub3QgYmUgYSBjaGlsZCBvZiA8JXM+LiVzXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yLiVzXCIsXG4gICAgICAgICAgICB0YWdEaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIGFuY2VzdG9yVGFnLFxuICAgICAgICAgICAgcGFyZW50SW5mbyxcbiAgICAgICAgICAgIGFuY2VzdG9yRGVzY3JpcHRpb25cbiAgICAgICAgICApKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkluIEhUTUwsICVzIGNhbm5vdCBiZSBhIGRlc2NlbmRhbnQgb2YgPCVzPi5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3IuJXNcIixcbiAgICAgICAgICAgIHRhZ0Rpc3BsYXlOYW1lLFxuICAgICAgICAgICAgYW5jZXN0b3JUYWcsXG4gICAgICAgICAgICBhbmNlc3RvckRlc2NyaXB0aW9uXG4gICAgICAgICAgKTtcbiAgICAgIGFuY2VzdG9ySW5mbyAmJlxuICAgICAgICAoKGNoaWxkVGFnID0gYW5jZXN0b3JJbmZvLnJldHVybiksXG4gICAgICAgIG51bGwgPT09IGFuY2VzdG9yIHx8XG4gICAgICAgICAgbnVsbCA9PT0gY2hpbGRUYWcgfHxcbiAgICAgICAgICAoYW5jZXN0b3IgPT09IGNoaWxkVGFnICYmXG4gICAgICAgICAgICBjaGlsZFRhZy5fZGVidWdPd25lciA9PT0gYW5jZXN0b3JJbmZvLl9kZWJ1Z093bmVyKSB8fFxuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKGFuY2VzdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIjwlcz4gY2Fubm90IGNvbnRhaW4gYSBuZXN0ZWQgJXMuXFxuU2VlIHRoaXMgbG9nIGZvciB0aGUgYW5jZXN0b3Igc3RhY2sgdHJhY2UuXCIsXG4gICAgICAgICAgICAgIGFuY2VzdG9yVGFnLFxuICAgICAgICAgICAgICB0YWdEaXNwbGF5TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSk7XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlVGV4dE5lc3RpbmcoY2hpbGRUZXh0LCBwYXJlbnRUYWcsIGltcGxpY2l0Um9vdFNjb3BlKSB7XG4gICAgICBpZiAoaW1wbGljaXRSb290U2NvcGUgfHwgaXNUYWdWYWxpZFdpdGhQYXJlbnQoXCIjdGV4dFwiLCBwYXJlbnRUYWcsICExKSlcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgaW1wbGljaXRSb290U2NvcGUgPSBcIiN0ZXh0fFwiICsgcGFyZW50VGFnO1xuICAgICAgaWYgKGRpZFdhcm5baW1wbGljaXRSb290U2NvcGVdKSByZXR1cm4gITE7XG4gICAgICBkaWRXYXJuW2ltcGxpY2l0Um9vdFNjb3BlXSA9ICEwO1xuICAgICAgdmFyIGFuY2VzdG9yID0gKGltcGxpY2l0Um9vdFNjb3BlID0gY3VycmVudClcbiAgICAgICAgPyBmaW5kQW5jZXN0b3IoaW1wbGljaXRSb290U2NvcGUsIHBhcmVudFRhZylcbiAgICAgICAgOiBudWxsO1xuICAgICAgaW1wbGljaXRSb290U2NvcGUgPVxuICAgICAgICBudWxsICE9PSBpbXBsaWNpdFJvb3RTY29wZSAmJiBudWxsICE9PSBhbmNlc3RvclxuICAgICAgICAgID8gZGVzY3JpYmVBbmNlc3RvcnMoXG4gICAgICAgICAgICAgIGFuY2VzdG9yLFxuICAgICAgICAgICAgICBpbXBsaWNpdFJvb3RTY29wZSxcbiAgICAgICAgICAgICAgNiAhPT0gaW1wbGljaXRSb290U2NvcGUudGFnID8geyBjaGlsZHJlbjogbnVsbCB9IDogbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogXCJcIjtcbiAgICAgIC9cXFMvLnRlc3QoY2hpbGRUZXh0KVxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkluIEhUTUwsIHRleHQgbm9kZXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCVzPi5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3IuJXNcIixcbiAgICAgICAgICAgIHBhcmVudFRhZyxcbiAgICAgICAgICAgIGltcGxpY2l0Um9vdFNjb3BlXG4gICAgICAgICAgKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkluIEhUTUwsIHdoaXRlc3BhY2UgdGV4dCBub2RlcyBjYW5ub3QgYmUgYSBjaGlsZCBvZiA8JXM+LiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIGVhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlLlxcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvci4lc1wiLFxuICAgICAgICAgICAgcGFyZW50VGFnLFxuICAgICAgICAgICAgaW1wbGljaXRSb290U2NvcGVcbiAgICAgICAgICApO1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRUZXh0Q29udGVudChub2RlLCB0ZXh0KSB7XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpcnN0Q2hpbGQgJiZcbiAgICAgICAgICBmaXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJlxuICAgICAgICAgIDMgPT09IGZpcnN0Q2hpbGQubm9kZVR5cGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbWVsaXplKHN0cmluZykge1xuICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChfLCBjaGFyYWN0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGUoc3R5bGUsIHN0eWxlTmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gMCA9PT0gc3R5bGVOYW1lLmluZGV4T2YoXCItLVwiKTtcbiAgICAgIGlzQ3VzdG9tUHJvcGVydHkgfHxcbiAgICAgICAgKC0xIDwgc3R5bGVOYW1lLmluZGV4T2YoXCItXCIpXG4gICAgICAgICAgPyAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmXG4gICAgICAgICAgICAgIHdhcm5lZFN0eWxlTmFtZXNbc3R5bGVOYW1lXSkgfHxcbiAgICAgICAgICAgICgod2FybmVkU3R5bGVOYW1lc1tzdHlsZU5hbWVdID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJVbnN1cHBvcnRlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzP1wiLFxuICAgICAgICAgICAgICBzdHlsZU5hbWUsXG4gICAgICAgICAgICAgIGNhbWVsaXplKHN0eWxlTmFtZS5yZXBsYWNlKG1zUGF0dGVybiwgXCJtcy1cIikpXG4gICAgICAgICAgICApKVxuICAgICAgICAgIDogYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuLnRlc3Qoc3R5bGVOYW1lKVxuICAgICAgICAgICAgPyAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmXG4gICAgICAgICAgICAgICAgd2FybmVkU3R5bGVOYW1lc1tzdHlsZU5hbWVdKSB8fFxuICAgICAgICAgICAgICAoKHdhcm5lZFN0eWxlTmFtZXNbc3R5bGVOYW1lXSA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzP1wiLFxuICAgICAgICAgICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgICAgICAgICBzdHlsZU5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHlsZU5hbWUuc2xpY2UoMSlcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIDogIWJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSB8fFxuICAgICAgICAgICAgICAod2FybmVkU3R5bGVWYWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdKSB8fFxuICAgICAgICAgICAgICAoKHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnU3R5bGUgcHJvcGVydHkgdmFsdWVzIHNob3VsZG5cXCd0IGNvbnRhaW4gYSBzZW1pY29sb24uIFRyeSBcIiVzOiAlc1wiIGluc3RlYWQuJyxcbiAgICAgICAgICAgICAgICBzdHlsZU5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWUucmVwbGFjZShiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4sIFwiXCIpXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAoaXNOYU4odmFsdWUpXG4gICAgICAgICAgICA/IHdhcm5lZEZvck5hTlZhbHVlIHx8XG4gICAgICAgICAgICAgICgod2FybmVkRm9yTmFOVmFsdWUgPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJgTmFOYCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuXCIsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6IGlzRmluaXRlKHZhbHVlKSB8fFxuICAgICAgICAgICAgICB3YXJuZWRGb3JJbmZpbml0eVZhbHVlIHx8XG4gICAgICAgICAgICAgICgod2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcImBJbmZpbml0eWAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LlwiLFxuICAgICAgICAgICAgICAgIHN0eWxlTmFtZVxuICAgICAgICAgICAgICApKSkpO1xuICAgICAgbnVsbCA9PSB2YWx1ZSB8fCBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHZhbHVlIHx8IFwiXCIgPT09IHZhbHVlXG4gICAgICAgID8gaXNDdXN0b21Qcm9wZXJ0eVxuICAgICAgICAgID8gc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCBcIlwiKVxuICAgICAgICAgIDogXCJmbG9hdFwiID09PSBzdHlsZU5hbWVcbiAgICAgICAgICAgID8gKHN0eWxlLmNzc0Zsb2F0ID0gXCJcIilcbiAgICAgICAgICAgIDogKHN0eWxlW3N0eWxlTmFtZV0gPSBcIlwiKVxuICAgICAgICA6IGlzQ3VzdG9tUHJvcGVydHlcbiAgICAgICAgICA/IHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgdmFsdWUpXG4gICAgICAgICAgOiBcIm51bWJlclwiICE9PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgICAgMCA9PT0gdmFsdWUgfHxcbiAgICAgICAgICAgICAgdW5pdGxlc3NOdW1iZXJzLmhhcyhzdHlsZU5hbWUpXG4gICAgICAgICAgICA/IFwiZmxvYXRcIiA9PT0gc3R5bGVOYW1lXG4gICAgICAgICAgICAgID8gKHN0eWxlLmNzc0Zsb2F0ID0gdmFsdWUpXG4gICAgICAgICAgICAgIDogKGNoZWNrQ1NTUHJvcGVydHlTdHJpbmdDb2VyY2lvbih2YWx1ZSwgc3R5bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAoc3R5bGVbc3R5bGVOYW1lXSA9IChcIlwiICsgdmFsdWUpLnRyaW0oKSkpXG4gICAgICAgICAgICA6IChzdHlsZVtzdHlsZU5hbWVdID0gdmFsdWUgKyBcInB4XCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRWYWx1ZUZvclN0eWxlcyhub2RlLCBzdHlsZXMsIHByZXZTdHlsZXMpIHtcbiAgICAgIGlmIChudWxsICE9IHN0eWxlcyAmJiBcIm9iamVjdFwiICE9PSB0eXBlb2Ygc3R5bGVzKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBgc3R5bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcywgbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArICdlbSd9fSB3aGVuIHVzaW5nIEpTWC5cIlxuICAgICAgICApO1xuICAgICAgc3R5bGVzICYmIE9iamVjdC5mcmVlemUoc3R5bGVzKTtcbiAgICAgIG5vZGUgPSBub2RlLnN0eWxlO1xuICAgICAgaWYgKG51bGwgIT0gcHJldlN0eWxlcykge1xuICAgICAgICBpZiAoc3R5bGVzKSB7XG4gICAgICAgICAgdmFyIGV4cGFuZGVkVXBkYXRlcyA9IHt9O1xuICAgICAgICAgIGlmIChwcmV2U3R5bGVzKVxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHByZXZTdHlsZXMpXG4gICAgICAgICAgICAgIGlmIChwcmV2U3R5bGVzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICB2YXIgbG9uZ2hhbmRzID0gc2hvcnRoYW5kVG9Mb25naGFuZFtrZXldIHx8IFtrZXldLCBpID0gMDtcbiAgICAgICAgICAgICAgICAgIGkgPCBsb25naGFuZHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgaSsrXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWRVcGRhdGVzW2xvbmdoYW5kc1tpXV0gPSBrZXk7XG4gICAgICAgICAgZm9yICh2YXIgX2tleSBpbiBzdHlsZXMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHN0eWxlcy5oYXNPd25Qcm9wZXJ0eShfa2V5KSAmJlxuICAgICAgICAgICAgICAoIXByZXZTdHlsZXMgfHwgcHJldlN0eWxlc1tfa2V5XSAhPT0gc3R5bGVzW19rZXldKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIGtleSA9IHNob3J0aGFuZFRvTG9uZ2hhbmRbX2tleV0gfHwgW19rZXldLCBsb25naGFuZHMgPSAwO1xuICAgICAgICAgICAgICAgIGxvbmdoYW5kcyA8IGtleS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgbG9uZ2hhbmRzKytcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGV4cGFuZGVkVXBkYXRlc1trZXlbbG9uZ2hhbmRzXV0gPSBfa2V5O1xuICAgICAgICAgIF9rZXkgPSB7fTtcbiAgICAgICAgICBmb3IgKHZhciBrZXkkanNjb21wJDAgaW4gc3R5bGVzKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAga2V5ID0gc2hvcnRoYW5kVG9Mb25naGFuZFtrZXkkanNjb21wJDBdIHx8IFtrZXkkanNjb21wJDBdLFxuICAgICAgICAgICAgICAgIGxvbmdoYW5kcyA9IDA7XG4gICAgICAgICAgICAgIGxvbmdoYW5kcyA8IGtleS5sZW5ndGg7XG4gICAgICAgICAgICAgIGxvbmdoYW5kcysrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIF9rZXlba2V5W2xvbmdoYW5kc11dID0ga2V5JGpzY29tcCQwO1xuICAgICAgICAgIGtleSRqc2NvbXAkMCA9IHt9O1xuICAgICAgICAgIGZvciAodmFyIF9rZXkyIGluIGV4cGFuZGVkVXBkYXRlcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChrZXkgPSBleHBhbmRlZFVwZGF0ZXNbX2tleTJdKSxcbiAgICAgICAgICAgICAgKGxvbmdoYW5kcyA9IF9rZXlbX2tleTJdKSAmJlxuICAgICAgICAgICAgICAgIGtleSAhPT0gbG9uZ2hhbmRzICYmXG4gICAgICAgICAgICAgICAgKChpID0ga2V5ICsgXCIsXCIgKyBsb25naGFuZHMpLCAha2V5JGpzY29tcCQwW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBrZXkkanNjb21wJDBbaV0gPSAhMDtcbiAgICAgICAgICAgICAgaSA9IGNvbnNvbGU7XG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0eWxlc1trZXldO1xuICAgICAgICAgICAgICBpLmVycm9yLmNhbGwoXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBcIiVzIGEgc3R5bGUgcHJvcGVydHkgZHVyaW5nIHJlcmVuZGVyICglcykgd2hlbiBhIGNvbmZsaWN0aW5nIHByb3BlcnR5IGlzIHNldCAoJXMpIGNhbiBsZWFkIHRvIHN0eWxpbmcgYnVncy4gVG8gYXZvaWQgdGhpcywgZG9uJ3QgbWl4IHNob3J0aGFuZCBhbmQgbm9uLXNob3J0aGFuZCBwcm9wZXJ0aWVzIGZvciB0aGUgc2FtZSB2YWx1ZTsgaW5zdGVhZCwgcmVwbGFjZSB0aGUgc2hvcnRoYW5kIHdpdGggc2VwYXJhdGUgdmFsdWVzLlwiLFxuICAgICAgICAgICAgICAgIG51bGwgPT0gdmFsdWUgfHwgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZSB8fCBcIlwiID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgPyBcIlJlbW92aW5nXCJcbiAgICAgICAgICAgICAgICAgIDogXCJVcGRhdGluZ1wiLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBsb25naGFuZHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gcHJldlN0eWxlcylcbiAgICAgICAgICAhcHJldlN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpIHx8XG4gICAgICAgICAgICAobnVsbCAhPSBzdHlsZXMgJiYgc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHx8XG4gICAgICAgICAgICAoMCA9PT0gc3R5bGVOYW1lLmluZGV4T2YoXCItLVwiKVxuICAgICAgICAgICAgICA/IG5vZGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCBcIlwiKVxuICAgICAgICAgICAgICA6IFwiZmxvYXRcIiA9PT0gc3R5bGVOYW1lXG4gICAgICAgICAgICAgICAgPyAobm9kZS5jc3NGbG9hdCA9IFwiXCIpXG4gICAgICAgICAgICAgICAgOiAobm9kZVtzdHlsZU5hbWVdID0gXCJcIikpO1xuICAgICAgICBmb3IgKHZhciBfc3R5bGVOYW1lIGluIHN0eWxlcylcbiAgICAgICAgICAoX2tleTIgPSBzdHlsZXNbX3N0eWxlTmFtZV0pLFxuICAgICAgICAgICAgc3R5bGVzLmhhc093blByb3BlcnR5KF9zdHlsZU5hbWUpICYmXG4gICAgICAgICAgICAgIHByZXZTdHlsZXNbX3N0eWxlTmFtZV0gIT09IF9rZXkyICYmXG4gICAgICAgICAgICAgIHNldFZhbHVlRm9yU3R5bGUobm9kZSwgX3N0eWxlTmFtZSwgX2tleTIpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGZvciAoZXhwYW5kZWRVcGRhdGVzIGluIHN0eWxlcylcbiAgICAgICAgICBzdHlsZXMuaGFzT3duUHJvcGVydHkoZXhwYW5kZWRVcGRhdGVzKSAmJlxuICAgICAgICAgICAgc2V0VmFsdWVGb3JTdHlsZShub2RlLCBleHBhbmRlZFVwZGF0ZXMsIHN0eWxlc1tleHBhbmRlZFVwZGF0ZXNdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDdXN0b21FbGVtZW50KHRhZ05hbWUpIHtcbiAgICAgIGlmICgtMSA9PT0gdGFnTmFtZS5pbmRleE9mKFwiLVwiKSkgcmV0dXJuICExO1xuICAgICAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgICAgIGNhc2UgXCJhbm5vdGF0aW9uLXhtbFwiOlxuICAgICAgICBjYXNlIFwiY29sb3ItcHJvZmlsZVwiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlXCI6XG4gICAgICAgIGNhc2UgXCJmb250LWZhY2Utc3JjXCI6XG4gICAgICAgIGNhc2UgXCJmb250LWZhY2UtdXJpXCI6XG4gICAgICAgIGNhc2UgXCJmb250LWZhY2UtZm9ybWF0XCI6XG4gICAgICAgIGNhc2UgXCJmb250LWZhY2UtbmFtZVwiOlxuICAgICAgICBjYXNlIFwibWlzc2luZy1nbHlwaFwiOlxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZUFsaWFzKG5hbWUpIHtcbiAgICAgIHJldHVybiBhbGlhc2VzLmdldChuYW1lKSB8fCBuYW1lO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5JDEodGFnTmFtZSwgbmFtZSkge1xuICAgICAgaWYgKFxuICAgICAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFByb3BlcnRpZXMkMSwgbmFtZSkgJiZcbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdXG4gICAgICApXG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIGlmIChyQVJJQUNhbWVsJDEudGVzdChuYW1lKSkge1xuICAgICAgICB0YWdOYW1lID0gXCJhcmlhLVwiICsgbmFtZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB0YWdOYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgPyB0YWdOYW1lIDogbnVsbDtcbiAgICAgICAgaWYgKG51bGwgPT0gdGFnTmFtZSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIEFSSUEgYXR0cmlidXRlcyBmb2xsb3cgdGhlIHBhdHRlcm4gYXJpYS0qIGFuZCBtdXN0IGJlIGxvd2VyY2FzZS5cIixcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSAhMClcbiAgICAgICAgICApO1xuICAgICAgICBpZiAobmFtZSAhPT0gdGFnTmFtZSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgP1wiLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB0YWdOYW1lXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9ICEwKVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAockFSSUEkMS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHRhZ05hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHRhZ05hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKSA/IHRhZ05hbWUgOiBudWxsO1xuICAgICAgICBpZiAobnVsbCA9PSB0YWdOYW1lKSByZXR1cm4gKHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9ICEwKSwgITE7XG4gICAgICAgIG5hbWUgIT09IHRhZ05hbWUgJiZcbiAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVW5rbm93biBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD9cIixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0YWdOYW1lXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gITApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMpIHtcbiAgICAgIHZhciBpbnZhbGlkUHJvcHMgPSBbXSxcbiAgICAgICAga2V5O1xuICAgICAgZm9yIChrZXkgaW4gcHJvcHMpXG4gICAgICAgIHZhbGlkYXRlUHJvcGVydHkkMSh0eXBlLCBrZXkpIHx8IGludmFsaWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICBwcm9wcyA9IGludmFsaWRQcm9wc1xuICAgICAgICAubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgcmV0dXJuIFwiYFwiICsgcHJvcCArIFwiYFwiO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIiwgXCIpO1xuICAgICAgMSA9PT0gaW52YWxpZFByb3BzLmxlbmd0aFxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgYXJpYSBwcm9wICVzIG9uIDwlcz4gdGFnLiBGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1hcmlhLXByb3BzXCIsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICApXG4gICAgICAgIDogMSA8IGludmFsaWRQcm9wcy5sZW5ndGggJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIGFyaWEgcHJvcHMgJXMgb24gPCVzPiB0YWcuIEZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWFyaWEtcHJvcHNcIixcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodGFnTmFtZSwgbmFtZSwgdmFsdWUsIGV2ZW50UmVnaXN0cnkpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFByb3BlcnRpZXMsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0pXG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChcIm9uZm9jdXNpblwiID09PSBsb3dlckNhc2VkTmFtZSB8fCBcIm9uZm9jdXNvdXRcIiA9PT0gbG93ZXJDYXNlZE5hbWUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3QgdXNlcyBvbkZvY3VzIGFuZCBvbkJsdXIgaW5zdGVhZCBvZiBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQuIEFsbCBSZWFjdCBldmVudHMgYXJlIG5vcm1hbGl6ZWQgdG8gYnViYmxlLCBzbyBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQgYXJlIG5vdCBuZWVkZWQvc3VwcG9ydGVkIGJ5IFJlYWN0LlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAoKFwiZm9ybVwiID09PSB0YWdOYW1lICYmIFwiYWN0aW9uXCIgPT09IG5hbWUpIHx8XG4gICAgICAgICAgKFwiaW5wdXRcIiA9PT0gdGFnTmFtZSAmJiBcImZvcm1BY3Rpb25cIiA9PT0gbmFtZSkgfHxcbiAgICAgICAgICAoXCJidXR0b25cIiA9PT0gdGFnTmFtZSAmJiBcImZvcm1BY3Rpb25cIiA9PT0gbmFtZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIGlmIChudWxsICE9IGV2ZW50UmVnaXN0cnkpIHtcbiAgICAgICAgdGFnTmFtZSA9IGV2ZW50UmVnaXN0cnkucG9zc2libGVSZWdpc3RyYXRpb25OYW1lcztcbiAgICAgICAgaWYgKGV2ZW50UmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSlcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIGV2ZW50UmVnaXN0cnkgPSB0YWdOYW1lLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKVxuICAgICAgICAgID8gdGFnTmFtZVtsb3dlckNhc2VkTmFtZV1cbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGlmIChudWxsICE9IGV2ZW50UmVnaXN0cnkpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgP1wiLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBldmVudFJlZ2lzdHJ5XG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlVua25vd24gZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBJdCB3aWxsIGJlIGlnbm9yZWQuXCIsXG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gUmVhY3QgZXZlbnRzIHVzZSB0aGUgY2FtZWxDYXNlIG5hbWluZyBjb252ZW50aW9uLCBmb3IgZXhhbXBsZSBgb25DbGlja2AuXCIsXG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChyQVJJQS50ZXN0KG5hbWUpIHx8IHJBUklBQ2FtZWwudGVzdChuYW1lKSkgcmV0dXJuICEwO1xuICAgICAgaWYgKFwiaW5uZXJodG1sXCIgPT09IGxvd2VyQ2FzZWROYW1lKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkRpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGxvb2t1cCBkb2N1bWVudGF0aW9uIG9uIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBpZiAoXCJhcmlhXCIgPT09IGxvd2VyQ2FzZWROYW1lKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSBgYXJpYWAgYXR0cmlidXRlIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGluIFJlYWN0LiBQYXNzIGluZGl2aWR1YWwgYGFyaWEtYCBhdHRyaWJ1dGVzIGluc3RlYWQuXCJcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIFwiaXNcIiA9PT0gbG93ZXJDYXNlZE5hbWUgJiZcbiAgICAgICAgbnVsbCAhPT0gdmFsdWUgJiZcbiAgICAgICAgdm9pZCAwICE9PSB2YWx1ZSAmJlxuICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgdmFsdWVcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWNlaXZlZCBhIGAlc2AgZm9yIGEgc3RyaW5nIGF0dHJpYnV0ZSBgaXNgLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0IHRoZSB2YWx1ZSB0byBhIHN0cmluZy5cIixcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcIm51bWJlclwiID09PSB0eXBlb2YgdmFsdWUgJiYgaXNOYU4odmFsdWUpKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlY2VpdmVkIE5hTiBmb3IgdGhlIGAlc2AgYXR0cmlidXRlLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0IHRoZSB2YWx1ZSB0byBhIHN0cmluZy5cIixcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBpZiAocG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKChsb3dlckNhc2VkTmFtZSA9IHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV0pLFxuICAgICAgICAgIGxvd2VyQ2FzZWROYW1lICE9PSBuYW1lKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBET00gcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/XCIsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIGxvd2VyQ2FzZWROYW1lXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChuYW1lICE9PSBsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGAlc2AgcHJvcCBvbiBhIERPTSBlbGVtZW50LiBJZiB5b3UgaW50ZW50aW9uYWxseSB3YW50IGl0IHRvIGFwcGVhciBpbiB0aGUgRE9NIGFzIGEgY3VzdG9tIGF0dHJpYnV0ZSwgc3BlbGwgaXQgYXMgbG93ZXJjYXNlIGAlc2AgaW5zdGVhZC4gSWYgeW91IGFjY2lkZW50YWxseSBwYXNzZWQgaXQgZnJvbSBhIHBhcmVudCBjb21wb25lbnQsIHJlbW92ZSBpdCBmcm9tIHRoZSBET00gZWxlbWVudC5cIixcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsb3dlckNhc2VkTmFtZVxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgKTtcbiAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICBjYXNlIFwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpcbiAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgICAgICBjYXNlIFwicmVmXCI6XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjYXNlIFwiaW5uZXJUZXh0XCI6XG4gICAgICAgIGNhc2UgXCJ0ZXh0Q29udGVudFwiOlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXV0b0ZvY3VzXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICBjYXNlIFwibXV0ZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgY2FzZSBcImNvbnRlbnRFZGl0YWJsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInNwZWxsQ2hlY2tcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkcmFnZ2FibGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgY2FzZSBcImF1dG9SZXZlcnNlXCI6XG4gICAgICAgICAgICBjYXNlIFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiOlxuICAgICAgICAgICAgY2FzZSBcImZvY3VzYWJsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInByZXNlcnZlQWxwaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhbGxvd0Z1bGxTY3JlZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJhc3luY1wiOlxuICAgICAgICAgICAgY2FzZSBcImF1dG9QbGF5XCI6XG4gICAgICAgICAgICBjYXNlIFwiY29udHJvbHNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICAgICAgICBjYXNlIFwiZGVmZXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlZFwiOlxuICAgICAgICAgICAgY2FzZSBcImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlXCI6XG4gICAgICAgICAgICBjYXNlIFwiZGlzYWJsZVJlbW90ZVBsYXliYWNrXCI6XG4gICAgICAgICAgICBjYXNlIFwiZm9ybU5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJsb29wXCI6XG4gICAgICAgICAgICBjYXNlIFwibm9Nb2R1bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJub1ZhbGlkYXRlXCI6XG4gICAgICAgICAgICBjYXNlIFwib3BlblwiOlxuICAgICAgICAgICAgY2FzZSBcInBsYXlzSW5saW5lXCI6XG4gICAgICAgICAgICBjYXNlIFwicmVhZE9ubHlcIjpcbiAgICAgICAgICAgIGNhc2UgXCJyZXF1aXJlZFwiOlxuICAgICAgICAgICAgY2FzZSBcInJldmVyc2VkXCI6XG4gICAgICAgICAgICBjYXNlIFwic2NvcGVkXCI6XG4gICAgICAgICAgICBjYXNlIFwic2VhbWxlc3NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpdGVtU2NvcGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjYXB0dXJlXCI6XG4gICAgICAgICAgICBjYXNlIFwiZG93bmxvYWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbmVydFwiOlxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcbiAgICAgICAgICAgICAgaWYgKFwiZGF0YS1cIiA9PT0gbG93ZXJDYXNlZE5hbWUgfHwgXCJhcmlhLVwiID09PSBsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG5JZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnUmVjZWl2ZWQgYCVzYCBmb3IgYSBub24tYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC5cXG5cXG5JZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uXFxuXFxuSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sIHBhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICByZXR1cm4gKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMCksICExO1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgaWYgKFwiZmFsc2VcIiA9PT0gdmFsdWUgfHwgXCJ0cnVlXCIgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwibXV0ZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImFsbG93RnVsbFNjcmVlblwiOlxuICAgICAgICAgICAgICBjYXNlIFwiYXN5bmNcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImF1dG9QbGF5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJjb250cm9sc1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZGVmZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlUGljdHVyZUluUGljdHVyZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZVJlbW90ZVBsYXliYWNrXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJmb3JtTm9WYWxpZGF0ZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJsb29wXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJub01vZHVsZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwibm9WYWxpZGF0ZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwib3BlblwiOlxuICAgICAgICAgICAgICBjYXNlIFwicGxheXNJbmxpbmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInJlYWRPbmx5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJyZXF1aXJlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwicmV2ZXJzZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNjb3BlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwic2VhbWxlc3NcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIml0ZW1TY29wZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiaW5lcnRcIjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIHRoZSBzdHJpbmcgYCVzYCBmb3IgdGhlIGJvb2xlYW4gYXR0cmlidXRlIGAlc2AuICVzIERpZCB5b3UgbWVhbiAlcz17JXN9P1wiLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgXCJmYWxzZVwiID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgID8gXCJUaGUgYnJvd3NlciB3aWxsIGludGVycHJldCBpdCBhcyBhIHRydXRoeSB2YWx1ZS5cIlxuICAgICAgICAgICAgICAgIDogJ0FsdGhvdWdoIHRoaXMgd29ya3MsIGl0IHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgaWYgeW91IHBhc3MgdGhlIHN0cmluZyBcImZhbHNlXCIuJyxcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITA7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuVW5rbm93blByb3BlcnRpZXModHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpIHtcbiAgICAgIHZhciB1bmtub3duUHJvcHMgPSBbXSxcbiAgICAgICAga2V5O1xuICAgICAgZm9yIChrZXkgaW4gcHJvcHMpXG4gICAgICAgIHZhbGlkYXRlUHJvcGVydHkodHlwZSwga2V5LCBwcm9wc1trZXldLCBldmVudFJlZ2lzdHJ5KSB8fFxuICAgICAgICAgIHVua25vd25Qcm9wcy5wdXNoKGtleSk7XG4gICAgICBwcm9wcyA9IHVua25vd25Qcm9wc1xuICAgICAgICAubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgcmV0dXJuIFwiYFwiICsgcHJvcCArIFwiYFwiO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIiwgXCIpO1xuICAgICAgMSA9PT0gdW5rbm93blByb3BzLmxlbmd0aFxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgdmFsdWUgZm9yIHByb3AgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgaXQgZnJvbSB0aGUgZWxlbWVudCwgb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCBpdCBpbiB0aGUgRE9NLiBGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yIFwiLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKVxuICAgICAgICA6IDEgPCB1bmtub3duUHJvcHMubGVuZ3RoICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW52YWxpZCB2YWx1ZXMgZm9yIHByb3BzICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZWxlbWVudCwgb3IgcGFzcyBhIHN0cmluZyBvciBudW1iZXIgdmFsdWUgdG8ga2VlcCB0aGVtIGluIHRoZSBET00uIEZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgXCIsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzYW5pdGl6ZVVSTCh1cmwpIHtcbiAgICAgIHJldHVybiBpc0phdmFTY3JpcHRQcm90b2NvbC50ZXN0KFwiXCIgKyB1cmwpXG4gICAgICAgID8gXCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignUmVhY3QgaGFzIGJsb2NrZWQgYSBqYXZhc2NyaXB0OiBVUkwgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLicpXCJcbiAgICAgICAgOiB1cmw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gICAgICBuYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8IHdpbmRvdztcbiAgICAgIG5hdGl2ZUV2ZW50LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50ICYmXG4gICAgICAgIChuYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KTtcbiAgICAgIHJldHVybiAzID09PSBuYXRpdmVFdmVudC5ub2RlVHlwZSA/IG5hdGl2ZUV2ZW50LnBhcmVudE5vZGUgOiBuYXRpdmVFdmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KSB7XG4gICAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0KTtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlICYmICh0YXJnZXQgPSBpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZSkpIHtcbiAgICAgICAgdmFyIHByb3BzID0gdGFyZ2V0W2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG4gICAgICAgIGE6IHN3aXRjaCAoXG4gICAgICAgICAgKCh0YXJnZXQgPSBpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZSksIGludGVybmFsSW5zdGFuY2UudHlwZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgICAgICB1cGRhdGVJbnB1dChcbiAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICBwcm9wcy52YWx1ZSxcbiAgICAgICAgICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICBwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgIHByb3BzLmNoZWNrZWQsXG4gICAgICAgICAgICAgIHByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgICBwcm9wcy50eXBlLFxuICAgICAgICAgICAgICBwcm9wcy5uYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA9IHByb3BzLm5hbWU7XG4gICAgICAgICAgICBpZiAoXCJyYWRpb1wiID09PSBwcm9wcy50eXBlICYmIG51bGwgIT0gaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgICAgICAgICBmb3IgKHByb3BzID0gdGFyZ2V0OyBwcm9wcy5wYXJlbnROb2RlOyApIHByb3BzID0gcHJvcHMucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihpbnRlcm5hbEluc3RhbmNlLCBcIm5hbWVcIik7XG4gICAgICAgICAgICAgIHByb3BzID0gcHJvcHMucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAnaW5wdXRbbmFtZT1cIicgK1xuICAgICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhcbiAgICAgICAgICAgICAgICAgICAgXCJcIiArIGludGVybmFsSW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgJ1wiXVt0eXBlPVwicmFkaW9cIl0nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA8IHByb3BzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlKytcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyTm9kZSA9IHByb3BzW2ludGVybmFsSW5zdGFuY2VdO1xuICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUgIT09IHRhcmdldCAmJiBvdGhlck5vZGUuZm9ybSA9PT0gdGFyZ2V0LmZvcm0pIHtcbiAgICAgICAgICAgICAgICAgIHZhciBvdGhlclByb3BzID0gb3RoZXJOb2RlW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgICBpZiAoIW90aGVyUHJvcHMpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlIHNhbWUgYG5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUlucHV0KFxuICAgICAgICAgICAgICAgICAgICBvdGhlck5vZGUsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyUHJvcHMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyUHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy5jaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyUHJvcHMubmFtZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlID0gMDtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlIDwgcHJvcHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UrK1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKG90aGVyTm9kZSA9IHByb3BzW2ludGVybmFsSW5zdGFuY2VdKSxcbiAgICAgICAgICAgICAgICAgIG90aGVyTm9kZS5mb3JtID09PSB0YXJnZXQuZm9ybSAmJlxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChvdGhlck5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgICAgIHVwZGF0ZVRleHRhcmVhKHRhcmdldCwgcHJvcHMudmFsdWUsIHByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICAgIChpbnRlcm5hbEluc3RhbmNlID0gcHJvcHMudmFsdWUpLFxuICAgICAgICAgICAgICBudWxsICE9IGludGVybmFsSW5zdGFuY2UgJiZcbiAgICAgICAgICAgICAgICB1cGRhdGVPcHRpb25zKHRhcmdldCwgISFwcm9wcy5tdWx0aXBsZSwgaW50ZXJuYWxJbnN0YW5jZSwgITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGEsIGIpIHtcbiAgICAgIGlmIChpc0luc2lkZUV2ZW50SGFuZGxlcikgcmV0dXJuIGZuKGEsIGIpO1xuICAgICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBmbihhKTtcbiAgICAgICAgcmV0dXJuIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITEpLFxuICAgICAgICAgIG51bGwgIT09IHJlc3RvcmVUYXJnZXQgfHwgbnVsbCAhPT0gcmVzdG9yZVF1ZXVlKVxuICAgICAgICApXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGZsdXNoU3luY1dvcmskMSgpLFxuICAgICAgICAgICAgcmVzdG9yZVRhcmdldCAmJlxuICAgICAgICAgICAgICAoKGEgPSByZXN0b3JlVGFyZ2V0KSxcbiAgICAgICAgICAgICAgKGZuID0gcmVzdG9yZVF1ZXVlKSxcbiAgICAgICAgICAgICAgKHJlc3RvcmVRdWV1ZSA9IHJlc3RvcmVUYXJnZXQgPSBudWxsKSxcbiAgICAgICAgICAgICAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQoYSksXG4gICAgICAgICAgICAgIGZuKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICBmb3IgKGEgPSAwOyBhIDwgZm4ubGVuZ3RoOyBhKyspIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KGZuW2FdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuICAgICAgaWYgKG51bGwgPT09IHN0YXRlTm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgcHJvcHMgPSBzdGF0ZU5vZGVbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbiAgICAgIGlmIChudWxsID09PSBwcm9wcykgcmV0dXJuIG51bGw7XG4gICAgICBzdGF0ZU5vZGUgPSBwcm9wc1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICAgIGE6IHN3aXRjaCAocmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgICBjYXNlIFwib25DbGlja1wiOlxuICAgICAgICBjYXNlIFwib25DbGlja0NhcHR1cmVcIjpcbiAgICAgICAgY2FzZSBcIm9uRG91YmxlQ2xpY2tcIjpcbiAgICAgICAgY2FzZSBcIm9uRG91YmxlQ2xpY2tDYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlRG93blwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZURvd25DYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlTW92ZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZU1vdmVDYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlVXBcIjpcbiAgICAgICAgY2FzZSBcIm9uTW91c2VVcENhcHR1cmVcIjpcbiAgICAgICAgY2FzZSBcIm9uTW91c2VFbnRlclwiOlxuICAgICAgICAgIChwcm9wcyA9ICFwcm9wcy5kaXNhYmxlZCkgfHxcbiAgICAgICAgICAgICgoaW5zdCA9IGluc3QudHlwZSksXG4gICAgICAgICAgICAocHJvcHMgPSAhKFxuICAgICAgICAgICAgICBcImJ1dHRvblwiID09PSBpbnN0IHx8XG4gICAgICAgICAgICAgIFwiaW5wdXRcIiA9PT0gaW5zdCB8fFxuICAgICAgICAgICAgICBcInNlbGVjdFwiID09PSBpbnN0IHx8XG4gICAgICAgICAgICAgIFwidGV4dGFyZWFcIiA9PT0gaW5zdFxuICAgICAgICAgICAgKSkpO1xuICAgICAgICAgIGluc3QgPSAhcHJvcHM7XG4gICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpbnN0ID0gITE7XG4gICAgICB9XG4gICAgICBpZiAoaW5zdCkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoc3RhdGVOb2RlICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHN0YXRlTm9kZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBgXCIgK1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSArXG4gICAgICAgICAgICBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgK1xuICAgICAgICAgICAgdHlwZW9mIHN0YXRlTm9kZSArXG4gICAgICAgICAgICBcImAgdHlwZS5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlTm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGF0YSgpIHtcbiAgICAgIGlmIChmYWxsYmFja1RleHQpIHJldHVybiBmYWxsYmFja1RleHQ7XG4gICAgICB2YXIgc3RhcnQsXG4gICAgICAgIHN0YXJ0VmFsdWUgPSBzdGFydFRleHQsXG4gICAgICAgIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGgsXG4gICAgICAgIGVuZCxcbiAgICAgICAgZW5kVmFsdWUgPSBcInZhbHVlXCIgaW4gcm9vdCA/IHJvb3QudmFsdWUgOiByb290LnRleHRDb250ZW50LFxuICAgICAgICBlbmRMZW5ndGggPSBlbmRWYWx1ZS5sZW5ndGg7XG4gICAgICBmb3IgKFxuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIHN0YXJ0IDwgc3RhcnRMZW5ndGggJiYgc3RhcnRWYWx1ZVtzdGFydF0gPT09IGVuZFZhbHVlW3N0YXJ0XTtcbiAgICAgICAgc3RhcnQrK1xuICAgICAgKTtcbiAgICAgIHZhciBtaW5FbmQgPSBzdGFydExlbmd0aCAtIHN0YXJ0O1xuICAgICAgZm9yIChcbiAgICAgICAgZW5kID0gMTtcbiAgICAgICAgZW5kIDw9IG1pbkVuZCAmJlxuICAgICAgICBzdGFydFZhbHVlW3N0YXJ0TGVuZ3RoIC0gZW5kXSA9PT0gZW5kVmFsdWVbZW5kTGVuZ3RoIC0gZW5kXTtcbiAgICAgICAgZW5kKytcbiAgICAgICk7XG4gICAgICByZXR1cm4gKGZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCAxIDwgZW5kID8gMSAtIGVuZCA6IHZvaWQgMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSB7XG4gICAgICB2YXIga2V5Q29kZSA9IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG4gICAgICBcImNoYXJDb2RlXCIgaW4gbmF0aXZlRXZlbnRcbiAgICAgICAgPyAoKG5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQuY2hhckNvZGUpLFxuICAgICAgICAgIDAgPT09IG5hdGl2ZUV2ZW50ICYmIDEzID09PSBrZXlDb2RlICYmIChuYXRpdmVFdmVudCA9IDEzKSlcbiAgICAgICAgOiAobmF0aXZlRXZlbnQgPSBrZXlDb2RlKTtcbiAgICAgIDEwID09PSBuYXRpdmVFdmVudCAmJiAobmF0aXZlRXZlbnQgPSAxMyk7XG4gICAgICByZXR1cm4gMzIgPD0gbmF0aXZlRXZlbnQgfHwgMTMgPT09IG5hdGl2ZUV2ZW50ID8gbmF0aXZlRXZlbnQgOiAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSgpIHtcbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVTeW50aGV0aWNFdmVudChJbnRlcmZhY2UpIHtcbiAgICAgIGZ1bmN0aW9uIFN5bnRoZXRpY0Jhc2VFdmVudChcbiAgICAgICAgcmVhY3ROYW1lLFxuICAgICAgICByZWFjdEV2ZW50VHlwZSxcbiAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fcmVhY3ROYW1lID0gcmVhY3ROYW1lO1xuICAgICAgICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgdGhpcy50eXBlID0gcmVhY3RFdmVudFR5cGU7XG4gICAgICAgIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKVxuICAgICAgICAgIEludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgJiZcbiAgICAgICAgICAgICgocmVhY3ROYW1lID0gSW50ZXJmYWNlW3Byb3BOYW1lXSksXG4gICAgICAgICAgICAodGhpc1twcm9wTmFtZV0gPSByZWFjdE5hbWVcbiAgICAgICAgICAgICAgPyByZWFjdE5hbWUobmF0aXZlRXZlbnQpXG4gICAgICAgICAgICAgIDogbmF0aXZlRXZlbnRbcHJvcE5hbWVdKSk7XG4gICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKFxuICAgICAgICAgIG51bGwgIT0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgICAgICAgICAgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkXG4gICAgICAgICAgICA6ICExID09PSBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZVxuICAgICAgICApXG4gICAgICAgICAgPyBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICAgICAgICAgIDogZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGFzc2lnbihTeW50aGV0aWNCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gITA7XG4gICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgKGV2ZW50LnByZXZlbnREZWZhdWx0XG4gICAgICAgICAgICAgID8gZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICA6IFwidW5rbm93blwiICE9PSB0eXBlb2YgZXZlbnQucmV0dXJuVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnQucmV0dXJuVmFsdWUgPSAhMSksXG4gICAgICAgICAgICAodGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSkpO1xuICAgICAgICB9LFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgICAgICAgIGV2ZW50ICYmXG4gICAgICAgICAgICAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uXG4gICAgICAgICAgICAgID8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgOiBcInVua25vd25cIiAhPT0gdHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAmJlxuICAgICAgICAgICAgICAgIChldmVudC5jYW5jZWxCdWJibGUgPSAhMCksXG4gICAgICAgICAgICAodGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgICBpc1BlcnNpc3RlbnQ6IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBTeW50aGV0aWNCYXNlRXZlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vZGlmaWVyU3RhdGVHZXR0ZXIoa2V5QXJnKSB7XG4gICAgICB2YXIgbmF0aXZlRXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGVcbiAgICAgICAgPyBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZylcbiAgICAgICAgOiAoa2V5QXJnID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5QXJnXSlcbiAgICAgICAgICA/ICEhbmF0aXZlRXZlbnRba2V5QXJnXVxuICAgICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSgpIHtcbiAgICAgIHJldHVybiBtb2RpZmllclN0YXRlR2V0dGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgY2FzZSBcImtleXVwXCI6XG4gICAgICAgICAgcmV0dXJuIC0xICE9PSBFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKTtcbiAgICAgICAgY2FzZSBcImtleWRvd25cIjpcbiAgICAgICAgICByZXR1cm4gbmF0aXZlRXZlbnQua2V5Q29kZSAhPT0gU1RBUlRfS0VZQ09ERTtcbiAgICAgICAgY2FzZSBcImtleXByZXNzXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZWRvd25cIjpcbiAgICAgICAgY2FzZSBcImZvY3Vzb3V0XCI6XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkge1xuICAgICAgbmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG4gICAgICByZXR1cm4gXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5hdGl2ZUV2ZW50ICYmIFwiZGF0YVwiIGluIG5hdGl2ZUV2ZW50XG4gICAgICAgID8gbmF0aXZlRXZlbnQuZGF0YVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6XG4gICAgICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgICAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgICAgICBpZiAobmF0aXZlRXZlbnQud2hpY2ggIT09IFNQQUNFQkFSX0NPREUpIHJldHVybiBudWxsO1xuICAgICAgICAgIGhhc1NwYWNlS2V5cHJlc3MgPSAhMDtcbiAgICAgICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcbiAgICAgICAgY2FzZSBcInRleHRJbnB1dFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZG9tRXZlbnROYW1lID0gbmF0aXZlRXZlbnQuZGF0YSksXG4gICAgICAgICAgICBkb21FdmVudE5hbWUgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFzU3BhY2VLZXlwcmVzc1xuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBkb21FdmVudE5hbWVcbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAgICAgaWYgKGlzQ29tcG9zaW5nKVxuICAgICAgICByZXR1cm4gXCJjb21wb3NpdGlvbmVuZFwiID09PSBkb21FdmVudE5hbWUgfHxcbiAgICAgICAgICAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgJiZcbiAgICAgICAgICAgIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSlcbiAgICAgICAgICA/ICgoZG9tRXZlbnROYW1lID0gZ2V0RGF0YSgpKSxcbiAgICAgICAgICAgIChmYWxsYmFja1RleHQgPSBzdGFydFRleHQgPSByb290ID0gbnVsbCksXG4gICAgICAgICAgICAoaXNDb21wb3NpbmcgPSAhMSksXG4gICAgICAgICAgICBkb21FdmVudE5hbWUpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgY2FzZSBcInBhc3RlXCI6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuYWx0S2V5IHx8XG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50Lm1ldGFLZXlcbiAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgIChuYXRpdmVFdmVudC5jdHJsS2V5ICYmIG5hdGl2ZUV2ZW50LmFsdEtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFdmVudC5jaGFyICYmIDEgPCBuYXRpdmVFdmVudC5jaGFyLmxlbmd0aClcbiAgICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmNoYXI7XG4gICAgICAgICAgICBpZiAobmF0aXZlRXZlbnQud2hpY2gpXG4gICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbmVuZFwiOlxuICAgICAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiBcImtvXCIgIT09IG5hdGl2ZUV2ZW50LmxvY2FsZVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IG5hdGl2ZUV2ZW50LmRhdGE7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gICAgICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIFwiaW5wdXRcIiA9PT0gbm9kZU5hbWVcbiAgICAgICAgPyAhIXN1cHBvcnRlZElucHV0VHlwZXNbZWxlbS50eXBlXVxuICAgICAgICA6IFwidGV4dGFyZWFcIiA9PT0gbm9kZU5hbWVcbiAgICAgICAgICA/ICEwXG4gICAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgpIHtcbiAgICAgIGlmICghY2FuVXNlRE9NKSByZXR1cm4gITE7XG4gICAgICBldmVudE5hbWVTdWZmaXggPSBcIm9uXCIgKyBldmVudE5hbWVTdWZmaXg7XG4gICAgICB2YXIgaXNTdXBwb3J0ZWQgPSBldmVudE5hbWVTdWZmaXggaW4gZG9jdW1lbnQ7XG4gICAgICBpc1N1cHBvcnRlZCB8fFxuICAgICAgICAoKGlzU3VwcG9ydGVkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSksXG4gICAgICAgIGlzU3VwcG9ydGVkLnNldEF0dHJpYnV0ZShldmVudE5hbWVTdWZmaXgsIFwicmV0dXJuO1wiKSxcbiAgICAgICAgKGlzU3VwcG9ydGVkID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaXNTdXBwb3J0ZWRbZXZlbnROYW1lU3VmZml4XSkpO1xuICAgICAgcmV0dXJuIGlzU3VwcG9ydGVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoXG4gICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgaW5zdCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgdGFyZ2V0XG4gICAgKSB7XG4gICAgICByZXN0b3JlVGFyZ2V0XG4gICAgICAgID8gcmVzdG9yZVF1ZXVlXG4gICAgICAgICAgPyByZXN0b3JlUXVldWUucHVzaCh0YXJnZXQpXG4gICAgICAgICAgOiAocmVzdG9yZVF1ZXVlID0gW3RhcmdldF0pXG4gICAgICAgIDogKHJlc3RvcmVUYXJnZXQgPSB0YXJnZXQpO1xuICAgICAgaW5zdCA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhpbnN0LCBcIm9uQ2hhbmdlXCIpO1xuICAgICAgMCA8IGluc3QubGVuZ3RoICYmXG4gICAgICAgICgobmF0aXZlRXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoXG4gICAgICAgICAgXCJvbkNoYW5nZVwiLFxuICAgICAgICAgIFwiY2hhbmdlXCIsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgKSksXG4gICAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7IGV2ZW50OiBuYXRpdmVFdmVudCwgbGlzdGVuZXJzOiBpbnN0IH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcnVuRXZlbnRJbkJhdGNoKGRpc3BhdGNoUXVldWUpIHtcbiAgICAgIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCkge1xuICAgICAgdmFyIHRhcmdldE5vZGUgPSBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpO1xuICAgICAgaWYgKHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKHRhcmdldE5vZGUpKSByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICAgICAgaWYgKFwiY2hhbmdlXCIgPT09IGRvbUV2ZW50TmFtZSkgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICAgICAgYWN0aXZlRWxlbWVudCQxICYmXG4gICAgICAgIChhY3RpdmVFbGVtZW50JDEuZGV0YWNoRXZlbnQoXCJvbnByb3BlcnR5Y2hhbmdlXCIsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKSxcbiAgICAgICAgKGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBhY3RpdmVFbGVtZW50JDEgPSBudWxsKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwidmFsdWVcIiA9PT0gbmF0aXZlRXZlbnQucHJvcGVydHlOYW1lICYmXG4gICAgICAgIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCQxKVxuICAgICAgKSB7XG4gICAgICAgIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gICAgICAgIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChcbiAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpXG4gICAgICAgICk7XG4gICAgICAgIGJhdGNoZWRVcGRhdGVzJDEocnVuRXZlbnRJbkJhdGNoLCBkaXNwYXRjaFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGFyZ2V0SW5zdFxuICAgICkge1xuICAgICAgXCJmb2N1c2luXCIgPT09IGRvbUV2ZW50TmFtZVxuICAgICAgICA/IChzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpLFxuICAgICAgICAgIChhY3RpdmVFbGVtZW50JDEgPSB0YXJnZXQpLFxuICAgICAgICAgIChhY3RpdmVFbGVtZW50SW5zdCQxID0gdGFyZ2V0SW5zdCksXG4gICAgICAgICAgYWN0aXZlRWxlbWVudCQxLmF0dGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSkpXG4gICAgICAgIDogXCJmb2N1c291dFwiID09PSBkb21FdmVudE5hbWUgJiYgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzZWxlY3Rpb25jaGFuZ2VcIiA9PT0gZG9tRXZlbnROYW1lIHx8XG4gICAgICAgIFwia2V5dXBcIiA9PT0gZG9tRXZlbnROYW1lIHx8XG4gICAgICAgIFwia2V5ZG93blwiID09PSBkb21FdmVudE5hbWVcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCQxKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gICAgICBpZiAoXCJjbGlja1wiID09PSBkb21FdmVudE5hbWUpIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gICAgICBpZiAoXCJpbnB1dFwiID09PSBkb21FdmVudE5hbWUgfHwgXCJjaGFuZ2VcIiA9PT0gZG9tRXZlbnROYW1lKVxuICAgICAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgICByZXR1cm4gKHggPT09IHkgJiYgKDAgIT09IHggfHwgMSAvIHggPT09IDEgLyB5KSkgfHwgKHggIT09IHggJiYgeSAhPT0geSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gICAgICBpZiAob2JqZWN0SXMob2JqQSwgb2JqQikpIHJldHVybiAhMDtcbiAgICAgIGlmIChcbiAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9iakEgfHxcbiAgICAgICAgbnVsbCA9PT0gb2JqQSB8fFxuICAgICAgICBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb2JqQiB8fFxuICAgICAgICBudWxsID09PSBvYmpCXG4gICAgICApXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpLFxuICAgICAgICBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuICAgICAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gITE7XG4gICAgICBmb3IgKGtleXNCID0gMDsga2V5c0IgPCBrZXlzQS5sZW5ndGg7IGtleXNCKyspIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzQVtrZXlzQl07XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaGFzT3duUHJvcGVydHkuY2FsbChvYmpCLCBjdXJyZW50S2V5KSB8fFxuICAgICAgICAgICFvYmplY3RJcyhvYmpBW2N1cnJlbnRLZXldLCBvYmpCW2N1cnJlbnRLZXldKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRMZWFmTm9kZShub2RlKSB7XG4gICAgICBmb3IgKDsgbm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQ7ICkgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KHJvb3QsIG9mZnNldCkge1xuICAgICAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgICAgIHJvb3QgPSAwO1xuICAgICAgZm9yICh2YXIgbm9kZUVuZDsgbm9kZTsgKSB7XG4gICAgICAgIGlmICgzID09PSBub2RlLm5vZGVUeXBlKSB7XG4gICAgICAgICAgbm9kZUVuZCA9IHJvb3QgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICBpZiAocm9vdCA8PSBvZmZzZXQgJiYgbm9kZUVuZCA+PSBvZmZzZXQpXG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBub2RlLCBvZmZzZXQ6IG9mZnNldCAtIHJvb3QgfTtcbiAgICAgICAgICByb290ID0gbm9kZUVuZDtcbiAgICAgICAgfVxuICAgICAgICBhOiB7XG4gICAgICAgICAgZm9yICg7IG5vZGU7ICkge1xuICAgICAgICAgICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlID0gdm9pZCAwO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBnZXRMZWFmTm9kZShub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gICAgICByZXR1cm4gb3V0ZXJOb2RlICYmIGlubmVyTm9kZVxuICAgICAgICA/IG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlXG4gICAgICAgICAgPyAhMFxuICAgICAgICAgIDogb3V0ZXJOb2RlICYmIDMgPT09IG91dGVyTm9kZS5ub2RlVHlwZVxuICAgICAgICAgICAgPyAhMVxuICAgICAgICAgICAgOiBpbm5lck5vZGUgJiYgMyA9PT0gaW5uZXJOb2RlLm5vZGVUeXBlXG4gICAgICAgICAgICAgID8gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlLnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgIDogXCJjb250YWluc1wiIGluIG91dGVyTm9kZVxuICAgICAgICAgICAgICAgID8gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSlcbiAgICAgICAgICAgICAgICA6IG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuICAgICAgICAgICAgICAgICAgPyAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KVxuICAgICAgICAgICAgICAgICAgOiAhMVxuICAgICAgICA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50RGVlcChjb250YWluZXJJbmZvKSB7XG4gICAgICBjb250YWluZXJJbmZvID1cbiAgICAgICAgbnVsbCAhPSBjb250YWluZXJJbmZvICYmXG4gICAgICAgIG51bGwgIT0gY29udGFpbmVySW5mby5vd25lckRvY3VtZW50ICYmXG4gICAgICAgIG51bGwgIT0gY29udGFpbmVySW5mby5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3XG4gICAgICAgICAgPyBjb250YWluZXJJbmZvLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXdcbiAgICAgICAgICA6IHdpbmRvdztcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChjb250YWluZXJJbmZvLmRvY3VtZW50KTtcbiAgICAgICAgZWxlbWVudCBpbnN0YW5jZW9mIGNvbnRhaW5lckluZm8uSFRNTElGcmFtZUVsZW1lbnQ7XG5cbiAgICAgICkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVsZW1lbnQuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSBjb250YWluZXJJbmZvID0gZWxlbWVudC5jb250ZW50V2luZG93O1xuICAgICAgICBlbHNlIGJyZWFrO1xuICAgICAgICBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChjb250YWluZXJJbmZvLmRvY3VtZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZWxlbSkge1xuICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG5vZGVOYW1lICYmXG4gICAgICAgICgoXCJpbnB1dFwiID09PSBub2RlTmFtZSAmJlxuICAgICAgICAgIChcInRleHRcIiA9PT0gZWxlbS50eXBlIHx8XG4gICAgICAgICAgICBcInNlYXJjaFwiID09PSBlbGVtLnR5cGUgfHxcbiAgICAgICAgICAgIFwidGVsXCIgPT09IGVsZW0udHlwZSB8fFxuICAgICAgICAgICAgXCJ1cmxcIiA9PT0gZWxlbS50eXBlIHx8XG4gICAgICAgICAgICBcInBhc3N3b3JkXCIgPT09IGVsZW0udHlwZSkpIHx8XG4gICAgICAgICAgXCJ0ZXh0YXJlYVwiID09PSBub2RlTmFtZSB8fFxuICAgICAgICAgIFwidHJ1ZVwiID09PSBlbGVtLmNvbnRlbnRFZGl0YWJsZSlcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnN0cnVjdFNlbGVjdEV2ZW50KFxuICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHZhciBkb2MgPVxuICAgICAgICBuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgPyBuYXRpdmVFdmVudFRhcmdldC5kb2N1bWVudFxuICAgICAgICAgIDogOSA9PT0gbmF0aXZlRXZlbnRUYXJnZXQubm9kZVR5cGVcbiAgICAgICAgICAgID8gbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgIDogbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcbiAgICAgIG1vdXNlRG93biB8fFxuICAgICAgICBudWxsID09IGFjdGl2ZUVsZW1lbnQgfHxcbiAgICAgICAgYWN0aXZlRWxlbWVudCAhPT0gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHx8XG4gICAgICAgICgoZG9jID0gYWN0aXZlRWxlbWVudCksXG4gICAgICAgIFwic2VsZWN0aW9uU3RhcnRcIiBpbiBkb2MgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGRvYylcbiAgICAgICAgICA/IChkb2MgPSB7IHN0YXJ0OiBkb2Muc2VsZWN0aW9uU3RhcnQsIGVuZDogZG9jLnNlbGVjdGlvbkVuZCB9KVxuICAgICAgICAgIDogKChkb2MgPSAoXG4gICAgICAgICAgICAgIChkb2Mub3duZXJEb2N1bWVudCAmJiBkb2Mub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHxcbiAgICAgICAgICAgICAgd2luZG93XG4gICAgICAgICAgICApLmdldFNlbGVjdGlvbigpKSxcbiAgICAgICAgICAgIChkb2MgPSB7XG4gICAgICAgICAgICAgIGFuY2hvck5vZGU6IGRvYy5hbmNob3JOb2RlLFxuICAgICAgICAgICAgICBhbmNob3JPZmZzZXQ6IGRvYy5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgICAgIGZvY3VzTm9kZTogZG9jLmZvY3VzTm9kZSxcbiAgICAgICAgICAgICAgZm9jdXNPZmZzZXQ6IGRvYy5mb2N1c09mZnNldFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAobGFzdFNlbGVjdGlvbiAmJiBzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgZG9jKSkgfHxcbiAgICAgICAgICAoKGxhc3RTZWxlY3Rpb24gPSBkb2MpLFxuICAgICAgICAgIChkb2MgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QsIFwib25TZWxlY3RcIikpLFxuICAgICAgICAgIDAgPCBkb2MubGVuZ3RoICYmXG4gICAgICAgICAgICAoKG5hdGl2ZUV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KFxuICAgICAgICAgICAgICBcIm9uU2VsZWN0XCIsXG4gICAgICAgICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogbmF0aXZlRXZlbnQsIGxpc3RlbmVyczogZG9jIH0pLFxuICAgICAgICAgICAgKG5hdGl2ZUV2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQpKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gICAgICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgICAgIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcHJlZml4ZXNbXCJXZWJraXRcIiArIHN0eWxlUHJvcF0gPSBcIndlYmtpdFwiICsgZXZlbnROYW1lO1xuICAgICAgcHJlZml4ZXNbXCJNb3pcIiArIHN0eWxlUHJvcF0gPSBcIm1velwiICsgZXZlbnROYW1lO1xuICAgICAgcmV0dXJuIHByZWZpeGVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgICAgIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICAgICAgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSByZXR1cm4gZXZlbnROYW1lO1xuICAgICAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0sXG4gICAgICAgIHN0eWxlUHJvcDtcbiAgICAgIGZvciAoc3R5bGVQcm9wIGluIHByZWZpeE1hcClcbiAgICAgICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBzdHlsZSlcbiAgICAgICAgICByZXR1cm4gKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF0pO1xuICAgICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVFdmVudChkb21FdmVudE5hbWUsIHJlYWN0TmFtZSkge1xuICAgICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuc2V0KGRvbUV2ZW50TmFtZSwgcmVhY3ROYW1lKTtcbiAgICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWFjdE5hbWUsIFtkb21FdmVudE5hbWVdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZSkge1xuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSAmJiBudWxsICE9PSB2YWx1ZSkge1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSBDYXB0dXJlZFN0YWNrcy5nZXQodmFsdWUpO1xuICAgICAgICBpZiAodm9pZCAwICE9PSBleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICAgICAgICB9O1xuICAgICAgICBDYXB0dXJlZFN0YWNrcy5zZXQodmFsdWUsIHNvdXJjZSk7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBzdGFjazogZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHNvdXJjZSlcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgZW5kSW5kZXggPSBjb25jdXJyZW50UXVldWVzSW5kZXgsXG4gICAgICAgICAgaSA9IChjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgPSBjb25jdXJyZW50UXVldWVzSW5kZXggPSAwKTtcbiAgICAgICAgaSA8IGVuZEluZGV4O1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIGZpYmVyID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICAgICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICAgICAgdmFyIHF1ZXVlID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICAgICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgICAgIHZhciBsYW5lID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICAgICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICAgICAgaWYgKG51bGwgIT09IHF1ZXVlICYmIG51bGwgIT09IHVwZGF0ZSkge1xuICAgICAgICAgIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcbiAgICAgICAgICBudWxsID09PSBwZW5kaW5nXG4gICAgICAgICAgICA/ICh1cGRhdGUubmV4dCA9IHVwZGF0ZSlcbiAgICAgICAgICAgIDogKCh1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dCksIChwZW5kaW5nLm5leHQgPSB1cGRhdGUpKTtcbiAgICAgICAgICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIDAgIT09IGxhbmUgJiYgbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSkge1xuICAgICAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBmaWJlcjtcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gcXVldWU7XG4gICAgICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IHVwZGF0ZTtcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gbGFuZTtcbiAgICAgIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyB8PSBsYW5lO1xuICAgICAgZmliZXIubGFuZXMgfD0gbGFuZTtcbiAgICAgIGZpYmVyID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgbnVsbCAhPT0gZmliZXIgJiYgKGZpYmVyLmxhbmVzIHw9IGxhbmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICByZXR1cm4gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgbGFuZSkge1xuICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBudWxsLCBudWxsLCBsYW5lKTtcbiAgICAgIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIHVwZGF0ZSwgbGFuZSkge1xuICAgICAgc291cmNlRmliZXIubGFuZXMgfD0gbGFuZTtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5sYW5lcyB8PSBsYW5lKTtcbiAgICAgIGZvciAodmFyIGlzSGlkZGVuID0gITEsIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjsgbnVsbCAhPT0gcGFyZW50OyApXG4gICAgICAgIChwYXJlbnQuY2hpbGRMYW5lcyB8PSBsYW5lKSxcbiAgICAgICAgICAoYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZSksXG4gICAgICAgICAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmIChhbHRlcm5hdGUuY2hpbGRMYW5lcyB8PSBsYW5lKSxcbiAgICAgICAgICAyMiA9PT0gcGFyZW50LnRhZyAmJlxuICAgICAgICAgICAgKChzb3VyY2VGaWJlciA9IHBhcmVudC5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgbnVsbCA9PT0gc291cmNlRmliZXIgfHxcbiAgICAgICAgICAgICAgc291cmNlRmliZXIuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5WaXNpYmxlIHx8XG4gICAgICAgICAgICAgIChpc0hpZGRlbiA9ICEwKSksXG4gICAgICAgICAgKHNvdXJjZUZpYmVyID0gcGFyZW50KSxcbiAgICAgICAgICAocGFyZW50ID0gcGFyZW50LnJldHVybik7XG4gICAgICByZXR1cm4gMyA9PT0gc291cmNlRmliZXIudGFnXG4gICAgICAgID8gKChwYXJlbnQgPSBzb3VyY2VGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgIGlzSGlkZGVuICYmXG4gICAgICAgICAgICBudWxsICE9PSB1cGRhdGUgJiZcbiAgICAgICAgICAgICgoaXNIaWRkZW4gPSAzMSAtIGNsejMyKGxhbmUpKSxcbiAgICAgICAgICAgIChzb3VyY2VGaWJlciA9IHBhcmVudC5oaWRkZW5VcGRhdGVzKSxcbiAgICAgICAgICAgIChhbHRlcm5hdGUgPSBzb3VyY2VGaWJlcltpc0hpZGRlbl0pLFxuICAgICAgICAgICAgbnVsbCA9PT0gYWx0ZXJuYXRlXG4gICAgICAgICAgICAgID8gKHNvdXJjZUZpYmVyW2lzSGlkZGVuXSA9IFt1cGRhdGVdKVxuICAgICAgICAgICAgICA6IGFsdGVybmF0ZS5wdXNoKHVwZGF0ZSksXG4gICAgICAgICAgICAodXBkYXRlLmxhbmUgPSBsYW5lIHwgNTM2ODcwOTEyKSksXG4gICAgICAgICAgcGFyZW50KVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoc291cmNlRmliZXIpIHtcbiAgICAgIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpXG4gICAgICAgIHRocm93IChcbiAgICAgICAgICAoKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IG5lc3RlZFVwZGF0ZUNvdW50ID0gMCksXG4gICAgICAgICAgKHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsKSxcbiAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiXG4gICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA+IE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCAmJlxuICAgICAgICAoKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDApLFxuICAgICAgICAocm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGwpLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IGNhbGxzIHNldFN0YXRlIGluc2lkZSB1c2VFZmZlY3QsIGJ1dCB1c2VFZmZlY3QgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBhIGRlcGVuZGVuY3kgYXJyYXksIG9yIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZXMgb24gZXZlcnkgcmVuZGVyLlwiXG4gICAgICAgICkpO1xuICAgICAgbnVsbCA9PT0gc291cmNlRmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgIDAgIT09IChzb3VyY2VGaWJlci5mbGFncyAmIDQwOTgpICYmXG4gICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgICAgZm9yICh2YXIgbm9kZSA9IHNvdXJjZUZpYmVyLCBwYXJlbnQgPSBub2RlLnJldHVybjsgbnVsbCAhPT0gcGFyZW50OyApXG4gICAgICAgIG51bGwgPT09IG5vZGUuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgMCAhPT0gKG5vZGUuZmxhZ3MgJiA0MDk4KSAmJlxuICAgICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpLFxuICAgICAgICAgIChub2RlID0gcGFyZW50KSxcbiAgICAgICAgICAocGFyZW50ID0gbm9kZS5yZXR1cm4pO1xuICAgICAgcmV0dXJuIDMgPT09IG5vZGUudGFnID8gbm9kZS5zdGF0ZU5vZGUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT09IHJlc29sdmVGYW1pbHkpIHJldHVybiB0eXBlO1xuICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG4gICAgICByZXR1cm4gdm9pZCAwID09PSBmYW1pbHkgPyB0eXBlIDogZmFtaWx5LmN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09PSByZXNvbHZlRmFtaWx5KSByZXR1cm4gdHlwZTtcbiAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gZmFtaWx5XG4gICAgICAgID8gbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgIHZvaWQgMCAhPT0gdHlwZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUucmVuZGVyICYmXG4gICAgICAgICAgKChmYW1pbHkgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZS5yZW5kZXIpKSxcbiAgICAgICAgICB0eXBlLnJlbmRlciAhPT0gZmFtaWx5KVxuICAgICAgICAgID8gKChmYW1pbHkgPSB7ICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLCByZW5kZXI6IGZhbWlseSB9KSxcbiAgICAgICAgICAgIHZvaWQgMCAhPT0gdHlwZS5kaXNwbGF5TmFtZSAmJlxuICAgICAgICAgICAgICAoZmFtaWx5LmRpc3BsYXlOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSksXG4gICAgICAgICAgICBmYW1pbHkpXG4gICAgICAgICAgOiB0eXBlXG4gICAgICAgIDogZmFtaWx5LmN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhmaWJlciwgZWxlbWVudCkge1xuICAgICAgaWYgKG51bGwgPT09IHJlc29sdmVGYW1pbHkpIHJldHVybiAhMTtcbiAgICAgIHZhciBwcmV2VHlwZSA9IGZpYmVyLmVsZW1lbnRUeXBlO1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnQudHlwZTtcbiAgICAgIHZhciBuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICExLFxuICAgICAgICAkJHR5cGVvZk5leHRUeXBlID1cbiAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZWxlbWVudCAmJiBudWxsICE9PSBlbGVtZW50XG4gICAgICAgICAgICA/IGVsZW1lbnQuJCR0eXBlb2ZcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBlbGVtZW50ICYmIChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGVsZW1lbnRcbiAgICAgICAgICAgID8gKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApXG4gICAgICAgICAgICA6ICQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRVxuICAgICAgICAgICAgPyAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMClcbiAgICAgICAgICAgIDogJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgICAgIChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9NRU1PX1RZUEVcbiAgICAgICAgICAgID8gKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApXG4gICAgICAgICAgICA6ICQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5lZWRzQ29tcGFyZUZhbWlsaWVzICYmXG4gICAgICAgICgoZmliZXIgPSByZXNvbHZlRmFtaWx5KHByZXZUeXBlKSksXG4gICAgICAgIHZvaWQgMCAhPT0gZmliZXIgJiYgZmliZXIgPT09IHJlc29sdmVGYW1pbHkoZWxlbWVudCkpXG4gICAgICAgID8gITBcbiAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpIHtcbiAgICAgIG51bGwgIT09IHJlc29sdmVGYW1pbHkgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgV2Vha1NldCAmJlxuICAgICAgICAobnVsbCA9PT0gZmFpbGVkQm91bmRhcmllcyAmJiAoZmFpbGVkQm91bmRhcmllcyA9IG5ldyBXZWFrU2V0KCkpLFxuICAgICAgICBmYWlsZWRCb3VuZGFyaWVzLmFkZChmaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgZmliZXIsXG4gICAgICB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICBzdGFsZUZhbWlsaWVzXG4gICAgKSB7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZSxcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICB9XG4gICAgICBpZiAobnVsbCA9PT0gcmVzb2x2ZUZhbWlseSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZCByZXNvbHZlRmFtaWx5IHRvIGJlIHNldCBkdXJpbmcgaG90IHJlbG9hZC5cIik7XG4gICAgICB2YXIgbmVlZHNSZW5kZXIgPSAhMTtcbiAgICAgIHR5cGUgPSAhMTtcbiAgICAgIG51bGwgIT09IGNhbmRpZGF0ZVR5cGUgJiZcbiAgICAgICAgKChjYW5kaWRhdGVUeXBlID0gcmVzb2x2ZUZhbWlseShjYW5kaWRhdGVUeXBlKSksXG4gICAgICAgIHZvaWQgMCAhPT0gY2FuZGlkYXRlVHlwZSAmJlxuICAgICAgICAgIChzdGFsZUZhbWlsaWVzLmhhcyhjYW5kaWRhdGVUeXBlKVxuICAgICAgICAgICAgPyAodHlwZSA9ICEwKVxuICAgICAgICAgICAgOiB1cGRhdGVkRmFtaWxpZXMuaGFzKGNhbmRpZGF0ZVR5cGUpICYmXG4gICAgICAgICAgICAgICgxID09PSB0YWcgPyAodHlwZSA9ICEwKSA6IChuZWVkc1JlbmRlciA9ICEwKSkpKTtcbiAgICAgIG51bGwgIT09IGZhaWxlZEJvdW5kYXJpZXMgJiZcbiAgICAgICAgKGZhaWxlZEJvdW5kYXJpZXMuaGFzKGZpYmVyKSB8fFxuICAgICAgICAgIChudWxsICE9PSBhbHRlcm5hdGUgJiYgZmFpbGVkQm91bmRhcmllcy5oYXMoYWx0ZXJuYXRlKSkpICYmXG4gICAgICAgICh0eXBlID0gITApO1xuICAgICAgdHlwZSAmJiAoZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50ID0gITApO1xuICAgICAgaWYgKHR5cGUgfHwgbmVlZHNSZW5kZXIpXG4gICAgICAgIChhbHRlcm5hdGUgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGFsdGVybmF0ZSwgZmliZXIsIDIpO1xuICAgICAgbnVsbCA9PT0gY2hpbGQgfHxcbiAgICAgICAgdHlwZSB8fFxuICAgICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgIHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgICAgICBzdGFsZUZhbWlsaWVzXG4gICAgICAgICk7XG4gICAgICBudWxsICE9PSBzaWJsaW5nICYmXG4gICAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoXG4gICAgICAgICAgc2libGluZyxcbiAgICAgICAgICB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAgICAgc3RhbGVGYW1pbGllc1xuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgIHRoaXMuc2libGluZyA9XG4gICAgICAgIHRoaXMuY2hpbGQgPVxuICAgICAgICB0aGlzLnJldHVybiA9XG4gICAgICAgIHRoaXMuc3RhdGVOb2RlID1cbiAgICAgICAgdGhpcy50eXBlID1cbiAgICAgICAgdGhpcy5lbGVtZW50VHlwZSA9XG4gICAgICAgICAgbnVsbDtcbiAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgdGhpcy5yZWZDbGVhbnVwID0gdGhpcy5yZWYgPSBudWxsO1xuICAgICAgdGhpcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcyA9XG4gICAgICAgIHRoaXMubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgIHRoaXMudXBkYXRlUXVldWUgPVxuICAgICAgICB0aGlzLm1lbW9pemVkUHJvcHMgPVxuICAgICAgICAgIG51bGw7XG4gICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgICAgdGhpcy5zdWJ0cmVlRmxhZ3MgPSB0aGlzLmZsYWdzID0gMDtcbiAgICAgIHRoaXMuZGVsZXRpb25zID0gbnVsbDtcbiAgICAgIHRoaXMuY2hpbGRMYW5lcyA9IHRoaXMubGFuZXMgPSAwO1xuICAgICAgdGhpcy5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IC0wO1xuICAgICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMS4xO1xuICAgICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gLTA7XG4gICAgICB0aGlzLl9kZWJ1Z1Rhc2sgPVxuICAgICAgICB0aGlzLl9kZWJ1Z1N0YWNrID1cbiAgICAgICAgdGhpcy5fZGVidWdPd25lciA9XG4gICAgICAgIHRoaXMuX2RlYnVnSW5mbyA9XG4gICAgICAgICAgbnVsbDtcbiAgICAgIHRoaXMuX2RlYnVnTmVlZHNSZW1vdW50ID0gITE7XG4gICAgICB0aGlzLl9kZWJ1Z0hvb2tUeXBlcyA9IG51bGw7XG4gICAgICBoYXNCYWRNYXBQb2x5ZmlsbCB8fFxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgfHxcbiAgICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRoaXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gICAgICBDb21wb25lbnQgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICAgICAgcmV0dXJuICEoIUNvbXBvbmVudCB8fCAhQ29tcG9uZW50LmlzUmVhY3RDb21wb25lbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBwZW5kaW5nUHJvcHMpIHtcbiAgICAgIHZhciB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzID0gY3JlYXRlRmliZXIoXG4gICAgICAgICAgICBjdXJyZW50LnRhZyxcbiAgICAgICAgICAgIHBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIGN1cnJlbnQua2V5LFxuICAgICAgICAgICAgY3VycmVudC5tb2RlXG4gICAgICAgICAgKSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID0gY3VycmVudC5lbGVtZW50VHlwZSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50LnN0YXRlTm9kZSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyID0gY3VycmVudC5fZGVidWdPd25lciksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z1N0YWNrID0gY3VycmVudC5fZGVidWdTdGFjayksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z1Rhc2sgPSBjdXJyZW50Ll9kZWJ1Z1Rhc2spLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQpLFxuICAgICAgICAgIChjdXJyZW50LmFsdGVybmF0ZSA9IHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IDApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uID0gLTApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMS4xKSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGN1cnJlbnQuZmxhZ3MgJiA2NTAxMTcxMjtcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHBlbmRpbmdQcm9wcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID1cbiAgICAgICAgbnVsbCA9PT0gcGVuZGluZ1Byb3BzXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGxhbmVzOiBwZW5kaW5nUHJvcHMubGFuZXMsXG4gICAgICAgICAgICAgIGZpcnN0Q29udGV4dDogcGVuZGluZ1Byb3BzLmZpcnN0Q29udGV4dCxcbiAgICAgICAgICAgICAgX2RlYnVnVGhlbmFibGVTdGF0ZTogcGVuZGluZ1Byb3BzLl9kZWJ1Z1RoZW5hYmxlU3RhdGVcbiAgICAgICAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuaW5kZXggPSBjdXJyZW50LmluZGV4O1xuICAgICAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5yZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJbmZvID0gY3VycmVudC5fZGVidWdJbmZvO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ID0gY3VycmVudC5fZGVidWdOZWVkc1JlbW91bnQ7XG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gNjUwMTE3MTQ7XG4gICAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gMCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSAwKSlcbiAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZSksXG4gICAgICAgICAgKHJlbmRlckxhbmVzID0gY3VycmVudC5kZXBlbmRlbmNpZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPVxuICAgICAgICAgICAgbnVsbCA9PT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgbGFuZXM6IHJlbmRlckxhbmVzLmxhbmVzLFxuICAgICAgICAgICAgICAgICAgZmlyc3RDb250ZXh0OiByZW5kZXJMYW5lcy5maXJzdENvbnRleHQsXG4gICAgICAgICAgICAgICAgICBfZGVidWdUaGVuYWJsZVN0YXRlOiByZW5kZXJMYW5lcy5fZGVidWdUaGVuYWJsZVN0YXRlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb24pLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uKSk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgIHR5cGUsXG4gICAgICBrZXksXG4gICAgICBwZW5kaW5nUHJvcHMsXG4gICAgICBvd25lcixcbiAgICAgIG1vZGUsXG4gICAgICBsYW5lc1xuICAgICkge1xuICAgICAgdmFyIGZpYmVyVGFnID0gMCxcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gdHlwZTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzaG91bGRDb25zdHJ1Y3QodHlwZSkgJiYgKGZpYmVyVGFnID0gMSksXG4gICAgICAgICAgKHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpKTtcbiAgICAgIGVsc2UgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICAoZmliZXJUYWcgPSBnZXRIb3N0Q29udGV4dCgpKSxcbiAgICAgICAgICAoZmliZXJUYWcgPSBpc0hvc3RIb2lzdGFibGVUeXBlKHR5cGUsIHBlbmRpbmdQcm9wcywgZmliZXJUYWcpXG4gICAgICAgICAgICA/IDI2XG4gICAgICAgICAgICA6IFwiaHRtbFwiID09PSB0eXBlIHx8IFwiaGVhZFwiID09PSB0eXBlIHx8IFwiYm9keVwiID09PSB0eXBlXG4gICAgICAgICAgICAgID8gMjdcbiAgICAgICAgICAgICAgOiA1KTtcbiAgICAgIGVsc2VcbiAgICAgICAgYTogc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BQ1RJVklUWV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IGNyZWF0ZUZpYmVyKDMxLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkpLFxuICAgICAgICAgICAgICAoa2V5LmVsZW1lbnRUeXBlID0gUkVBQ1RfQUNUSVZJVFlfVFlQRSksXG4gICAgICAgICAgICAgIChrZXkubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgIHBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgICBmaWJlclRhZyA9IDg7XG4gICAgICAgICAgICBtb2RlIHw9IFN0cmljdExlZ2FjeU1vZGU7XG4gICAgICAgICAgICBtb2RlIHw9IFN0cmljdEVmZmVjdHNNb2RlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHR5cGUgPSBwZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgICAob3duZXIgPSBtb2RlKSxcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHR5cGUuaWQgJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgJ1Byb2ZpbGVyIG11c3Qgc3BlY2lmeSBhbiBcImlkXCIgb2YgdHlwZSBgc3RyaW5nYCBhcyBhIHByb3AuIFJlY2VpdmVkIHRoZSB0eXBlIGAlc2AgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgICAgdHlwZW9mIHR5cGUuaWRcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAoa2V5ID0gY3JlYXRlRmliZXIoMTIsIHR5cGUsIGtleSwgb3duZXIgfCBQcm9maWxlTW9kZSkpLFxuICAgICAgICAgICAgICAoa2V5LmVsZW1lbnRUeXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRSksXG4gICAgICAgICAgICAgIChrZXkubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgICAgIChrZXkuc3RhdGVOb2RlID0geyBlZmZlY3REdXJhdGlvbjogMCwgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwIH0pLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IGNyZWF0ZUZpYmVyKDEzLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkpLFxuICAgICAgICAgICAgICAoa2V5LmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRSksXG4gICAgICAgICAgICAgIChrZXkubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChrZXkgPSBjcmVhdGVGaWJlcigxOSwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpKSxcbiAgICAgICAgICAgICAgKGtleS5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSksXG4gICAgICAgICAgICAgIChrZXkubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmIG51bGwgIT09IHR5cGUpXG4gICAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gMTA7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gOTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICAgICAgZmliZXJUYWcgPSAxMTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgICAgZmliZXJUYWcgPSAxNDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IDE2O1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZvaWQgMCA9PT0gdHlwZSB8fFxuICAgICAgICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICAgMCA9PT0gT2JqZWN0LmtleXModHlwZSkubGVuZ3RoKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgKz1cbiAgICAgICAgICAgICAgICBcIiBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSBpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgICAgICAgICBudWxsID09PSB0eXBlXG4gICAgICAgICAgICAgID8gKHBlbmRpbmdQcm9wcyA9IFwibnVsbFwiKVxuICAgICAgICAgICAgICA6IGlzQXJyYXlJbXBsKHR5cGUpXG4gICAgICAgICAgICAgICAgPyAocGVuZGluZ1Byb3BzID0gXCJhcnJheVwiKVxuICAgICAgICAgICAgICAgIDogdm9pZCAwICE9PSB0eXBlICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICAgICAgICAgICAgICAgICAgPyAoKHBlbmRpbmdQcm9wcyA9XG4gICAgICAgICAgICAgICAgICAgICAgXCI8XCIgK1xuICAgICAgICAgICAgICAgICAgICAgIChnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIlVua25vd25cIikgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiIC8+XCIpLFxuICAgICAgICAgICAgICAgICAgICAocmVzb2x2ZWRUeXBlID1cbiAgICAgICAgICAgICAgICAgICAgICBcIiBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50P1wiKSlcbiAgICAgICAgICAgICAgICAgIDogKHBlbmRpbmdQcm9wcyA9IHR5cGVvZiB0eXBlKTtcbiAgICAgICAgICAgIChmaWJlclRhZyA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZUZyb21Pd25lcihvd25lcikgOiBudWxsKSAmJlxuICAgICAgICAgICAgICAocmVzb2x2ZWRUeXBlICs9XG4gICAgICAgICAgICAgICAgXCJcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgXCIgKyBmaWJlclRhZyArIFwiYC5cIik7XG4gICAgICAgICAgICBmaWJlclRhZyA9IDI5O1xuICAgICAgICAgICAgcGVuZGluZ1Byb3BzID0gRXJyb3IoXG4gICAgICAgICAgICAgIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiBcIiArXG4gICAgICAgICAgICAgICAgKHBlbmRpbmdQcm9wcyArIFwiLlwiICsgcmVzb2x2ZWRUeXBlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIGtleSA9IGNyZWF0ZUZpYmVyKGZpYmVyVGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gICAgICBrZXkuZWxlbWVudFR5cGUgPSB0eXBlO1xuICAgICAga2V5LnR5cGUgPSByZXNvbHZlZFR5cGU7XG4gICAgICBrZXkubGFuZXMgPSBsYW5lcztcbiAgICAgIGtleS5fZGVidWdPd25lciA9IG93bmVyO1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCBtb2RlLCBsYW5lcykge1xuICAgICAgbW9kZSA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgICAgZWxlbWVudC50eXBlLFxuICAgICAgICBlbGVtZW50LmtleSxcbiAgICAgICAgZWxlbWVudC5wcm9wcyxcbiAgICAgICAgZWxlbWVudC5fb3duZXIsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIGxhbmVzXG4gICAgICApO1xuICAgICAgbW9kZS5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgbW9kZS5fZGVidWdTdGFjayA9IGVsZW1lbnQuX2RlYnVnU3RhY2s7XG4gICAgICBtb2RlLl9kZWJ1Z1Rhc2sgPSBlbGVtZW50Ll9kZWJ1Z1Rhc2s7XG4gICAgICByZXR1cm4gbW9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgICAgIGVsZW1lbnRzID0gY3JlYXRlRmliZXIoNywgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gICAgICBlbGVtZW50cy5sYW5lcyA9IGxhbmVzO1xuICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UZXh0KGNvbnRlbnQsIG1vZGUsIGxhbmVzKSB7XG4gICAgICBjb250ZW50ID0gY3JlYXRlRmliZXIoNiwgY29udGVudCwgbnVsbCwgbW9kZSk7XG4gICAgICBjb250ZW50LmxhbmVzID0gbGFuZXM7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgbW9kZSwgbGFuZXMpIHtcbiAgICAgIG1vZGUgPSBjcmVhdGVGaWJlcihcbiAgICAgICAgNCxcbiAgICAgICAgbnVsbCAhPT0gcG9ydGFsLmNoaWxkcmVuID8gcG9ydGFsLmNoaWxkcmVuIDogW10sXG4gICAgICAgIHBvcnRhbC5rZXksXG4gICAgICAgIG1vZGVcbiAgICAgICk7XG4gICAgICBtb2RlLmxhbmVzID0gbGFuZXM7XG4gICAgICBtb2RlLnN0YXRlTm9kZSA9IHtcbiAgICAgICAgY29udGFpbmVySW5mbzogcG9ydGFsLmNvbnRhaW5lckluZm8sXG4gICAgICAgIHBlbmRpbmdDaGlsZHJlbjogbnVsbCxcbiAgICAgICAgaW1wbGVtZW50YXRpb246IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICAgICAgfTtcbiAgICAgIHJldHVybiBtb2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoVHJlZUZvcmsod29ya0luUHJvZ3Jlc3MsIHRvdGFsQ2hpbGRyZW4pIHtcbiAgICAgIHdhcm5JZk5vdEh5ZHJhdGluZygpO1xuICAgICAgZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4KytdID0gdHJlZUZvcmtDb3VudDtcbiAgICAgIGZvcmtTdGFja1tmb3JrU3RhY2tJbmRleCsrXSA9IHRyZWVGb3JrUHJvdmlkZXI7XG4gICAgICB0cmVlRm9ya1Byb3ZpZGVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB0cmVlRm9ya0NvdW50ID0gdG90YWxDaGlsZHJlbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaFRyZWVJZCh3b3JrSW5Qcm9ncmVzcywgdG90YWxDaGlsZHJlbiwgaW5kZXgpIHtcbiAgICAgIHdhcm5JZk5vdEh5ZHJhdGluZygpO1xuICAgICAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dElkO1xuICAgICAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dE92ZXJmbG93O1xuICAgICAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dFByb3ZpZGVyO1xuICAgICAgdHJlZUNvbnRleHRQcm92aWRlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgdmFyIGJhc2VJZFdpdGhMZWFkaW5nQml0ID0gdHJlZUNvbnRleHRJZDtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gdHJlZUNvbnRleHRPdmVyZmxvdztcbiAgICAgIHZhciBiYXNlTGVuZ3RoID0gMzIgLSBjbHozMihiYXNlSWRXaXRoTGVhZGluZ0JpdCkgLSAxO1xuICAgICAgYmFzZUlkV2l0aExlYWRpbmdCaXQgJj0gfigxIDw8IGJhc2VMZW5ndGgpO1xuICAgICAgaW5kZXggKz0gMTtcbiAgICAgIHZhciBsZW5ndGggPSAzMiAtIGNsejMyKHRvdGFsQ2hpbGRyZW4pICsgYmFzZUxlbmd0aDtcbiAgICAgIGlmICgzMCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgbnVtYmVyT2ZPdmVyZmxvd0JpdHMgPSBiYXNlTGVuZ3RoIC0gKGJhc2VMZW5ndGggJSA1KTtcbiAgICAgICAgbGVuZ3RoID0gKFxuICAgICAgICAgIGJhc2VJZFdpdGhMZWFkaW5nQml0ICZcbiAgICAgICAgICAoKDEgPDwgbnVtYmVyT2ZPdmVyZmxvd0JpdHMpIC0gMSlcbiAgICAgICAgKS50b1N0cmluZygzMik7XG4gICAgICAgIGJhc2VJZFdpdGhMZWFkaW5nQml0ID4+PSBudW1iZXJPZk92ZXJmbG93Qml0cztcbiAgICAgICAgYmFzZUxlbmd0aCAtPSBudW1iZXJPZk92ZXJmbG93Qml0cztcbiAgICAgICAgdHJlZUNvbnRleHRJZCA9XG4gICAgICAgICAgKDEgPDwgKDMyIC0gY2x6MzIodG90YWxDaGlsZHJlbikgKyBiYXNlTGVuZ3RoKSkgfFxuICAgICAgICAgIChpbmRleCA8PCBiYXNlTGVuZ3RoKSB8XG4gICAgICAgICAgYmFzZUlkV2l0aExlYWRpbmdCaXQ7XG4gICAgICAgIHRyZWVDb250ZXh0T3ZlcmZsb3cgPSBsZW5ndGggKyB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIH0gZWxzZVxuICAgICAgICAodHJlZUNvbnRleHRJZCA9XG4gICAgICAgICAgKDEgPDwgbGVuZ3RoKSB8IChpbmRleCA8PCBiYXNlTGVuZ3RoKSB8IGJhc2VJZFdpdGhMZWFkaW5nQml0KSxcbiAgICAgICAgICAodHJlZUNvbnRleHRPdmVyZmxvdyA9IHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaE1hdGVyaWFsaXplZFRyZWVJZCh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm4gJiZcbiAgICAgICAgKHB1c2hUcmVlRm9yayh3b3JrSW5Qcm9ncmVzcywgMSksIHB1c2hUcmVlSWQod29ya0luUHJvZ3Jlc3MsIDEsIDApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIGZvciAoOyB3b3JrSW5Qcm9ncmVzcyA9PT0gdHJlZUZvcmtQcm92aWRlcjsgKVxuICAgICAgICAodHJlZUZvcmtQcm92aWRlciA9IGZvcmtTdGFja1stLWZvcmtTdGFja0luZGV4XSksXG4gICAgICAgICAgKGZvcmtTdGFja1tmb3JrU3RhY2tJbmRleF0gPSBudWxsKSxcbiAgICAgICAgICAodHJlZUZvcmtDb3VudCA9IGZvcmtTdGFja1stLWZvcmtTdGFja0luZGV4XSksXG4gICAgICAgICAgKGZvcmtTdGFja1tmb3JrU3RhY2tJbmRleF0gPSBudWxsKTtcbiAgICAgIGZvciAoOyB3b3JrSW5Qcm9ncmVzcyA9PT0gdHJlZUNvbnRleHRQcm92aWRlcjsgKVxuICAgICAgICAodHJlZUNvbnRleHRQcm92aWRlciA9IGlkU3RhY2tbLS1pZFN0YWNrSW5kZXhdKSxcbiAgICAgICAgICAoaWRTdGFja1tpZFN0YWNrSW5kZXhdID0gbnVsbCksXG4gICAgICAgICAgKHRyZWVDb250ZXh0T3ZlcmZsb3cgPSBpZFN0YWNrWy0taWRTdGFja0luZGV4XSksXG4gICAgICAgICAgKGlkU3RhY2tbaWRTdGFja0luZGV4XSA9IG51bGwpLFxuICAgICAgICAgICh0cmVlQ29udGV4dElkID0gaWRTdGFja1stLWlkU3RhY2tJbmRleF0pLFxuICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleF0gPSBudWxsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybklmTm90SHlkcmF0aW5nKCkge1xuICAgICAgaXNIeWRyYXRpbmcgfHxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHRvIGJlIGh5ZHJhdGluZy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRIeWRyYXRpb25EaWZmTm9kZShmaWJlciwgZGlzdGFuY2VGcm9tTGVhZikge1xuICAgICAgaWYgKG51bGwgPT09IGZpYmVyLnJldHVybikge1xuICAgICAgICBpZiAobnVsbCA9PT0gaHlkcmF0aW9uRGlmZlJvb3RERVYpXG4gICAgICAgICAgaHlkcmF0aW9uRGlmZlJvb3RERVYgPSB7XG4gICAgICAgICAgICBmaWJlcjogZmliZXIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBzZXJ2ZXJQcm9wczogdm9pZCAwLFxuICAgICAgICAgICAgc2VydmVyVGFpbDogW10sXG4gICAgICAgICAgICBkaXN0YW5jZUZyb21MZWFmOiBkaXN0YW5jZUZyb21MZWFmXG4gICAgICAgICAgfTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGh5ZHJhdGlvbkRpZmZSb290REVWLmZpYmVyICE9PSBmaWJlcilcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIlNhdyBtdWx0aXBsZSBoeWRyYXRpb24gZGlmZiByb290cyBpbiBhIHBhc3MuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaHlkcmF0aW9uRGlmZlJvb3RERVYuZGlzdGFuY2VGcm9tTGVhZiA+IGRpc3RhbmNlRnJvbUxlYWYgJiZcbiAgICAgICAgICAgIChoeWRyYXRpb25EaWZmUm9vdERFVi5kaXN0YW5jZUZyb21MZWFmID0gZGlzdGFuY2VGcm9tTGVhZik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh5ZHJhdGlvbkRpZmZSb290REVWO1xuICAgICAgfVxuICAgICAgdmFyIHNpYmxpbmdzID0gYnVpbGRIeWRyYXRpb25EaWZmTm9kZShcbiAgICAgICAgZmliZXIucmV0dXJuLFxuICAgICAgICBkaXN0YW5jZUZyb21MZWFmICsgMVxuICAgICAgKS5jaGlsZHJlbjtcbiAgICAgIGlmICgwIDwgc2libGluZ3MubGVuZ3RoICYmIHNpYmxpbmdzW3NpYmxpbmdzLmxlbmd0aCAtIDFdLmZpYmVyID09PSBmaWJlcilcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoc2libGluZ3MgPSBzaWJsaW5nc1tzaWJsaW5ncy5sZW5ndGggLSAxXSksXG4gICAgICAgICAgc2libGluZ3MuZGlzdGFuY2VGcm9tTGVhZiA+IGRpc3RhbmNlRnJvbUxlYWYgJiZcbiAgICAgICAgICAgIChzaWJsaW5ncy5kaXN0YW5jZUZyb21MZWFmID0gZGlzdGFuY2VGcm9tTGVhZiksXG4gICAgICAgICAgc2libGluZ3NcbiAgICAgICAgKTtcbiAgICAgIGRpc3RhbmNlRnJvbUxlYWYgPSB7XG4gICAgICAgIGZpYmVyOiBmaWJlcixcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBzZXJ2ZXJQcm9wczogdm9pZCAwLFxuICAgICAgICBzZXJ2ZXJUYWlsOiBbXSxcbiAgICAgICAgZGlzdGFuY2VGcm9tTGVhZjogZGlzdGFuY2VGcm9tTGVhZlxuICAgICAgfTtcbiAgICAgIHNpYmxpbmdzLnB1c2goZGlzdGFuY2VGcm9tTGVhZik7XG4gICAgICByZXR1cm4gZGlzdGFuY2VGcm9tTGVhZjtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk5vbkh5ZHJhdGVkSW5zdGFuY2UoZmliZXIsIHJlamVjdGVkQ2FuZGlkYXRlKSB7XG4gICAgICBkaWRTdXNwZW5kT3JFcnJvckRFViB8fFxuICAgICAgICAoKGZpYmVyID0gYnVpbGRIeWRyYXRpb25EaWZmTm9kZShmaWJlciwgMCkpLFxuICAgICAgICAoZmliZXIuc2VydmVyUHJvcHMgPSBudWxsKSxcbiAgICAgICAgbnVsbCAhPT0gcmVqZWN0ZWRDYW5kaWRhdGUgJiZcbiAgICAgICAgICAoKHJlamVjdGVkQ2FuZGlkYXRlID1cbiAgICAgICAgICAgIGRlc2NyaWJlSHlkcmF0YWJsZUluc3RhbmNlRm9yRGV2V2FybmluZ3MocmVqZWN0ZWRDYW5kaWRhdGUpKSxcbiAgICAgICAgICBmaWJlci5zZXJ2ZXJUYWlsLnB1c2gocmVqZWN0ZWRDYW5kaWRhdGUpKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRocm93T25IeWRyYXRpb25NaXNtYXRjaChmaWJlcikge1xuICAgICAgdmFyIGRpZmYgPSBcIlwiLFxuICAgICAgICBkaWZmUm9vdCA9IGh5ZHJhdGlvbkRpZmZSb290REVWO1xuICAgICAgbnVsbCAhPT0gZGlmZlJvb3QgJiZcbiAgICAgICAgKChoeWRyYXRpb25EaWZmUm9vdERFViA9IG51bGwpLCAoZGlmZiA9IGRlc2NyaWJlRGlmZihkaWZmUm9vdCkpKTtcbiAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoXG4gICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICAgIEVycm9yKFxuICAgICAgICAgICAgXCJIeWRyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHNlcnZlciByZW5kZXJlZCBIVE1MIGRpZG4ndCBtYXRjaCB0aGUgY2xpZW50LiBBcyBhIHJlc3VsdCB0aGlzIHRyZWUgd2lsbCBiZSByZWdlbmVyYXRlZCBvbiB0aGUgY2xpZW50LiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBTU1ItZWQgQ2xpZW50IENvbXBvbmVudCB1c2VkOlxcblxcbi0gQSBzZXJ2ZXIvY2xpZW50IGJyYW5jaCBgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKWAuXFxuLSBWYXJpYWJsZSBpbnB1dCBzdWNoIGFzIGBEYXRlLm5vdygpYCBvciBgTWF0aC5yYW5kb20oKWAgd2hpY2ggY2hhbmdlcyBlYWNoIHRpbWUgaXQncyBjYWxsZWQuXFxuLSBEYXRlIGZvcm1hdHRpbmcgaW4gYSB1c2VyJ3MgbG9jYWxlIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggdGhlIHNlcnZlci5cXG4tIEV4dGVybmFsIGNoYW5naW5nIGRhdGEgd2l0aG91dCBzZW5kaW5nIGEgc25hcHNob3Qgb2YgaXQgYWxvbmcgd2l0aCB0aGUgSFRNTC5cXG4tIEludmFsaWQgSFRNTCB0YWcgbmVzdGluZy5cXG5cXG5JdCBjYW4gYWxzbyBoYXBwZW4gaWYgdGhlIGNsaWVudCBoYXMgYSBicm93c2VyIGV4dGVuc2lvbiBpbnN0YWxsZWQgd2hpY2ggbWVzc2VzIHdpdGggdGhlIEhUTUwgYmVmb3JlIFJlYWN0IGxvYWRlZC5cXG5cXG5odHRwczovL3JlYWN0LmRldi9saW5rL2h5ZHJhdGlvbi1taXNtYXRjaFwiICtcbiAgICAgICAgICAgICAgZGlmZlxuICAgICAgICAgICksXG4gICAgICAgICAgZmliZXJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRocm93IEh5ZHJhdGlvbk1pc21hdGNoRXhjZXB0aW9uO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKGZpYmVyKSB7XG4gICAgICB2YXIgZGlkSHlkcmF0ZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZSxcbiAgICAgICAgcHJvcHMgPSBmaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgZGlkSHlkcmF0ZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGZpYmVyO1xuICAgICAgZGlkSHlkcmF0ZVtpbnRlcm5hbFByb3BzS2V5XSA9IHByb3BzO1xuICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0eXBlLCBwcm9wcyk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcImRpYWxvZ1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJjYW5jZWxcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImNsb3NlXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaWZyYW1lXCI6XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgY2FzZSBcImVtYmVkXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ2aWRlb1wiOlxuICAgICAgICBjYXNlIFwiYXVkaW9cIjpcbiAgICAgICAgICBmb3IgKHR5cGUgPSAwOyB0eXBlIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgdHlwZSsrKVxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbdHlwZV0sIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic291cmNlXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW1nXCI6XG4gICAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJlcnJvclwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRldGFpbHNcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwidG9nZ2xlXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKFwiaW5wdXRcIiwgcHJvcHMpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIHZhbGlkYXRlSW5wdXRQcm9wcyhkaWRIeWRyYXRlLCBwcm9wcyk7XG4gICAgICAgICAgaW5pdElucHV0KFxuICAgICAgICAgICAgZGlkSHlkcmF0ZSxcbiAgICAgICAgICAgIHByb3BzLnZhbHVlLFxuICAgICAgICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgcHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICAgIHByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgcHJvcHMudHlwZSxcbiAgICAgICAgICAgIHByb3BzLm5hbWUsXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgICAgdHJhY2soZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvcHRpb25cIjpcbiAgICAgICAgICB2YWxpZGF0ZU9wdGlvblByb3BzKGRpZEh5ZHJhdGUsIHByb3BzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJzZWxlY3RcIiwgcHJvcHMpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIHZhbGlkYXRlU2VsZWN0UHJvcHMoZGlkSHlkcmF0ZSwgcHJvcHMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKFwidGV4dGFyZWFcIiwgcHJvcHMpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgZGlkSHlkcmF0ZSksXG4gICAgICAgICAgICB2YWxpZGF0ZVRleHRhcmVhUHJvcHMoZGlkSHlkcmF0ZSwgcHJvcHMpLFxuICAgICAgICAgICAgaW5pdFRleHRhcmVhKFxuICAgICAgICAgICAgICBkaWRIeWRyYXRlLFxuICAgICAgICAgICAgICBwcm9wcy52YWx1ZSxcbiAgICAgICAgICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICBwcm9wcy5jaGlsZHJlblxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYWNrKGRpZEh5ZHJhdGUpO1xuICAgICAgfVxuICAgICAgdHlwZSA9IHByb3BzLmNoaWxkcmVuO1xuICAgICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIFwibnVtYmVyXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIFwiYmlnaW50XCIgIT09IHR5cGVvZiB0eXBlKSB8fFxuICAgICAgZGlkSHlkcmF0ZS50ZXh0Q29udGVudCA9PT0gXCJcIiArIHR5cGUgfHxcbiAgICAgICEwID09PSBwcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgfHxcbiAgICAgIGNoZWNrRm9yVW5tYXRjaGVkVGV4dChkaWRIeWRyYXRlLnRleHRDb250ZW50LCB0eXBlKVxuICAgICAgICA/IChudWxsICE9IHByb3BzLnBvcG92ZXIgJiZcbiAgICAgICAgICAgIChsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiYmVmb3JldG9nZ2xlXCIsIGRpZEh5ZHJhdGUpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInRvZ2dsZVwiLCBkaWRIeWRyYXRlKSksXG4gICAgICAgICAgbnVsbCAhPSBwcm9wcy5vblNjcm9sbCAmJlxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbFwiLCBkaWRIeWRyYXRlKSxcbiAgICAgICAgICBudWxsICE9IHByb3BzLm9uU2Nyb2xsRW5kICYmXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsZW5kXCIsIGRpZEh5ZHJhdGUpLFxuICAgICAgICAgIG51bGwgIT0gcHJvcHMub25DbGljayAmJiAoZGlkSHlkcmF0ZS5vbmNsaWNrID0gbm9vcCQxKSxcbiAgICAgICAgICAoZGlkSHlkcmF0ZSA9ICEwKSlcbiAgICAgICAgOiAoZGlkSHlkcmF0ZSA9ICExKTtcbiAgICAgIGRpZEh5ZHJhdGUgfHwgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcikge1xuICAgICAgZm9yIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyLnJldHVybjsgaHlkcmF0aW9uUGFyZW50RmliZXI7IClcbiAgICAgICAgc3dpdGNoIChoeWRyYXRpb25QYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlci5yZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wSHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcbiAgICAgIGlmIChmaWJlciAhPT0gaHlkcmF0aW9uUGFyZW50RmliZXIpIHJldHVybiAhMTtcbiAgICAgIGlmICghaXNIeWRyYXRpbmcpXG4gICAgICAgIHJldHVybiBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKSwgKGlzSHlkcmF0aW5nID0gITApLCAhMTtcbiAgICAgIHZhciB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcDtcbiAgICAgIGlmICgoSlNDb21waWxlcl90ZW1wID0gMyAhPT0gdGFnICYmIDI3ICE9PSB0YWcpKSB7XG4gICAgICAgIGlmICgoSlNDb21waWxlcl90ZW1wID0gNSA9PT0gdGFnKSlcbiAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID0gZmliZXIudHlwZSksXG4gICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID1cbiAgICAgICAgICAgICAgIShcImZvcm1cIiAhPT0gSlNDb21waWxlcl90ZW1wICYmIFwiYnV0dG9uXCIgIT09IEpTQ29tcGlsZXJfdGVtcCkgfHxcbiAgICAgICAgICAgICAgc2hvdWxkU2V0VGV4dENvbnRlbnQoZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcykpO1xuICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSAhSlNDb21waWxlcl90ZW1wO1xuICAgICAgfVxuICAgICAgaWYgKEpTQ29tcGlsZXJfdGVtcCAmJiBuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSB7XG4gICAgICAgIGZvciAoSlNDb21waWxlcl90ZW1wID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTsgSlNDb21waWxlcl90ZW1wOyApIHtcbiAgICAgICAgICB2YXIgZGlmZk5vZGUgPSBidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKGZpYmVyLCAwKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID1cbiAgICAgICAgICAgICAgZGVzY3JpYmVIeWRyYXRhYmxlSW5zdGFuY2VGb3JEZXZXYXJuaW5ncyhKU0NvbXBpbGVyX3RlbXApO1xuICAgICAgICAgIGRpZmZOb2RlLnNlcnZlclRhaWwucHVzaChkZXNjcmlwdGlvbik7XG4gICAgICAgICAgSlNDb21waWxlcl90ZW1wID1cbiAgICAgICAgICAgIFwiU3VzcGVuc2VcIiA9PT0gZGVzY3JpcHRpb24udHlwZVxuICAgICAgICAgICAgICA/IGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2UoSlNDb21waWxlcl90ZW1wKVxuICAgICAgICAgICAgICA6IGdldE5leHRIeWRyYXRhYmxlKEpTQ29tcGlsZXJfdGVtcC5uZXh0U2libGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKGZpYmVyKTtcbiAgICAgIH1cbiAgICAgIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICAgICAgaWYgKDEzID09PSB0YWcpIHtcbiAgICAgICAgZmliZXIgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgICBmaWJlciA9IG51bGwgIT09IGZpYmVyID8gZmliZXIuZGVoeWRyYXRlZCA6IG51bGw7XG4gICAgICAgIGlmICghZmliZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPVxuICAgICAgICAgIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2UoZmliZXIpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIDI3ID09PSB0YWdcbiAgICAgICAgICA/ICgodGFnID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSksXG4gICAgICAgICAgICBpc1NpbmdsZXRvblNjb3BlKGZpYmVyLnR5cGUpXG4gICAgICAgICAgICAgID8gKChmaWJlciA9IHByZXZpb3VzSHlkcmF0YWJsZU9uRW50ZXJpbmdTY29wZWRTaW5nbGV0b24pLFxuICAgICAgICAgICAgICAgIChwcmV2aW91c0h5ZHJhdGFibGVPbkVudGVyaW5nU2NvcGVkU2luZ2xldG9uID0gbnVsbCksXG4gICAgICAgICAgICAgICAgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBmaWJlcikpXG4gICAgICAgICAgICAgIDogKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSB0YWcpKVxuICAgICAgICAgIDogKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlclxuICAgICAgICAgICAgICA/IGdldE5leHRIeWRyYXRhYmxlKGZpYmVyLnN0YXRlTm9kZS5uZXh0U2libGluZylcbiAgICAgICAgICAgICAgOiBudWxsKTtcbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRIeWRyYXRpb25TdGF0ZSgpIHtcbiAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG4gICAgICBkaWRTdXNwZW5kT3JFcnJvckRFViA9IGlzSHlkcmF0aW5nID0gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlKCkge1xuICAgICAgdmFyIHF1ZXVlZEVycm9ycyA9IGh5ZHJhdGlvbkVycm9ycztcbiAgICAgIG51bGwgIT09IHF1ZXVlZEVycm9ycyAmJlxuICAgICAgICAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnNcbiAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IHF1ZXVlZEVycm9ycylcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLnB1c2guYXBwbHkoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgICAgICBxdWV1ZWRFcnJvcnNcbiAgICAgICAgICAgICksXG4gICAgICAgIChoeWRyYXRpb25FcnJvcnMgPSBudWxsKSk7XG4gICAgICByZXR1cm4gcXVldWVkRXJyb3JzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBxdWV1ZUh5ZHJhdGlvbkVycm9yKGVycm9yKSB7XG4gICAgICBudWxsID09PSBoeWRyYXRpb25FcnJvcnNcbiAgICAgICAgPyAoaHlkcmF0aW9uRXJyb3JzID0gW2Vycm9yXSlcbiAgICAgICAgOiBoeWRyYXRpb25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVtaXRQZW5kaW5nSHlkcmF0aW9uV2FybmluZ3MoKSB7XG4gICAgICB2YXIgZGlmZlJvb3QgPSBoeWRyYXRpb25EaWZmUm9vdERFVjtcbiAgICAgIGlmIChudWxsICE9PSBkaWZmUm9vdCkge1xuICAgICAgICBoeWRyYXRpb25EaWZmUm9vdERFViA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIGRpZmYgPSBkZXNjcmliZURpZmYoZGlmZlJvb3QpOyAwIDwgZGlmZlJvb3QuY2hpbGRyZW4ubGVuZ3RoOyApXG4gICAgICAgICAgZGlmZlJvb3QgPSBkaWZmUm9vdC5jaGlsZHJlblswXTtcbiAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZGlmZlJvb3QuZmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJBIHRyZWUgaHlkcmF0ZWQgYnV0IHNvbWUgYXR0cmlidXRlcyBvZiB0aGUgc2VydmVyIHJlbmRlcmVkIEhUTUwgZGlkbid0IG1hdGNoIHRoZSBjbGllbnQgcHJvcGVydGllcy4gVGhpcyB3b24ndCBiZSBwYXRjaGVkIHVwLiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBTU1ItZWQgQ2xpZW50IENvbXBvbmVudCB1c2VkOlxcblxcbi0gQSBzZXJ2ZXIvY2xpZW50IGJyYW5jaCBgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKWAuXFxuLSBWYXJpYWJsZSBpbnB1dCBzdWNoIGFzIGBEYXRlLm5vdygpYCBvciBgTWF0aC5yYW5kb20oKWAgd2hpY2ggY2hhbmdlcyBlYWNoIHRpbWUgaXQncyBjYWxsZWQuXFxuLSBEYXRlIGZvcm1hdHRpbmcgaW4gYSB1c2VyJ3MgbG9jYWxlIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggdGhlIHNlcnZlci5cXG4tIEV4dGVybmFsIGNoYW5naW5nIGRhdGEgd2l0aG91dCBzZW5kaW5nIGEgc25hcHNob3Qgb2YgaXQgYWxvbmcgd2l0aCB0aGUgSFRNTC5cXG4tIEludmFsaWQgSFRNTCB0YWcgbmVzdGluZy5cXG5cXG5JdCBjYW4gYWxzbyBoYXBwZW4gaWYgdGhlIGNsaWVudCBoYXMgYSBicm93c2VyIGV4dGVuc2lvbiBpbnN0YWxsZWQgd2hpY2ggbWVzc2VzIHdpdGggdGhlIEhUTUwgYmVmb3JlIFJlYWN0IGxvYWRlZC5cXG5cXG4lcyVzXCIsXG4gICAgICAgICAgICBcImh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaHlkcmF0aW9uLW1pc21hdGNoXCIsXG4gICAgICAgICAgICBkaWZmXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpIHtcbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoUHJvdmlkZXIocHJvdmlkZXJGaWJlciwgY29udGV4dCwgbmV4dFZhbHVlKSB7XG4gICAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgcHVzaChyZW5kZXJlckN1cnNvckRFViwgY29udGV4dC5fY3VycmVudFJlbmRlcmVyLCBwcm92aWRlckZpYmVyKTtcbiAgICAgIHZvaWQgMCAhPT0gY29udGV4dC5fY3VycmVudFJlbmRlcmVyICYmXG4gICAgICAgIG51bGwgIT09IGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAmJlxuICAgICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkRldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSBzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLlwiXG4gICAgICAgICk7XG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BQcm92aWRlcihjb250ZXh0LCBwcm92aWRlckZpYmVyKSB7XG4gICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSB2YWx1ZUN1cnNvci5jdXJyZW50O1xuICAgICAgdmFyIGN1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyQ3Vyc29yREVWLmN1cnJlbnQ7XG4gICAgICBwb3AocmVuZGVyZXJDdXJzb3JERVYsIHByb3ZpZGVyRmliZXIpO1xuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gY3VycmVudFJlbmRlcmVyO1xuICAgICAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgIHBhcmVudCxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgcHJvcGFnYXRpb25Sb290XG4gICAgKSB7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gcGFyZW50OyApIHtcbiAgICAgICAgdmFyIGFsdGVybmF0ZSA9IHBhcmVudC5hbHRlcm5hdGU7XG4gICAgICAgIChwYXJlbnQuY2hpbGRMYW5lcyAmIHJlbmRlckxhbmVzKSAhPT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICA/ICgocGFyZW50LmNoaWxkTGFuZXMgfD0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmIChhbHRlcm5hdGUuY2hpbGRMYW5lcyB8PSByZW5kZXJMYW5lcykpXG4gICAgICAgICAgOiBudWxsICE9PSBhbHRlcm5hdGUgJiZcbiAgICAgICAgICAgIChhbHRlcm5hdGUuY2hpbGRMYW5lcyAmIHJlbmRlckxhbmVzKSAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgIChhbHRlcm5hdGUuY2hpbGRMYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHByb3BhZ2F0aW9uUm9vdCkgYnJlYWs7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG4gICAgICBwYXJlbnQgIT09IHByb3BhZ2F0aW9uUm9vdCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gZmluZCB0aGUgcHJvcGFnYXRpb24gcm9vdCB3aGVuIHNjaGVkdWxpbmcgY29udGV4dCB3b3JrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VzKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjb250ZXh0cyxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgZm9yY2VQcm9wYWdhdGVFbnRpcmVUcmVlXG4gICAgKSB7XG4gICAgICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIG51bGwgIT09IGZpYmVyICYmIChmaWJlci5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gZmliZXI7ICkge1xuICAgICAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcbiAgICAgICAgaWYgKG51bGwgIT09IGxpc3QpIHtcbiAgICAgICAgICB2YXIgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgICAgICAgbGlzdCA9IGxpc3QuZmlyc3RDb250ZXh0O1xuICAgICAgICAgIGE6IGZvciAoOyBudWxsICE9PSBsaXN0OyApIHtcbiAgICAgICAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdDtcbiAgICAgICAgICAgIGxpc3QgPSBmaWJlcjtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHRzW2ldKSB7XG4gICAgICAgICAgICAgICAgbGlzdC5sYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmN5ID0gbGlzdC5hbHRlcm5hdGU7XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gZGVwZW5kZW5jeSAmJiAoZGVwZW5kZW5jeS5sYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgICAgICAgICAgIGxpc3QucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZm9yY2VQcm9wYWdhdGVFbnRpcmVUcmVlIHx8IChuZXh0RmliZXIgPSBudWxsKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBsaXN0ID0gZGVwZW5kZW5jeS5uZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgxOCA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgICAgbmV4dEZpYmVyID0gZmliZXIucmV0dXJuO1xuICAgICAgICAgIGlmIChudWxsID09PSBuZXh0RmliZXIpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJXZSBqdXN0IGNhbWUgZnJvbSBhIHBhcmVudCBzbyB3ZSBtdXN0IGhhdmUgaGFkIGEgcGFyZW50LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIG5leHRGaWJlci5sYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgICAgICAgICBsaXN0ID0gbmV4dEZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgICBudWxsICE9PSBsaXN0ICYmIChsaXN0LmxhbmVzIHw9IHJlbmRlckxhbmVzKTtcbiAgICAgICAgICBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKFxuICAgICAgICAgICAgbmV4dEZpYmVyLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICk7XG4gICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICBpZiAobnVsbCAhPT0gbmV4dEZpYmVyKSBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBmb3IgKG5leHRGaWJlciA9IGZpYmVyOyBudWxsICE9PSBuZXh0RmliZXI7ICkge1xuICAgICAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWJlciA9IG5leHRGaWJlci5zaWJsaW5nO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpYmVyKSB7XG4gICAgICAgICAgICAgIGZpYmVyLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICBmaWJlciA9IG5leHRGaWJlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZVxuICAgICkge1xuICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgcGFyZW50ID0gd29ya0luUHJvZ3Jlc3MsIGlzSW5zaWRlUHJvcGFnYXRpb25CYWlsb3V0ID0gITE7XG4gICAgICAgIG51bGwgIT09IHBhcmVudDtcblxuICAgICAgKSB7XG4gICAgICAgIGlmICghaXNJbnNpZGVQcm9wYWdhdGlvbkJhaWxvdXQpXG4gICAgICAgICAgaWYgKDAgIT09IChwYXJlbnQuZmxhZ3MgJiA1MjQyODgpKSBpc0luc2lkZVByb3BhZ2F0aW9uQmFpbG91dCA9ICEwO1xuICAgICAgICAgIGVsc2UgaWYgKDAgIT09IChwYXJlbnQuZmxhZ3MgJiAyNjIxNDQpKSBicmVhaztcbiAgICAgICAgaWYgKDEwID09PSBwYXJlbnQudGFnKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50UGFyZW50KVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgaGF2ZSBhIGN1cnJlbnQgZmliZXIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIpO1xuICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gcGFyZW50LnR5cGU7XG4gICAgICAgICAgICBvYmplY3RJcyhwYXJlbnQucGVuZGluZ1Byb3BzLnZhbHVlLCBjdXJyZW50UGFyZW50LnZhbHVlKSB8fFxuICAgICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudFxuICAgICAgICAgICAgICAgID8gY3VycmVudC5wdXNoKGNvbnRleHQpXG4gICAgICAgICAgICAgICAgOiAoY3VycmVudCA9IFtjb250ZXh0XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQgPT09IGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IuY3VycmVudCkge1xuICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50UGFyZW50KVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgaGF2ZSBhIGN1cnJlbnQgZmliZXIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIpO1xuICAgICAgICAgIGN1cnJlbnRQYXJlbnQubWVtb2l6ZWRTdGF0ZS5tZW1vaXplZFN0YXRlICE9PVxuICAgICAgICAgICAgcGFyZW50Lm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyBjdXJyZW50LnB1c2goSG9zdFRyYW5zaXRpb25Db250ZXh0KVxuICAgICAgICAgICAgICA6IChjdXJyZW50ID0gW0hvc3RUcmFuc2l0aW9uQ29udGV4dF0pKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZVxuICAgICAgICApO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjYyMTQ0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0lmQ29udGV4dENoYW5nZWQoY3VycmVudERlcGVuZGVuY2llcykge1xuICAgICAgZm9yIChcbiAgICAgICAgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0O1xuICAgICAgICBudWxsICE9PSBjdXJyZW50RGVwZW5kZW5jaWVzO1xuXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFvYmplY3RJcyhcbiAgICAgICAgICAgIGN1cnJlbnREZXBlbmRlbmNpZXMuY29udGV4dC5fY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgY3VycmVudERlcGVuZGVuY2llcy5tZW1vaXplZFZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcy5uZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MgJiYgKHdvcmtJblByb2dyZXNzLmZpcnN0Q29udGV4dCA9IG51bGwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQ29udGV4dChjb250ZXh0KSB7XG4gICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0Rm9yQ29uc3VtZXIoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgY29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24oY29uc3VtZXIsIGNvbnRleHQpIHtcbiAgICAgIG51bGwgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgJiYgcHJlcGFyZVRvUmVhZENvbnRleHQoY29uc3VtZXIpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0Rm9yQ29uc3VtZXIoY29uc3VtZXIsIGNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICBjb250ZXh0ID0geyBjb250ZXh0OiBjb250ZXh0LCBtZW1vaXplZFZhbHVlOiB2YWx1ZSwgbmV4dDogbnVsbCB9O1xuICAgICAgaWYgKG51bGwgPT09IGxhc3RDb250ZXh0RGVwZW5kZW5jeSkge1xuICAgICAgICBpZiAobnVsbCA9PT0gY29uc3VtZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dDtcbiAgICAgICAgY29uc3VtZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICAgIGxhbmVzOiAwLFxuICAgICAgICAgIGZpcnN0Q29udGV4dDogY29udGV4dCxcbiAgICAgICAgICBfZGVidWdUaGVuYWJsZVN0YXRlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN1bWVyLmZsYWdzIHw9IDUyNDI4ODtcbiAgICAgIH0gZWxzZSBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHQ7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udHJvbGxlcjogbmV3IEFib3J0Q29udHJvbGxlckxvY2FsKCksXG4gICAgICAgIGRhdGE6IG5ldyBNYXAoKSxcbiAgICAgICAgcmVmQ291bnQ6IDBcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldGFpbkNhY2hlKGNhY2hlKSB7XG4gICAgICBjYWNoZS5jb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkICYmXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIkEgY2FjaGUgaW5zdGFuY2Ugd2FzIHJldGFpbmVkIGFmdGVyIGl0IHdhcyBhbHJlYWR5IGZyZWVkLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgKTtcbiAgICAgIGNhY2hlLnJlZkNvdW50Kys7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGVhc2VDYWNoZShjYWNoZSkge1xuICAgICAgY2FjaGUucmVmQ291bnQtLTtcbiAgICAgIDAgPiBjYWNoZS5yZWZDb3VudCAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJBIGNhY2hlIGluc3RhbmNlIHdhcyByZWxlYXNlZCBhZnRlciBpdCB3YXMgYWxyZWFkeSBmcmVlZC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICk7XG4gICAgICAwID09PSBjYWNoZS5yZWZDb3VudCAmJlxuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrJDIoTm9ybWFsUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYWNoZS5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCkge1xuICAgICAgdmFyIHByZXZFZmZlY3REdXJhdGlvbiA9IHByb2ZpbGVyRWZmZWN0RHVyYXRpb247XG4gICAgICBwcm9maWxlckVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgIHJldHVybiBwcmV2RWZmZWN0RHVyYXRpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcE5lc3RlZEVmZmVjdER1cmF0aW9ucyhwcmV2RWZmZWN0RHVyYXRpb24pIHtcbiAgICAgIHZhciBlbGFwc2VkVGltZSA9IHByb2ZpbGVyRWZmZWN0RHVyYXRpb247XG4gICAgICBwcm9maWxlckVmZmVjdER1cmF0aW9uID0gcHJldkVmZmVjdER1cmF0aW9uO1xuICAgICAgcmV0dXJuIGVsYXBzZWRUaW1lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMocHJldkVmZmVjdER1cmF0aW9uKSB7XG4gICAgICB2YXIgZWxhcHNlZFRpbWUgPSBwcm9maWxlckVmZmVjdER1cmF0aW9uO1xuICAgICAgcHJvZmlsZXJFZmZlY3REdXJhdGlvbiArPSBwcmV2RWZmZWN0RHVyYXRpb247XG4gICAgICByZXR1cm4gZWxhcHNlZFRpbWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0UHJvZmlsZXJUaW1lcihmaWJlcikge1xuICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSBub3coKTtcbiAgICAgIDAgPiBmaWJlci5hY3R1YWxTdGFydFRpbWUgJiYgKGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IHByb2ZpbGVyU3RhcnRUaW1lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREdXJhdGlvbihmaWJlcikge1xuICAgICAgaWYgKDAgPD0gcHJvZmlsZXJTdGFydFRpbWUpIHtcbiAgICAgICAgdmFyIGVsYXBzZWRUaW1lID0gbm93KCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICAgICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICAgIGZpYmVyLnNlbGZCYXNlRHVyYXRpb24gPSBlbGFwc2VkVGltZTtcbiAgICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmRJbmNvbXBsZXRlRHVyYXRpb24oZmliZXIpIHtcbiAgICAgIGlmICgwIDw9IHByb2ZpbGVyU3RhcnRUaW1lKSB7XG4gICAgICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdygpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWNvcmRFZmZlY3REdXJhdGlvbigpIHtcbiAgICAgIGlmICgwIDw9IHByb2ZpbGVyU3RhcnRUaW1lKSB7XG4gICAgICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdygpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gICAgICAgIHByb2ZpbGVyRWZmZWN0RHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0RWZmZWN0VGltZXIoKSB7XG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IG5vdygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKGZpYmVyKSB7XG4gICAgICBmb3IgKHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkOyBjaGlsZDsgKVxuICAgICAgICAoZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb24pLCAoY2hpbGQgPSBjaGlsZC5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW50YW5nbGVBc3luY0FjdGlvbih0cmFuc2l0aW9uLCB0aGVuYWJsZSkge1xuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnMpIHtcbiAgICAgICAgdmFyIGVudGFuZ2xlZExpc3RlbmVycyA9IChjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzID0gW10pO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50ID0gMDtcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZExhbmUgPSByZXF1ZXN0VHJhbnNpdGlvbkxhbmUoKTtcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0ge1xuICAgICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgZW50YW5nbGVkTGlzdGVuZXJzLnB1c2gocmVzb2x2ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY3VycmVudEVudGFuZ2xlZFBlbmRpbmdDb3VudCsrO1xuICAgICAgdGhlbmFibGUudGhlbihwaW5nRW5ndGFuZ2xlZEFjdGlvblNjb3BlLCBwaW5nRW5ndGFuZ2xlZEFjdGlvblNjb3BlKTtcbiAgICAgIHJldHVybiB0aGVuYWJsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGluZ0VuZ3RhbmdsZWRBY3Rpb25TY29wZSgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgMCA9PT0gLS1jdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50ICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnNcbiAgICAgICkge1xuICAgICAgICBudWxsICE9PSBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUgJiZcbiAgICAgICAgICAoY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIpO1xuICAgICAgICB2YXIgbGlzdGVuZXJzID0gY3VycmVudEVudGFuZ2xlZExpc3RlbmVycztcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZExpc3RlbmVycyA9IG51bGw7XG4gICAgICAgIGN1cnJlbnRFbnRhbmdsZWRMYW5lID0gMDtcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspICgwLCBsaXN0ZW5lcnNbaV0pKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoYWluVGhlbmFibGVWYWx1ZSh0aGVuYWJsZSwgcmVzdWx0KSB7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gW10sXG4gICAgICAgIHRoZW5hYmxlV2l0aE92ZXJyaWRlID0ge1xuICAgICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgcmVhc29uOiBudWxsLFxuICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMucHVzaChyZXNvbHZlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICB0aGVuYWJsZVdpdGhPdmVycmlkZS52YWx1ZSA9IHJlc3VsdDtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykgKDAsIGxpc3RlbmVyc1tpXSkocmVzdWx0KTtcbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUuc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgICAgIHRoZW5hYmxlV2l0aE92ZXJyaWRlLnJlYXNvbiA9IGVycm9yO1xuICAgICAgICAgIGZvciAoZXJyb3IgPSAwOyBlcnJvciA8IGxpc3RlbmVycy5sZW5ndGg7IGVycm9yKyspXG4gICAgICAgICAgICAoMCwgbGlzdGVuZXJzW2Vycm9yXSkodm9pZCAwKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGVuYWJsZVdpdGhPdmVycmlkZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVla0NhY2hlRnJvbVBvb2woKSB7XG4gICAgICB2YXIgY2FjaGVSZXN1bWVkRnJvbVByZXZpb3VzUmVuZGVyID0gcmVzdW1lZENhY2hlLmN1cnJlbnQ7XG4gICAgICByZXR1cm4gbnVsbCAhPT0gY2FjaGVSZXN1bWVkRnJvbVByZXZpb3VzUmVuZGVyXG4gICAgICAgID8gY2FjaGVSZXN1bWVkRnJvbVByZXZpb3VzUmVuZGVyXG4gICAgICAgIDogd29ya0luUHJvZ3Jlc3NSb290LnBvb2xlZENhY2hlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoVHJhbnNpdGlvbihvZmZzY3JlZW5Xb3JrSW5Qcm9ncmVzcywgcHJldkNhY2hlUG9vbCkge1xuICAgICAgbnVsbCA9PT0gcHJldkNhY2hlUG9vbFxuICAgICAgICA/IHB1c2gocmVzdW1lZENhY2hlLCByZXN1bWVkQ2FjaGUuY3VycmVudCwgb2Zmc2NyZWVuV29ya0luUHJvZ3Jlc3MpXG4gICAgICAgIDogcHVzaChyZXN1bWVkQ2FjaGUsIHByZXZDYWNoZVBvb2wucG9vbCwgb2Zmc2NyZWVuV29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdXNwZW5kZWRDYWNoZSgpIHtcbiAgICAgIHZhciBjYWNoZUZyb21Qb29sID0gcGVla0NhY2hlRnJvbVBvb2woKTtcbiAgICAgIHJldHVybiBudWxsID09PSBjYWNoZUZyb21Qb29sXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHsgcGFyZW50OiBDYWNoZUNvbnRleHQuX2N1cnJlbnRWYWx1ZSwgcG9vbDogY2FjaGVGcm9tUG9vbCB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVUaGVuYWJsZVN0YXRlKCkge1xuICAgICAgcmV0dXJuIHsgZGlkV2FybkFib3V0VW5jYWNoZWRQcm9taXNlOiAhMSwgdGhlbmFibGVzOiBbXSB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RoZW5hYmxlUmVzb2x2ZWQodGhlbmFibGUpIHtcbiAgICAgIHRoZW5hYmxlID0gdGhlbmFibGUuc3RhdHVzO1xuICAgICAgcmV0dXJuIFwiZnVsZmlsbGVkXCIgPT09IHRoZW5hYmxlIHx8IFwicmVqZWN0ZWRcIiA9PT0gdGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AkMygpIHt9XG4gICAgZnVuY3Rpb24gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSwgdGhlbmFibGUsIGluZGV4KSB7XG4gICAgICBudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSAmJlxuICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuZGlkVXNlUHJvbWlzZSA9ICEwKTtcbiAgICAgIHZhciB0cmFja2VkVGhlbmFibGVzID0gdGhlbmFibGVTdGF0ZS50aGVuYWJsZXM7XG4gICAgICBpbmRleCA9IHRyYWNrZWRUaGVuYWJsZXNbaW5kZXhdO1xuICAgICAgdm9pZCAwID09PSBpbmRleFxuICAgICAgICA/IHRyYWNrZWRUaGVuYWJsZXMucHVzaCh0aGVuYWJsZSlcbiAgICAgICAgOiBpbmRleCAhPT0gdGhlbmFibGUgJiZcbiAgICAgICAgICAodGhlbmFibGVTdGF0ZS5kaWRXYXJuQWJvdXRVbmNhY2hlZFByb21pc2UgfHxcbiAgICAgICAgICAgICgodGhlbmFibGVTdGF0ZS5kaWRXYXJuQWJvdXRVbmNhY2hlZFByb21pc2UgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IHdhcyBzdXNwZW5kZWQgYnkgYW4gdW5jYWNoZWQgcHJvbWlzZS4gQ3JlYXRpbmcgcHJvbWlzZXMgaW5zaWRlIGEgQ2xpZW50IENvbXBvbmVudCBvciBob29rIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBleGNlcHQgdmlhIGEgU3VzcGVuc2UtY29tcGF0aWJsZSBsaWJyYXJ5IG9yIGZyYW1ld29yay5cIlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgdGhlbmFibGUudGhlbihub29wJDMsIG5vb3AkMyksXG4gICAgICAgICAgKHRoZW5hYmxlID0gaW5kZXgpKTtcbiAgICAgIHN3aXRjaCAodGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICByZXR1cm4gdGhlbmFibGUudmFsdWU7XG4gICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICgodGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlLnJlYXNvbiksXG4gICAgICAgICAgICBjaGVja0lmVXNlV3JhcHBlZEluQXN5bmNDYXRjaCh0aGVuYWJsZVN0YXRlKSxcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHRoZW5hYmxlLnN0YXR1cylcbiAgICAgICAgICAgIHRoZW5hYmxlLnRoZW4obm9vcCQzLCBub29wJDMpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhlbmFibGVTdGF0ZSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbnVsbCAhPT0gdGhlbmFibGVTdGF0ZSAmJlxuICAgICAgICAgICAgICAxMDAgPCB0aGVuYWJsZVN0YXRlLnNoZWxsU3VzcGVuZENvdW50ZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJBbiB1bmtub3duIENvbXBvbmVudCBpcyBhbiBhc3luYyBDbGllbnQgQ29tcG9uZW50LiBPbmx5IFNlcnZlciBDb21wb25lbnRzIGNhbiBiZSBhc3luYyBhdCB0aGUgbW9tZW50LiBUaGlzIGVycm9yIGlzIG9mdGVuIGNhdXNlZCBieSBhY2NpZGVudGFsbHkgYWRkaW5nIGAndXNlIGNsaWVudCdgIHRvIGEgbW9kdWxlIHRoYXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgdGhlIHNlcnZlci5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlO1xuICAgICAgICAgICAgdGhlbmFibGVTdGF0ZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUudGhlbihcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGZ1bGZpbGxlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBmdWxmaWxsZWRUaGVuYWJsZSA9IHRoZW5hYmxlO1xuICAgICAgICAgICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnZhbHVlID0gZnVsZmlsbGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoXCJwZW5kaW5nXCIgPT09IHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgdmFyIHJlamVjdGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgICAgIHJlamVjdGVkVGhlbmFibGUuc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5yZWFzb24gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXRjaCAodGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgICAgIHJldHVybiB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICAgKCh0aGVuYWJsZVN0YXRlID0gdGhlbmFibGUucmVhc29uKSxcbiAgICAgICAgICAgICAgICBjaGVja0lmVXNlV3JhcHBlZEluQXN5bmNDYXRjaCh0aGVuYWJsZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB0aGVuYWJsZVN0YXRlKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdXNwZW5kZWRUaGVuYWJsZSA9IHRoZW5hYmxlO1xuICAgICAgICAgIG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWID0gITA7XG4gICAgICAgICAgdGhyb3cgU3VzcGVuc2VFeGNlcHRpb247XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1c3BlbmRlZFRoZW5hYmxlKCkge1xuICAgICAgaWYgKG51bGwgPT09IHN1c3BlbmRlZFRoZW5hYmxlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIGEgc3VzcGVuZGVkIHRoZW5hYmxlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgdmFyIHRoZW5hYmxlID0gc3VzcGVuZGVkVGhlbmFibGU7XG4gICAgICBzdXNwZW5kZWRUaGVuYWJsZSA9IG51bGw7XG4gICAgICBuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9ICExO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0lmVXNlV3JhcHBlZEluQXN5bmNDYXRjaChyZWplY3RlZFJlYXNvbikge1xuICAgICAgaWYgKFxuICAgICAgICByZWplY3RlZFJlYXNvbiA9PT0gU3VzcGVuc2VFeGNlcHRpb24gfHxcbiAgICAgICAgcmVqZWN0ZWRSZWFzb24gPT09IFN1c3BlbnNlQWN0aW9uRXhjZXB0aW9uXG4gICAgICApXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiSG9va3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFuIGFzeW5jIGNvbXBvbmVudC4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IGFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGZpYmVyKSB7XG4gICAgICBmaWJlci51cGRhdGVRdWV1ZSA9IHtcbiAgICAgICAgYmFzZVN0YXRlOiBmaWJlci5tZW1vaXplZFN0YXRlLFxuICAgICAgICBmaXJzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgICAgIGxhc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgICAgICBzaGFyZWQ6IHsgcGVuZGluZzogbnVsbCwgbGFuZXM6IDAsIGhpZGRlbkNhbGxiYWNrczogbnVsbCB9LFxuICAgICAgICBjYWxsYmFja3M6IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0ge1xuICAgICAgICAgIGJhc2VTdGF0ZTogY3VycmVudC5iYXNlU3RhdGUsXG4gICAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBjdXJyZW50LmZpcnN0QmFzZVVwZGF0ZSxcbiAgICAgICAgICBsYXN0QmFzZVVwZGF0ZTogY3VycmVudC5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgICAgICBzaGFyZWQ6IGN1cnJlbnQuc2hhcmVkLFxuICAgICAgICAgIGNhbGxiYWNrczogbnVsbFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlVXBkYXRlKGxhbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhbmU6IGxhbmUsXG4gICAgICAgIHRhZzogVXBkYXRlU3RhdGUsXG4gICAgICAgIHBheWxvYWQ6IG51bGwsXG4gICAgICAgIGNhbGxiYWNrOiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgICAgaWYgKG51bGwgPT09IHVwZGF0ZVF1ZXVlKSByZXR1cm4gbnVsbDtcbiAgICAgIHVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPT09IHVwZGF0ZVF1ZXVlICYmXG4gICAgICAgICFkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlXG4gICAgICApIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkFuIHVwZGF0ZSAoc2V0U3RhdGUsIHJlcGxhY2VTdGF0ZSwgb3IgZm9yY2VVcGRhdGUpIHdhcyBzY2hlZHVsZWQgZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCB3aXRoIHplcm8gc2lkZS1lZmZlY3RzLiBDb25zaWRlciB1c2luZyBjb21wb25lbnREaWRVcGRhdGUgb3IgYSBjYWxsYmFjay5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50OiAlc1wiLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9ICEwO1xuICAgICAgfVxuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoY29tcG9uZW50TmFtZSA9IHVwZGF0ZVF1ZXVlLnBlbmRpbmcpLFxuICAgICAgICAgIG51bGwgPT09IGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgID8gKHVwZGF0ZS5uZXh0ID0gdXBkYXRlKVxuICAgICAgICAgICAgOiAoKHVwZGF0ZS5uZXh0ID0gY29tcG9uZW50TmFtZS5uZXh0KSxcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUubmV4dCA9IHVwZGF0ZSkpLFxuICAgICAgICAgICh1cGRhdGVRdWV1ZS5wZW5kaW5nID0gdXBkYXRlKSxcbiAgICAgICAgICAodXBkYXRlID0gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihmaWJlcikpLFxuICAgICAgICAgIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBudWxsLCBsYW5lKSxcbiAgICAgICAgICB1cGRhdGVcbiAgICAgICAgKTtcbiAgICAgIGVucXVldWVVcGRhdGUkMShmaWJlciwgdXBkYXRlUXVldWUsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICByZXR1cm4gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgZmliZXIsIGxhbmUpIHtcbiAgICAgIGZpYmVyID0gZmliZXIudXBkYXRlUXVldWU7XG4gICAgICBpZiAobnVsbCAhPT0gZmliZXIgJiYgKChmaWJlciA9IGZpYmVyLnNoYXJlZCksIDAgIT09IChsYW5lICYgNDE5NDA0OCkpKSB7XG4gICAgICAgIHZhciBxdWV1ZUxhbmVzID0gZmliZXIubGFuZXM7XG4gICAgICAgIHF1ZXVlTGFuZXMgJj0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAgIGxhbmUgfD0gcXVldWVMYW5lcztcbiAgICAgICAgZmliZXIubGFuZXMgPSBsYW5lO1xuICAgICAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBjYXB0dXJlZFVwZGF0ZSkge1xuICAgICAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUsXG4gICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksIHF1ZXVlID09PSBjdXJyZW50KVxuICAgICAgKSB7XG4gICAgICAgIHZhciBuZXdGaXJzdCA9IG51bGwsXG4gICAgICAgICAgbmV3TGFzdCA9IG51bGw7XG4gICAgICAgIHF1ZXVlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuICAgICAgICBpZiAobnVsbCAhPT0gcXVldWUpIHtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgICAgIGxhbmU6IHF1ZXVlLmxhbmUsXG4gICAgICAgICAgICAgIHRhZzogcXVldWUudGFnLFxuICAgICAgICAgICAgICBwYXlsb2FkOiBxdWV1ZS5wYXlsb2FkLFxuICAgICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG51bGwgPT09IG5ld0xhc3RcbiAgICAgICAgICAgICAgPyAobmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2xvbmUpXG4gICAgICAgICAgICAgIDogKG5ld0xhc3QgPSBuZXdMYXN0Lm5leHQgPSBjbG9uZSk7XG4gICAgICAgICAgICBxdWV1ZSA9IHF1ZXVlLm5leHQ7XG4gICAgICAgICAgfSB3aGlsZSAobnVsbCAhPT0gcXVldWUpO1xuICAgICAgICAgIG51bGwgPT09IG5ld0xhc3RcbiAgICAgICAgICAgID8gKG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlKVxuICAgICAgICAgICAgOiAobmV3TGFzdCA9IG5ld0xhc3QubmV4dCA9IGNhcHR1cmVkVXBkYXRlKTtcbiAgICAgICAgfSBlbHNlIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICBxdWV1ZSA9IHtcbiAgICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnQuYmFzZVN0YXRlLFxuICAgICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogbmV3Rmlyc3QsXG4gICAgICAgICAgbGFzdEJhc2VVcGRhdGU6IG5ld0xhc3QsXG4gICAgICAgICAgc2hhcmVkOiBjdXJyZW50LnNoYXJlZCxcbiAgICAgICAgICBjYWxsYmFja3M6IGN1cnJlbnQuY2FsbGJhY2tzXG4gICAgICAgIH07XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdvcmtJblByb2dyZXNzID0gcXVldWUubGFzdEJhc2VVcGRhdGU7XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICA/IChxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZSlcbiAgICAgICAgOiAod29ya0luUHJvZ3Jlc3MubmV4dCA9IGNhcHR1cmVkVXBkYXRlKTtcbiAgICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKSB7XG4gICAgICBpZiAoZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbikge1xuICAgICAgICB2YXIgZW50YW5nbGVkQWN0aW9uVGhlbmFibGUgPSBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGU7XG4gICAgICAgIGlmIChudWxsICE9PSBlbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSkgdGhyb3cgZW50YW5nbGVkQWN0aW9uVGhlbmFibGU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NVcGRhdGVRdWV1ZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZSRqc2NvbXAkMCxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uID0gITE7XG4gICAgICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICAgIGhhc0ZvcmNlVXBkYXRlID0gITE7XG4gICAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQ7XG4gICAgICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgICBsYXN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlLFxuICAgICAgICBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcbiAgICAgIGlmIChudWxsICE9PSBwZW5kaW5nUXVldWUpIHtcbiAgICAgICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB2YXIgbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWUsXG4gICAgICAgICAgZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICAgICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7XG4gICAgICAgIG51bGwgPT09IGxhc3RCYXNlVXBkYXRlXG4gICAgICAgICAgPyAoZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlKVxuICAgICAgICAgIDogKGxhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGUpO1xuICAgICAgICBsYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICgoY3VycmVudCA9IGN1cnJlbnQudXBkYXRlUXVldWUpLFxuICAgICAgICAgIChwZW5kaW5nUXVldWUgPSBjdXJyZW50Lmxhc3RCYXNlVXBkYXRlKSxcbiAgICAgICAgICBwZW5kaW5nUXVldWUgIT09IGxhc3RCYXNlVXBkYXRlICYmXG4gICAgICAgICAgICAobnVsbCA9PT0gcGVuZGluZ1F1ZXVlXG4gICAgICAgICAgICAgID8gKGN1cnJlbnQuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlKVxuICAgICAgICAgICAgICA6IChwZW5kaW5nUXVldWUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZSksXG4gICAgICAgICAgICAoY3VycmVudC5sYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlKSkpO1xuICAgICAgfVxuICAgICAgaWYgKG51bGwgIT09IGZpcnN0QmFzZVVwZGF0ZSkge1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7XG4gICAgICAgIGxhc3RCYXNlVXBkYXRlID0gMDtcbiAgICAgICAgY3VycmVudCA9IGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlID0gbnVsbDtcbiAgICAgICAgcGVuZGluZ1F1ZXVlID0gZmlyc3RCYXNlVXBkYXRlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgdmFyIHVwZGF0ZUxhbmUgPSBwZW5kaW5nUXVldWUubGFuZSAmIC01MzY4NzA5MTMsXG4gICAgICAgICAgICBpc0hpZGRlblVwZGF0ZSA9IHVwZGF0ZUxhbmUgIT09IHBlbmRpbmdRdWV1ZS5sYW5lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgICAgICAgICAgOiAocmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgMCAhPT0gdXBkYXRlTGFuZSAmJlxuICAgICAgICAgICAgICB1cGRhdGVMYW5lID09PSBjdXJyZW50RW50YW5nbGVkTGFuZSAmJlxuICAgICAgICAgICAgICAoZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICEwKTtcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50Lm5leHQgPVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGxhbmU6IDAsXG4gICAgICAgICAgICAgICAgICB0YWc6IHBlbmRpbmdRdWV1ZS50YWcsXG4gICAgICAgICAgICAgICAgICBwYXlsb2FkOiBwZW5kaW5nUXVldWUucGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBudWxsLFxuICAgICAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICB1cGRhdGVMYW5lID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIHZhciBwYXJ0aWFsU3RhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgICAgICAgICAgIHZhciBuZXh0UHJvcHMgPSBwcm9wcyxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IGluc3RhbmNlJGpzY29tcCQwO1xuICAgICAgICAgICAgICBzd2l0Y2ggKHBhcnRpYWxTdGF0ZS50YWcpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFJlcGxhY2VTdGF0ZTpcbiAgICAgICAgICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IHBhcnRpYWxTdGF0ZS5wYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHBhcnRpYWxTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gITA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBwYXJ0aWFsU3RhdGUuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUxhbmUubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxTdGF0ZS5jYWxsKGluc3RhbmNlLCBuZXdTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gITE7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgbmV3U3RhdGUgPSBwYXJ0aWFsU3RhdGU7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgQ2FwdHVyZVVwZGF0ZTpcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUxhbmUuZmxhZ3MgPSAodXBkYXRlTGFuZS5mbGFncyAmIC02NTUzNykgfCAxMjg7XG4gICAgICAgICAgICAgICAgY2FzZSBVcGRhdGVTdGF0ZTpcbiAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZSA9IHBhcnRpYWxTdGF0ZS5wYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5leHRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gITA7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IG5leHRTdGF0ZS5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlTGFuZS5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmNhbGwoaW5zdGFuY2UsIG5ld1N0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSAhMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBwYXJ0aWFsU3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gcGFydGlhbFN0YXRlIHx8IHZvaWQgMCA9PT0gcGFydGlhbFN0YXRlKSBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgbmV3U3RhdGUgPSBhc3NpZ24oe30sIG5ld1N0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIEZvcmNlVXBkYXRlOlxuICAgICAgICAgICAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSAhMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlTGFuZSA9IHBlbmRpbmdRdWV1ZS5jYWxsYmFjaztcbiAgICAgICAgICAgIG51bGwgIT09IHVwZGF0ZUxhbmUgJiZcbiAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA2NCksXG4gICAgICAgICAgICAgIGlzSGlkZGVuVXBkYXRlICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyKSxcbiAgICAgICAgICAgICAgKGlzSGlkZGVuVXBkYXRlID0gcXVldWUuY2FsbGJhY2tzKSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gaXNIaWRkZW5VcGRhdGVcbiAgICAgICAgICAgICAgICA/IChxdWV1ZS5jYWxsYmFja3MgPSBbdXBkYXRlTGFuZV0pXG4gICAgICAgICAgICAgICAgOiBpc0hpZGRlblVwZGF0ZS5wdXNoKHVwZGF0ZUxhbmUpKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIChpc0hpZGRlblVwZGF0ZSA9IHtcbiAgICAgICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICAgICAgdGFnOiBwZW5kaW5nUXVldWUudGFnLFxuICAgICAgICAgICAgICBwYXlsb2FkOiBwZW5kaW5nUXVldWUucGF5bG9hZCxcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IHBlbmRpbmdRdWV1ZS5jYWxsYmFjayxcbiAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgICA/ICgoZmlyc3RQZW5kaW5nVXBkYXRlID0gY3VycmVudCA9IGlzSGlkZGVuVXBkYXRlKSxcbiAgICAgICAgICAgICAgICAgIChsYXN0UGVuZGluZ1VwZGF0ZSA9IG5ld1N0YXRlKSlcbiAgICAgICAgICAgICAgICA6IChjdXJyZW50ID0gY3VycmVudC5uZXh0ID0gaXNIaWRkZW5VcGRhdGUpLFxuICAgICAgICAgICAgICAobGFzdEJhc2VVcGRhdGUgfD0gdXBkYXRlTGFuZSk7XG4gICAgICAgICAgcGVuZGluZ1F1ZXVlID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHBlbmRpbmdRdWV1ZSlcbiAgICAgICAgICAgIGlmICgoKHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nKSwgbnVsbCA9PT0gcGVuZGluZ1F1ZXVlKSlcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIChpc0hpZGRlblVwZGF0ZSA9IHBlbmRpbmdRdWV1ZSksXG4gICAgICAgICAgICAgICAgKHBlbmRpbmdRdWV1ZSA9IGlzSGlkZGVuVXBkYXRlLm5leHQpLFxuICAgICAgICAgICAgICAgIChpc0hpZGRlblVwZGF0ZS5uZXh0ID0gbnVsbCksXG4gICAgICAgICAgICAgICAgKHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gaXNIaWRkZW5VcGRhdGUpLFxuICAgICAgICAgICAgICAgIChxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGwpO1xuICAgICAgICB9IHdoaWxlICgxKTtcbiAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJiAobGFzdFBlbmRpbmdVcGRhdGUgPSBuZXdTdGF0ZSk7XG4gICAgICAgIHF1ZXVlLmJhc2VTdGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gY3VycmVudDtcbiAgICAgICAgbnVsbCA9PT0gZmlyc3RCYXNlVXBkYXRlICYmIChxdWV1ZS5zaGFyZWQubGFuZXMgPSAwKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IGxhc3RCYXNlVXBkYXRlO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGxhc3RCYXNlVXBkYXRlO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICB9XG4gICAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjYWxsYmFjaylcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBhcyBjYWxsYmFjay4gRXhwZWN0ZWQgYSBmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogXCIgK1xuICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgKTtcbiAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhpZGRlbkNhbGxiYWNrcyh1cGRhdGVRdWV1ZSwgY29udGV4dCkge1xuICAgICAgdmFyIGhpZGRlbkNhbGxiYWNrcyA9IHVwZGF0ZVF1ZXVlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7XG4gICAgICBpZiAobnVsbCAhPT0gaGlkZGVuQ2FsbGJhY2tzKVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIHVwZGF0ZVF1ZXVlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MgPSBudWxsLCB1cGRhdGVRdWV1ZSA9IDA7XG4gICAgICAgICAgdXBkYXRlUXVldWUgPCBoaWRkZW5DYWxsYmFja3MubGVuZ3RoO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlKytcbiAgICAgICAgKVxuICAgICAgICAgIGNhbGxDYWxsYmFjayhoaWRkZW5DYWxsYmFja3NbdXBkYXRlUXVldWVdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Q2FsbGJhY2tzKHVwZGF0ZVF1ZXVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgY2FsbGJhY2tzID0gdXBkYXRlUXVldWUuY2FsbGJhY2tzO1xuICAgICAgaWYgKG51bGwgIT09IGNhbGxiYWNrcylcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5jYWxsYmFja3MgPSBudWxsLCB1cGRhdGVRdWV1ZSA9IDA7XG4gICAgICAgICAgdXBkYXRlUXVldWUgPCBjYWxsYmFja3MubGVuZ3RoO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlKytcbiAgICAgICAgKVxuICAgICAgICAgIGNhbGxDYWxsYmFjayhjYWxsYmFja3NbdXBkYXRlUXVldWVdLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaEhpZGRlbkNvbnRleHQoZmliZXIsIGNvbnRleHQpIHtcbiAgICAgIHZhciBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXMgPSBlbnRhbmdsZWRSZW5kZXJMYW5lcztcbiAgICAgIHB1c2gocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXMsIGZpYmVyKTtcbiAgICAgIHB1c2goY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvciwgY29udGV4dCwgZmliZXIpO1xuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXMgfCBjb250ZXh0LmJhc2VMYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayhmaWJlcikge1xuICAgICAgcHVzaChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIGVudGFuZ2xlZFJlbmRlckxhbmVzLCBmaWJlcik7XG4gICAgICBwdXNoKFxuICAgICAgICBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLFxuICAgICAgICBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLmN1cnJlbnQsXG4gICAgICAgIGZpYmVyXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BIaWRkZW5Db250ZXh0KGZpYmVyKSB7XG4gICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvci5jdXJyZW50O1xuICAgICAgcG9wKGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIHBvcChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRIb29rVHlwZXNEZXYoKSB7XG4gICAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcbiAgICAgIG51bGwgPT09IGhvb2tUeXBlc0RldlxuICAgICAgICA/IChob29rVHlwZXNEZXYgPSBbaG9va05hbWVdKVxuICAgICAgICA6IGhvb2tUeXBlc0Rldi5wdXNoKGhvb2tOYW1lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlSG9va1R5cGVzRGV2KCkge1xuICAgICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IGhvb2tUeXBlc0RldiAmJlxuICAgICAgICAoaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYrKyxcbiAgICAgICAgaG9va1R5cGVzRGV2W2hvb2tUeXBlc1VwZGF0ZUluZGV4RGV2XSAhPT0gaG9va05hbWUpXG4gICAgICApIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpICYmXG4gICAgICAgICAgKGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSksXG4gICAgICAgICAgbnVsbCAhPT0gaG9va1R5cGVzRGV2KVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3IgKHZhciB0YWJsZSA9IFwiXCIsIGkgPSAwOyBpIDw9IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2OyBpKyspIHtcbiAgICAgICAgICAgIHZhciBvbGRIb29rTmFtZSA9IGhvb2tUeXBlc0RldltpXSxcbiAgICAgICAgICAgICAgbmV3SG9va05hbWUgPVxuICAgICAgICAgICAgICAgIGkgPT09IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID8gaG9va05hbWUgOiBvbGRIb29rTmFtZTtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIG9sZEhvb2tOYW1lID0gaSArIDEgKyBcIi4gXCIgKyBvbGRIb29rTmFtZTtcbiAgICAgICAgICAgICAgMzAgPiBvbGRIb29rTmFtZS5sZW5ndGg7XG5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgb2xkSG9va05hbWUgKz0gXCIgXCI7XG4gICAgICAgICAgICBvbGRIb29rTmFtZSArPSBuZXdIb29rTmFtZSArIFwiXFxuXCI7XG4gICAgICAgICAgICB0YWJsZSArPSBvbGRIb29rTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3QgaGFzIGRldGVjdGVkIGEgY2hhbmdlIGluIHRoZSBvcmRlciBvZiBIb29rcyBjYWxsZWQgYnkgJXMuIFRoaXMgd2lsbCBsZWFkIHRvIGJ1Z3MgYW5kIGVycm9ycyBpZiBub3QgZml4ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHRoZSBSdWxlcyBvZiBIb29rczogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9ydWxlcy1vZi1ob29rc1xcblxcbiAgIFByZXZpb3VzIHJlbmRlciAgICAgICAgICAgIE5leHQgcmVuZGVyXFxuICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJXMgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5cXG5cIixcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICB0YWJsZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcykge1xuICAgICAgdm9pZCAwID09PSBkZXBzIHx8XG4gICAgICAgIG51bGwgPT09IGRlcHMgfHxcbiAgICAgICAgaXNBcnJheUltcGwoZGVwcykgfHxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIiVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgdGhhdCBpcyBub3QgYW4gYXJyYXkgKGluc3RlYWQsIHJlY2VpdmVkIGAlc2ApLiBXaGVuIHNwZWNpZmllZCwgdGhlIGZpbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkuXCIsXG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYsXG4gICAgICAgICAgdHlwZW9mIGRlcHNcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk9uVXNlRm9ybVN0YXRlSW5EZXYoKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY3VycmVudGx5UmVuZGVyaW5nRmliZXIpO1xuICAgICAgZGlkV2FybkFib3V0VXNlRm9ybVN0YXRlLmhhcyhjb21wb25lbnROYW1lKSB8fFxuICAgICAgICAoZGlkV2FybkFib3V0VXNlRm9ybVN0YXRlLmFkZChjb21wb25lbnROYW1lKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlJlYWN0RE9NLnVzZUZvcm1TdGF0ZSBoYXMgYmVlbiByZW5hbWVkIHRvIFJlYWN0LnVzZUFjdGlvblN0YXRlLiBQbGVhc2UgdXBkYXRlICVzIHRvIHVzZSBSZWFjdC51c2VBY3Rpb25TdGF0ZS5cIixcbiAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0aHJvd0ludmFsaWRIb29rRXJyb3IoKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpIHtcbiAgICAgIGlmIChpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcykgcmV0dXJuICExO1xuICAgICAgaWYgKG51bGwgPT09IHByZXZEZXBzKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgbm90IGR1cmluZyB0aGUgcHJldmlvdXMgcmVuZGVyLiBFdmVuIHRob3VnaCB0aGUgZmluYWwgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGl0cyB0eXBlIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLlwiLFxuICAgICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXZcbiAgICAgICAgICApLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgICBuZXh0RGVwcy5sZW5ndGggIT09IHByZXZEZXBzLmxlbmd0aCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgb3JkZXIgYW5kIHNpemUgb2YgdGhpcyBhcnJheSBtdXN0IHJlbWFpbiBjb25zdGFudC5cXG5cXG5QcmV2aW91czogJXNcXG5JbmNvbWluZzogJXNcIixcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldixcbiAgICAgICAgICBcIltcIiArIHByZXZEZXBzLmpvaW4oXCIsIFwiKSArIFwiXVwiLFxuICAgICAgICAgIFwiW1wiICsgbmV4dERlcHMuam9pbihcIiwgXCIpICsgXCJdXCJcbiAgICAgICAgKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkRlcHMubGVuZ3RoICYmIGkgPCBuZXh0RGVwcy5sZW5ndGg7IGkrKylcbiAgICAgICAgaWYgKCFvYmplY3RJcyhuZXh0RGVwc1tpXSwgcHJldkRlcHNbaV0pKSByZXR1cm4gITE7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIHByb3BzLFxuICAgICAgc2Vjb25kQXJnLFxuICAgICAgbmV4dFJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBob29rVHlwZXNEZXYgPSBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5fZGVidWdIb29rVHlwZXMgOiBudWxsO1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID1cbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBjdXJyZW50LnR5cGUgIT09IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICBpZiAoXG4gICAgICAgIFwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiID09PVxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDb21wb25lbnQpIHx8XG4gICAgICAgIFwiW29iamVjdCBBc3luY0dlbmVyYXRvckZ1bmN0aW9uXVwiID09PVxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDb21wb25lbnQpXG4gICAgICApXG4gICAgICAgIChuZXh0UmVuZGVyTGFuZXMgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyKSksXG4gICAgICAgICAgZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQuaGFzKG5leHRSZW5kZXJMYW5lcykgfHxcbiAgICAgICAgICAgIChkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudC5hZGQobmV4dFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMgaXMgYW4gYXN5bmMgQ2xpZW50IENvbXBvbmVudC4gT25seSBTZXJ2ZXIgQ29tcG9uZW50cyBjYW4gYmUgYXN5bmMgYXQgdGhlIG1vbWVudC4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IGFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCIsXG4gICAgICAgICAgICAgIG51bGwgPT09IG5leHRSZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgID8gXCJBbiB1bmtub3duIENvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOiBcIjxcIiArIG5leHRSZW5kZXJMYW5lcyArIFwiPlwiXG4gICAgICAgICAgICApKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSAwO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgPyBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWXG4gICAgICAgICAgOiBudWxsICE9PSBob29rVHlwZXNEZXZcbiAgICAgICAgICAgID8gSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVlxuICAgICAgICAgICAgOiBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViA9IG5leHRSZW5kZXJMYW5lcyA9XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkgIT09IE5vTW9kZTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IGNhbGxDb21wb25lbnRJbkRFVihDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpO1xuICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSAhMTtcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyAmJlxuICAgICAgICAoY2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3NBZ2FpbihcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgc2Vjb25kQXJnXG4gICAgICAgICkpO1xuICAgICAgaWYgKG5leHRSZW5kZXJMYW5lcykge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3NBZ2FpbihcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICBzZWNvbmRBcmdcbiAgICAgICAgICApO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluaXNoUmVuZGVyaW5nSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gaG9va1R5cGVzRGV2O1xuICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzXG4gICAgICAgID8gbnVsbCAhPT0gdGhlbmFibGVTdGF0ZSQxICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgICAgIGxhbmVzOiAwLFxuICAgICAgICAgICAgZmlyc3RDb250ZXh0OiBudWxsLFxuICAgICAgICAgICAgX2RlYnVnVGhlbmFibGVTdGF0ZTogdGhlbmFibGVTdGF0ZSQxXG4gICAgICAgICAgfSlcbiAgICAgICAgOiAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzLl9kZWJ1Z1RoZW5hYmxlU3RhdGUgPSB0aGVuYWJsZVN0YXRlJDEpO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgICAgIHZhciBkaWRSZW5kZXJUb29GZXdIb29rcyA9XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnRIb29rICYmIG51bGwgIT09IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICByZW5kZXJMYW5lcyA9IDA7XG4gICAgICBob29rVHlwZXNEZXYgPVxuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9XG4gICAgICAgIGN1cnJlbnRIb29rID1cbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPVxuICAgICAgICAgIG51bGw7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAoY3VycmVudC5mbGFncyAmIDY1MDExNzEyKSAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgNjUwMTE3MTIpICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnRlcm5hbCBSZWFjdCBlcnJvcjogRXhwZWN0ZWQgc3RhdGljIGZsYWcgd2FzIG1pc3NpbmcuIFBsZWFzZSBub3RpZnkgdGhlIFJlYWN0IHRlYW0uXCJcbiAgICAgICAgKTtcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSAhMTtcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwO1xuICAgICAgdGhlbmFibGVTdGF0ZSQxID0gbnVsbDtcbiAgICAgIGlmIChkaWRSZW5kZXJUb29GZXdIb29rcylcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJSZW5kZXJlZCBmZXdlciBob29rcyB0aGFuIGV4cGVjdGVkLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYW4gYWNjaWRlbnRhbCBlYXJseSByZXR1cm4gc3RhdGVtZW50LlwiXG4gICAgICAgICk7XG4gICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgfHxcbiAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5kZXBlbmRlbmNpZXMpLFxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgY2hlY2tJZkNvbnRleHRDaGFuZ2VkKGN1cnJlbnQpICYmXG4gICAgICAgICAgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCkpO1xuICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVZcbiAgICAgICAgPyAoKG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWID0gITEpLCAoY3VycmVudCA9ICEwKSlcbiAgICAgICAgOiAoY3VycmVudCA9ICExKTtcbiAgICAgIGN1cnJlbnQgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJVbmtub3duXCIpLFxuICAgICAgICBkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaC5oYXMod29ya0luUHJvZ3Jlc3MpIHx8XG4gICAgICAgICAgZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQuaGFzKHdvcmtJblByb2dyZXNzKSB8fFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaC5hZGQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImB1c2VgIHdhcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSB0cnkvY2F0Y2ggYmxvY2suIFRoaXMgaXMgbm90IGFsbG93ZWQgYW5kIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRvIGhhbmRsZSBlcnJvcnMgdHJpZ2dlcmVkIGJ5IGB1c2VgLCB3cmFwIHlvdXIgY29tcG9uZW50IGluIGEgZXJyb3IgYm91bmRhcnkuXCJcbiAgICAgICAgICApKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlcldpdGhIb29rc0FnYWluKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB2YXIgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuICAgICAgZG8ge1xuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgJiYgKHRoZW5hYmxlU3RhdGUkMSA9IG51bGwpO1xuICAgICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMDtcbiAgICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gITE7XG4gICAgICAgIGlmIChudW1iZXJPZlJlUmVuZGVycyA+PSBSRV9SRU5ERVJfTElNSVQpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlRvbyBtYW55IHJlLXJlbmRlcnMuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHJlbmRlcnMgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgbnVtYmVyT2ZSZVJlbmRlcnMgKz0gMTtcbiAgICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSAhMTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSkge1xuICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgIGNoaWxkcmVuLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgIGNoaWxkcmVuLmV2ZW50cyA9IG51bGw7XG4gICAgICAgICAgY2hpbGRyZW4uc3RvcmVzID0gbnVsbDtcbiAgICAgICAgICBudWxsICE9IGNoaWxkcmVuLm1lbW9DYWNoZSAmJiAoY2hpbGRyZW4ubWVtb0NhY2hlLmluZGV4ID0gMCk7XG4gICAgICAgIH1cbiAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcbiAgICAgICAgY2hpbGRyZW4gPSBjYWxsQ29tcG9uZW50SW5ERVYoQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKTtcbiAgICAgIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuICAgIGZ1bmN0aW9uIFRyYW5zaXRpb25Bd2FyZUhvc3RDb21wb25lbnQoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgsXG4gICAgICAgIG1heWJlVGhlbmFibGUgPSBkaXNwYXRjaGVyLnVzZVN0YXRlKClbMF07XG4gICAgICBtYXliZVRoZW5hYmxlID1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbWF5YmVUaGVuYWJsZS50aGVuXG4gICAgICAgICAgPyB1c2VUaGVuYWJsZShtYXliZVRoZW5hYmxlKVxuICAgICAgICAgIDogbWF5YmVUaGVuYWJsZTtcbiAgICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyLnVzZVN0YXRlKClbMF07XG4gICAgICAobnVsbCAhPT0gY3VycmVudEhvb2sgPyBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlIDogbnVsbCkgIT09XG4gICAgICAgIGRpc3BhdGNoZXIgJiYgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmZsYWdzIHw9IDEwMjQpO1xuICAgICAgcmV0dXJuIG1heWJlVGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRGlkUmVuZGVySWRIb29rKCkge1xuICAgICAgdmFyIGRpZFJlbmRlcklkSG9vayA9IDAgIT09IGxvY2FsSWRDb3VudGVyO1xuICAgICAgbG9jYWxJZENvdW50ZXIgPSAwO1xuICAgICAgcmV0dXJuIGRpZFJlbmRlcklkSG9vaztcbiAgICB9XG4gICAgZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPVxuICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlXG4gICAgICAgICAgPyB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIC00MDI2NTUyMzdcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzLmZsYWdzICYgLTIwNTM7XG4gICAgICBjdXJyZW50LmxhbmVzICY9IH5sYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRIb29rc09uVW53aW5kKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcztcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy5xdWV1ZTtcbiAgICAgICAgICBudWxsICE9PSBxdWV1ZSAmJiAocXVldWUucGVuZGluZyA9IG51bGwpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITE7XG4gICAgICB9XG4gICAgICByZW5kZXJMYW5lcyA9IDA7XG4gICAgICBob29rVHlwZXNEZXYgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICBjdXJyZW50SG9vayA9XG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID1cbiAgICAgICAgICBudWxsO1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9ICExO1xuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IGxvY2FsSWRDb3VudGVyID0gMDtcbiAgICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICAgICAgdmFyIGhvb2sgPSB7XG4gICAgICAgIG1lbW9pemVkU3RhdGU6IG51bGwsXG4gICAgICAgIGJhc2VTdGF0ZTogbnVsbCxcbiAgICAgICAgYmFzZVF1ZXVlOiBudWxsLFxuICAgICAgICBxdWV1ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgICA/IChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gaG9vaylcbiAgICAgICAgOiAod29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBob29rKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50SG9vaykge1xuICAgICAgICB2YXIgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICBuZXh0Q3VycmVudEhvb2sgPVxuICAgICAgICAgIG51bGwgIT09IG5leHRDdXJyZW50SG9vayA/IG5leHRDdXJyZW50SG9vay5tZW1vaXplZFN0YXRlIDogbnVsbDtcbiAgICAgIH0gZWxzZSBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICAgICAgdmFyIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICAgICAgICA/IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLm1lbW9pemVkU3RhdGVcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICAgICAgaWYgKG51bGwgIT09IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2spXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rKSxcbiAgICAgICAgICAoY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2spO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChudWxsID09PSBuZXh0Q3VycmVudEhvb2spIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIuYWx0ZXJuYXRlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiVXBkYXRlIGhvb2sgY2FsbGVkIG9uIGluaXRpYWwgcmVuZGVyLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgICAgICBuZXh0Q3VycmVudEhvb2sgPSB7XG4gICAgICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRIb29rLmJhc2VTdGF0ZSxcbiAgICAgICAgICBiYXNlUXVldWU6IGN1cnJlbnRIb29rLmJhc2VRdWV1ZSxcbiAgICAgICAgICBxdWV1ZTogY3VycmVudEhvb2sucXVldWUsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICAgICAgICA/IChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID1cbiAgICAgICAgICAgICAgbmV4dEN1cnJlbnRIb29rKVxuICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gbmV4dEN1cnJlbnRIb29rKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSB7XG4gICAgICByZXR1cm4geyBsYXN0RWZmZWN0OiBudWxsLCBldmVudHM6IG51bGwsIHN0b3JlczogbnVsbCwgbWVtb0NhY2hlOiBudWxsIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGVuYWJsZUluZGV4Q291bnRlciQxO1xuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIkMSArPSAxO1xuICAgICAgbnVsbCA9PT0gdGhlbmFibGVTdGF0ZSQxICYmICh0aGVuYWJsZVN0YXRlJDEgPSBjcmVhdGVUaGVuYWJsZVN0YXRlKCkpO1xuICAgICAgdGhlbmFibGUgPSB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlJDEsIHRoZW5hYmxlLCBpbmRleCk7XG4gICAgICBpbmRleCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyO1xuICAgICAgbnVsbCA9PT1cbiAgICAgICAgKG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgICAgID8gaW5kZXgubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3NIb29rLm5leHQpICYmXG4gICAgICAgICgoaW5kZXggPSBpbmRleC5hbHRlcm5hdGUpLFxuICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9XG4gICAgICAgICAgbnVsbCAhPT0gaW5kZXggJiYgbnVsbCAhPT0gaW5kZXgubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgPyBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWXG4gICAgICAgICAgICA6IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVikpO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1c2UodXNhYmxlKSB7XG4gICAgICBpZiAobnVsbCAhPT0gdXNhYmxlICYmIFwib2JqZWN0XCIgPT09IHR5cGVvZiB1c2FibGUpIHtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHVzYWJsZS50aGVuKSByZXR1cm4gdXNlVGhlbmFibGUodXNhYmxlKTtcbiAgICAgICAgaWYgKHVzYWJsZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKSByZXR1cm4gcmVhZENvbnRleHQodXNhYmxlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFwiQW4gdW5zdXBwb3J0ZWQgdHlwZSB3YXMgcGFzc2VkIHRvIHVzZSgpOiBcIiArIFN0cmluZyh1c2FibGUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNlTWVtb0NhY2hlKHNpemUpIHtcbiAgICAgIHZhciBtZW1vQ2FjaGUgPSBudWxsLFxuICAgICAgICB1cGRhdGVRdWV1ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgICAgbnVsbCAhPT0gdXBkYXRlUXVldWUgJiYgKG1lbW9DYWNoZSA9IHVwZGF0ZVF1ZXVlLm1lbW9DYWNoZSk7XG4gICAgICBpZiAobnVsbCA9PSBtZW1vQ2FjaGUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50Lm1lbW9DYWNoZSksXG4gICAgICAgICAgICBudWxsICE9IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgKG1lbW9DYWNoZSA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEubWFwKGZ1bmN0aW9uIChhcnJheSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaW5kZXg6IDBcbiAgICAgICAgICAgICAgfSkpKTtcbiAgICAgIH1cbiAgICAgIG51bGwgPT0gbWVtb0NhY2hlICYmIChtZW1vQ2FjaGUgPSB7IGRhdGE6IFtdLCBpbmRleDogMCB9KTtcbiAgICAgIG51bGwgPT09IHVwZGF0ZVF1ZXVlICYmXG4gICAgICAgICgodXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkpLFxuICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIudXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZSkpO1xuICAgICAgdXBkYXRlUXVldWUubWVtb0NhY2hlID0gbWVtb0NhY2hlO1xuICAgICAgdXBkYXRlUXVldWUgPSBtZW1vQ2FjaGUuZGF0YVttZW1vQ2FjaGUuaW5kZXhdO1xuICAgICAgaWYgKHZvaWQgMCA9PT0gdXBkYXRlUXVldWUgfHwgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdXBkYXRlUXVldWUgPSBtZW1vQ2FjaGUuZGF0YVttZW1vQ2FjaGUuaW5kZXhdID0gQXJyYXkoc2l6ZSksXG4gICAgICAgICAgICBjdXJyZW50ID0gMDtcbiAgICAgICAgICBjdXJyZW50IDwgc2l6ZTtcbiAgICAgICAgICBjdXJyZW50KytcbiAgICAgICAgKVxuICAgICAgICAgIHVwZGF0ZVF1ZXVlW2N1cnJlbnRdID0gUkVBQ1RfTUVNT19DQUNIRV9TRU5USU5FTDtcbiAgICAgIGVsc2VcbiAgICAgICAgdXBkYXRlUXVldWUubGVuZ3RoICE9PSBzaXplICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSBjb25zdGFudCBzaXplIGFyZ3VtZW50IGZvciBlYWNoIGludm9jYXRpb24gb2YgdXNlTWVtb0NhY2hlLiBUaGUgcHJldmlvdXMgY2FjaGUgd2FzIGFsbG9jYXRlZCB3aXRoIHNpemUgJXMgYnV0IHNpemUgJXMgd2FzIHJlcXVlc3RlZC5cIixcbiAgICAgICAgICAgIHVwZGF0ZVF1ZXVlLmxlbmd0aCxcbiAgICAgICAgICAgIHNpemVcbiAgICAgICAgICApO1xuICAgICAgbWVtb0NhY2hlLmluZGV4Kys7XG4gICAgICByZXR1cm4gdXBkYXRlUXVldWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJhc2ljU3RhdGVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICAgIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhY3Rpb24gPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gaW5pdCkge1xuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbml0KGluaXRpYWxBcmcpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaW5pdGlhbFN0YXRlID0gaW5pdGlhbEFyZztcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgICAgcmVkdWNlciA9IHtcbiAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgbGFuZXM6IDAsXG4gICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiByZWR1Y2VyLFxuICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICB9O1xuICAgICAgaG9vay5xdWV1ZSA9IHJlZHVjZXI7XG4gICAgICByZWR1Y2VyID0gcmVkdWNlci5kaXNwYXRjaCA9IGRpc3BhdGNoUmVkdWNlckFjdGlvbi5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgcmVkdWNlclxuICAgICAgKTtcbiAgICAgIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCByZWR1Y2VyXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlUmVkdWNlcihyZWR1Y2VyKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXJJbXBsKGhvb2ssIGN1cnJlbnRIb29rLCByZWR1Y2VyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlUmVkdWNlckltcGwoaG9vaywgY3VycmVudCwgcmVkdWNlcikge1xuICAgICAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcbiAgICAgIGlmIChudWxsID09PSBxdWV1ZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBZb3UgYXJlIGxpa2VseSBjYWxsaW5nIEhvb2tzIGNvbmRpdGlvbmFsbHksIHdoaWNoIGlzIG5vdCBhbGxvd2VkLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbClcIlxuICAgICAgICApO1xuICAgICAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gICAgICB2YXIgYmFzZVF1ZXVlID0gaG9vay5iYXNlUXVldWUsXG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gICAgICBpZiAobnVsbCAhPT0gcGVuZGluZ1F1ZXVlKSB7XG4gICAgICAgIGlmIChudWxsICE9PSBiYXNlUXVldWUpIHtcbiAgICAgICAgICB2YXIgYmFzZUZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgICAgICAgYmFzZVF1ZXVlLm5leHQgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgICAgICBwZW5kaW5nUXVldWUubmV4dCA9IGJhc2VGaXJzdDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50LmJhc2VRdWV1ZSAhPT0gYmFzZVF1ZXVlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW50ZXJuYWwgZXJyb3I6IEV4cGVjdGVkIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgdG8gYmUgYSBjbG9uZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQuYmFzZVF1ZXVlID0gYmFzZVF1ZXVlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHBlbmRpbmdRdWV1ZSA9IGhvb2suYmFzZVN0YXRlO1xuICAgICAgaWYgKG51bGwgPT09IGJhc2VRdWV1ZSkgaG9vay5tZW1vaXplZFN0YXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgPSBiYXNlUXVldWUubmV4dDtcbiAgICAgICAgdmFyIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gKGJhc2VGaXJzdCA9IG51bGwpLFxuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBudWxsLFxuICAgICAgICAgIHVwZGF0ZSA9IGN1cnJlbnQsXG4gICAgICAgICAgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICExO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZSAmIC01MzY4NzA5MTM7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdXBkYXRlTGFuZSAhPT0gdXBkYXRlLmxhbmVcbiAgICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgICAgICAgICA6IChyZW5kZXJMYW5lcyAmIHVwZGF0ZUxhbmUpID09PSB1cGRhdGVMYW5lXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgcmV2ZXJ0TGFuZSA9IHVwZGF0ZS5yZXZlcnRMYW5lO1xuICAgICAgICAgICAgaWYgKDAgPT09IHJldmVydExhbmUpXG4gICAgICAgICAgICAgIG51bGwgIT09IG5ld0Jhc2VRdWV1ZUxhc3QgJiZcbiAgICAgICAgICAgICAgICAobmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmU6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJldmVydExhbmU6IDAsXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaGFzRWFnZXJTdGF0ZTogdXBkYXRlLmhhc0VhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB1cGRhdGVMYW5lID09PSBjdXJyZW50RW50YW5nbGVkTGFuZSAmJlxuICAgICAgICAgICAgICAgICAgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMCk7XG4gICAgICAgICAgICBlbHNlIGlmICgocmVuZGVyTGFuZXMgJiByZXZlcnRMYW5lKSA9PT0gcmV2ZXJ0TGFuZSkge1xuICAgICAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgICAgICAgcmV2ZXJ0TGFuZSA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgICAgICAgICAoZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICEwKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgKHVwZGF0ZUxhbmUgPSB7XG4gICAgICAgICAgICAgICAgbGFuZTogMCxcbiAgICAgICAgICAgICAgICByZXZlcnRMYW5lOiB1cGRhdGUucmV2ZXJ0TGFuZSxcbiAgICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgaGFzRWFnZXJTdGF0ZTogdXBkYXRlLmhhc0VhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBudWxsID09PSBuZXdCYXNlUXVldWVMYXN0XG4gICAgICAgICAgICAgICAgICA/ICgobmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gdXBkYXRlTGFuZSksXG4gICAgICAgICAgICAgICAgICAgIChiYXNlRmlyc3QgPSBwZW5kaW5nUXVldWUpKVxuICAgICAgICAgICAgICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IHVwZGF0ZUxhbmUpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5sYW5lcyB8PSByZXZlcnRMYW5lKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IHJldmVydExhbmUpO1xuICAgICAgICAgICAgdXBkYXRlTGFuZSA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICAgICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViAmJlxuICAgICAgICAgICAgICByZWR1Y2VyKHBlbmRpbmdRdWV1ZSwgdXBkYXRlTGFuZSk7XG4gICAgICAgICAgICBwZW5kaW5nUXVldWUgPSB1cGRhdGUuaGFzRWFnZXJTdGF0ZVxuICAgICAgICAgICAgICA/IHVwZGF0ZS5lYWdlclN0YXRlXG4gICAgICAgICAgICAgIDogcmVkdWNlcihwZW5kaW5nUXVldWUsIHVwZGF0ZUxhbmUpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgKHJldmVydExhbmUgPSB7XG4gICAgICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgICAgIHJldmVydExhbmU6IHVwZGF0ZS5yZXZlcnRMYW5lLFxuICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG51bGwgPT09IG5ld0Jhc2VRdWV1ZUxhc3RcbiAgICAgICAgICAgICAgICA/ICgobmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gcmV2ZXJ0TGFuZSksXG4gICAgICAgICAgICAgICAgICAoYmFzZUZpcnN0ID0gcGVuZGluZ1F1ZXVlKSlcbiAgICAgICAgICAgICAgICA6IChuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gcmV2ZXJ0TGFuZSksXG4gICAgICAgICAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5sYW5lcyB8PSB1cGRhdGVMYW5lKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSB1cGRhdGVMYW5lKTtcbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAobnVsbCAhPT0gdXBkYXRlICYmIHVwZGF0ZSAhPT0gY3VycmVudCk7XG4gICAgICAgIG51bGwgPT09IG5ld0Jhc2VRdWV1ZUxhc3RcbiAgICAgICAgICA/IChiYXNlRmlyc3QgPSBwZW5kaW5nUXVldWUpXG4gICAgICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gbmV3QmFzZVF1ZXVlRmlyc3QpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIW9iamVjdElzKHBlbmRpbmdRdWV1ZSwgaG9vay5tZW1vaXplZFN0YXRlKSAmJlxuICAgICAgICAgICgoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSxcbiAgICAgICAgICBkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uICYmXG4gICAgICAgICAgICAoKHJlZHVjZXIgPSBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUpLCBudWxsICE9PSByZWR1Y2VyKSlcbiAgICAgICAgKVxuICAgICAgICAgIHRocm93IHJlZHVjZXI7XG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgaG9vay5iYXNlU3RhdGUgPSBiYXNlRmlyc3Q7XG4gICAgICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICAgICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgICB9XG4gICAgICBudWxsID09PSBiYXNlUXVldWUgJiYgKHF1ZXVlLmxhbmVzID0gMCk7XG4gICAgICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgcXVldWUuZGlzcGF0Y2hdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXJlbmRlclJlZHVjZXIocmVkdWNlcikge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICAgICAgcXVldWUgPSBob29rLnF1ZXVlO1xuICAgICAgaWYgKG51bGwgPT09IHF1ZXVlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFlvdSBhcmUgbGlrZWx5IGNhbGxpbmcgSG9va3MgY29uZGl0aW9uYWxseSwgd2hpY2ggaXMgbm90IGFsbG93ZWQuIChodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtaG9vay1jYWxsKVwiXG4gICAgICAgICk7XG4gICAgICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgICAgIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoLFxuICAgICAgICBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBxdWV1ZS5wZW5kaW5nLFxuICAgICAgICBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAgICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICAgIHZhciB1cGRhdGUgPSAobGFzdFJlbmRlclBoYXNlVXBkYXRlID0gbGFzdFJlbmRlclBoYXNlVXBkYXRlLm5leHQpO1xuICAgICAgICBkb1xuICAgICAgICAgIChuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIHVwZGF0ZS5hY3Rpb24pKSwgKHVwZGF0ZSA9IHVwZGF0ZS5uZXh0KTtcbiAgICAgICAgd2hpbGUgKHVwZGF0ZSAhPT0gbGFzdFJlbmRlclBoYXNlVXBkYXRlKTtcbiAgICAgICAgb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkgfHwgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCk7XG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICBudWxsID09PSBob29rLmJhc2VRdWV1ZSAmJiAoaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZSk7XG4gICAgICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLFxuICAgICAgICBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICBpZiAodm9pZCAwID09PSBnZXRTZXJ2ZXJTbmFwc2hvdClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiTWlzc2luZyBnZXRTZXJ2ZXJTbmFwc2hvdCwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIHNlcnZlci1yZW5kZXJlZCBjb250ZW50LiBXaWxsIHJldmVydCB0byBjbGllbnQgcmVuZGVyaW5nLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgdmFyIG5leHRTbmFwc2hvdCA9IGdldFNlcnZlclNuYXBzaG90KCk7XG4gICAgICAgIGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90IHx8XG4gICAgICAgICAgbmV4dFNuYXBzaG90ID09PSBnZXRTZXJ2ZXJTbmFwc2hvdCgpIHx8XG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSByZXN1bHQgb2YgZ2V0U2VydmVyU25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIChkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9ICEwKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0U25hcHNob3QgPSBnZXRTbmFwc2hvdCgpO1xuICAgICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCB8fFxuICAgICAgICAgICgoZ2V0U2VydmVyU25hcHNob3QgPSBnZXRTbmFwc2hvdCgpKSxcbiAgICAgICAgICBvYmplY3RJcyhuZXh0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB8fFxuICAgICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiVGhlIHJlc3VsdCBvZiBnZXRTbmFwc2hvdCBzaG91bGQgYmUgY2FjaGVkIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3BcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9ICEwKSkpO1xuICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICAwICE9PSAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiAxMjQpIHx8XG4gICAgICAgICAgcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIG5leHRTbmFwc2hvdCk7XG4gICAgICB9XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXh0U25hcHNob3Q7XG4gICAgICBnZXRTZXJ2ZXJTbmFwc2hvdCA9IHsgdmFsdWU6IG5leHRTbmFwc2hvdCwgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90IH07XG4gICAgICBob29rLnF1ZXVlID0gZ2V0U2VydmVyU25hcHNob3Q7XG4gICAgICBtb3VudEVmZmVjdChcbiAgICAgICAgc3Vic2NyaWJlVG9TdG9yZS5iaW5kKG51bGwsIGZpYmVyLCBnZXRTZXJ2ZXJTbmFwc2hvdCwgc3Vic2NyaWJlKSxcbiAgICAgICAgW3N1YnNjcmliZV1cbiAgICAgICk7XG4gICAgICBmaWJlci5mbGFncyB8PSAyMDQ4O1xuICAgICAgcHVzaFNpbXBsZUVmZmVjdChcbiAgICAgICAgSGFzRWZmZWN0IHwgUGFzc2l2ZSxcbiAgICAgICAgY3JlYXRlRWZmZWN0SW5zdGFuY2UoKSxcbiAgICAgICAgdXBkYXRlU3RvcmVJbnN0YW5jZS5iaW5kKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgZmliZXIsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3QsXG4gICAgICAgICAgbmV4dFNuYXBzaG90LFxuICAgICAgICAgIGdldFNuYXBzaG90XG4gICAgICAgICksXG4gICAgICAgIG51bGxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbmV4dFNuYXBzaG90O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgIHN1YnNjcmliZSxcbiAgICAgIGdldFNuYXBzaG90LFxuICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICApIHtcbiAgICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLFxuICAgICAgICBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgICAgIGlzSHlkcmF0aW5nJGpzY29tcCQwID0gaXNIeWRyYXRpbmc7XG4gICAgICBpZiAoaXNIeWRyYXRpbmckanNjb21wJDApIHtcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gZ2V0U2VydmVyU25hcHNob3QpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIk1pc3NpbmcgZ2V0U2VydmVyU25hcHNob3QsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gV2lsbCByZXZlcnQgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90ID0gZ2V0U2VydmVyU25hcHNob3QoKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICgoZ2V0U2VydmVyU25hcHNob3QgPSBnZXRTbmFwc2hvdCgpKSwgIWRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90KVxuICAgICAgKSB7XG4gICAgICAgIHZhciBjYWNoZWRTbmFwc2hvdCA9IGdldFNuYXBzaG90KCk7XG4gICAgICAgIG9iamVjdElzKGdldFNlcnZlclNuYXBzaG90LCBjYWNoZWRTbmFwc2hvdCkgfHxcbiAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHJlc3VsdCBvZiBnZXRTbmFwc2hvdCBzaG91bGQgYmUgY2FjaGVkIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3BcIlxuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90ID0gITApKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKGNhY2hlZFNuYXBzaG90ID0gIW9iamVjdElzKFxuICAgICAgICAgIChjdXJyZW50SG9vayB8fCBob29rKS5tZW1vaXplZFN0YXRlLFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICkpXG4gICAgICApXG4gICAgICAgIChob29rLm1lbW9pemVkU3RhdGUgPSBnZXRTZXJ2ZXJTbmFwc2hvdCksIChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgICAgaG9vayA9IGhvb2sucXVldWU7XG4gICAgICB2YXIgY3JlYXRlID0gc3Vic2NyaWJlVG9TdG9yZS5iaW5kKG51bGwsIGZpYmVyLCBob29rLCBzdWJzY3JpYmUpO1xuICAgICAgdXBkYXRlRWZmZWN0SW1wbCgyMDQ4LCBQYXNzaXZlLCBjcmVhdGUsIFtzdWJzY3JpYmVdKTtcbiAgICAgIGlmIChcbiAgICAgICAgaG9vay5nZXRTbmFwc2hvdCAhPT0gZ2V0U25hcHNob3QgfHxcbiAgICAgICAgY2FjaGVkU25hcHNob3QgfHxcbiAgICAgICAgKG51bGwgIT09IHdvcmtJblByb2dyZXNzSG9vayAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzSG9vay5tZW1vaXplZFN0YXRlLnRhZyAmIEhhc0VmZmVjdClcbiAgICAgICkge1xuICAgICAgICBmaWJlci5mbGFncyB8PSAyMDQ4O1xuICAgICAgICBwdXNoU2ltcGxlRWZmZWN0KFxuICAgICAgICAgIEhhc0VmZmVjdCB8IFBhc3NpdmUsXG4gICAgICAgICAgY3JlYXRlRWZmZWN0SW5zdGFuY2UoKSxcbiAgICAgICAgICB1cGRhdGVTdG9yZUluc3RhbmNlLmJpbmQoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBob29rLFxuICAgICAgICAgICAgZ2V0U2VydmVyU25hcHNob3QsXG4gICAgICAgICAgICBnZXRTbmFwc2hvdFxuICAgICAgICAgICksXG4gICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICBpc0h5ZHJhdGluZyRqc2NvbXAkMCB8fFxuICAgICAgICAgIDAgIT09IChyZW5kZXJMYW5lcyAmIDEyNCkgfHxcbiAgICAgICAgICBwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrKGZpYmVyLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldFNlcnZlclNuYXBzaG90O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrKGZpYmVyLCBnZXRTbmFwc2hvdCwgcmVuZGVyZWRTbmFwc2hvdCkge1xuICAgICAgZmliZXIuZmxhZ3MgfD0gMTYzODQ7XG4gICAgICBmaWJlciA9IHsgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90LCB2YWx1ZTogcmVuZGVyZWRTbmFwc2hvdCB9O1xuICAgICAgZ2V0U25hcHNob3QgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci51cGRhdGVRdWV1ZTtcbiAgICAgIG51bGwgPT09IGdldFNuYXBzaG90XG4gICAgICAgID8gKChnZXRTbmFwc2hvdCA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSksXG4gICAgICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLnVwZGF0ZVF1ZXVlID0gZ2V0U25hcHNob3QpLFxuICAgICAgICAgIChnZXRTbmFwc2hvdC5zdG9yZXMgPSBbZmliZXJdKSlcbiAgICAgICAgOiAoKHJlbmRlcmVkU25hcHNob3QgPSBnZXRTbmFwc2hvdC5zdG9yZXMpLFxuICAgICAgICAgIG51bGwgPT09IHJlbmRlcmVkU25hcHNob3RcbiAgICAgICAgICAgID8gKGdldFNuYXBzaG90LnN0b3JlcyA9IFtmaWJlcl0pXG4gICAgICAgICAgICA6IHJlbmRlcmVkU25hcHNob3QucHVzaChmaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTdG9yZUluc3RhbmNlKGZpYmVyLCBpbnN0LCBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90KSB7XG4gICAgICBpbnN0LnZhbHVlID0gbmV4dFNuYXBzaG90O1xuICAgICAgaW5zdC5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdWJzY3JpYmVUb1N0b3JlKGZpYmVyLCBpbnN0LCBzdWJzY3JpYmUpIHtcbiAgICAgIHJldHVybiBzdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpICYmIGZvcmNlU3RvcmVSZXJlbmRlcihmaWJlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSB7XG4gICAgICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSBpbnN0LmdldFNuYXBzaG90O1xuICAgICAgaW5zdCA9IGluc3QudmFsdWU7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICAgICAgcmV0dXJuICFvYmplY3RJcyhpbnN0LCBuZXh0VmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpIHtcbiAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IHJvb3QgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCAyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRTdGF0ZUltcGwoaW5pdGlhbFN0YXRlKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIHZhciBpbml0aWFsU3RhdGVJbml0aWFsaXplciA9IGluaXRpYWxTdGF0ZTtcbiAgICAgICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIoKTtcbiAgICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbml0aWFsU3RhdGVJbml0aWFsaXplcigpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICAgIGhvb2sucXVldWUgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiAwLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgIH07XG4gICAgICByZXR1cm4gaG9vaztcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgICAgIGluaXRpYWxTdGF0ZSA9IG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSk7XG4gICAgICB2YXIgcXVldWUgPSBpbml0aWFsU3RhdGUucXVldWUsXG4gICAgICAgIGRpc3BhdGNoID0gZGlzcGF0Y2hTZXRTdGF0ZS5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLCBxdWV1ZSk7XG4gICAgICBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgICAgcmV0dXJuIFtpbml0aWFsU3RhdGUubWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudE9wdGltaXN0aWMocGFzc3Rocm91Z2gpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gcGFzc3Rocm91Z2g7XG4gICAgICB2YXIgcXVldWUgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiAwLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IG51bGxcbiAgICAgIH07XG4gICAgICBob29rLnF1ZXVlID0gcXVldWU7XG4gICAgICBob29rID0gZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgICEwLFxuICAgICAgICBxdWV1ZVxuICAgICAgKTtcbiAgICAgIHF1ZXVlLmRpc3BhdGNoID0gaG9vaztcbiAgICAgIHJldHVybiBbcGFzc3Rocm91Z2gsIGhvb2tdO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wdGltaXN0aWNJbXBsKGhvb2ssIGN1cnJlbnRIb29rLCBwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9wdGltaXN0aWNJbXBsKGhvb2ssIGN1cnJlbnQsIHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXJJbXBsKFxuICAgICAgICBob29rLFxuICAgICAgICBjdXJyZW50SG9vayxcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVkdWNlciA/IHJlZHVjZXIgOiBiYXNpY1N0YXRlUmVkdWNlclxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVyZW5kZXJPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRIb29rKVxuICAgICAgICByZXR1cm4gdXBkYXRlT3B0aW1pc3RpY0ltcGwoaG9vaywgY3VycmVudEhvb2ssIHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gcGFzc3Rocm91Z2g7XG4gICAgICByZXR1cm4gW3Bhc3N0aHJvdWdoLCBob29rLnF1ZXVlLmRpc3BhdGNoXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb25TdGF0ZShcbiAgICAgIGZpYmVyLFxuICAgICAgYWN0aW9uUXVldWUsXG4gICAgICBzZXRQZW5kaW5nU3RhdGUsXG4gICAgICBzZXRTdGF0ZSxcbiAgICAgIHBheWxvYWRcbiAgICApIHtcbiAgICAgIGlmIChpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGZvcm0gc3RhdGUgd2hpbGUgcmVuZGVyaW5nLlwiKTtcbiAgICAgIGZpYmVyID0gYWN0aW9uUXVldWUuYWN0aW9uO1xuICAgICAgaWYgKG51bGwgIT09IGZpYmVyKSB7XG4gICAgICAgIHZhciBhY3Rpb25Ob2RlID0ge1xuICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgYWN0aW9uOiBmaWJlcixcbiAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgIGlzVHJhbnNpdGlvbjogITAsXG4gICAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICByZWFzb246IG51bGwsXG4gICAgICAgICAgbGlzdGVuZXJzOiBbXSxcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGFjdGlvbk5vZGUubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVFxuICAgICAgICAgID8gc2V0UGVuZGluZ1N0YXRlKCEwKVxuICAgICAgICAgIDogKGFjdGlvbk5vZGUuaXNUcmFuc2l0aW9uID0gITEpO1xuICAgICAgICBzZXRTdGF0ZShhY3Rpb25Ob2RlKTtcbiAgICAgICAgc2V0UGVuZGluZ1N0YXRlID0gYWN0aW9uUXVldWUucGVuZGluZztcbiAgICAgICAgbnVsbCA9PT0gc2V0UGVuZGluZ1N0YXRlXG4gICAgICAgICAgPyAoKGFjdGlvbk5vZGUubmV4dCA9IGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBhY3Rpb25Ob2RlKSxcbiAgICAgICAgICAgIHJ1bkFjdGlvblN0YXRlQWN0aW9uKGFjdGlvblF1ZXVlLCBhY3Rpb25Ob2RlKSlcbiAgICAgICAgICA6ICgoYWN0aW9uTm9kZS5uZXh0ID0gc2V0UGVuZGluZ1N0YXRlLm5leHQpLFxuICAgICAgICAgICAgKGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBzZXRQZW5kaW5nU3RhdGUubmV4dCA9IGFjdGlvbk5vZGUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcnVuQWN0aW9uU3RhdGVBY3Rpb24oYWN0aW9uUXVldWUsIG5vZGUpIHtcbiAgICAgIHZhciBhY3Rpb24gPSBub2RlLmFjdGlvbixcbiAgICAgICAgcGF5bG9hZCA9IG5vZGUucGF5bG9hZCxcbiAgICAgICAgcHJldlN0YXRlID0gYWN0aW9uUXVldWUuc3RhdGU7XG4gICAgICBpZiAobm9kZS5pc1RyYW5zaXRpb24pIHtcbiAgICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbiA9IHt9O1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gY3VycmVudFRyYW5zaXRpb247XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQuX3VwZGF0ZWRGaWJlcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIHJldHVyblZhbHVlID0gYWN0aW9uKHByZXZTdGF0ZSwgcGF5bG9hZCksXG4gICAgICAgICAgICBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlM7XG4gICAgICAgICAgbnVsbCAhPT0gb25TdGFydFRyYW5zaXRpb25GaW5pc2ggJiZcbiAgICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgaGFuZGxlQWN0aW9uUmV0dXJuVmFsdWUoYWN0aW9uUXVldWUsIG5vZGUsIHJldHVyblZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBvbkFjdGlvbkVycm9yKGFjdGlvblF1ZXVlLCBub2RlLCBlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbiksXG4gICAgICAgICAgICBudWxsID09PSBwcmV2VHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyAmJlxuICAgICAgICAgICAgICAoKGFjdGlvblF1ZXVlID0gY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuc2l6ZSksXG4gICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmNsZWFyKCksXG4gICAgICAgICAgICAgIDEwIDwgYWN0aW9uUXVldWUgJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICBcIkRldGVjdGVkIGEgbGFyZ2UgbnVtYmVyIG9mIHVwZGF0ZXMgaW5zaWRlIHN0YXJ0VHJhbnNpdGlvbi4gSWYgdGhpcyBpcyBkdWUgdG8gYSBzdWJzY3JpcHRpb24gcGxlYXNlIHJlLXdyaXRlIGl0IHRvIHVzZSBSZWFjdCBwcm92aWRlZCBob29rcy4gT3RoZXJ3aXNlIGNvbmN1cnJlbnQgbW9kZSBndWFyYW50ZWVzIGFyZSBvZmYgdGhlIHRhYmxlLlwiXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIChjdXJyZW50VHJhbnNpdGlvbiA9IGFjdGlvbihwcmV2U3RhdGUsIHBheWxvYWQpKSxcbiAgICAgICAgICAgIGhhbmRsZUFjdGlvblJldHVyblZhbHVlKGFjdGlvblF1ZXVlLCBub2RlLCBjdXJyZW50VHJhbnNpdGlvbik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yJDQpIHtcbiAgICAgICAgICBvbkFjdGlvbkVycm9yKGFjdGlvblF1ZXVlLCBub2RlLCBlcnJvciQ0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVBY3Rpb25SZXR1cm5WYWx1ZShhY3Rpb25RdWV1ZSwgbm9kZSwgcmV0dXJuVmFsdWUpIHtcbiAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlLnRoZW5cbiAgICAgICAgPyAocmV0dXJuVmFsdWUudGhlbihcbiAgICAgICAgICAgIGZ1bmN0aW9uIChuZXh0U3RhdGUpIHtcbiAgICAgICAgICAgICAgb25BY3Rpb25TdWNjZXNzKGFjdGlvblF1ZXVlLCBub2RlLCBuZXh0U3RhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gb25BY3Rpb25FcnJvcihhY3Rpb25RdWV1ZSwgbm9kZSwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICAgICAgbm9kZS5pc1RyYW5zaXRpb24gfHxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiQW4gYXN5bmMgZnVuY3Rpb24gd2l0aCB1c2VBY3Rpb25TdGF0ZSB3YXMgY2FsbGVkIG91dHNpZGUgb2YgYSB0cmFuc2l0aW9uLiBUaGlzIGlzIGxpa2VseSBub3Qgd2hhdCB5b3UgaW50ZW5kZWQgKGZvciBleGFtcGxlLCBpc1BlbmRpbmcgd2lsbCBub3QgdXBkYXRlIGNvcnJlY3RseSkuIEVpdGhlciBjYWxsIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBpbnNpZGUgc3RhcnRUcmFuc2l0aW9uLCBvciBwYXNzIGl0IHRvIGFuIGBhY3Rpb25gIG9yIGBmb3JtQWN0aW9uYCBwcm9wLlwiXG4gICAgICAgICAgICApKVxuICAgICAgICA6IG9uQWN0aW9uU3VjY2VzcyhhY3Rpb25RdWV1ZSwgbm9kZSwgcmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbkFjdGlvblN1Y2Nlc3MoYWN0aW9uUXVldWUsIGFjdGlvbk5vZGUsIG5leHRTdGF0ZSkge1xuICAgICAgYWN0aW9uTm9kZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgYWN0aW9uTm9kZS52YWx1ZSA9IG5leHRTdGF0ZTtcbiAgICAgIG5vdGlmeUFjdGlvbkxpc3RlbmVycyhhY3Rpb25Ob2RlKTtcbiAgICAgIGFjdGlvblF1ZXVlLnN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgYWN0aW9uTm9kZSA9IGFjdGlvblF1ZXVlLnBlbmRpbmc7XG4gICAgICBudWxsICE9PSBhY3Rpb25Ob2RlICYmXG4gICAgICAgICgobmV4dFN0YXRlID0gYWN0aW9uTm9kZS5uZXh0KSxcbiAgICAgICAgbmV4dFN0YXRlID09PSBhY3Rpb25Ob2RlXG4gICAgICAgICAgPyAoYWN0aW9uUXVldWUucGVuZGluZyA9IG51bGwpXG4gICAgICAgICAgOiAoKG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5uZXh0KSxcbiAgICAgICAgICAgIChhY3Rpb25Ob2RlLm5leHQgPSBuZXh0U3RhdGUpLFxuICAgICAgICAgICAgcnVuQWN0aW9uU3RhdGVBY3Rpb24oYWN0aW9uUXVldWUsIG5leHRTdGF0ZSkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25BY3Rpb25FcnJvcihhY3Rpb25RdWV1ZSwgYWN0aW9uTm9kZSwgZXJyb3IpIHtcbiAgICAgIHZhciBsYXN0ID0gYWN0aW9uUXVldWUucGVuZGluZztcbiAgICAgIGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgaWYgKG51bGwgIT09IGxhc3QpIHtcbiAgICAgICAgbGFzdCA9IGxhc3QubmV4dDtcbiAgICAgICAgZG9cbiAgICAgICAgICAoYWN0aW9uTm9kZS5zdGF0dXMgPSBcInJlamVjdGVkXCIpLFxuICAgICAgICAgICAgKGFjdGlvbk5vZGUucmVhc29uID0gZXJyb3IpLFxuICAgICAgICAgICAgbm90aWZ5QWN0aW9uTGlzdGVuZXJzKGFjdGlvbk5vZGUpLFxuICAgICAgICAgICAgKGFjdGlvbk5vZGUgPSBhY3Rpb25Ob2RlLm5leHQpO1xuICAgICAgICB3aGlsZSAoYWN0aW9uTm9kZSAhPT0gbGFzdCk7XG4gICAgICB9XG4gICAgICBhY3Rpb25RdWV1ZS5hY3Rpb24gPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub3RpZnlBY3Rpb25MaXN0ZW5lcnMoYWN0aW9uTm9kZSkge1xuICAgICAgYWN0aW9uTm9kZSA9IGFjdGlvbk5vZGUubGlzdGVuZXJzO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3Rpb25Ob2RlLmxlbmd0aDsgaSsrKSAoMCwgYWN0aW9uTm9kZVtpXSkoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWN0aW9uU3RhdGVSZWR1Y2VyKG9sZFN0YXRlLCBuZXdTdGF0ZSkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlUHJvcCkge1xuICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgIHZhciBzc3JGb3JtU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc1Jvb3QuZm9ybVN0YXRlO1xuICAgICAgICBpZiAobnVsbCAhPT0gc3NyRm9ybVN0YXRlKSB7XG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgdmFyIGlzTWF0Y2hpbmcgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcjtcbiAgICAgICAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICAgICAgICBpZiAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXJJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5Sb290T3JTaW5nbGV0b24gPSByb290T3JTaW5nbGV0b25Db250ZXh0O1xuICAgICAgICAgICAgICAgICAgICA4ICE9PSBtYXJrZXJJbnN0YW5jZS5ub2RlVHlwZTtcblxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlLm5leHRTaWJsaW5nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBtYXJrZXJJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpblJvb3RPclNpbmdsZXRvbiA9IG1hcmtlckluc3RhbmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZSA9XG4gICAgICAgICAgICAgICAgICAgIGluUm9vdE9yU2luZ2xldG9uID09PSBGT1JNX1NUQVRFX0lTX01BVENISU5HIHx8XG4gICAgICAgICAgICAgICAgICAgIGluUm9vdE9yU2luZ2xldG9uID09PSBGT1JNX1NUQVRFX0lTX05PVF9NQVRDSElOR1xuICAgICAgICAgICAgICAgICAgICAgID8gbWFya2VySW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtYXJrZXJJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZS5uZXh0U2libGluZ1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlzTWF0Y2hpbmcgPSBtYXJrZXJJbnN0YW5jZS5kYXRhID09PSBGT1JNX1NUQVRFX0lTX01BVENISU5HO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKGlzTWF0Y2hpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNNYXRjaGluZyA9ICExO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpc01hdGNoaW5nICYmIChpbml0aWFsU3RhdGVQcm9wID0gc3NyRm9ybVN0YXRlWzBdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc3NyRm9ybVN0YXRlID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHNzckZvcm1TdGF0ZS5tZW1vaXplZFN0YXRlID0gc3NyRm9ybVN0YXRlLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZVByb3A7XG4gICAgICBpc01hdGNoaW5nID0ge1xuICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICBsYW5lczogMCxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGFjdGlvblN0YXRlUmVkdWNlcixcbiAgICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVByb3BcbiAgICAgIH07XG4gICAgICBzc3JGb3JtU3RhdGUucXVldWUgPSBpc01hdGNoaW5nO1xuICAgICAgc3NyRm9ybVN0YXRlID0gZGlzcGF0Y2hTZXRTdGF0ZS5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgaXNNYXRjaGluZ1xuICAgICAgKTtcbiAgICAgIGlzTWF0Y2hpbmcuZGlzcGF0Y2ggPSBzc3JGb3JtU3RhdGU7XG4gICAgICBpc01hdGNoaW5nID0gbW91bnRTdGF0ZUltcGwoITEpO1xuICAgICAgaW5Sb290T3JTaW5nbGV0b24gPSBkaXNwYXRjaE9wdGltaXN0aWNTZXRTdGF0ZS5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgITEsXG4gICAgICAgIGlzTWF0Y2hpbmcucXVldWVcbiAgICAgICk7XG4gICAgICBpc01hdGNoaW5nID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIG1hcmtlckluc3RhbmNlID0ge1xuICAgICAgICBzdGF0ZTogaW5pdGlhbFN0YXRlUHJvcCxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBwZW5kaW5nOiBudWxsXG4gICAgICB9O1xuICAgICAgaXNNYXRjaGluZy5xdWV1ZSA9IG1hcmtlckluc3RhbmNlO1xuICAgICAgc3NyRm9ybVN0YXRlID0gZGlzcGF0Y2hBY3Rpb25TdGF0ZS5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgbWFya2VySW5zdGFuY2UsXG4gICAgICAgIGluUm9vdE9yU2luZ2xldG9uLFxuICAgICAgICBzc3JGb3JtU3RhdGVcbiAgICAgICk7XG4gICAgICBtYXJrZXJJbnN0YW5jZS5kaXNwYXRjaCA9IHNzckZvcm1TdGF0ZTtcbiAgICAgIGlzTWF0Y2hpbmcubWVtb2l6ZWRTdGF0ZSA9IGFjdGlvbjtcbiAgICAgIHJldHVybiBbaW5pdGlhbFN0YXRlUHJvcCwgc3NyRm9ybVN0YXRlLCAhMV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUFjdGlvblN0YXRlKGFjdGlvbikge1xuICAgICAgdmFyIHN0YXRlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUFjdGlvblN0YXRlSW1wbChzdGF0ZUhvb2ssIGN1cnJlbnRIb29rLCBhY3Rpb24pO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVBY3Rpb25TdGF0ZUltcGwoc3RhdGVIb29rLCBjdXJyZW50U3RhdGVIb29rLCBhY3Rpb24pIHtcbiAgICAgIGN1cnJlbnRTdGF0ZUhvb2sgPSB1cGRhdGVSZWR1Y2VySW1wbChcbiAgICAgICAgc3RhdGVIb29rLFxuICAgICAgICBjdXJyZW50U3RhdGVIb29rLFxuICAgICAgICBhY3Rpb25TdGF0ZVJlZHVjZXJcbiAgICAgIClbMF07XG4gICAgICBzdGF0ZUhvb2sgPSB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKVswXTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGN1cnJlbnRTdGF0ZUhvb2sgJiZcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudFN0YXRlSG9vayAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjdXJyZW50U3RhdGVIb29rLnRoZW5cbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgc3RhdGUgPSB1c2VUaGVuYWJsZShjdXJyZW50U3RhdGVIb29rKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGlmICh4ID09PSBTdXNwZW5zZUV4Y2VwdGlvbikgdGhyb3cgU3VzcGVuc2VBY3Rpb25FeGNlcHRpb247XG4gICAgICAgICAgdGhyb3cgeDtcbiAgICAgICAgfVxuICAgICAgZWxzZSBzdGF0ZSA9IGN1cnJlbnRTdGF0ZUhvb2s7XG4gICAgICBjdXJyZW50U3RhdGVIb29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgYWN0aW9uUXVldWUgPSBjdXJyZW50U3RhdGVIb29rLnF1ZXVlLFxuICAgICAgICBkaXNwYXRjaCA9IGFjdGlvblF1ZXVlLmRpc3BhdGNoO1xuICAgICAgYWN0aW9uICE9PSBjdXJyZW50U3RhdGVIb29rLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5mbGFncyB8PSAyMDQ4KSxcbiAgICAgICAgcHVzaFNpbXBsZUVmZmVjdChcbiAgICAgICAgICBIYXNFZmZlY3QgfCBQYXNzaXZlLFxuICAgICAgICAgIGNyZWF0ZUVmZmVjdEluc3RhbmNlKCksXG4gICAgICAgICAgYWN0aW9uU3RhdGVBY3Rpb25FZmZlY3QuYmluZChudWxsLCBhY3Rpb25RdWV1ZSwgYWN0aW9uKSxcbiAgICAgICAgICBudWxsXG4gICAgICAgICkpO1xuICAgICAgcmV0dXJuIFtzdGF0ZSwgZGlzcGF0Y2gsIHN0YXRlSG9va107XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjdGlvblN0YXRlQWN0aW9uRWZmZWN0KGFjdGlvblF1ZXVlLCBhY3Rpb24pIHtcbiAgICAgIGFjdGlvblF1ZXVlLmFjdGlvbiA9IGFjdGlvbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVyZW5kZXJBY3Rpb25TdGF0ZShhY3Rpb24pIHtcbiAgICAgIHZhciBzdGF0ZUhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICAgICAgY3VycmVudFN0YXRlSG9vayA9IGN1cnJlbnRIb29rO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRTdGF0ZUhvb2spXG4gICAgICAgIHJldHVybiB1cGRhdGVBY3Rpb25TdGF0ZUltcGwoc3RhdGVIb29rLCBjdXJyZW50U3RhdGVIb29rLCBhY3Rpb24pO1xuICAgICAgdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBzdGF0ZUhvb2sgPSBzdGF0ZUhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZUhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBkaXNwYXRjaCA9IGN1cnJlbnRTdGF0ZUhvb2sucXVldWUuZGlzcGF0Y2g7XG4gICAgICBjdXJyZW50U3RhdGVIb29rLm1lbW9pemVkU3RhdGUgPSBhY3Rpb247XG4gICAgICByZXR1cm4gW3N0YXRlSG9vaywgZGlzcGF0Y2gsICExXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaFNpbXBsZUVmZmVjdCh0YWcsIGluc3QsIGNyZWF0ZSwgY3JlYXRlRGVwcykge1xuICAgICAgdGFnID0ge1xuICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgY3JlYXRlOiBjcmVhdGUsXG4gICAgICAgIGRlcHM6IGNyZWF0ZURlcHMsXG4gICAgICAgIGluc3Q6IGluc3QsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpbnN0ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIudXBkYXRlUXVldWU7XG4gICAgICBudWxsID09PSBpbnN0ICYmXG4gICAgICAgICgoaW5zdCA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSksXG4gICAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci51cGRhdGVRdWV1ZSA9IGluc3QpKTtcbiAgICAgIGNyZWF0ZSA9IGluc3QubGFzdEVmZmVjdDtcbiAgICAgIG51bGwgPT09IGNyZWF0ZVxuICAgICAgICA/IChpbnN0Lmxhc3RFZmZlY3QgPSB0YWcubmV4dCA9IHRhZylcbiAgICAgICAgOiAoKGNyZWF0ZURlcHMgPSBjcmVhdGUubmV4dCksXG4gICAgICAgICAgKGNyZWF0ZS5uZXh0ID0gdGFnKSxcbiAgICAgICAgICAodGFnLm5leHQgPSBjcmVhdGVEZXBzKSxcbiAgICAgICAgICAoaW5zdC5sYXN0RWZmZWN0ID0gdGFnKSk7XG4gICAgICByZXR1cm4gdGFnO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVFZmZlY3RJbnN0YW5jZSgpIHtcbiAgICAgIHJldHVybiB7IGRlc3Ryb3k6IHZvaWQgMCwgcmVzb3VyY2U6IHZvaWQgMCB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFJlZihpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGluaXRpYWxWYWx1ZSA9IHsgY3VycmVudDogaW5pdGlhbFZhbHVlIH07XG4gICAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IGluaXRpYWxWYWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50RWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgY3JlYXRlRGVwcykge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgY3JlYXRlRGVwcyA9IHZvaWQgMCA9PT0gY3JlYXRlRGVwcyA/IG51bGwgOiBjcmVhdGVEZXBzO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hTaW1wbGVFZmZlY3QoXG4gICAgICAgIEhhc0VmZmVjdCB8IGhvb2tGbGFncyxcbiAgICAgICAgY3JlYXRlRWZmZWN0SW5zdGFuY2UoKSxcbiAgICAgICAgY3JlYXRlLFxuICAgICAgICBjcmVhdGVEZXBzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgZGVwcyA9IHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzO1xuICAgICAgdmFyIGluc3QgPSBob29rLm1lbW9pemVkU3RhdGUuaW5zdDtcbiAgICAgIG51bGwgIT09IGN1cnJlbnRIb29rICYmXG4gICAgICBudWxsICE9PSBkZXBzICYmXG4gICAgICBhcmVIb29rSW5wdXRzRXF1YWwoZGVwcywgY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZS5kZXBzKVxuICAgICAgICA/IChob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoU2ltcGxlRWZmZWN0KGhvb2tGbGFncywgaW5zdCwgY3JlYXRlLCBkZXBzKSlcbiAgICAgICAgOiAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmZsYWdzIHw9IGZpYmVyRmxhZ3MpLFxuICAgICAgICAgIChob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoU2ltcGxlRWZmZWN0KFxuICAgICAgICAgICAgSGFzRWZmZWN0IHwgaG9va0ZsYWdzLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNyZWF0ZSxcbiAgICAgICAgICAgIGRlcHNcbiAgICAgICAgICApKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgY3JlYXRlRGVwcykge1xuICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLm1vZGUgJiBOb1N0cmljdFBhc3NpdmVFZmZlY3RzTW9kZSkgPT09IE5vTW9kZVxuICAgICAgICA/IG1vdW50RWZmZWN0SW1wbCgyNzY4MjYxMTIsIFBhc3NpdmUsIGNyZWF0ZSwgY3JlYXRlRGVwcylcbiAgICAgICAgOiBtb3VudEVmZmVjdEltcGwoODM5MDY1NiwgUGFzc2l2ZSwgY3JlYXRlLCBjcmVhdGVEZXBzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gICAgICB2YXIgZmliZXJGbGFncyA9IDQxOTQzMDg7XG4gICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgIChmaWJlckZsYWdzIHw9IDEzNDIxNzcyOCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdChjcmVhdGUsIHJlZikge1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZikge1xuICAgICAgICBjcmVhdGUgPSBjcmVhdGUoKTtcbiAgICAgICAgdmFyIHJlZkNsZWFudXAgPSByZWYoY3JlYXRlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWZDbGVhbnVwID8gcmVmQ2xlYW51cCgpIDogcmVmKG51bGwpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKG51bGwgIT09IHJlZiAmJiB2b2lkIDAgIT09IHJlZilcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZWYuaGFzT3duUHJvcGVydHkoXCJjdXJyZW50XCIpIHx8XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSByZWYgY2FsbGJhY2sgb3IgUmVhY3QuY3JlYXRlUmVmKCkgb2JqZWN0LiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICAgICAgXCJhbiBvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKHJlZikuam9pbihcIiwgXCIpICsgXCJ9XCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKGNyZWF0ZSA9IGNyZWF0ZSgpKSxcbiAgICAgICAgICAocmVmLmN1cnJlbnQgPSBjcmVhdGUpLFxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY3JlYXRlICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICBudWxsICE9PSBjcmVhdGUgPyB0eXBlb2YgY3JlYXRlIDogXCJudWxsXCJcbiAgICAgICAgKTtcbiAgICAgIGRlcHMgPSBudWxsICE9PSBkZXBzICYmIHZvaWQgMCAhPT0gZGVwcyA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gICAgICB2YXIgZmliZXJGbGFncyA9IDQxOTQzMDg7XG4gICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgIChmaWJlckZsYWdzIHw9IDEzNDIxNzcyOCk7XG4gICAgICBtb3VudEVmZmVjdEltcGwoXG4gICAgICAgIGZpYmVyRmxhZ3MsXG4gICAgICAgIExheW91dCxcbiAgICAgICAgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSxcbiAgICAgICAgZGVwc1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY3JlYXRlICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICBudWxsICE9PSBjcmVhdGUgPyB0eXBlb2YgY3JlYXRlIDogXCJudWxsXCJcbiAgICAgICAgKTtcbiAgICAgIGRlcHMgPSBudWxsICE9PSBkZXBzICYmIHZvaWQgMCAhPT0gZGVwcyA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gICAgICB1cGRhdGVFZmZlY3RJbXBsKFxuICAgICAgICA0LFxuICAgICAgICBMYXlvdXQsXG4gICAgICAgIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksXG4gICAgICAgIGRlcHNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZSA9IFtcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzXG4gICAgICBdO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGRlcHMgPSB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwcztcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAobnVsbCAhPT0gZGVwcyAmJiBhcmVIb29rSW5wdXRzRXF1YWwoZGVwcywgcHJldlN0YXRlWzFdKSlcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgZGVwc107XG4gICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50TWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXh0Q3JlYXRlKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBkZXBzXTtcbiAgICAgIHJldHVybiBuZXh0VmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGRlcHMgPSB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwcztcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAobnVsbCAhPT0gZGVwcyAmJiBhcmVIb29rSW5wdXRzRXF1YWwoZGVwcywgcHJldlN0YXRlWzFdKSlcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIHByZXZTdGF0ZSA9IG5leHRDcmVhdGUoKTtcbiAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV4dENyZWF0ZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gW3ByZXZTdGF0ZSwgZGVwc107XG4gICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgdmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbChcbiAgICAgICAgaG9vayxcbiAgICAgICAgY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGluaXRpYWxWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gY3VycmVudEhvb2tcbiAgICAgICAgPyBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpXG4gICAgICAgIDogdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoXG4gICAgICAgICAgICBob29rLFxuICAgICAgICAgICAgY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICBpZiAodm9pZCAwID09PSBpbml0aWFsVmFsdWUgfHwgMCAhPT0gKHJlbmRlckxhbmVzICYgMTA3Mzc0MTgyNCkpXG4gICAgICAgIHJldHVybiAoaG9vay5tZW1vaXplZFN0YXRlID0gdmFsdWUpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgaG9vayA9IHJlcXVlc3REZWZlcnJlZExhbmUoKTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmxhbmVzIHw9IGhvb2s7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gaG9vaztcbiAgICAgIHJldHVybiBpbml0aWFsVmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHByZXZWYWx1ZSwgdmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgaWYgKG9iamVjdElzKHZhbHVlLCBwcmV2VmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50KVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChob29rID0gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSksXG4gICAgICAgICAgb2JqZWN0SXMoaG9vaywgcHJldlZhbHVlKSB8fCAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSxcbiAgICAgICAgICBob29rXG4gICAgICAgICk7XG4gICAgICBpZiAoMCA9PT0gKHJlbmRlckxhbmVzICYgNDIpKVxuICAgICAgICByZXR1cm4gKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCksIChob29rLm1lbW9pemVkU3RhdGUgPSB2YWx1ZSk7XG4gICAgICBob29rID0gcmVxdWVzdERlZmVycmVkTGFuZSgpO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIubGFuZXMgfD0gaG9vaztcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSBob29rO1xuICAgICAgcmV0dXJuIHByZXZWYWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKFxuICAgICAgZmliZXIsXG4gICAgICBxdWV1ZSxcbiAgICAgIHBlbmRpbmdTdGF0ZSxcbiAgICAgIGZpbmlzaGVkU3RhdGUsXG4gICAgICBjYWxsYmFja1xuICAgICkge1xuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9XG4gICAgICAgIDAgIT09IHByZXZpb3VzUHJpb3JpdHkgJiYgcHJldmlvdXNQcmlvcml0eSA8IENvbnRpbnVvdXNFdmVudFByaW9yaXR5XG4gICAgICAgICAgPyBwcmV2aW91c1ByaW9yaXR5XG4gICAgICAgICAgOiBDb250aW51b3VzRXZlbnRQcmlvcml0eTtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uID0ge307XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gY3VycmVudFRyYW5zaXRpb247XG4gICAgICBkaXNwYXRjaE9wdGltaXN0aWNTZXRTdGF0ZShmaWJlciwgITEsIHF1ZXVlLCBwZW5kaW5nU3RhdGUpO1xuICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgPSBuZXcgU2V0KCk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBjYWxsYmFjaygpLFxuICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUztcbiAgICAgICAgbnVsbCAhPT0gb25TdGFydFRyYW5zaXRpb25GaW5pc2ggJiZcbiAgICAgICAgICBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaChjdXJyZW50VHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbnVsbCAhPT0gcmV0dXJuVmFsdWUgJiZcbiAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZS50aGVuXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciB0aGVuYWJsZUZvckZpbmlzaGVkU3RhdGUgPSBjaGFpblRoZW5hYmxlVmFsdWUoXG4gICAgICAgICAgICByZXR1cm5WYWx1ZSxcbiAgICAgICAgICAgIGZpbmlzaGVkU3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgcXVldWUsXG4gICAgICAgICAgICB0aGVuYWJsZUZvckZpbmlzaGVkU3RhdGUsXG4gICAgICAgICAgICByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcilcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBkaXNwYXRjaFNldFN0YXRlSW50ZXJuYWwoXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIHF1ZXVlLFxuICAgICAgICAgICAgZmluaXNoZWRTdGF0ZSxcbiAgICAgICAgICAgIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKVxuICAgICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBkaXNwYXRjaFNldFN0YXRlSW50ZXJuYWwoXG4gICAgICAgICAgZmliZXIsXG4gICAgICAgICAgcXVldWUsXG4gICAgICAgICAgeyB0aGVuOiBmdW5jdGlvbiAoKSB7fSwgc3RhdHVzOiBcInJlamVjdGVkXCIsIHJlYXNvbjogZXJyb3IgfSxcbiAgICAgICAgICByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcilcbiAgICAgICAgKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNQcmlvcml0eSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbiksXG4gICAgICAgICAgbnVsbCA9PT0gcHJldlRyYW5zaXRpb24gJiZcbiAgICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzICYmXG4gICAgICAgICAgICAoKGZpYmVyID0gY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuc2l6ZSksXG4gICAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpLFxuICAgICAgICAgICAgMTAgPCBmaWJlciAmJlxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgXCJEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uIElmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIE90aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS5cIlxuICAgICAgICAgICAgICApKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRIb3N0VHJhbnNpdGlvbihmb3JtRmliZXIsIHBlbmRpbmdTdGF0ZSwgYWN0aW9uLCBmb3JtRGF0YSkge1xuICAgICAgaWYgKDUgIT09IGZvcm1GaWJlci50YWcpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdGhlIGZvcm0gaW5zdGFuY2UgdG8gYmUgYSBIb3N0Q29tcG9uZW50LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgcXVldWUgPSBlbnN1cmVGb3JtQ29tcG9uZW50SXNTdGF0ZWZ1bChmb3JtRmliZXIpLnF1ZXVlO1xuICAgICAgc3RhcnRUcmFuc2l0aW9uKFxuICAgICAgICBmb3JtRmliZXIsXG4gICAgICAgIHF1ZXVlLFxuICAgICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICAgIE5vdFBlbmRpbmdUcmFuc2l0aW9uLFxuICAgICAgICBudWxsID09PSBhY3Rpb25cbiAgICAgICAgICA/IG5vb3AkMlxuICAgICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXF1ZXN0Rm9ybVJlc2V0JDEoZm9ybUZpYmVyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbihmb3JtRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnN1cmVGb3JtQ29tcG9uZW50SXNTdGF0ZWZ1bChmb3JtRmliZXIpIHtcbiAgICAgIHZhciBleGlzdGluZ1N0YXRlSG9vayA9IGZvcm1GaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IGV4aXN0aW5nU3RhdGVIb29rKSByZXR1cm4gZXhpc3RpbmdTdGF0ZUhvb2s7XG4gICAgICBleGlzdGluZ1N0YXRlSG9vayA9IHtcbiAgICAgICAgbWVtb2l6ZWRTdGF0ZTogTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICAgIGJhc2VTdGF0ZTogTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICAgICAgcXVldWU6IHtcbiAgICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICAgIGxhbmVzOiAwLFxuICAgICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBOb3RQZW5kaW5nVHJhbnNpdGlvblxuICAgICAgICB9LFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgdmFyIGluaXRpYWxSZXNldFN0YXRlID0ge307XG4gICAgICBleGlzdGluZ1N0YXRlSG9vay5uZXh0ID0ge1xuICAgICAgICBtZW1vaXplZFN0YXRlOiBpbml0aWFsUmVzZXRTdGF0ZSxcbiAgICAgICAgYmFzZVN0YXRlOiBpbml0aWFsUmVzZXRTdGF0ZSxcbiAgICAgICAgYmFzZVF1ZXVlOiBudWxsLFxuICAgICAgICBxdWV1ZToge1xuICAgICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgICAgbGFuZXM6IDAsXG4gICAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxSZXNldFN0YXRlXG4gICAgICAgIH0sXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBmb3JtRmliZXIubWVtb2l6ZWRTdGF0ZSA9IGV4aXN0aW5nU3RhdGVIb29rO1xuICAgICAgZm9ybUZpYmVyID0gZm9ybUZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgIT09IGZvcm1GaWJlciAmJiAoZm9ybUZpYmVyLm1lbW9pemVkU3RhdGUgPSBleGlzdGluZ1N0YXRlSG9vayk7XG4gICAgICByZXR1cm4gZXhpc3RpbmdTdGF0ZUhvb2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RGb3JtUmVzZXQkMShmb3JtRmliZXIpIHtcbiAgICAgIG51bGwgPT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcInJlcXVlc3RGb3JtUmVzZXQgd2FzIGNhbGxlZCBvdXRzaWRlIGEgdHJhbnNpdGlvbiBvciBhY3Rpb24uIFRvIGZpeCwgbW92ZSB0byBhbiBhY3Rpb24sIG9yIHdyYXAgd2l0aCBzdGFydFRyYW5zaXRpb24uXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciByZXNldFN0YXRlUXVldWUgPSBlbnN1cmVGb3JtQ29tcG9uZW50SXNTdGF0ZWZ1bChmb3JtRmliZXIpLm5leHQucXVldWU7XG4gICAgICBkaXNwYXRjaFNldFN0YXRlSW50ZXJuYWwoXG4gICAgICAgIGZvcm1GaWJlcixcbiAgICAgICAgcmVzZXRTdGF0ZVF1ZXVlLFxuICAgICAgICB7fSxcbiAgICAgICAgcmVxdWVzdFVwZGF0ZUxhbmUoZm9ybUZpYmVyKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIHN0YXRlSG9vayA9IG1vdW50U3RhdGVJbXBsKCExKTtcbiAgICAgIHN0YXRlSG9vayA9IHN0YXJ0VHJhbnNpdGlvbi5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgc3RhdGVIb29rLnF1ZXVlLFxuICAgICAgICAhMCxcbiAgICAgICAgITFcbiAgICAgICk7XG4gICAgICBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGUgPSBzdGF0ZUhvb2s7XG4gICAgICByZXR1cm4gWyExLCBzdGF0ZUhvb2tdO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIGJvb2xlYW5PclRoZW5hYmxlID0gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcilbMF0sXG4gICAgICAgIHN0YXJ0ID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgICA/IGJvb2xlYW5PclRoZW5hYmxlXG4gICAgICAgICAgOiB1c2VUaGVuYWJsZShib29sZWFuT3JUaGVuYWJsZSksXG4gICAgICAgIHN0YXJ0XG4gICAgICBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXJlbmRlclRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgYm9vbGVhbk9yVGhlbmFibGUgPSByZXJlbmRlclJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpWzBdLFxuICAgICAgICBzdGFydCA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIGJvb2xlYW5PclRoZW5hYmxlXG4gICAgICAgICAgPyBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICAgIDogdXNlVGhlbmFibGUoYm9vbGVhbk9yVGhlbmFibGUpLFxuICAgICAgICBzdGFydFxuICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMoKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoSG9zdFRyYW5zaXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRJZCgpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCA9IHdvcmtJblByb2dyZXNzUm9vdC5pZGVudGlmaWVyUHJlZml4O1xuICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgIHZhciB0cmVlSWQgPSB0cmVlQ29udGV4dE92ZXJmbG93O1xuICAgICAgICB2YXIgaWRXaXRoTGVhZGluZ0JpdCA9IHRyZWVDb250ZXh0SWQ7XG4gICAgICAgIHRyZWVJZCA9XG4gICAgICAgICAgKFxuICAgICAgICAgICAgaWRXaXRoTGVhZGluZ0JpdCAmIH4oMSA8PCAoMzIgLSBjbHozMihpZFdpdGhMZWFkaW5nQml0KSAtIDEpKVxuICAgICAgICAgICkudG9TdHJpbmcoMzIpICsgdHJlZUlkO1xuICAgICAgICBpZGVudGlmaWVyUHJlZml4ID0gXCJcXHUwMGFiXCIgKyBpZGVudGlmaWVyUHJlZml4ICsgXCJSXCIgKyB0cmVlSWQ7XG4gICAgICAgIHRyZWVJZCA9IGxvY2FsSWRDb3VudGVyKys7XG4gICAgICAgIDAgPCB0cmVlSWQgJiYgKGlkZW50aWZpZXJQcmVmaXggKz0gXCJIXCIgKyB0cmVlSWQudG9TdHJpbmcoMzIpKTtcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCArPSBcIlxcdTAwYmJcIjtcbiAgICAgIH0gZWxzZVxuICAgICAgICAodHJlZUlkID0gZ2xvYmFsQ2xpZW50SWRDb3VudGVyKyspLFxuICAgICAgICAgIChpZGVudGlmaWVyUHJlZml4ID1cbiAgICAgICAgICAgIFwiXFx1MDBhYlwiICsgaWRlbnRpZmllclByZWZpeCArIFwiclwiICsgdHJlZUlkLnRvU3RyaW5nKDMyKSArIFwiXFx1MDBiYlwiKTtcbiAgICAgIHJldHVybiAoaG9vay5tZW1vaXplZFN0YXRlID0gaWRlbnRpZmllclByZWZpeCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50UmVmcmVzaCgpIHtcbiAgICAgIHJldHVybiAobW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlID0gcmVmcmVzaENhY2hlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyXG4gICAgICApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVmcmVzaENhY2hlKGZpYmVyLCBzZWVkS2V5KSB7XG4gICAgICBmb3IgKHZhciBwcm92aWRlciA9IGZpYmVyLnJldHVybjsgbnVsbCAhPT0gcHJvdmlkZXI7ICkge1xuICAgICAgICBzd2l0Y2ggKHByb3ZpZGVyLnRhZykge1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShwcm92aWRlcik7XG4gICAgICAgICAgICBmaWJlciA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShwcm92aWRlciwgZmliZXIsIGxhbmUpO1xuICAgICAgICAgICAgbnVsbCAhPT0gcm9vdCAmJlxuICAgICAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIHByb3ZpZGVyLCBsYW5lKSxcbiAgICAgICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBwcm92aWRlciwgbGFuZSkpO1xuICAgICAgICAgICAgcHJvdmlkZXIgPSBjcmVhdGVDYWNoZSgpO1xuICAgICAgICAgICAgbnVsbCAhPT0gc2VlZEtleSAmJlxuICAgICAgICAgICAgICB2b2lkIDAgIT09IHNlZWRLZXkgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdCAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVGhlIHNlZWQgYXJndW1lbnQgaXMgbm90IGVuYWJsZWQgb3V0c2lkZSBleHBlcmltZW50YWwgY2hhbm5lbHMuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZpYmVyLnBheWxvYWQgPSB7IGNhY2hlOiBwcm92aWRlciB9O1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb3ZpZGVyID0gcHJvdmlkZXIucmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaFJlZHVjZXJBY3Rpb24oZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXJnc1szXSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIHRoZSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLlwiXG4gICAgICAgICk7XG4gICAgICBhcmdzID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgdmFyIHVwZGF0ZSA9IHtcbiAgICAgICAgbGFuZTogYXJncyxcbiAgICAgICAgcmV2ZXJ0TGFuZTogMCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGhhc0VhZ2VyU3RhdGU6ICExLFxuICAgICAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcilcbiAgICAgICAgPyBlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUocXVldWUsIHVwZGF0ZSlcbiAgICAgICAgOiAoKHVwZGF0ZSA9IGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZShmaWJlciwgcXVldWUsIHVwZGF0ZSwgYXJncykpLFxuICAgICAgICAgIG51bGwgIT09IHVwZGF0ZSAmJlxuICAgICAgICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcih1cGRhdGUsIGZpYmVyLCBhcmdzKSxcbiAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZSh1cGRhdGUsIHF1ZXVlLCBhcmdzKSkpO1xuICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCBhcmdzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hTZXRTdGF0ZShmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhcmdzWzNdICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuXCJcbiAgICAgICAgKTtcbiAgICAgIGFyZ3MgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICBkaXNwYXRjaFNldFN0YXRlSW50ZXJuYWwoZmliZXIsIHF1ZXVlLCBhY3Rpb24sIGFyZ3MpO1xuICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCBhcmdzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKGZpYmVyLCBxdWV1ZSwgYWN0aW9uLCBsYW5lKSB7XG4gICAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgICBsYW5lOiBsYW5lLFxuICAgICAgICByZXZlcnRMYW5lOiAwLFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgaGFzRWFnZXJTdGF0ZTogITEsXG4gICAgICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgMCA9PT0gZmliZXIubGFuZXMgJiZcbiAgICAgICAgICAobnVsbCA9PT0gYWx0ZXJuYXRlIHx8IDAgPT09IGFsdGVybmF0ZS5sYW5lcykgJiZcbiAgICAgICAgICAoKGFsdGVybmF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIpLCBudWxsICE9PSBhbHRlcm5hdGUpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGUsXG4gICAgICAgICAgICAgIGVhZ2VyU3RhdGUgPSBhbHRlcm5hdGUoY3VycmVudFN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgICAgdXBkYXRlLmhhc0VhZ2VyU3RhdGUgPSAhMDtcbiAgICAgICAgICAgIHVwZGF0ZS5lYWdlclN0YXRlID0gZWFnZXJTdGF0ZTtcbiAgICAgICAgICAgIGlmIChvYmplY3RJcyhlYWdlclN0YXRlLCBjdXJyZW50U3RhdGUpKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIHVwZGF0ZSwgMCksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgICAgICAgICAgICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCksXG4gICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFjdGlvbiA9IGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICAgIGlmIChudWxsICE9PSBhY3Rpb24pXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihhY3Rpb24sIGZpYmVyLCBsYW5lKSxcbiAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShhY3Rpb24sIHF1ZXVlLCBsYW5lKSxcbiAgICAgICAgICAgICEwXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUoXG4gICAgICBmaWJlcixcbiAgICAgIHRocm93SWZEdXJpbmdSZW5kZXIsXG4gICAgICBxdWV1ZSxcbiAgICAgIGFjdGlvblxuICAgICkge1xuICAgICAgbnVsbCA9PT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCAmJlxuICAgICAgICAwID09PSBjdXJyZW50RW50YW5nbGVkTGFuZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQW4gb3B0aW1pc3RpYyBzdGF0ZSB1cGRhdGUgb2NjdXJyZWQgb3V0c2lkZSBhIHRyYW5zaXRpb24gb3IgYWN0aW9uLiBUbyBmaXgsIG1vdmUgdGhlIHVwZGF0ZSB0byBhbiBhY3Rpb24sIG9yIHdyYXAgd2l0aCBzdGFydFRyYW5zaXRpb24uXCJcbiAgICAgICAgKTtcbiAgICAgIGFjdGlvbiA9IHtcbiAgICAgICAgbGFuZTogMixcbiAgICAgICAgcmV2ZXJ0TGFuZTogcmVxdWVzdFRyYW5zaXRpb25MYW5lKCksXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBoYXNFYWdlclN0YXRlOiAhMSxcbiAgICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlmIChpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSkge1xuICAgICAgICBpZiAodGhyb3dJZkR1cmluZ1JlbmRlcilcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkNhbm5vdCB1cGRhdGUgb3B0aW1pc3RpYyBzdGF0ZSB3aGlsZSByZW5kZXJpbmcuXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQ2Fubm90IGNhbGwgc3RhcnRUcmFuc2l0aW9uIHdoaWxlIHJlbmRlcmluZy5cIik7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKHRocm93SWZEdXJpbmdSZW5kZXIgPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoXG4gICAgICAgICAgZmliZXIsXG4gICAgICAgICAgcXVldWUsXG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIDJcbiAgICAgICAgKSksXG4gICAgICAgICAgbnVsbCAhPT0gdGhyb3dJZkR1cmluZ1JlbmRlciAmJlxuICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHRocm93SWZEdXJpbmdSZW5kZXIsIGZpYmVyLCAyKTtcbiAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBmaWJlciA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIgfHxcbiAgICAgICAgKG51bGwgIT09IGFsdGVybmF0ZSAmJiBhbHRlcm5hdGUgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlKHF1ZXVlLCB1cGRhdGUpIHtcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9XG4gICAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSAhMDtcbiAgICAgIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcbiAgICAgIG51bGwgPT09IHBlbmRpbmdcbiAgICAgICAgPyAodXBkYXRlLm5leHQgPSB1cGRhdGUpXG4gICAgICAgIDogKCh1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dCksIChwZW5kaW5nLm5leHQgPSB1cGRhdGUpKTtcbiAgICAgIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShyb290LCBxdWV1ZSwgbGFuZSkge1xuICAgICAgaWYgKDAgIT09IChsYW5lICYgNDE5NDA0OCkpIHtcbiAgICAgICAgdmFyIHF1ZXVlTGFuZXMgPSBxdWV1ZS5sYW5lcztcbiAgICAgICAgcXVldWVMYW5lcyAmPSByb290LnBlbmRpbmdMYW5lcztcbiAgICAgICAgbGFuZSB8PSBxdWV1ZUxhbmVzO1xuICAgICAgICBxdWV1ZS5sYW5lcyA9IGxhbmU7XG4gICAgICAgIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGxhbmUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoRGVidWdJbmZvKGRlYnVnSW5mbykge1xuICAgICAgdmFyIHByZXZpb3VzRGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgIG51bGwgIT0gZGVidWdJbmZvICYmXG4gICAgICAgIChjdXJyZW50RGVidWdJbmZvID1cbiAgICAgICAgICBudWxsID09PSBwcmV2aW91c0RlYnVnSW5mb1xuICAgICAgICAgICAgPyBkZWJ1Z0luZm9cbiAgICAgICAgICAgIDogcHJldmlvdXNEZWJ1Z0luZm8uY29uY2F0KGRlYnVnSW5mbykpO1xuICAgICAgcmV0dXJuIHByZXZpb3VzRGVidWdJbmZvO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCwgZmliZXIsIHJldHVybkZpYmVyKSB7XG4gICAgICBmb3IgKHZhciBrZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudC5wcm9wcyksIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKFwiY2hpbGRyZW5cIiAhPT0ga2V5ICYmIFwia2V5XCIgIT09IGtleSkge1xuICAgICAgICAgIG51bGwgPT09IGZpYmVyICYmXG4gICAgICAgICAgICAoKGZpYmVyID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCAwKSksXG4gICAgICAgICAgICAoZmliZXIuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgKGZpYmVyLnJldHVybiA9IHJldHVybkZpYmVyKSk7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcmVkS2V5KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiBSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLlwiLFxuICAgICAgICAgICAgICAgIGVycm9yZWRLZXlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVud3JhcFRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGVuYWJsZUluZGV4Q291bnRlcjtcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyICs9IDE7XG4gICAgICBudWxsID09PSB0aGVuYWJsZVN0YXRlICYmICh0aGVuYWJsZVN0YXRlID0gY3JlYXRlVGhlbmFibGVTdGF0ZSgpKTtcbiAgICAgIHJldHVybiB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlLCB0aGVuYWJsZSwgaW5kZXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2VyY2VSZWYod29ya0luUHJvZ3Jlc3MsIGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnByb3BzLnJlZjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnJlZiA9IHZvaWQgMCAhPT0gZWxlbWVudCA/IGVsZW1lbnQgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0xFR0FDWV9FTEVNRU5UX1RZUEUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBIFJlYWN0IEVsZW1lbnQgZnJvbSBhbiBvbGRlciB2ZXJzaW9uIG9mIFJlYWN0IHdhcyByZW5kZXJlZC4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBJdCBjYW4gaGFwcGVuIGlmOlxcbi0gTXVsdGlwbGUgY29waWVzIG9mIHRoZSBcInJlYWN0XCIgcGFja2FnZSBpcyB1c2VkLlxcbi0gQSBsaWJyYXJ5IHByZS1idW5kbGVkIGFuIG9sZCBjb3B5IG9mIFwicmVhY3RcIiBvciBcInJlYWN0L2pzeC1ydW50aW1lXCIuXFxuLSBBIGNvbXBpbGVyIHRyaWVzIHRvIFwiaW5saW5lXCIgSlNYIGluc3RlYWQgb2YgdXNpbmcgdGhlIHJ1bnRpbWUuJ1xuICAgICAgICApO1xuICAgICAgcmV0dXJuRmliZXIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3Q2hpbGQpO1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArXG4gICAgICAgICAgKFwiW29iamVjdCBPYmplY3RdXCIgPT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICA/IFwib2JqZWN0IHdpdGgga2V5cyB7XCIgKyBPYmplY3Qua2V5cyhuZXdDaGlsZCkuam9pbihcIiwgXCIpICsgXCJ9XCJcbiAgICAgICAgICAgIDogcmV0dXJuRmliZXIpICtcbiAgICAgICAgICBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyLCBpbnZhbGlkQ2hpbGQpIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlcikgfHwgXCJDb21wb25lbnRcIjtcbiAgICAgIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1twYXJlbnROYW1lXSB8fFxuICAgICAgICAoKG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1twYXJlbnROYW1lXSA9ICEwKSxcbiAgICAgICAgKGludmFsaWRDaGlsZCA9XG4gICAgICAgICAgaW52YWxpZENoaWxkLmRpc3BsYXlOYW1lIHx8IGludmFsaWRDaGlsZC5uYW1lIHx8IFwiQ29tcG9uZW50XCIpLFxuICAgICAgICAzID09PSByZXR1cm5GaWJlci50YWdcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmIHlvdSByZXR1cm4gJXMgaW5zdGVhZCBvZiA8JXMgLz4gZnJvbSByZW5kZXIuIE9yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LlxcbiAgcm9vdC5yZW5kZXIoJXMpXCIsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZCxcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGRcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmIHlvdSByZXR1cm4gJXMgaW5zdGVhZCBvZiA8JXMgLz4gZnJvbSByZW5kZXIuIE9yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LlxcbiAgPCVzPnslc308LyVzPlwiLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGQsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZCxcbiAgICAgICAgICAgICAgcGFyZW50TmFtZSxcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lXG4gICAgICAgICAgICApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk9uU3ltYm9sVHlwZShyZXR1cm5GaWJlciwgaW52YWxpZENoaWxkKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIocmV0dXJuRmliZXIpIHx8IFwiQ29tcG9uZW50XCI7XG4gICAgICBvd25lckhhc1N5bWJvbFR5cGVXYXJuaW5nW3BhcmVudE5hbWVdIHx8XG4gICAgICAgICgob3duZXJIYXNTeW1ib2xUeXBlV2FybmluZ1twYXJlbnROYW1lXSA9ICEwKSxcbiAgICAgICAgKGludmFsaWRDaGlsZCA9IFN0cmluZyhpbnZhbGlkQ2hpbGQpKSxcbiAgICAgICAgMyA9PT0gcmV0dXJuRmliZXIudGFnXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlN5bWJvbHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLlxcbiAgcm9vdC5yZW5kZXIoJXMpXCIsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJTeW1ib2xzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC5cXG4gIDwlcz4lczwvJXM+XCIsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWUsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZCxcbiAgICAgICAgICAgICAgcGFyZW50TmFtZVxuICAgICAgICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICBmdW5jdGlvbiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIHZhciBkZWxldGlvbnMgPSByZXR1cm5GaWJlci5kZWxldGlvbnM7XG4gICAgICAgICAgbnVsbCA9PT0gZGVsZXRpb25zXG4gICAgICAgICAgICA/ICgocmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2NoaWxkVG9EZWxldGVdKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyLmZsYWdzIHw9IDE2KSlcbiAgICAgICAgICAgIDogZGVsZXRpb25zLnB1c2goY2hpbGRUb0RlbGV0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgICAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHJldHVybiBudWxsO1xuICAgICAgICBmb3IgKDsgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7IClcbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpLFxuICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4oY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZm9yICh2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG5ldyBNYXAoKTsgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7IClcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZC5rZXlcbiAgICAgICAgICAgID8gZXhpc3RpbmdDaGlsZHJlbi5zZXQoY3VycmVudEZpcnN0Q2hpbGQua2V5LCBjdXJyZW50Rmlyc3RDaGlsZClcbiAgICAgICAgICAgIDogZXhpc3RpbmdDaGlsZHJlbi5zZXQoY3VycmVudEZpcnN0Q2hpbGQuaW5kZXgsIGN1cnJlbnRGaXJzdENoaWxkKSxcbiAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdDaGlsZHJlbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVzZUZpYmVyKGZpYmVyLCBwZW5kaW5nUHJvcHMpIHtcbiAgICAgICAgZmliZXIgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhmaWJlciwgcGVuZGluZ1Byb3BzKTtcbiAgICAgICAgZmliZXIuaW5kZXggPSAwO1xuICAgICAgICBmaWJlci5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIGZpYmVyO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJbmRleCkge1xuICAgICAgICBuZXdGaWJlci5pbmRleCA9IG5ld0luZGV4O1xuICAgICAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpXG4gICAgICAgICAgcmV0dXJuIChuZXdGaWJlci5mbGFncyB8PSAxMDQ4NTc2KSwgbGFzdFBsYWNlZEluZGV4O1xuICAgICAgICBuZXdJbmRleCA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgaWYgKG51bGwgIT09IG5ld0luZGV4KVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobmV3SW5kZXggPSBuZXdJbmRleC5pbmRleCksXG4gICAgICAgICAgICBuZXdJbmRleCA8IGxhc3RQbGFjZWRJbmRleFxuICAgICAgICAgICAgICA/ICgobmV3RmliZXIuZmxhZ3MgfD0gNjcxMDg4NjYpLCBsYXN0UGxhY2VkSW5kZXgpXG4gICAgICAgICAgICAgIDogbmV3SW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICBuZXdGaWJlci5mbGFncyB8PSA2NzEwODg2NjtcbiAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2hpbGQobmV3RmliZXIpIHtcbiAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgIG51bGwgPT09IG5ld0ZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgIChuZXdGaWJlci5mbGFncyB8PSA2NzEwODg2Nik7XG4gICAgICAgIHJldHVybiBuZXdGaWJlcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50LCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgNiAhPT0gY3VycmVudC50YWcpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tVGV4dChcbiAgICAgICAgICAgICAgdGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z093bmVyID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnVGFzayA9IHJldHVybkZpYmVyLl9kZWJ1Z1Rhc2spLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQgPSB1c2VGaWJlcihjdXJyZW50LCB0ZXh0Q29udGVudCk7XG4gICAgICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRUeXBlID0gZWxlbWVudC50eXBlO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gdXBkYXRlRnJhZ21lbnQoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICBlbGVtZW50LnByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgZWxlbWVudC5rZXlcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQsIGN1cnJlbnQsIHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgIChjdXJyZW50LmVsZW1lbnRUeXBlID09PSBlbGVtZW50VHlwZSB8fFxuICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGN1cnJlbnQsIGVsZW1lbnQpIHx8XG4gICAgICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVsZW1lbnRUeXBlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGVsZW1lbnRUeXBlICYmXG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgY2FsbExhenlJbml0SW5ERVYoZWxlbWVudFR5cGUpID09PSBjdXJyZW50LnR5cGUpKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gdXNlRmliZXIoY3VycmVudCwgZWxlbWVudC5wcm9wcykpLFxuICAgICAgICAgICAgY29lcmNlUmVmKGN1cnJlbnQsIGVsZW1lbnQpLFxuICAgICAgICAgICAgKGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgICBjb2VyY2VSZWYoY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50LCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgNCAhPT0gY3VycmVudC50YWcgfHxcbiAgICAgICAgICBjdXJyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvICE9PSBwb3J0YWwuY29udGFpbmVySW5mbyB8fFxuICAgICAgICAgIGN1cnJlbnQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uICE9PSBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKSksXG4gICAgICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgICAgIGlmIChudWxsID09PSBjdXJyZW50IHx8IDcgIT09IGN1cnJlbnQudGFnKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdPd25lciA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICBjdXJyZW50ID0gdXNlRmliZXIoY3VycmVudCwgZnJhZ21lbnQpO1xuICAgICAgICBjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICBjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgXCJcIiAhPT0gbmV3Q2hpbGQpIHx8XG4gICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkIHx8XG4gICAgICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIG5ld0NoaWxkXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG5ld0NoaWxkID0gY3JlYXRlRmliZXJGcm9tVGV4dChcbiAgICAgICAgICAgICAgXCJcIiArIG5ld0NoaWxkLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAobmV3Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKG5ld0NoaWxkLl9kZWJ1Z093bmVyID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKG5ld0NoaWxkLl9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrKSxcbiAgICAgICAgICAgIChuZXdDaGlsZC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICBuZXdDaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAobGFuZXMgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBjb2VyY2VSZWYobGFuZXMsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKG5ld0NoaWxkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAobmV3Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChuZXdDaGlsZC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICB2YXIgX3ByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pO1xuICAgICAgICAgICAgICBuZXdDaGlsZCA9IGNhbGxMYXp5SW5pdEluREVWKG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IF9wcmV2RGVidWdJbmZvO1xuICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAobGFuZXMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgIChsYW5lcy5fZGVidWdPd25lciA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChfcHJldkRlYnVnSW5mbyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBjcmVhdGVDaGlsZChcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gX3ByZXZEZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDaGlsZChcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiZcbiAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIHdhcm5PblN5bWJvbFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgICAgIHZhciBrZXkgPSBudWxsICE9PSBvbGRGaWJlciA/IG9sZEZpYmVyLmtleSA6IG51bGw7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBuZXdDaGlsZCB8fFxuICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBuZXdDaGlsZFxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIG51bGwgIT09IGtleVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBvbGRGaWJlciwgXCJcIiArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0NoaWxkLmtleSA9PT0ga2V5XG4gICAgICAgICAgICAgICAgPyAoKGtleSA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdXBkYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBrZXkpLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIpXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0NoaWxkLmtleSA9PT0ga2V5XG4gICAgICAgICAgICAgICAgPyB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKGtleSA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAgIChuZXdDaGlsZCA9IGNhbGxMYXp5SW5pdEluREVWKG5ld0NoaWxkKSksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdXBkYXRlU2xvdChcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBrZXkpLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBrZXkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAga2V5ID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKTtcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gdXBkYXRlRnJhZ21lbnQoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IGtleTtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5GaWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IGtleSksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGlhdGlvbihyZXR1cm5GaWJlciwgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJlxuICAgICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgd2Fybk9uU3ltYm9sVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoXG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBuZXdJZHgsXG4gICAgICAgIG5ld0NoaWxkLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBuZXdDaGlsZCB8fFxuICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBuZXdDaGlsZFxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChleGlzdGluZ0NoaWxkcmVuID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsKSxcbiAgICAgICAgICAgIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBleGlzdGluZ0NoaWxkcmVuLCBcIlwiICsgbmV3Q2hpbGQsIGxhbmVzKVxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAobmV3SWR4ID1cbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KFxuICAgICAgICAgICAgICAgICAgICBudWxsID09PSBuZXdDaGlsZC5rZXkgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgICAgICkgfHwgbnVsbCksXG4gICAgICAgICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB1cGRhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBleGlzdGluZ0NoaWxkcmVuKSxcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoZXhpc3RpbmdDaGlsZHJlbiA9XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmdldChcbiAgICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV3Q2hpbGQua2V5ID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5XG4gICAgICAgICAgICAgICAgICApIHx8IG51bGwpLFxuICAgICAgICAgICAgICAgIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgZXhpc3RpbmdDaGlsZHJlbiwgbmV3Q2hpbGQsIGxhbmVzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIHZhciBfcHJldkRlYnVnSW5mbzcgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pO1xuICAgICAgICAgICAgICBuZXdDaGlsZCA9IGNhbGxMYXp5SW5pdEluREVWKG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBfcHJldkRlYnVnSW5mbzc7XG4gICAgICAgICAgICAgIHJldHVybiByZXR1cm5GaWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChuZXdJZHggPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGwpLFxuICAgICAgICAgICAgICAoZXhpc3RpbmdDaGlsZHJlbiA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB1cGRhdGVGcmFnbWVudChcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBleGlzdGluZ0NoaWxkcmVuKSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoX3ByZXZEZWJ1Z0luZm83ID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IF9wcmV2RGVidWdJbmZvNyksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiZcbiAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIHdhcm5PblN5bWJvbFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB3YXJuT25JbnZhbGlkS2V5KHJldHVybkZpYmVyLCB3b3JrSW5Qcm9ncmVzcywgY2hpbGQsIGtub3duS2V5cykge1xuICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGNoaWxkIHx8IG51bGwgPT09IGNoaWxkKSByZXR1cm4ga25vd25LZXlzO1xuICAgICAgICBzd2l0Y2ggKGNoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIHdhcm5Gb3JNaXNzaW5nS2V5KHJldHVybkZpYmVyLCB3b3JrSW5Qcm9ncmVzcywgY2hpbGQpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGNoaWxkLmtleTtcbiAgICAgICAgICAgIGlmIChcInN0cmluZ1wiICE9PSB0eXBlb2Yga2V5KSBicmVhaztcbiAgICAgICAgICAgIGlmIChudWxsID09PSBrbm93bktleXMpIHtcbiAgICAgICAgICAgICAga25vd25LZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFrbm93bktleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKHdvcmtJblByb2dyZXNzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksIGAlc2AuIEtleXMgc2hvdWxkIGJlIHVuaXF1ZSBzbyB0aGF0IGNvbXBvbmVudHMgbWFpbnRhaW4gdGhlaXIgaWRlbnRpdHkgYWNyb3NzIHVwZGF0ZXMuIE5vbi11bmlxdWUga2V5cyBtYXkgY2F1c2UgY2hpbGRyZW4gdG8gYmUgZHVwbGljYXRlZCBhbmQvb3Igb21pdHRlZCBcXHUyMDE0IHRoZSBiZWhhdmlvciBpcyB1bnN1cHBvcnRlZCBhbmQgY291bGQgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uXCIsXG4gICAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgKGNoaWxkID0gY2FsbExhenlJbml0SW5ERVYoY2hpbGQpKSxcbiAgICAgICAgICAgICAgd2Fybk9uSW52YWxpZEtleShyZXR1cm5GaWJlciwgd29ya0luUHJvZ3Jlc3MsIGNoaWxkLCBrbm93bktleXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIG5ld0NoaWxkcmVuLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIGtub3duS2V5cyA9IG51bGwsXG4gICAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbCxcbiAgICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBudWxsLFxuICAgICAgICAgICAgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgIG5ld0lkeCA9IChjdXJyZW50Rmlyc3RDaGlsZCA9IDApLFxuICAgICAgICAgICAgbmV4dE9sZEZpYmVyID0gbnVsbDtcbiAgICAgICAgICBudWxsICE9PSBvbGRGaWJlciAmJiBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgbmV3SWR4KytcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2xkRmliZXIuaW5kZXggPiBuZXdJZHhcbiAgICAgICAgICAgID8gKChuZXh0T2xkRmliZXIgPSBvbGRGaWJlciksIChvbGRGaWJlciA9IG51bGwpKVxuICAgICAgICAgICAgOiAobmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZyk7XG4gICAgICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICBuZXdDaGlsZHJlbltuZXdJZHhdLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChudWxsID09PSBuZXdGaWJlcikge1xuICAgICAgICAgICAgbnVsbCA9PT0gb2xkRmliZXIgJiYgKG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBuZXdGaWJlcixcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgICAgICBrbm93bktleXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICAgIG9sZEZpYmVyICYmXG4gICAgICAgICAgICBudWxsID09PSBuZXdGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3SWR4KTtcbiAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXIpXG4gICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcik7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdJZHggPT09IG5ld0NoaWxkcmVuLmxlbmd0aClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKSxcbiAgICAgICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KSxcbiAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBpZiAobnVsbCA9PT0gb2xkRmliZXIpIHtcbiAgICAgICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKylcbiAgICAgICAgICAgIChvbGRGaWJlciA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcykpLFxuICAgICAgICAgICAgICBudWxsICE9PSBvbGRGaWJlciAmJlxuICAgICAgICAgICAgICAgICgoa25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbltuZXdJZHhdLFxuICAgICAgICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChcbiAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBuZXdJZHhcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gb2xkRmliZXIpXG4gICAgICAgICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBvbGRGaWJlciksXG4gICAgICAgICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBvbGRGaWJlcikpO1xuICAgICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIG9sZEZpYmVyID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ob2xkRmliZXIpO1xuICAgICAgICAgIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICBuZXdJZHgrK1xuICAgICAgICApXG4gICAgICAgICAgKG5leHRPbGRGaWJlciA9IHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKSksXG4gICAgICAgICAgICBudWxsICE9PSBuZXh0T2xkRmliZXIgJiZcbiAgICAgICAgICAgICAgKChrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIG5leHRPbGRGaWJlcixcbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbltuZXdJZHhdLFxuICAgICAgICAgICAgICAgIGtub3duS2V5c1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT09IG5leHRPbGRGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgICBvbGRGaWJlci5kZWxldGUoXG4gICAgICAgICAgICAgICAgICBudWxsID09PSBuZXh0T2xkRmliZXIua2V5ID8gbmV3SWR4IDogbmV4dE9sZEZpYmVyLmtleVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQoXG4gICAgICAgICAgICAgICAgbmV4dE9sZEZpYmVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgIG5ld0lkeFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXh0T2xkRmliZXIpXG4gICAgICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV4dE9sZEZpYmVyKSxcbiAgICAgICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBuZXh0T2xkRmliZXIpKTtcbiAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgIG9sZEZpYmVyLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgaXNIeWRyYXRpbmcgJiYgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBuZXdJZHgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgbmV3Q2hpbGRyZW4sXG4gICAgICAgIGxhbmVzXG4gICAgICApIHtcbiAgICAgICAgaWYgKG51bGwgPT0gbmV3Q2hpbGRyZW4pXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJBbiBpdGVyYWJsZSBvYmplY3QgcHJvdmlkZWQgbm8gaXRlcmF0b3IuXCIpO1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbCxcbiAgICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBudWxsLFxuICAgICAgICAgICAgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgIG5ld0lkeCA9IChjdXJyZW50Rmlyc3RDaGlsZCA9IDApLFxuICAgICAgICAgICAgbmV4dE9sZEZpYmVyID0gbnVsbCxcbiAgICAgICAgICAgIGtub3duS2V5cyA9IG51bGwsXG4gICAgICAgICAgICBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpO1xuICAgICAgICAgIG51bGwgIT09IG9sZEZpYmVyICYmICFzdGVwLmRvbmU7XG4gICAgICAgICAgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2xkRmliZXIuaW5kZXggPiBuZXdJZHhcbiAgICAgICAgICAgID8gKChuZXh0T2xkRmliZXIgPSBvbGRGaWJlciksIChvbGRGaWJlciA9IG51bGwpKVxuICAgICAgICAgICAgOiAobmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZyk7XG4gICAgICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gbmV3RmliZXIpIHtcbiAgICAgICAgICAgIG51bGwgPT09IG9sZEZpYmVyICYmIChvbGRGaWJlciA9IG5leHRPbGRGaWJlcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgbmV3RmliZXIsXG4gICAgICAgICAgICBzdGVwLnZhbHVlLFxuICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgICBvbGRGaWJlciAmJlxuICAgICAgICAgICAgbnVsbCA9PT0gbmV3RmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChuZXdGaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0lkeCk7XG4gICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyKVxuICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXIpO1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcC5kb25lKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpLFxuICAgICAgICAgICAgaXNIeWRyYXRpbmcgJiYgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBuZXdJZHgpLFxuICAgICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChudWxsID09PSBvbGRGaWJlcikge1xuICAgICAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSlcbiAgICAgICAgICAgIChvbGRGaWJlciA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcykpLFxuICAgICAgICAgICAgICBudWxsICE9PSBvbGRGaWJlciAmJlxuICAgICAgICAgICAgICAgICgoa25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgICBzdGVwLnZhbHVlLFxuICAgICAgICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChcbiAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBuZXdJZHhcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gb2xkRmliZXIpXG4gICAgICAgICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBvbGRGaWJlciksXG4gICAgICAgICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBvbGRGaWJlcikpO1xuICAgICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIG9sZEZpYmVyID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ob2xkRmliZXIpO1xuICAgICAgICAgICFzdGVwLmRvbmU7XG4gICAgICAgICAgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KClcbiAgICAgICAgKVxuICAgICAgICAgIChuZXh0T2xkRmliZXIgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgIHN0ZXAudmFsdWUsXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICkpLFxuICAgICAgICAgICAgbnVsbCAhPT0gbmV4dE9sZEZpYmVyICYmXG4gICAgICAgICAgICAgICgoa25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBuZXh0T2xkRmliZXIsXG4gICAgICAgICAgICAgICAgc3RlcC52YWx1ZSxcbiAgICAgICAgICAgICAgICBrbm93bktleXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSBuZXh0T2xkRmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgICAgb2xkRmliZXIuZGVsZXRlKFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV4dE9sZEZpYmVyLmtleSA/IG5ld0lkeCA6IG5leHRPbGRGaWJlci5rZXlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKFxuICAgICAgICAgICAgICAgIG5leHRPbGRGaWJlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICBuZXdJZHhcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gbmV4dE9sZEZpYmVyKVxuICAgICAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5leHRPbGRGaWJlciksXG4gICAgICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gbmV4dE9sZEZpYmVyKSk7XG4gICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICBvbGRGaWJlci5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgIGxhbmVzXG4gICAgICApIHtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmXG4gICAgICAgICAgbnVsbCAhPT0gbmV3Q2hpbGQgJiZcbiAgICAgICAgICBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFICYmXG4gICAgICAgICAgbnVsbCA9PT0gbmV3Q2hpbGQua2V5ICYmXG4gICAgICAgICAgKHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhuZXdDaGlsZCwgbnVsbCwgcmV0dXJuRmliZXIpLFxuICAgICAgICAgIChuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuKSk7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgICAgdmFyIHByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pO1xuICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5ID0gbmV3Q2hpbGQua2V5OyBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZDsgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZpcnN0Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV3Q2hpbGQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICg3ID09PSBjdXJyZW50Rmlyc3RDaGlsZC50YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmVzID0gdXNlRmliZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlblxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZXMuX2RlYnVnT3duZXIgPSBuZXdDaGlsZC5fb3duZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhuZXdDaGlsZCwgbGFuZXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyID0gbGFuZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5lbGVtZW50VHlwZSA9PT0ga2V5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZFxuICAgICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIGtleSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0ga2V5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExhenlJbml0SW5ERVYoa2V5KSA9PT0gY3VycmVudEZpcnN0Q2hpbGQudHlwZSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLnByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb2VyY2VSZWYobGFuZXMsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5fZGVidWdPd25lciA9IG5ld0NoaWxkLl9vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGxhbmVzO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRVxuICAgICAgICAgICAgICAgICAgPyAoKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdPd25lciA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrKSxcbiAgICAgICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKG5ld0NoaWxkLCBsYW5lcywgcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBsYW5lcykpXG4gICAgICAgICAgICAgICAgICA6ICgobGFuZXMgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgIGNvZXJjZVJlZihsYW5lcywgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBsYW5lcykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybkZpYmVyID0gcGxhY2VTaW5nbGVDaGlsZChyZXR1cm5GaWJlcik7XG4gICAgICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvO1xuICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgcHJldkRlYnVnSW5mbyA9IG5ld0NoaWxkO1xuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZCA9IHByZXZEZWJ1Z0luZm8ua2V5O1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZC5rZXkgPT09IG5ld0NoaWxkKVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgNCA9PT0gY3VycmVudEZpcnN0Q2hpbGQudGFnICYmXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvLmNvbnRhaW5lckluZm8gJiZcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvLmltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcyA9IHVzZUZpYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvLmNoaWxkcmVuIHx8IFtdXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGxhbmVzO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChcbiAgICAgICAgICAgICAgICAgIHByZXZEZWJ1Z0luZm8sXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyID0gbGFuZXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAobmV3Q2hpbGQgPSBjYWxsTGF6eUluaXRJbkRFVihuZXdDaGlsZCkpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwobmV3Q2hpbGQpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgICAgICBwcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKTtcbiAgICAgICAgICAgIGtleSA9IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpO1xuICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGtleSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJBbiBvYmplY3QgaXMgbm90IGFuIGl0ZXJhYmxlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YXIgbmV3Q2hpbGRyZW4gPSBrZXkuY2FsbChuZXdDaGlsZCk7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGRyZW4gPT09IG5ld0NoaWxkKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAwICE9PSByZXR1cm5GaWJlci50YWcgfHxcbiAgICAgICAgICAgICAgICBcIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCIgIT09XG4gICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmV0dXJuRmliZXIudHlwZSkgfHxcbiAgICAgICAgICAgICAgICBcIltvYmplY3QgR2VuZXJhdG9yXVwiICE9PVxuICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkcmVuKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyB8fFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJVc2luZyBJdGVyYXRvcnMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkIHVuZXhwZWN0ZWQgcmVzdWx0cyBiZWNhdXNlIGVudW1lcmF0aW5nIGEgZ2VuZXJhdG9yIG11dGF0ZXMgaXQuIFlvdSBtYXkgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIGBBcnJheS5mcm9tKClgIG9yIHRoZSBgWy4uLnNwcmVhZF1gIG9wZXJhdG9yIGJlZm9yZSByZW5kZXJpbmcuIFlvdSBjYW4gYWxzbyB1c2UgYW4gSXRlcmFibGUgdGhhdCBjYW4gaXRlcmF0ZSBtdWx0aXBsZSB0aW1lcyBvdmVyIHRoZSBzYW1lIGl0ZW1zLlwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgKGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSAhMCk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgbmV3Q2hpbGQuZW50cmllcyAhPT0ga2V5IHx8XG4gICAgICAgICAgICAgICAgZGlkV2FybkFib3V0TWFwcyB8fFxuICAgICAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChkaWRXYXJuQWJvdXRNYXBzID0gITApKTtcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICBuZXdDaGlsZHJlbixcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50RGVidWdJbmZvID0gcHJldkRlYnVnSW5mbztcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5GaWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocHJldkRlYnVnSW5mbyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IHByZXZEZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGlhdGlvbihyZXR1cm5GaWJlciwgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGQgfHxcbiAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocHJldkRlYnVnSW5mbyA9IFwiXCIgKyBuZXdDaGlsZCksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZCAmJiA2ID09PSBjdXJyZW50Rmlyc3RDaGlsZC50YWdcbiAgICAgICAgICAgICAgPyAoZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmdcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChsYW5lcyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCBwcmV2RGVidWdJbmZvKSksXG4gICAgICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBsYW5lcykpXG4gICAgICAgICAgICAgIDogKGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCksXG4gICAgICAgICAgICAgICAgKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tVGV4dChcbiAgICAgICAgICAgICAgICAgIHByZXZEZWJ1Z0luZm8sXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdPd25lciA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnVGFzayA9IHJldHVybkZpYmVyLl9kZWJ1Z1Rhc2spLFxuICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbGFuZXMpKSxcbiAgICAgICAgICAgIHBsYWNlU2luZ2xlQ2hpbGQocmV0dXJuRmliZXIpXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiZcbiAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIHdhcm5PblN5bWJvbFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgICAgIHZhciBwcmV2RGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgICAgICAgIHZhciBmaXJzdENoaWxkRmliZXIgPSByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhlbmFibGVTdGF0ZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGRGaWJlcjtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGlmICh4ID09PSBTdXNwZW5zZUV4Y2VwdGlvbiB8fCB4ID09PSBTdXNwZW5zZUFjdGlvbkV4Y2VwdGlvbikgdGhyb3cgeDtcbiAgICAgICAgICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcigyOSwgeCwgbnVsbCwgcmV0dXJuRmliZXIubW9kZSk7XG4gICAgICAgICAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgICAgICAgICBmaWJlci5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICB2YXIgZGVidWdJbmZvID0gKGZpYmVyLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKTtcbiAgICAgICAgICBmaWJlci5fZGVidWdPd25lciA9IHJldHVybkZpYmVyLl9kZWJ1Z093bmVyO1xuICAgICAgICAgIGZpYmVyLl9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrO1xuICAgICAgICAgIGlmIChudWxsICE9IGRlYnVnSW5mbylcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBkZWJ1Z0luZm8ubGVuZ3RoIC0gMTsgMCA8PSBpOyBpLS0pXG4gICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZGVidWdJbmZvW2ldLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgZmliZXIuX2RlYnVnT3duZXIgPSBkZWJ1Z0luZm9baV07XG4gICAgICAgICAgICAgICAgZmliZXIuX2RlYnVnVGFzayA9IGRlYnVnSW5mb1tpXS5kZWJ1Z1Rhc2s7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IHByZXZEZWJ1Z0luZm87XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGhhbmRsZXIuYWx0ZXJuYXRlO1xuICAgICAgcHVzaChcbiAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvcixcbiAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2ssXG4gICAgICAgIGhhbmRsZXJcbiAgICAgICk7XG4gICAgICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBoYW5kbGVyLCBoYW5kbGVyKTtcbiAgICAgIG51bGwgPT09IHNoZWxsQm91bmRhcnkgJiZcbiAgICAgICAgKG51bGwgPT09IGN1cnJlbnQgfHwgbnVsbCAhPT0gY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50XG4gICAgICAgICAgPyAoc2hlbGxCb3VuZGFyeSA9IGhhbmRsZXIpXG4gICAgICAgICAgOiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiYgKHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIoZmliZXIpIHtcbiAgICAgIGlmICgyMiA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAocHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIGZpYmVyKSxcbiAgICAgICAgICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpLFxuICAgICAgICAgIG51bGwgPT09IHNoZWxsQm91bmRhcnkpXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBjdXJyZW50ID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgKHNoZWxsQm91bmRhcnkgPSBmaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2soZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2soZmliZXIpIHtcbiAgICAgIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBmaWJlcik7XG4gICAgICBwdXNoKFxuICAgICAgICBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvcixcbiAgICAgICAgc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCxcbiAgICAgICAgZmliZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcFN1c3BlbnNlSGFuZGxlcihmaWJlcikge1xuICAgICAgcG9wKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBzaGVsbEJvdW5kYXJ5ID09PSBmaWJlciAmJiAoc2hlbGxCb3VuZGFyeSA9IG51bGwpO1xuICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICAgICAgZm9yICh2YXIgbm9kZSA9IHJvdzsgbnVsbCAhPT0gbm9kZTsgKSB7XG4gICAgICAgIGlmICgxMyA9PT0gbm9kZS50YWcpIHtcbiAgICAgICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCAhPT0gc3RhdGUgJiZcbiAgICAgICAgICAgICgoc3RhdGUgPSBzdGF0ZS5kZWh5ZHJhdGVkKSxcbiAgICAgICAgICAgIG51bGwgPT09IHN0YXRlIHx8XG4gICAgICAgICAgICAgIHN0YXRlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgICBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhzdGF0ZSkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgMTkgPT09IG5vZGUudGFnICYmXG4gICAgICAgICAgdm9pZCAwICE9PSBub2RlLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKDAgIT09IChub2RlLmZsYWdzICYgMTI4KSkgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSBpZiAobnVsbCAhPT0gbm9kZS5jaGlsZCkge1xuICAgICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZSA9PT0gcm93KSBicmVhaztcbiAgICAgICAgZm9yICg7IG51bGwgPT09IG5vZGUuc2libGluZzsgKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IG5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSByb3cpIHJldHVybiBudWxsO1xuICAgICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICBpZiAobnVsbCAhPT0gY2FsbGJhY2sgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGtleSA9IFN0cmluZyhjYWxsYmFjayk7XG4gICAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5oYXMoa2V5KSB8fFxuICAgICAgICAgIChkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suYWRkKGtleSksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjdG9yLFxuICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLFxuICAgICAgbmV4dFByb3BzXG4gICAgKSB7XG4gICAgICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZvaWQgMCA9PT0gcGFydGlhbFN0YXRlICYmXG4gICAgICAgICgoY3RvciA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCBcIkNvbXBvbmVudFwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjdG9yKSB8fFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuYWRkKGN0b3IpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpOiBBIHZhbGlkIHN0YXRlIG9iamVjdCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLlwiLFxuICAgICAgICAgICAgY3RvclxuICAgICAgICAgICkpKTtcbiAgICAgIHByZXZTdGF0ZSA9XG4gICAgICAgIG51bGwgPT09IHBhcnRpYWxTdGF0ZSB8fCB2b2lkIDAgPT09IHBhcnRpYWxTdGF0ZVxuICAgICAgICAgID8gcHJldlN0YXRlXG4gICAgICAgICAgOiBhc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBwcmV2U3RhdGU7XG4gICAgICAwID09PSB3b3JrSW5Qcm9ncmVzcy5sYW5lcyAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUuYmFzZVN0YXRlID0gcHJldlN0YXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGN0b3IsXG4gICAgICBvbGRQcm9wcyxcbiAgICAgIG5ld1Byb3BzLFxuICAgICAgb2xkU3RhdGUsXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIG5leHRDb250ZXh0XG4gICAgKSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XG4gICAgICAgIG9sZFByb3BzID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICk7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgb2xkUHJvcHMgPSBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgbmV4dENvbnRleHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdm9pZCAwID09PSBvbGRQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmluZWQgaW5zdGVhZCBvZiBhIGJvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG9sZFByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50XG4gICAgICAgID8gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKVxuICAgICAgICA6ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIG5leHRDb250ZXh0XG4gICAgKSB7XG4gICAgICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICAgIGluc3RhbmNlLnN0YXRlICE9PSBvbGRTdGF0ZSAmJlxuICAgICAgICAoKHdvcmtJblByb2dyZXNzID1cbiAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCBcIkNvbXBvbmVudFwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyh3b3JrSW5Qcm9ncmVzcykgfHxcbiAgICAgICAgICAoZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKSksXG4gICAgICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIGluc3RhbmNlLnN0YXRlLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gICAgICB2YXIgbmV3UHJvcHMgPSBiYXNlUHJvcHM7XG4gICAgICBpZiAoXCJyZWZcIiBpbiBiYXNlUHJvcHMpIHtcbiAgICAgICAgbmV3UHJvcHMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gYmFzZVByb3BzKVxuICAgICAgICAgIFwicmVmXCIgIT09IHByb3BOYW1lICYmIChuZXdQcm9wc1twcm9wTmFtZV0gPSBiYXNlUHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIGlmICgoQ29tcG9uZW50ID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcykpIHtcbiAgICAgICAgbmV3UHJvcHMgPT09IGJhc2VQcm9wcyAmJiAobmV3UHJvcHMgPSBhc3NpZ24oe30sIG5ld1Byb3BzKSk7XG4gICAgICAgIGZvciAodmFyIF9wcm9wTmFtZSBpbiBDb21wb25lbnQpXG4gICAgICAgICAgdm9pZCAwID09PSBuZXdQcm9wc1tfcHJvcE5hbWVdICYmXG4gICAgICAgICAgICAobmV3UHJvcHNbX3Byb3BOYW1lXSA9IENvbXBvbmVudFtfcHJvcE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdQcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmYXVsdE9uVW5jYXVnaHRFcnJvcihlcnJvcikge1xuICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIiVzXFxuXFxuJXNcXG5cIixcbiAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgID8gXCJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgPFwiICsgY29tcG9uZW50TmFtZSArIFwiPiBjb21wb25lbnQuXCJcbiAgICAgICAgICA6IFwiQW4gZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50cy5cIixcbiAgICAgICAgXCJDb25zaWRlciBhZGRpbmcgYW4gZXJyb3IgYm91bmRhcnkgdG8geW91ciB0cmVlIHRvIGN1c3RvbWl6ZSBlcnJvciBoYW5kbGluZyBiZWhhdmlvci5cXG5WaXNpdCBodHRwczovL3JlYWN0LmRldi9saW5rL2Vycm9yLWJvdW5kYXJpZXMgdG8gbGVhcm4gbW9yZSBhYm91dCBlcnJvciBib3VuZGFyaWVzLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZhdWx0T25DYXVnaHRFcnJvcihlcnJvcikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZVxuICAgICAgICAgID8gXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxcIiArIGNvbXBvbmVudE5hbWUgKyBcIj4gY29tcG9uZW50LlwiXG4gICAgICAgICAgOiBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiBvbmUgb2YgeW91ciBSZWFjdCBjb21wb25lbnRzLlwiLFxuICAgICAgICByZWNyZWF0ZU1lc3NhZ2UgPVxuICAgICAgICAgIFwiUmVhY3Qgd2lsbCB0cnkgdG8gcmVjcmVhdGUgdGhpcyBjb21wb25lbnQgdHJlZSBmcm9tIHNjcmF0Y2ggdXNpbmcgdGhlIGVycm9yIGJvdW5kYXJ5IHlvdSBwcm92aWRlZCwgXCIgK1xuICAgICAgICAgICgoZXJyb3JCb3VuZGFyeU5hbWUgfHwgXCJBbm9ueW1vdXNcIikgKyBcIi5cIik7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlcnJvciAmJlxuICAgICAgICBudWxsICE9PSBlcnJvciAmJlxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3IuZW52aXJvbm1lbnROYW1lXG4gICAgICApIHtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGVycm9yLmVudmlyb25tZW50TmFtZTtcbiAgICAgICAgZXJyb3IgPSBbXG4gICAgICAgICAgXCIlb1xcblxcbiVzXFxuXFxuJXNcXG5cIixcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBjb21wb25lbnROYW1lTWVzc2FnZSxcbiAgICAgICAgICByZWNyZWF0ZU1lc3NhZ2VcbiAgICAgICAgXS5zbGljZSgwKTtcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yWzBdXG4gICAgICAgICAgPyBlcnJvci5zcGxpY2UoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgIGJhZGdlRm9ybWF0ICsgZXJyb3JbMF0sXG4gICAgICAgICAgICAgIGJhZGdlU3R5bGUsXG4gICAgICAgICAgICAgIHBhZCArIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCArIHBhZCxcbiAgICAgICAgICAgICAgcmVzZXRTdHlsZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogZXJyb3Iuc3BsaWNlKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICBiYWRnZUZvcm1hdCxcbiAgICAgICAgICAgICAgYmFkZ2VTdHlsZSxcbiAgICAgICAgICAgICAgcGFkICsgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ICsgcGFkLFxuICAgICAgICAgICAgICByZXNldFN0eWxlXG4gICAgICAgICAgICApO1xuICAgICAgICBlcnJvci51bnNoaWZ0KGNvbnNvbGUpO1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBiaW5kLmFwcGx5KGNvbnNvbGUuZXJyb3IsIGVycm9yKTtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KCk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIiVvXFxuXFxuJXNcXG5cXG4lc1xcblwiLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVNZXNzYWdlLFxuICAgICAgICAgIHJlY3JlYXRlTWVzc2FnZVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yKGVycm9yKSB7XG4gICAgICByZXBvcnRHbG9iYWxFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvZ1VuY2F1Z2h0RXJyb3Iocm9vdCwgZXJyb3JJbmZvKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb21wb25lbnROYW1lID0gZXJyb3JJbmZvLnNvdXJjZVxuICAgICAgICAgID8gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihlcnJvckluZm8uc291cmNlKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU5hbWUgPSBudWxsO1xuICAgICAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICAgIGlmIChudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSlcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBvblVuY2F1Z2h0RXJyb3IgPSByb290Lm9uVW5jYXVnaHRFcnJvcjtcbiAgICAgICAgICBvblVuY2F1Z2h0RXJyb3IoZXJyb3IsIHsgY29tcG9uZW50U3RhY2s6IGVycm9ySW5mby5zdGFjayB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSQ1KSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGUkNTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvZ0NhdWdodEVycm9yKHJvb3QsIGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbXBvbmVudE5hbWUgPSBlcnJvckluZm8uc291cmNlXG4gICAgICAgICAgPyBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGVycm9ySW5mby5zb3VyY2UpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBlcnJvckJvdW5kYXJ5TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoYm91bmRhcnkpO1xuICAgICAgICB2YXIgb25DYXVnaHRFcnJvciA9IHJvb3Qub25DYXVnaHRFcnJvcjtcbiAgICAgICAgb25DYXVnaHRFcnJvcihlcnJvckluZm8udmFsdWUsIHtcbiAgICAgICAgICBjb21wb25lbnRTdGFjazogZXJyb3JJbmZvLnN0YWNrLFxuICAgICAgICAgIGVycm9yQm91bmRhcnk6IDEgPT09IGJvdW5kYXJ5LnRhZyA/IGJvdW5kYXJ5LnN0YXRlTm9kZSA6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlJDYpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZSQ2O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3QsIGVycm9ySW5mbywgbGFuZSkge1xuICAgICAgbGFuZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgIGxhbmUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgICAgIGxhbmUucGF5bG9hZCA9IHsgZWxlbWVudDogbnVsbCB9O1xuICAgICAgbGFuZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZXJyb3JJbmZvLnNvdXJjZSwgbG9nVW5jYXVnaHRFcnJvciwgcm9vdCwgZXJyb3JJbmZvKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShsYW5lKSB7XG4gICAgICBsYW5lID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgbGFuZS50YWcgPSBDYXB0dXJlVXBkYXRlO1xuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVDbGFzc0Vycm9yVXBkYXRlKHVwZGF0ZSwgcm9vdCwgZmliZXIsIGVycm9ySW5mbykge1xuICAgICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcikge1xuICAgICAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICAgIHVwZGF0ZS5wYXlsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZXJyb3JJbmZvLnNvdXJjZSxcbiAgICAgICAgICAgIGxvZ0NhdWdodEVycm9yLFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgZXJyb3JJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciBpbnN0ID0gZmliZXIuc3RhdGVOb2RlO1xuICAgICAgbnVsbCAhPT0gaW5zdCAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0LmNvbXBvbmVudERpZENhdGNoICYmXG4gICAgICAgICh1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZXJyb3JJbmZvLnNvdXJjZSxcbiAgICAgICAgICAgIGxvZ0NhdWdodEVycm9yLFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgZXJyb3JJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgJiZcbiAgICAgICAgICAgIChudWxsID09PSBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZFxuICAgICAgICAgICAgICA/IChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG5ldyBTZXQoW3RoaXNdKSlcbiAgICAgICAgICAgICAgOiBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5hZGQodGhpcykpO1xuICAgICAgICAgIGNhbGxDb21wb25lbnREaWRDYXRjaEluREVWKHRoaXMsIGVycm9ySW5mbyk7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIHx8XG4gICAgICAgICAgICAoMCA9PT0gKGZpYmVyLmxhbmVzICYgMikgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIiVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuIEluIHRoYXQgbWV0aG9kLCByZXR1cm4gYSBzdGF0ZSB1cGRhdGUgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIG9yIGZhbGxiYWNrIFVJLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiVW5rbm93blwiXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24oXG4gICAgICByb290LFxuICAgICAgcmV0dXJuRmliZXIsXG4gICAgICBzb3VyY2VGaWJlcixcbiAgICAgIHZhbHVlLFxuICAgICAgcm9vdFJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBzb3VyY2VGaWJlci5mbGFncyB8PSAzMjc2ODtcbiAgICAgIGlzRGV2VG9vbHNQcmVzZW50ICYmIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgcm9vdFJlbmRlckxhbmVzKTtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gdmFsdWUgJiZcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlLnRoZW5cbiAgICAgICkge1xuICAgICAgICByZXR1cm5GaWJlciA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXIgJiZcbiAgICAgICAgICBwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgICAgICByb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgIGlzSHlkcmF0aW5nICYmIChkaWRTdXNwZW5kT3JFcnJvckRFViA9ICEwKTtcbiAgICAgICAgc291cmNlRmliZXIgPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50O1xuICAgICAgICBpZiAobnVsbCAhPT0gc291cmNlRmliZXIpIHtcbiAgICAgICAgICBzd2l0Y2ggKHNvdXJjZUZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudWxsID09PSBzaGVsbEJvdW5kYXJ5XG4gICAgICAgICAgICAgICAgICA/IHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKVxuICAgICAgICAgICAgICAgICAgOiBudWxsID09PSBzb3VyY2VGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluUHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkKSxcbiAgICAgICAgICAgICAgICAoc291cmNlRmliZXIuZmxhZ3MgJj0gLTI1NyksXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgICAoc291cmNlRmliZXIubGFuZXMgPSByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgIHZhbHVlID09PSBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGVcbiAgICAgICAgICAgICAgICAgID8gKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDE2Mzg0KVxuICAgICAgICAgICAgICAgICAgOiAoKHJldHVybkZpYmVyID0gc291cmNlRmliZXIudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgICAgICAgICBudWxsID09PSByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgICAgID8gKHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gbmV3IFNldChbdmFsdWVdKSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHJldHVybkZpYmVyLmFkZCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB2YWx1ZSwgcm9vdFJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PT0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlXG4gICAgICAgICAgICAgICAgICA/IChzb3VyY2VGaWJlci5mbGFncyB8PSAxNjM4NClcbiAgICAgICAgICAgICAgICAgIDogKChyZXR1cm5GaWJlciA9IHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgICAgICA/ICgocmV0dXJuRmliZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZXM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5UXVldWU6IG5ldyBTZXQoW3ZhbHVlXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gcmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICAgICAgICAgIDogKChzb3VyY2VGaWJlciA9IHJldHVybkZpYmVyLnJldHJ5UXVldWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gc291cmNlRmliZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAocmV0dXJuRmliZXIucmV0cnlRdWV1ZSA9IG5ldyBTZXQoW3ZhbHVlXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogc291cmNlRmliZXIuYWRkKHZhbHVlKSksXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB2YWx1ZSwgcm9vdFJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlVuZXhwZWN0ZWQgU3VzcGVuc2UgaGFuZGxlciB0YWcgKFwiICtcbiAgICAgICAgICAgICAgc291cmNlRmliZXIudGFnICtcbiAgICAgICAgICAgICAgXCIpLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgaWYgKGlzSHlkcmF0aW5nKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChkaWRTdXNwZW5kT3JFcnJvckRFViA9ICEwKSxcbiAgICAgICAgICAocmV0dXJuRmliZXIgPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50KSxcbiAgICAgICAgICBudWxsICE9PSByZXR1cm5GaWJlclxuICAgICAgICAgICAgPyAoMCA9PT0gKHJldHVybkZpYmVyLmZsYWdzICYgNjU1MzYpICYmIChyZXR1cm5GaWJlci5mbGFncyB8PSAyNTYpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIubGFuZXMgPSByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICB2YWx1ZSAhPT0gSHlkcmF0aW9uTWlzbWF0Y2hFeGNlcHRpb24gJiZcbiAgICAgICAgICAgICAgICBxdWV1ZUh5ZHJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoXG4gICAgICAgICAgICAgICAgICAgIEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGh5ZHJhdGluZyBidXQgUmVhY3Qgd2FzIGFibGUgdG8gcmVjb3ZlciBieSBpbnN0ZWFkIGNsaWVudCByZW5kZXJpbmcgZnJvbSB0aGUgbmVhcmVzdCBTdXNwZW5zZSBib3VuZGFyeS5cIixcbiAgICAgICAgICAgICAgICAgICAgICB7IGNhdXNlOiB2YWx1ZSB9XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpYmVyXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIDogKHZhbHVlICE9PSBIeWRyYXRpb25NaXNtYXRjaEV4Y2VwdGlvbiAmJlxuICAgICAgICAgICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoXG4gICAgICAgICAgICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihcbiAgICAgICAgICAgICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgaHlkcmF0aW5nIGJ1dCBSZWFjdCB3YXMgYWJsZSB0byByZWNvdmVyIGJ5IGluc3RlYWQgY2xpZW50IHJlbmRlcmluZyB0aGUgZW50aXJlIHJvb3QuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgeyBjYXVzZTogdmFsdWUgfVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWJlclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChyb290ID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZSksXG4gICAgICAgICAgICAgIChyb290LmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgKHJvb3RSZW5kZXJMYW5lcyAmPSAtcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgKHJvb3QubGFuZXMgfD0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgKHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZUZpYmVyKSksXG4gICAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUoXG4gICAgICAgICAgICAgICAgcm9vdC5zdGF0ZU5vZGUsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgcm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUocm9vdCwgcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAhPT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSAmJlxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEVycm9yZWQpKSxcbiAgICAgICAgICAhMVxuICAgICAgICApO1xuICAgICAgdmFyIGVycm9yID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoXG4gICAgICAgIEVycm9yKFxuICAgICAgICAgIFwiVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBjb25jdXJyZW50IHJlbmRlcmluZyBidXQgUmVhY3Qgd2FzIGFibGUgdG8gcmVjb3ZlciBieSBpbnN0ZWFkIHN5bmNocm9ub3VzbHkgcmVuZGVyaW5nIHRoZSBlbnRpcmUgcm9vdC5cIixcbiAgICAgICAgICB7IGNhdXNlOiB2YWx1ZSB9XG4gICAgICAgICksXG4gICAgICAgIHNvdXJjZUZpYmVyXG4gICAgICApO1xuICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9yc1xuICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID0gW2Vycm9yXSlcbiAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAhPT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RFcnJvcmVkKTtcbiAgICAgIGlmIChudWxsID09PSByZXR1cm5GaWJlcikgcmV0dXJuICEwO1xuICAgICAgdmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih2YWx1ZSwgc291cmNlRmliZXIpO1xuICAgICAgc291cmNlRmliZXIgPSByZXR1cm5GaWJlcjtcbiAgICAgIGRvIHtcbiAgICAgICAgc3dpdGNoIChzb3VyY2VGaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoc291cmNlRmliZXIuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgICAgICAocm9vdCA9IHJvb3RSZW5kZXJMYW5lcyAmIC1yb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAoc291cmNlRmliZXIubGFuZXMgfD0gcm9vdCksXG4gICAgICAgICAgICAgIChyb290ID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKFxuICAgICAgICAgICAgICAgIHNvdXJjZUZpYmVyLnN0YXRlTm9kZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICByb290XG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUoc291cmNlRmliZXIsIHJvb3QpLFxuICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgocmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci50eXBlKSxcbiAgICAgICAgICAgICAgKGVycm9yID0gc291cmNlRmliZXIuc3RhdGVOb2RlKSxcbiAgICAgICAgICAgICAgMCA9PT0gKHNvdXJjZUZpYmVyLmZsYWdzICYgMTI4KSAmJlxuICAgICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXR1cm5GaWJlci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgfHxcbiAgICAgICAgICAgICAgICAgIChudWxsICE9PSBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBlcnJvci5jb21wb25lbnREaWRDYXRjaCAmJlxuICAgICAgICAgICAgICAgICAgICAobnVsbCA9PT0gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAhbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGVycm9yKSkpKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoc291cmNlRmliZXIuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgJj0gLXJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmxhbmVzIHw9IHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgKHJvb3RSZW5kZXJMYW5lcyA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUocm9vdFJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUNsYXNzRXJyb3JVcGRhdGUoXG4gICAgICAgICAgICAgICAgICByb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHNvdXJjZUZpYmVyLCByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlRmliZXIgPSBzb3VyY2VGaWJlci5yZXR1cm47XG4gICAgICB9IHdoaWxlIChudWxsICE9PSBzb3VyY2VGaWJlcik7XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmV4dENoaWxkcmVuLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID1cbiAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgID8gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcylcbiAgICAgICAgICA6IHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgY3VycmVudC5jaGlsZCxcbiAgICAgICAgICAgICAgbmV4dENoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBDb21wb25lbnQgPSBDb21wb25lbnQucmVuZGVyO1xuICAgICAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgIGlmIChcInJlZlwiIGluIG5leHRQcm9wcykge1xuICAgICAgICB2YXIgcHJvcHNXaXRob3V0UmVmID0ge307XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBuZXh0UHJvcHMpXG4gICAgICAgICAgXCJyZWZcIiAhPT0ga2V5ICYmIChwcm9wc1dpdGhvdXRSZWZba2V5XSA9IG5leHRQcm9wc1trZXldKTtcbiAgICAgIH0gZWxzZSBwcm9wc1dpdGhvdXRSZWYgPSBuZXh0UHJvcHM7XG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBuZXh0UHJvcHMgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIHByb3BzV2l0aG91dFJlZixcbiAgICAgICAgcmVmLFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICAgIGtleSA9IGNoZWNrRGlkUmVuZGVySWRIb29rKCk7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgIWRpZFJlY2VpdmVVcGRhdGUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICk7XG4gICAgICBpc0h5ZHJhdGluZyAmJiBrZXkgJiYgcHVzaE1hdGVyaWFsaXplZFRyZWVJZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVNZW1vQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgIHZhciB0eXBlID0gQ29tcG9uZW50LnR5cGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgICAgIXNob3VsZENvbnN0cnVjdCh0eXBlKSAmJlxuICAgICAgICAgIHZvaWQgMCA9PT0gdHlwZS5kZWZhdWx0UHJvcHMgJiZcbiAgICAgICAgICBudWxsID09PSBDb21wb25lbnQuY29tcGFyZVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChDb21wb25lbnQgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSkpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRhZyA9IDE1KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50KSxcbiAgICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSksXG4gICAgICAgICAgICB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgICAgICBDb21wb25lbnQudHlwZSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgICAgICBjdXJyZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICByZXR1cm4gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudCk7XG4gICAgICB9XG4gICAgICB0eXBlID0gY3VycmVudC5jaGlsZDtcbiAgICAgIGlmICghY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoY3VycmVudCwgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIHZhciBwcmV2UHJvcHMgPSB0eXBlLm1lbW9pemVkUHJvcHM7XG4gICAgICAgIENvbXBvbmVudCA9IENvbXBvbmVudC5jb21wYXJlO1xuICAgICAgICBDb21wb25lbnQgPSBudWxsICE9PSBDb21wb25lbnQgPyBDb21wb25lbnQgOiBzaGFsbG93RXF1YWw7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBDb21wb25lbnQocHJldlByb3BzLCBuZXh0UHJvcHMpICYmXG4gICAgICAgICAgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZlxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICAgICAgY3VycmVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHR5cGUsIG5leHRQcm9wcyk7XG4gICAgICBjdXJyZW50LnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgIGN1cnJlbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICByZXR1cm4gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNoYWxsb3dFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykgJiZcbiAgICAgICAgICBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmICYmXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gY3VycmVudC50eXBlXG4gICAgICAgIClcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoKGRpZFJlY2VpdmVVcGRhdGUgPSAhMSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzID0gbmV4dFByb3BzID0gcHJldlByb3BzKSxcbiAgICAgICAgICAgIGNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICAwICE9PSAoY3VycmVudC5mbGFncyAmIDEzMTA3MikgJiYgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcyksXG4gICAgICAgICAgICAgIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuLFxuICAgICAgICBwcmV2U3RhdGUgPSBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcbiAgICAgIGlmIChcImhpZGRlblwiID09PSBuZXh0UHJvcHMubW9kZSkge1xuICAgICAgICBpZiAoMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSkge1xuICAgICAgICAgIG5leHRQcm9wcyA9XG4gICAgICAgICAgICBudWxsICE9PSBwcmV2U3RhdGVcbiAgICAgICAgICAgICAgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcztcbiAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICAgICAgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgICAgICAgZm9yIChwcmV2U3RhdGUgPSAwOyBudWxsICE9PSBuZXh0Q2hpbGRyZW47IClcbiAgICAgICAgICAgICAgKHByZXZTdGF0ZSA9XG4gICAgICAgICAgICAgICAgcHJldlN0YXRlIHwgbmV4dENoaWxkcmVuLmxhbmVzIHwgbmV4dENoaWxkcmVuLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgICAgIChuZXh0Q2hpbGRyZW4gPSBuZXh0Q2hpbGRyZW4uc2libGluZyk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gcHJldlN0YXRlICYgfm5leHRQcm9wcztcbiAgICAgICAgICB9IGVsc2UgKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSAwKSwgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCk7XG4gICAgICAgICAgcmV0dXJuIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICgwICE9PSAocmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpKVxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0geyBiYXNlTGFuZXM6IDAsIGNhY2hlUG9vbDogbnVsbCB9KSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgcHVzaFRyYW5zaXRpb24oXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlID8gcHJldlN0YXRlLmNhY2hlUG9vbCA6IG51bGxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG51bGwgIT09IHByZXZTdGF0ZVxuICAgICAgICAgICAgICA/IHB1c2hIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUpXG4gICAgICAgICAgICAgIDogcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gNTM2ODcwOTEyKSxcbiAgICAgICAgICAgIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICAgICAgICAgICAgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICA6IHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICAgICAgPyAocHVzaFRyYW5zaXRpb24od29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZS5jYWNoZVBvb2wpLFxuICAgICAgICAgICAgcHVzaEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZSksXG4gICAgICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSlcbiAgICAgICAgICA6IChudWxsICE9PSBjdXJyZW50ICYmIHB1c2hUcmFuc2l0aW9uKHdvcmtJblByb2dyZXNzLCBudWxsKSxcbiAgICAgICAgICAgIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSk7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmV4dEJhc2VMYW5lcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gcGVla0NhY2hlRnJvbVBvb2woKTtcbiAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9XG4gICAgICAgIG51bGwgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBwYXJlbnQ6IENhY2hlQ29udGV4dC5fY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICBwb29sOiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IG5leHRCYXNlTGFuZXMsXG4gICAgICAgIGNhY2hlUG9vbDogSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICB9O1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwdXNoVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMsICEwKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgICAgaWYgKG51bGwgPT09IHJlZilcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQucmVmICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQ4MTYpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiByZWYgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHJlZilcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgcmVmIHRvIGJlIGEgZnVuY3Rpb24sIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgdW5kZWZpbmVkL251bGwuXCJcbiAgICAgICAgICApO1xuICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCB8fCBjdXJyZW50LnJlZiAhPT0gcmVmKVxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQ4MTY7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgQ29tcG9uZW50LnByb3RvdHlwZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQucHJvdG90eXBlLnJlbmRlclxuICAgICAgKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCI7XG4gICAgICAgIGRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdIHx8XG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gaGF2ZSBhIHJlbmRlciBtZXRob2QsIGJ1dCBkb2Vzbid0IGV4dGVuZCBSZWFjdC5Db21wb25lbnQuIFRoaXMgaXMgbGlrZWx5IHRvIGNhdXNlIGVycm9ycy4gQ2hhbmdlICVzIHRvIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSAhMCkpO1xuICAgICAgfVxuICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgICAgbnVsbCA9PT0gY3VycmVudCAmJlxuICAgICAgICAodmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgQ29tcG9uZW50LmNvbnRleHRUeXBlcyAmJlxuICAgICAgICAgICgoY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiKSxcbiAgICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZXNbY29tcG9uZW50TmFtZV0gfHxcbiAgICAgICAgICAgICgoZGlkV2FybkFib3V0Q29udGV4dFR5cGVzW2NvbXBvbmVudE5hbWVdID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCIlcyB1c2VzIHRoZSBsZWdhY3kgY29udGV4dFR5cGVzIEFQSSB3aGljaCB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gVXNlIFJlYWN0LmNyZWF0ZUNvbnRleHQoKSB3aXRoIFJlYWN0LnVzZUNvbnRleHQoKSBpbnN0ZWFkLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9sZWdhY3ktY29udGV4dClcIixcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKSkpKTtcbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIENvbXBvbmVudCA9IHJlbmRlcldpdGhIb29rcyhcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgICAgbmV4dFByb3BzID0gY2hlY2tEaWRSZW5kZXJJZEhvb2soKTtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCk7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICAgICAgKTtcbiAgICAgIGlzSHlkcmF0aW5nICYmIG5leHRQcm9wcyAmJiBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcGxheUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgc2Vjb25kQXJnLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgY3VycmVudC50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgbmV4dFByb3BzID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgc2Vjb25kQXJnXG4gICAgICApO1xuICAgICAgZmluaXNoUmVuZGVyaW5nSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgQ29tcG9uZW50ID0gY2hlY2tEaWRSZW5kZXJJZEhvb2soKTtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCk7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICAgICAgKTtcbiAgICAgIGlzSHlkcmF0aW5nICYmIENvbXBvbmVudCAmJiBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoc2hvdWxkRXJyb3JJbXBsKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICBjYXNlICExOlxuICAgICAgICAgIHZhciBfaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUsXG4gICAgICAgICAgICBzdGF0ZSA9IG5ldyB3b3JrSW5Qcm9ncmVzcy50eXBlKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICBfaW5zdGFuY2UuY29udGV4dFxuICAgICAgICAgICAgKS5zdGF0ZTtcbiAgICAgICAgICBfaW5zdGFuY2UudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUoX2luc3RhbmNlLCBzdGF0ZSwgbnVsbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgITA6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4O1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDY1NTM2O1xuICAgICAgICAgIF9pbnN0YW5jZSA9IEVycm9yKFwiU2ltdWxhdGVkIGVycm9yIGNvbWluZyBmcm9tIERldlRvb2xzXCIpO1xuICAgICAgICAgIHZhciBsYW5lID0gcmVuZGVyTGFuZXMgJiAtcmVuZGVyTGFuZXM7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgfD0gbGFuZTtcbiAgICAgICAgICBzdGF0ZSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gc3RhdGUpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgbGFuZSA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUobGFuZSk7XG4gICAgICAgICAgaW5pdGlhbGl6ZUNsYXNzRXJyb3JVcGRhdGUoXG4gICAgICAgICAgICBsYW5lLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKF9pbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGxhbmUpO1xuICAgICAgfVxuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSkge1xuICAgICAgICBzdGF0ZSA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgICAgX2luc3RhbmNlID0gQ29tcG9uZW50LmNvbnRleHRUeXBlO1xuICAgICAgICBcImNvbnRleHRUeXBlXCIgaW4gQ29tcG9uZW50ICYmXG4gICAgICAgICAgbnVsbCAhPT0gX2luc3RhbmNlICYmXG4gICAgICAgICAgKHZvaWQgMCA9PT0gX2luc3RhbmNlIHx8IF9pbnN0YW5jZS4kJHR5cGVvZiAhPT0gUkVBQ1RfQ09OVEVYVF9UWVBFKSAmJlxuICAgICAgICAgICFkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuaGFzKENvbXBvbmVudCkgJiZcbiAgICAgICAgICAoZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmFkZChDb21wb25lbnQpLFxuICAgICAgICAgIChsYW5lID1cbiAgICAgICAgICAgIHZvaWQgMCA9PT0gX2luc3RhbmNlXG4gICAgICAgICAgICAgID8gXCIgSG93ZXZlciwgaXQgaXMgc2V0IHRvIHVuZGVmaW5lZC4gVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgdHlwbyBvciBieSBtaXhpbmcgdXAgbmFtZWQgYW5kIGRlZmF1bHQgaW1wb3J0cy4gVGhpcyBjYW4gYWxzbyBoYXBwZW4gZHVlIHRvIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSwgc28gdHJ5IG1vdmluZyB0aGUgY3JlYXRlQ29udGV4dCgpIGNhbGwgdG8gYSBzZXBhcmF0ZSBmaWxlLlwiXG4gICAgICAgICAgICAgIDogXCJvYmplY3RcIiAhPT0gdHlwZW9mIF9pbnN0YW5jZVxuICAgICAgICAgICAgICAgID8gXCIgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGEgXCIgKyB0eXBlb2YgX2luc3RhbmNlICsgXCIuXCJcbiAgICAgICAgICAgICAgICA6IF9pbnN0YW5jZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRVxuICAgICAgICAgICAgICAgICAgPyBcIiBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LkNvbnN1bWVyIGluc3RlYWQ/XCJcbiAgICAgICAgICAgICAgICAgIDogXCIgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGFuIG9iamVjdCB3aXRoIGtleXMge1wiICtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoX2luc3RhbmNlKS5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIn0uXCIpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGRlZmluZXMgYW4gaW52YWxpZCBjb250ZXh0VHlwZS4gY29udGV4dFR5cGUgc2hvdWxkIHBvaW50IHRvIHRoZSBDb250ZXh0IG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVDb250ZXh0KCkuJXNcIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQ29tcG9uZW50XCIsXG4gICAgICAgICAgICBsYW5lXG4gICAgICAgICAgKSk7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBfaW5zdGFuY2UgJiZcbiAgICAgICAgICBudWxsICE9PSBfaW5zdGFuY2UgJiZcbiAgICAgICAgICAoc3RhdGUgPSByZWFkQ29udGV4dChfaW5zdGFuY2UpKTtcbiAgICAgICAgX2luc3RhbmNlID0gbmV3IENvbXBvbmVudChuZXh0UHJvcHMsIHN0YXRlKTtcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBfaW5zdGFuY2UgPSBuZXcgQ29tcG9uZW50KG5leHRQcm9wcywgc3RhdGUpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgbnVsbCAhPT0gX2luc3RhbmNlLnN0YXRlICYmIHZvaWQgMCAhPT0gX2luc3RhbmNlLnN0YXRlXG4gICAgICAgICAgICA/IF9pbnN0YW5jZS5zdGF0ZVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBfaW5zdGFuY2UudXBkYXRlciA9IGNsYXNzQ29tcG9uZW50VXBkYXRlcjtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gX2luc3RhbmNlO1xuICAgICAgICBfaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxzID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIF9pbnN0YW5jZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gZmFrZUludGVybmFsSW5zdGFuY2U7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgJiZcbiAgICAgICAgICBudWxsID09PSBzdGF0ZSAmJlxuICAgICAgICAgICgoc3RhdGUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkNvbXBvbmVudFwiKSxcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuaGFzKHN0YXRlKSB8fFxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5hZGQoc3RhdGUpLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJgJXNgIHVzZXMgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYnV0IGl0cyBpbml0aWFsIHN0YXRlIGlzICVzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZC4gSW5zdGVhZCwgZGVmaW5lIHRoZSBpbml0aWFsIHN0YXRlIGJ5IGFzc2lnbmluZyBhbiBvYmplY3QgdG8gYHRoaXMuc3RhdGVgIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBgJXNgLiBUaGlzIGVuc3VyZXMgdGhhdCBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBhcmd1bWVudHMgaGF2ZSBhIGNvbnNpc3RlbnQgc2hhcGUuXCIsXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBudWxsID09PSBfaW5zdGFuY2Uuc3RhdGUgPyBcIm51bGxcIiA6IFwidW5kZWZpbmVkXCIsXG4gICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICApKSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gKGxhbmUgPSBzdGF0ZSA9IG51bGwpO1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAhMCAhPT0gX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nXG4gICAgICAgICAgICA/IChzdGF0ZSA9IFwiY29tcG9uZW50V2lsbE1vdW50XCIpXG4gICAgICAgICAgICA6IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICAgIChzdGF0ZSA9IFwiVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFwiKTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgICEwICE9PVxuICAgICAgICAgICAgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgICAgPyAobGFuZSA9IFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiKVxuICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgICAgICAobGFuZSA9IFwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIik7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAhMCAhPT0gX2luc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgICAgPyAoZm91bmRXaWxsVXBkYXRlTmFtZSA9IFwiY29tcG9uZW50V2lsbFVwZGF0ZVwiKVxuICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAgICAgKGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBcIlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlXCIpO1xuICAgICAgICAgIGlmIChudWxsICE9PSBzdGF0ZSB8fCBudWxsICE9PSBsYW5lIHx8IG51bGwgIT09IGZvdW5kV2lsbFVwZGF0ZU5hbWUpIHtcbiAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQ29tcG9uZW50XCI7XG4gICAgICAgICAgICB2YXIgbmV3QXBpTmFtZSA9XG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgICAgICAgICAgICAgICA/IFwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKClcIlxuICAgICAgICAgICAgICAgIDogXCJnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpXCI7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmhhcyhfaW5zdGFuY2UpIHx8XG4gICAgICAgICAgICAgIChkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmFkZChfaW5zdGFuY2UpLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuJXMgdXNlcyAlcyBidXQgYWxzbyBjb250YWlucyB0aGUgZm9sbG93aW5nIGxlZ2FjeSBsaWZlY3ljbGVzOiVzJXMlc1xcblxcblRoZSBhYm92ZSBsaWZlY3ljbGVzIHNob3VsZCBiZSByZW1vdmVkLiBMZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOlxcbmh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzXCIsXG4gICAgICAgICAgICAgICAgX2luc3RhbmNlLFxuICAgICAgICAgICAgICAgIG5ld0FwaU5hbWUsXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gc3RhdGUgPyBcIlxcbiAgXCIgKyBzdGF0ZSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gbGFuZSA/IFwiXFxuICBcIiArIGxhbmUgOiBcIlwiLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IGZvdW5kV2lsbFVwZGF0ZU5hbWUgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogXCJcIlxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBzdGF0ZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQ29tcG9uZW50XCI7XG4gICAgICAgIF9pbnN0YW5jZS5yZW5kZXIgfHxcbiAgICAgICAgICAoQ29tcG9uZW50LnByb3RvdHlwZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyXG4gICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlICVzIGluc3RhbmNlOiBkaWQgeW91IGFjY2lkZW50YWxseSByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yP1wiLFxuICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIk5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgJXMgaW5zdGFuY2U6IHlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZGVmaW5lIGByZW5kZXJgLlwiLFxuICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAhX2luc3RhbmNlLmdldEluaXRpYWxTdGF0ZSB8fFxuICAgICAgICAgIF9pbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgfHxcbiAgICAgICAgICBfaW5zdGFuY2Uuc3RhdGUgfHxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJnZXRJbml0aWFsU3RhdGUgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiBEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD9cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgX2luc3RhbmNlLmdldERlZmF1bHRQcm9wcyAmJlxuICAgICAgICAgICFfaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgX2luc3RhbmNlLmNvbnRleHRUeXBlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiY29udGV4dFR5cGUgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzICYmXG4gICAgICAgICAgIWRpZFdhcm5BYm91dENoaWxkQ29udGV4dFR5cGVzLmhhcyhDb21wb25lbnQpICYmXG4gICAgICAgICAgKGRpZFdhcm5BYm91dENoaWxkQ29udGV4dFR5cGVzLmFkZChDb21wb25lbnQpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIHVzZXMgdGhlIGxlZ2FjeSBjaGlsZENvbnRleHRUeXBlcyBBUEkgd2hpY2ggd2FzIHJlbW92ZWQgaW4gUmVhY3QgMTkuIFVzZSBSZWFjdC5jcmVhdGVDb250ZXh0KCkgaW5zdGVhZC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvbGVnYWN5LWNvbnRleHQpXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICkpO1xuICAgICAgICBDb21wb25lbnQuY29udGV4dFR5cGVzICYmXG4gICAgICAgICAgIWRpZFdhcm5BYm91dENvbnRleHRUeXBlcyQxLmhhcyhDb21wb25lbnQpICYmXG4gICAgICAgICAgKGRpZFdhcm5BYm91dENvbnRleHRUeXBlcyQxLmFkZChDb21wb25lbnQpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIHVzZXMgdGhlIGxlZ2FjeSBjb250ZXh0VHlwZXMgQVBJIHdoaWNoIHdhcyByZW1vdmVkIGluIFJlYWN0IDE5LiBVc2UgUmVhY3QuY3JlYXRlQ29udGV4dCgpIHdpdGggc3RhdGljIGNvbnRleHRUeXBlIGluc3RlYWQuIChodHRwczovL3JlYWN0LmRldi9saW5rL2xlZ2FjeS1jb250ZXh0KVwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBDb21wb25lbnQucHJvdG90eXBlICYmXG4gICAgICAgICAgQ29tcG9uZW50LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCAmJlxuICAgICAgICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBzaG91bGRDb21wb25lbnRVcGRhdGUoKS4gc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiBQbGVhc2UgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdXNlZC5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQSBwdXJlIGNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZFVubW91bnQgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBoYXMgYSBtZXRob2QgY2FsbGVkIGNvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxVbm1vdW50KCk/XCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBoYXMgYSBtZXRob2QgY2FsbGVkIGNvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiBJZiB5b3UgbWVhbnQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiByZXNwb25zZSB0byBjaGFuZ2luZyBwcm9wcywgdXNlIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKS4gSWYgeW91IG1lYW50IHRvIGZldGNoIGRhdGEgb3IgcnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBjb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/XCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/XCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIGxhbmUgPSBfaW5zdGFuY2UucHJvcHMgIT09IG5leHRQcm9wcztcbiAgICAgICAgdm9pZCAwICE9PSBfaW5zdGFuY2UucHJvcHMgJiZcbiAgICAgICAgICBsYW5lICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiV2hlbiBjYWxsaW5nIHN1cGVyKCkgaW4gYCVzYCwgbWFrZSBzdXJlIHRvIHBhc3MgdXAgdGhlIHNhbWUgcHJvcHMgdGhhdCB5b3VyIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIHdhcyBwYXNzZWQuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIF9pbnN0YW5jZS5kZWZhdWx0UHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJTZXR0aW5nIGRlZmF1bHRQcm9wcyBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlZmluZSBkZWZhdWx0UHJvcHMgYXMgYSBzdGF0aWMgcHJvcGVydHkgb24gJXMuXCIsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSB8fFxuICAgICAgICAgIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5oYXMoQ29tcG9uZW50KSB8fFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuYWRkKENvbXBvbmVudCksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgc2hvdWxkIGJlIHVzZWQgd2l0aCBjb21wb25lbnREaWRVcGRhdGUoKS4gVGhpcyBjb21wb25lbnQgZGVmaW5lcyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIG9ubHkuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KVxuICAgICAgICAgICkpO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kIGFuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kIGFuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIG1ldGhvZCBhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGFuIGluc3RhbmNlIG1ldGhvZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgKGxhbmUgPSBfaW5zdGFuY2Uuc3RhdGUpICYmXG4gICAgICAgICAgKFwib2JqZWN0XCIgIT09IHR5cGVvZiBsYW5lIHx8IGlzQXJyYXlJbXBsKGxhbmUpKSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCIlcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9yIG51bGxcIiwgc3RhdGUpO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ICYmXG4gICAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gdXNlIGdldENoaWxkQ29udGV4dCgpLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBfaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgIF9pbnN0YW5jZS5wcm9wcyA9IG5leHRQcm9wcztcbiAgICAgICAgX2luc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX2luc3RhbmNlLnJlZnMgPSB7fTtcbiAgICAgICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgc3RhdGUgPSBDb21wb25lbnQuY29udGV4dFR5cGU7XG4gICAgICAgIF9pbnN0YW5jZS5jb250ZXh0ID1cbiAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygc3RhdGUgJiYgbnVsbCAhPT0gc3RhdGVcbiAgICAgICAgICAgID8gcmVhZENvbnRleHQoc3RhdGUpXG4gICAgICAgICAgICA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgICAgX2luc3RhbmNlLnN0YXRlID09PSBuZXh0UHJvcHMgJiZcbiAgICAgICAgICAoKHN0YXRlID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJDb21wb25lbnRcIiksXG4gICAgICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuaGFzKHN0YXRlKSB8fFxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmFkZChzdGF0ZSksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIiVzOiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYXNzaWduIHByb3BzIGRpcmVjdGx5IHRvIHN0YXRlIGJlY2F1c2UgdXBkYXRlcyB0byBwcm9wcyB3b24ndCBiZSByZWZsZWN0ZWQgaW4gc3RhdGUuIEluIG1vc3QgY2FzZXMsIGl0IGlzIGJldHRlciB0byB1c2UgcHJvcHMgZGlyZWN0bHkuXCIsXG4gICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICApKSk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmXG4gICAgICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIF9pbnN0YW5jZVxuICAgICAgICAgICk7XG4gICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIF9pbnN0YW5jZVxuICAgICAgICApO1xuICAgICAgICBfaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICBzdGF0ZSA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHN0YXRlICYmXG4gICAgICAgICAgKGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIG5leHRQcm9wc1xuICAgICAgICAgICksXG4gICAgICAgICAgKF9pbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCkgfHxcbiAgICAgICAgICAoKHN0YXRlID0gX2luc3RhbmNlLnN0YXRlKSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgICAgICAgc3RhdGUgIT09IF9pbnN0YW5jZS5zdGF0ZSAmJlxuICAgICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMuY29tcG9uZW50V2lsbE1vdW50KCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLnN0YXRlIGlzIGRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoXG4gICAgICAgICAgICAgIF9pbnN0YW5jZSxcbiAgICAgICAgICAgICAgX2luc3RhbmNlLnN0YXRlLFxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgX2luc3RhbmNlLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpLFxuICAgICAgICAgIChfaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KTtcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMzQyMTc3MjgpO1xuICAgICAgICBfaW5zdGFuY2UgPSAhMDtcbiAgICAgIH0gZWxzZSBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICBfaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgIHZhciB1bnJlc29sdmVkT2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICAgICAgICBsYW5lID0gcmVzb2x2ZUNsYXNzQ29tcG9uZW50UHJvcHMoQ29tcG9uZW50LCB1bnJlc29sdmVkT2xkUHJvcHMpO1xuICAgICAgICBfaW5zdGFuY2UucHJvcHMgPSBsYW5lO1xuICAgICAgICB2YXIgb2xkQ29udGV4dCA9IF9pbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gQ29tcG9uZW50LmNvbnRleHRUeXBlO1xuICAgICAgICBzdGF0ZSA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGZvdW5kV2lsbFVwZGF0ZU5hbWUgJiZcbiAgICAgICAgICBudWxsICE9PSBmb3VuZFdpbGxVcGRhdGVOYW1lICYmXG4gICAgICAgICAgKHN0YXRlID0gcmVhZENvbnRleHQoZm91bmRXaWxsVXBkYXRlTmFtZSkpO1xuICAgICAgICBuZXdBcGlOYW1lID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3QXBpTmFtZSB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcbiAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzICE9PSB1bnJlc29sdmVkT2xkUHJvcHM7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgfHxcbiAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcykgfHxcbiAgICAgICAgICAoKHVucmVzb2x2ZWRPbGRQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBzdGF0ZSkgJiZcbiAgICAgICAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgX2luc3RhbmNlLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICApKTtcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbiAgICAgICAgdmFyIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX2luc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gICAgICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBfaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpO1xuICAgICAgICBvbGRDb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzIHx8IG9sZFN0YXRlICE9PSBvbGRDb250ZXh0IHx8IGhhc0ZvcmNlVXBkYXRlXG4gICAgICAgICAgPyAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3QXBpTmFtZSAmJlxuICAgICAgICAgICAgICAoYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIG5ld0FwaU5hbWUsXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChvbGRDb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSkpLFxuICAgICAgICAgICAgKGxhbmUgPVxuICAgICAgICAgICAgICBoYXNGb3JjZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgbGFuZSxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgb2xkU3RhdGUsXG4gICAgICAgICAgICAgICAgb2xkQ29udGV4dCxcbiAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICA/IChmb3VuZFdpbGxVcGRhdGVOYW1lIHx8XG4gICAgICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCkgfHxcbiAgICAgICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKSxcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLFxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDgpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMzQyMTc3MjgpKVxuICAgICAgICAgICAgICA6IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgJiZcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTM0MjE3NzI4KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBvbGRDb250ZXh0KSksXG4gICAgICAgICAgICAoX2luc3RhbmNlLnByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2Uuc3RhdGUgPSBvbGRDb250ZXh0KSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UuY29udGV4dCA9IHN0YXRlKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UgPSBsYW5lKSlcbiAgICAgICAgICA6IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDgpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTM0MjE3NzI4KSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UgPSAhMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gcmVzb2x2ZUNsYXNzQ29tcG9uZW50UHJvcHMoQ29tcG9uZW50LCBzdGF0ZSk7XG4gICAgICAgIF9pbnN0YW5jZS5wcm9wcyA9IGZvdW5kV2lsbFVwZGF0ZU5hbWU7XG4gICAgICAgIG5ld0FwaU5hbWUgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgIG9sZFN0YXRlID0gX2luc3RhbmNlLmNvbnRleHQ7XG4gICAgICAgIG9sZENvbnRleHQgPSBDb21wb25lbnQuY29udGV4dFR5cGU7XG4gICAgICAgIGxhbmUgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvbGRDb250ZXh0ICYmXG4gICAgICAgICAgbnVsbCAhPT0gb2xkQ29udGV4dCAmJlxuICAgICAgICAgIChsYW5lID0gcmVhZENvbnRleHQob2xkQ29udGV4dCkpO1xuICAgICAgICB1bnJlc29sdmVkT2xkUHJvcHMgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICAgICAgICAob2xkQ29udGV4dCA9XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdW5yZXNvbHZlZE9sZFByb3BzIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKSB8fFxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSB8fFxuICAgICAgICAgICgoc3RhdGUgIT09IG5ld0FwaU5hbWUgfHwgb2xkU3RhdGUgIT09IGxhbmUpICYmXG4gICAgICAgICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIF9pbnN0YW5jZSxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICBsYW5lXG4gICAgICAgICAgICApKTtcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbiAgICAgICAgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIF9pbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCk7XG4gICAgICAgIHZhciBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHN0YXRlICE9PSBuZXdBcGlOYW1lIHx8XG4gICAgICAgIG9sZFN0YXRlICE9PSBuZXdTdGF0ZSB8fFxuICAgICAgICBoYXNGb3JjZVVwZGF0ZSB8fFxuICAgICAgICAobnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQuZGVwZW5kZW5jaWVzICYmXG4gICAgICAgICAgY2hlY2tJZkNvbnRleHRDaGFuZ2VkKGN1cnJlbnQuZGVwZW5kZW5jaWVzKSlcbiAgICAgICAgICA/IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB1bnJlc29sdmVkT2xkUHJvcHMgJiZcbiAgICAgICAgICAgICAgKGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB1bnJlc29sdmVkT2xkUHJvcHMsXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKSxcbiAgICAgICAgICAgIChmb3VuZFdpbGxVcGRhdGVOYW1lID1cbiAgICAgICAgICAgICAgaGFzRm9yY2VVcGRhdGUgfHxcbiAgICAgICAgICAgICAgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUsXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgIG9sZFN0YXRlLFxuICAgICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICAgIGxhbmVcbiAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQuZGVwZW5kZW5jaWVzICYmXG4gICAgICAgICAgICAgICAgY2hlY2tJZkNvbnRleHRDaGFuZ2VkKGN1cnJlbnQuZGVwZW5kZW5jaWVzKSkpXG4gICAgICAgICAgICAgID8gKG9sZENvbnRleHQgfHxcbiAgICAgICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUobmV4dFByb3BzLCBuZXdTdGF0ZSwgbGFuZSksXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSlcbiAgICAgICAgICAgICAgOiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgKHN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgICAgb2xkU3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgfHxcbiAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTAyNCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXh0UHJvcHMpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGUpKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UucHJvcHMgPSBuZXh0UHJvcHMpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UuY29udGV4dCA9IGxhbmUpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZSA9IGZvdW5kV2lsbFVwZGF0ZU5hbWUpKVxuICAgICAgICAgIDogKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgfHxcbiAgICAgICAgICAgICAgKHN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgICAgICBvbGRTdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgfHxcbiAgICAgICAgICAgICAgKHN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgICAgICBvbGRTdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTAyNCksXG4gICAgICAgICAgICAoX2luc3RhbmNlID0gITEpKTtcbiAgICAgIH1cbiAgICAgIGxhbmUgPSBfaW5zdGFuY2U7XG4gICAgICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHN0YXRlID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KTtcbiAgICAgIGlmIChsYW5lIHx8IHN0YXRlKSB7XG4gICAgICAgIGxhbmUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIGlmIChzdGF0ZSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKVxuICAgICAgICAgIChDb21wb25lbnQgPSBudWxsKSwgKHByb2ZpbGVyU3RhcnRUaW1lID0gLTEpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgQ29tcG9uZW50ID0gY2FsbFJlbmRlckluREVWKGxhbmUpO1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY2FsbFJlbmRlckluREVWKGxhbmUpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgc3RhdGVcbiAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGN1cnJlbnQuY2hpbGQsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSkpXG4gICAgICAgICAgOiByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBsYW5lLnN0YXRlO1xuICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICB9IGVsc2VcbiAgICAgICAgY3VycmVudCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgcmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICBfaW5zdGFuY2UgJiZcbiAgICAgICAgcmVuZGVyTGFuZXMucHJvcHMgIT09IG5leHRQcm9wcyAmJlxuICAgICAgICAoZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyB8fFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkl0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGNhbiBsZWFkIHRvIGNvbmZ1c2luZyBidWdzLlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJhIGNvbXBvbmVudFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSAhMCkpO1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmV4dENoaWxkcmVuLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDI1NjtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpIHtcbiAgICAgIENvbXBvbmVudCAmJlxuICAgICAgICBDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcImNoaWxkQ29udGV4dFR5cGVzIGNhbm5vdCBiZSBkZWZpbmVkIG9uIGEgZnVuY3Rpb24gY29tcG9uZW50LlxcbiAgJXMuY2hpbGRDb250ZXh0VHlwZXMgPSAuLi5cIixcbiAgICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICApO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAmJlxuICAgICAgICAoKHdvcmtJblByb2dyZXNzID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCIpLFxuICAgICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W3dvcmtJblByb2dyZXNzXSB8fFxuICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuXCIsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbd29ya0luUHJvZ3Jlc3NdID1cbiAgICAgICAgICAgICEwKSkpO1xuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIENvbXBvbmVudC5jb250ZXh0VHlwZSAmJlxuICAgICAgICBudWxsICE9PSBDb21wb25lbnQuY29udGV4dFR5cGUgJiZcbiAgICAgICAgKChDb21wb25lbnQgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIiksXG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtDb21wb25lbnRdIHx8XG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGNvbnRleHRUeXBlLlwiLFxuICAgICAgICAgICAgQ29tcG9uZW50XG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W0NvbXBvbmVudF0gPSAhMCkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSB7XG4gICAgICByZXR1cm4geyBiYXNlTGFuZXM6IHJlbmRlckxhbmVzLCBjYWNoZVBvb2w6IGdldFN1c3BlbmRlZENhY2hlKCkgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICBjdXJyZW50LFxuICAgICAgcHJpbWFyeVRyZWVEaWREZWZlcixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQuY2hpbGRMYW5lcyAmIH5yZW5kZXJMYW5lcyA6IDA7XG4gICAgICBwcmltYXJ5VHJlZURpZERlZmVyICYmIChjdXJyZW50IHw9IHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lKTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTE7XG4gICAgICB2YXIgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICBzaG91bGRTdXNwZW5kSW1wbCh3b3JrSW5Qcm9ncmVzcykgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCk7XG4gICAgICB2YXIgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMgPSAhMTtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KTtcbiAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEgPSBkaWRTdXNwZW5kKSB8fFxuICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxID1cbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIG51bGwgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgPyAhMVxuICAgICAgICAgICAgOiAwICE9PSAoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50ICYgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSk7XG4gICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEgJiZcbiAgICAgICAgKChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyA9ICEwKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xMjkpKTtcbiAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDMyKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0zMztcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzXG4gICAgICAgICAgICA/IHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgIDogcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcbiAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXA7XG4gICAgICAgICAgICBpZiAoIShKU0NvbXBpbGVyX3RlbXAgPSAhSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCkpIHtcbiAgICAgICAgICAgICAgYzoge1xuICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTA7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IHJvb3RPclNpbmdsZXRvbkNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICA4ICE9PSBpbnN0YW5jZS5ub2RlVHlwZTtcblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFKU0NvbXBpbGVyX3RlbXApIHtcbiAgICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGM7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IGluc3RhbmNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG51bGwgIT09IEpTQ29tcGlsZXJfdGVtcFxuICAgICAgICAgICAgICAgID8gKHdhcm5JZk5vdEh5ZHJhdGluZygpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRlaHlkcmF0ZWQ6IEpTQ29tcGlsZXJfdGVtcCxcbiAgICAgICAgICAgICAgICAgICAgdHJlZUNvbnRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gdHJlZUNvbnRleHRQcm92aWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7IGlkOiB0cmVlQ29udGV4dElkLCBvdmVyZmxvdzogdHJlZUNvbnRleHRPdmVyZmxvdyB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5TGFuZTogNTM2ODcwOTEyLFxuICAgICAgICAgICAgICAgICAgICBoeWRyYXRpb25FcnJvcnM6IG51bGxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKGluc3RhbmNlID0gY3JlYXRlRmliZXIoMTgsIG51bGwsIG51bGwsIE5vTW9kZSkpLFxuICAgICAgICAgICAgICAgICAgKGluc3RhbmNlLnN0YXRlTm9kZSA9IEpTQ29tcGlsZXJfdGVtcCksXG4gICAgICAgICAgICAgICAgICAoaW5zdGFuY2UucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX3RlbXAgPSAhMCkpXG4gICAgICAgICAgICAgICAgOiAoSlNDb21waWxlcl90ZW1wID0gITEpO1xuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSAhSlNDb21waWxlcl90ZW1wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wICYmXG4gICAgICAgICAgICAgICh3YXJuTm9uSHlkcmF0ZWRJbnN0YW5jZShcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsICE9PSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwICYmXG4gICAgICAgICAgICAoKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAgPVxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwLmRlaHlkcmF0ZWQpLFxuICAgICAgICAgICAgbnVsbCAhPT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MClcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwKVxuICAgICAgICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzLmxhbmVzID0gMzIpXG4gICAgICAgICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSA1MzY4NzA5MTIpLFxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cbiAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCA9XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIuY2hpbGRyZW47XG4gICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyID1cbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mi5mYWxsYmFjaztcbiAgICAgICAgaWYgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzID1cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCA9XG4gICAgICAgICAgICAgIG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBtb2RlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwLnNpYmxpbmcgPVxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyA9XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1My5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgICAgICAgbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMuY2hpbGRMYW5lcyA9XG4gICAgICAgICAgICAgIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSKSxcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyXG4gICAgICAgICAgKTtcbiAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlICYmXG4gICAgICAgICgoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCA9IHByZXZTdGF0ZS5kZWh5ZHJhdGVkKSxcbiAgICAgICAgbnVsbCAhPT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MClcbiAgICAgICkge1xuICAgICAgICBpZiAoZGlkU3VzcGVuZClcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NlxuICAgICAgICAgICAgPyAocHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0yNTcpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgOiBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICAgID8gKHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gbnVsbCkpXG4gICAgICAgICAgICAgIDogKHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzID1cbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLmZhbGxiYWNrKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCA9IHdvcmtJblByb2dyZXNzLm1vZGUpLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiA9XG4gICAgICAgICAgICAgICAgICBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBtb2RlOiBcInZpc2libGVcIixcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MFxuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzID1cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyxcbiAgICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1My5mbGFncyB8PSAyKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1My5yZXR1cm4gPVxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mi5zaWJsaW5nID1cbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiksXG4gICAgICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQuY2hpbGQsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgICAgICAgICBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIuY2hpbGRMYW5lcyA9XG4gICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxLFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPVxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMpKTtcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgKHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgaXNIeWRyYXRpbmcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiV2Ugc2hvdWxkIG5vdCBiZSBoeWRyYXRpbmcgaGVyZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYSBidWcuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCkpXG4gICAgICAgICkge1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSA9XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwLm5leHRTaWJsaW5nICYmXG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwLm5leHRTaWJsaW5nLmRhdGFzZXQ7XG4gICAgICAgICAgaWYgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSkge1xuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxLmRnc3Q7XG4gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MS5tc2c7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MS5zdGNrO1xuICAgICAgICAgICAgdmFyIGNvbXBvbmVudFN0YWNrID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxLmNzdGNrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwID0gbWVzc2FnZTtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEgPSBKU0NvbXBpbGVyX3RlbXA7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIgPSBpbnN0YW5jZTtcbiAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyA9XG4gICAgICAgICAgICBjb21wb25lbnRTdGFjaztcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyA9XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwXG4gICAgICAgICAgICAgID8gRXJyb3IoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MClcbiAgICAgICAgICAgICAgOiBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiVGhlIHNlcnZlciBjb3VsZCBub3QgZmluaXNoIHRoaXMgU3VzcGVuc2UgYm91bmRhcnksIGxpa2VseSBkdWUgdG8gYW4gZXJyb3IgZHVyaW5nIHNlcnZlciByZW5kZXJpbmcuIFN3aXRjaGVkIHRvIGNsaWVudCByZW5kZXJpbmcuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzLnN0YWNrID1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyIHx8IFwiXCI7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMuZGlnZXN0ID1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MTtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI0NTEgPVxuICAgICAgICAgICAgdm9pZCAwID09PSBKU0NvbXBpbGVyX3RlbXAgPyBudWxsIDogSlNDb21waWxlcl90ZW1wO1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyID0ge1xuICAgICAgICAgICAgdmFsdWU6IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzLFxuICAgICAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICAgICAgc3RhY2s6IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MVxuICAgICAgICAgIH07XG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSAmJlxuICAgICAgICAgICAgQ2FwdHVyZWRTdGFja3Muc2V0KFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyxcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcXVldWVIeWRyYXRpb25FcnJvcihKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mik7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAoZGlkUmVjZWl2ZVVwZGF0ZSB8fFxuICAgICAgICAgICAgcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSA9XG4gICAgICAgICAgICAwICE9PSAocmVuZGVyTGFuZXMgJiBjdXJyZW50LmNoaWxkTGFuZXMpKSxcbiAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlIHx8IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxID0gd29ya0luUHJvZ3Jlc3NSb290O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgIT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSAmJlxuICAgICAgICAgICAgKChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiA9IHJlbmRlckxhbmVzICYgLXJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiA9XG4gICAgICAgICAgICAgIDAgIT09IChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiAmIDQyKVxuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbkJ5TGFuZShcbiAgICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTJcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyID1cbiAgICAgICAgICAgICAgMCAhPT1cbiAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyICZcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxLnN1c3BlbmRlZExhbmVzIHxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzKSlcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyKSxcbiAgICAgICAgICAgIDAgIT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyICYmXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyICE9PSBwcmV2U3RhdGUucmV0cnlMYW5lKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICAgKChwcmV2U3RhdGUucmV0cnlMYW5lID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIpLFxuICAgICAgICAgICAgICBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNDUxLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwLmRhdGEgPT09XG4gICAgICAgICAgICBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgfHwgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAuZGF0YSA9PT1cbiAgICAgICAgICBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEFcbiAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxOTIpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gbnVsbCkpXG4gICAgICAgICAgICA6ICgoY3VycmVudCA9IHByZXZTdGF0ZS50cmVlQ29udGV4dCksXG4gICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MC5uZXh0U2libGluZ1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAoaXNIeWRyYXRpbmcgPSAhMCksXG4gICAgICAgICAgICAgIChoeWRyYXRpb25FcnJvcnMgPSBudWxsKSxcbiAgICAgICAgICAgICAgKGRpZFN1c3BlbmRPckVycm9yREVWID0gITEpLFxuICAgICAgICAgICAgICAoaHlkcmF0aW9uRGlmZlJvb3RERVYgPSBudWxsKSxcbiAgICAgICAgICAgICAgKHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMSksXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAod2FybklmTm90SHlkcmF0aW5nKCksXG4gICAgICAgICAgICAgICAgKGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRJZCksXG4gICAgICAgICAgICAgICAgKGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRPdmVyZmxvdyksXG4gICAgICAgICAgICAgICAgKGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRQcm92aWRlciksXG4gICAgICAgICAgICAgICAgKHRyZWVDb250ZXh0SWQgPSBjdXJyZW50LmlkKSxcbiAgICAgICAgICAgICAgICAodHJlZUNvbnRleHRPdmVyZmxvdyA9IGN1cnJlbnQub3ZlcmZsb3cpLFxuICAgICAgICAgICAgICAgICh0cmVlQ29udGV4dFByb3ZpZGVyID0gd29ya0luUHJvZ3Jlc3MpKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mi5jaGlsZHJlblxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQwOTYpKTtcbiAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuICAgICAgaWYgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzID1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLmZhbGxiYWNrKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCA9IHdvcmtJblByb2dyZXNzLm1vZGUpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX3RlbXAgPSBjdXJyZW50LmNoaWxkKSxcbiAgICAgICAgICAoaW5zdGFuY2UgPSBKU0NvbXBpbGVyX3RlbXAuc2libGluZyksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoXG4gICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1vZGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mi5jaGlsZHJlblxuICAgICAgICAgICAgfVxuICAgICAgICAgICkpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mi5zdWJ0cmVlRmxhZ3MgPVxuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLnN1YnRyZWVGbGFncyAmIDY1MDExNzEyKSxcbiAgICAgICAgICBudWxsICE9PSBpbnN0YW5jZVxuICAgICAgICAgICAgPyAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMgPVxuICAgICAgICAgICAgICAgIGNyZWF0ZVdvcmtJblByb2dyZXNzKFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1M1xuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6ICgoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMgPVxuICAgICAgICAgICAgICAgIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI0NTMsXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1My5mbGFncyB8PSAyKSksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzLnJldHVybiA9XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNDUyLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIuc2libGluZyA9XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTIpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1MiA9XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjQ1MyksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICBudWxsID09PSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwXG4gICAgICAgICAgICA/IChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNDUwID1cbiAgICAgICAgICAgICAgICBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpKVxuICAgICAgICAgICAgOiAoKEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MC5jYWNoZVBvb2wpLFxuICAgICAgICAgICAgICBudWxsICE9PSBKU0NvbXBpbGVyX3RlbXBcbiAgICAgICAgICAgICAgICA/ICgoaW5zdGFuY2UgPSBDYWNoZUNvbnRleHQuX2N1cnJlbnRWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID1cbiAgICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLnBhcmVudCAhPT0gaW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICAgICA/IHsgcGFyZW50OiBpbnN0YW5jZSwgcG9vbDogaW5zdGFuY2UgfVxuICAgICAgICAgICAgICAgICAgICAgIDogSlNDb21waWxlcl90ZW1wKSlcbiAgICAgICAgICAgICAgICA6IChKU0NvbXBpbGVyX3RlbXAgPSBnZXRTdXNwZW5kZWRDYWNoZSgpKSxcbiAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI0NTAgPSB7XG4gICAgICAgICAgICAgICAgYmFzZUxhbmVzOlxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MC5iYXNlTGFuZXMgfCByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICBjYWNoZVBvb2w6IEpTQ29tcGlsZXJfdGVtcFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjQ1MCksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNDUzLmNoaWxkTGFuZXMgPVxuICAgICAgICAgICAgZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUiksXG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI0NTJcbiAgICAgICAgKTtcbiAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZW5kZXJMYW5lcyA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICBjdXJyZW50ID0gcmVuZGVyTGFuZXMuc2libGluZztcbiAgICAgIHJlbmRlckxhbmVzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MocmVuZGVyTGFuZXMsIHtcbiAgICAgICAgbW9kZTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIGNoaWxkcmVuOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjQ1Mi5jaGlsZHJlblxuICAgICAgfSk7XG4gICAgICByZW5kZXJMYW5lcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHJlbmRlckxhbmVzLnNpYmxpbmcgPSBudWxsO1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAoKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MSA9IHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyksXG4gICAgICAgIG51bGwgPT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MVxuICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBbY3VycmVudF0pLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE2KSlcbiAgICAgICAgICA6IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjQ1MS5wdXNoKGN1cnJlbnQpKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyTGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIHJldHVybiByZW5kZXJMYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuKSB7XG4gICAgICBwcmltYXJ5Q2hpbGRyZW4gPSBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoXG4gICAgICAgIHsgbW9kZTogXCJ2aXNpYmxlXCIsIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW4gfSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZVxuICAgICAgKTtcbiAgICAgIHByaW1hcnlDaGlsZHJlbi5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHJldHVybiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRyZW4pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIob2Zmc2NyZWVuUHJvcHMsIG1vZGUpIHtcbiAgICAgIG9mZnNjcmVlblByb3BzID0gY3JlYXRlRmliZXIoMjIsIG9mZnNjcmVlblByb3BzLCBudWxsLCBtb2RlKTtcbiAgICAgIG9mZnNjcmVlblByb3BzLmxhbmVzID0gMDtcbiAgICAgIG9mZnNjcmVlblByb3BzLnN0YXRlTm9kZSA9IHtcbiAgICAgICAgX3Zpc2liaWxpdHk6IE9mZnNjcmVlblZpc2libGUsXG4gICAgICAgIF9wZW5kaW5nTWFya2VyczogbnVsbCxcbiAgICAgICAgX3JldHJ5Q2FjaGU6IG51bGwsXG4gICAgICAgIF90cmFuc2l0aW9uczogbnVsbFxuICAgICAgfTtcbiAgICAgIHJldHVybiBvZmZzY3JlZW5Qcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgICAgIGN1cnJlbnQgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuXG4gICAgICApO1xuICAgICAgY3VycmVudC5mbGFncyB8PSAyO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcywgcHJvcGFnYXRpb25Sb290KSB7XG4gICAgICBmaWJlci5sYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5sYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKFxuICAgICAgICBmaWJlci5yZXR1cm4sXG4gICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICBwcm9wYWdhdGlvblJvb3RcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRTbG90LCBpbmRleCkge1xuICAgICAgdmFyIGlzQW5BcnJheSA9IGlzQXJyYXlJbXBsKGNoaWxkU2xvdCk7XG4gICAgICBjaGlsZFNsb3QgPSAhaXNBbkFycmF5ICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldEl0ZXJhdG9yRm4oY2hpbGRTbG90KTtcbiAgICAgIHJldHVybiBpc0FuQXJyYXkgfHwgY2hpbGRTbG90XG4gICAgICAgID8gKChpc0FuQXJyYXkgPSBpc0FuQXJyYXkgPyBcImFycmF5XCIgOiBcIml0ZXJhYmxlXCIpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkEgbmVzdGVkICVzIHdhcyBwYXNzZWQgdG8gcm93ICMlcyBpbiA8U3VzcGVuc2VMaXN0IC8+LiBXcmFwIGl0IGluIGFuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6IDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPiAuLi4gPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+eyVzfTwvU3VzcGVuc2VMaXN0PiAuLi4gPC9TdXNwZW5zZUxpc3Q+XCIsXG4gICAgICAgICAgICBpc0FuQXJyYXksXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGlzQW5BcnJheVxuICAgICAgICAgICksXG4gICAgICAgICAgITEpXG4gICAgICAgIDogITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgaXNCYWNrd2FyZHMsXG4gICAgICB0YWlsLFxuICAgICAgbGFzdENvbnRlbnRSb3csXG4gICAgICB0YWlsTW9kZVxuICAgICkge1xuICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIG51bGwgPT09IHJlbmRlclN0YXRlXG4gICAgICAgID8gKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgICAgICBpc0JhY2t3YXJkczogaXNCYWNrd2FyZHMsXG4gICAgICAgICAgICByZW5kZXJpbmc6IG51bGwsXG4gICAgICAgICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICAgICAgICBsYXN0OiBsYXN0Q29udGVudFJvdyxcbiAgICAgICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgICAgICB0YWlsTW9kZTogdGFpbE1vZGVcbiAgICAgICAgICB9KVxuICAgICAgICA6ICgocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcyksXG4gICAgICAgICAgKHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGwpLFxuICAgICAgICAgIChyZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSAwKSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93KSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUudGFpbCA9IHRhaWwpLFxuICAgICAgICAgIChyZW5kZXJTdGF0ZS50YWlsTW9kZSA9IHRhaWxNb2RlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgIHJldmVhbE9yZGVyID0gbmV4dFByb3BzLnJldmVhbE9yZGVyLFxuICAgICAgICB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICAgICAgbmV4dFByb3BzID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgICAgaWYgKFxuICAgICAgICB2b2lkIDAgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgIFwiZm9yd2FyZHNcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgXCJiYWNrd2FyZHNcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgXCJ0b2dldGhlclwiICE9PSByZXZlYWxPcmRlciAmJlxuICAgICAgICAhZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdXG4gICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSA9ICEwKSxcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmV2ZWFsT3JkZXIpXG4gICAgICAgIClcbiAgICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0b2dldGhlclwiOlxuICAgICAgICAgICAgY2FzZSBcImZvcndhcmRzXCI6XG4gICAgICAgICAgICBjYXNlIFwiYmFja3dhcmRzXCI6XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gVXNlIGxvd2VyY2FzZSBcIiVzXCIgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyLFxuICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZm9yd2FyZFwiOlxuICAgICAgICAgICAgY2FzZSBcImJhY2t3YXJkXCI6XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gUmVhY3QgdXNlcyB0aGUgLXMgc3VmZml4IGluIHRoZSBzcGVsbGluZy4gVXNlIFwiJXNzXCIgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyLFxuICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uIERpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsXG4gICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JyxcbiAgICAgICAgICAgIHJldmVhbE9yZGVyXG4gICAgICAgICAgKTtcbiAgICAgIHZvaWQgMCA9PT0gdGFpbE1vZGUgfHxcbiAgICAgICAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdIHx8XG4gICAgICAgIChcImNvbGxhcHNlZFwiICE9PSB0YWlsTW9kZSAmJiBcImhpZGRlblwiICE9PSB0YWlsTW9kZVxuICAgICAgICAgID8gKChkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgdGFpbCBvbiA8U3VzcGVuc2VMaXN0IC8+LiBEaWQgeW91IG1lYW4gXCJjb2xsYXBzZWRcIiBvciBcImhpZGRlblwiPycsXG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApKVxuICAgICAgICAgIDogXCJmb3J3YXJkc1wiICE9PSByZXZlYWxPcmRlciAmJlxuICAgICAgICAgICAgXCJiYWNrd2FyZHNcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgICAgICgoZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJzxTdXNwZW5zZUxpc3QgdGFpbD1cIiVzXCIgLz4gaXMgb25seSB2YWxpZCBpZiByZXZlYWxPcmRlciBpcyBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIi4gRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsXG4gICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICApKSk7XG4gICAgICBhOiBpZiAoXG4gICAgICAgIChcImZvcndhcmRzXCIgPT09IHJldmVhbE9yZGVyIHx8IFwiYmFja3dhcmRzXCIgPT09IHJldmVhbE9yZGVyKSAmJlxuICAgICAgICB2b2lkIDAgIT09IG5leHRQcm9wcyAmJlxuICAgICAgICBudWxsICE9PSBuZXh0UHJvcHMgJiZcbiAgICAgICAgITEgIT09IG5leHRQcm9wc1xuICAgICAgKVxuICAgICAgICBpZiAoaXNBcnJheUltcGwobmV4dFByb3BzKSlcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKG5leHRQcm9wc1tpXSwgaSkpIGJyZWFrIGE7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoKGkgPSBnZXRJdGVyYXRvckZuKG5leHRQcm9wcykpLCBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpKSkge1xuICAgICAgICAgIGlmICgoaSA9IGkuY2FsbChuZXh0UHJvcHMpKSlcbiAgICAgICAgICAgIGZvciAodmFyIHN0ZXAgPSBpLm5leHQoKSwgX2kgPSAwOyAhc3RlcC5kb25lOyBzdGVwID0gaS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKHN0ZXAudmFsdWUsIF9pKSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgX2krKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdBIHNpbmdsZSByb3cgd2FzIHBhc3NlZCB0byBhIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9XCIlc1wiIC8+LiBUaGlzIGlzIG5vdCB1c2VmdWwgc2luY2UgaXQgbmVlZHMgbXVsdGlwbGUgcm93cy4gRGlkIHlvdSBtZWFuIHRvIHBhc3MgbXVsdGlwbGUgY2hpbGRyZW4gb3IgYW4gYXJyYXk/JyxcbiAgICAgICAgICAgIHJldmVhbE9yZGVyXG4gICAgICAgICAgKTtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIG5leHRQcm9wcyA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgIGlmICgwICE9PSAobmV4dFByb3BzICYgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSlcbiAgICAgICAgKG5leHRQcm9wcyA9XG4gICAgICAgICAgKG5leHRQcm9wcyAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKSB8IEZvcmNlU3VzcGVuc2VGYWxsYmFjayksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjgpKVxuICAgICAgICAgIGE6IGZvciAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSBjdXJyZW50OyApIHtcbiAgICAgICAgICAgIGlmICgxMyA9PT0gY3VycmVudC50YWcpXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKDE5ID09PSBjdXJyZW50LnRhZylcbiAgICAgICAgICAgICAgc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKGN1cnJlbnQsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICBlbHNlIGlmIChudWxsICE9PSBjdXJyZW50LmNoaWxkKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnQuY2hpbGQucmV0dXJuID0gY3VycmVudDtcbiAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IHdvcmtJblByb2dyZXNzKSBicmVhayBhO1xuICAgICAgICAgICAgZm9yICg7IG51bGwgPT09IGN1cnJlbnQuc2libGluZzsgKSB7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50LnJldHVybiB8fCBjdXJyZW50LnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudC5zaWJsaW5nLnJldHVybiA9IGN1cnJlbnQucmV0dXJuO1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIG5leHRQcm9wcyAmPSBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbiAgICAgIH1cbiAgICAgIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgbmV4dFByb3BzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICAgIGNhc2UgXCJmb3J3YXJkc1wiOlxuICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgZm9yIChyZXZlYWxPcmRlciA9IG51bGw7IG51bGwgIT09IHJlbmRlckxhbmVzOyApXG4gICAgICAgICAgICAoY3VycmVudCA9IHJlbmRlckxhbmVzLmFsdGVybmF0ZSksXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICBudWxsID09PSBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudCkgJiZcbiAgICAgICAgICAgICAgICAocmV2ZWFsT3JkZXIgPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcpO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gcmV2ZWFsT3JkZXI7XG4gICAgICAgICAgbnVsbCA9PT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICAgID8gKChyZXZlYWxPcmRlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCkpXG4gICAgICAgICAgICA6ICgocmV2ZWFsT3JkZXIgPSByZW5kZXJMYW5lcy5zaWJsaW5nKSxcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzLnNpYmxpbmcgPSBudWxsKSk7XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAhMSxcbiAgICAgICAgICAgIHJldmVhbE9yZGVyLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB0YWlsTW9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJiYWNrd2FyZHNcIjpcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IG51bGw7XG4gICAgICAgICAgcmV2ZWFsT3JkZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICBmb3IgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDsgbnVsbCAhPT0gcmV2ZWFsT3JkZXI7ICkge1xuICAgICAgICAgICAgY3VycmVudCA9IHJldmVhbE9yZGVyLmFsdGVybmF0ZTtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgPT09IGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50KSkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJldmVhbE9yZGVyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSByZXZlYWxPcmRlci5zaWJsaW5nO1xuICAgICAgICAgICAgcmV2ZWFsT3JkZXIuc2libGluZyA9IHJlbmRlckxhbmVzO1xuICAgICAgICAgICAgcmVuZGVyTGFuZXMgPSByZXZlYWxPcmRlcjtcbiAgICAgICAgICAgIHJldmVhbE9yZGVyID0gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAhMCxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRvZ2V0aGVyXCI6XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCAhMSwgbnVsbCwgbnVsbCwgdm9pZCAwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcyk7XG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IHdvcmtJblByb2dyZXNzLmxhbmVzO1xuICAgICAgaWYgKDAgPT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKVxuICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIDAgPT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudC5jaGlsZClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJSZXN1bWluZyB3b3JrIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXCIpO1xuICAgICAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzLmNoaWxkKSB7XG4gICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgcmVuZGVyTGFuZXMgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBjdXJyZW50LnBlbmRpbmdQcm9wcyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyTGFuZXM7XG4gICAgICAgIGZvciAocmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7IG51bGwgIT09IGN1cnJlbnQuc2libGluZzsgKVxuICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nKSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcgPVxuICAgICAgICAgICAgICBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBjdXJyZW50LnBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgKHJlbmRlckxhbmVzLnJldHVybiA9IHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVuZGVyTGFuZXMuc2libGluZyA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gICAgICBpZiAoMCAhPT0gKGN1cnJlbnQubGFuZXMgJiByZW5kZXJMYW5lcykpIHJldHVybiAhMDtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICAgIHJldHVybiBudWxsICE9PSBjdXJyZW50ICYmIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50KSA/ICEwIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRFYXJseUJhaWxvdXRJZk5vU2NoZWR1bGVkVXBkYXRlKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBwdXNoSG9zdENvbnRhaW5lcihcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICApO1xuICAgICAgICAgIHB1c2hQcm92aWRlcihcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ2FjaGVDb250ZXh0LFxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBwdXNoUHJvdmlkZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSAmJlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDg7XG4gICAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAtMDtcbiAgICAgICAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gLTA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGVOb2RlKSB7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGVOb2RlLmRlaHlkcmF0ZWQpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGQuY2hpbGRMYW5lcykpXG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgY3VycmVudCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5zaWJsaW5nIDogbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IDAgIT09IChjdXJyZW50LmZsYWdzICYgMTI4KTtcbiAgICAgICAgICBzdGF0ZU5vZGUgPSAwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcbiAgICAgICAgICBzdGF0ZU5vZGUgfHxcbiAgICAgICAgICAgIChwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChzdGF0ZU5vZGUgPSAwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSkpO1xuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGVOb2RlKVxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyODtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGlkU3VzcGVuZEJlZm9yZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgbnVsbCAhPT0gZGlkU3VzcGVuZEJlZm9yZSAmJlxuICAgICAgICAgICAgKChkaWRTdXNwZW5kQmVmb3JlLnJlbmRlcmluZyA9IG51bGwpLFxuICAgICAgICAgICAgKGRpZFN1c3BlbmRCZWZvcmUudGFpbCA9IG51bGwpLFxuICAgICAgICAgICAgKGRpZFN1c3BlbmRCZWZvcmUubGFzdEVmZmVjdCA9IG51bGwpKTtcbiAgICAgICAgICBwdXNoKFxuICAgICAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvcixcbiAgICAgICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoc3RhdGVOb2RlKSBicmVhaztcbiAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSAwKSxcbiAgICAgICAgICAgIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBwdXNoUHJvdmlkZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENhY2hlQ29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiZWdpbldvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ICYmIG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgcmVuZGVyTGFuZXMgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5rZXksXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8IG51bGwsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lc1xuICAgICAgICApO1xuICAgICAgICByZW5kZXJMYW5lcy5fZGVidWdTdGFjayA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z1N0YWNrO1xuICAgICAgICByZW5kZXJMYW5lcy5fZGVidWdUYXNrID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnVGFzaztcbiAgICAgICAgdmFyIHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgICAgICBpZiAobnVsbCA9PT0gcmV0dXJuRmliZXIpIHRocm93IEVycm9yKFwiQ2Fubm90IHN3YXAgdGhlIHJvb3QgZmliZXIuXCIpO1xuICAgICAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7XG4gICAgICAgIHJlbmRlckxhbmVzLmluZGV4ID0gd29ya0luUHJvZ3Jlc3MuaW5kZXg7XG4gICAgICAgIHJlbmRlckxhbmVzLnNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nO1xuICAgICAgICByZW5kZXJMYW5lcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgICAgIHJlbmRlckxhbmVzLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgICAgcmVuZGVyTGFuZXMuX2RlYnVnSW5mbyA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0luZm87XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gcmV0dXJuRmliZXIuY2hpbGQpXG4gICAgICAgICAgcmV0dXJuRmliZXIuY2hpbGQgPSByZW5kZXJMYW5lcztcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZTaWJsaW5nID0gcmV0dXJuRmliZXIuY2hpbGQ7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHByZXZTaWJsaW5nKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZCBwYXJlbnQgdG8gaGF2ZSBhIGNoaWxkLlwiKTtcbiAgICAgICAgICBmb3IgKDsgcHJldlNpYmxpbmcuc2libGluZyAhPT0gd29ya0luUHJvZ3Jlc3M7IClcbiAgICAgICAgICAgIGlmICgoKHByZXZTaWJsaW5nID0gcHJldlNpYmxpbmcuc2libGluZyksIG51bGwgPT09IHByZXZTaWJsaW5nKSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nLlwiKTtcbiAgICAgICAgICBwcmV2U2libGluZy5zaWJsaW5nID0gcmVuZGVyTGFuZXM7XG4gICAgICAgIH1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlci5kZWxldGlvbnM7XG4gICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgPyAoKHJldHVybkZpYmVyLmRlbGV0aW9ucyA9IFtjdXJyZW50XSksIChyZXR1cm5GaWJlci5mbGFncyB8PSAxNikpXG4gICAgICAgICAgOiB3b3JrSW5Qcm9ncmVzcy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICByZW5kZXJMYW5lcy5mbGFncyB8PSAyO1xuICAgICAgICByZXR1cm4gcmVuZGVyTGFuZXM7XG4gICAgICB9XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzIHx8XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gY3VycmVudC50eXBlXG4gICAgICAgIClcbiAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gITA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykgJiZcbiAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOClcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICExKSxcbiAgICAgICAgICAgICAgYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSAwICE9PSAoY3VycmVudC5mbGFncyAmIDEzMTA3MikgPyAhMCA6ICExO1xuICAgICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9ICExO1xuICAgICAgICBpZiAoKHJldHVybkZpYmVyID0gaXNIeWRyYXRpbmcpKVxuICAgICAgICAgIHdhcm5JZk5vdEh5ZHJhdGluZygpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTA0ODU3NikpO1xuICAgICAgICByZXR1cm5GaWJlciAmJlxuICAgICAgICAgICgocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5pbmRleCksXG4gICAgICAgICAgd2FybklmTm90SHlkcmF0aW5nKCksXG4gICAgICAgICAgcHVzaFRyZWVJZCh3b3JrSW5Qcm9ncmVzcywgdHJlZUZvcmtDb3VudCwgcmV0dXJuRmliZXIpKTtcbiAgICAgIH1cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gMDtcbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgYTogaWYgKFxuICAgICAgICAgICAgKChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAoY3VycmVudCA9IGNhbGxMYXp5SW5pdEluREVWKHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY3VycmVudClcbiAgICAgICAgICApXG4gICAgICAgICAgICBzaG91bGRDb25zdHJ1Y3QoY3VycmVudClcbiAgICAgICAgICAgICAgPyAoKHJldHVybkZpYmVyID0gcmVzb2x2ZUNsYXNzQ29tcG9uZW50UHJvcHMoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudGFnID0gMSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50KSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gdXBkYXRlQ2xhc3NDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3MudGFnID0gMCksXG4gICAgICAgICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQpKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSkpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50KVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKChwcmV2U2libGluZyA9IGN1cnJlbnQuJCR0eXBlb2YpLFxuICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSAxMTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50KTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2U2libGluZyA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudGFnID0gMTQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVNZW1vQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gXCJcIjtcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgY3VycmVudC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgICAgICAgXCIgRGlkIHlvdSB3cmFwIGEgY29tcG9uZW50IGluIFJlYWN0LmxhenkoKSBtb3JlIHRoYW4gb25jZT9cIik7XG4gICAgICAgICAgICBjdXJyZW50ID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN1cnJlbnQpIHx8IGN1cnJlbnQ7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZC4gUmVjZWl2ZWQgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG86IFwiICtcbiAgICAgICAgICAgICAgICBjdXJyZW50ICtcbiAgICAgICAgICAgICAgICBcIi4gTGF6eSBlbGVtZW50IHR5cGUgbXVzdCByZXNvbHZlIHRvIGEgY2xhc3Mgb3IgZnVuY3Rpb24uXCIgK1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gcmVzb2x2ZUNsYXNzQ29tcG9uZW50UHJvcHMoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgdXBkYXRlQ2xhc3NDb21wb25lbnQoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgcHJldlNpYmxpbmcsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudClcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJTaG91bGQgaGF2ZSBhIGN1cnJlbnQgZmliZXIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICBwcmV2U2libGluZyA9IHByZXZTdGF0ZS5lbGVtZW50O1xuICAgICAgICAgICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHJldHVybkZpYmVyLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gbmV4dFN0YXRlLmNhY2hlO1xuICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICAgIHJldHVybkZpYmVyICE9PSBwcmV2U3RhdGUuY2FjaGUgJiZcbiAgICAgICAgICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgW0NhY2hlQ29udGV4dF0sXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgITBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gbmV4dFN0YXRlLmVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocHJldlN0YXRlLmlzRGVoeWRyYXRlZClcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICgocHJldlN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudDogcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBpc0RlaHlkcmF0ZWQ6ICExLFxuICAgICAgICAgICAgICAgICAgY2FjaGU6IG5leHRTdGF0ZS5jYWNoZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBwcmV2U3RhdGUpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gcHJldlN0YXRlKSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NilcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBtb3VudEhvc3RSb290V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dXJuRmliZXIgIT09IHByZXZTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgcHJldlNpYmxpbmcgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihcbiAgICAgICAgICAgICAgICAgIEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIlRoaXMgcm9vdCByZWNlaXZlZCBhbiBlYXJseSB1cGRhdGUsIGJlZm9yZSBhbnl0aGluZyB3YXMgYWJsZSBoeWRyYXRlLiBTd2l0Y2hlZCB0aGUgZW50aXJlIHJvb3QgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBxdWV1ZUh5ZHJhdGlvbkVycm9yKHByZXZTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50Lm5vZGVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmJvZHk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgXCJIVE1MXCIgPT09IGN1cnJlbnQubm9kZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY3VycmVudC5vd25lckRvY3VtZW50LmJvZHlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKGN1cnJlbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgICBpc0h5ZHJhdGluZyA9ICEwO1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkVycm9ycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMTtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25EaWZmUm9vdERFViA9IG51bGw7XG4gICAgICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICEwO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBtb3VudENoaWxkRmliZXJzKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZm9yICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQ7IGN1cnJlbnQ7IClcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50LmZsYWdzID0gKGN1cnJlbnQuZmxhZ3MgJiAtMykgfCA0MDk2KSxcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgICAgICBpZiAocmV0dXJuRmliZXIgPT09IHByZXZTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAoY3VycmVudCA9IGdldFJlc291cmNlKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudClcbiAgICAgICAgICAgICAgICA6IGlzSHlkcmF0aW5nIHx8XG4gICAgICAgICAgICAgICAgICAoKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZXF1aXJlZENvbnRleHQoXG4gICAgICAgICAgICAgICAgICAgIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnRcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgICkuY3JlYXRlRWxlbWVudChjdXJyZW50KSksXG4gICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXJbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXJbaW50ZXJuYWxQcm9wc0tleV0gPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhyZXR1cm5GaWJlciwgY3VycmVudCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShyZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gcmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gZ2V0UmVzb3VyY2UoXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgaXNIeWRyYXRpbmcgJiZcbiAgICAgICAgICAgICAgKChyZXR1cm5GaWJlciA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KSksXG4gICAgICAgICAgICAgIChwcmV2U2libGluZyA9IGdldEhvc3RDb250ZXh0KCkpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPVxuICAgICAgICAgICAgICAgIHJlc29sdmVTaW5nbGV0b25JbnN0YW5jZShcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgfHxcbiAgICAgICAgICAgICAgICAoKHByZXZTaWJsaW5nID0gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlNpYmxpbmcgJiZcbiAgICAgICAgICAgICAgICAgIChidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKHdvcmtJblByb2dyZXNzLCAwKS5zZXJ2ZXJQcm9wcyA9XG4gICAgICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nKSksXG4gICAgICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgKHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMCksXG4gICAgICAgICAgICAgIChwcmV2U2libGluZyA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2UpLFxuICAgICAgICAgICAgICBpc1NpbmdsZXRvblNjb3BlKHdvcmtJblByb2dyZXNzLnR5cGUpXG4gICAgICAgICAgICAgICAgPyAoKHByZXZpb3VzSHlkcmF0YWJsZU9uRW50ZXJpbmdTY29wZWRTaW5nbGV0b24gPSBwcmV2U2libGluZyksXG4gICAgICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5maXJzdENoaWxkXG4gICAgICAgICAgICAgICAgICApKSlcbiAgICAgICAgICAgICAgICA6IChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gcHJldlNpYmxpbmcpKSxcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwNCksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICBpc0h5ZHJhdGluZyAmJlxuICAgICAgICAgICAgICAoKHByZXZTdGF0ZSA9IGdldEhvc3RDb250ZXh0KCkpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB2YWxpZGF0ZURPTU5lc3RpbmcoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICBwcmV2U3RhdGUuYW5jZXN0b3JJbmZvXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAocHJldlNpYmxpbmcgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSxcbiAgICAgICAgICAgICAgKG5leHRTdGF0ZSA9ICFwcmV2U2libGluZykgfHxcbiAgICAgICAgICAgICAgICAoKG5leHRTdGF0ZSA9IGNhbkh5ZHJhdGVJbnN0YW5jZShcbiAgICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHRcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBuZXh0U3RhdGVcbiAgICAgICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBuZXh0U3RhdGUpLFxuICAgICAgICAgICAgICAgICAgICBkaWRTdXNwZW5kT3JFcnJvckRFViB8fFxuICAgICAgICAgICAgICAgICAgICAgICgocHJldlN0YXRlID0gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBwcmV2U3RhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKHdvcmtJblByb2dyZXNzLCAwKS5zZXJ2ZXJQcm9wcyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZTdGF0ZSkpLFxuICAgICAgICAgICAgICAgICAgICAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmZpcnN0Q2hpbGRcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgIChyb290T3JTaW5nbGV0b25Db250ZXh0ID0gITEpLFxuICAgICAgICAgICAgICAgICAgICAocHJldlN0YXRlID0gITApKVxuICAgICAgICAgICAgICAgICAgOiAocHJldlN0YXRlID0gITEpLFxuICAgICAgICAgICAgICAgIChuZXh0U3RhdGUgPSAhcHJldlN0YXRlKSksXG4gICAgICAgICAgICAgIG5leHRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciAmJlxuICAgICAgICAgICAgICAgICAgd2Fybk5vbkh5ZHJhdGVkSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHByZXZTaWJsaW5nKSxcbiAgICAgICAgICAgICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2god29ya0luUHJvZ3Jlc3MpKSksXG4gICAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MudHlwZSksXG4gICAgICAgICAgICAocHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgIChuZXh0U3RhdGUgPSBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbnVsbCksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSBwcmV2U3RhdGUuY2hpbGRyZW4pLFxuICAgICAgICAgICAgc2hvdWxkU2V0VGV4dENvbnRlbnQocHJldlNpYmxpbmcsIHByZXZTdGF0ZSlcbiAgICAgICAgICAgICAgPyAocmV0dXJuRmliZXIgPSBudWxsKVxuICAgICAgICAgICAgICA6IG51bGwgIT09IG5leHRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNob3VsZFNldFRleHRDb250ZW50KHByZXZTaWJsaW5nLCBuZXh0U3RhdGUpICYmXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDMyKSxcbiAgICAgICAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgKChwcmV2U2libGluZyA9IHJlbmRlcldpdGhIb29rcyhcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIFRyYW5zaXRpb25Bd2FyZUhvc3RDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoSG9zdFRyYW5zaXRpb25Db250ZXh0Ll9jdXJyZW50VmFsdWUgPSBwcmV2U2libGluZykpLFxuICAgICAgICAgICAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIGlzSHlkcmF0aW5nICYmXG4gICAgICAgICAgICAgICgoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IGdldEhvc3RDb250ZXh0KCkpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZW5kZXJMYW5lcy5hbmNlc3RvckluZm8uY3VycmVudCksXG4gICAgICAgICAgICAgIChjdXJyZW50ID1cbiAgICAgICAgICAgICAgICBudWxsICE9IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICA/IHZhbGlkYXRlVGV4dE5lc3RpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci50YWcsXG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMuYW5jZXN0b3JJbmZvLmltcGxpY2l0Um9vdFNjb3BlXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogITApLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gIXJlbmRlckxhbmVzKSB8fFxuICAgICAgICAgICAgICAgICgocmV0dXJuRmliZXIgPSBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICByb290T3JTaW5nbGV0b25Db250ZXh0XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gITApKVxuICAgICAgICAgICAgICAgICAgOiAocmV0dXJuRmliZXIgPSAhMSksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gIXJldHVybkZpYmVyKSksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyICYmXG4gICAgICAgICAgICAgICAgKGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAgIHdhcm5Ob25IeWRyYXRlZEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKHdvcmtJblByb2dyZXNzKSkpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcHVzaEhvc3RDb250YWluZXIoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgOiByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiB1cGRhdGVGb3J3YXJkUmVmKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjA0OCksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyLmVmZmVjdER1cmF0aW9uID0gLTApLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IC0wKSxcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MudHlwZSksXG4gICAgICAgICAgICAocHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgKHByZXZTdGF0ZSA9IHByZXZTaWJsaW5nLnZhbHVlKSxcbiAgICAgICAgICAgIFwidmFsdWVcIiBpbiBwcmV2U2libGluZyB8fFxuICAgICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciB8fFxuICAgICAgICAgICAgICAoKGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVGhlIGB2YWx1ZWAgcHJvcCBpcyByZXF1aXJlZCBmb3IgdGhlIGA8Q29udGV4dC5Qcm92aWRlcj5gLiBEaWQgeW91IG1pc3NwZWxsIGl0IG9yIGZvcmdldCB0byBwYXNzIGl0P1wiXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCByZXR1cm5GaWJlciwgcHJldlN0YXRlKSxcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgcHJldlNpYmxpbmcuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChwcmV2U2libGluZyA9IHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuKSxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHJldHVybkZpYmVyICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJBIGNvbnRleHQgY29uc3VtZXIgd2FzIHJlbmRlcmVkIHdpdGggbXVsdGlwbGUgY2hpbGRyZW4sIG9yIGEgY2hpbGQgdGhhdCBpc24ndCBhIGZ1bmN0aW9uLiBBIGNvbnRleHQgY29uc3VtZXIgZXhwZWN0cyBhIHNpbmdsZSBjaGlsZCB0aGF0IGlzIGEgZnVuY3Rpb24uIElmIHlvdSBkaWQgcGFzcyBhIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gdHJhaWxpbmcgb3IgbGVhZGluZyB3aGl0ZXNwYWNlIGFyb3VuZCBpdC5cIlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gcmVhZENvbnRleHQocHJldlNpYmxpbmcpKSxcbiAgICAgICAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGNhbGxDb21wb25lbnRJbkRFVihcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICB2b2lkIDBcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxKSxcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1vQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLm1vZGUpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0ge1xuICAgICAgICAgICAgICBtb2RlOiByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogcmV0dXJuRmliZXIuY2hpbGRyZW5cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgICAgICA/ICgoY3VycmVudCA9IG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWYpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50KSlcbiAgICAgICAgICAgICAgOiAoKGN1cnJlbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LmNoaWxkLCByZXR1cm5GaWJlcikpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50LnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZiksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudCksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQpKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHJlYWRDb250ZXh0KENhY2hlQ29udGV4dCkpLFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgICAgICA/ICgocHJldlNpYmxpbmcgPSBwZWVrQ2FjaGVGcm9tUG9vbCgpKSxcbiAgICAgICAgICAgICAgICBudWxsID09PSBwcmV2U2libGluZyAmJlxuICAgICAgICAgICAgICAgICAgKChwcmV2U2libGluZyA9IHdvcmtJblByb2dyZXNzUm9vdCksXG4gICAgICAgICAgICAgICAgICAocHJldlN0YXRlID0gY3JlYXRlQ2FjaGUoKSksXG4gICAgICAgICAgICAgICAgICAocHJldlNpYmxpbmcucG9vbGVkQ2FjaGUgPSBwcmV2U3RhdGUpLFxuICAgICAgICAgICAgICAgICAgcmV0YWluQ2FjaGUocHJldlN0YXRlKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IHByZXZTdGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAocHJldlNpYmxpbmcucG9vbGVkQ2FjaGVMYW5lcyB8PSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgICAocHJldlNpYmxpbmcgPSBwcmV2U3RhdGUpKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgIHBhcmVudDogcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBjYWNoZTogcHJldlNpYmxpbmdcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ2FjaGVDb250ZXh0LCBwcmV2U2libGluZykpXG4gICAgICAgICAgICAgIDogKDAgIT09IChjdXJyZW50LmxhbmVzICYgcmVuZGVyTGFuZXMpICYmXG4gICAgICAgICAgICAgICAgICAoY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG51bGwsIG51bGwsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAgIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKSksXG4gICAgICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gY3VycmVudC5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICAgICAgICAocHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICAgICAgcHJldlNpYmxpbmcucGFyZW50ICE9PSByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgPyAoKHByZXZTaWJsaW5nID0ge1xuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgICAgY2FjaGU6IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHByZXZTaWJsaW5nKSxcbiAgICAgICAgICAgICAgICAgICAgMCA9PT0gd29ya0luUHJvZ3Jlc3MubGFuZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2libGluZyksXG4gICAgICAgICAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ2FjaGVDb250ZXh0LCByZXR1cm5GaWJlcikpXG4gICAgICAgICAgICAgICAgICA6ICgocmV0dXJuRmliZXIgPSBwcmV2U3RhdGUuY2FjaGUpLFxuICAgICAgICAgICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENhY2hlQ29udGV4dCwgcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciAhPT0gcHJldlNpYmxpbmcuY2FjaGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgW0NhY2hlQ29udGV4dF0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgICAgICAgICAgKSkpLFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHRocm93IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgK1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyArXG4gICAgICAgICAgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVsb2FkUmVzb3VyY2VBbmRTdXNwZW5kSWZOZWVkZWQod29ya0luUHJvZ3Jlc3MsIHJlc291cmNlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwic3R5bGVzaGVldFwiICE9PSByZXNvdXJjZS50eXBlIHx8XG4gICAgICAgIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgSW5zZXJ0ZWQpICE9PSBOb3RMb2FkZWRcbiAgICAgIClcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTE2Nzc3MjE3O1xuICAgICAgZWxzZSBpZiAoXG4gICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTY3NzcyMTYpLCAhcHJlbG9hZFJlc291cmNlKHJlc291cmNlKSlcbiAgICAgICkge1xuICAgICAgICByZXNvdXJjZSA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBudWxsICE9PSByZXNvdXJjZSAmJlxuICAgICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA0MTk0MDQ4KSA9PT1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgPyBudWxsICE9PSBzaGVsbEJvdW5kYXJ5XG4gICAgICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA2MjkxNDU2MCkgIT09XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpKSB8fFxuICAgICAgICAgICAgICByZXNvdXJjZSAhPT0gc2hlbGxCb3VuZGFyeSlcbiAgICAgICAgKVxuICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICgoc3VzcGVuZGVkVGhlbmFibGUgPSBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUpLFxuICAgICAgICAgICAgU3VzcGVuc2V5Q29tbWl0RXhjZXB0aW9uKVxuICAgICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHJldHJ5UXVldWUpIHtcbiAgICAgIG51bGwgIT09IHJldHJ5UXVldWUgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxNjM4NCAmJlxuICAgICAgICAoKHJldHJ5UXVldWUgPVxuICAgICAgICAgIDIyICE9PSB3b3JrSW5Qcm9ncmVzcy50YWcgPyBjbGFpbU5leHRSZXRyeUxhbmUoKSA6IDUzNjg3MDkxMiksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyB8PSByZXRyeVF1ZXVlKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyB8PSByZXRyeVF1ZXVlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrKSB7XG4gICAgICBpZiAoIWlzSHlkcmF0aW5nKVxuICAgICAgICBzd2l0Y2ggKHJlbmRlclN0YXRlLnRhaWxNb2RlKSB7XG4gICAgICAgICAgY2FzZSBcImhpZGRlblwiOlxuICAgICAgICAgICAgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgICAgIGZvciAodmFyIGxhc3RUYWlsTm9kZSA9IG51bGw7IG51bGwgIT09IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjazsgKVxuICAgICAgICAgICAgICBudWxsICE9PSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2suYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgICAgKGxhc3RUYWlsTm9kZSA9IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayksXG4gICAgICAgICAgICAgICAgKGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayA9IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjay5zaWJsaW5nKTtcbiAgICAgICAgICAgIG51bGwgPT09IGxhc3RUYWlsTm9kZVxuICAgICAgICAgICAgICA/IChyZW5kZXJTdGF0ZS50YWlsID0gbnVsbClcbiAgICAgICAgICAgICAgOiAobGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJjb2xsYXBzZWRcIjpcbiAgICAgICAgICAgIGxhc3RUYWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgICBmb3IgKHZhciBfbGFzdFRhaWxOb2RlID0gbnVsbDsgbnVsbCAhPT0gbGFzdFRhaWxOb2RlOyApXG4gICAgICAgICAgICAgIG51bGwgIT09IGxhc3RUYWlsTm9kZS5hbHRlcm5hdGUgJiYgKF9sYXN0VGFpbE5vZGUgPSBsYXN0VGFpbE5vZGUpLFxuICAgICAgICAgICAgICAgIChsYXN0VGFpbE5vZGUgPSBsYXN0VGFpbE5vZGUuc2libGluZyk7XG4gICAgICAgICAgICBudWxsID09PSBfbGFzdFRhaWxOb2RlXG4gICAgICAgICAgICAgID8gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrIHx8IG51bGwgPT09IHJlbmRlclN0YXRlLnRhaWxcbiAgICAgICAgICAgICAgICA/IChyZW5kZXJTdGF0ZS50YWlsID0gbnVsbClcbiAgICAgICAgICAgICAgICA6IChyZW5kZXJTdGF0ZS50YWlsLnNpYmxpbmcgPSBudWxsKVxuICAgICAgICAgICAgICA6IChfbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBidWJibGVQcm9wZXJ0aWVzKGNvbXBsZXRlZFdvcmspIHtcbiAgICAgIHZhciBkaWRCYWlsb3V0ID1cbiAgICAgICAgICBudWxsICE9PSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZSAmJlxuICAgICAgICAgIGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlLmNoaWxkID09PSBjb21wbGV0ZWRXb3JrLmNoaWxkLFxuICAgICAgICBuZXdDaGlsZExhbmVzID0gMCxcbiAgICAgICAgc3VidHJlZUZsYWdzID0gMDtcbiAgICAgIGlmIChkaWRCYWlsb3V0KVxuICAgICAgICBpZiAoKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBfdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbixcbiAgICAgICAgICAgICAgX2NoaWxkMiA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG4gICAgICAgICAgICBudWxsICE9PSBfY2hpbGQyO1xuXG4gICAgICAgICAgKVxuICAgICAgICAgICAgKG5ld0NoaWxkTGFuZXMgfD0gX2NoaWxkMi5sYW5lcyB8IF9jaGlsZDIuY2hpbGRMYW5lcyksXG4gICAgICAgICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gX2NoaWxkMi5zdWJ0cmVlRmxhZ3MgJiA2NTAxMTcxMiksXG4gICAgICAgICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gX2NoaWxkMi5mbGFncyAmIDY1MDExNzEyKSxcbiAgICAgICAgICAgICAgKF90cmVlQmFzZUR1cmF0aW9uICs9IF9jaGlsZDIudHJlZUJhc2VEdXJhdGlvbiksXG4gICAgICAgICAgICAgIChfY2hpbGQyID0gX2NoaWxkMi5zaWJsaW5nKTtcbiAgICAgICAgICBjb21wbGV0ZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24gPSBfdHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIF90cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5jaGlsZDtcbiAgICAgICAgICAgIG51bGwgIT09IF90cmVlQmFzZUR1cmF0aW9uO1xuXG4gICAgICAgICAgKVxuICAgICAgICAgICAgKG5ld0NoaWxkTGFuZXMgfD1cbiAgICAgICAgICAgICAgX3RyZWVCYXNlRHVyYXRpb24ubGFuZXMgfCBfdHJlZUJhc2VEdXJhdGlvbi5jaGlsZExhbmVzKSxcbiAgICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBfdHJlZUJhc2VEdXJhdGlvbi5zdWJ0cmVlRmxhZ3MgJiA2NTAxMTcxMiksXG4gICAgICAgICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gX3RyZWVCYXNlRHVyYXRpb24uZmxhZ3MgJiA2NTAxMTcxMiksXG4gICAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbi5yZXR1cm4gPSBjb21wbGV0ZWRXb3JrKSxcbiAgICAgICAgICAgICAgKF90cmVlQmFzZUR1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb24uc2libGluZyk7XG4gICAgICBlbHNlIGlmICgoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgX3RyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICBfY2hpbGQyID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgICBmb3IgKHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7IG51bGwgIT09IGNoaWxkOyApXG4gICAgICAgICAgKG5ld0NoaWxkTGFuZXMgfD0gY2hpbGQubGFuZXMgfCBjaGlsZC5jaGlsZExhbmVzKSxcbiAgICAgICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gY2hpbGQuc3VidHJlZUZsYWdzKSxcbiAgICAgICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gY2hpbGQuZmxhZ3MpLFxuICAgICAgICAgICAgKF90cmVlQmFzZUR1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uKSxcbiAgICAgICAgICAgIChfY2hpbGQyICs9IGNoaWxkLnRyZWVCYXNlRHVyYXRpb24pLFxuICAgICAgICAgICAgKGNoaWxkID0gY2hpbGQuc2libGluZyk7XG4gICAgICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBfdHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gX2NoaWxkMjtcbiAgICAgIH0gZWxzZVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIF90cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5jaGlsZDtcbiAgICAgICAgICBudWxsICE9PSBfdHJlZUJhc2VEdXJhdGlvbjtcblxuICAgICAgICApXG4gICAgICAgICAgKG5ld0NoaWxkTGFuZXMgfD1cbiAgICAgICAgICAgIF90cmVlQmFzZUR1cmF0aW9uLmxhbmVzIHwgX3RyZWVCYXNlRHVyYXRpb24uY2hpbGRMYW5lcyksXG4gICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF90cmVlQmFzZUR1cmF0aW9uLnN1YnRyZWVGbGFncyksXG4gICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF90cmVlQmFzZUR1cmF0aW9uLmZsYWdzKSxcbiAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbi5yZXR1cm4gPSBjb21wbGV0ZWRXb3JrKSxcbiAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbiA9IF90cmVlQmFzZUR1cmF0aW9uLnNpYmxpbmcpO1xuICAgICAgY29tcGxldGVkV29yay5zdWJ0cmVlRmxhZ3MgfD0gc3VidHJlZUZsYWdzO1xuICAgICAgY29tcGxldGVkV29yay5jaGlsZExhbmVzID0gbmV3Q2hpbGRMYW5lcztcbiAgICAgIHJldHVybiBkaWRCYWlsb3V0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wbGV0ZVdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICBwb3BUcmVlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICBjYXNlIDE2OlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICBjYXNlIDEyOlxuICAgICAgICBjYXNlIDk6XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgcmV0dXJuIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgbmV3UHJvcHMgPSBudWxsO1xuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgKG5ld1Byb3BzID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmNhY2hlICE9PSBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDgpO1xuICAgICAgICAgIHBvcFByb3ZpZGVyKENhY2hlQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJlbmRlckxhbmVzLnBlbmRpbmdDb250ZXh0ICYmXG4gICAgICAgICAgICAoKHJlbmRlckxhbmVzLmNvbnRleHQgPSByZW5kZXJMYW5lcy5wZW5kaW5nQ29udGV4dCksXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMucGVuZGluZ0NvbnRleHQgPSBudWxsKSk7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgbnVsbCA9PT0gY3VycmVudC5jaGlsZClcbiAgICAgICAgICAgIHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgICA/IChlbWl0UGVuZGluZ0h5ZHJhdGlvbldhcm5pbmdzKCksIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpKVxuICAgICAgICAgICAgICA6IG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgICAoY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCAmJlxuICAgICAgICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMjU2KSkgfHxcbiAgICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpLFxuICAgICAgICAgICAgICAgIHVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlKCkpO1xuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAobWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgID8gKGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgICBwcmVsb2FkUmVzb3VyY2VBbmRTdXNwZW5kSWZOZWVkZWQoXG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgIDogKGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTE2Nzc3MjE3KSkpXG4gICAgICAgICAgICAgIDogcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICA/IHJlbmRlckxhbmVzICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgICAgICAgID8gKG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgcHJlbG9hZFJlc291cmNlQW5kU3VzcGVuZElmTmVlZGVkKFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICA6IChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xNjc3NzIxNykpXG4gICAgICAgICAgICAgICAgOiAoY3VycmVudC5tZW1vaXplZFByb3BzICE9PSBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xNjc3NzIxNykpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgICAgIHZhciBfdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMgIT09IG5ld1Byb3BzICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudCA9IGdldEhvc3RDb250ZXh0KCk7XG4gICAgICAgICAgICBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgPyBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdXJyZW50KVxuICAgICAgICAgICAgICA6ICgoY3VycmVudCA9IHJlc29sdmVTaW5nbGV0b25JbnN0YW5jZShcbiAgICAgICAgICAgICAgICAgIF90eXBlLFxuICAgICAgICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gbmV3UHJvcHMgJiYgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIW5ld1Byb3BzKSB7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdHlwZSA9IGdldEhvc3RDb250ZXh0KCk7XG4gICAgICAgICAgICBpZiAocG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKVxuICAgICAgICAgICAgICBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCBfdHlwZSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY3VycmVudCA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgICAgICAgICAgICAgdmFsaWRhdGVET01OZXN0aW5nKHJlbmRlckxhbmVzLCBfdHlwZS5hbmNlc3RvckluZm8pO1xuICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmNvbnRleHQ7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIoY3VycmVudCk7XG4gICAgICAgICAgICAgIHN3aXRjaCAoX3R5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnOlxuICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OQU1FU1BBQ0UsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgSG9zdENvbnRleHROYW1lc3BhY2VNYXRoOlxuICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgICAgICAgICBNQVRIX05BTUVTUEFDRSxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZW5kZXJMYW5lcykge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgICAgICAgICAgICAgU1ZHX05BTUVTUEFDRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgICAgICAgICAgICAgICBNQVRIX05BTUVTUEFDRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5pbm5lckhUTUwgPSBcIjxzY3JpcHQ+XFx4M2Mvc2NyaXB0PlwiO1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJlbW92ZUNoaWxkKGN1cnJlbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdQcm9wcy5pc1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCB7IGlzOiBuZXdQcm9wcy5pcyB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9wcy5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoY3VycmVudC5tdWx0aXBsZSA9ICEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXdQcm9wcy5zaXplICYmIChjdXJyZW50LnNpemUgPSBuZXdQcm9wcy5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3UHJvcHMuaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50LmNyZWF0ZUVsZW1lbnQocmVuZGVyTGFuZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzOiBuZXdQcm9wcy5pc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5jcmVhdGVFbGVtZW50KHJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAtMSA9PT0gcmVuZGVyTGFuZXMuaW5kZXhPZihcIi1cIikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbmRlckxhbmVzICE9PSByZW5kZXJMYW5lcy50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPCVzIC8+IGlzIHVzaW5nIGluY29ycmVjdCBjYXNpbmcuIFVzZSBQYXNjYWxDYXNlIGZvciBSZWFjdCBjb21wb25lbnRzLCBvciBsb3dlcmNhc2UgZm9yIEhUTUwgZWxlbWVudHMuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiW29iamVjdCBIVE1MVW5rbm93bkVsZW1lbnRdXCIgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGN1cnJlbnQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5lZFVua25vd25UYWdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh3YXJuZWRVbmtub3duVGFnc1tyZW5kZXJMYW5lc10gPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlIHRhZyA8JXM+IGlzIHVucmVjb2duaXplZCBpbiB0aGlzIGJyb3dzZXIuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBSZWFjdCBjb21wb25lbnQsIHN0YXJ0IGl0cyBuYW1lIHdpdGggYW4gdXBwZXJjYXNlIGxldHRlci5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN1cnJlbnRbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgY3VycmVudFtpbnRlcm5hbFByb3BzS2V5XSA9IG5ld1Byb3BzO1xuICAgICAgICAgICAgICBhOiBmb3IgKF90eXBlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7IG51bGwgIT09IF90eXBlOyApIHtcbiAgICAgICAgICAgICAgICBpZiAoNSA9PT0gX3R5cGUudGFnIHx8IDYgPT09IF90eXBlLnRhZylcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQuYXBwZW5kQ2hpbGQoX3R5cGUuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgIDQgIT09IF90eXBlLnRhZyAmJlxuICAgICAgICAgICAgICAgICAgMjcgIT09IF90eXBlLnRhZyAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gX3R5cGUuY2hpbGRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIF90eXBlLmNoaWxkLnJldHVybiA9IF90eXBlO1xuICAgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5jaGlsZDtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX3R5cGUgPT09IHdvcmtJblByb2dyZXNzKSBicmVhayBhO1xuICAgICAgICAgICAgICAgIGZvciAoOyBudWxsID09PSBfdHlwZS5zaWJsaW5nOyApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBfdHlwZS5yZXR1cm4gfHwgX3R5cGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUucmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdHlwZS5zaWJsaW5nLnJldHVybiA9IF90eXBlLnJldHVybjtcbiAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudDtcbiAgICAgICAgICAgICAgYTogc3dpdGNoIChcbiAgICAgICAgICAgICAgICAoc2V0SW5pdGlhbFByb3BlcnRpZXMoY3VycmVudCwgcmVuZGVyTGFuZXMsIG5ld1Byb3BzKSxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lcylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImJ1dHRvblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAhIW5ld1Byb3BzLmF1dG9Gb2N1cztcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBcImltZ1wiOlxuICAgICAgICAgICAgICAgICAgY3VycmVudCA9ICEwO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgY3VycmVudCA9ICExO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN1cnJlbnQgJiYgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xNjc3NzIxNztcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmIChjdXJyZW50ICYmIG51bGwgIT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzICE9PSBuZXdQcm9wcyAmJiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIG5ld1Byb3BzICYmXG4gICAgICAgICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICAgICAgICByZW5kZXJMYW5lcyA9IGdldEhvc3RDb250ZXh0KCk7XG4gICAgICAgICAgICBpZiAocG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgICAgX3R5cGUgPSAhZGlkU3VzcGVuZE9yRXJyb3JERVY7XG4gICAgICAgICAgICAgIG5ld1Byb3BzID0gbnVsbDtcbiAgICAgICAgICAgICAgdmFyIHJldHVybkZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG4gICAgICAgICAgICAgIGlmIChudWxsICE9PSByZXR1cm5GaWJlcilcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICgoX3R5cGUgPSBkaWZmSHlkcmF0ZWRUZXh0Rm9yRGV2V2FybmluZ3MoXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IF90eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnVpbGRIeWRyYXRpb25EaWZmTm9kZSh3b3JrSW5Qcm9ncmVzcywgMCkuc2VydmVyUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIChuZXdQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAgIF90eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKF90eXBlID0gZGlmZkh5ZHJhdGVkVGV4dEZvckRldldhcm5pbmdzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gX3R5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLnNlcnZlclByb3BzID0gX3R5cGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN1cnJlbnRbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgY3VycmVudCA9XG4gICAgICAgICAgICAgICAgY3VycmVudC5ub2RlVmFsdWUgPT09IHJlbmRlckxhbmVzIHx8XG4gICAgICAgICAgICAgICAgKG51bGwgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICAgICAgICAgICAhMCA9PT0gbmV3UHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB8fFxuICAgICAgICAgICAgICAgIGNoZWNrRm9yVW5tYXRjaGVkVGV4dChjdXJyZW50Lm5vZGVWYWx1ZSwgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgICAgICAgICA/ICEwXG4gICAgICAgICAgICAgICAgICA6ICExO1xuICAgICAgICAgICAgICBjdXJyZW50IHx8IHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgKF90eXBlID0gcmVuZGVyTGFuZXMuYW5jZXN0b3JJbmZvLmN1cnJlbnQpLFxuICAgICAgICAgICAgICAgIG51bGwgIT0gX3R5cGUgJiZcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRlVGV4dE5lc3RpbmcoXG4gICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICBfdHlwZS50YWcsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLmFuY2VzdG9ySW5mby5pbXBsaWNpdFJvb3RTY29wZVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIoY3VycmVudCkuY3JlYXRlVGV4dE5vZGUoXG4gICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzXG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudFtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgX3R5cGUgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gbmV3UHJvcHMgJiYgbnVsbCAhPT0gbmV3UHJvcHMuZGVoeWRyYXRlZCkge1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGlmICghX3R5cGUpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJBIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50IHdhcyBjb21wbGV0ZWQgd2l0aG91dCBhIGh5ZHJhdGVkIG5vZGUuIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgX3R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgICAgIF90eXBlID0gbnVsbCAhPT0gX3R5cGUgPyBfdHlwZS5kZWh5ZHJhdGVkIDogbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIV90eXBlKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhIGh5ZHJhdGVkIHN1c3BlbnNlIGluc3RhbmNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIF90eXBlW2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgICgoX3R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBfdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPVxuICAgICAgICAgICAgICAgICAgICAgIF90eXBlLnRyZWVCYXNlRHVyYXRpb24pKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgZW1pdFBlbmRpbmdIeWRyYXRpb25XYXJuaW5ncygpLFxuICAgICAgICAgICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSAmJlxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICAgICAgICAgICAgICgoX3R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IF90eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT1cbiAgICAgICAgICAgICAgICAgICAgICAgIF90eXBlLnRyZWVCYXNlRHVyYXRpb24pKTtcbiAgICAgICAgICAgICAgX3R5cGUgPSAhMTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAoX3R5cGUgPSB1cGdyYWRlSHlkcmF0aW9uRXJyb3JzVG9SZWNvdmVyYWJsZSgpKSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50Lm1lbW9pemVkU3RhdGUuaHlkcmF0aW9uRXJyb3JzID0gX3R5cGUpLFxuICAgICAgICAgICAgICAgIChfdHlwZSA9ICEwKTtcbiAgICAgICAgICAgIGlmICghX3R5cGUpIHtcbiAgICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMjU2KVxuICAgICAgICAgICAgICAgIHJldHVybiBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLCB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgaWYgKDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmVuZGVyTGFuZXMgPSBudWxsICE9PSBuZXdQcm9wcztcbiAgICAgICAgICBjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICgobmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAoX3R5cGUgPSBudWxsKSxcbiAgICAgICAgICAgIG51bGwgIT09IG5ld1Byb3BzLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgICAgICAgKF90eXBlID0gbmV3UHJvcHMuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IG5ld1Byb3BzLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IG5ld1Byb3BzLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLFxuICAgICAgICAgICAgcmV0dXJuRmliZXIgIT09IF90eXBlICYmIChuZXdQcm9wcy5mbGFncyB8PSAyMDQ4KSk7XG4gICAgICAgICAgcmVuZGVyTGFuZXMgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQuZmxhZ3MgfD0gODE5Mik7XG4gICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUpO1xuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgIHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAoKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uIC09IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbikpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIF90eXBlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gX3R5cGUpIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgICBuZXdQcm9wcyA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCk7XG4gICAgICAgICAgcmV0dXJuRmliZXIgPSBfdHlwZS5yZW5kZXJpbmc7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHJldHVybkZpYmVyKVxuICAgICAgICAgICAgaWYgKG5ld1Byb3BzKSBjdXRPZmZUYWlsSWZOZWVkZWQoX3R5cGUsICExKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAhPT0gUm9vdEluUHJvZ3Jlc3MgfHxcbiAgICAgICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudCAmJiAwICE9PSAoY3VycmVudC5mbGFncyAmIDEyOCkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBmb3IgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDsgbnVsbCAhPT0gY3VycmVudDsgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSByZXR1cm5GaWJlcikge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjg7XG4gICAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChfdHlwZSwgITEpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcmV0dXJuRmliZXIudXBkYXRlUXVldWU7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSByZW5kZXJMYW5lcztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IHJlbmRlckxhbmVzO1xuXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzKHJlbmRlckxhbmVzLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgICAgICBwdXNoKFxuICAgICAgICAgICAgICAgICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IsXG4gICAgICAgICAgICAgICAgICAgICAgKHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmXG4gICAgICAgICAgICAgICAgICAgICAgICBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaykgfFxuICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBudWxsICE9PSBfdHlwZS50YWlsICYmXG4gICAgICAgICAgICAgICAgbm93JDEoKSA+IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgJiZcbiAgICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgKG5ld1Byb3BzID0gITApLFxuICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChfdHlwZSwgITEpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDQxOTQzMDQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbmV3UHJvcHMpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoKGN1cnJlbnQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocmV0dXJuRmliZXIpKSwgbnVsbCAhPT0gY3VycmVudClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAgICAgKG5ld1Byb3BzID0gITApLFxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgY3VycmVudCksXG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQoX3R5cGUsICEwKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IF90eXBlLnRhaWwgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJoaWRkZW5cIiA9PT0gX3R5cGUudGFpbE1vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgIXJldHVybkZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNIeWRyYXRpbmcpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAyICogbm93JDEoKSAtIF90eXBlLnJlbmRlcmluZ1N0YXJ0VGltZSA+XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lICYmXG4gICAgICAgICAgICAgICAgICA1MzY4NzA5MTIgIT09IHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgICAobmV3UHJvcHMgPSAhMCksXG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQoX3R5cGUsICExKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDQxOTQzMDQpKTtcbiAgICAgICAgICAgIF90eXBlLmlzQmFja3dhcmRzXG4gICAgICAgICAgICAgID8gKChyZXR1cm5GaWJlci5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJldHVybkZpYmVyKSlcbiAgICAgICAgICAgICAgOiAoKGN1cnJlbnQgPSBfdHlwZS5sYXN0KSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50XG4gICAgICAgICAgICAgICAgICA/IChjdXJyZW50LnNpYmxpbmcgPSByZXR1cm5GaWJlcilcbiAgICAgICAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChfdHlwZS5sYXN0ID0gcmV0dXJuRmliZXIpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG51bGwgIT09IF90eXBlLnRhaWwpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoY3VycmVudCA9IF90eXBlLnRhaWwpLFxuICAgICAgICAgICAgICAoX3R5cGUucmVuZGVyaW5nID0gY3VycmVudCksXG4gICAgICAgICAgICAgIChfdHlwZS50YWlsID0gY3VycmVudC5zaWJsaW5nKSxcbiAgICAgICAgICAgICAgKF90eXBlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdyQxKCkpLFxuICAgICAgICAgICAgICAoY3VycmVudC5zaWJsaW5nID0gbnVsbCksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IG5ld1Byb3BzXG4gICAgICAgICAgICAgICAgPyAocmVuZGVyTGFuZXMgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaykgfFxuICAgICAgICAgICAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcyAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKSxcbiAgICAgICAgICAgICAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcG9wSGlkZGVuQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAobmV3UHJvcHMgPSBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAobnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSAhPT0gbmV3UHJvcHMgJiZcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MilcbiAgICAgICAgICAgICAgOiBuZXdQcm9wcyAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MiksXG4gICAgICAgICAgICBuZXdQcm9wc1xuICAgICAgICAgICAgICA/IDAgIT09IChyZW5kZXJMYW5lcyAmIDUzNjg3MDkxMikgJiZcbiAgICAgICAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpICYmXG4gICAgICAgICAgICAgICAgKGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyAmIDYgJiZcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyKSlcbiAgICAgICAgICAgICAgOiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzLnJldHJ5UXVldWUpLFxuICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksXG4gICAgICAgICAgICAobmV3UHJvcHMgPSBudWxsKSxcbiAgICAgICAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgICAgICAgKG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksXG4gICAgICAgICAgICBuZXdQcm9wcyAhPT0gcmVuZGVyTGFuZXMgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDgpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwb3AocmVzdW1lZENhY2hlLCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIChyZW5kZXJMYW5lcyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZSksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmNhY2hlICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjA0OCksXG4gICAgICAgICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgK1xuICAgICAgICAgIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW53aW5kV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgcG9wVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzKSxcbiAgICAgICAgICAgIGN1cnJlbnQgJiA2NTUzNlxuICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvcFByb3ZpZGVyKENhY2hlQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzKSxcbiAgICAgICAgICAgIDAgIT09IChjdXJyZW50ICYgNjU1MzYpICYmIDAgPT09IChjdXJyZW50ICYgMTI4KVxuICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQuZGVoeWRyYXRlZCkge1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUaHJldyBpbiBuZXdseSBtb3VudGVkIGRlaHlkcmF0ZWQgY29tcG9uZW50LiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuICAgICAgICAgIHJldHVybiBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChjdXJyZW50ICYgLTY1NTM3KSB8IDEyOCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHBvcEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwb3AocmVzdW1lZENhY2hlLCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzKSxcbiAgICAgICAgICAgIGN1cnJlbnQgJiA2NTUzNlxuICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJldHVybiBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIGludGVycnVwdGVkV29yaykge1xuICAgICAgcG9wVHJlZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcG9wUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrLnR5cGUsIGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgcG9wSGlkZGVuQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgcG9wKHJlc3VtZWRDYWNoZSwgaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIGludGVycnVwdGVkV29yayk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFByb2ZpbGUoY3VycmVudCkge1xuICAgICAgcmV0dXJuIChjdXJyZW50Lm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va0xheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrLCBob29rRmxhZ3MpIHtcbiAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayksXG4gICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgOiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KGhvb2tGbGFncywgZmluaXNoZWRXb3JrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va0xheW91dFVubW91bnRFZmZlY3RzKFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIGhvb2tGbGFnc1xuICAgICkge1xuICAgICAgc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspXG4gICAgICAgID8gKHN0YXJ0RWZmZWN0VGltZXIoKSxcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICBob29rRmxhZ3MsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICA6IGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgIGhvb2tGbGFncyxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KGZsYWdzLCBmaW5pc2hlZFdvcmspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSxcbiAgICAgICAgICBsYXN0RWZmZWN0ID0gbnVsbCAhPT0gdXBkYXRlUXVldWUgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcbiAgICAgICAgaWYgKG51bGwgIT09IGxhc3RFZmZlY3QpIHtcbiAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgdXBkYXRlUXVldWUgPSBmaXJzdEVmZmVjdDtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh1cGRhdGVRdWV1ZS50YWcgJiBmbGFncykgPT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICgoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFnc1xuICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RhcnRlZCAmJlxuICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RhcnRlZChcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiAoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0YXJ0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RhcnRlZChcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAobGFzdEVmZmVjdCA9IHZvaWQgMCksXG4gICAgICAgICAgICAgIChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAoaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gITApLFxuICAgICAgICAgICAgICAobGFzdEVmZmVjdCA9IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjYWxsQ3JlYXRlSW5ERVYsXG4gICAgICAgICAgICAgICAgdXBkYXRlUXVldWVcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAoaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gITEpLFxuICAgICAgICAgICAgICAoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFnc1xuICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RvcHBlZCAmJlxuICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RvcHBlZCgpXG4gICAgICAgICAgICAgICAgOiAoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0b3BwZWQgJiZcbiAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZCgpLFxuICAgICAgICAgICAgICB2b2lkIDAgIT09IGxhc3RFZmZlY3QgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgbGFzdEVmZmVjdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgaG9va05hbWUgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIGhvb2tOYW1lID1cbiAgICAgICAgICAgICAgICAwICE9PSAodXBkYXRlUXVldWUudGFnICYgTGF5b3V0KVxuICAgICAgICAgICAgICAgICAgPyBcInVzZUxheW91dEVmZmVjdFwiXG4gICAgICAgICAgICAgICAgICA6IDAgIT09ICh1cGRhdGVRdWV1ZS50YWcgJiBJbnNlcnRpb24pXG4gICAgICAgICAgICAgICAgICAgID8gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIlxuICAgICAgICAgICAgICAgICAgICA6IFwidXNlRWZmZWN0XCI7XG4gICAgICAgICAgICAgIHZhciBhZGRlbmR1bSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPVxuICAgICAgICAgICAgICAgIG51bGwgPT09IGxhc3RFZmZlY3RcbiAgICAgICAgICAgICAgICAgID8gXCIgWW91IHJldHVybmVkIG51bGwuIElmIHlvdXIgZWZmZWN0IGRvZXMgbm90IHJlcXVpcmUgY2xlYW4gdXAsIHJldHVybiB1bmRlZmluZWQgKG9yIG5vdGhpbmcpLlwiXG4gICAgICAgICAgICAgICAgICA6IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGxhc3RFZmZlY3QudGhlblxuICAgICAgICAgICAgICAgICAgICA/IFwiXFxuXFxuSXQgbG9va3MgbGlrZSB5b3Ugd3JvdGUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIGhvb2tOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICBcIihhc3luYyAoKSA9PiAuLi4pIG9yIHJldHVybmVkIGEgUHJvbWlzZS4gSW5zdGVhZCwgd3JpdGUgdGhlIGFzeW5jIGZ1bmN0aW9uIGluc2lkZSB5b3VyIGVmZmVjdCBhbmQgY2FsbCBpdCBpbW1lZGlhdGVseTpcXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgaG9va05hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiKCgpID0+IHtcXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcXG4gICAgLy8gWW91IGNhbiBhd2FpdCBoZXJlXFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgTXlBUEkuZ2V0RGF0YShzb21lSWQpO1xcbiAgICAvLyAuLi5cXG4gIH1cXG4gIGZldGNoRGF0YSgpO1xcbn0sIFtzb21lSWRdKTsgLy8gT3IgW10gaWYgZWZmZWN0IGRvZXNuJ3QgbmVlZCBwcm9wcyBvciBzdGF0ZVxcblxcbkxlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL3JlYWN0LmRldi9saW5rL2hvb2tzLWRhdGEtZmV0Y2hpbmdcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiIFlvdSByZXR1cm5lZDogXCIgKyBsYXN0RWZmZWN0O1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKG4sIGEpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiJXMgbXVzdCBub3QgcmV0dXJuIGFueXRoaW5nIGJlc2lkZXMgYSBmdW5jdGlvbiwgd2hpY2ggaXMgdXNlZCBmb3IgY2xlYW4tdXAuJXNcIixcbiAgICAgICAgICAgICAgICAgICAgbixcbiAgICAgICAgICAgICAgICAgICAgYVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhvb2tOYW1lLFxuICAgICAgICAgICAgICAgIGFkZGVuZHVtXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLm5leHQ7XG4gICAgICAgICAgfSB3aGlsZSAodXBkYXRlUXVldWUgIT09IGZpcnN0RWZmZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgIGZsYWdzLFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlLFxuICAgICAgICAgIGxhc3RFZmZlY3QgPSBudWxsICE9PSB1cGRhdGVRdWV1ZSA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPT0gbGFzdEVmZmVjdCkge1xuICAgICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSA9IGZpcnN0RWZmZWN0O1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgodXBkYXRlUXVldWUudGFnICYgZmxhZ3MpID09PSBmbGFncykge1xuICAgICAgICAgICAgICB2YXIgaW5zdCA9IHVwZGF0ZVF1ZXVlLmluc3QsXG4gICAgICAgICAgICAgICAgZGVzdHJveSA9IGluc3QuZGVzdHJveTtcbiAgICAgICAgICAgICAgdm9pZCAwICE9PSBkZXN0cm95ICYmXG4gICAgICAgICAgICAgICAgKChpbnN0LmRlc3Ryb3kgPSB2b2lkIDApLFxuICAgICAgICAgICAgICAgIChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzXG4gICAgICAgICAgICAgICAgICA/IG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0YXJ0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdGFydGVkKFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IChmbGFncyAmIExheW91dCkgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdGFydGVkICYmXG4gICAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdGFydGVkKFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgIChpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMCksXG4gICAgICAgICAgICAgICAgKGxhc3RFZmZlY3QgPSBmaW5pc2hlZFdvcmspLFxuICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdCxcbiAgICAgICAgICAgICAgICAgIGNhbGxEZXN0cm95SW5ERVYsXG4gICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgIGRlc3Ryb3lcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgIChpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMSksXG4gICAgICAgICAgICAgICAgKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3NcbiAgICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RvcHBlZCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0b3BwZWQoKVxuICAgICAgICAgICAgICAgICAgOiAoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWUubmV4dDtcbiAgICAgICAgICB9IHdoaWxlICh1cGRhdGVRdWV1ZSAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrLCBob29rRmxhZ3MpIHtcbiAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayksXG4gICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgOiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KGhvb2tGbGFncywgZmluaXNoZWRXb3JrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBob29rRmxhZ3NcbiAgICApIHtcbiAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgaG9va0ZsYWdzLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICAgICksXG4gICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgOiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICBob29rRmxhZ3MsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICBpZiAobnVsbCAhPT0gdXBkYXRlUXVldWUpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUuZGVmYXVsdFByb3BzIHx8XG4gICAgICAgICAgXCJyZWZcIiBpbiBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgfHxcbiAgICAgICAgICAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICApKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdENhbGxiYWNrcyxcbiAgICAgICAgICAgIHVwZGF0ZVF1ZXVlLFxuICAgICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGxHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXMoaW5zdGFuY2UsIHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRDbGFzc1NuYXBzaG90KGZpbmlzaGVkV29yaywgY3VycmVudCkge1xuICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICBmaW5pc2hlZFdvcmsudHlwZS5kZWZhdWx0UHJvcHMgfHxcbiAgICAgICAgXCJyZWZcIiBpbiBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzIHx8XG4gICAgICAgIChjdXJyZW50LnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICksXG4gICAgICAgIGN1cnJlbnQuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgKSk7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzb2x2ZWRQcmV2UHJvcHMgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZVxuICAgICAgICApO1xuICAgICAgICB2YXIgc25hcHNob3QgPSBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY2FsbEdldFNuYXBzaG90QmVmb3JlVXBkYXRlcyxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHJlc29sdmVkUHJldlByb3BzLFxuICAgICAgICAgIHByZXZTdGF0ZVxuICAgICAgICApO1xuICAgICAgICBwcmV2UHJvcHMgPSBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcbiAgICAgICAgdm9pZCAwICE9PSBzbmFwc2hvdCB8fFxuICAgICAgICAgIHByZXZQcm9wcy5oYXMoZmluaXNoZWRXb3JrLnR5cGUpIHx8XG4gICAgICAgICAgKHByZXZQcm9wcy5hZGQoZmluaXNoZWRXb3JrLnR5cGUpLFxuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKGZpbmlzaGVkV29yaywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCIlcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpOiBBIHNuYXBzaG90IHZhbHVlIChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiBZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIGN1cnJlbnQuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIGluc3RhbmNlXG4gICAgKSB7XG4gICAgICBpbnN0YW5jZS5wcm9wcyA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKFxuICAgICAgICBjdXJyZW50LnR5cGUsXG4gICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wc1xuICAgICAgKTtcbiAgICAgIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgc2hvdWxkUHJvZmlsZShjdXJyZW50KVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50SW5ERVYsXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICA6IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudEluREVWLFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEF0dGFjaFJlZihmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciByZWYgPSBmaW5pc2hlZFdvcmsucmVmO1xuICAgICAgaWYgKG51bGwgIT09IHJlZikge1xuICAgICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdmFyIGluc3RhbmNlVG9Vc2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIGluc3RhbmNlVG9Vc2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGluc3RhbmNlVG9Vc2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWYpXG4gICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN0YXJ0RWZmZWN0VGltZXIoKSxcbiAgICAgICAgICAgICAgICAoZmluaXNoZWRXb3JrLnJlZkNsZWFudXAgPSByZWYoaW5zdGFuY2VUb1VzZSkpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGZpbmlzaGVkV29yay5yZWZDbGVhbnVwID0gcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHJlZlxuICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFwiU3RyaW5nIHJlZnMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuXCIpXG4gICAgICAgICAgICA6IHJlZi5oYXNPd25Qcm9wZXJ0eShcImN1cnJlbnRcIikgfHxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgcmVmIG9iamVjdCBwcm92aWRlZCBmb3IgJXMuIFVzZSBlaXRoZXIgYSByZWYtc2V0dGVyIGZ1bmN0aW9uIG9yIFJlYWN0LmNyZWF0ZVJlZigpLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHJlZi5jdXJyZW50ID0gaW5zdGFuY2VUb1VzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhZmVseUF0dGFjaFJlZihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICBydW5XaXRoRmliZXJJbkRFVihjdXJyZW50LCBjb21taXRBdHRhY2hSZWYsIGN1cnJlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcikge1xuICAgICAgdmFyIHJlZiA9IGN1cnJlbnQucmVmLFxuICAgICAgICByZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuICAgICAgaWYgKG51bGwgIT09IHJlZilcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZkNsZWFudXApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRQcm9maWxlKGN1cnJlbnQpKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN0YXJ0RWZmZWN0VGltZXIoKSwgcnVuV2l0aEZpYmVySW5ERVYoY3VycmVudCwgcmVmQ2xlYW51cCk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oY3VycmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgcnVuV2l0aEZpYmVySW5ERVYoY3VycmVudCwgcmVmQ2xlYW51cCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgKGN1cnJlbnQucmVmQ2xlYW51cCA9IG51bGwpLFxuICAgICAgICAgICAgICAoY3VycmVudCA9IGN1cnJlbnQuYWx0ZXJuYXRlKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBjdXJyZW50ICYmIChjdXJyZW50LnJlZkNsZWFudXAgPSBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZilcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoY3VycmVudCkpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhcnRFZmZlY3RUaW1lcigpLCBydW5XaXRoRmliZXJJbkRFVihjdXJyZW50LCByZWYsIG51bGwpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKGN1cnJlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHJ1bldpdGhGaWJlckluREVWKGN1cnJlbnQsIHJlZiwgbnVsbCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IkNykge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IkNyk7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIHJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0UHJvZmlsZXIoXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBjdXJyZW50LFxuICAgICAgY29tbWl0U3RhcnRUaW1lLFxuICAgICAgZWZmZWN0RHVyYXRpb25cbiAgICApIHtcbiAgICAgIHZhciBfZmluaXNoZWRXb3JrJG1lbW9pemUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgaWQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUuaWQsXG4gICAgICAgIG9uQ29tbWl0ID0gX2ZpbmlzaGVkV29yayRtZW1vaXplLm9uQ29tbWl0O1xuICAgICAgX2ZpbmlzaGVkV29yayRtZW1vaXplID0gX2ZpbmlzaGVkV29yayRtZW1vaXplLm9uUmVuZGVyO1xuICAgICAgY3VycmVudCA9IG51bGwgPT09IGN1cnJlbnQgPyBcIm1vdW50XCIgOiBcInVwZGF0ZVwiO1xuICAgICAgY3VycmVudFVwZGF0ZUlzTmVzdGVkICYmIChjdXJyZW50ID0gXCJuZXN0ZWQtdXBkYXRlXCIpO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2ZpbmlzaGVkV29yayRtZW1vaXplICYmXG4gICAgICAgIF9maW5pc2hlZFdvcmskbWVtb2l6ZShcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIGZpbmlzaGVkV29yay5hY3R1YWxEdXJhdGlvbixcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudHJlZUJhc2VEdXJhdGlvbixcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuYWN0dWFsU3RhcnRUaW1lLFxuICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZVxuICAgICAgICApO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygb25Db21taXQgJiZcbiAgICAgICAgb25Db21taXQoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMuaWQsXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICBlZmZlY3REdXJhdGlvbixcbiAgICAgICAgICBjb21taXRTdGFydFRpbWVcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0UHJvZmlsZXJQb3N0Q29tbWl0SW1wbChcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGN1cnJlbnQsXG4gICAgICBjb21taXRTdGFydFRpbWUsXG4gICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb25cbiAgICApIHtcbiAgICAgIHZhciBfZmluaXNoZWRXb3JrJG1lbW9pemUyID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICBmaW5pc2hlZFdvcmsgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLmlkO1xuICAgICAgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25Qb3N0Q29tbWl0O1xuICAgICAgY3VycmVudCA9IG51bGwgPT09IGN1cnJlbnQgPyBcIm1vdW50XCIgOiBcInVwZGF0ZVwiO1xuICAgICAgY3VycmVudFVwZGF0ZUlzTmVzdGVkICYmIChjdXJyZW50ID0gXCJuZXN0ZWQtdXBkYXRlXCIpO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2ZpbmlzaGVkV29yayRtZW1vaXplMiAmJlxuICAgICAgICBfZmluaXNoZWRXb3JrJG1lbW9pemUyKFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvbixcbiAgICAgICAgICBjb21taXRTdGFydFRpbWVcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9zdE1vdW50KGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGNvbW1pdE1vdW50LFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9zdFVwZGF0ZShmaW5pc2hlZFdvcmssIG5ld1Byb3BzLCBvbGRQcm9wcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGNvbW1pdFVwZGF0ZSxcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLFxuICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlLFxuICAgICAgICAgIG9sZFByb3BzLFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzSG9zdFBhcmVudChmaWJlcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgNSA9PT0gZmliZXIudGFnIHx8XG4gICAgICAgIDMgPT09IGZpYmVyLnRhZyB8fFxuICAgICAgICAyNiA9PT0gZmliZXIudGFnIHx8XG4gICAgICAgICgyNyA9PT0gZmliZXIudGFnICYmIGlzU2luZ2xldG9uU2NvcGUoZmliZXIudHlwZSkpIHx8XG4gICAgICAgIDQgPT09IGZpYmVyLnRhZ1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SG9zdFNpYmxpbmcoZmliZXIpIHtcbiAgICAgIGE6IGZvciAoOzspIHtcbiAgICAgICAgZm9yICg7IG51bGwgPT09IGZpYmVyLnNpYmxpbmc7ICkge1xuICAgICAgICAgIGlmIChudWxsID09PSBmaWJlci5yZXR1cm4gfHwgaXNIb3N0UGFyZW50KGZpYmVyLnJldHVybikpIHJldHVybiBudWxsO1xuICAgICAgICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZpYmVyLnNpYmxpbmcucmV0dXJuID0gZmliZXIucmV0dXJuO1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIGZpYmVyID0gZmliZXIuc2libGluZztcbiAgICAgICAgICA1ICE9PSBmaWJlci50YWcgJiYgNiAhPT0gZmliZXIudGFnICYmIDE4ICE9PSBmaWJlci50YWc7XG5cbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKDI3ID09PSBmaWJlci50YWcgJiYgaXNTaW5nbGV0b25TY29wZShmaWJlci50eXBlKSkgY29udGludWUgYTtcbiAgICAgICAgICBpZiAoZmliZXIuZmxhZ3MgJiAyKSBjb250aW51ZSBhO1xuICAgICAgICAgIGlmIChudWxsID09PSBmaWJlci5jaGlsZCB8fCA0ID09PSBmaWJlci50YWcpIGNvbnRpbnVlIGE7XG4gICAgICAgICAgZWxzZSAoZmliZXIuY2hpbGQucmV0dXJuID0gZmliZXIpLCAoZmliZXIgPSBmaWJlci5jaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoZmliZXIuZmxhZ3MgJiAyKSkgcmV0dXJuIGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgICAgaWYgKDUgPT09IHRhZyB8fCA2ID09PSB0YWcpXG4gICAgICAgIChub2RlID0gbm9kZS5zdGF0ZU5vZGUpLFxuICAgICAgICAgIGJlZm9yZVxuICAgICAgICAgICAgPyAoOSA9PT0gcGFyZW50Lm5vZGVUeXBlXG4gICAgICAgICAgICAgICAgPyBwYXJlbnQuYm9keVxuICAgICAgICAgICAgICAgIDogXCJIVE1MXCIgPT09IHBhcmVudC5ub2RlTmFtZVxuICAgICAgICAgICAgICAgICAgPyBwYXJlbnQub3duZXJEb2N1bWVudC5ib2R5XG4gICAgICAgICAgICAgICAgICA6IHBhcmVudFxuICAgICAgICAgICAgICApLmluc2VydEJlZm9yZShub2RlLCBiZWZvcmUpXG4gICAgICAgICAgICA6ICgoYmVmb3JlID1cbiAgICAgICAgICAgICAgICA5ID09PSBwYXJlbnQubm9kZVR5cGVcbiAgICAgICAgICAgICAgICAgID8gcGFyZW50LmJvZHlcbiAgICAgICAgICAgICAgICAgIDogXCJIVE1MXCIgPT09IHBhcmVudC5ub2RlTmFtZVxuICAgICAgICAgICAgICAgICAgICA/IHBhcmVudC5vd25lckRvY3VtZW50LmJvZHlcbiAgICAgICAgICAgICAgICAgICAgOiBwYXJlbnQpLFxuICAgICAgICAgICAgICBiZWZvcmUuYXBwZW5kQ2hpbGQobm9kZSksXG4gICAgICAgICAgICAgIChwYXJlbnQgPSBwYXJlbnQuX3JlYWN0Um9vdENvbnRhaW5lciksXG4gICAgICAgICAgICAgIChudWxsICE9PSBwYXJlbnQgJiYgdm9pZCAwICE9PSBwYXJlbnQpIHx8XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gYmVmb3JlLm9uY2xpY2sgfHxcbiAgICAgICAgICAgICAgICAoYmVmb3JlLm9uY2xpY2sgPSBub29wJDEpKTtcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICA0ICE9PSB0YWcgJiZcbiAgICAgICAgKDI3ID09PSB0YWcgJiZcbiAgICAgICAgICBpc1NpbmdsZXRvblNjb3BlKG5vZGUudHlwZSkgJiZcbiAgICAgICAgICAoKHBhcmVudCA9IG5vZGUuc3RhdGVOb2RlKSwgKGJlZm9yZSA9IG51bGwpKSxcbiAgICAgICAgKG5vZGUgPSBub2RlLmNoaWxkKSxcbiAgICAgICAgbnVsbCAhPT0gbm9kZSlcbiAgICAgIClcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGJlZm9yZSwgcGFyZW50KSxcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICAgICAgbnVsbCAhPT0gbm9kZTtcblxuICAgICAgICApXG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCksXG4gICAgICAgICAgICAobm9kZSA9IG5vZGUuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgICAgaWYgKDUgPT09IHRhZyB8fCA2ID09PSB0YWcpXG4gICAgICAgIChub2RlID0gbm9kZS5zdGF0ZU5vZGUpLFxuICAgICAgICAgIGJlZm9yZSA/IHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgYmVmb3JlKSA6IHBhcmVudC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICA0ICE9PSB0YWcgJiZcbiAgICAgICAgKDI3ID09PSB0YWcgJiYgaXNTaW5nbGV0b25TY29wZShub2RlLnR5cGUpICYmIChwYXJlbnQgPSBub2RlLnN0YXRlTm9kZSksXG4gICAgICAgIChub2RlID0gbm9kZS5jaGlsZCksXG4gICAgICAgIG51bGwgIT09IG5vZGUpXG4gICAgICApXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSxcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICAgICAgbnVsbCAhPT0gbm9kZTtcblxuICAgICAgICApXG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSxcbiAgICAgICAgICAgIChub2RlID0gbm9kZS5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0UGxhY2VtZW50KGZpbmlzaGVkV29yaykge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGhvc3RQYXJlbnRGaWJlciwgcGFyZW50RmliZXIgPSBmaW5pc2hlZFdvcmsucmV0dXJuO1xuICAgICAgICBudWxsICE9PSBwYXJlbnRGaWJlcjtcblxuICAgICAgKSB7XG4gICAgICAgIGlmIChpc0hvc3RQYXJlbnQocGFyZW50RmliZXIpKSB7XG4gICAgICAgICAgaG9zdFBhcmVudEZpYmVyID0gcGFyZW50RmliZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobnVsbCA9PSBob3N0UGFyZW50RmliZXIpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgICBzd2l0Y2ggKGhvc3RQYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBob3N0UGFyZW50RmliZXIgPSBob3N0UGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIHBhcmVudEZpYmVyID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBwYXJlbnRGaWJlcixcbiAgICAgICAgICAgIGhvc3RQYXJlbnRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBwYXJlbnRGaWJlciA9IGhvc3RQYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgaG9zdFBhcmVudEZpYmVyLmZsYWdzICYgMzIgJiZcbiAgICAgICAgICAgIChyZXNldFRleHRDb250ZW50KHBhcmVudEZpYmVyKSwgKGhvc3RQYXJlbnRGaWJlci5mbGFncyAmPSAtMzMpKTtcbiAgICAgICAgICBob3N0UGFyZW50RmliZXIgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGhvc3RQYXJlbnRGaWJlcixcbiAgICAgICAgICAgIHBhcmVudEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaG9zdFBhcmVudEZpYmVyID0gaG9zdFBhcmVudEZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgIHBhcmVudEZpYmVyID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgcGFyZW50RmliZXIsXG4gICAgICAgICAgICBob3N0UGFyZW50RmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9zdFNpbmdsZXRvbkFjcXVpc2l0aW9uKGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHNpbmdsZXRvbiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsXG4gICAgICAgIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICB0cnkge1xuICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgYWNxdWlyZVNpbmdsZXRvbkluc3RhbmNlLFxuICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlLFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgIHNpbmdsZXRvbixcbiAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmlyc3RDaGlsZCkge1xuICAgICAgcm9vdCA9IHJvb3QuY29udGFpbmVySW5mbztcbiAgICAgIGV2ZW50c0VuYWJsZWQgPSBfZW5hYmxlZDtcbiAgICAgIHJvb3QgPSBnZXRBY3RpdmVFbGVtZW50RGVlcChyb290KTtcbiAgICAgIGlmIChoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocm9vdCkpIHtcbiAgICAgICAgaWYgKFwic2VsZWN0aW9uU3RhcnRcIiBpbiByb290KVxuICAgICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXAgPSB7XG4gICAgICAgICAgICBzdGFydDogcm9vdC5zZWxlY3Rpb25TdGFydCxcbiAgICAgICAgICAgIGVuZDogcm9vdC5zZWxlY3Rpb25FbmRcbiAgICAgICAgICB9O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID1cbiAgICAgICAgICAgICAgKChKU0NvbXBpbGVyX3RlbXAgPSByb290Lm93bmVyRG9jdW1lbnQpICYmXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLmRlZmF1bHRWaWV3KSB8fFxuICAgICAgICAgICAgICB3aW5kb3c7XG4gICAgICAgICAgICB2YXIgc2VsZWN0aW9uID1cbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLmdldFNlbGVjdGlvbiAmJiBKU0NvbXBpbGVyX3RlbXAuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIDAgIT09IHNlbGVjdGlvbi5yYW5nZUNvdW50KSB7XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICAgICAgICAgICAgICB2YXIgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICAgICAgICBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlO1xuICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wLm5vZGVUeXBlLCBmb2N1c05vZGUubm9kZVR5cGU7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUkMikge1xuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMCxcbiAgICAgICAgICAgICAgICBzdGFydCA9IC0xLFxuICAgICAgICAgICAgICAgIGVuZCA9IC0xLFxuICAgICAgICAgICAgICAgIGluZGV4V2l0aGluQW5jaG9yID0gMCxcbiAgICAgICAgICAgICAgICBpbmRleFdpdGhpbkZvY3VzID0gMCxcbiAgICAgICAgICAgICAgICBub2RlID0gcm9vdCxcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgYjogZm9yICg7Oykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG5leHQ7IDsgKSB7XG4gICAgICAgICAgICAgICAgICBub2RlICE9PSBKU0NvbXBpbGVyX3RlbXAgfHxcbiAgICAgICAgICAgICAgICAgICAgKDAgIT09IGFuY2hvck9mZnNldCAmJiAzICE9PSBub2RlLm5vZGVUeXBlKSB8fFxuICAgICAgICAgICAgICAgICAgICAoc3RhcnQgPSBsZW5ndGggKyBhbmNob3JPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgbm9kZSAhPT0gZm9jdXNOb2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICgwICE9PSBzZWxlY3Rpb24gJiYgMyAhPT0gbm9kZS5ub2RlVHlwZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGVuZCA9IGxlbmd0aCArIHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAzID09PSBub2RlLm5vZGVUeXBlICYmIChsZW5ndGggKz0gbm9kZS5ub2RlVmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSAobmV4dCA9IG5vZGUuZmlyc3RDaGlsZCkpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgICAgICAgICBub2RlID0gbmV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT09IHJvb3QpIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID09PSBKU0NvbXBpbGVyX3RlbXAgJiZcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleFdpdGhpbkFuY2hvciA9PT0gYW5jaG9yT2Zmc2V0ICYmXG4gICAgICAgICAgICAgICAgICAgIChzdGFydCA9IGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID09PSBmb2N1c05vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKytpbmRleFdpdGhpbkZvY3VzID09PSBzZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgKGVuZCA9IGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gKG5leHQgPSBub2RlLm5leHRTaWJsaW5nKSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBub2RlID0gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICAgICAgICAgICAgLTEgPT09IHN0YXJ0IHx8IC0xID09PSBlbmQgPyBudWxsIDogeyBzdGFydDogc3RhcnQsIGVuZDogZW5kIH07XG4gICAgICAgICAgICB9IGVsc2UgSlNDb21waWxlcl90ZW1wID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IEpTQ29tcGlsZXJfdGVtcCB8fCB7IHN0YXJ0OiAwLCBlbmQ6IDAgfTtcbiAgICAgIH0gZWxzZSBKU0NvbXBpbGVyX3RlbXAgPSBudWxsO1xuICAgICAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSB7XG4gICAgICAgIGZvY3VzZWRFbGVtOiByb290LFxuICAgICAgICBzZWxlY3Rpb25SYW5nZTogSlNDb21waWxlcl90ZW1wXG4gICAgICB9O1xuICAgICAgX2VuYWJsZWQgPSAhMTtcbiAgICAgIGZvciAobmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQ7IG51bGwgIT09IG5leHRFZmZlY3Q7IClcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgoZmlyc3RDaGlsZCA9IG5leHRFZmZlY3QpLFxuICAgICAgICAgIChyb290ID0gZmlyc3RDaGlsZC5jaGlsZCksXG4gICAgICAgICAgMCAhPT0gKGZpcnN0Q2hpbGQuc3VidHJlZUZsYWdzICYgMTAyNCkgJiYgbnVsbCAhPT0gcm9vdClcbiAgICAgICAgKVxuICAgICAgICAgIChyb290LnJldHVybiA9IGZpcnN0Q2hpbGQpLCAobmV4dEVmZmVjdCA9IHJvb3QpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgZm9yICg7IG51bGwgIT09IG5leHRFZmZlY3Q7ICkge1xuICAgICAgICAgICAgcm9vdCA9IGZpcnN0Q2hpbGQgPSBuZXh0RWZmZWN0O1xuICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gcm9vdC5hbHRlcm5hdGU7XG4gICAgICAgICAgICBhbmNob3JPZmZzZXQgPSByb290LmZsYWdzO1xuICAgICAgICAgICAgc3dpdGNoIChyb290LnRhZykge1xuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAwICE9PSAoYW5jaG9yT2Zmc2V0ICYgMTAyNCkgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IEpTQ29tcGlsZXJfdGVtcCAmJlxuICAgICAgICAgICAgICAgICAgY29tbWl0Q2xhc3NTbmFwc2hvdChyb290LCBKU0NvbXBpbGVyX3RlbXApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgaWYgKDAgIT09IChhbmNob3JPZmZzZXQgJiAxMDI0KSlcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKChyb290ID0gcm9vdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksXG4gICAgICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX3RlbXAgPSByb290Lm5vZGVUeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgOSA9PT0gSlNDb21waWxlcl90ZW1wKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBjbGVhckNvbnRhaW5lclNwYXJpbmdseShyb290KTtcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKDEgPT09IEpTQ29tcGlsZXJfdGVtcClcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb290Lm5vZGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkhFQURcIjpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiSFRNTFwiOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJCT0RZXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckNvbnRhaW5lclNwYXJpbmdseShyb290KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByb290LnRleHRDb250ZW50ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICgwICE9PSAoYW5jaG9yT2Zmc2V0ICYgMTAyNCkpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvb3QgPSBmaXJzdENoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gcm9vdCkge1xuICAgICAgICAgICAgICByb290LnJldHVybiA9IGZpcnN0Q2hpbGQucmV0dXJuO1xuICAgICAgICAgICAgICBuZXh0RWZmZWN0ID0gcm9vdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0RWZmZWN0ID0gZmlyc3RDaGlsZC5yZXR1cm47XG4gICAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgTGF5b3V0IHwgSGFzRWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoZmxhZ3MgJiA0KVxuICAgICAgICAgICAgaWYgKCgoZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSksIG51bGwgPT09IGN1cnJlbnQpKVxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZS5kZWZhdWx0UHJvcHMgfHxcbiAgICAgICAgICAgICAgICBcInJlZlwiIGluIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzIHx8XG4gICAgICAgICAgICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyB8fFxuICAgICAgICAgICAgICAgIChmaW5pc2hlZFJvb3QucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBjb21wb25lbnREaWRNb3VudC4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIGNvbXBvbmVudERpZE1vdW50LiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50SW5ERVYsXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICAgICAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50SW5ERVYsXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUuZGVmYXVsdFByb3BzIHx8XG4gICAgICAgICAgICAgICAgXCJyZWZcIiBpbiBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgICAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgfHxcbiAgICAgICAgICAgICAgICAoZmluaXNoZWRSb290LnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgY29tcG9uZW50RGlkVXBkYXRlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgY29tcG9uZW50RGlkVXBkYXRlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlSW5ERVYsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgICAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlSW5ERVYsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBmbGFncyAmIDY0ICYmIGNvbW1pdENsYXNzQ2FsbGJhY2tzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA1MTIgJiYgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjdXJyZW50ID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmbGFncyAmIDY0ICYmXG4gICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSwgbnVsbCAhPT0gZmxhZ3MpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmV2UHJvcHMgPSBudWxsO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpbmlzaGVkV29yay5jaGlsZClcbiAgICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICBwcmV2UHJvcHMgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdENhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICBmbGFncyxcbiAgICAgICAgICAgICAgICBwcmV2UHJvcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaW5pc2hlZFJvb3QuZWZmZWN0RHVyYXRpb24gKz0gcG9wTmVzdGVkRWZmZWN0RHVyYXRpb25zKGN1cnJlbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgY29tbWl0SG9zdFNpbmdsZXRvbkFjcXVpc2l0aW9uKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJiBmbGFncyAmIDQgJiYgY29tbWl0SG9zdE1vdW50KGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA1MTIgJiYgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgaWYgKGZsYWdzICYgNCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgZmluaXNoZWRSb290LmVmZmVjdER1cmF0aW9uICs9IGJ1YmJsZU5lc3RlZEVmZmVjdER1cmF0aW9ucyhmbGFncyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0UHJvZmlsZXIsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgY29tbWl0U3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5lZmZlY3REdXJhdGlvblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA2NCAmJlxuICAgICAgICAgICAgKChmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFJvb3QgJiZcbiAgICAgICAgICAgICAgKChmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFJvb3QuZGVoeWRyYXRlZCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkUm9vdCAmJlxuICAgICAgICAgICAgICAgICgoZmluaXNoZWRXb3JrID0gcmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeS5iaW5kKFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3VzcGVuc2VJbnN0YW5jZVJldHJ5KGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBmbGFncyA9XG4gICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSB8fCBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgICAgaWYgKCFmbGFncykge1xuICAgICAgICAgICAgY3VycmVudCA9XG4gICAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICAgIHByZXZQcm9wcyA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBmbGFncztcbiAgICAgICAgICAgIChvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gY3VycmVudCkgJiZcbiAgICAgICAgICAgICFwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlblxuICAgICAgICAgICAgICA/IHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDg3NzIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZQcm9wcztcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhmaWJlcikge1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJlxuICAgICAgICAoKGZpYmVyLmFsdGVybmF0ZSA9IG51bGwpLCBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhhbHRlcm5hdGUpKTtcbiAgICAgIGZpYmVyLmNoaWxkID0gbnVsbDtcbiAgICAgIGZpYmVyLmRlbGV0aW9ucyA9IG51bGw7XG4gICAgICBmaWJlci5zaWJsaW5nID0gbnVsbDtcbiAgICAgIDUgPT09IGZpYmVyLnRhZyAmJlxuICAgICAgICAoKGFsdGVybmF0ZSA9IGZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiBkZXRhY2hEZWxldGVkSW5zdGFuY2UoYWx0ZXJuYXRlKSk7XG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xuICAgICAgZmliZXIuX2RlYnVnT3duZXIgPSBudWxsO1xuICAgICAgZmliZXIucmV0dXJuID0gbnVsbDtcbiAgICAgIGZpYmVyLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgICAgIGZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gbnVsbDtcbiAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG4gICAgICBmaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgcGFyZW50XG4gICAgKSB7XG4gICAgICBmb3IgKHBhcmVudCA9IHBhcmVudC5jaGlsZDsgbnVsbCAhPT0gcGFyZW50OyApXG4gICAgICAgIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgcGFyZW50XG4gICAgICAgICksXG4gICAgICAgICAgKHBhcmVudCA9IHBhcmVudC5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBkZWxldGVkRmliZXJcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgaW5qZWN0ZWRIb29rICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudFxuICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudChyZW5kZXJlcklELCBkZWxldGVkRmliZXIpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciB8fFxuICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlc1wiLFxuICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICBzd2l0Y2ggKGRlbGV0ZWRGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgID8gZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGUuY291bnQtLVxuICAgICAgICAgICAgOiBkZWxldGVkRmliZXIuc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAgICgoZGVsZXRlZEZpYmVyID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgIGRlbGV0ZWRGaWJlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRlbGV0ZWRGaWJlcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICAgIHZhciBwcmV2SG9zdFBhcmVudCA9IGhvc3RQYXJlbnQsXG4gICAgICAgICAgICBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyID0gaG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGlzU2luZ2xldG9uU2NvcGUoZGVsZXRlZEZpYmVyLnR5cGUpICYmXG4gICAgICAgICAgICAoKGhvc3RQYXJlbnQgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlKSxcbiAgICAgICAgICAgIChob3N0UGFyZW50SXNDb250YWluZXIgPSAhMSkpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgIHJlbGVhc2VTaW5nbGV0b25JbnN0YW5jZSxcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBwcmV2SG9zdFBhcmVudDtcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBwcmV2SG9zdFBhcmVudCA9IGhvc3RQYXJlbnQ7XG4gICAgICAgICAgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBob3N0UGFyZW50ID0gbnVsbDtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IHByZXZIb3N0UGFyZW50O1xuICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHByZXZIb3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGhvc3RQYXJlbnQpXG4gICAgICAgICAgICBpZiAoaG9zdFBhcmVudElzQ29udGFpbmVyKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgaG9zdFBhcmVudCxcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGQsXG4gICAgICAgICAgICAgICAgICBob3N0UGFyZW50LFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgbnVsbCAhPT0gaG9zdFBhcmVudCAmJlxuICAgICAgICAgICAgKGhvc3RQYXJlbnRJc0NvbnRhaW5lclxuICAgICAgICAgICAgICA/ICgoZmluaXNoZWRSb290ID0gaG9zdFBhcmVudCksXG4gICAgICAgICAgICAgICAgY2xlYXJTdXNwZW5zZUJvdW5kYXJ5KFxuICAgICAgICAgICAgICAgICAgOSA9PT0gZmluaXNoZWRSb290Lm5vZGVUeXBlXG4gICAgICAgICAgICAgICAgICAgID8gZmluaXNoZWRSb290LmJvZHlcbiAgICAgICAgICAgICAgICAgICAgOiBcIkhUTUxcIiA9PT0gZmluaXNoZWRSb290Lm5vZGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgPyBmaW5pc2hlZFJvb3Qub3duZXJEb2N1bWVudC5ib2R5XG4gICAgICAgICAgICAgICAgICAgICAgOiBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIuc3RhdGVOb2RlXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICByZXRyeUlmQmxvY2tlZE9uKGZpbmlzaGVkUm9vdCkpXG4gICAgICAgICAgICAgIDogY2xlYXJTdXNwZW5zZUJvdW5kYXJ5KGhvc3RQYXJlbnQsIGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHByZXZIb3N0UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICAgICAgICBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyID0gaG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gITA7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBwcmV2SG9zdFBhcmVudDtcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgICBJbnNlcnRpb24sXG4gICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICBjb21taXRIb29rTGF5b3V0VW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgTGF5b3V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgIChzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSxcbiAgICAgICAgICAgIChwcmV2SG9zdFBhcmVudCA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcHJldkhvc3RQYXJlbnQuY29tcG9uZW50V2lsbFVubW91bnQgJiZcbiAgICAgICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KFxuICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgIHByZXZIb3N0UGFyZW50XG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9XG4gICAgICAgICAgICAocHJldkhvc3RQYXJlbnQgPSBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB8fFxuICAgICAgICAgICAgbnVsbCAhPT0gZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2SG9zdFBhcmVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICgoZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSksXG4gICAgICAgIG51bGwgIT09IGZpbmlzaGVkUm9vdCAmJlxuICAgICAgICAgICgoZmluaXNoZWRSb290ID0gZmluaXNoZWRSb290Lm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkUm9vdCAmJlxuICAgICAgICAgICAgKChmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFJvb3QuZGVoeWRyYXRlZCksIG51bGwgIT09IGZpbmlzaGVkUm9vdCkpKVxuICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlLFxuICAgICAgICAgICAgZmluaXNoZWRSb290XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRSZXRyeUNhY2hlKGZpbmlzaGVkV29yaykge1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgdmFyIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIG51bGwgPT09IHJldHJ5Q2FjaGUgJiZcbiAgICAgICAgICAgIChyZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKSk7XG4gICAgICAgICAgcmV0dXJuIHJldHJ5Q2FjaGU7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChmaW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlKSxcbiAgICAgICAgICAgIChyZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLl9yZXRyeUNhY2hlKSxcbiAgICAgICAgICAgIG51bGwgPT09IHJldHJ5Q2FjaGUgJiZcbiAgICAgICAgICAgICAgKHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuX3JldHJ5Q2FjaGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCkpLFxuICAgICAgICAgICAgcmV0cnlDYWNoZVxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlVuZXhwZWN0ZWQgU3VzcGVuc2UgaGFuZGxlciB0YWcgKFwiICtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnRhZyArXG4gICAgICAgICAgICAgIFwiKS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCB3YWtlYWJsZXMpIHtcbiAgICAgIHZhciByZXRyeUNhY2hlID0gZ2V0UmV0cnlDYWNoZShmaW5pc2hlZFdvcmspO1xuICAgICAgd2FrZWFibGVzLmZvckVhY2goZnVuY3Rpb24gKHdha2VhYmxlKSB7XG4gICAgICAgIHZhciByZXRyeSA9IHJlc29sdmVSZXRyeVdha2VhYmxlLmJpbmQobnVsbCwgZmluaXNoZWRXb3JrLCB3YWtlYWJsZSk7XG4gICAgICAgIGlmICghcmV0cnlDYWNoZS5oYXMod2FrZWFibGUpKSB7XG4gICAgICAgICAgcmV0cnlDYWNoZS5hZGQod2FrZWFibGUpO1xuICAgICAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudClcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBpblByb2dyZXNzTGFuZXMgJiYgbnVsbCAhPT0gaW5Qcm9ncmVzc1Jvb3QpXG4gICAgICAgICAgICAgIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMoaW5Qcm9ncmVzc1Jvb3QsIGluUHJvZ3Jlc3NMYW5lcyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgZmluaXNoZWQgcm9vdCBhbmQgbGFuZXMgdG8gYmUgc2V0LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgd2FrZWFibGUudGhlbihyZXRyeSwgcmV0cnkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290JGpzY29tcCQwLCBwYXJlbnRGaWJlcikge1xuICAgICAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcbiAgICAgIGlmIChudWxsICE9PSBkZWxldGlvbnMpXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHJvb3QgPSByb290JGpzY29tcCQwLFxuICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBwYXJlbnRGaWJlcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlciA9IGRlbGV0aW9uc1tpXSxcbiAgICAgICAgICAgIHBhcmVudCA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIGE6IGZvciAoOyBudWxsICE9PSBwYXJlbnQ7ICkge1xuICAgICAgICAgICAgc3dpdGNoIChwYXJlbnQudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xldG9uU2NvcGUocGFyZW50LnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICBob3N0UGFyZW50ID0gcGFyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICExO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50ID0gcGFyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50ID0gcGFyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICEwO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobnVsbCA9PT0gaG9zdFBhcmVudClcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKHJvb3QsIHJldHVybkZpYmVyLCBkZWxldGVkRmliZXIpO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBudWxsO1xuICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICExO1xuICAgICAgICAgIHJvb3QgPSBkZWxldGVkRmliZXI7XG4gICAgICAgICAgcmV0dXJuRmliZXIgPSByb290LmFsdGVybmF0ZTtcbiAgICAgICAgICBudWxsICE9PSByZXR1cm5GaWJlciAmJiAocmV0dXJuRmliZXIucmV0dXJuID0gbnVsbCk7XG4gICAgICAgICAgcm9vdC5yZXR1cm4gPSBudWxsO1xuICAgICAgICB9XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTM4NzgpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgICBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKHBhcmVudEZpYmVyLCByb290JGpzY29tcCQwKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkV29yaywgcm9vdCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLFxuICAgICAgICBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgKGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgICAgSW5zZXJ0aW9uIHwgSGFzRWZmZWN0LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm5cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KEluc2VydGlvbiB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRVbm1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICBMYXlvdXQgfCBIYXNFZmZlY3RcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgICAgIGZsYWdzICYgNjQgJiZcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiAmJlxuICAgICAgICAgICAgKChmaW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrICYmXG4gICAgICAgICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsuY2FsbGJhY2tzKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAoKGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyksXG4gICAgICAgICAgICAgICAgKGZpbmlzaGVkV29yay5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID1cbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgPyBmbGFncyA6IGN1cnJlbnQuY29uY2F0KGZsYWdzKSkpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdmFyIGhvaXN0YWJsZVJvb3QgPSBjdXJyZW50SG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA1MTIgJiZcbiAgICAgICAgICAgIChvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKSk7XG4gICAgICAgICAgaWYgKGZsYWdzICYgNClcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChyb290ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGwpLFxuICAgICAgICAgICAgICAoZmxhZ3MgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChudWxsID09PSBmbGFncylcbiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSkge1xuICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGZpbmlzaGVkV29yay50eXBlO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QgPSBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICAgICAgICAgICAgYjogc3dpdGNoIChmbGFncykge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0aXRsZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0aXRsZVwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIWhvaXN0YWJsZVJvb3QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdFtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdFtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290Lmhhc0F0dHJpYnV0ZShcIml0ZW1wcm9wXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChob2lzdGFibGVSb290ID0gcm9vdC5jcmVhdGVFbGVtZW50KGZsYWdzKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5oZWFkLmluc2VydEJlZm9yZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3IoXCJoZWFkID4gdGl0bGVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaG9pc3RhYmxlUm9vdCwgZmxhZ3MsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdFtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGZpbmlzaGVkV29yaztcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF5YmVOb2RlcyA9IGdldEh5ZHJhdGFibGVIb2lzdGFibGVDYWNoZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiaHJlZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByb290XG4gICAgICAgICAgICAgICAgICAgICAgICApLmdldChmbGFncyArIChjdXJyZW50LmhyZWYgfHwgXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heWJlTm9kZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF5YmVOb2Rlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGhvaXN0YWJsZVJvb3QgPSBtYXliZU5vZGVzW2ldKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5ocmVmIHx8IFwiXCIgPT09IGN1cnJlbnQuaHJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5ocmVmKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEF0dHJpYnV0ZShcInJlbFwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LnJlbCA/IG51bGwgOiBjdXJyZW50LnJlbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC50aXRsZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5nZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LmNyb3NzT3JpZ2luXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5jcm9zc09yaWdpbikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZU5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCA9IHJvb3QuY3JlYXRlRWxlbWVudChmbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhob2lzdGFibGVSb290LCBmbGFncywgY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290LmhlYWQuYXBwZW5kQ2hpbGQoaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAobWF5YmVOb2RlcyA9IGdldEh5ZHJhdGFibGVIb2lzdGFibGVDYWNoZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1ldGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkuZ2V0KGZsYWdzICsgKGN1cnJlbnQuY29udGVudCB8fCBcIlwiKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXliZU5vZGVzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaG9pc3RhYmxlUm9vdCA9IG1heWJlTm9kZXNbaV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5jb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiICsgY3VycmVudC5jb250ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5uYW1lKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEF0dHJpYnV0ZShcInByb3BlcnR5XCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQucHJvcGVydHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LnByb3BlcnR5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmdldEF0dHJpYnV0ZShcImh0dHAtZXF1aXZcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5odHRwRXF1aXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50Lmh0dHBFcXVpdikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5nZXRBdHRyaWJ1dGUoXCJjaGFyc2V0XCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuY2hhclNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuY2hhclNldCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZU5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCA9IHJvb3QuY3JlYXRlRWxlbWVudChmbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhob2lzdGFibGVSb290LCBmbGFncywgY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290LmhlYWQuYXBwZW5kQ2hpbGQoaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdnZXROb2Rlc0ZvclR5cGUgZW5jb3VudGVyZWQgYSB0eXBlIGl0IGRpZCBub3QgZXhwZWN0OiBcIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290W2ludGVybmFsSW5zdGFuY2VLZXldID0gZmluaXNoZWRXb3JrO1xuICAgICAgICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gZmxhZ3M7XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICBtb3VudEhvaXN0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gYWNxdWlyZVJlc291cmNlKFxuICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZsYWdzLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICByb290ICE9PSBmbGFnc1xuICAgICAgICAgICAgICAgID8gKG51bGwgPT09IHJvb3RcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsICE9PSBjdXJyZW50LnN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICgoY3VycmVudCA9IGN1cnJlbnQuc3RhdGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY3VycmVudCkpXG4gICAgICAgICAgICAgICAgICAgIDogcm9vdC5jb3VudC0tLFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgPyBtb3VudEhvaXN0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogYWNxdWlyZVJlc291cmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgIDogbnVsbCA9PT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgJiZcbiAgICAgICAgICAgICAgICAgIGNvbW1pdEhvc3RVcGRhdGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA1MTIgJiZcbiAgICAgICAgICAgIChvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKSk7XG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICBjb21taXRIb3N0VXBkYXRlKFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA1MTIgJiZcbiAgICAgICAgICAgIChvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKSk7XG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIDMyKSB7XG4gICAgICAgICAgICByb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKGZpbmlzaGVkV29yaywgcmVzZXRUZXh0Q29udGVudCwgcm9vdCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICBudWxsICE9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgJiZcbiAgICAgICAgICAgICgocm9vdCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSxcbiAgICAgICAgICAgIGNvbW1pdEhvc3RVcGRhdGUoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IHJvb3RcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgIGZsYWdzICYgMTAyNCAmJlxuICAgICAgICAgICAgKChuZWVkc0Zvcm1SZXNldCA9ICEwKSxcbiAgICAgICAgICAgIFwiZm9ybVwiICE9PSBmaW5pc2hlZFdvcmsudHlwZSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5leHBlY3RlZCBob3N0IGNvbXBvbmVudCB0eXBlLiBFeHBlY3RlZCBhIGZvcm0uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaWYgKGZsYWdzICYgNCkge1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiVGhpcyBzaG91bGQgaGF2ZSBhIHRleHQgbm9kZSBpbml0aWFsaXplZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgIGN1cnJlbnQgPSBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogZmxhZ3M7XG4gICAgICAgICAgICByb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXRUZXh0VXBkYXRlLFxuICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICBmbGFnc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaG9pc3RhYmxlUm9vdCA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICB0YWdDYWNoZXMgPSBudWxsO1xuICAgICAgICAgIG1heWJlTm9kZXMgPSBjdXJyZW50SG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IGdldEhvaXN0YWJsZVJvb3Qocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBtYXliZU5vZGVzO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZFxuICAgICAgICAgIClcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXRIeWRyYXRlZENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIG5lZWRzRm9ybVJlc2V0ICYmXG4gICAgICAgICAgICAoKG5lZWRzRm9ybVJlc2V0ID0gITEpLCByZWN1cnNpdmVseVJlc2V0Rm9ybXMoZmluaXNoZWRXb3JrKSk7XG4gICAgICAgICAgcm9vdC5lZmZlY3REdXJhdGlvbiArPSBwb3BOZXN0ZWRFZmZlY3REdXJhdGlvbnMoaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBmbGFncyA9IGN1cnJlbnRIb2lzdGFibGVSb290O1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gZ2V0SG9pc3RhYmxlUm9vdChcbiAgICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gZmxhZ3M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgZmxhZ3MgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgIGJ1YmJsZU5lc3RlZEVmZmVjdER1cmF0aW9ucyhmbGFncyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZpbmlzaGVkV29yay5jaGlsZC5mbGFncyAmIDgxOTIgJiZcbiAgICAgICAgICAgIChudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkgIT09XG4gICAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgJiZcbiAgICAgICAgICAgIChnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gbm93JDEoKSk7XG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICgoZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbCksXG4gICAgICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBmbGFncykpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBob2lzdGFibGVSb290ID0gbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIHdhc0hpZGRlbiA9IG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlLFxuICAgICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbixcbiAgICAgICAgICAgIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPVxuICAgICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiB8fCBob2lzdGFibGVSb290O1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPVxuICAgICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHwgd2FzSGlkZGVuO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoZmxhZ3MgJiA4MTkyKVxuICAgICAgICAgICAgYTogZm9yIChcbiAgICAgICAgICAgICAgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsXG4gICAgICAgICAgICAgICAgcm9vdC5fdmlzaWJpbGl0eSA9IGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICAgICAgID8gcm9vdC5fdmlzaWJpbGl0eSAmIH5PZmZzY3JlZW5WaXNpYmxlXG4gICAgICAgICAgICAgICAgICA6IHJvb3QuX3Zpc2liaWxpdHkgfCBPZmZzY3JlZW5WaXNpYmxlLFxuICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgJiZcbiAgICAgICAgICAgICAgICAgIChudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspKSxcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gbnVsbCxcbiAgICAgICAgICAgICAgICByb290ID0gZmluaXNoZWRXb3JrO1xuICAgICAgICAgICAgICA7XG5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoNSA9PT0gcm9vdC50YWcgfHwgMjYgPT09IHJvb3QudGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbiA9IGN1cnJlbnQgPSByb290O1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgKG1heWJlTm9kZXMgPSB3YXNIaWRkZW4uc3RhdGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJ1bldpdGhGaWJlckluREVWKHdhc0hpZGRlbiwgaGlkZUluc3RhbmNlLCBtYXliZU5vZGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5oaWRlSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLnN0YXRlTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4ubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3Iod2FzSGlkZGVuLCB3YXNIaWRkZW4ucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKDYgPT09IHJvb3QudGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbiA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAoaSA9IHdhc0hpZGRlbi5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcnVuV2l0aEZpYmVySW5ERVYod2FzSGlkZGVuLCBoaWRlVGV4dEluc3RhbmNlLCBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5oaWRlVGV4dEluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKHdhc0hpZGRlbiwgd2FzSGlkZGVuLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAoKDIyICE9PSByb290LnRhZyAmJiAyMyAhPT0gcm9vdC50YWcpIHx8XG4gICAgICAgICAgICAgICAgICBudWxsID09PSByb290Lm1lbW9pemVkU3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgIHJvb3QgPT09IGZpbmlzaGVkV29yaykgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSByb290LmNoaWxkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJvb3QuY2hpbGQucmV0dXJuID0gcm9vdDtcbiAgICAgICAgICAgICAgICByb290ID0gcm9vdC5jaGlsZDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocm9vdCA9PT0gZmluaXNoZWRXb3JrKSBicmVhayBhO1xuICAgICAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gcm9vdC5zaWJsaW5nOyApIHtcbiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gcm9vdC5yZXR1cm4gfHwgcm9vdC5yZXR1cm4gPT09IGZpbmlzaGVkV29yaylcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9PT0gcm9vdCAmJiAoY3VycmVudCA9IG51bGwpO1xuICAgICAgICAgICAgICAgIHJvb3QgPSByb290LnJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50ID09PSByb290ICYmIChjdXJyZW50ID0gbnVsbCk7XG4gICAgICAgICAgICAgIHJvb3Quc2libGluZy5yZXR1cm4gPSByb290LnJldHVybjtcbiAgICAgICAgICAgICAgcm9vdCA9IHJvb3Quc2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICAgKChjdXJyZW50ID0gZmxhZ3MucmV0cnlRdWV1ZSksXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAoKGZsYWdzLnJldHJ5UXVldWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgY3VycmVudCkpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgKChmbGFncyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICBudWxsICE9PSBmbGFncyAmJlxuICAgICAgICAgICAgICAoKGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgZmxhZ3MpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspLFxuICAgICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIGlmIChmbGFncyAmIDIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaW5pc2hlZFdvcmssIGNvbW1pdFBsYWNlbWVudCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gLTM7XG4gICAgICB9XG4gICAgICBmbGFncyAmIDQwOTYgJiYgKGZpbmlzaGVkV29yay5mbGFncyAmPSAtNDA5Nyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5UmVzZXRGb3JtcyhwYXJlbnRGaWJlcikge1xuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjQpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgICAgICAgIHZhciBmaWJlciA9IHBhcmVudEZpYmVyO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5UmVzZXRGb3JtcyhmaWJlcik7XG4gICAgICAgICAgNSA9PT0gZmliZXIudGFnICYmIGZpYmVyLmZsYWdzICYgMTAyNCAmJiBmaWJlci5zdGF0ZU5vZGUucmVzZXQoKTtcbiAgICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMocm9vdCwgcGFyZW50RmliZXIpIHtcbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiA4NzcyKVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgICAgY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihyb290LCBwYXJlbnRGaWJlci5hbHRlcm5hdGUsIHBhcmVudEZpYmVyKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBjb21taXRIb29rTGF5b3V0VW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgTGF5b3V0XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCAmJlxuICAgICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICByZWxlYXNlU2luZ2xldG9uSW5zdGFuY2UsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHNhZmVseURldGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgbnVsbCA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhwYXJlbnRGaWJlcikge1xuICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICBkaXNhcHBlYXJMYXlvdXRFZmZlY3RzKHBhcmVudEZpYmVyKSxcbiAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgY3VycmVudCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICApIHtcbiAgICAgIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgTGF5b3V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjdXJyZW50ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjdXJyZW50LmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkTW91bnRJbkRFVixcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0SGlkZGVuQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgICAgZmxhZ3MgJiA2NCAmJlxuICAgICAgICAgICAgY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBjb21taXRIb3N0U2luZ2xldG9uQWNxdWlzaXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdEhvc3RNb3VudChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGlmIChpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIGZsYWdzICYgNCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cy5lZmZlY3REdXJhdGlvbiArPVxuICAgICAgICAgICAgICBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMoZmxhZ3MpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdFByb2ZpbGVyLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzLmVmZmVjdER1cmF0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgcGFyZW50RmliZXIsXG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgKSB7XG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzID1cbiAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJiAwICE9PSAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgODc3Mik7XG4gICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgIHJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgcGFyZW50RmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKSxcbiAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0T2Zmc2NyZWVuUGFzc2l2ZU1vdW50RWZmZWN0cyhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciBwcmV2aW91c0NhY2hlID0gbnVsbDtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgKHByZXZpb3VzQ2FjaGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpO1xuICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgKGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCk7XG4gICAgICBjdXJyZW50ICE9PSBwcmV2aW91c0NhY2hlICYmXG4gICAgICAgIChudWxsICE9IGN1cnJlbnQgJiYgcmV0YWluQ2FjaGUoY3VycmVudCksXG4gICAgICAgIG51bGwgIT0gcHJldmlvdXNDYWNoZSAmJiByZWxlYXNlQ2FjaGUocHJldmlvdXNDYWNoZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRDYWNoZVBhc3NpdmVNb3VudEVmZmVjdChjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSAmJlxuICAgICAgICAoY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSk7XG4gICAgICBmaW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZS5jYWNoZTtcbiAgICAgIGZpbmlzaGVkV29yayAhPT0gY3VycmVudCAmJlxuICAgICAgICAocmV0YWluQ2FjaGUoZmluaXNoZWRXb3JrKSwgbnVsbCAhPSBjdXJyZW50ICYmIHJlbGVhc2VDYWNoZShjdXJyZW50KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgcm9vdCxcbiAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICkge1xuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjU2KVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgICAgY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlcihcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBwYXJlbnRGaWJlcixcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApLFxuICAgICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmssIFBhc3NpdmUgfCBIYXNFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHZhciBwcmV2RWZmZWN0RHVyYXRpb24gPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgICgoY29tbWl0dGVkTGFuZXMgPSBudWxsKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgKGNvbW1pdHRlZExhbmVzID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSxcbiAgICAgICAgICAgIChmaW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZS5jYWNoZSksXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsgIT09IGNvbW1pdHRlZExhbmVzICYmXG4gICAgICAgICAgICAgIChyZXRhaW5DYWNoZShmaW5pc2hlZFdvcmspLFxuICAgICAgICAgICAgICBudWxsICE9IGNvbW1pdHRlZExhbmVzICYmIHJlbGVhc2VDYWNoZShjb21taXR0ZWRMYW5lcykpKTtcbiAgICAgICAgICBmaW5pc2hlZFJvb3QucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9XG4gICAgICAgICAgICBwb3BOZXN0ZWRFZmZlY3REdXJhdGlvbnMocHJldkVmZmVjdER1cmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBpZiAoZmxhZ3MgJiAyMDQ4KSB7XG4gICAgICAgICAgICBmbGFncyA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgICAgYnViYmxlTmVzdGVkRWZmZWN0RHVyYXRpb25zKGZsYWdzKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXRQcm9maWxlclBvc3RDb21taXRJbXBsLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLFxuICAgICAgICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QucGFzc2l2ZUVmZmVjdER1cmF0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcHJldkVmZmVjdER1cmF0aW9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICB2YXIgX2N1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICA/IHByZXZFZmZlY3REdXJhdGlvbi5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkXG4gICAgICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogcHJldkVmZmVjdER1cmF0aW9uLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWRcbiAgICAgICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogKChwcmV2RWZmZWN0RHVyYXRpb24uX3Zpc2liaWxpdHkgfD1cbiAgICAgICAgICAgICAgICAgIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSxcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiAxMDI1NilcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoX2N1cnJlbnQsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdENhY2hlUGFzc2l2ZU1vdW50RWZmZWN0KGZpbmlzaGVkV29yay5hbHRlcm5hdGUsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgcGFyZW50RmliZXIsXG4gICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICkge1xuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyA9XG4gICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgMCAhPT0gKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjU2KTtcbiAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgcmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKSxcbiAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICkge1xuICAgICAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrLCBQYXNzaXZlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB2YXIgX2luc3RhbmNlMiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgID8gX2luc3RhbmNlMi5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkXG4gICAgICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiAoKF9pbnN0YW5jZTIuX3Zpc2liaWxpdHkgfD0gT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQpLFxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgY29tbWl0T2Zmc2NyZWVuUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdENhY2hlUGFzc2l2ZU1vdW50RWZmZWN0KGZpbmlzaGVkV29yay5hbHRlcm5hdGUsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QkanNjb21wJDAsXG4gICAgICBwYXJlbnRGaWJlclxuICAgICkge1xuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjU2KVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApIHtcbiAgICAgICAgICB2YXIgZmluaXNoZWRSb290ID0gZmluaXNoZWRSb290JGpzY29tcCQwLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrID0gcGFyZW50RmliZXIsXG4gICAgICAgICAgICBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgICAgIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgICAgICBjb21taXRDYWNoZVBhc3NpdmVNb3VudEVmZmVjdChcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5hbHRlcm5hdGUsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQocGFyZW50RmliZXIpIHtcbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBzdXNwZW5zZXlDb21taXRGbGFnKVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgICAgYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIocGFyZW50RmliZXIpLFxuICAgICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXRPbkZpYmVyKGZpYmVyKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICAgICAgZmliZXIuZmxhZ3MgJiBzdXNwZW5zZXlDb21taXRGbGFnICYmXG4gICAgICAgICAgICBudWxsICE9PSBmaWJlci5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICBzdXNwZW5kUmVzb3VyY2UoXG4gICAgICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290LFxuICAgICAgICAgICAgICBmaWJlci5tZW1vaXplZFN0YXRlLFxuICAgICAgICAgICAgICBmaWJlci5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgdmFyIHByZXZpb3VzSG9pc3RhYmxlUm9vdCA9IGN1cnJlbnRIb2lzdGFibGVSb290O1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gZ2V0SG9pc3RhYmxlUm9vdChcbiAgICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gcHJldmlvdXNIb2lzdGFibGVSb290O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG51bGwgPT09IGZpYmVyLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICgocHJldmlvdXNIb2lzdGFibGVSb290ID0gZmliZXIuYWx0ZXJuYXRlKSxcbiAgICAgICAgICAgIG51bGwgIT09IHByZXZpb3VzSG9pc3RhYmxlUm9vdCAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gcHJldmlvdXNIb2lzdGFibGVSb290Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgICAgPyAoKHByZXZpb3VzSG9pc3RhYmxlUm9vdCA9IHN1c3BlbnNleUNvbW1pdEZsYWcpLFxuICAgICAgICAgICAgICAgIChzdXNwZW5zZXlDb21taXRGbGFnID0gMTY3NzcyMTYpLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlciksXG4gICAgICAgICAgICAgICAgKHN1c3BlbnNleUNvbW1pdEZsYWcgPSBwcmV2aW91c0hvaXN0YWJsZVJvb3QpKVxuICAgICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IHBhcmVudEZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gcHJldmlvdXNGaWJlciAmJlxuICAgICAgICAoKHBhcmVudEZpYmVyID0gcHJldmlvdXNGaWJlci5jaGlsZCksIG51bGwgIT09IHBhcmVudEZpYmVyKVxuICAgICAgKSB7XG4gICAgICAgIHByZXZpb3VzRmliZXIuY2hpbGQgPSBudWxsO1xuICAgICAgICBkb1xuICAgICAgICAgIChwcmV2aW91c0ZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyksXG4gICAgICAgICAgICAocGFyZW50RmliZXIuc2libGluZyA9IG51bGwpLFxuICAgICAgICAgICAgKHBhcmVudEZpYmVyID0gcHJldmlvdXNGaWJlcik7XG4gICAgICAgIHdoaWxlIChudWxsICE9PSBwYXJlbnRGaWJlcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMocGFyZW50RmliZXIpIHtcbiAgICAgIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG4gICAgICBpZiAoMCAhPT0gKHBhcmVudEZpYmVyLmZsYWdzICYgMTYpKSB7XG4gICAgICAgIGlmIChudWxsICE9PSBkZWxldGlvbnMpXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZFRvRGVsZXRlID0gZGVsZXRpb25zW2ldO1xuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgICAgICBjaGlsZFRvRGVsZXRlLFxuICAgICAgICAgICAgICBwYXJlbnRGaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI1NilcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50T25GaWJlcihwYXJlbnRGaWJlciksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKGZpbmlzaGVkV29yaykge1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLmZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICBQYXNzaXZlIHwgSGFzRWZmZWN0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdmFyIHByZXZFZmZlY3REdXJhdGlvbiA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgIHBvcE5lc3RlZEVmZmVjdER1cmF0aW9ucyhwcmV2RWZmZWN0RHVyYXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHByZXZFZmZlY3REdXJhdGlvbiA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgIGJ1YmJsZU5lc3RlZEVmZmVjdER1cmF0aW9ucyhwcmV2RWZmZWN0RHVyYXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHByZXZFZmZlY3REdXJhdGlvbiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICBwcmV2RWZmZWN0RHVyYXRpb24uX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCAmJlxuICAgICAgICAgIChudWxsID09PSBmaW5pc2hlZFdvcmsucmV0dXJuIHx8IDEzICE9PSBmaW5pc2hlZFdvcmsucmV0dXJuLnRhZylcbiAgICAgICAgICAgID8gKChwcmV2RWZmZWN0RHVyYXRpb24uX3Zpc2liaWxpdHkgJj1cbiAgICAgICAgICAgICAgICB+T2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQpLFxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yaykpXG4gICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMocGFyZW50RmliZXIpIHtcbiAgICAgIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG4gICAgICBpZiAoMCAhPT0gKHBhcmVudEZpYmVyLmZsYWdzICYgMTYpKSB7XG4gICAgICAgIGlmIChudWxsICE9PSBkZWxldGlvbnMpXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZFRvRGVsZXRlID0gZGVsZXRpb25zW2ldO1xuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgICAgICBjaGlsZFRvRGVsZXRlLFxuICAgICAgICAgICAgICBwYXJlbnRGaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKTtcbiAgICAgIH1cbiAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QocGFyZW50RmliZXIpLFxuICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNjb25uZWN0UGFzc2l2ZUVmZmVjdChmaW5pc2hlZFdvcmspIHtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICBQYXNzaXZlXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBpbnN0YW5jZS5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkICYmXG4gICAgICAgICAgICAoKGluc3RhbmNlLl92aXNpYmlsaXR5ICY9IH5PZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCksXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yaykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbihcbiAgICAgIGRlbGV0ZWRTdWJ0cmVlUm9vdCxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICApIHtcbiAgICAgIGZvciAoOyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICAgICAgdmFyIGZpYmVyID0gbmV4dEVmZmVjdCxcbiAgICAgICAgICBjdXJyZW50ID0gZmliZXI7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudC50YWcpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgUGFzc2l2ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgICAgICgoY3VycmVudCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksXG4gICAgICAgICAgICAgIG51bGwgIT0gY3VycmVudCAmJiByZXRhaW5DYWNoZShjdXJyZW50KSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgcmVsZWFzZUNhY2hlKGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGZpYmVyLmNoaWxkO1xuICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkgKGN1cnJlbnQucmV0dXJuID0gZmliZXIpLCAobmV4dEVmZmVjdCA9IGN1cnJlbnQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYTogZm9yIChmaWJlciA9IGRlbGV0ZWRTdWJ0cmVlUm9vdDsgbnVsbCAhPT0gbmV4dEVmZmVjdDsgKSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gbmV4dEVmZmVjdDtcbiAgICAgICAgICAgIHZhciBzaWJsaW5nID0gY3VycmVudC5zaWJsaW5nLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGN1cnJlbnQucmV0dXJuO1xuICAgICAgICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoY3VycmVudCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudCA9PT0gZmliZXIpIHtcbiAgICAgICAgICAgICAgbmV4dEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gc2libGluZykge1xuICAgICAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICBuZXh0RWZmZWN0ID0gc2libGluZztcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRFZmZlY3QgPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uQ29tbWl0Um9vdCgpIHtcbiAgICAgIGNvbW1pdEhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGNvbW1pdEhvb2spIHtcbiAgICAgICAgcmV0dXJuIGNvbW1pdEhvb2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpIHtcbiAgICAgIHZhciBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgPVxuICAgICAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UXG4gICAgICAgICAgPyBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlRcbiAgICAgICAgICA6IHZvaWQgMDtcbiAgICAgIGlzUmVhY3RBY3RFbnZpcm9ubWVudEdsb2JhbCB8fFxuICAgICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVGhlIGN1cnJlbnQgdGVzdGluZyBlbnZpcm9ubWVudCBpcyBub3QgY29uZmlndXJlZCB0byBzdXBwb3J0IGFjdCguLi4pXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJlxuICAgICAgICAwICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgKVxuICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiAtd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgICB2YXIgdHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICByZXR1cm4gbnVsbCAhPT0gdHJhbnNpdGlvblxuICAgICAgICA/ICh0cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzIHx8ICh0cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzID0gbmV3IFNldCgpKSxcbiAgICAgICAgICB0cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmFkZChmaWJlciksXG4gICAgICAgICAgKGZpYmVyID0gY3VycmVudEVudGFuZ2xlZExhbmUpLFxuICAgICAgICAgIDAgIT09IGZpYmVyID8gZmliZXIgOiByZXF1ZXN0VHJhbnNpdGlvbkxhbmUoKSlcbiAgICAgICAgOiByZXNvbHZlVXBkYXRlUHJpb3JpdHkoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWVzdERlZmVycmVkTGFuZSgpIHtcbiAgICAgIDAgPT09IHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9XG4gICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSB8fCBpc0h5ZHJhdGluZ1xuICAgICAgICAgICAgPyBjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSgpXG4gICAgICAgICAgICA6IDUzNjg3MDkxMik7XG4gICAgICB2YXIgc3VzcGVuc2VIYW5kbGVyID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgIG51bGwgIT09IHN1c3BlbnNlSGFuZGxlciAmJiAoc3VzcGVuc2VIYW5kbGVyLmZsYWdzIHw9IDMyKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lKSB7XG4gICAgICBpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcInVzZUluc2VydGlvbkVmZmVjdCBtdXN0IG5vdCBzY2hlZHVsZSB1cGRhdGVzLlwiKTtcbiAgICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyAmJiAoZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9ICEwKTtcbiAgICAgIGlmIChcbiAgICAgICAgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25EYXRhIHx8XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25BY3Rpb24pKSB8fFxuICAgICAgICBudWxsICE9PSByb290LmNhbmNlbFBlbmRpbmdDb21taXRcbiAgICAgIClcbiAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgMCksXG4gICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICExXG4gICAgICAgICAgKTtcbiAgICAgIG1hcmtSb290VXBkYXRlZCQxKHJvb3QsIGxhbmUpO1xuICAgICAgaWYgKFxuICAgICAgICAwICE9PSAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICYmXG4gICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdFxuICAgICAgKSB7XG4gICAgICAgIGlmIChpc1JlbmRlcmluZylcbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgIHJvb3QgPVxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyAmJiBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSkgfHxcbiAgICAgICAgICAgICAgICBcIlVua25vd25cIjtcbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50Lmhhcyhyb290KSB8fFxuICAgICAgICAgICAgICAgIChkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuYWRkKHJvb3QpLFxuICAgICAgICAgICAgICAgIChmaWJlciA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiVW5rbm93blwiKSxcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgdXBkYXRlIGEgY29tcG9uZW50IChgJXNgKSB3aGlsZSByZW5kZXJpbmcgYSBkaWZmZXJlbnQgY29tcG9uZW50IChgJXNgKS4gVG8gbG9jYXRlIHRoZSBiYWQgc2V0U3RhdGUoKSBjYWxsIGluc2lkZSBgJXNgLCBmb2xsb3cgdGhlIHN0YWNrIHRyYWNlIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3JlYWN0LmRldi9saW5rL3NldHN0YXRlLWluLXJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgfHxcbiAgICAgICAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyB3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS5cIlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gITApKTtcbiAgICAgICAgICB9XG4gICAgICB9IGVsc2VcbiAgICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiYgYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIGZpYmVyLCBsYW5lKSxcbiAgICAgICAgICB3YXJuSWZVcGRhdGVzTm90V3JhcHBlZFdpdGhBY3RERVYoZmliZXIpLFxuICAgICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJlxuICAgICAgICAgICAgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgPT09IE5vQ29udGV4dCAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgfD0gbGFuZSksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5ICYmXG4gICAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZXJmb3JtV29ya09uUm9vdChyb290LCBsYW5lcywgZm9yY2VTeW5jKSB7XG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KVxuICAgICAgICB0aHJvdyBFcnJvcihcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiKTtcbiAgICAgIHZhciBzaG91bGRUaW1lU2xpY2UgPVxuICAgICAgICAgICghZm9yY2VTeW5jICYmXG4gICAgICAgICAgICAwID09PSAobGFuZXMgJiAxMjQpICYmXG4gICAgICAgICAgICAwID09PSAobGFuZXMgJiByb290LmV4cGlyZWRMYW5lcykpIHx8XG4gICAgICAgICAgY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCBsYW5lcyksXG4gICAgICAgIGV4aXRTdGF0dXMgPSBzaG91bGRUaW1lU2xpY2VcbiAgICAgICAgICA/IHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKVxuICAgICAgICAgIDogcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMsICEwKSxcbiAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IHNob3VsZFRpbWVTbGljZTtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RJblByb2dyZXNzKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgJiZcbiAgICAgICAgICAgICFzaG91bGRUaW1lU2xpY2UgJiZcbiAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIGxhbmVzLCAwLCAhMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yY2VTeW5jID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50ICYmXG4gICAgICAgICAgICAhaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZvcmNlU3luYylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcywgITEpO1xuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9ICExO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IGxhbmVzO1xuICAgICAgICAgICAgaWYgKHJvb3QuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgJiByZW5kZXJXYXNDb25jdXJyZW50KVxuICAgICAgICAgICAgICB2YXIgZXJyb3JSZXRyeUxhbmVzID0gMDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgKGVycm9yUmV0cnlMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgLTUzNjg3MDkxMyksXG4gICAgICAgICAgICAgICAgKGVycm9yUmV0cnlMYW5lcyA9XG4gICAgICAgICAgICAgICAgICAwICE9PSBlcnJvclJldHJ5TGFuZXNcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJvclJldHJ5TGFuZXNcbiAgICAgICAgICAgICAgICAgICAgOiBlcnJvclJldHJ5TGFuZXMgJiA1MzY4NzA5MTJcbiAgICAgICAgICAgICAgICAgICAgICA/IDUzNjg3MDkxMlxuICAgICAgICAgICAgICAgICAgICAgIDogMCk7XG4gICAgICAgICAgICBpZiAoMCAhPT0gZXJyb3JSZXRyeUxhbmVzKSB7XG4gICAgICAgICAgICAgIGxhbmVzID0gZXJyb3JSZXRyeUxhbmVzO1xuICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgZXhpdFN0YXR1cyA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9yUmV0cnlMYW5lcyRqc2NvbXAkMCA9IGVycm9yUmV0cnlMYW5lcztcbiAgICAgICAgICAgICAgICBlcnJvclJldHJ5TGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzO1xuICAgICAgICAgICAgICAgIHZhciB3YXNSb290RGVoeWRyYXRlZCA9XG4gICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQ7XG4gICAgICAgICAgICAgICAgd2FzUm9vdERlaHlkcmF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIChwcmVwYXJlRnJlc2hTdGFjayhcbiAgICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICApLmZsYWdzIHw9IDI1Nik7XG4gICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwID0gcmVuZGVyUm9vdFN5bmMoXG4gICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvclJldHJ5TGFuZXMkanNjb21wJDAgIT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAhd2FzUm9vdERlaHlkcmF0ZWRcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzIHw9XG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgfD1cbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBleGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycztcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gZXJyb3JSZXRyeUxhbmVzO1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZXhpdFN0YXR1cyAmJlxuICAgICAgICAgICAgICAgICAgICAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IGV4aXRTdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycy5wdXNoLmFwcGx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSBlcnJvclJldHJ5TGFuZXMkanNjb21wJDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9ICExO1xuICAgICAgICAgICAgICBpZiAoZXhpdFN0YXR1cyAhPT0gUm9vdEVycm9yZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgICAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgMCk7XG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgMCwgITApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSA9IHJvb3Q7XG4gICAgICAgICAgICBzd2l0Y2ggKGV4aXRTdGF0dXMpIHtcbiAgICAgICAgICAgICAgY2FzZSBSb290SW5Qcm9ncmVzczpcbiAgICAgICAgICAgICAgY2FzZSBSb290RmF0YWxFcnJvcmVkOlxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiUm9vdCBkaWQgbm90IGNvbXBsZXRlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgICAgICAgY2FzZSBSb290U3VzcGVuZGVkV2l0aERlbGF5OlxuICAgICAgICAgICAgICAgIGlmICgobGFuZXMgJiA0MTk0MDQ4KSAhPT0gbGFuZXMpIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFJvb3RTdXNwZW5kZWRBdFRoZVNoZWxsOlxuICAgICAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICAgICAgICF3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgUm9vdEVycm9yZWQ6XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFJvb3RTdXNwZW5kZWQ6XG4gICAgICAgICAgICAgIGNhc2UgUm9vdENvbXBsZXRlZDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlVua25vd24gcm9vdCBleGl0IHN0YXR1cy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUpXG4gICAgICAgICAgICAgIGNvbW1pdFJvb3QoXG4gICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgIGZvcmNlU3luYyxcbiAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChsYW5lcyAmIDYyOTE0NTYwKSA9PT0gbGFuZXMgJiZcbiAgICAgICAgICAgICAgICAoKHJlbmRlcldhc0NvbmN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSArXG4gICAgICAgICAgICAgICAgICBGQUxMQkFDS19USFJPVFRMRV9NUyAtXG4gICAgICAgICAgICAgICAgICBub3ckMSgpKSxcbiAgICAgICAgICAgICAgICAxMCA8IHJlbmRlcldhc0NvbmN1cnJlbnQpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICAgICAgICF3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICgwICE9PSBnZXROZXh0TGFuZXMoc2hvdWxkVGltZVNsaWNlLCAwLCAhMCkpIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoXG4gICAgICAgICAgICAgICAgICBjb21taXRSb290V2hlblJlYWR5LmJpbmQoXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yY2VTeW5jLFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkSW5jbHVkZVJlY3Vyc2l2ZVJlbmRlclVwZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzLFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MsXG4gICAgICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIFRIUk9UVExFRF9DT01NSVQsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29tbWl0Um9vdFdoZW5SZWFkeShcbiAgICAgICAgICAgICAgICBzaG91bGRUaW1lU2xpY2UsXG4gICAgICAgICAgICAgICAgZm9yY2VTeW5jLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkSW5jbHVkZVJlY3Vyc2l2ZVJlbmRlclVwZGF0ZSxcbiAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzLFxuICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMsXG4gICAgICAgICAgICAgICAgSU1NRURJQVRFX0NPTU1JVCxcbiAgICAgICAgICAgICAgICByZW5kZXJTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH0gd2hpbGUgKDEpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRSb290V2hlblJlYWR5KFxuICAgICAgcm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIHJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICBsYW5lcyxcbiAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgIGRpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyxcbiAgICAgIGV4aXRTdGF0dXMsXG4gICAgICBzdXNwZW5kZWRDb21taXRSZWFzb24sXG4gICAgICBjb21wbGV0ZWRSZW5kZXJTdGFydFRpbWUsXG4gICAgICBjb21wbGV0ZWRSZW5kZXJFbmRUaW1lXG4gICAgKSB7XG4gICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7XG4gICAgICBzdXNwZW5kZWRDb21taXRSZWFzb24gPSBmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzO1xuICAgICAgaWYgKFxuICAgICAgICBzdXNwZW5kZWRDb21taXRSZWFzb24gJiA4MTkyIHx8XG4gICAgICAgIDE2Nzg1NDA4ID09PSAoc3VzcGVuZGVkQ29tbWl0UmVhc29uICYgMTY3ODU0MDgpXG4gICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKHN1c3BlbmRlZFN0YXRlID0geyBzdHlsZXNoZWV0czogbnVsbCwgY291bnQ6IDAsIHVuc3VzcGVuZDogbm9vcCB9KSxcbiAgICAgICAgICBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihmaW5pc2hlZFdvcmspLFxuICAgICAgICAgIChzdXNwZW5kZWRDb21taXRSZWFzb24gPSB3YWl0Rm9yQ29tbWl0VG9CZVJlYWR5KCkpLFxuICAgICAgICAgIG51bGwgIT09IHN1c3BlbmRlZENvbW1pdFJlYXNvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gc3VzcGVuZGVkQ29tbWl0UmVhc29uKFxuICAgICAgICAgICAgY29tbWl0Um9vdC5iaW5kKFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSxcbiAgICAgICAgICAgICAgc3Bhd25lZExhbmUsXG4gICAgICAgICAgICAgIHVwZGF0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgICAgICAgICAgZXhpdFN0YXR1cyxcbiAgICAgICAgICAgICAgU1VTUEVOREVEX0NPTU1JVCxcbiAgICAgICAgICAgICAgY29tcGxldGVkUmVuZGVyU3RhcnRUaW1lLFxuICAgICAgICAgICAgICBjb21wbGV0ZWRSZW5kZXJFbmRUaW1lXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgICAgICAgIWRpZFNraXBTdXNwZW5kZWRTaWJsaW5nc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICBjb21taXRSb290KFxuICAgICAgICByb290LFxuICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgIGxhbmVzLFxuICAgICAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSxcbiAgICAgICAgc3Bhd25lZExhbmUsXG4gICAgICAgIHVwZGF0ZWRMYW5lcyxcbiAgICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lc1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZpbmlzaGVkV29yaykge1xuICAgICAgZm9yICh2YXIgbm9kZSA9IGZpbmlzaGVkV29yazsgOyApIHtcbiAgICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKDAgPT09IHRhZyB8fCAxMSA9PT0gdGFnIHx8IDE1ID09PSB0YWcpICYmXG4gICAgICAgICAgbm9kZS5mbGFncyAmIDE2Mzg0ICYmXG4gICAgICAgICAgKCh0YWcgPSBub2RlLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICBudWxsICE9PSB0YWcgJiYgKCh0YWcgPSB0YWcuc3RvcmVzKSwgbnVsbCAhPT0gdGFnKSlcbiAgICAgICAgKVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hlY2sgPSB0YWdbaV0sXG4gICAgICAgICAgICAgIGdldFNuYXBzaG90ID0gY2hlY2suZ2V0U25hcHNob3Q7XG4gICAgICAgICAgICBjaGVjayA9IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKCFvYmplY3RJcyhnZXRTbmFwc2hvdCgpLCBjaGVjaykpIHJldHVybiAhMTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIHRhZyA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGlmIChub2RlLnN1YnRyZWVGbGFncyAmIDE2Mzg0ICYmIG51bGwgIT09IHRhZylcbiAgICAgICAgICAodGFnLnJldHVybiA9IG5vZGUpLCAobm9kZSA9IHRhZyk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChub2RlID09PSBmaW5pc2hlZFdvcmspIGJyZWFrO1xuICAgICAgICAgIGZvciAoOyBudWxsID09PSBub2RlLnNpYmxpbmc7ICkge1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IG5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBmaW5pc2hlZFdvcmspIHJldHVybiAhMDtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICByb290LFxuICAgICAgc3VzcGVuZGVkTGFuZXMsXG4gICAgICBzcGF3bmVkTGFuZSxcbiAgICAgIGRpZEF0dGVtcHRFbnRpcmVUcmVlXG4gICAgKSB7XG4gICAgICBzdXNwZW5kZWRMYW5lcyAmPSB+d29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXM7XG4gICAgICBzdXNwZW5kZWRMYW5lcyAmPSB+d29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXM7XG4gICAgICByb290LnN1c3BlbmRlZExhbmVzIHw9IHN1c3BlbmRlZExhbmVzO1xuICAgICAgcm9vdC5waW5nZWRMYW5lcyAmPSB+c3VzcGVuZGVkTGFuZXM7XG4gICAgICBkaWRBdHRlbXB0RW50aXJlVHJlZSAmJiAocm9vdC53YXJtTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXMpO1xuICAgICAgZGlkQXR0ZW1wdEVudGlyZVRyZWUgPSByb290LmV4cGlyYXRpb25UaW1lcztcbiAgICAgIGZvciAodmFyIGxhbmVzID0gc3VzcGVuZGVkTGFuZXM7IDAgPCBsYW5lczsgKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIobGFuZXMpLFxuICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICBkaWRBdHRlbXB0RW50aXJlVHJlZVtpbmRleF0gPSAtMTtcbiAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgICAwICE9PSBzcGF3bmVkTGFuZSAmJlxuICAgICAgICBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgc3VzcGVuZGVkTGFuZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaFN5bmNXb3JrJDEoKSB7XG4gICAgICByZXR1cm4gKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0XG4gICAgICAgID8gKGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKSwgITEpXG4gICAgICAgIDogITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpIHtcbiAgICAgIGlmIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IE5vdFN1c3BlbmRlZClcbiAgICAgICAgICB2YXIgaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgKGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpLFxuICAgICAgICAgICAgcmVzZXRIb29rc09uVW53aW5kKGludGVycnVwdGVkV29yayksXG4gICAgICAgICAgICAodGhlbmFibGVTdGF0ZSA9IG51bGwpLFxuICAgICAgICAgICAgKHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMCksXG4gICAgICAgICAgICAoaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBmb3IgKDsgbnVsbCAhPT0gaW50ZXJydXB0ZWRXb3JrOyApXG4gICAgICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yay5hbHRlcm5hdGUsIGludGVycnVwdGVkV29yayksXG4gICAgICAgICAgICAoaW50ZXJydXB0ZWRXb3JrID0gaW50ZXJydXB0ZWRXb3JrLnJldHVybik7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgICAgIHZhciB0aW1lb3V0SGFuZGxlID0gcm9vdC50aW1lb3V0SGFuZGxlO1xuICAgICAgdGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0ICYmXG4gICAgICAgICgocm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0KSwgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKSk7XG4gICAgICB0aW1lb3V0SGFuZGxlID0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0O1xuICAgICAgbnVsbCAhPT0gdGltZW91dEhhbmRsZSAmJlxuICAgICAgICAoKHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGwpLCB0aW1lb3V0SGFuZGxlKCkpO1xuICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSB0aW1lb3V0SGFuZGxlID0gY3JlYXRlV29ya0luUHJvZ3Jlc3Mocm9vdC5jdXJyZW50LCBudWxsKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gbGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzID0gITE7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9IGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgbGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyID0gITE7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluUHJvZ3Jlc3M7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPVxuICAgICAgICAgIDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPVxuICAgICAgICBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkSW5jbHVkZVJlY3Vyc2l2ZVJlbmRlclVwZGF0ZSA9ICExO1xuICAgICAgMCAhPT0gKGxhbmVzICYgOCkgJiYgKGxhbmVzIHw9IGxhbmVzICYgMzIpO1xuICAgICAgdmFyIGFsbEVudGFuZ2xlZExhbmVzID0gcm9vdC5lbnRhbmdsZWRMYW5lcztcbiAgICAgIGlmICgwICE9PSBhbGxFbnRhbmdsZWRMYW5lcylcbiAgICAgICAgZm9yIChcbiAgICAgICAgICByb290ID0gcm9vdC5lbnRhbmdsZW1lbnRzLCBhbGxFbnRhbmdsZWRMYW5lcyAmPSBsYW5lcztcbiAgICAgICAgICAwIDwgYWxsRW50YW5nbGVkTGFuZXM7XG5cbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihhbGxFbnRhbmdsZWRMYW5lcyksXG4gICAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgICBsYW5lcyB8PSByb290W2luZGV4XTtcbiAgICAgICAgICBhbGxFbnRhbmdsZWRMYW5lcyAmPSB+bGFuZTtcbiAgICAgICAgfVxuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBsYW5lcztcbiAgICAgIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKTtcbiAgICAgIGxhbmVzID0gZ2V0Q3VycmVudFRpbWUoKTtcbiAgICAgIDFlMyA8IGxhbmVzIC0gbGFzdFJlc2V0VGltZSAmJlxuICAgICAgICAoKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnJlY2VudGx5Q3JlYXRlZE93bmVyU3RhY2tzID0gMCksXG4gICAgICAgIChsYXN0UmVzZXRUaW1lID0gbGFuZXMpKTtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MoKTtcbiAgICAgIHJldHVybiB0aW1lb3V0SGFuZGxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSkge1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgICBpc1JlbmRlcmluZyA9ICExO1xuICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICB0aHJvd25WYWx1ZSA9PT0gU3VzcGVuc2VFeGNlcHRpb24gfHxcbiAgICAgIHRocm93blZhbHVlID09PSBTdXNwZW5zZUFjdGlvbkV4Y2VwdGlvblxuICAgICAgICA/ICgodGhyb3duVmFsdWUgPSBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRPbkltbWVkaWF0ZSkpXG4gICAgICAgIDogdGhyb3duVmFsdWUgPT09IFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvblxuICAgICAgICAgID8gKCh0aHJvd25WYWx1ZSA9IGdldFN1c3BlbmRlZFRoZW5hYmxlKCkpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gU3VzcGVuZGVkT25JbnN0YW5jZSkpXG4gICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPVxuICAgICAgICAgICAgICB0aHJvd25WYWx1ZSA9PT0gU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uXG4gICAgICAgICAgICAgICAgPyBTdXNwZW5kZWRPbkh5ZHJhdGlvblxuICAgICAgICAgICAgICAgIDogbnVsbCAhPT0gdGhyb3duVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHRocm93blZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHRocm93blZhbHVlLnRoZW5cbiAgICAgICAgICAgICAgICAgID8gU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlXG4gICAgICAgICAgICAgICAgICA6IFN1c3BlbmRlZE9uRXJyb3IpO1xuICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IHRocm93blZhbHVlO1xuICAgICAgdmFyIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBpZiAobnVsbCA9PT0gZXJyb3JlZFdvcmspXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZCksXG4gICAgICAgICAgbG9nVW5jYXVnaHRFcnJvcihcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih0aHJvd25WYWx1ZSwgcm9vdC5jdXJyZW50KVxuICAgICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKGVycm9yZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSAmJlxuICAgICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREdXJhdGlvbihlcnJvcmVkV29yayksXG4gICAgICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKSxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkVycm9yOlxuICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudEVycm9yZWQgJiZcbiAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50RXJyb3JlZChcbiAgICAgICAgICAgICAgICBlcnJvcmVkV29yayxcbiAgICAgICAgICAgICAgICB0aHJvd25WYWx1ZSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRhdGE6XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkFjdGlvbjpcbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW1tZWRpYXRlOlxuICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlOlxuICAgICAgICAgIGNhc2UgU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlOlxuICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFN1c3BlbmRlZCAmJlxuICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRTdXNwZW5kZWQoXG4gICAgICAgICAgICAgICAgZXJyb3JlZFdvcmssXG4gICAgICAgICAgICAgICAgdGhyb3duVmFsdWUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoRGlzcGF0Y2hlcigpIHtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICAgICAgcmV0dXJuIG51bGwgPT09IHByZXZEaXNwYXRjaGVyID8gQ29udGV4dE9ubHlEaXNwYXRjaGVyIDogcHJldkRpc3BhdGNoZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hBc3luY0Rpc3BhdGNoZXIoKSB7XG4gICAgICB2YXIgcHJldkFzeW5jRGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkE7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5BID0gRGVmYXVsdEFzeW5jRGlzcGF0Y2hlcjtcbiAgICAgIHJldHVybiBwcmV2QXN5bmNEaXNwYXRjaGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCkge1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MgfHxcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDQxOTQwNDgpICE9PVxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYmXG4gICAgICAgICAgbnVsbCAhPT0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCkgfHxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nID0gITApO1xuICAgICAgKDAgPT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgJiAxMzQyMTc3MjcpICYmXG4gICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyAmIDEzNDIxNzcyNykpIHx8XG4gICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdCB8fFxuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgITFcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMsIHNob3VsZFlpZWxkRm9yUHJlcmVuZGVyaW5nKSB7XG4gICAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKSxcbiAgICAgICAgcHJldkFzeW5jRGlzcGF0Y2hlciA9IHB1c2hBc3luY0Rpc3BhdGNoZXIoKTtcbiAgICAgIGlmIChcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICAgIHZhciBtZW1vaXplZFVwZGF0ZXJzID0gcm9vdC5tZW1vaXplZFVwZGF0ZXJzO1xuICAgICAgICAgIDAgPCBtZW1vaXplZFVwZGF0ZXJzLnNpemUgJiZcbiAgICAgICAgICAgIChyZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMuY2xlYXIoKSk7XG4gICAgICAgICAgbW92ZVBlbmRpbmdGaWJlcnNUb01lbW9pemVkKHJvb3QsIGxhbmVzKTtcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gbnVsbDtcbiAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgICAgfVxuICAgICAgbWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpO1xuICAgICAgbGFuZXMgPSAhMTtcbiAgICAgIG1lbW9pemVkVXBkYXRlcnMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xuICAgICAgYTogZG9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAhPT0gTm90U3VzcGVuZGVkICYmXG4gICAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIHVuaXRPZldvcmsgPSB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgdGhyb3duVmFsdWUgPSB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlO1xuICAgICAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbikge1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSHlkcmF0aW9uOlxuICAgICAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMgPSBSb290U3VzcGVuZGVkQXRUaGVTaGVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW1tZWRpYXRlOlxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGF0YTpcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkFjdGlvbjpcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2U6XG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCAmJiAobGFuZXMgPSAhMCk7XG4gICAgICAgICAgICAgICAgdmFyIHJlYXNvbiA9IHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc2hvdWxkWWllbGRGb3JQcmVyZW5kZXJpbmcgJiZcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzID0gUm9vdEluUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAocmVhc29uID0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKHJvb3QsIHVuaXRPZldvcmssIHRocm93blZhbHVlLCByZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB3b3JrTG9vcFN5bmMoKTtcbiAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzID0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAodGhyb3duVmFsdWUkOCkge1xuICAgICAgICAgIGhhbmRsZVRocm93KHJvb3QsIHRocm93blZhbHVlJDgpO1xuICAgICAgICB9XG4gICAgICB3aGlsZSAoMSk7XG4gICAgICBsYW5lcyAmJiByb290LnNoZWxsU3VzcGVuZENvdW50ZXIrKztcbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuQSA9IHByZXZBc3luY0Rpc3BhdGNoZXI7XG4gICAgICBtYXJrUmVuZGVyU3RvcHBlZCgpO1xuICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3MgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gMCksXG4gICAgICAgIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKSk7XG4gICAgICByZXR1cm4gbWVtb2l6ZWRVcGRhdGVycztcbiAgICB9XG4gICAgZnVuY3Rpb24gd29ya0xvb3BTeW5jKCkge1xuICAgICAgZm9yICg7IG51bGwgIT09IHdvcmtJblByb2dyZXNzOyApIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpIHtcbiAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpLFxuICAgICAgICBwcmV2QXN5bmNEaXNwYXRjaGVyID0gcHVzaEFzeW5jRGlzcGF0Y2hlcigpO1xuICAgICAgaWYgKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzXG4gICAgICApIHtcbiAgICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgICAgICAgdmFyIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG4gICAgICAgICAgMCA8IG1lbW9pemVkVXBkYXRlcnMuc2l6ZSAmJlxuICAgICAgICAgICAgKHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycy5jbGVhcigpKTtcbiAgICAgICAgICBtb3ZlUGVuZGluZ0ZpYmVyc1RvTWVtb2l6ZWQocm9vdCwgbGFuZXMpO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMgPSBudWxsO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gbm93JDEoKSArIFJFTkRFUl9USU1FT1VUX01TO1xuICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgPSBjaGVja0lmUm9vdElzUHJlcmVuZGVyaW5nKFxuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgbGFuZXNcbiAgICAgICAgKTtcbiAgICAgIG1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKTtcbiAgICAgIGE6IGRvXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gIT09IE5vdFN1c3BlbmRlZCAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICApXG4gICAgICAgICAgICBiOiBzd2l0Y2ggKFxuICAgICAgICAgICAgICAoKGxhbmVzID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAobWVtb2l6ZWRVcGRhdGVycyA9IHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUpLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRXJyb3I6XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMsXG4gICAgICAgICAgICAgICAgICBTdXNwZW5kZWRPbkVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRhdGE6XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25BY3Rpb246XG4gICAgICAgICAgICAgICAgaWYgKGlzVGhlbmFibGVSZXNvbHZlZChtZW1vaXplZFVwZGF0ZXJzKSkge1xuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIHJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsobGFuZXMpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhbmVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICE9PSBTdXNwZW5kZWRPbkRhdGEgJiZcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gIT09IFN1c3BlbmRlZE9uQWN0aW9uKSB8fFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID1cbiAgICAgICAgICAgICAgICAgICAgICBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWUpO1xuICAgICAgICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycy50aGVuKGxhbmVzLCBsYW5lcyk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkltbWVkaWF0ZTpcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW5zdGFuY2U6XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPVxuICAgICAgICAgICAgICAgICAgU3VzcGVuZGVkT25JbnN0YW5jZUFuZFJlYWR5VG9Db250aW51ZTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZTpcbiAgICAgICAgICAgICAgICBpc1RoZW5hYmxlUmVzb2x2ZWQobWVtb2l6ZWRVcGRhdGVycylcbiAgICAgICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZCksXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAgIHJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsobGFuZXMpKVxuICAgICAgICAgICAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkKSxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChcbiAgICAgICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWU6XG4gICAgICAgICAgICAgICAgdmFyIHJlc291cmNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhvc3RGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2UgPyBwcmVsb2FkUmVzb3VyY2UocmVzb3VyY2UpIDogMSkge1xuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWJsaW5nID0gaG9zdEZpYmVyLnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IHNpYmxpbmcpIHdvcmtJblByb2dyZXNzID0gc2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5GaWJlciA9IGhvc3RGaWJlci5yZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVVbml0T2ZXb3JrKHJldHVybkZpYmVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3MgPSBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIHR5cGUgb2YgZmliZXIgdHJpZ2dlcmVkIGEgc3VzcGVuc2V5IGNvbW1pdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyxcbiAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZTpcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyxcbiAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25IeWRyYXRpb246XG4gICAgICAgICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCk7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWRBdFRoZVNoZWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgU3VzcGVuZGVkUmVhc29uLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZVxuICAgICAgICAgICAgPyB3b3JrTG9vcFN5bmMoKVxuICAgICAgICAgICAgOiB3b3JrTG9vcENvbmN1cnJlbnRCeVNjaGVkdWxlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSQ5KSB7XG4gICAgICAgICAgaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUkOSk7XG4gICAgICAgIH1cbiAgICAgIHdoaWxlICgxKTtcbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuQSA9IHByZXZBc3luY0Rpc3BhdGNoZXI7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBpZiAobnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyWWllbGRlZCAmJlxuICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyWWllbGRlZCgpLFxuICAgICAgICAgIFJvb3RJblByb2dyZXNzXG4gICAgICAgICk7XG4gICAgICBtYXJrUmVuZGVyU3RvcHBlZCgpO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gMDtcbiAgICAgIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3b3JrTG9vcENvbmN1cnJlbnRCeVNjaGVkdWxlcigpIHtcbiAgICAgIGZvciAoOyBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcyAmJiAhc2hvdWxkWWllbGQoKTsgKVxuICAgICAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlcmZvcm1Vbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgICAgIHZhciBjdXJyZW50ID0gdW5pdE9mV29yay5hbHRlcm5hdGU7XG4gICAgICAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGVcbiAgICAgICAgPyAoc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspLFxuICAgICAgICAgIChjdXJyZW50ID0gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgYmVnaW5Xb3JrLFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lc1xuICAgICAgICAgICkpLFxuICAgICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRHVyYXRpb24odW5pdE9mV29yaykpXG4gICAgICAgIDogKGN1cnJlbnQgPSBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICBiZWdpbldvcmssXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzXG4gICAgICAgICAgKSk7XG4gICAgICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcbiAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgPyBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yaylcbiAgICAgICAgOiAod29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gICAgICB2YXIgbmV4dCA9IHJ1bldpdGhGaWJlckluREVWKHVuaXRPZldvcmssIHJlcGxheUJlZ2luV29yaywgdW5pdE9mV29yayk7XG4gICAgICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcbiAgICAgIG51bGwgPT09IG5leHQgPyBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yaykgOiAod29ya0luUHJvZ3Jlc3MgPSBuZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVwbGF5QmVnaW5Xb3JrKHVuaXRPZldvcmspIHtcbiAgICAgIHZhciBjdXJyZW50ID0gdW5pdE9mV29yay5hbHRlcm5hdGUsXG4gICAgICAgIGlzUHJvZmlsaW5nTW9kZSA9ICh1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZTtcbiAgICAgIGlzUHJvZmlsaW5nTW9kZSAmJiBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgICBzd2l0Y2ggKHVuaXRPZldvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjdXJyZW50ID0gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIHVuaXRPZldvcmsucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgdW5pdE9mV29yay50eXBlLFxuICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGN1cnJlbnQgPSByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgdW5pdE9mV29yay5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLnR5cGUucmVuZGVyLFxuICAgICAgICAgICAgdW5pdE9mV29yay5yZWYsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXNldEhvb2tzT25VbndpbmQodW5pdE9mV29yayk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIHVuaXRPZldvcmspLFxuICAgICAgICAgICAgKHVuaXRPZldvcmsgPSB3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3ModW5pdE9mV29yaywgZW50YW5nbGVkUmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgIChjdXJyZW50ID0gYmVnaW5Xb3JrKGN1cnJlbnQsIHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKSk7XG4gICAgICB9XG4gICAgICBpc1Byb2ZpbGluZ01vZGUgJiZcbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREdXJhdGlvbih1bml0T2ZXb3JrKTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiB0aHJvd0FuZFVud2luZFdvcmtMb29wKFxuICAgICAgcm9vdCxcbiAgICAgIHVuaXRPZldvcmssXG4gICAgICB0aHJvd25WYWx1ZSxcbiAgICAgIHN1c3BlbmRlZFJlYXNvblxuICAgICkge1xuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzT25VbndpbmQodW5pdE9mV29yayk7XG4gICAgICB0aGVuYWJsZVN0YXRlID0gbnVsbDtcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgICAgIHZhciByZXR1cm5GaWJlciA9IHVuaXRPZldvcmsucmV0dXJuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRocm93RXhjZXB0aW9uKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIHRocm93blZhbHVlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICAgIGxvZ1VuY2F1Z2h0RXJyb3IoXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodGhyb3duVmFsdWUsIHJvb3QuY3VycmVudClcbiAgICAgICAgICApO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChudWxsICE9PSByZXR1cm5GaWJlcikgdGhyb3cgKCh3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyKSwgZXJyb3IpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICAgICAgbG9nVW5jYXVnaHRFcnJvcihcbiAgICAgICAgICByb290LFxuICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHRocm93blZhbHVlLCByb290LmN1cnJlbnQpXG4gICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHVuaXRPZldvcmsuZmxhZ3MgJiAzMjc2OCkge1xuICAgICAgICBpZiAoaXNIeWRyYXRpbmcgfHwgc3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkVycm9yKSByb290ID0gITA7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nIHx8XG4gICAgICAgICAgMCAhPT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKVxuICAgICAgICApXG4gICAgICAgICAgcm9vdCA9ICExO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyA9IHJvb3QgPSAhMCksXG4gICAgICAgICAgc3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGEgfHxcbiAgICAgICAgICAgIHN1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25BY3Rpb24gfHxcbiAgICAgICAgICAgIHN1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25JbW1lZGlhdGUgfHxcbiAgICAgICAgICAgIHN1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlKVxuICAgICAgICApXG4gICAgICAgICAgKHN1c3BlbmRlZFJlYXNvbiA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQpLFxuICAgICAgICAgICAgbnVsbCAhPT0gc3VzcGVuZGVkUmVhc29uICYmXG4gICAgICAgICAgICAgIDEzID09PSBzdXNwZW5kZWRSZWFzb24udGFnICYmXG4gICAgICAgICAgICAgIChzdXNwZW5kZWRSZWFzb24uZmxhZ3MgfD0gMTYzODQpO1xuICAgICAgICB1bndpbmRVbml0T2ZXb3JrKHVuaXRPZldvcmssIHJvb3QpO1xuICAgICAgfSBlbHNlIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgICAgIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKDAgIT09IChjb21wbGV0ZWRXb3JrLmZsYWdzICYgMzI3NjgpKSB7XG4gICAgICAgICAgdW53aW5kVW5pdE9mV29yayhcbiAgICAgICAgICAgIGNvbXBsZXRlZFdvcmssXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY3VycmVudCA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlO1xuICAgICAgICB1bml0T2ZXb3JrID0gY29tcGxldGVkV29yay5yZXR1cm47XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgY3VycmVudCA9IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgIGNvbXBsZXRlZFdvcmssXG4gICAgICAgICAgY29tcGxldGVXb3JrLFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgY29tcGxldGVkV29yayxcbiAgICAgICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZEluY29tcGxldGVEdXJhdGlvbihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBsZXRlZFdvcmsgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG4gICAgICAgIGlmIChudWxsICE9PSBjb21wbGV0ZWRXb3JrKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gY29tcGxldGVkV29yayk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcyAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RDb21wbGV0ZWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bndpbmRVbml0T2ZXb3JrKHVuaXRPZldvcmssIHNraXBTaWJsaW5ncykge1xuICAgICAgZG8ge1xuICAgICAgICB2YXIgbmV4dCA9IHVud2luZFdvcmsodW5pdE9mV29yay5hbHRlcm5hdGUsIHVuaXRPZldvcmspO1xuICAgICAgICBpZiAobnVsbCAhPT0gbmV4dCkge1xuICAgICAgICAgIG5leHQuZmxhZ3MgJj0gMzI3Njc7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmRJbmNvbXBsZXRlRHVyYXRpb24odW5pdE9mV29yayk7XG4gICAgICAgICAgbmV4dCA9IHVuaXRPZldvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgZm9yICh2YXIgY2hpbGQgPSB1bml0T2ZXb3JrLmNoaWxkOyBudWxsICE9PSBjaGlsZDsgKVxuICAgICAgICAgICAgKG5leHQgKz0gY2hpbGQuYWN0dWFsRHVyYXRpb24pLCAoY2hpbGQgPSBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB1bml0T2ZXb3JrLmFjdHVhbER1cmF0aW9uID0gbmV4dDtcbiAgICAgICAgfVxuICAgICAgICBuZXh0ID0gdW5pdE9mV29yay5yZXR1cm47XG4gICAgICAgIG51bGwgIT09IG5leHQgJiZcbiAgICAgICAgICAoKG5leHQuZmxhZ3MgfD0gMzI3NjgpLFxuICAgICAgICAgIChuZXh0LnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgICAgIChuZXh0LmRlbGV0aW9ucyA9IG51bGwpKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFza2lwU2libGluZ3MgJiZcbiAgICAgICAgICAoKHVuaXRPZldvcmsgPSB1bml0T2ZXb3JrLnNpYmxpbmcpLCBudWxsICE9PSB1bml0T2ZXb3JrKVxuICAgICAgICApIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVuaXRPZldvcms7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gdW5pdE9mV29yayA9IG5leHQ7XG4gICAgICB9IHdoaWxlIChudWxsICE9PSB1bml0T2ZXb3JrKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkQXRUaGVTaGVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Um9vdChcbiAgICAgIHJvb3QsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBsYW5lcyxcbiAgICAgIHJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICBzcGF3bmVkTGFuZSxcbiAgICAgIHVwZGF0ZWRMYW5lcyxcbiAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXNcbiAgICApIHtcbiAgICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGw7XG4gICAgICBkbyBmbHVzaFBlbmRpbmdFZmZlY3RzKCk7XG4gICAgICB3aGlsZSAocGVuZGluZ0VmZmVjdHNTdGF0dXMgIT09IE5PX1BFTkRJTkdfRUZGRUNUUyk7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nKCk7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncygpO1xuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbW1pdFN0YXJ0ZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tbWl0U3RhcnRlZChsYW5lcyk7XG4gICAgICBpZiAobnVsbCA9PT0gZmluaXNoZWRXb3JrKSBtYXJrQ29tbWl0U3RvcHBlZCgpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIDAgPT09IGxhbmVzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiZmluaXNoZWRMYW5lcyBzaG91bGQgbm90IGJlIGVtcHR5IGR1cmluZyBhIGNvbW1pdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsgPT09IHJvb3QuY3VycmVudClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSA9XG4gICAgICAgICAgZmluaXNoZWRXb3JrLmxhbmVzIHwgZmluaXNoZWRXb3JrLmNoaWxkTGFuZXM7XG4gICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSB8PSBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXM7XG4gICAgICAgIG1hcmtSb290RmluaXNoZWQoXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICAgICAgc3Bhd25lZExhbmUsXG4gICAgICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXNcbiAgICAgICAgKTtcbiAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDApKTtcbiAgICAgICAgcGVuZGluZ0ZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNSb290ID0gcm9vdDtcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNMYW5lcyA9IGxhbmVzO1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1JlbWFpbmluZ0xhbmVzID0gZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlO1xuICAgICAgICBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zID0gdHJhbnNpdGlvbnM7XG4gICAgICAgIHBlbmRpbmdSZWNvdmVyYWJsZUVycm9ycyA9IHJlY292ZXJhYmxlRXJyb3JzO1xuICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDEwMjU2KSB8fFxuICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLmZsYWdzICYgMTAyNTYpXG4gICAgICAgICAgPyAoKHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbCksXG4gICAgICAgICAgICAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMCksXG4gICAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrJDEoTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCEwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6ICgocm9vdC5jYWxsYmFja05vZGUgPSBudWxsKSwgKHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IDApKTtcbiAgICAgICAgY29tbWl0U3RhcnRUaW1lID0gbm93KCk7XG4gICAgICAgIHJlY292ZXJhYmxlRXJyb3JzID0gMCAhPT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEzODc4KTtcbiAgICAgICAgaWYgKDAgIT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgMTM4NzgpIHx8IHJlY292ZXJhYmxlRXJyb3JzKSB7XG4gICAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMgPSBSZWFjdFNoYXJlZEludGVybmFscy5UO1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBudWxsO1xuICAgICAgICAgIHRyYW5zaXRpb25zID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gRGlzY3JldGVFdmVudFByaW9yaXR5O1xuICAgICAgICAgIHNwYXduZWRMYW5lID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmssIGxhbmVzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgPSBzcGF3bmVkTGFuZSksXG4gICAgICAgICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gdHJhbnNpdGlvbnMpLFxuICAgICAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHJlY292ZXJhYmxlRXJyb3JzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBQRU5ESU5HX01VVEFUSU9OX1BIQVNFO1xuICAgICAgICBmbHVzaE11dGF0aW9uRWZmZWN0cygpO1xuICAgICAgICBmbHVzaExheW91dEVmZmVjdHMoKTtcbiAgICAgICAgZmx1c2hTcGF3bmVkV29yaygpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaE11dGF0aW9uRWZmZWN0cygpIHtcbiAgICAgIGlmIChwZW5kaW5nRWZmZWN0c1N0YXR1cyA9PT0gUEVORElOR19NVVRBVElPTl9QSEFTRSkge1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IE5PX1BFTkRJTkdfRUZGRUNUUztcbiAgICAgICAgdmFyIHJvb3QgPSBwZW5kaW5nRWZmZWN0c1Jvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrID0gcGVuZGluZ0ZpbmlzaGVkV29yayxcbiAgICAgICAgICBsYW5lcyA9IHBlbmRpbmdFZmZlY3RzTGFuZXMsXG4gICAgICAgICAgcm9vdE11dGF0aW9uSGFzRWZmZWN0ID0gMCAhPT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEzODc4KTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIDAgIT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgMTM4NzgpIHx8XG4gICAgICAgICAgcm9vdE11dGF0aW9uSGFzRWZmZWN0XG4gICAgICAgICkge1xuICAgICAgICAgIHJvb3RNdXRhdGlvbkhhc0VmZmVjdCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluUHJvZ3Jlc3NMYW5lcyA9IGxhbmVzO1xuICAgICAgICAgICAgaW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICAgICAgICAgICAgY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFdvcmssIHJvb3QpO1xuICAgICAgICAgICAgaW5Qcm9ncmVzc1Jvb3QgPSBpblByb2dyZXNzTGFuZXMgPSBudWxsO1xuICAgICAgICAgICAgbGFuZXMgPSBzZWxlY3Rpb25JbmZvcm1hdGlvbjtcbiAgICAgICAgICAgIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKHJvb3QuY29udGFpbmVySW5mbyksXG4gICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0gPSBsYW5lcy5mb2N1c2VkRWxlbSxcbiAgICAgICAgICAgICAgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IGxhbmVzLnNlbGVjdGlvblJhbmdlO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJlxuICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtICYmXG4gICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0ub3duZXJEb2N1bWVudCAmJlxuICAgICAgICAgICAgICBjb250YWluc05vZGUoXG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJpb3JTZWxlY3Rpb25SYW5nZSAmJlxuICAgICAgICAgICAgICAgIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBwcmlvclNlbGVjdGlvblJhbmdlLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgZW5kID0gcHJpb3JTZWxlY3Rpb25SYW5nZS5lbmQ7XG4gICAgICAgICAgICAgICAgdm9pZCAwID09PSBlbmQgJiYgKGVuZCA9IHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBpZiAoXCJzZWxlY3Rpb25TdGFydFwiIGluIHByaW9yRm9jdXNlZEVsZW0pXG4gICAgICAgICAgICAgICAgICAocHJpb3JGb2N1c2VkRWxlbS5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgKHByaW9yRm9jdXNlZEVsZW0uc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0udmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFyIGRvYyA9IHByaW9yRm9jdXNlZEVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgd2luID0gKGRvYyAmJiBkb2MuZGVmYXVsdFZpZXcpIHx8IHdpbmRvdztcbiAgICAgICAgICAgICAgICAgIGlmICh3aW4uZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcHJpb3JGb2N1c2VkRWxlbS50ZXh0Q29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnQkanNjb21wJDAgPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yU2VsZWN0aW9uUmFuZ2Uuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIGVuZCRqc2NvbXAkMCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IHByaW9yU2VsZWN0aW9uUmFuZ2UuZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc3RhcnQkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNYXRoLm1pbihwcmlvclNlbGVjdGlvblJhbmdlLmVuZCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgIXNlbGVjdGlvbi5leHRlbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBzdGFydCRqc2NvbXAkMCA+IGVuZCRqc2NvbXAkMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICgoY3VyRm9jdXNlZEVsZW0gPSBlbmQkanNjb21wJDApLFxuICAgICAgICAgICAgICAgICAgICAgIChlbmQkanNjb21wJDAgPSBzdGFydCRqc2NvbXAkMCksXG4gICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0JGpzY29tcCQwID0gY3VyRm9jdXNlZEVsZW0pKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0TWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgZW5kTWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnRNYXJrZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICBlbmRNYXJrZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoMSAhPT0gc2VsZWN0aW9uLnJhbmdlQ291bnQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlICE9PSBzdGFydE1hcmtlci5ub2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0ICE9PSBzdGFydE1hcmtlci5vZmZzZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUgIT09IGVuZE1hcmtlci5ub2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgIT09IGVuZE1hcmtlci5vZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0TWFya2VyLm5vZGUsIHN0YXJ0TWFya2VyLm9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0JGpzY29tcCQwID4gZW5kJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKHJhbmdlLnNldEVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRvYyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHByaW9yRm9jdXNlZEVsZW07XG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbiA9IHNlbGVjdGlvbi5wYXJlbnROb2RlKTtcblxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgMSA9PT0gc2VsZWN0aW9uLm5vZGVUeXBlICYmXG4gICAgICAgICAgICAgICAgICBkb2MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogc2VsZWN0aW9uLnNjcm9sbExlZnQsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogc2VsZWN0aW9uLnNjcm9sbFRvcFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMgJiZcbiAgICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbSA9IDA7XG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbSA8IGRvYy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbSsrXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBpbmZvID0gZG9jW3ByaW9yRm9jdXNlZEVsZW1dO1xuICAgICAgICAgICAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxMZWZ0ID0gaW5mby5sZWZ0O1xuICAgICAgICAgICAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxUb3AgPSBpbmZvLnRvcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2VuYWJsZWQgPSAhIWV2ZW50c0VuYWJsZWQ7XG4gICAgICAgICAgICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGV2ZW50c0VuYWJsZWQgPSBudWxsO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0KSxcbiAgICAgICAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSByb290TXV0YXRpb25IYXNFZmZlY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gUEVORElOR19MQVlPVVRfUEhBU0U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoTGF5b3V0RWZmZWN0cygpIHtcbiAgICAgIGlmIChwZW5kaW5nRWZmZWN0c1N0YXR1cyA9PT0gUEVORElOR19MQVlPVVRfUEhBU0UpIHtcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBOT19QRU5ESU5HX0VGRkVDVFM7XG4gICAgICAgIHZhciByb290ID0gcGVuZGluZ0VmZmVjdHNSb290LFxuICAgICAgICAgIGZpbmlzaGVkV29yayA9IHBlbmRpbmdGaW5pc2hlZFdvcmssXG4gICAgICAgICAgbGFuZXMgPSBwZW5kaW5nRWZmZWN0c0xhbmVzLFxuICAgICAgICAgIHJvb3RIYXNMYXlvdXRFZmZlY3QgPSAwICE9PSAoZmluaXNoZWRXb3JrLmZsYWdzICYgODc3Mik7XG4gICAgICAgIGlmICgwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDg3NzIpIHx8IHJvb3RIYXNMYXlvdXRFZmZlY3QpIHtcbiAgICAgICAgICByb290SGFzTGF5b3V0RWZmZWN0ID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgICAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0xheW91dEVmZmVjdHNTdGFydGVkICYmXG4gICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0xheW91dEVmZmVjdHNTdGFydGVkKGxhbmVzKSxcbiAgICAgICAgICAgICAgKGluUHJvZ3Jlc3NMYW5lcyA9IGxhbmVzKSxcbiAgICAgICAgICAgICAgKGluUHJvZ3Jlc3NSb290ID0gcm9vdCksXG4gICAgICAgICAgICAgIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIoXG4gICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAoaW5Qcm9ncmVzc1Jvb3QgPSBpblByb2dyZXNzTGFuZXMgPSBudWxsKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtMYXlvdXRFZmZlY3RzU3RvcHBlZCAmJlxuICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0xheW91dEVmZmVjdHNTdG9wcGVkKCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIChleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQpLFxuICAgICAgICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHJvb3RIYXNMYXlvdXRFZmZlY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IFBFTkRJTkdfQUZURVJfTVVUQVRJT05fUEhBU0U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoU3Bhd25lZFdvcmsoKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID09PSBQRU5ESU5HX1NQQVdORURfV09SSyB8fFxuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9PT0gUEVORElOR19BRlRFUl9NVVRBVElPTl9QSEFTRVxuICAgICAgKSB7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gTk9fUEVORElOR19FRkZFQ1RTO1xuICAgICAgICByZXF1ZXN0UGFpbnQoKTtcbiAgICAgICAgdmFyIHJvb3QgPSBwZW5kaW5nRWZmZWN0c1Jvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrID0gcGVuZGluZ0ZpbmlzaGVkV29yayxcbiAgICAgICAgICBsYW5lcyA9IHBlbmRpbmdFZmZlY3RzTGFuZXMsXG4gICAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMgPSBwZW5kaW5nUmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyA9XG4gICAgICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDEwMjU2KSB8fFxuICAgICAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEwMjU2KTtcbiAgICAgICAgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0c1xuICAgICAgICAgID8gKHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gUEVORElOR19QQVNTSVZFX1BIQVNFKVxuICAgICAgICAgIDogKChwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IE5PX1BFTkRJTkdfRUZGRUNUUyksXG4gICAgICAgICAgICAocGVuZGluZ0ZpbmlzaGVkV29yayA9IHBlbmRpbmdFZmZlY3RzUm9vdCA9IG51bGwpLFxuICAgICAgICAgICAgcmVsZWFzZVJvb3RQb29sZWRDYWNoZShyb290LCByb290LnBlbmRpbmdMYW5lcyksXG4gICAgICAgICAgICAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMCksXG4gICAgICAgICAgICAocm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGwpKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAgIDAgPT09IHJlbWFpbmluZ0xhbmVzICYmIChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGwpO1xuICAgICAgICByb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzIHx8IGNvbW1pdERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihyb290KTtcbiAgICAgICAgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyA9IGxhbmVzVG9FdmVudFByaW9yaXR5KGxhbmVzKTtcbiAgICAgICAgZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdFxuICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBkaWRFcnJvciA9IDEyOCA9PT0gKGZpbmlzaGVkV29yay5jdXJyZW50LmZsYWdzICYgMTI4KTtcbiAgICAgICAgICAgIHN3aXRjaCAocm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICAgICAgICBjYXNlIERpc2NyZXRlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHkgPSBJbW1lZGlhdGVQcmlvcml0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBDb250aW51b3VzRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIERlZmF1bHRFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHkkMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBJZGxlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IElkbGVQcmlvcml0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QoXG4gICAgICAgICAgICAgIHJlbmRlcmVySUQsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHksXG4gICAgICAgICAgICAgIGRpZEVycm9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgfHxcbiAgICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIixcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICBpc0RldlRvb2xzUHJlc2VudCAmJiByb290Lm1lbW9pemVkVXBkYXRlcnMuY2xlYXIoKTtcbiAgICAgICAgb25Db21taXRSb290KCk7XG4gICAgICAgIGlmIChudWxsICE9PSByZWNvdmVyYWJsZUVycm9ycykge1xuICAgICAgICAgIGRpZEVycm9yID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIG9uUmVjb3ZlcmFibGVFcnJvciA9IHJvb3Qub25SZWNvdmVyYWJsZUVycm9yO1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrID0gMDtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrIDwgcmVjb3ZlcmFibGVFcnJvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsrK1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhciByZWNvdmVyYWJsZUVycm9yID0gcmVjb3ZlcmFibGVFcnJvcnNbZmluaXNoZWRXb3JrXSxcbiAgICAgICAgICAgICAgICBlcnJvckluZm8gPSBtYWtlRXJyb3JJbmZvKHJlY292ZXJhYmxlRXJyb3Iuc3RhY2spO1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICByZWNvdmVyYWJsZUVycm9yLnNvdXJjZSxcbiAgICAgICAgICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgcmVjb3ZlcmFibGVFcnJvci52YWx1ZSxcbiAgICAgICAgICAgICAgICBlcnJvckluZm9cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBkaWRFcnJvciksXG4gICAgICAgICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gc2NoZWR1bGVyUHJpb3JpdHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAwICE9PSAocGVuZGluZ0VmZmVjdHNMYW5lcyAmIDMpICYmIGZsdXNoUGVuZGluZ0VmZmVjdHMoKTtcbiAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgICAwICE9PSAobGFuZXMgJiA0MTk0MDkwKSAmJiAwICE9PSAocmVtYWluaW5nTGFuZXMgJiA0MilcbiAgICAgICAgICA/ICgobmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gITApLFxuICAgICAgICAgICAgcm9vdCA9PT0gcm9vdFdpdGhOZXN0ZWRVcGRhdGVzXG4gICAgICAgICAgICAgID8gbmVzdGVkVXBkYXRlQ291bnQrK1xuICAgICAgICAgICAgICA6ICgobmVzdGVkVXBkYXRlQ291bnQgPSAwKSwgKHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IHJvb3QpKSlcbiAgICAgICAgICA6IChuZXN0ZWRVcGRhdGVDb3VudCA9IDApO1xuICAgICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCgwLCAhMSk7XG4gICAgICAgIG1hcmtDb21taXRTdG9wcGVkKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1ha2VFcnJvckluZm8oY29tcG9uZW50U3RhY2spIHtcbiAgICAgIGNvbXBvbmVudFN0YWNrID0geyBjb21wb25lbnRTdGFjazogY29tcG9uZW50U3RhY2sgfTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21wb25lbnRTdGFjaywgXCJkaWdlc3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ1lvdSBhcmUgYWNjZXNzaW5nIFwiZGlnZXN0XCIgZnJvbSB0aGUgZXJyb3JJbmZvIG9iamVjdCBwYXNzZWQgdG8gb25SZWNvdmVyYWJsZUVycm9yLiBUaGlzIHByb3BlcnR5IGlzIG5vIGxvbmdlciBwcm92aWRlZCBhcyBwYXJ0IG9mIGVycm9ySW5mbyBidXQgY2FuIGJlIGFjY2Vzc2VkIGFzIGEgcHJvcGVydHkgb2YgdGhlIEVycm9yIGluc3RhbmNlIGl0c2VsZi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29tcG9uZW50U3RhY2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGVhc2VSb290UG9vbGVkQ2FjaGUocm9vdCwgcmVtYWluaW5nTGFuZXMpIHtcbiAgICAgIDAgPT09IChyb290LnBvb2xlZENhY2hlTGFuZXMgJj0gcmVtYWluaW5nTGFuZXMpICYmXG4gICAgICAgICgocmVtYWluaW5nTGFuZXMgPSByb290LnBvb2xlZENhY2hlKSxcbiAgICAgICAgbnVsbCAhPSByZW1haW5pbmdMYW5lcyAmJlxuICAgICAgICAgICgocm9vdC5wb29sZWRDYWNoZSA9IG51bGwpLCByZWxlYXNlQ2FjaGUocmVtYWluaW5nTGFuZXMpKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoUGVuZGluZ0VmZmVjdHMod2FzRGVsYXllZENvbW1pdCkge1xuICAgICAgZmx1c2hNdXRhdGlvbkVmZmVjdHMoKTtcbiAgICAgIGZsdXNoTGF5b3V0RWZmZWN0cygpO1xuICAgICAgZmx1c2hTcGF3bmVkV29yaygpO1xuICAgICAgcmV0dXJuIGZsdXNoUGFzc2l2ZUVmZmVjdHMod2FzRGVsYXllZENvbW1pdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKSB7XG4gICAgICBpZiAocGVuZGluZ0VmZmVjdHNTdGF0dXMgIT09IFBFTkRJTkdfUEFTU0lWRV9QSEFTRSkgcmV0dXJuICExO1xuICAgICAgdmFyIHJvb3QgPSBwZW5kaW5nRWZmZWN0c1Jvb3QsXG4gICAgICAgIHJlbWFpbmluZ0xhbmVzID0gcGVuZGluZ0VmZmVjdHNSZW1haW5pbmdMYW5lcztcbiAgICAgIHBlbmRpbmdFZmZlY3RzUmVtYWluaW5nTGFuZXMgPSAwO1xuICAgICAgdmFyIHJlbmRlclByaW9yaXR5ID0gbGFuZXNUb0V2ZW50UHJpb3JpdHkocGVuZGluZ0VmZmVjdHNMYW5lcyksXG4gICAgICAgIHByaW9yaXR5ID1cbiAgICAgICAgICAwID09PSBEZWZhdWx0RXZlbnRQcmlvcml0eSB8fCBEZWZhdWx0RXZlbnRQcmlvcml0eSA+IHJlbmRlclByaW9yaXR5XG4gICAgICAgICAgICA/IERlZmF1bHRFdmVudFByaW9yaXR5XG4gICAgICAgICAgICA6IHJlbmRlclByaW9yaXR5O1xuICAgICAgcmVuZGVyUHJpb3JpdHkgPSBSZWFjdFNoYXJlZEludGVybmFscy5UO1xuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgdHJ5IHtcbiAgICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByaW9yaXR5O1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgICAgcHJpb3JpdHkgPSBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zO1xuICAgICAgICBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zID0gbnVsbDtcbiAgICAgICAgdmFyIHJvb3QkanNjb21wJDAgPSBwZW5kaW5nRWZmZWN0c1Jvb3QsXG4gICAgICAgICAgbGFuZXMgPSBwZW5kaW5nRWZmZWN0c0xhbmVzO1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IE5PX1BFTkRJTkdfRUZGRUNUUztcbiAgICAgICAgcGVuZGluZ0ZpbmlzaGVkV29yayA9IHBlbmRpbmdFZmZlY3RzUm9vdCA9IG51bGw7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzTGFuZXMgPSAwO1xuICAgICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KVxuICAgICAgICAgIHRocm93IEVycm9yKFwiQ2Fubm90IGZsdXNoIHBhc3NpdmUgZWZmZWN0cyB3aGlsZSBhbHJlYWR5IHJlbmRlcmluZy5cIik7XG4gICAgICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9ICEwO1xuICAgICAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gITE7XG4gICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkICYmXG4gICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkKGxhbmVzKTtcbiAgICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIocm9vdCRqc2NvbXAkMC5jdXJyZW50KTtcbiAgICAgICAgY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlcihcbiAgICAgICAgICByb290JGpzY29tcCQwLFxuICAgICAgICAgIHJvb3QkanNjb21wJDAuY3VycmVudCxcbiAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICBwcmlvcml0eVxuICAgICAgICApO1xuICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RvcHBlZCAmJlxuICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RvcHBlZCgpO1xuICAgICAgICBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdCRqc2NvbXAkMCk7XG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoMCwgITEpO1xuICAgICAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzXG4gICAgICAgICAgPyByb290JGpzY29tcCQwID09PSByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzXG4gICAgICAgICAgICA/IG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCsrXG4gICAgICAgICAgICA6ICgobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMCksXG4gICAgICAgICAgICAgIChyb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gcm9vdCRqc2NvbXAkMCkpXG4gICAgICAgICAgOiAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMCk7XG4gICAgICAgIGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHMgPSBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSAhMTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5vblBvc3RDb21taXRGaWJlclJvb3RcbiAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbmplY3RlZEhvb2sub25Qb3N0Q29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QkanNjb21wJDApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgfHxcbiAgICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIixcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB2YXIgc3RhdGVOb2RlID0gcm9vdCRqc2NvbXAkMC5jdXJyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNQcmlvcml0eSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSByZW5kZXJQcmlvcml0eSksXG4gICAgICAgICAgcmVsZWFzZVJvb3RQb29sZWRDYWNoZShyb290LCByZW1haW5pbmdMYW5lcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gICAgICBzb3VyY2VGaWJlciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gICAgICBzb3VyY2VGaWJlciA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290RmliZXIuc3RhdGVOb2RlLCBzb3VyY2VGaWJlciwgMik7XG4gICAgICByb290RmliZXIgPSBlbnF1ZXVlVXBkYXRlKHJvb3RGaWJlciwgc291cmNlRmliZXIsIDIpO1xuICAgICAgbnVsbCAhPT0gcm9vdEZpYmVyICYmXG4gICAgICAgIChtYXJrUm9vdFVwZGF0ZWQkMShyb290RmliZXIsIDIpLCBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdEZpYmVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgc291cmNlRmliZXIsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgZXJyb3JcbiAgICApIHtcbiAgICAgIGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9ICExO1xuICAgICAgaWYgKDMgPT09IHNvdXJjZUZpYmVyLnRhZylcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qoc291cmNlRmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm9yICg7IG51bGwgIT09IG5lYXJlc3RNb3VudGVkQW5jZXN0b3I7ICkge1xuICAgICAgICAgIGlmICgzID09PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnRhZykge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKDEgPT09IG5lYXJlc3RNb3VudGVkQW5jZXN0b3IudGFnKSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgIHR5cGVvZiBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIHx8XG4gICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCAmJlxuICAgICAgICAgICAgICAgIChudWxsID09PSBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCB8fFxuICAgICAgICAgICAgICAgICAgIWxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSkpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKDIpO1xuICAgICAgICAgICAgICBpbnN0YW5jZSA9IGVucXVldWVVcGRhdGUobmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IsIDIpO1xuICAgICAgICAgICAgICBudWxsICE9PSBpbnN0YW5jZSAmJlxuICAgICAgICAgICAgICAgIChpbml0aWFsaXplQ2xhc3NFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgICAgc291cmNlRmliZXJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIG1hcmtSb290VXBkYXRlZCQxKGluc3RhbmNlLCAyKSxcbiAgICAgICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQoaW5zdGFuY2UpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yID0gbmVhcmVzdE1vdW50ZWRBbmNlc3Rvci5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludGVybmFsIFJlYWN0IGVycm9yOiBBdHRlbXB0ZWQgdG8gY2FwdHVyZSBhIGNvbW1pdCBwaGFzZSBlcnJvciBpbnNpZGUgYSBkZXRhY2hlZCB0cmVlLiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdC4gUG90ZW50aWFsIGNhdXNlcyBpbmNsdWRlIGRlbGV0aW5nIHRoZSBzYW1lIGZpYmVyIG1vcmUgdGhhbiBvbmNlLCBjb21taXR0aW5nIGFuIGFscmVhZHktZmluaXNoZWQgdHJlZSwgb3IgYW4gaW5jb25zaXN0ZW50IHJldHVybiBwb2ludGVyLlxcblxcbkVycm9yIG1lc3NhZ2U6XFxuXFxuJXNcIixcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIGxhbmVzKSB7XG4gICAgICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gICAgICBpZiAobnVsbCA9PT0gcGluZ0NhY2hlKSB7XG4gICAgICAgIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xuICAgICAgICB2YXIgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgICAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICAgICAgfSBlbHNlXG4gICAgICAgICh0aHJlYWRJRHMgPSBwaW5nQ2FjaGUuZ2V0KHdha2VhYmxlKSksXG4gICAgICAgICAgdm9pZCAwID09PSB0aHJlYWRJRHMgJiZcbiAgICAgICAgICAgICgodGhyZWFkSURzID0gbmV3IFNldCgpKSwgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKSk7XG4gICAgICB0aHJlYWRJRHMuaGFzKGxhbmVzKSB8fFxuICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9ICEwKSxcbiAgICAgICAgdGhyZWFkSURzLmFkZChsYW5lcyksXG4gICAgICAgIChwaW5nQ2FjaGUgPSBwaW5nU3VzcGVuZGVkUm9vdC5iaW5kKG51bGwsIHJvb3QsIHdha2VhYmxlLCBsYW5lcykpLFxuICAgICAgICBpc0RldlRvb2xzUHJlc2VudCAmJiByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIGxhbmVzKSxcbiAgICAgICAgd2FrZWFibGUudGhlbihwaW5nQ2FjaGUsIHBpbmdDYWNoZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgICAgIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgICAgIG51bGwgIT09IHBpbmdDYWNoZSAmJiBwaW5nQ2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgICAgIHJvb3QucGluZ2VkTGFuZXMgfD0gcm9vdC5zdXNwZW5kZWRMYW5lcyAmIHBpbmdlZExhbmVzO1xuICAgICAgcm9vdC53YXJtTGFuZXMgJj0gfnBpbmdlZExhbmVzO1xuICAgICAgaXNDb25jdXJyZW50QWN0RW52aXJvbm1lbnQoKSAmJlxuICAgICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQSBzdXNwZW5kZWQgcmVzb3VyY2UgZmluaXNoZWQgbG9hZGluZyBpbnNpZGUgYSB0ZXN0LCBidXQgdGhlIGV2ZW50IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG5XaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCByZXNvbHZlcyBzdXNwZW5kZWQgZGF0YSBzaG91bGQgYmUgd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbmFjdCgoKSA9PiB7XFxuICAvKiBmaW5pc2ggbG9hZGluZyBzdXNwZW5kZWQgZGF0YSAqL1xcbn0pO1xcbi8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBpbiB0aGUgYnJvd3Nlci4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0LmRldi9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3RcIlxuICAgICAgICApO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIHBpbmdlZExhbmVzKSA9PT0gcGluZ2VkTGFuZXMgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgfHxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA2MjkxNDU2MCkgPT09XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgICAgIG5vdyQxKCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpXG4gICAgICAgICAgPyAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpID09PSBOb0NvbnRleHQgJiZcbiAgICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApXG4gICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgfD0gcGluZ2VkTGFuZXMpLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyA9IDApKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSkge1xuICAgICAgMCA9PT0gcmV0cnlMYW5lICYmIChyZXRyeUxhbmUgPSBjbGFpbU5leHRSZXRyeUxhbmUoKSk7XG4gICAgICBib3VuZGFyeUZpYmVyID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG4gICAgICBudWxsICE9PSBib3VuZGFyeUZpYmVyICYmXG4gICAgICAgIChtYXJrUm9vdFVwZGF0ZWQkMShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpLFxuICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQoYm91bmRhcnlGaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXRyeURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIpIHtcbiAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlLFxuICAgICAgICByZXRyeUxhbmUgPSAwO1xuICAgICAgbnVsbCAhPT0gc3VzcGVuc2VTdGF0ZSAmJiAocmV0cnlMYW5lID0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUpO1xuICAgICAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVSZXRyeVdha2VhYmxlKGJvdW5kYXJ5RmliZXIsIHdha2VhYmxlKSB7XG4gICAgICB2YXIgcmV0cnlMYW5lID0gMDtcbiAgICAgIHN3aXRjaCAoYm91bmRhcnlGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICB2YXIgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIG51bGwgIT09IHN1c3BlbnNlU3RhdGUgJiYgKHJldHJ5TGFuZSA9IHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlLl9yZXRyeUNhY2hlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJQaW5nZWQgdW5rbm93biBzdXNwZW5zZSBib3VuZGFyeSB0eXBlLiBUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG51bGwgIT09IHJldHJ5Q2FjaGUgJiYgcmV0cnlDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICAgICAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBbmREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYoXG4gICAgICByb290JGpzY29tcCQwLFxuICAgICAgcGFyZW50RmliZXIsXG4gICAgICBpc0luU3RyaWN0TW9kZVxuICAgICkge1xuICAgICAgaWYgKDAgIT09IChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiA2NzExNzA1NikpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgICAgICAgIHZhciByb290ID0gcm9vdCRqc2NvbXAkMCxcbiAgICAgICAgICAgIGZpYmVyID0gcGFyZW50RmliZXIsXG4gICAgICAgICAgICBpc1N0cmljdE1vZGVGaWJlciA9IGZpYmVyLnR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG4gICAgICAgICAgaXNTdHJpY3RNb2RlRmliZXIgPSBpc0luU3RyaWN0TW9kZSB8fCBpc1N0cmljdE1vZGVGaWJlcjtcbiAgICAgICAgICAyMiAhPT0gZmliZXIudGFnXG4gICAgICAgICAgICA/IGZpYmVyLmZsYWdzICYgNjcxMDg4NjRcbiAgICAgICAgICAgICAgPyBpc1N0cmljdE1vZGVGaWJlciAmJlxuICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICAgICAgICBkb3VibGVJbnZva2VFZmZlY3RzT25GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICAgIChmaWJlci5tb2RlICYgTm9TdHJpY3RQYXNzaXZlRWZmZWN0c01vZGUpID09PSBOb01vZGVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogcmVjdXJzaXZlbHlUcmF2ZXJzZUFuZERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICAgIGlzU3RyaWN0TW9kZUZpYmVyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsID09PSBmaWJlci5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIChpc1N0cmljdE1vZGVGaWJlciAmJiBmaWJlci5mbGFncyAmIDgxOTJcbiAgICAgICAgICAgICAgICA/IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICAgICAgZG91YmxlSW52b2tlRWZmZWN0c09uRmliZXIsXG4gICAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgIGZpYmVyXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBmaWJlci5zdWJ0cmVlRmxhZ3MgJiA2NzEwODg2NCAmJlxuICAgICAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQW5kRG91YmxlSW52b2tlRWZmZWN0c0luREVWLFxuICAgICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICAgICAgaXNTdHJpY3RNb2RlRmliZXJcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkb3VibGVJbnZva2VFZmZlY3RzT25GaWJlcihyb290LCBmaWJlcikge1xuICAgICAgdmFyIHNob3VsZERvdWJsZUludm9rZVBhc3NpdmVFZmZlY3RzID1cbiAgICAgICAgMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiAhMDtcbiAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRpc2FwcGVhckxheW91dEVmZmVjdHMoZmliZXIpLFxuICAgICAgICAgIHNob3VsZERvdWJsZUludm9rZVBhc3NpdmVFZmZlY3RzICYmIGRpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0KGZpYmVyKSxcbiAgICAgICAgICByZWFwcGVhckxheW91dEVmZmVjdHMocm9vdCwgZmliZXIuYWx0ZXJuYXRlLCBmaWJlciwgITEpLFxuICAgICAgICAgIHNob3VsZERvdWJsZUludm9rZVBhc3NpdmVFZmZlY3RzICYmXG4gICAgICAgICAgICByZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhyb290LCBmaWJlciwgMCwgbnVsbCwgITEsIDApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdCkge1xuICAgICAgdmFyIGRvdWJsZUludm9rZUVmZmVjdHMgPSAhMDtcbiAgICAgIHJvb3QuY3VycmVudC5tb2RlICYgKFN0cmljdExlZ2FjeU1vZGUgfCBTdHJpY3RFZmZlY3RzTW9kZSkgfHxcbiAgICAgICAgKGRvdWJsZUludm9rZUVmZmVjdHMgPSAhMSk7XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlQW5kRG91YmxlSW52b2tlRWZmZWN0c0luREVWKFxuICAgICAgICByb290LFxuICAgICAgICByb290LmN1cnJlbnQsXG4gICAgICAgIGRvdWJsZUludm9rZUVmZmVjdHNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIDMgPT09IHRhZyB8fFxuICAgICAgICAgIDEgPT09IHRhZyB8fFxuICAgICAgICAgIDAgPT09IHRhZyB8fFxuICAgICAgICAgIDExID09PSB0YWcgfHxcbiAgICAgICAgICAxNCA9PT0gdGFnIHx8XG4gICAgICAgICAgMTUgPT09IHRhZ1xuICAgICAgICApIHtcbiAgICAgICAgICB0YWcgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlJlYWN0Q29tcG9uZW50XCI7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50Lmhhcyh0YWcpKSByZXR1cm47XG4gICAgICAgICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50LmFkZCh0YWcpO1xuICAgICAgICAgIH0gZWxzZSBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbdGFnXSk7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhIGNvbXBvbmVudCB0aGF0IGhhc24ndCBtb3VudGVkIHlldC4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBhIHNpZGUtZWZmZWN0IGluIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgYXN5bmNocm9ub3VzbHkgbGF0ZXIgY2FsbHMgdHJpZXMgdG8gdXBkYXRlIHRoZSBjb21wb25lbnQuIE1vdmUgdGhpcyB3b3JrIHRvIHVzZUVmZmVjdCBpbnN0ZWFkLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgbGFuZXMpIHtcbiAgICAgIGlzRGV2VG9vbHNQcmVzZW50ICYmXG4gICAgICAgIHJvb3QubWVtb2l6ZWRVcGRhdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsaW5nRmliZXIpIHtcbiAgICAgICAgICBhZGRGaWJlclRvTGFuZXNNYXAocm9vdCwgc2NoZWR1bGluZ0ZpYmVyLCBsYW5lcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrJDEocHJpb3JpdHlMZXZlbCwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBhY3RRdWV1ZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlO1xuICAgICAgcmV0dXJuIG51bGwgIT09IGFjdFF1ZXVlXG4gICAgICAgID8gKGFjdFF1ZXVlLnB1c2goY2FsbGJhY2spLCBmYWtlQWN0Q2FsbGJhY2tOb2RlJDEpXG4gICAgICAgIDogc2NoZWR1bGVDYWxsYmFjayQzKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybklmVXBkYXRlc05vdFdyYXBwZWRXaXRoQWN0REVWKGZpYmVyKSB7XG4gICAgICBpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpICYmXG4gICAgICAgIG51bGwgPT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlICYmXG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKGZpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiQW4gdXBkYXRlIHRvICVzIGluc2lkZSBhIHRlc3Qgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbldoZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSB3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuYWN0KCgpID0+IHtcXG4gIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxufSk7XFxuLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG5UaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIGluIHRoZSBicm93c2VyLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdFwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcilcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpIHtcbiAgICAgIHJvb3QgIT09IGxhc3RTY2hlZHVsZWRSb290ICYmXG4gICAgICAgIG51bGwgPT09IHJvb3QubmV4dCAmJlxuICAgICAgICAobnVsbCA9PT0gbGFzdFNjaGVkdWxlZFJvb3RcbiAgICAgICAgICA/IChmaXJzdFNjaGVkdWxlZFJvb3QgPSBsYXN0U2NoZWR1bGVkUm9vdCA9IHJvb3QpXG4gICAgICAgICAgOiAobGFzdFNjaGVkdWxlZFJvb3QgPSBsYXN0U2NoZWR1bGVkUm9vdC5uZXh0ID0gcm9vdCkpO1xuICAgICAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gITA7XG4gICAgICBudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZVxuICAgICAgICA/IGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCB8fFxuICAgICAgICAgICgoZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0ID0gITApLCBzY2hlZHVsZUltbWVkaWF0ZVJvb3RTY2hlZHVsZVRhc2soKSlcbiAgICAgICAgOiBkaWRTY2hlZHVsZU1pY3JvdGFzayB8fFxuICAgICAgICAgICgoZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPSAhMCksIHNjaGVkdWxlSW1tZWRpYXRlUm9vdFNjaGVkdWxlVGFzaygpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoc3luY1RyYW5zaXRpb25MYW5lcywgb25seUxlZ2FjeSkge1xuICAgICAgaWYgKCFpc0ZsdXNoaW5nV29yayAmJiBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmspIHtcbiAgICAgICAgaXNGbHVzaGluZ1dvcmsgPSAhMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciBkaWRQZXJmb3JtU29tZVdvcmsgPSAhMTtcbiAgICAgICAgICBmb3IgKHZhciByb290ID0gZmlyc3RTY2hlZHVsZWRSb290OyBudWxsICE9PSByb290OyApIHtcbiAgICAgICAgICAgIGlmICghb25seUxlZ2FjeSlcbiAgICAgICAgICAgICAgaWYgKDAgIT09IHN5bmNUcmFuc2l0aW9uTGFuZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IHBlbmRpbmdMYW5lcykgdmFyIG5leHRMYW5lcyA9IDA7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgICBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gICAgICAgICAgICAgICAgICBuZXh0TGFuZXMgPVxuICAgICAgICAgICAgICAgICAgICAoMSA8PCAoMzEgLSBjbHozMig0MiB8IHN5bmNUcmFuc2l0aW9uTGFuZXMpICsgMSkpIC0gMTtcbiAgICAgICAgICAgICAgICAgIG5leHRMYW5lcyAmPSBwZW5kaW5nTGFuZXMgJiB+KHN1c3BlbmRlZExhbmVzICYgfnBpbmdlZExhbmVzKTtcbiAgICAgICAgICAgICAgICAgIG5leHRMYW5lcyA9XG4gICAgICAgICAgICAgICAgICAgIG5leHRMYW5lcyAmIDIwMTMyNjc0MVxuICAgICAgICAgICAgICAgICAgICAgID8gKG5leHRMYW5lcyAmIDIwMTMyNjc0MSkgfCAxXG4gICAgICAgICAgICAgICAgICAgICAgOiBuZXh0TGFuZXNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV4dExhbmVzIHwgMlxuICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAwICE9PSBuZXh0TGFuZXMgJiZcbiAgICAgICAgICAgICAgICAgICgoZGlkUGVyZm9ybVNvbWVXb3JrID0gITApLFxuICAgICAgICAgICAgICAgICAgcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QsIG5leHRMYW5lcykpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAobmV4dExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICAgKG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gbmV4dExhbmVzIDogMCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlICE9PSBub1RpbWVvdXRcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgMCA9PT0gKG5leHRMYW5lcyAmIDMpIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgbmV4dExhbmVzKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGRpZFBlcmZvcm1Tb21lV29yayA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QsIG5leHRMYW5lcykpO1xuICAgICAgICAgICAgcm9vdCA9IHJvb3QubmV4dDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGRpZFBlcmZvcm1Tb21lV29yayk7XG4gICAgICAgIGlzRmx1c2hpbmdXb3JrID0gITE7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSb290U2NoZWR1bGVJbkltbWVkaWF0ZVRhc2soKSB7XG4gICAgICBwcm9jZXNzUm9vdFNjaGVkdWxlSW5NaWNyb3Rhc2soKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKCkge1xuICAgICAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID1cbiAgICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0ID1cbiAgICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPVxuICAgICAgICAgICExO1xuICAgICAgdmFyIHN5bmNUcmFuc2l0aW9uTGFuZXMgPSAwO1xuICAgICAgMCAhPT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgJiZcbiAgICAgICAgKHNob3VsZEF0dGVtcHRFYWdlclRyYW5zaXRpb24oKSAmJlxuICAgICAgICAgIChzeW5jVHJhbnNpdGlvbkxhbmVzID0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUpLFxuICAgICAgICAoY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPSAwKSk7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBub3ckMSgpLCBwcmV2ID0gbnVsbCwgcm9vdCA9IGZpcnN0U2NoZWR1bGVkUm9vdDtcbiAgICAgICAgbnVsbCAhPT0gcm9vdDtcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBuZXh0ID0gcm9vdC5uZXh0LFxuICAgICAgICAgIG5leHRMYW5lcyA9IHNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2socm9vdCwgY3VycmVudFRpbWUpO1xuICAgICAgICBpZiAoMCA9PT0gbmV4dExhbmVzKVxuICAgICAgICAgIChyb290Lm5leHQgPSBudWxsKSxcbiAgICAgICAgICAgIG51bGwgPT09IHByZXYgPyAoZmlyc3RTY2hlZHVsZWRSb290ID0gbmV4dCkgOiAocHJldi5uZXh0ID0gbmV4dCksXG4gICAgICAgICAgICBudWxsID09PSBuZXh0ICYmIChsYXN0U2NoZWR1bGVkUm9vdCA9IHByZXYpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoKHByZXYgPSByb290KSwgMCAhPT0gc3luY1RyYW5zaXRpb25MYW5lcyB8fCAwICE9PSAobmV4dExhbmVzICYgMykpXG4gICAgICAgIClcbiAgICAgICAgICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSAhMDtcbiAgICAgICAgcm9vdCA9IG5leHQ7XG4gICAgICB9XG4gICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbChzeW5jVHJhbnNpdGlvbkxhbmVzLCAhMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2socm9vdCwgY3VycmVudFRpbWUpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXMsXG4gICAgICAgICAgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzLFxuICAgICAgICAgIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzLFxuICAgICAgICAgIGxhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXMgJiAtNjI5MTQ1NjE7XG4gICAgICAgIDAgPCBsYW5lcztcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIobGFuZXMpLFxuICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4LFxuICAgICAgICAgIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcbiAgICAgICAgaWYgKC0xID09PSBleHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgIGlmICgwID09PSAobGFuZSAmIHN1c3BlbmRlZExhbmVzKSB8fCAwICE9PSAobGFuZSAmIHBpbmdlZExhbmVzKSlcbiAgICAgICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpO1xuICAgICAgICB9IGVsc2UgZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWUgJiYgKHJvb3QuZXhwaXJlZExhbmVzIHw9IGxhbmUpO1xuICAgICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRUaW1lID0gd29ya0luUHJvZ3Jlc3NSb290O1xuICAgICAgc3VzcGVuZGVkTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgICAgIHN1c3BlbmRlZExhbmVzID0gZ2V0TmV4dExhbmVzKFxuICAgICAgICByb290LFxuICAgICAgICByb290ID09PSBjdXJyZW50VGltZSA/IHN1c3BlbmRlZExhbmVzIDogMCxcbiAgICAgICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0IHx8IHJvb3QudGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0XG4gICAgICApO1xuICAgICAgcGluZ2VkTGFuZXMgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgICAgIGlmIChcbiAgICAgICAgMCA9PT0gc3VzcGVuZGVkTGFuZXMgfHxcbiAgICAgICAgKHJvb3QgPT09IGN1cnJlbnRUaW1lICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGEgfHxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkFjdGlvbikpIHx8XG4gICAgICAgIG51bGwgIT09IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdFxuICAgICAgKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG51bGwgIT09IHBpbmdlZExhbmVzICYmIGNhbmNlbENhbGxiYWNrKHBpbmdlZExhbmVzKSxcbiAgICAgICAgICAocm9vdC5jYWxsYmFja05vZGUgPSBudWxsKSxcbiAgICAgICAgICAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgMCA9PT0gKHN1c3BlbmRlZExhbmVzICYgMykgfHxcbiAgICAgICAgY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCBzdXNwZW5kZWRMYW5lcylcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50VGltZSA9IHN1c3BlbmRlZExhbmVzICYgLXN1c3BlbmRlZExhbmVzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudFRpbWUgIT09IHJvb3QuY2FsbGJhY2tQcmlvcml0eSB8fFxuICAgICAgICAgIChudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSAmJlxuICAgICAgICAgICAgcGluZ2VkTGFuZXMgIT09IGZha2VBY3RDYWxsYmFja05vZGUpXG4gICAgICAgIClcbiAgICAgICAgICBjYW5jZWxDYWxsYmFjayhwaW5nZWRMYW5lcyk7XG4gICAgICAgIGVsc2UgcmV0dXJuIGN1cnJlbnRUaW1lO1xuICAgICAgICBzd2l0Y2ggKGxhbmVzVG9FdmVudFByaW9yaXR5KHN1c3BlbmRlZExhbmVzKSkge1xuICAgICAgICAgIGNhc2UgRGlzY3JldGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBEZWZhdWx0RXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgIHN1c3BlbmRlZExhbmVzID0gTm9ybWFsUHJpb3JpdHkkMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgSWRsZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IElkbGVQcmlvcml0eTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgIH1cbiAgICAgICAgcGluZ2VkTGFuZXMgPSBwZXJmb3JtV29ya09uUm9vdFZpYVNjaGVkdWxlclRhc2suYmluZChudWxsLCByb290KTtcbiAgICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWVcbiAgICAgICAgICA/IChSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZS5wdXNoKHBpbmdlZExhbmVzKSxcbiAgICAgICAgICAgIChzdXNwZW5kZWRMYW5lcyA9IGZha2VBY3RDYWxsYmFja05vZGUpKVxuICAgICAgICAgIDogKHN1c3BlbmRlZExhbmVzID0gc2NoZWR1bGVDYWxsYmFjayQzKHN1c3BlbmRlZExhbmVzLCBwaW5nZWRMYW5lcykpO1xuICAgICAgICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBjdXJyZW50VGltZTtcbiAgICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBzdXNwZW5kZWRMYW5lcztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiYgY2FuY2VsQ2FsbGJhY2socGluZ2VkTGFuZXMpO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMjtcbiAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZXJmb3JtV29ya09uUm9vdFZpYVNjaGVkdWxlclRhc2socm9vdCwgZGlkVGltZW91dCkge1xuICAgICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gY3VycmVudFVwZGF0ZUlzTmVzdGVkID0gITE7XG4gICAgICBpZiAoXG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzICE9PSBOT19QRU5ESU5HX0VGRkVDVFMgJiZcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgIT09IFBFTkRJTkdfUEFTU0lWRV9QSEFTRVxuICAgICAgKVxuICAgICAgICByZXR1cm4gKHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbCksIChyb290LmNhbGxiYWNrUHJpb3JpdHkgPSAwKSwgbnVsbDtcbiAgICAgIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICAgICAgaWYgKGZsdXNoUGVuZGluZ0VmZmVjdHMoITApICYmIHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkanNjb21wJDAgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwID0gZ2V0TmV4dExhbmVzKFxuICAgICAgICByb290LFxuICAgICAgICByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RcbiAgICAgICAgICA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwXG4gICAgICAgICAgOiAwLFxuICAgICAgICBudWxsICE9PSByb290LmNhbmNlbFBlbmRpbmdDb21taXQgfHwgcm9vdC50aW1lb3V0SGFuZGxlICE9PSBub1RpbWVvdXRcbiAgICAgICk7XG4gICAgICBpZiAoMCA9PT0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkanNjb21wJDApIHJldHVybiBudWxsO1xuICAgICAgcGVyZm9ybVdvcmtPblJvb3QoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwLFxuICAgICAgICBkaWRUaW1lb3V0XG4gICAgICApO1xuICAgICAgc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBub3ckMSgpKTtcbiAgICAgIHJldHVybiBudWxsICE9IHJvb3QuY2FsbGJhY2tOb2RlICYmXG4gICAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID09PSBvcmlnaW5hbENhbGxiYWNrTm9kZVxuICAgICAgICA/IHBlcmZvcm1Xb3JrT25Sb290VmlhU2NoZWR1bGVyVGFzay5iaW5kKG51bGwsIHJvb3QpXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QsIGxhbmVzKSB7XG4gICAgICBpZiAoZmx1c2hQZW5kaW5nRWZmZWN0cygpKSByZXR1cm4gbnVsbDtcbiAgICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9IG5lc3RlZFVwZGF0ZVNjaGVkdWxlZDtcbiAgICAgIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9ICExO1xuICAgICAgcGVyZm9ybVdvcmtPblJvb3Qocm9vdCwgbGFuZXMsICEwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gICAgICBjYWxsYmFja05vZGUgIT09IGZha2VBY3RDYWxsYmFja05vZGUgJiZcbiAgICAgICAgbnVsbCAhPT0gY2FsbGJhY2tOb2RlICYmXG4gICAgICAgIGNhbmNlbENhbGxiYWNrJDEoY2FsbGJhY2tOb2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVJbW1lZGlhdGVSb290U2NoZWR1bGVUYXNrKCkge1xuICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgJiZcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHRcbiAgICAgICAgICA/IHNjaGVkdWxlQ2FsbGJhY2skMyhcbiAgICAgICAgICAgICAgSW1tZWRpYXRlUHJpb3JpdHksXG4gICAgICAgICAgICAgIHByb2Nlc3NSb290U2NoZWR1bGVJbkltbWVkaWF0ZVRhc2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzaygpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpIHtcbiAgICAgIDAgPT09IGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lICYmXG4gICAgICAgIChjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKCkpO1xuICAgICAgcmV0dXJuIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2VyY2VGb3JtQWN0aW9uUHJvcChhY3Rpb25Qcm9wKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgPT0gYWN0aW9uUHJvcCB8fFxuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgYWN0aW9uUHJvcCB8fFxuICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIGFjdGlvblByb3BcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uUHJvcCkgcmV0dXJuIGFjdGlvblByb3A7XG4gICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKGFjdGlvblByb3AsIFwiYWN0aW9uXCIpO1xuICAgICAgcmV0dXJuIHNhbml0aXplVVJMKFwiXCIgKyBhY3Rpb25Qcm9wKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyKGZvcm0sIHN1Ym1pdHRlcikge1xuICAgICAgdmFyIHRlbXAgPSBzdWJtaXR0ZXIub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICB0ZW1wLm5hbWUgPSBzdWJtaXR0ZXIubmFtZTtcbiAgICAgIHRlbXAudmFsdWUgPSBzdWJtaXR0ZXIudmFsdWU7XG4gICAgICBmb3JtLmlkICYmIHRlbXAuc2V0QXR0cmlidXRlKFwiZm9ybVwiLCBmb3JtLmlkKTtcbiAgICAgIHN1Ym1pdHRlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZW1wLCBzdWJtaXR0ZXIpO1xuICAgICAgZm9ybSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICAgIHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZW1wKTtcbiAgICAgIHJldHVybiBmb3JtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBleHRyYWN0RXZlbnRzJDEoXG4gICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgbWF5YmVUYXJnZXRJbnN0LFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBcInN1Ym1pdFwiID09PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgbWF5YmVUYXJnZXRJbnN0ICYmXG4gICAgICAgIG1heWJlVGFyZ2V0SW5zdC5zdGF0ZU5vZGUgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICApIHtcbiAgICAgICAgdmFyIGFjdGlvbiA9IGNvZXJjZUZvcm1BY3Rpb25Qcm9wKFxuICAgICAgICAgICAgKG5hdGl2ZUV2ZW50VGFyZ2V0W2ludGVybmFsUHJvcHNLZXldIHx8IG51bGwpLmFjdGlvblxuICAgICAgICAgICksXG4gICAgICAgICAgc3VibWl0dGVyID0gbmF0aXZlRXZlbnQuc3VibWl0dGVyO1xuICAgICAgICBzdWJtaXR0ZXIgJiZcbiAgICAgICAgICAoKGRvbUV2ZW50TmFtZSA9IChkb21FdmVudE5hbWUgPSBzdWJtaXR0ZXJbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbClcbiAgICAgICAgICAgID8gY29lcmNlRm9ybUFjdGlvblByb3AoZG9tRXZlbnROYW1lLmZvcm1BY3Rpb24pXG4gICAgICAgICAgICA6IHN1Ym1pdHRlci5nZXRBdHRyaWJ1dGUoXCJmb3JtQWN0aW9uXCIpKSxcbiAgICAgICAgICBudWxsICE9PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICAgICgoYWN0aW9uID0gZG9tRXZlbnROYW1lKSwgKHN1Ym1pdHRlciA9IG51bGwpKSk7XG4gICAgICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudChcbiAgICAgICAgICBcImFjdGlvblwiLFxuICAgICAgICAgIFwiYWN0aW9uXCIsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICApO1xuICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICBsaXN0ZW5lcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICAgIGxpc3RlbmVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgwICE9PSBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybURhdGEgPSBzdWJtaXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBGb3JtRGF0YShuYXRpdmVFdmVudFRhcmdldCksXG4gICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZzogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogbmF0aXZlRXZlbnRUYXJnZXQubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKHBlbmRpbmdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SG9zdFRyYW5zaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgbWF5YmVUYXJnZXRJbnN0LFxuICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnByZXZlbnREZWZhdWx0KCksXG4gICAgICAgICAgICAgICAgICAgIChmb3JtRGF0YSA9IHN1Ym1pdHRlclxuICAgICAgICAgICAgICAgICAgICAgID8gY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0dGVyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBuZXcgRm9ybURhdGEobmF0aXZlRXZlbnRUYXJnZXQpKSxcbiAgICAgICAgICAgICAgICAgICAgKHBlbmRpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG5hdGl2ZUV2ZW50VGFyZ2V0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZShwZW5kaW5nU3RhdGUpLFxuICAgICAgICAgICAgICAgICAgICBzdGFydEhvc3RUcmFuc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIG1heWJlVGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgPSAwICE9PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaFF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBfZGlzcGF0Y2hRdWV1ZSRpID0gZGlzcGF0Y2hRdWV1ZVtpXTtcbiAgICAgICAgYToge1xuICAgICAgICAgIHZhciBwcmV2aW91c0luc3RhbmNlID0gdm9pZCAwLFxuICAgICAgICAgICAgZXZlbnQgPSBfZGlzcGF0Y2hRdWV1ZSRpLmV2ZW50O1xuICAgICAgICAgIF9kaXNwYXRjaFF1ZXVlJGkgPSBfZGlzcGF0Y2hRdWV1ZSRpLmxpc3RlbmVycztcbiAgICAgICAgICBpZiAoZXZlbnRTeXN0ZW1GbGFncylcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIHZhciBpJGpzY29tcCQwID0gX2Rpc3BhdGNoUXVldWUkaS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAwIDw9IGkkanNjb21wJDA7XG4gICAgICAgICAgICAgIGkkanNjb21wJDAtLVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkaSA9IF9kaXNwYXRjaFF1ZXVlJGlbaSRqc2NvbXAkMF0sXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpXG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5zdGFuY2VcbiAgICAgICAgICAgICAgICA/IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZURpc3BhdGNoLFxuICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGksXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGV4ZWN1dGVEaXNwYXRjaChldmVudCwgX2Rpc3BhdGNoTGlzdGVuZXJzJGksIGN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgaSRqc2NvbXAkMCA9IDA7XG4gICAgICAgICAgICAgIGkkanNjb21wJDAgPCBfZGlzcGF0Y2hRdWV1ZSRpLmxlbmd0aDtcbiAgICAgICAgICAgICAgaSRqc2NvbXAkMCsrXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hRdWV1ZSRpW2kkanNjb21wJDBdO1xuICAgICAgICAgICAgICBpbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmluc3RhbmNlO1xuICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpXG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5zdGFuY2VcbiAgICAgICAgICAgICAgICA/IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZURpc3BhdGNoLFxuICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGksXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGV4ZWN1dGVEaXNwYXRjaChldmVudCwgX2Rpc3BhdGNoTGlzdGVuZXJzJGksIGN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgIG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdEaWQgbm90IGV4cGVjdCBhIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoKSBjYWxsIGZvciBcIiVzXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicsXG4gICAgICAgICAgZG9tRXZlbnROYW1lXG4gICAgICAgICk7XG4gICAgICB2YXIgbGlzdGVuZXJTZXQgPSB0YXJnZXRFbGVtZW50W2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG4gICAgICB2b2lkIDAgPT09IGxpc3RlbmVyU2V0ICYmXG4gICAgICAgIChsaXN0ZW5lclNldCA9IHRhcmdldEVsZW1lbnRbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XSA9IG5ldyBTZXQoKSk7XG4gICAgICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBkb21FdmVudE5hbWUgKyBcIl9fYnViYmxlXCI7XG4gICAgICBsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpIHx8XG4gICAgICAgIChhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRFbGVtZW50LCBkb21FdmVudE5hbWUsIDIsICExKSxcbiAgICAgICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCB0YXJnZXQpIHtcbiAgICAgIG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSAmJlxuICAgICAgICAhaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdEaWQgbm90IGV4cGVjdCBhIGxpc3RlblRvTmF0aXZlRXZlbnQoKSBjYWxsIGZvciBcIiVzXCIgaW4gdGhlIGJ1YmJsZSBwaGFzZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyxcbiAgICAgICAgICBkb21FdmVudE5hbWVcbiAgICAgICAgKTtcbiAgICAgIHZhciBldmVudFN5c3RlbUZsYWdzID0gMDtcbiAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgfD0gNCk7XG4gICAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gICAgICBpZiAoIXJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0pIHtcbiAgICAgICAgcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9ICEwO1xuICAgICAgICBhbGxOYXRpdmVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgICAgXCJzZWxlY3Rpb25jaGFuZ2VcIiAhPT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgICAobm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpIHx8XG4gICAgICAgICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCAhMSwgcm9vdENvbnRhaW5lckVsZW1lbnQpLFxuICAgICAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsICEwLCByb290Q29udGFpbmVyRWxlbWVudCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPVxuICAgICAgICAgIDkgPT09IHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlXG4gICAgICAgICAgICA/IHJvb3RDb250YWluZXJFbGVtZW50XG4gICAgICAgICAgICA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgIG51bGwgPT09IG93bmVyRG9jdW1lbnQgfHxcbiAgICAgICAgICBvd25lckRvY3VtZW50W2xpc3RlbmluZ01hcmtlcl0gfHxcbiAgICAgICAgICAoKG93bmVyRG9jdW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9ICEwKSxcbiAgICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KFwic2VsZWN0aW9uY2hhbmdlXCIsICExLCBvd25lckRvY3VtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKFxuICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoZ2V0RXZlbnRQcmlvcml0eShkb21FdmVudE5hbWUpKSB7XG4gICAgICAgIGNhc2UgRGlzY3JldGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgIHZhciBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hDb250aW51b3VzRXZlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hFdmVudDtcbiAgICAgIH1cbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgPSBsaXN0ZW5lcldyYXBwZXIuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICB0YXJnZXRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSB2b2lkIDA7XG4gICAgICAhcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgfHxcbiAgICAgICAgKFwidG91Y2hzdGFydFwiICE9PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICBcInRvdWNobW92ZVwiICE9PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICBcIndoZWVsXCIgIT09IGRvbUV2ZW50TmFtZSkgfHxcbiAgICAgICAgKGxpc3RlbmVyV3JhcHBlciA9ICEwKTtcbiAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbiAgICAgICAgPyB2b2lkIDAgIT09IGxpc3RlbmVyV3JhcHBlclxuICAgICAgICAgID8gdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB7XG4gICAgICAgICAgICAgIGNhcHR1cmU6ICEwLFxuICAgICAgICAgICAgICBwYXNzaXZlOiBsaXN0ZW5lcldyYXBwZXJcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB0YXJnZXRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsICEwKVxuICAgICAgICA6IHZvaWQgMCAhPT0gbGlzdGVuZXJXcmFwcGVyXG4gICAgICAgICAgPyB0YXJnZXRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHtcbiAgICAgICAgICAgICAgcGFzc2l2ZTogbGlzdGVuZXJXcmFwcGVyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIHRhcmdldEluc3QkanNjb21wJDAsXG4gICAgICB0YXJnZXRDb250YWluZXJcbiAgICApIHtcbiAgICAgIHZhciBhbmNlc3Rvckluc3QgPSB0YXJnZXRJbnN0JGpzY29tcCQwO1xuICAgICAgaWYgKFxuICAgICAgICAwID09PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDEpICYmXG4gICAgICAgIDAgPT09IChldmVudFN5c3RlbUZsYWdzICYgMikgJiZcbiAgICAgICAgbnVsbCAhPT0gdGFyZ2V0SW5zdCRqc2NvbXAkMFxuICAgICAgKVxuICAgICAgICBhOiBmb3IgKDs7KSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHRhcmdldEluc3QkanNjb21wJDApIHJldHVybjtcbiAgICAgICAgICB2YXIgbm9kZVRhZyA9IHRhcmdldEluc3QkanNjb21wJDAudGFnO1xuICAgICAgICAgIGlmICgzID09PSBub2RlVGFnIHx8IDQgPT09IG5vZGVUYWcpIHtcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0YXJnZXRJbnN0JGpzY29tcCQwLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gdGFyZ2V0Q29udGFpbmVyKSBicmVhaztcbiAgICAgICAgICAgIGlmICg0ID09PSBub2RlVGFnKVxuICAgICAgICAgICAgICBmb3IgKG5vZGVUYWcgPSB0YXJnZXRJbnN0JGpzY29tcCQwLnJldHVybjsgbnVsbCAhPT0gbm9kZVRhZzsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdyYW5kVGFnID0gbm9kZVRhZy50YWc7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKDMgPT09IGdyYW5kVGFnIHx8IDQgPT09IGdyYW5kVGFnKSAmJlxuICAgICAgICAgICAgICAgICAgbm9kZVRhZy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA9PT0gdGFyZ2V0Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIG5vZGVUYWcgPSBub2RlVGFnLnJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICg7IG51bGwgIT09IGNvbnRhaW5lcjsgKSB7XG4gICAgICAgICAgICAgIG5vZGVUYWcgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShjb250YWluZXIpO1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gbm9kZVRhZykgcmV0dXJuO1xuICAgICAgICAgICAgICBncmFuZFRhZyA9IG5vZGVUYWcudGFnO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgNSA9PT0gZ3JhbmRUYWcgfHxcbiAgICAgICAgICAgICAgICA2ID09PSBncmFuZFRhZyB8fFxuICAgICAgICAgICAgICAgIDI2ID09PSBncmFuZFRhZyB8fFxuICAgICAgICAgICAgICAgIDI3ID09PSBncmFuZFRhZ1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRJbnN0JGpzY29tcCQwID0gYW5jZXN0b3JJbnN0ID0gbm9kZVRhZztcbiAgICAgICAgICAgICAgICBjb250aW51ZSBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0YXJnZXRJbnN0JGpzY29tcCQwID0gdGFyZ2V0SW5zdCRqc2NvbXAkMC5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgIGJhdGNoZWRVcGRhdGVzJDEoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdGFyZ2V0SW5zdCA9IGFuY2VzdG9ySW5zdCxcbiAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSxcbiAgICAgICAgICBkaXNwYXRjaFF1ZXVlID0gW107XG4gICAgICAgIGE6IHtcbiAgICAgICAgICB2YXIgcmVhY3ROYW1lID0gdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuZ2V0KGRvbUV2ZW50TmFtZSk7XG4gICAgICAgICAgaWYgKHZvaWQgMCAhPT0gcmVhY3ROYW1lKSB7XG4gICAgICAgICAgICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRXZlbnQsXG4gICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlID0gZG9tRXZlbnROYW1lO1xuICAgICAgICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcImtleXByZXNzXCI6XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpKSBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFwia2V5ZG93blwiOlxuICAgICAgICAgICAgICBjYXNlIFwia2V5dXBcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlID0gXCJmb2N1c1wiO1xuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlID0gXCJibHVyXCI7XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImJlZm9yZWJsdXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImFmdGVyYmx1clwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJjbGlja1wiOlxuICAgICAgICAgICAgICAgIGlmICgyID09PSBuYXRpdmVFdmVudC5idXR0b24pIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgXCJhdXhjbGlja1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiZGJsY2xpY2tcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm1vdXNlZG93blwiOlxuICAgICAgICAgICAgICBjYXNlIFwibW91c2Vtb3ZlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJtb3VzZXVwXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJtb3VzZW91dFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJjb250ZXh0bWVudVwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnZW5kXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnZW50ZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRyYWdleGl0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnbGVhdmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRyYWdvdmVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnc3RhcnRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRyb3BcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ0b3VjaGNhbmNlbFwiOlxuICAgICAgICAgICAgICBjYXNlIFwidG91Y2hlbmRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInRvdWNobW92ZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwidG91Y2hzdGFydFwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQU5JTUFUSU9OX0VORDpcbiAgICAgICAgICAgICAgY2FzZSBBTklNQVRJT05fSVRFUkFUSU9OOlxuICAgICAgICAgICAgICBjYXNlIEFOSU1BVElPTl9TVEFSVDpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBUUkFOU0lUSU9OX0VORDpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJzY3JvbGxcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNjcm9sbGVuZFwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ3aGVlbFwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJjb3B5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJjdXRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBhc3RlXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwibG9zdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVyY2FuY2VsXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVyZG93blwiOlxuICAgICAgICAgICAgICBjYXNlIFwicG9pbnRlcm1vdmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBvaW50ZXJvdXRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVydXBcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ0b2dnbGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImJlZm9yZXRvZ2dsZVwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RvZ2dsZUV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluQ2FwdHVyZVBoYXNlID0gMCAhPT0gKGV2ZW50U3lzdGVtRmxhZ3MgJiA0KSxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZVRhcmdldE9ubHkgPVxuICAgICAgICAgICAgICAgICFpbkNhcHR1cmVQaGFzZSAmJlxuICAgICAgICAgICAgICAgIChcInNjcm9sbFwiID09PSBkb21FdmVudE5hbWUgfHwgXCJzY3JvbGxlbmRcIiA9PT0gZG9tRXZlbnROYW1lKSxcbiAgICAgICAgICAgICAgcmVhY3RFdmVudE5hbWUgPSBpbkNhcHR1cmVQaGFzZVxuICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gcmVhY3ROYW1lXG4gICAgICAgICAgICAgICAgICA/IHJlYWN0TmFtZSArIFwiQ2FwdHVyZVwiXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICA6IHJlYWN0TmFtZTtcbiAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gW107XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRJbnN0LCBsYXN0SG9zdENvbXBvbmVudDtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5zdGFuY2U7XG5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgX2luc3RhbmNlMiA9IGluc3RhbmNlO1xuICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudCA9IF9pbnN0YW5jZTIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBfaW5zdGFuY2UyID0gX2luc3RhbmNlMi50YWc7XG4gICAgICAgICAgICAgICg1ICE9PSBfaW5zdGFuY2UyICYmIDI2ICE9PSBfaW5zdGFuY2UyICYmIDI3ICE9PSBfaW5zdGFuY2UyKSB8fFxuICAgICAgICAgICAgICAgIG51bGwgPT09IGxhc3RIb3N0Q29tcG9uZW50IHx8XG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gcmVhY3RFdmVudE5hbWUgfHxcbiAgICAgICAgICAgICAgICAoKF9pbnN0YW5jZTIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3RFdmVudE5hbWUpKSxcbiAgICAgICAgICAgICAgICBudWxsICE9IF9pbnN0YW5jZTIgJiZcbiAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlMixcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgaWYgKGFjY3VtdWxhdGVUYXJnZXRPbmx5KSBicmVhaztcbiAgICAgICAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAwIDwgaW5DYXB0dXJlUGhhc2UubGVuZ3RoICYmXG4gICAgICAgICAgICAgICgocmVhY3ROYW1lID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihcbiAgICAgICAgICAgICAgICByZWFjdE5hbWUsXG4gICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBldmVudDogcmVhY3ROYW1lLFxuICAgICAgICAgICAgICAgIGxpc3RlbmVyczogaW5DYXB0dXJlUGhhc2VcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoMCA9PT0gKGV2ZW50U3lzdGVtRmxhZ3MgJiA3KSkge1xuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIHJlYWN0TmFtZSA9XG4gICAgICAgICAgICAgIFwibW91c2VvdmVyXCIgPT09IGRvbUV2ZW50TmFtZSB8fCBcInBvaW50ZXJvdmVyXCIgPT09IGRvbUV2ZW50TmFtZTtcbiAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9XG4gICAgICAgICAgICAgIFwibW91c2VvdXRcIiA9PT0gZG9tRXZlbnROYW1lIHx8IFwicG9pbnRlcm91dFwiID09PSBkb21FdmVudE5hbWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHJlYWN0TmFtZSAmJlxuICAgICAgICAgICAgICBuYXRpdmVFdmVudCAhPT0gY3VycmVudFJlcGxheWluZ0V2ZW50ICYmXG4gICAgICAgICAgICAgIChyZWFjdEV2ZW50VHlwZSA9XG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudCkgJiZcbiAgICAgICAgICAgICAgKGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlYWN0RXZlbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgaWYgKFN5bnRoZXRpY0V2ZW50Q3RvciB8fCByZWFjdE5hbWUpIHtcbiAgICAgICAgICAgICAgcmVhY3ROYW1lID1cbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICA/IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICA6IChyZWFjdE5hbWUgPSBuYXRpdmVFdmVudFRhcmdldC5vd25lckRvY3VtZW50KVxuICAgICAgICAgICAgICAgICAgICA/IHJlYWN0TmFtZS5kZWZhdWx0VmlldyB8fCByZWFjdE5hbWUucGFyZW50V2luZG93XG4gICAgICAgICAgICAgICAgICAgIDogd2luZG93O1xuICAgICAgICAgICAgICBpZiAoU3ludGhldGljRXZlbnRDdG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKChyZWFjdEV2ZW50VHlwZSA9XG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50KSxcbiAgICAgICAgICAgICAgICAgIChTeW50aGV0aWNFdmVudEN0b3IgPSB0YXJnZXRJbnN0KSxcbiAgICAgICAgICAgICAgICAgIChyZWFjdEV2ZW50VHlwZSA9IHJlYWN0RXZlbnRUeXBlXG4gICAgICAgICAgICAgICAgICAgID8gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVhY3RFdmVudFR5cGUpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCksXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSByZWFjdEV2ZW50VHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAoKGFjY3VtdWxhdGVUYXJnZXRPbmx5ID1cbiAgICAgICAgICAgICAgICAgICAgICBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHJlYWN0RXZlbnRUeXBlKSksXG4gICAgICAgICAgICAgICAgICAgIChpbkNhcHR1cmVQaGFzZSA9IHJlYWN0RXZlbnRUeXBlLnRhZyksXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlICE9PSBhY2N1bXVsYXRlVGFyZ2V0T25seSB8fFxuICAgICAgICAgICAgICAgICAgICAgICg1ICE9PSBpbkNhcHR1cmVQaGFzZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgMjcgIT09IGluQ2FwdHVyZVBoYXNlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA2ICE9PSBpbkNhcHR1cmVQaGFzZSkpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIChTeW50aGV0aWNFdmVudEN0b3IgPSBudWxsKSwgKHJlYWN0RXZlbnRUeXBlID0gdGFyZ2V0SW5zdCk7XG4gICAgICAgICAgICAgIGlmIChTeW50aGV0aWNFdmVudEN0b3IgIT09IHJlYWN0RXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIgPSBcIm9uTW91c2VMZWF2ZVwiO1xuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnROYW1lID0gXCJvbk1vdXNlRW50ZXJcIjtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IFwibW91c2VcIjtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBcInBvaW50ZXJvdXRcIiA9PT0gZG9tRXZlbnROYW1lIHx8XG4gICAgICAgICAgICAgICAgICBcInBvaW50ZXJvdmVyXCIgPT09IGRvbUV2ZW50TmFtZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIChpbkNhcHR1cmVQaGFzZSA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudCksXG4gICAgICAgICAgICAgICAgICAgIChfaW5zdGFuY2UyID0gXCJvblBvaW50ZXJMZWF2ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgKHJlYWN0RXZlbnROYW1lID0gXCJvblBvaW50ZXJFbnRlclwiKSxcbiAgICAgICAgICAgICAgICAgICAgKGluc3RhbmNlID0gXCJwb2ludGVyXCIpO1xuICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID1cbiAgICAgICAgICAgICAgICAgIG51bGwgPT0gU3ludGhldGljRXZlbnRDdG9yXG4gICAgICAgICAgICAgICAgICAgID8gcmVhY3ROYW1lXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0Tm9kZUZyb21JbnN0YW5jZShTeW50aGV0aWNFdmVudEN0b3IpO1xuICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID1cbiAgICAgICAgICAgICAgICAgIG51bGwgPT0gcmVhY3RFdmVudFR5cGVcbiAgICAgICAgICAgICAgICAgICAgPyByZWFjdE5hbWVcbiAgICAgICAgICAgICAgICAgICAgOiBnZXROb2RlRnJvbUluc3RhbmNlKHJlYWN0RXZlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICByZWFjdE5hbWUgPSBuZXcgaW5DYXB0dXJlUGhhc2UoXG4gICAgICAgICAgICAgICAgICBfaW5zdGFuY2UyLFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgKyBcImxlYXZlXCIsXG4gICAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IsXG4gICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZWFjdE5hbWUudGFyZ2V0ID0gYWNjdW11bGF0ZVRhcmdldE9ubHk7XG4gICAgICAgICAgICAgICAgcmVhY3ROYW1lLnJlbGF0ZWRUYXJnZXQgPSBsYXN0SG9zdENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCkgPT09IHRhcmdldEluc3QgJiZcbiAgICAgICAgICAgICAgICAgICgoaW5DYXB0dXJlUGhhc2UgPSBuZXcgaW5DYXB0dXJlUGhhc2UoXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSArIFwiZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAoaW5DYXB0dXJlUGhhc2UudGFyZ2V0ID0gbGFzdEhvc3RDb21wb25lbnQpLFxuICAgICAgICAgICAgICAgICAgKGluQ2FwdHVyZVBoYXNlLnJlbGF0ZWRUYXJnZXQgPSBhY2N1bXVsYXRlVGFyZ2V0T25seSksXG4gICAgICAgICAgICAgICAgICAoX2luc3RhbmNlMiA9IGluQ2FwdHVyZVBoYXNlKSk7XG4gICAgICAgICAgICAgICAgYWNjdW11bGF0ZVRhcmdldE9ubHkgPSBfaW5zdGFuY2UyO1xuICAgICAgICAgICAgICAgIGlmIChTeW50aGV0aWNFdmVudEN0b3IgJiYgcmVhY3RFdmVudFR5cGUpXG4gICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gU3ludGhldGljRXZlbnRDdG9yO1xuICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSA9IHJlYWN0RXZlbnRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBpbkNhcHR1cmVQaGFzZTtcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudCA9IGdldFBhcmVudChsYXN0SG9zdENvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlKys7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UyID0gcmVhY3RFdmVudE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlMjtcbiAgICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UyID0gZ2V0UGFyZW50KF9pbnN0YW5jZTIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudCsrO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgMCA8IGluc3RhbmNlIC0gbGFzdEhvc3RDb21wb25lbnQ7IClcbiAgICAgICAgICAgICAgICAgICAgICAoaW5DYXB0dXJlUGhhc2UgPSBnZXRQYXJlbnQoaW5DYXB0dXJlUGhhc2UpKSwgaW5zdGFuY2UtLTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IDAgPCBsYXN0SG9zdENvbXBvbmVudCAtIGluc3RhbmNlOyApXG4gICAgICAgICAgICAgICAgICAgICAgKHJlYWN0RXZlbnROYW1lID0gZ2V0UGFyZW50KHJlYWN0RXZlbnROYW1lKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudC0tO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaW5zdGFuY2UtLTsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPT09IHJlYWN0RXZlbnROYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobnVsbCAhPT0gcmVhY3RFdmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPT09IHJlYWN0RXZlbnROYW1lLmFsdGVybmF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gZ2V0UGFyZW50KGluQ2FwdHVyZVBoYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSA9IGdldFBhcmVudChyZWFjdEV2ZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaW5DYXB0dXJlUGhhc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIG51bGwgIT09IFN5bnRoZXRpY0V2ZW50Q3RvciAmJlxuICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmVhY3ROYW1lLFxuICAgICAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IsXG4gICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlLFxuICAgICAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBudWxsICE9PSByZWFjdEV2ZW50VHlwZSAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gYWNjdW11bGF0ZVRhcmdldE9ubHkgJiZcbiAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVUYXJnZXRPbmx5LFxuICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UsXG4gICAgICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIHJlYWN0TmFtZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID1cbiAgICAgICAgICAgICAgcmVhY3ROYW1lLm5vZGVOYW1lICYmIHJlYWN0TmFtZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcInNlbGVjdFwiID09PSBTeW50aGV0aWNFdmVudEN0b3IgfHxcbiAgICAgICAgICAgICAgKFwiaW5wdXRcIiA9PT0gU3ludGhldGljRXZlbnRDdG9yICYmIFwiZmlsZVwiID09PSByZWFjdE5hbWUudHlwZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdmFyIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50O1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHJlYWN0TmFtZSkpXG4gICAgICAgICAgICAgIGlmIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQpXG4gICAgICAgICAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50O1xuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICAgICAgICAgICAgdmFyIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAoU3ludGhldGljRXZlbnRDdG9yID0gcmVhY3ROYW1lLm5vZGVOYW1lKSxcbiAgICAgICAgICAgICAgICAhU3ludGhldGljRXZlbnRDdG9yIHx8XG4gICAgICAgICAgICAgICAgXCJpbnB1dFwiICE9PSBTeW50aGV0aWNFdmVudEN0b3IudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgICAgIChcImNoZWNrYm94XCIgIT09IHJlYWN0TmFtZS50eXBlICYmIFwicmFkaW9cIiAhPT0gcmVhY3ROYW1lLnR5cGUpXG4gICAgICAgICAgICAgICAgICA/IHRhcmdldEluc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNDdXN0b21FbGVtZW50KHRhcmdldEluc3QuZWxlbWVudFR5cGUpICYmXG4gICAgICAgICAgICAgICAgICAgIChnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudClcbiAgICAgICAgICAgICAgICAgIDogKGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyAmJlxuICAgICAgICAgICAgICAoZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldEluc3QpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChcbiAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgICAgIGdldFRhcmdldEluc3RGdW5jLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVFdmVudEZ1bmMgJiZcbiAgICAgICAgICAgICAgaGFuZGxlRXZlbnRGdW5jKGRvbUV2ZW50TmFtZSwgcmVhY3ROYW1lLCB0YXJnZXRJbnN0KTtcbiAgICAgICAgICAgIFwiZm9jdXNvdXRcIiA9PT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgICAgIHRhcmdldEluc3QgJiZcbiAgICAgICAgICAgICAgXCJudW1iZXJcIiA9PT0gcmVhY3ROYW1lLnR5cGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPSB0YXJnZXRJbnN0Lm1lbW9pemVkUHJvcHMudmFsdWUgJiZcbiAgICAgICAgICAgICAgc2V0RGVmYXVsdFZhbHVlKHJlYWN0TmFtZSwgXCJudW1iZXJcIiwgcmVhY3ROYW1lLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gdGFyZ2V0SW5zdFxuICAgICAgICAgICAgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpXG4gICAgICAgICAgICA6IHdpbmRvdztcbiAgICAgICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICAgICAgY2FzZSBcImZvY3VzaW5cIjpcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlzVGV4dElucHV0RWxlbWVudChoYW5kbGVFdmVudEZ1bmMpIHx8XG4gICAgICAgICAgICAgICAgXCJ0cnVlXCIgPT09IGhhbmRsZUV2ZW50RnVuYy5jb250ZW50RWRpdGFibGVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIChhY3RpdmVFbGVtZW50ID0gaGFuZGxlRXZlbnRGdW5jKSxcbiAgICAgICAgICAgICAgICAgIChhY3RpdmVFbGVtZW50SW5zdCA9IHRhcmdldEluc3QpLFxuICAgICAgICAgICAgICAgICAgKGxhc3RTZWxlY3Rpb24gPSBudWxsKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZm9jdXNvdXRcIjpcbiAgICAgICAgICAgICAgbGFzdFNlbGVjdGlvbiA9IGFjdGl2ZUVsZW1lbnRJbnN0ID0gYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vdXNlZG93blwiOlxuICAgICAgICAgICAgICBtb3VzZURvd24gPSAhMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiY29udGV4dG1lbnVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtb3VzZXVwXCI6XG4gICAgICAgICAgICBjYXNlIFwiZHJhZ2VuZFwiOlxuICAgICAgICAgICAgICBtb3VzZURvd24gPSAhMTtcbiAgICAgICAgICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzZWxlY3Rpb25jaGFuZ2VcIjpcbiAgICAgICAgICAgICAgaWYgKHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCkgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwia2V5ZG93blwiOlxuICAgICAgICAgICAgY2FzZSBcImtleXVwXCI6XG4gICAgICAgICAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGZhbGxiYWNrRGF0YTtcbiAgICAgICAgICBpZiAoY2FuVXNlQ29tcG9zaXRpb25FdmVudClcbiAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29tcG9zaXRpb25zdGFydFwiOlxuICAgICAgICAgICAgICAgICAgdmFyIGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvblN0YXJ0XCI7XG4gICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbmVuZFwiOlxuICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gXCJvbkNvbXBvc2l0aW9uRW5kXCI7XG4gICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOlxuICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gXCJvbkNvbXBvc2l0aW9uVXBkYXRlXCI7XG4gICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGV2ZW50VHlwZSA9IHZvaWQgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpc0NvbXBvc2luZ1xuICAgICAgICAgICAgICA/IGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSAmJlxuICAgICAgICAgICAgICAgIChldmVudFR5cGUgPSBcIm9uQ29tcG9zaXRpb25FbmRcIilcbiAgICAgICAgICAgICAgOiBcImtleWRvd25cIiA9PT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQua2V5Q29kZSA9PT0gU1RBUlRfS0VZQ09ERSAmJlxuICAgICAgICAgICAgICAgIChldmVudFR5cGUgPSBcIm9uQ29tcG9zaXRpb25TdGFydFwiKTtcbiAgICAgICAgICBldmVudFR5cGUgJiZcbiAgICAgICAgICAgICh1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJlxuICAgICAgICAgICAgICBcImtvXCIgIT09IG5hdGl2ZUV2ZW50LmxvY2FsZSAmJlxuICAgICAgICAgICAgICAoaXNDb21wb3NpbmcgfHwgXCJvbkNvbXBvc2l0aW9uU3RhcnRcIiAhPT0gZXZlbnRUeXBlXG4gICAgICAgICAgICAgICAgPyBcIm9uQ29tcG9zaXRpb25FbmRcIiA9PT0gZXZlbnRUeXBlICYmXG4gICAgICAgICAgICAgICAgICBpc0NvbXBvc2luZyAmJlxuICAgICAgICAgICAgICAgICAgKGZhbGxiYWNrRGF0YSA9IGdldERhdGEoKSlcbiAgICAgICAgICAgICAgICA6ICgocm9vdCA9IG5hdGl2ZUV2ZW50VGFyZ2V0KSxcbiAgICAgICAgICAgICAgICAgIChzdGFydFRleHQgPSBcInZhbHVlXCIgaW4gcm9vdCA/IHJvb3QudmFsdWUgOiByb290LnRleHRDb250ZW50KSxcbiAgICAgICAgICAgICAgICAgIChpc0NvbXBvc2luZyA9ICEwKSkpLFxuICAgICAgICAgICAgKGhhbmRsZUV2ZW50RnVuYyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhcbiAgICAgICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIDAgPCBoYW5kbGVFdmVudEZ1bmMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICgoZXZlbnRUeXBlID0gbmV3IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudFR5cGUsXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzOiBoYW5kbGVFdmVudEZ1bmNcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGZhbGxiYWNrRGF0YVxuICAgICAgICAgICAgICAgID8gKGV2ZW50VHlwZS5kYXRhID0gZmFsbGJhY2tEYXRhKVxuICAgICAgICAgICAgICAgIDogKChmYWxsYmFja0RhdGEgPSBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSksXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBmYWxsYmFja0RhdGEgJiYgKGV2ZW50VHlwZS5kYXRhID0gZmFsbGJhY2tEYXRhKSkpKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZmFsbGJhY2tEYXRhID0gY2FuVXNlVGV4dElucHV0RXZlbnRcbiAgICAgICAgICAgICAgPyBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpXG4gICAgICAgICAgICAgIDogZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIChldmVudFR5cGUgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoXG4gICAgICAgICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgICAgICAgIFwib25CZWZvcmVJbnB1dFwiXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgMCA8IGV2ZW50VHlwZS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAoKGhhbmRsZUV2ZW50RnVuYyA9IG5ldyBTeW50aGV0aWNJbnB1dEV2ZW50KFxuICAgICAgICAgICAgICAgICAgXCJvbkJlZm9yZUlucHV0XCIsXG4gICAgICAgICAgICAgICAgICBcImJlZm9yZWlucHV0XCIsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICBldmVudDogaGFuZGxlRXZlbnRGdW5jLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzOiBldmVudFR5cGVcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAoaGFuZGxlRXZlbnRGdW5jLmRhdGEgPSBmYWxsYmFja0RhdGEpKTtcbiAgICAgICAgICBleHRyYWN0RXZlbnRzJDEoXG4gICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgIGxpc3RlbmVyOiBsaXN0ZW5lcixcbiAgICAgICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldFxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBjYXB0dXJlTmFtZSA9IHJlYWN0TmFtZSArIFwiQ2FwdHVyZVwiLCBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgbnVsbCAhPT0gdGFyZ2V0RmliZXI7XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgX2luc3RhbmNlMyA9IHRhcmdldEZpYmVyLFxuICAgICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTMuc3RhdGVOb2RlO1xuICAgICAgICBfaW5zdGFuY2UzID0gX2luc3RhbmNlMy50YWc7XG4gICAgICAgICg1ICE9PSBfaW5zdGFuY2UzICYmIDI2ICE9PSBfaW5zdGFuY2UzICYmIDI3ICE9PSBfaW5zdGFuY2UzKSB8fFxuICAgICAgICAgIG51bGwgPT09IHN0YXRlTm9kZSB8fFxuICAgICAgICAgICgoX2luc3RhbmNlMyA9IGdldExpc3RlbmVyKHRhcmdldEZpYmVyLCBjYXB0dXJlTmFtZSkpLFxuICAgICAgICAgIG51bGwgIT0gX2luc3RhbmNlMyAmJlxuICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoXG4gICAgICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIodGFyZ2V0RmliZXIsIF9pbnN0YW5jZTMsIHN0YXRlTm9kZSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKF9pbnN0YW5jZTMgPSBnZXRMaXN0ZW5lcih0YXJnZXRGaWJlciwgcmVhY3ROYW1lKSksXG4gICAgICAgICAgbnVsbCAhPSBfaW5zdGFuY2UzICYmXG4gICAgICAgICAgICBsaXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgICAgY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcih0YXJnZXRGaWJlciwgX2luc3RhbmNlMywgc3RhdGVOb2RlKVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIGlmICgzID09PSB0YXJnZXRGaWJlci50YWcpIHJldHVybiBsaXN0ZW5lcnM7XG4gICAgICAgIHRhcmdldEZpYmVyID0gdGFyZ2V0RmliZXIucmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRQYXJlbnQoaW5zdCkge1xuICAgICAgaWYgKG51bGwgPT09IGluc3QpIHJldHVybiBudWxsO1xuICAgICAgZG8gaW5zdCA9IGluc3QucmV0dXJuO1xuICAgICAgd2hpbGUgKGluc3QgJiYgNSAhPT0gaW5zdC50YWcgJiYgMjcgIT09IGluc3QudGFnKTtcbiAgICAgIHJldHVybiBpbnN0ID8gaW5zdCA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoXG4gICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgZXZlbnQsXG4gICAgICB0YXJnZXQsXG4gICAgICBjb21tb24sXG4gICAgICBpbkNhcHR1cmVQaGFzZVxuICAgICkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5fcmVhY3ROYW1lLCBsaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgbnVsbCAhPT0gdGFyZ2V0ICYmIHRhcmdldCAhPT0gY29tbW9uO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTQgPSB0YXJnZXQsXG4gICAgICAgICAgYWx0ZXJuYXRlID0gX2luc3RhbmNlNC5hbHRlcm5hdGUsXG4gICAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlNC5zdGF0ZU5vZGU7XG4gICAgICAgIF9pbnN0YW5jZTQgPSBfaW5zdGFuY2U0LnRhZztcbiAgICAgICAgaWYgKG51bGwgIT09IGFsdGVybmF0ZSAmJiBhbHRlcm5hdGUgPT09IGNvbW1vbikgYnJlYWs7XG4gICAgICAgICg1ICE9PSBfaW5zdGFuY2U0ICYmIDI2ICE9PSBfaW5zdGFuY2U0ICYmIDI3ICE9PSBfaW5zdGFuY2U0KSB8fFxuICAgICAgICAgIG51bGwgPT09IHN0YXRlTm9kZSB8fFxuICAgICAgICAgICgoYWx0ZXJuYXRlID0gc3RhdGVOb2RlKSxcbiAgICAgICAgICBpbkNhcHR1cmVQaGFzZVxuICAgICAgICAgICAgPyAoKHN0YXRlTm9kZSA9IGdldExpc3RlbmVyKHRhcmdldCwgcmVnaXN0cmF0aW9uTmFtZSkpLFxuICAgICAgICAgICAgICBudWxsICE9IHN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KFxuICAgICAgICAgICAgICAgICAgY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcih0YXJnZXQsIHN0YXRlTm9kZSwgYWx0ZXJuYXRlKVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6IGluQ2FwdHVyZVBoYXNlIHx8XG4gICAgICAgICAgICAgICgoc3RhdGVOb2RlID0gZ2V0TGlzdGVuZXIodGFyZ2V0LCByZWdpc3RyYXRpb25OYW1lKSksXG4gICAgICAgICAgICAgIG51bGwgIT0gc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgICBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKHRhcmdldCwgc3RhdGVOb2RlLCBhbHRlcm5hdGUpXG4gICAgICAgICAgICAgICAgKSkpO1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucmV0dXJuO1xuICAgICAgfVxuICAgICAgMCAhPT0gbGlzdGVuZXJzLmxlbmd0aCAmJlxuICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogZXZlbnQsIGxpc3RlbmVyczogbGlzdGVuZXJzIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHR5cGUsIHByb3BzKSB7XG4gICAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcyk7XG4gICAgICAoXCJpbnB1dFwiICE9PSB0eXBlICYmIFwidGV4dGFyZWFcIiAhPT0gdHlwZSAmJiBcInNlbGVjdFwiICE9PSB0eXBlKSB8fFxuICAgICAgICBudWxsID09IHByb3BzIHx8XG4gICAgICAgIG51bGwgIT09IHByb3BzLnZhbHVlIHx8XG4gICAgICAgIGRpZFdhcm5WYWx1ZU51bGwgfHxcbiAgICAgICAgKChkaWRXYXJuVmFsdWVOdWxsID0gITApLFxuICAgICAgICBcInNlbGVjdFwiID09PSB0eXBlICYmIHByb3BzLm11bHRpcGxlXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImB2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgYXJyYXkgd2hlbiBgbXVsdGlwbGVgIGlzIHNldCB0byBgdHJ1ZWAgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuXCIsXG4gICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiBDb25zaWRlciB1c2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCBmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuXCIsXG4gICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICkpO1xuICAgICAgdmFyIGV2ZW50UmVnaXN0cnkgPSB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6IHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMsXG4gICAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM6IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNcbiAgICAgIH07XG4gICAgICBpc0N1c3RvbUVsZW1lbnQodHlwZSkgfHxcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BzLmlzIHx8XG4gICAgICAgIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSk7XG4gICAgICBwcm9wcy5jb250ZW50RWRpdGFibGUgJiZcbiAgICAgICAgIXByb3BzLnN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyAmJlxuICAgICAgICBudWxsICE9IHByb3BzLmNoaWxkcmVuICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBIGNvbXBvbmVudCBpcyBgY29udGVudEVkaXRhYmxlYCBhbmQgY29udGFpbnMgYGNoaWxkcmVuYCBtYW5hZ2VkIGJ5IFJlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mIHRob3NlIG5vZGVzIGFyZSB1bmV4cGVjdGVkbHkgbW9kaWZpZWQgb3IgZHVwbGljYXRlZC4gVGhpcyBpcyBwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgcHJvcE5hbWUsXG4gICAgICBzZXJ2ZXJWYWx1ZSxcbiAgICAgIGNsaWVudFZhbHVlLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIHNlcnZlclZhbHVlICE9PSBjbGllbnRWYWx1ZSAmJlxuICAgICAgICAoKGNsaWVudFZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFZhbHVlKSksXG4gICAgICAgIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJWYWx1ZSkgIT09IGNsaWVudFZhbHVlICYmXG4gICAgICAgICAgKHNlcnZlckRpZmZlcmVuY2VzW3Byb3BOYW1lXSA9IHNlcnZlclZhbHVlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgYXR0cmlidXRlTmFtZXMsXG4gICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICkge1xuICAgICAgYXR0cmlidXRlTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1tnZXRQcm9wTmFtZUZyb21BdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5hbWUpXSA9XG4gICAgICAgICAgXCJzdHlsZVwiID09PSBhdHRyaWJ1dGVOYW1lXG4gICAgICAgICAgICA/IGdldFN0eWxlc09iamVjdEZyb21FbGVtZW50KGRvbUVsZW1lbnQpXG4gICAgICAgICAgICA6IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihyZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgICAgITEgPT09IGxpc3RlbmVyXG4gICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBgZmFsc2VgLlxcblxcbklmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCBwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC5cIixcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYCVzYCB0eXBlLlwiLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSxcbiAgICAgICAgICAgIHR5cGVvZiBsaXN0ZW5lclxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUhUTUwocGFyZW50LCBodG1sKSB7XG4gICAgICBwYXJlbnQgPVxuICAgICAgICBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBNQVRIX05BTUVTUEFDRSB8fFxuICAgICAgICBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFXG4gICAgICAgICAgPyBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgICAgIHBhcmVudC5uYW1lc3BhY2VVUkksXG4gICAgICAgICAgICAgIHBhcmVudC50YWdOYW1lXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHBhcmVudC50YWdOYW1lKTtcbiAgICAgIHBhcmVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgcmV0dXJuIHBhcmVudC5pbm5lckhUTUw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShtYXJrdXApIHtcbiAgICAgIHdpbGxDb2VyY2lvblRocm93KG1hcmt1cCkgJiZcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJUaGUgcHJvdmlkZWQgSFRNTCBtYXJrdXAgdXNlcyBhIHZhbHVlIG9mIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgIHR5cGVOYW1lKG1hcmt1cClcbiAgICAgICAgKSxcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKG1hcmt1cCkpO1xuICAgICAgcmV0dXJuIChcInN0cmluZ1wiID09PSB0eXBlb2YgbWFya3VwID8gbWFya3VwIDogXCJcIiArIG1hcmt1cClcbiAgICAgICAgLnJlcGxhY2UoTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYLCBcIlxcblwiKVxuICAgICAgICAucmVwbGFjZShOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVgsIFwiXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0ZvclVubWF0Y2hlZFRleHQoc2VydmVyVGV4dCwgY2xpZW50VGV4dCkge1xuICAgICAgY2xpZW50VGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRUZXh0KTtcbiAgICAgIHJldHVybiBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVGV4dCkgPT09IGNsaWVudFRleHRcbiAgICAgICAgPyAhMFxuICAgICAgICA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wJDEoKSB7fVxuICAgIGZ1bmN0aW9uIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBrZXksIHZhbHVlLCBwcm9wcywgcHJldlZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlKVxuICAgICAgICAgICAgdmFsaWRhdGVUZXh0TmVzdGluZyh2YWx1ZSwgdGFnLCAhMSksXG4gICAgICAgICAgICAgIFwiYm9keVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgICAgICAoXCJ0ZXh0YXJlYVwiID09PSB0YWcgJiYgXCJcIiA9PT0gdmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgdmFsdWUpO1xuICAgICAgICAgIGVsc2UgaWYgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSB8fCBcImJpZ2ludFwiID09PSB0eXBlb2YgdmFsdWUpXG4gICAgICAgICAgICB2YWxpZGF0ZVRleHROZXN0aW5nKFwiXCIgKyB2YWx1ZSwgdGFnLCAhMSksXG4gICAgICAgICAgICAgIFwiYm9keVwiICE9PSB0YWcgJiYgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgXCJcIiArIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNsYXNzTmFtZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJjbGFzc1wiLCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0YWJJbmRleFwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJ0YWJpbmRleFwiLCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkaXJcIjpcbiAgICAgICAgY2FzZSBcInJvbGVcIjpcbiAgICAgICAgY2FzZSBcInZpZXdCb3hcIjpcbiAgICAgICAgY2FzZSBcIndpZHRoXCI6XG4gICAgICAgIGNhc2UgXCJoZWlnaHRcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKGRvbUVsZW1lbnQsIGtleSwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCB2YWx1ZSwgcHJldlZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRhdGFcIjpcbiAgICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdGFnKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKGRvbUVsZW1lbnQsIFwiZGF0YVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJzcmNcIjpcbiAgICAgICAgY2FzZSBcImhyZWZcIjpcbiAgICAgICAgICBpZiAoXCJcIiA9PT0gdmFsdWUgJiYgKFwiYVwiICE9PSB0YWcgfHwgXCJocmVmXCIgIT09IGtleSkpIHtcbiAgICAgICAgICAgIFwic3JjXCIgPT09IGtleVxuICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAnQW4gZW1wdHkgc3RyaW5nIChcIlwiKSB3YXMgcGFzc2VkIHRvIHRoZSAlcyBhdHRyaWJ1dGUuIFRoaXMgbWF5IGNhdXNlIHRoZSBicm93c2VyIHRvIGRvd25sb2FkIHRoZSB3aG9sZSBwYWdlIGFnYWluIG92ZXIgdGhlIG5ldHdvcmsuIFRvIGZpeCB0aGlzLCBlaXRoZXIgZG8gbm90IHJlbmRlciB0aGUgZWxlbWVudCBhdCBhbGwgb3IgcGFzcyBudWxsIHRvICVzIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nLicsXG4gICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdBbiBlbXB0eSBzdHJpbmcgKFwiXCIpIHdhcyBwYXNzZWQgdG8gdGhlICVzIGF0dHJpYnV0ZS4gVG8gZml4IHRoaXMsIGVpdGhlciBkbyBub3QgcmVuZGVyIHRoZSBlbGVtZW50IGF0IGFsbCBvciBwYXNzIG51bGwgdG8gJXMgaW5zdGVhZCBvZiBhbiBlbXB0eSBzdHJpbmcuJyxcbiAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgPT0gdmFsdWUgfHxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KTtcbiAgICAgICAgICB2YWx1ZSA9IHNhbml0aXplVVJMKFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJhY3Rpb25cIjpcbiAgICAgICAgY2FzZSBcImZvcm1BY3Rpb25cIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmb3JtXCIgPT09IHRhZ1xuICAgICAgICAgICAgICA/IFwiZm9ybUFjdGlvblwiID09PSBrZXlcbiAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiWW91IGNhbiBvbmx5IHBhc3MgdGhlIGZvcm1BY3Rpb24gcHJvcCB0byA8aW5wdXQ+IG9yIDxidXR0b24+LiBVc2UgdGhlIGFjdGlvbiBwcm9wIG9uIDxmb3JtPi5cIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICgobnVsbCA9PSBwcm9wcy5lbmNUeXBlICYmIG51bGwgPT0gcHJvcHMubWV0aG9kKSB8fFxuICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCB8fFxuICAgICAgICAgICAgICAgICAgICAoKGRpZFdhcm5Gb3JtQWN0aW9uTWV0aG9kID0gITApLFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHNwZWNpZnkgYSBlbmNUeXBlIG9yIG1ldGhvZCBmb3IgYSBmb3JtIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgdGhlIGFjdGlvbi4gUmVhY3QgcHJvdmlkZXMgdGhvc2UgYXV0b21hdGljYWxseS4gVGhleSB3aWxsIGdldCBvdmVycmlkZGVuLlwiXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PSBwcm9wcy50YXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25UYXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgKChkaWRXYXJuRm9ybUFjdGlvblRhcmdldCA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGEgdGFyZ2V0IGZvciBhIGZvcm0gdGhhdCBzcGVjaWZpZXMgYSBmdW5jdGlvbiBhcyB0aGUgYWN0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgd2luZG93LlwiXG4gICAgICAgICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgICA6IFwiaW5wdXRcIiA9PT0gdGFnIHx8IFwiYnV0dG9uXCIgPT09IHRhZ1xuICAgICAgICAgICAgICAgID8gXCJhY3Rpb25cIiA9PT0ga2V5XG4gICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJZb3UgY2FuIG9ubHkgcGFzcyB0aGUgYWN0aW9uIHByb3AgdG8gPGZvcm0+LiBVc2UgdGhlIGZvcm1BY3Rpb24gcHJvcCBvbiA8aW5wdXQ+IG9yIDxidXR0b24+LlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogXCJpbnB1dFwiICE9PSB0YWcgfHxcbiAgICAgICAgICAgICAgICAgICAgICBcInN1Ym1pdFwiID09PSBwcm9wcy50eXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgXCJpbWFnZVwiID09PSBwcm9wcy50eXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25UeXBlXG4gICAgICAgICAgICAgICAgICAgID8gXCJidXR0b25cIiAhPT0gdGFnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCA9PSBwcm9wcy50eXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgXCJzdWJtaXRcIiA9PT0gcHJvcHMudHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVHlwZVxuICAgICAgICAgICAgICAgICAgICAgID8gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IHByb3BzLm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25OYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvcm1BY3Rpb25OYW1lID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3Qgc3BlY2lmeSBhIFwibmFtZVwiIHByb3AgZm9yIGEgYnV0dG9uIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgYSBmb3JtQWN0aW9uLiBSZWFjdCBuZWVkcyBpdCB0byBlbmNvZGUgd2hpY2ggYWN0aW9uIHNob3VsZCBiZSBpbnZva2VkLiBJdCB3aWxsIGdldCBvdmVycmlkZGVuLidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBwcm9wcy5mb3JtRW5jVHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsID09IHByb3BzLmZvcm1NZXRob2QpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uTWV0aG9kIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvcm1BY3Rpb25NZXRob2QgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBhIGZvcm1FbmNUeXBlIG9yIGZvcm1NZXRob2QgZm9yIGEgYnV0dG9uIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgYSBmb3JtQWN0aW9uLiBSZWFjdCBwcm92aWRlcyB0aG9zZSBhdXRvbWF0aWNhbGx5LiBUaGV5IHdpbGwgZ2V0IG92ZXJyaWRkZW4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsID09IHByb3BzLmZvcm1UYXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25UYXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKChkaWRXYXJuRm9ybUFjdGlvblRhcmdldCA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGEgZm9ybVRhcmdldCBmb3IgYSBidXR0b24gdGhhdCBzcGVjaWZpZXMgYSBmdW5jdGlvbiBhcyBhIGZvcm1BY3Rpb24uIFRoZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSB3aW5kb3cuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICAgICAgICAgICAgOiAoKGRpZFdhcm5Gb3JtQWN0aW9uVHlwZSA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdBIGJ1dHRvbiBjYW4gb25seSBzcGVjaWZ5IGEgZm9ybUFjdGlvbiBhbG9uZyB3aXRoIHR5cGU9XCJzdWJtaXRcIiBvciBubyB0eXBlLidcbiAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgIDogKChkaWRXYXJuRm9ybUFjdGlvblR5cGUgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdBbiBpbnB1dCBjYW4gb25seSBzcGVjaWZ5IGEgZm9ybUFjdGlvbiBhbG9uZyB3aXRoIHR5cGU9XCJzdWJtaXRcIiBvciB0eXBlPVwiaW1hZ2VcIi4nXG4gICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IFwiYWN0aW9uXCIgPT09IGtleVxuICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiWW91IGNhbiBvbmx5IHBhc3MgdGhlIGFjdGlvbiBwcm9wIHRvIDxmb3JtPi5cIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJZb3UgY2FuIG9ubHkgcGFzcyB0aGUgZm9ybUFjdGlvbiBwcm9wIHRvIDxpbnB1dD4gb3IgPGJ1dHRvbj4uXCJcbiAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICBcImphdmFzY3JpcHQ6dGhyb3cgbmV3IEVycm9yKCdBIFJlYWN0IGZvcm0gd2FzIHVuZXhwZWN0ZWRseSBzdWJtaXR0ZWQuIElmIHlvdSBjYWxsZWQgZm9ybS5zdWJtaXQoKSBtYW51YWxseSwgY29uc2lkZXIgdXNpbmcgZm9ybS5yZXF1ZXN0U3VibWl0KCkgaW5zdGVhZC4gSWYgeW91XFxcXCdyZSB0cnlpbmcgdG8gdXNlIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIGluIGEgc3VibWl0IGV2ZW50IGhhbmRsZXIsIGNvbnNpZGVyIGFsc28gY2FsbGluZyBldmVudC5wcmV2ZW50RGVmYXVsdCgpLicpXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByZXZWYWx1ZSAmJlxuICAgICAgICAgICAgICAoXCJmb3JtQWN0aW9uXCIgPT09IGtleVxuICAgICAgICAgICAgICAgID8gKFwiaW5wdXRcIiAhPT0gdGFnICYmXG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBcIm5hbWVcIiwgcHJvcHMubmFtZSwgcHJvcHMsIG51bGwpLFxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBcImZvcm1FbmNUeXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmZvcm1FbmNUeXBlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtTWV0aG9kXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmZvcm1NZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBcImZvcm1UYXJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZm9ybVRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgOiAoc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBcImVuY1R5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZW5jVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgXCJtZXRob2RcIiwgcHJvcHMubWV0aG9kLCBwcm9wcywgbnVsbCksXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICkpKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsID09IHZhbHVlIHx8XG4gICAgICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KTtcbiAgICAgICAgICB2YWx1ZSA9IHNhbml0aXplVVJMKFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvbkNsaWNrXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIChkb21FbGVtZW50Lm9uY2xpY2sgPSBub29wJDEpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9uU2Nyb2xsXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxcIiwgZG9tRWxlbWVudCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25TY3JvbGxFbmRcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbGVuZFwiLCBkb21FbGVtZW50KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgIGlmIChudWxsICE9IHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIHZhbHVlIHx8ICEoXCJfX2h0bWxcIiBpbiB2YWx1ZSkpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gUGxlYXNlIHZpc2l0IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGtleSA9IHZhbHVlLl9faHRtbDtcbiAgICAgICAgICAgIGlmIChudWxsICE9IGtleSkge1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPSBwcm9wcy5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkb21FbGVtZW50LmlubmVySFRNTCA9IGtleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgIGRvbUVsZW1lbnQubXVsdGlwbGUgPVxuICAgICAgICAgICAgdmFsdWUgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiYgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibXV0ZWRcIjpcbiAgICAgICAgICBkb21FbGVtZW50Lm11dGVkID1cbiAgICAgICAgICAgIHZhbHVlICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgICAgIGNhc2UgXCJpbm5lckhUTUxcIjpcbiAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXV0b0ZvY3VzXCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua0hyZWZcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsID09IHZhbHVlIHx8XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInhsaW5rOmhyZWZcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KTtcbiAgICAgICAgICBrZXkgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlTlMoeGxpbmtOYW1lc3BhY2UsIFwieGxpbms6aHJlZlwiLCBrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY29udGVudEVkaXRhYmxlXCI6XG4gICAgICAgIGNhc2UgXCJzcGVsbENoZWNrXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnZ2FibGVcIjpcbiAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgIGNhc2UgXCJhdXRvUmV2ZXJzZVwiOlxuICAgICAgICBjYXNlIFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNhYmxlXCI6XG4gICAgICAgIGNhc2UgXCJwcmVzZXJ2ZUFscGhhXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgICA/IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFwiXCIgKyB2YWx1ZSkpXG4gICAgICAgICAgICA6IGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbmVydFwiOlxuICAgICAgICAgIFwiXCIgIT09IHZhbHVlIHx8XG4gICAgICAgICAgICBkaWRXYXJuRm9yTmV3Qm9vbGVhblByb3BzV2l0aEVtcHR5VmFsdWVba2V5XSB8fFxuICAgICAgICAgICAgKChkaWRXYXJuRm9yTmV3Qm9vbGVhblByb3BzV2l0aEVtcHR5VmFsdWVba2V5XSA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gZW1wdHkgc3RyaW5nIGZvciBhIGJvb2xlYW4gYXR0cmlidXRlIGAlc2AuIFRoaXMgd2lsbCB0cmVhdCB0aGUgYXR0cmlidXRlIGFzIGlmIGl0IHdlcmUgZmFsc2UuIEVpdGhlciBwYXNzIGBmYWxzZWAgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcsIG9yIHBhc3MgYHRydWVgIGlmIHlvdSB1c2VkIGFuIGVtcHR5IHN0cmluZyBpbiBlYXJsaWVyIHZlcnNpb25zIG9mIFJlYWN0IHRvIGluZGljYXRlIHRoaXMgYXR0cmlidXRlIGlzIHRydWUuXCIsXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIGNhc2UgXCJhbGxvd0Z1bGxTY3JlZW5cIjpcbiAgICAgICAgY2FzZSBcImFzeW5jXCI6XG4gICAgICAgIGNhc2UgXCJhdXRvUGxheVwiOlxuICAgICAgICBjYXNlIFwiY29udHJvbHNcIjpcbiAgICAgICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgICAgY2FzZSBcImRlZmVyXCI6XG4gICAgICAgIGNhc2UgXCJkaXNhYmxlZFwiOlxuICAgICAgICBjYXNlIFwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpcbiAgICAgICAgY2FzZSBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiOlxuICAgICAgICBjYXNlIFwiZm9ybU5vVmFsaWRhdGVcIjpcbiAgICAgICAgY2FzZSBcImhpZGRlblwiOlxuICAgICAgICBjYXNlIFwibG9vcFwiOlxuICAgICAgICBjYXNlIFwibm9Nb2R1bGVcIjpcbiAgICAgICAgY2FzZSBcIm5vVmFsaWRhdGVcIjpcbiAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgY2FzZSBcInBsYXlzSW5saW5lXCI6XG4gICAgICAgIGNhc2UgXCJyZWFkT25seVwiOlxuICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgY2FzZSBcInJldmVyc2VkXCI6XG4gICAgICAgIGNhc2UgXCJzY29wZWRcIjpcbiAgICAgICAgY2FzZSBcInNlYW1sZXNzXCI6XG4gICAgICAgIGNhc2UgXCJpdGVtU2NvcGVcIjpcbiAgICAgICAgICB2YWx1ZSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJiBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICAgID8gZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKVxuICAgICAgICAgICAgOiBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwiZG93bmxvYWRcIjpcbiAgICAgICAgICAhMCA9PT0gdmFsdWVcbiAgICAgICAgICAgID8gZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKVxuICAgICAgICAgICAgOiAhMSAhPT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICAgICAgPyAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KSxcbiAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSlcbiAgICAgICAgICAgICAgOiBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY29sc1wiOlxuICAgICAgICBjYXNlIFwicm93c1wiOlxuICAgICAgICBjYXNlIFwic2l6ZVwiOlxuICAgICAgICBjYXNlIFwic3BhblwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICFpc05hTih2YWx1ZSkgJiZcbiAgICAgICAgICAxIDw9IHZhbHVlXG4gICAgICAgICAgICA/IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSlcbiAgICAgICAgICAgIDogZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJvd1NwYW5cIjpcbiAgICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgaXNOYU4odmFsdWUpXG4gICAgICAgICAgICA/IGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSlcbiAgICAgICAgICAgIDogKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSksXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInBvcG92ZXJcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiYmVmb3JldG9nZ2xlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJ0b2dnbGVcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJwb3BvdmVyXCIsIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rQWN0dWF0ZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6YWN0dWF0ZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtBcmNyb2xlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhsaW5rTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bGluazphcmNyb2xlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua1JvbGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOnJvbGVcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rU2hvd1wiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6c2hvd1wiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtUaXRsZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6dGl0bGVcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rVHlwZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6dHlwZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieG1sQmFzZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bWxOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhtbDpiYXNlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bWxMYW5nXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhtbE5hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieG1sOmxhbmdcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhtbFNwYWNlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhtbE5hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieG1sOnNwYWNlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpc1wiOlxuICAgICAgICAgIG51bGwgIT0gcHJldlZhbHVlICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnQ2Fubm90IHVwZGF0ZSB0aGUgXCJpc1wiIHByb3AgYWZ0ZXIgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBzZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBcImlzXCIsIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImlubmVyVGV4dFwiOlxuICAgICAgICBjYXNlIFwidGV4dENvbnRlbnRcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInBvcG92ZXJUYXJnZXRcIjpcbiAgICAgICAgICBkaWRXYXJuUG9wb3ZlclRhcmdldE9iamVjdCB8fFxuICAgICAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICAoKGRpZFdhcm5Qb3BvdmVyVGFyZ2V0T2JqZWN0ID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJUaGUgYHBvcG92ZXJUYXJnZXRgIHByb3AgZXhwZWN0cyB0aGUgSUQgb2YgYW4gRWxlbWVudCBhcyBhIHN0cmluZy4gUmVjZWl2ZWQgJXMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICkpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICEoMiA8IGtleS5sZW5ndGgpIHx8XG4gICAgICAgICAgKFwib1wiICE9PSBrZXlbMF0gJiYgXCJPXCIgIT09IGtleVswXSkgfHxcbiAgICAgICAgICAoXCJuXCIgIT09IGtleVsxXSAmJiBcIk5cIiAhPT0ga2V5WzFdKVxuICAgICAgICAgICAgPyAoKGtleSA9IGdldEF0dHJpYnV0ZUFsaWFzKGtleSkpLFxuICAgICAgICAgICAgICBzZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBrZXksIHZhbHVlKSlcbiAgICAgICAgICAgIDogcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRQcm9wT25DdXN0b21FbGVtZW50KFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIHRhZyxcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJvcHMsXG4gICAgICBwcmV2VmFsdWVcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHZhbHVlLCBwcmV2VmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICBpZiAobnVsbCAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHR5cGVvZiB2YWx1ZSB8fCAhKFwiX19odG1sXCIgaW4gdmFsdWUpKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcImBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9ybSBge19faHRtbDogLi4ufWAuIFBsZWFzZSB2aXNpdCBodHRwczovL3JlYWN0LmRldi9saW5rL2Rhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBrZXkgPSB2YWx1ZS5fX2h0bWw7XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT0gcHJvcHMuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5pbm5lckhUTUwgPSBrZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgdmFsdWUpXG4gICAgICAgICAgICA6IChcIm51bWJlclwiID09PSB0eXBlb2YgdmFsdWUgfHwgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIHZhbHVlKSAmJlxuICAgICAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25TY3JvbGxcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbFwiLCBkb21FbGVtZW50KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvblNjcm9sbEVuZFwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsZW5kXCIsIGRvbUVsZW1lbnQpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9uQ2xpY2tcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgKGRvbUVsZW1lbnQub25jbGljayA9IG5vb3AkMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpcbiAgICAgICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgICAgICBjYXNlIFwicmVmXCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbm5lclRleHRcIjpcbiAgICAgICAgY2FzZSBcInRleHRDb250ZW50XCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIFwib1wiID09PSBrZXlbMF0gJiZcbiAgICAgICAgICAgICAgICBcIm5cIiA9PT0ga2V5WzFdICYmXG4gICAgICAgICAgICAgICAgKChwcm9wcyA9IGtleS5lbmRzV2l0aChcIkNhcHR1cmVcIikpLFxuICAgICAgICAgICAgICAgICh0YWcgPSBrZXkuc2xpY2UoMiwgcHJvcHMgPyBrZXkubGVuZ3RoIC0gNyA6IHZvaWQgMCkpLFxuICAgICAgICAgICAgICAgIChwcmV2VmFsdWUgPSBkb21FbGVtZW50W2ludGVybmFsUHJvcHNLZXldIHx8IG51bGwpLFxuICAgICAgICAgICAgICAgIChwcmV2VmFsdWUgPSBudWxsICE9IHByZXZWYWx1ZSA/IHByZXZWYWx1ZVtrZXldIDogbnVsbCksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcHJldlZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGFnLCBwcmV2VmFsdWUsIHByb3BzKSxcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcHJldlZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBwcmV2VmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIChrZXkgaW4gZG9tRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICA/IChkb21FbGVtZW50W2tleV0gPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICA6IGRvbUVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpKTtcbiAgICAgICAgICAgICAgICBkb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGFnLCB2YWx1ZSwgcHJvcHMpO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAga2V5IGluIGRvbUVsZW1lbnRcbiAgICAgICAgICAgICAgICA/IChkb21FbGVtZW50W2tleV0gPSB2YWx1ZSlcbiAgICAgICAgICAgICAgICA6ICEwID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgPyBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFwiXCIpXG4gICAgICAgICAgICAgICAgICA6IHNldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gICAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcHJvcHMpO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBcImRpdlwiOlxuICAgICAgICBjYXNlIFwic3BhblwiOlxuICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgIGNhc2UgXCJwYXRoXCI6XG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgIGNhc2UgXCJnXCI6XG4gICAgICAgIGNhc2UgXCJwXCI6XG4gICAgICAgIGNhc2UgXCJsaVwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW1nXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIHZhciBoYXNTcmMgPSAhMSxcbiAgICAgICAgICAgIGhhc1NyY1NldCA9ICExLFxuICAgICAgICAgICAgcHJvcEtleTtcbiAgICAgICAgICBmb3IgKHByb3BLZXkgaW4gcHJvcHMpXG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BLZXldO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPSBwcm9wVmFsdWUpXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwic3JjXCI6XG4gICAgICAgICAgICAgICAgICAgIGhhc1NyYyA9ICEwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJzcmNTZXRcIjpcbiAgICAgICAgICAgICAgICAgICAgaGFzU3JjU2V0ID0gITA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBwcm9wS2V5LCBwcm9wVmFsdWUsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgaGFzU3JjU2V0ICYmXG4gICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgXCJzcmNTZXRcIiwgcHJvcHMuc3JjU2V0LCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgaGFzU3JjICYmIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBcInNyY1wiLCBwcm9wcy5zcmMsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJpbnB1dFwiLCBwcm9wcyk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IChwcm9wS2V5ID0gcHJvcFZhbHVlID0gaGFzU3JjU2V0ID0gbnVsbCksXG4gICAgICAgICAgICBjaGVja2VkID0gbnVsbCxcbiAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkID0gbnVsbDtcbiAgICAgICAgICBmb3IgKGhhc1NyYyBpbiBwcm9wcylcbiAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShoYXNTcmMpKSB7XG4gICAgICAgICAgICAgIHZhciBfcHJvcFZhbHVlID0gcHJvcHNbaGFzU3JjXTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT0gX3Byb3BWYWx1ZSlcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGhhc1NyYykge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcIm5hbWVcIjpcbiAgICAgICAgICAgICAgICAgICAgaGFzU3JjU2V0ID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwidHlwZVwiOlxuICAgICAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSBfcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBfcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCA9IF9wcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXkgPSBfcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBfcHJvcFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGhhc1NyYywgX3Byb3BWYWx1ZSwgcHJvcHMsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB2YWxpZGF0ZUlucHV0UHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgICAgIGluaXRJbnB1dChcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgcHJvcFZhbHVlLFxuICAgICAgICAgICAgaGFzU3JjU2V0LFxuICAgICAgICAgICAgITFcbiAgICAgICAgICApO1xuICAgICAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJzZWxlY3RcIiwgcHJvcHMpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGhhc1NyYyA9IHByb3BWYWx1ZSA9IHByb3BLZXkgPSBudWxsO1xuICAgICAgICAgIGZvciAoaGFzU3JjU2V0IGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShoYXNTcmNTZXQpICYmXG4gICAgICAgICAgICAgICgoZGVmYXVsdFZhbHVlID0gcHJvcHNbaGFzU3JjU2V0XSksIG51bGwgIT0gZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGhhc1NyY1NldCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgcHJvcEtleSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgaGFzU3JjID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIGhhc1NyY1NldCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHZhbGlkYXRlU2VsZWN0UHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgICAgIHRhZyA9IHByb3BLZXk7XG4gICAgICAgICAgcHJvcHMgPSBwcm9wVmFsdWU7XG4gICAgICAgICAgZG9tRWxlbWVudC5tdWx0aXBsZSA9ICEhaGFzU3JjO1xuICAgICAgICAgIG51bGwgIT0gdGFnXG4gICAgICAgICAgICA/IHVwZGF0ZU9wdGlvbnMoZG9tRWxlbWVudCwgISFoYXNTcmMsIHRhZywgITEpXG4gICAgICAgICAgICA6IG51bGwgIT0gcHJvcHMgJiYgdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIWhhc1NyYywgcHJvcHMsICEwKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJ0ZXh0YXJlYVwiLCBwcm9wcyk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgcHJvcEtleSA9IGhhc1NyY1NldCA9IGhhc1NyYyA9IG51bGw7XG4gICAgICAgICAgZm9yIChwcm9wVmFsdWUgaW4gcHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KHByb3BWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgKChkZWZhdWx0VmFsdWUgPSBwcm9wc1twcm9wVmFsdWVdKSwgbnVsbCAhPSBkZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAocHJvcFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBoYXNTcmMgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBoYXNTcmNTZXQgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICAgIHByb3BLZXkgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9IGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi5cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgdmFsaWRhdGVUZXh0YXJlYVByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgICAgICBpbml0VGV4dGFyZWEoZG9tRWxlbWVudCwgaGFzU3JjLCBoYXNTcmNTZXQsIHByb3BLZXkpO1xuICAgICAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgIHZhbGlkYXRlT3B0aW9uUHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgICAgIGZvciAoY2hlY2tlZCBpbiBwcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoY2hlY2tlZCkgJiZcbiAgICAgICAgICAgICAgKChoYXNTcmMgPSBwcm9wc1tjaGVja2VkXSksIG51bGwgIT0gaGFzU3JjKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQuc2VsZWN0ZWQgPVxuICAgICAgICAgICAgICAgICAgICBoYXNTcmMgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaGFzU3JjICYmXG4gICAgICAgICAgICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBoYXNTcmM7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGNoZWNrZWQsIGhhc1NyYywgcHJvcHMsIG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwiZGlhbG9nXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImJlZm9yZXRvZ2dsZVwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwidG9nZ2xlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJjYW5jZWxcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImNsb3NlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaWZyYW1lXCI6XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInZpZGVvXCI6XG4gICAgICAgIGNhc2UgXCJhdWRpb1wiOlxuICAgICAgICAgIGZvciAoaGFzU3JjID0gMDsgaGFzU3JjIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaGFzU3JjKyspXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1toYXNTcmNdLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImltYWdlXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGV0YWlsc1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJ0b2dnbGVcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJlbWJlZFwiOlxuICAgICAgICBjYXNlIFwic291cmNlXCI6XG4gICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRvbUVsZW1lbnQpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgIGNhc2UgXCJhcmVhXCI6XG4gICAgICAgIGNhc2UgXCJiYXNlXCI6XG4gICAgICAgIGNhc2UgXCJiclwiOlxuICAgICAgICBjYXNlIFwiY29sXCI6XG4gICAgICAgIGNhc2UgXCJoclwiOlxuICAgICAgICBjYXNlIFwia2V5Z2VuXCI6XG4gICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgIGNhc2UgXCJwYXJhbVwiOlxuICAgICAgICBjYXNlIFwidHJhY2tcIjpcbiAgICAgICAgY2FzZSBcIndiclwiOlxuICAgICAgICBjYXNlIFwibWVudWl0ZW1cIjpcbiAgICAgICAgICBmb3IgKGRlZmF1bHRDaGVja2VkIGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0Q2hlY2tlZCkgJiZcbiAgICAgICAgICAgICAgKChoYXNTcmMgPSBwcm9wc1tkZWZhdWx0Q2hlY2tlZF0pLCBudWxsICE9IGhhc1NyYylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChkZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGRlZmF1bHRDaGVja2VkLCBoYXNTcmMsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoaXNDdXN0b21FbGVtZW50KHRhZykpIHtcbiAgICAgICAgICAgIGZvciAoX3Byb3BWYWx1ZSBpbiBwcm9wcylcbiAgICAgICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAoKGhhc1NyYyA9IHByb3BzW19wcm9wVmFsdWVdKSxcbiAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGhhc1NyYyAmJlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcE9uQ3VzdG9tRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBoYXNTcmMsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2b2lkIDBcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoZGVmYXVsdFZhbHVlIGluIHByb3BzKVxuICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0VmFsdWUpICYmXG4gICAgICAgICAgKChoYXNTcmMgPSBwcm9wc1tkZWZhdWx0VmFsdWVdKSxcbiAgICAgICAgICBudWxsICE9IGhhc1NyYyAmJlxuICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGRlZmF1bHRWYWx1ZSwgaGFzU3JjLCBwcm9wcywgbnVsbCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgbGFzdFByb3BzLCBuZXh0UHJvcHMpIHtcbiAgICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCBuZXh0UHJvcHMpO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBcImRpdlwiOlxuICAgICAgICBjYXNlIFwic3BhblwiOlxuICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgIGNhc2UgXCJwYXRoXCI6XG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgIGNhc2UgXCJnXCI6XG4gICAgICAgIGNhc2UgXCJwXCI6XG4gICAgICAgIGNhc2UgXCJsaVwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICB2YXIgbmFtZSA9IG51bGwsXG4gICAgICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgICAgIHZhbHVlID0gbnVsbCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG51bGwsXG4gICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlID0gbnVsbCxcbiAgICAgICAgICAgIGNoZWNrZWQgPSBudWxsLFxuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQgPSBudWxsO1xuICAgICAgICAgIGZvciAocHJvcEtleSBpbiBsYXN0UHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBsYXN0UHJvcCA9IGxhc3RQcm9wc1twcm9wS2V5XTtcbiAgICAgICAgICAgIGlmIChsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgJiYgbnVsbCAhPSBsYXN0UHJvcClcbiAgICAgICAgICAgICAgc3dpdGNoIChwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSA9IGxhc3RQcm9wO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHxcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RQcm9wXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgX3Byb3BLZXk4IGluIG5leHRQcm9wcykge1xuICAgICAgICAgICAgdmFyIHByb3BLZXkgPSBuZXh0UHJvcHNbX3Byb3BLZXk4XTtcbiAgICAgICAgICAgIGxhc3RQcm9wID0gbGFzdFByb3BzW19wcm9wS2V5OF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTgpICYmXG4gICAgICAgICAgICAgIChudWxsICE9IHByb3BLZXkgfHwgbnVsbCAhPSBsYXN0UHJvcClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChfcHJvcEtleTgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidHlwZVwiOlxuICAgICAgICAgICAgICAgICAgdHlwZSA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibmFtZVwiOlxuICAgICAgICAgICAgICAgICAgbmFtZSA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gcHJvcEtleSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ICE9PSBsYXN0UHJvcCAmJlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0UHJvcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhZyA9XG4gICAgICAgICAgICBcImNoZWNrYm94XCIgPT09IGxhc3RQcm9wcy50eXBlIHx8IFwicmFkaW9cIiA9PT0gbGFzdFByb3BzLnR5cGVcbiAgICAgICAgICAgICAgPyBudWxsICE9IGxhc3RQcm9wcy5jaGVja2VkXG4gICAgICAgICAgICAgIDogbnVsbCAhPSBsYXN0UHJvcHMudmFsdWU7XG4gICAgICAgICAgbmV4dFByb3BzID1cbiAgICAgICAgICAgIFwiY2hlY2tib3hcIiA9PT0gbmV4dFByb3BzLnR5cGUgfHwgXCJyYWRpb1wiID09PSBuZXh0UHJvcHMudHlwZVxuICAgICAgICAgICAgICA/IG51bGwgIT0gbmV4dFByb3BzLmNoZWNrZWRcbiAgICAgICAgICAgICAgOiBudWxsICE9IG5leHRQcm9wcy52YWx1ZTtcbiAgICAgICAgICB0YWcgfHxcbiAgICAgICAgICAgICFuZXh0UHJvcHMgfHxcbiAgICAgICAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgfHxcbiAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IGlzIGNoYW5naW5nIGFuIHVuY29udHJvbGxlZCBpbnB1dCB0byBiZSBjb250cm9sbGVkLiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gdW5kZWZpbmVkIHRvIGEgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gITApKTtcbiAgICAgICAgICAhdGFnIHx8XG4gICAgICAgICAgICBuZXh0UHJvcHMgfHxcbiAgICAgICAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgfHxcbiAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IGlzIGNoYW5naW5nIGEgY29udHJvbGxlZCBpbnB1dCB0byBiZSB1bmNvbnRyb2xsZWQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSBhIGRlZmluZWQgdG8gdW5kZWZpbmVkLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCBlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0LmRldi9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50c1wiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSAhMCkpO1xuICAgICAgICAgIHVwZGF0ZUlucHV0KFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICBwcm9wS2V5ID0gdmFsdWUgPSBkZWZhdWx0VmFsdWUgPSBfcHJvcEtleTggPSBudWxsO1xuICAgICAgICAgIGZvciAodHlwZSBpbiBsYXN0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgobGFzdERlZmF1bHRWYWx1ZSA9IGxhc3RQcm9wc1t0eXBlXSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSAmJiBudWxsICE9IGxhc3REZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gbGFzdERlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KHR5cGUpIHx8XG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKG5hbWUgaW4gbmV4dFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKHR5cGUgPSBuZXh0UHJvcHNbbmFtZV0pLFxuICAgICAgICAgICAgICAobGFzdERlZmF1bHRWYWx1ZSA9IGxhc3RQcm9wc1tuYW1lXSksXG4gICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICAgICAgICAgIChudWxsICE9IHR5cGUgfHwgbnVsbCAhPSBsYXN0RGVmYXVsdFZhbHVlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBfcHJvcEtleTggPSB0eXBlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0eXBlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICB0eXBlICE9PSBsYXN0RGVmYXVsdFZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0UHJvcHMgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgdGFnID0gdmFsdWU7XG4gICAgICAgICAgbGFzdFByb3BzID0gcHJvcEtleTtcbiAgICAgICAgICBudWxsICE9IF9wcm9wS2V5OFxuICAgICAgICAgICAgPyB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhdGFnLCBfcHJvcEtleTgsICExKVxuICAgICAgICAgICAgOiAhIWxhc3RQcm9wcyAhPT0gISF0YWcgJiZcbiAgICAgICAgICAgICAgKG51bGwgIT0gbmV4dFByb3BzXG4gICAgICAgICAgICAgICAgPyB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhdGFnLCBuZXh0UHJvcHMsICEwKVxuICAgICAgICAgICAgICAgIDogdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIXRhZywgdGFnID8gW10gOiBcIlwiLCAhMSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgcHJvcEtleSA9IF9wcm9wS2V5OCA9IG51bGw7XG4gICAgICAgICAgZm9yIChkZWZhdWx0VmFsdWUgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKG5hbWUgPSBsYXN0UHJvcHNbZGVmYXVsdFZhbHVlXSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0VmFsdWUpICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBuYW1lICYmXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0VmFsdWUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGRlZmF1bHRWYWx1ZSwgbnVsbCwgbmV4dFByb3BzLCBuYW1lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIGZvciAodmFsdWUgaW4gbmV4dFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKG5hbWUgPSBuZXh0UHJvcHNbdmFsdWVdKSxcbiAgICAgICAgICAgICAgKHR5cGUgPSBsYXN0UHJvcHNbdmFsdWVdKSxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiAobnVsbCAhPSBuYW1lIHx8IG51bGwgIT0gdHlwZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gbmFtZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBuYW1lKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcImBkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgbmFtZSAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgdmFsdWUsIG5hbWUsIG5leHRQcm9wcywgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVUZXh0YXJlYShkb21FbGVtZW50LCBfcHJvcEtleTgsIHByb3BLZXkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTMgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKF9wcm9wS2V5OCA9IGxhc3RQcm9wc1tfcHJvcEtleTEzXSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTEzKSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTEzKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChfcHJvcEtleTEzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID0gITE7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTEzLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGFzdERlZmF1bHRWYWx1ZSBpbiBuZXh0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoX3Byb3BLZXk4ID0gbmV4dFByb3BzW2xhc3REZWZhdWx0VmFsdWVdKSxcbiAgICAgICAgICAgICAgKHByb3BLZXkgPSBsYXN0UHJvcHNbbGFzdERlZmF1bHRWYWx1ZV0pLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkobGFzdERlZmF1bHRWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBfcHJvcEtleTggIT09IHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAobnVsbCAhPSBfcHJvcEtleTggfHwgbnVsbCAhPSBwcm9wS2V5KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChsYXN0RGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9wcm9wS2V5OCAmJlxuICAgICAgICAgICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgX3Byb3BLZXk4O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4LFxuICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgY2FzZSBcImFyZWFcIjpcbiAgICAgICAgY2FzZSBcImJhc2VcIjpcbiAgICAgICAgY2FzZSBcImJyXCI6XG4gICAgICAgIGNhc2UgXCJjb2xcIjpcbiAgICAgICAgY2FzZSBcImVtYmVkXCI6XG4gICAgICAgIGNhc2UgXCJoclwiOlxuICAgICAgICBjYXNlIFwia2V5Z2VuXCI6XG4gICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgIGNhc2UgXCJwYXJhbVwiOlxuICAgICAgICBjYXNlIFwic291cmNlXCI6XG4gICAgICAgIGNhc2UgXCJ0cmFja1wiOlxuICAgICAgICBjYXNlIFwid2JyXCI6XG4gICAgICAgIGNhc2UgXCJtZW51aXRlbVwiOlxuICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTUgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgKF9wcm9wS2V5OCA9IGxhc3RQcm9wc1tfcHJvcEtleTE1XSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTE1KSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTE1KSAmJlxuICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgX3Byb3BLZXkxNSxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICBfcHJvcEtleThcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIGZvciAoY2hlY2tlZCBpbiBuZXh0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoX3Byb3BLZXk4ID0gbmV4dFByb3BzW2NoZWNrZWRdKSxcbiAgICAgICAgICAgICAgKHByb3BLZXkgPSBsYXN0UHJvcHNbY2hlY2tlZF0pLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoY2hlY2tlZCkgJiZcbiAgICAgICAgICAgICAgICBfcHJvcEtleTggIT09IHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAobnVsbCAhPSBfcHJvcEtleTggfHwgbnVsbCAhPSBwcm9wS2V5KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBfcHJvcEtleTgpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTgsXG4gICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoaXNDdXN0b21FbGVtZW50KHRhZykpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTcgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgICAoX3Byb3BLZXk4ID0gbGFzdFByb3BzW19wcm9wS2V5MTddKSxcbiAgICAgICAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxNykgJiZcbiAgICAgICAgICAgICAgICAgIHZvaWQgMCAhPT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTcpICYmXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wT25DdXN0b21FbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5MTcsXG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleThcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3IgKGRlZmF1bHRDaGVja2VkIGluIG5leHRQcm9wcylcbiAgICAgICAgICAgICAgKF9wcm9wS2V5OCA9IG5leHRQcm9wc1tkZWZhdWx0Q2hlY2tlZF0pLFxuICAgICAgICAgICAgICAgIChwcm9wS2V5ID0gbGFzdFByb3BzW2RlZmF1bHRDaGVja2VkXSksXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0Q2hlY2tlZCkgfHxcbiAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCA9PT0gcHJvcEtleSB8fFxuICAgICAgICAgICAgICAgICAgKHZvaWQgMCA9PT0gX3Byb3BLZXk4ICYmIHZvaWQgMCA9PT0gcHJvcEtleSkgfHxcbiAgICAgICAgICAgICAgICAgIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAodmFyIF9wcm9wS2V5MTkgaW4gbGFzdFByb3BzKVxuICAgICAgICAoX3Byb3BLZXk4ID0gbGFzdFByb3BzW19wcm9wS2V5MTldKSxcbiAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxOSkgJiZcbiAgICAgICAgICAgIG51bGwgIT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTkpICYmXG4gICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgX3Byb3BLZXkxOSwgbnVsbCwgbmV4dFByb3BzLCBfcHJvcEtleTgpO1xuICAgICAgZm9yIChsYXN0UHJvcCBpbiBuZXh0UHJvcHMpXG4gICAgICAgIChfcHJvcEtleTggPSBuZXh0UHJvcHNbbGFzdFByb3BdKSxcbiAgICAgICAgICAocHJvcEtleSA9IGxhc3RQcm9wc1tsYXN0UHJvcF0pLFxuICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkobGFzdFByb3ApIHx8XG4gICAgICAgICAgICBfcHJvcEtleTggPT09IHByb3BLZXkgfHxcbiAgICAgICAgICAgIChudWxsID09IF9wcm9wS2V5OCAmJiBudWxsID09IHByb3BLZXkpIHx8XG4gICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgbGFzdFByb3AsIF9wcm9wS2V5OCwgbmV4dFByb3BzLCBwcm9wS2V5KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UHJvcE5hbWVGcm9tQXR0cmlidXRlTmFtZShhdHRyTmFtZSkge1xuICAgICAgc3dpdGNoIChhdHRyTmFtZSkge1xuICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICByZXR1cm4gXCJjbGFzc05hbWVcIjtcbiAgICAgICAgY2FzZSBcImZvclwiOlxuICAgICAgICAgIHJldHVybiBcImh0bWxGb3JcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYXR0ck5hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN0eWxlc09iamVjdEZyb21FbGVtZW50KGRvbUVsZW1lbnQpIHtcbiAgICAgIHZhciBzZXJ2ZXJWYWx1ZUluT2JqZWN0Rm9ybSA9IHt9O1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuc3R5bGU7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbUVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0eWxlTmFtZSA9IGRvbUVsZW1lbnRbaV07XG4gICAgICAgIHNlcnZlclZhbHVlSW5PYmplY3RGb3JtW3N0eWxlTmFtZV0gPVxuICAgICAgICAgIGRvbUVsZW1lbnQuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZU5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlcnZlclZhbHVlSW5PYmplY3RGb3JtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmSHlkcmF0ZWRTdHlsZXMoZG9tRWxlbWVudCwgdmFsdWUkanNjb21wJDAsIHNlcnZlckRpZmZlcmVuY2VzKSB7XG4gICAgICBpZiAobnVsbCAhPSB2YWx1ZSRqc2NvbXAkMCAmJiBcIm9iamVjdFwiICE9PSB0eXBlb2YgdmFsdWUkanNjb21wJDApXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCJcbiAgICAgICAgKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgY2xpZW50VmFsdWU7XG4gICAgICAgIHZhciBkZWxpbWl0ZXIgPSAoY2xpZW50VmFsdWUgPSBcIlwiKSxcbiAgICAgICAgICBzdHlsZU5hbWU7XG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIHZhbHVlJGpzY29tcCQwKVxuICAgICAgICAgIGlmICh2YWx1ZSRqc2NvbXAkMC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZSRqc2NvbXAkMFtzdHlsZU5hbWVdO1xuICAgICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgICBcImJvb2xlYW5cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIFwiXCIgIT09IHZhbHVlICYmXG4gICAgICAgICAgICAgICgwID09PSBzdHlsZU5hbWUuaW5kZXhPZihcIi0tXCIpXG4gICAgICAgICAgICAgICAgPyAoY2hlY2tDU1NQcm9wZXJ0eVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBzdHlsZU5hbWUpLFxuICAgICAgICAgICAgICAgICAgKGNsaWVudFZhbHVlICs9XG4gICAgICAgICAgICAgICAgICAgIGRlbGltaXRlciArIHN0eWxlTmFtZSArIFwiOlwiICsgKFwiXCIgKyB2YWx1ZSkudHJpbSgpKSlcbiAgICAgICAgICAgICAgICA6IFwibnVtYmVyXCIgIT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICAwID09PSB2YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICB1bml0bGVzc051bWJlcnMuaGFzKHN0eWxlTmFtZSlcbiAgICAgICAgICAgICAgICAgID8gKGNoZWNrQ1NTUHJvcGVydHlTdHJpbmdDb2VyY2lvbih2YWx1ZSwgc3R5bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgKGNsaWVudFZhbHVlICs9XG4gICAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyICtcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKHVwcGVyY2FzZVBhdHRlcm4sIFwiLSQxXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UobXNQYXR0ZXJuJDEsIFwiLW1zLVwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgICAgICAgICAgIChcIlwiICsgdmFsdWUpLnRyaW0oKSkpXG4gICAgICAgICAgICAgICAgICA6IChjbGllbnRWYWx1ZSArPVxuICAgICAgICAgICAgICAgICAgICAgIGRlbGltaXRlciArXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCBcIi0kMVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKG1zUGF0dGVybiQxLCBcIi1tcy1cIikgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJweFwiKSxcbiAgICAgICAgICAgICAgKGRlbGltaXRlciA9IFwiO1wiKSk7XG4gICAgICAgICAgfVxuICAgICAgICBjbGllbnRWYWx1ZSA9IGNsaWVudFZhbHVlIHx8IG51bGw7XG4gICAgICAgIHZhbHVlJGpzY29tcCQwID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgdmFsdWUkanNjb21wJDAgIT09IGNsaWVudFZhbHVlICYmXG4gICAgICAgICAgKChjbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSkpLFxuICAgICAgICAgIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZSh2YWx1ZSRqc2NvbXAkMCkgIT09IGNsaWVudFZhbHVlICYmXG4gICAgICAgICAgICAoc2VydmVyRGlmZmVyZW5jZXMuc3R5bGUgPSBnZXRTdHlsZXNPYmplY3RGcm9tRWxlbWVudChkb21FbGVtZW50KSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIHByb3BLZXksXG4gICAgICBhdHRyaWJ1dGVOYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICkge1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGRvbUVsZW1lbnQgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGlmIChudWxsID09PSBkb21FbGVtZW50KVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAobnVsbCAhPSB2YWx1ZSlcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBwcm9wS2V5KSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudCA9PT0gXCJcIiArIHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoeWRyYXRlQm9vbGVhbkF0dHJpYnV0ZShcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICBwcm9wS2V5LFxuICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBkb21FbGVtZW50ID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBpZiAobnVsbCA9PT0gZG9tRWxlbWVudCkge1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgICB9IGVsc2VcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKHZhbHVlKSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoeWRyYXRlQm9vbGVhbmlzaEF0dHJpYnV0ZShcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICBwcm9wS2V5LFxuICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBkb21FbGVtZW50ID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBpZiAobnVsbCA9PT0gZG9tRWxlbWVudClcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICBlbHNlIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBhdHRyaWJ1dGVOYW1lKSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudCA9PT0gXCJcIiArIHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoeWRyYXRlTnVtZXJpY0F0dHJpYnV0ZShcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICBwcm9wS2V5LFxuICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBkb21FbGVtZW50ID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBpZiAobnVsbCA9PT0gZG9tRWxlbWVudClcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAobnVsbCAhPSB2YWx1ZSlcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFpc05hTih2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BLZXkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50ID09PSBcIlwiICsgdmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIGRvbUVsZW1lbnQsIHZhbHVlLCBzZXJ2ZXJEaWZmZXJlbmNlcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGh5ZHJhdGVTYW5pdGl6ZWRBdHRyaWJ1dGUoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgcHJvcEtleSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgaWYgKG51bGwgPT09IGRvbUVsZW1lbnQpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICBlbHNlIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BLZXkpLFxuICAgICAgICAgICAgICAoYXR0cmlidXRlTmFtZSA9IHNhbml0aXplVVJMKFwiXCIgKyB2YWx1ZSkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50ID09PSBhdHRyaWJ1dGVOYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcHJvcHMsIGhvc3RDb250ZXh0KSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgc2VydmVyRGlmZmVyZW5jZXMgPSB7fSxcbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMgPSBuZXcgU2V0KCksXG4gICAgICAgICAgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuYXR0cmlidXRlcyxcbiAgICAgICAgICBpID0gMDtcbiAgICAgICAgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoO1xuICAgICAgICBpKytcbiAgICAgIClcbiAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5hZGQoYXR0cmlidXRlc1tpXS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgaWYgKGlzQ3VzdG9tRWxlbWVudCh0YWcpKVxuICAgICAgICBmb3IgKHZhciBwcm9wS2V5IGluIHByb3BzKSB7XG4gICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcbiAgICAgICAgICAgIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICAgICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSlcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoITAgIT09IHByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZylcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHZhbHVlICYmIFwibnVtYmVyXCIgIT09IHR5cGVvZiB2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNoaWxkcmVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnRleHRDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwicmVmXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IHZhbHVlLl9faHRtbCA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICgodmFsdWUgPSBub3JtYWxpemVIVE1MKGRvbUVsZW1lbnQsIHZhbHVlKSksXG4gICAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUocHJvcEtleSk7XG4gICAgICAgICAgICAgICAgICAgIGRpZmZIeWRyYXRlZFN0eWxlcyhkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvZmZzZXRQYXJlbnRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvZmZzZXRUb3BcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvZmZzZXRMZWZ0XCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib2Zmc2V0V2lkdGhcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvZmZzZXRIZWlnaHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJpc0NvbnRlbnRFZGl0YWJsZVwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm91dGVyVGV4dFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm91dGVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJBc3NpZ25tZW50IHRvIHJlYWQtb25seSBwcm9wZXJ0eSB3aWxsIHJlc3VsdCBpbiBhIG5vLW9wOiBgJXNgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJjbGFzc05hbWVcIjpcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcImNsYXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGVPbkN1c3RvbUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc05hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaG9zdENvbnRleHQuY29udGV4dCA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VOb25lICYmXG4gICAgICAgICAgICAgICAgICAgIFwic3ZnXCIgIT09IHRhZyAmJlxuICAgICAgICAgICAgICAgICAgICBcIm1hdGhcIiAhPT0gdGFnXG4gICAgICAgICAgICAgICAgICAgICAgPyBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGV4dHJhQXR0cmlidXRlcy5kZWxldGUocHJvcEtleSksXG4gICAgICAgICAgICAgICAgICAgICAgKGF0dHJpYnV0ZXMgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZU9uQ3VzdG9tQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgICBmb3IgKHZhbHVlIGluIHByb3BzKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJlxuICAgICAgICAgICAgKChwcm9wS2V5ID0gcHJvcHNbdmFsdWVdKSwgbnVsbCAhPSBwcm9wS2V5KVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHZhbHVlKSlcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcHJvcEtleSAmJlxuICAgICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgcHJvcEtleSk7XG4gICAgICAgICAgICBlbHNlIGlmICghMCAhPT0gcHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKVxuICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJudW1iZXJcIiAhPT0gdHlwZW9mIHByb3BLZXkpIHx8XG4gICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICBcImNoaWxkcmVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC50ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJpbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicmVmXCI6XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICAgIHByb3BLZXkgPSBwcm9wS2V5ID8gcHJvcEtleS5fX2h0bWwgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICBudWxsICE9IHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgKChwcm9wS2V5ID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCBwcm9wS2V5KSksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgIT09IHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoc2VydmVyRGlmZmVyZW5jZXNbdmFsdWVdID0geyBfX2h0bWw6IGF0dHJpYnV0ZXMgfSkpO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNsYXNzTmFtZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0YWJJbmRleFwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwidGFiaW5kZXhcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICBkaWZmSHlkcmF0ZWRTdHlsZXMoZG9tRWxlbWVudCwgcHJvcEtleSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQubXVsdGlwbGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQubXV0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImF1dG9Gb2N1c1wiOlxuICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcImF1dG9mb2N1c1wiKTtcbiAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQuYXV0b2ZvY3VzLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRhXCI6XG4gICAgICAgICAgICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhXCIpO1xuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgXCJzcmNcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiaHJlZlwiOlxuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgIFwiXCIgIT09IHByb3BLZXkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoXCJhXCIgPT09IHRhZyAmJiBcImhyZWZcIiA9PT0gdmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKFwib2JqZWN0XCIgPT09IHRhZyAmJiBcImRhdGFcIiA9PT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBcInNyY1wiID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuIGVtcHR5IHN0cmluZyAoXCJcIikgd2FzIHBhc3NlZCB0byB0aGUgJXMgYXR0cmlidXRlLiBUaGlzIG1heSBjYXVzZSB0aGUgYnJvd3NlciB0byBkb3dubG9hZCB0aGUgd2hvbGUgcGFnZSBhZ2FpbiBvdmVyIHRoZSBuZXR3b3JrLiBUbyBmaXggdGhpcywgZWl0aGVyIGRvIG5vdCByZW5kZXIgdGhlIGVsZW1lbnQgYXQgYWxsIG9yIHBhc3MgbnVsbCB0byAlcyBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZy4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdBbiBlbXB0eSBzdHJpbmcgKFwiXCIpIHdhcyBwYXNzZWQgdG8gdGhlICVzIGF0dHJpYnV0ZS4gVG8gZml4IHRoaXMsIGVpdGhlciBkbyBub3QgcmVuZGVyIHRoZSBlbGVtZW50IGF0IGFsbCBvciBwYXNzIG51bGwgdG8gJXMgaW5zdGVhZCBvZiBhbiBlbXB0eSBzdHJpbmcuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVTYW5pdGl6ZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhY3Rpb25cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZm9ybUFjdGlvblwiOlxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIFwiZm9ybUFjdGlvblwiID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgID8gKGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJuYW1lXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcImZvcm1lbmN0eXBlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcImZvcm1tZXRob2RcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwiZm9ybXRhcmdldFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICA6IChleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwiZW5jdHlwZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJtZXRob2RcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwidGFyZ2V0XCIpKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMgPT09IEVYUEVDVEVEX0ZPUk1fQUNUSU9OX1VSTCkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlU2FuaXRpemVkQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua0hyZWZcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVTYW5pdGl6ZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOmhyZWZcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb250ZW50RWRpdGFibGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVCb29sZWFuaXNoQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50ZWRpdGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzcGVsbENoZWNrXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQm9vbGVhbmlzaEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwic3BlbGxjaGVja1wiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRyYWdnYWJsZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJhdXRvUmV2ZXJzZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImZvY3VzYWJsZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJwcmVzZXJ2ZUFscGhhXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQm9vbGVhbmlzaEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFsbG93RnVsbFNjcmVlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJhc3luY1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJhdXRvUGxheVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJjb250cm9sc1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmVyXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJmb3JtTm9WYWxpZGF0ZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwibG9vcFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJub01vZHVsZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJub1ZhbGlkYXRlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicGxheXNJbmxpbmVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicmVhZE9ubHlcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicmV2ZXJzZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NvcGVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlYW1sZXNzXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIml0ZW1TY29wZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUJvb2xlYW5BdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNhcHR1cmVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZG93bmxvYWRcIjpcbiAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGRvbUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gKGF0dHJpYnV0ZXMgPSB2YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDAgPSBzZXJ2ZXJEaWZmZXJlbmNlcztcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gaSlcbiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMSA9PT0gcHJvcEtleSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG51bGwgIT0gcHJvcEtleSlcbiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgPT09IHByb3BLZXkgJiYgXCJcIiA9PT0gaSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24ocHJvcEtleSwgYXR0cmlidXRlcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PT0gXCJcIiArIHByb3BLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29sc1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyb3dzXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpemVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic3BhblwiOlxuICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBpID0gZG9tRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDAgPSBzZXJ2ZXJEaWZmZXJlbmNlcztcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gaSlcbiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocHJvcEtleSkgfHwgMSA+IHByb3BLZXkpIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChudWxsICE9IHByb3BLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgcHJvcEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKGlzTmFOKHByb3BLZXkpIHx8IDEgPiBwcm9wS2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHByb3BLZXksIGF0dHJpYnV0ZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPT09IFwiXCIgKyBwcm9wS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJvd1NwYW5cIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVOdW1lcmljQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJyb3dzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVOdW1lcmljQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieEhlaWdodFwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieC1oZWlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua0FjdHVhdGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOmFjdHVhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua0FyY3JvbGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOmFyY3JvbGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua1JvbGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOnJvbGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua1Nob3dcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOnNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua1RpdGxlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bGluazp0aXRsZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rVHlwZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6dHlwZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhtbEJhc2VcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhtbDpiYXNlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieG1sTGFuZ1wiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieG1sOmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bWxTcGFjZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieG1sOnNwYWNlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiaW5lcnRcIjpcbiAgICAgICAgICAgICAgICAgIFwiXCIgIT09IHByb3BLZXkgfHxcbiAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvck5ld0Jvb2xlYW5Qcm9wc1dpdGhFbXB0eVZhbHVlW3ZhbHVlXSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGRpZFdhcm5Gb3JOZXdCb29sZWFuUHJvcHNXaXRoRW1wdHlWYWx1ZVt2YWx1ZV0gPSAhMCksXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJSZWNlaXZlZCBhbiBlbXB0eSBzdHJpbmcgZm9yIGEgYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC4gVGhpcyB3aWxsIHRyZWF0IHRoZSBhdHRyaWJ1dGUgYXMgaWYgaXQgd2VyZSBmYWxzZS4gRWl0aGVyIHBhc3MgYGZhbHNlYCB0byBzaWxlbmNlIHRoaXMgd2FybmluZywgb3IgcGFzcyBgdHJ1ZWAgaWYgeW91IHVzZWQgYW4gZW1wdHkgc3RyaW5nIGluIGVhcmxpZXIgdmVyc2lvbnMgb2YgUmVhY3QgdG8gaW5kaWNhdGUgdGhpcyBhdHRyaWJ1dGUgaXMgdHJ1ZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVCb29sZWFuQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhKDIgPCB2YWx1ZS5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgICAgIChcIm9cIiAhPT0gdmFsdWVbMF0gJiYgXCJPXCIgIT09IHZhbHVlWzBdKSB8fFxuICAgICAgICAgICAgICAgICAgICAoXCJuXCIgIT09IHZhbHVlWzFdICYmIFwiTlwiICE9PSB2YWx1ZVsxXSlcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpID0gZ2V0QXR0cmlidXRlQWxpYXModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gITE7XG4gICAgICAgICAgICAgICAgICAgIGhvc3RDb250ZXh0LmNvbnRleHQgPT09IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZSAmJlxuICAgICAgICAgICAgICAgICAgICBcInN2Z1wiICE9PSB0YWcgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJtYXRoXCIgIT09IHRhZ1xuICAgICAgICAgICAgICAgICAgICAgID8gZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgICAgICAgOiAoKGF0dHJpYnV0ZU5hbWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGVOYW1lID0gcG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gcG9zc2libGVTdGFuZGFyZE5hbWVzW2F0dHJpYnV0ZU5hbWVdIHx8IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGF0dHJpYnV0ZU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSAhPT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKChhdHRyaWJ1dGVzID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoaSkpO1xuICAgICAgICAgICAgICAgICAgICBhOiBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgKChhdHRyaWJ1dGVOYW1lID0gZG9tRWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAgICAgKHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgKGkgPSBwcm9wS2V5KSxcbiAgICAgICAgICAgICAgICAgICAgICBpc0F0dHJpYnV0ZU5hbWVTYWZlKHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUuaGFzQXR0cmlidXRlKHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS5nZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpID0gYXR0cmlidXRlTmFtZSA9PT0gXCJcIiArIGkgPyBpIDogYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGF0dHJpYnV0ZU5hbWUgPSBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgNSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLVwiICE9PSBhdHRyaWJ1dGVOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1cIiAhPT0gYXR0cmlidXRlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHZvaWQgMCA9PT0gaSA/IHZvaWQgMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGkgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfHxcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAwIDwgZXh0cmFBdHRyaWJ1dGVzLnNpemUgJiZcbiAgICAgICAgITAgIT09IHByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyAmJlxuICAgICAgICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzKGRvbUVsZW1lbnQsIGV4dHJhQXR0cmlidXRlcywgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgICAgcmV0dXJuIDAgPT09IE9iamVjdC5rZXlzKHNlcnZlckRpZmZlcmVuY2VzKS5sZW5ndGhcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogc2VydmVyRGlmZmVyZW5jZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb3BOYW1lc0xpc3RKb2luKGxpc3QsIGNvbWJpbmF0b3IpIHtcbiAgICAgIHN3aXRjaCAobGlzdC5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIGxpc3RbMF07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gbGlzdFswXSArIFwiIFwiICsgY29tYmluYXRvciArIFwiIFwiICsgbGlzdFsxXTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbGlzdC5zbGljZSgwLCAtMSkuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgIFwiLCBcIiArXG4gICAgICAgICAgICBjb21iaW5hdG9yICtcbiAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgIGxpc3RbbGlzdC5sZW5ndGggLSAxXVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkge1xuICAgICAgcmV0dXJuIDkgPT09IHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlXG4gICAgICAgID8gcm9vdENvbnRhaW5lckVsZW1lbnRcbiAgICAgICAgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRPd25Ib3N0Q29udGV4dChuYW1lc3BhY2VVUkkpIHtcbiAgICAgIHN3aXRjaCAobmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIGNhc2UgU1ZHX05BTUVTUEFDRTpcbiAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VTdmc7XG4gICAgICAgIGNhc2UgTUFUSF9OQU1FU1BBQ0U6XG4gICAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VOb25lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDaGlsZEhvc3RDb250ZXh0UHJvZChwYXJlbnROYW1lc3BhY2UsIHR5cGUpIHtcbiAgICAgIGlmIChwYXJlbnROYW1lc3BhY2UgPT09IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZSlcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnO1xuICAgICAgICAgIGNhc2UgXCJtYXRoXCI6XG4gICAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VNYXRoO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VOb25lO1xuICAgICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50TmFtZXNwYWNlID09PSBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZyAmJlxuICAgICAgICBcImZvcmVpZ25PYmplY3RcIiA9PT0gdHlwZVxuICAgICAgICA/IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZVxuICAgICAgICA6IHBhcmVudE5hbWVzcGFjZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFwidGV4dGFyZWFcIiA9PT0gdHlwZSB8fFxuICAgICAgICBcIm5vc2NyaXB0XCIgPT09IHR5cGUgfHxcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BzLmNoaWxkcmVuIHx8XG4gICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiB8fFxuICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gfHxcbiAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAmJlxuICAgICAgICAgIG51bGwgIT09IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmXG4gICAgICAgICAgbnVsbCAhPSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRBdHRlbXB0RWFnZXJUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIGV2ZW50ID0gd2luZG93LmV2ZW50O1xuICAgICAgaWYgKGV2ZW50ICYmIFwicG9wc3RhdGVcIiA9PT0gZXZlbnQudHlwZSkge1xuICAgICAgICBpZiAoZXZlbnQgPT09IGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCkgcmV0dXJuICExO1xuICAgICAgICBjdXJyZW50UG9wc3RhdGVUcmFuc2l0aW9uRXZlbnQgPSBldmVudDtcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgICAgY3VycmVudFBvcHN0YXRlVHJhbnNpdGlvbkV2ZW50ID0gbnVsbDtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlRXJyb3JJbk5leHRUaWNrKGVycm9yKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0TW91bnQoZG9tRWxlbWVudCwgdHlwZSwgbmV3UHJvcHMpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiYnV0dG9uXCI6XG4gICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICAgIG5ld1Byb3BzLmF1dG9Gb2N1cyAmJiBkb21FbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgICBuZXdQcm9wcy5zcmNcbiAgICAgICAgICAgID8gKGRvbUVsZW1lbnQuc3JjID0gbmV3UHJvcHMuc3JjKVxuICAgICAgICAgICAgOiBuZXdQcm9wcy5zcmNTZXQgJiYgKGRvbUVsZW1lbnQuc3Jjc2V0ID0gbmV3UHJvcHMuc3JjU2V0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0VXBkYXRlKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcykge1xuICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xuICAgICAgZG9tRWxlbWVudFtpbnRlcm5hbFByb3BzS2V5XSA9IG5ld1Byb3BzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldFRleHRDb250ZW50KGRvbUVsZW1lbnQpIHtcbiAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIFwiXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgICAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU2luZ2xldG9uU2NvcGUodHlwZSkge1xuICAgICAgcmV0dXJuIFwiaGVhZFwiID09PSB0eXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgICAgIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgICAgICg5ID09PSBjb250YWluZXIubm9kZVR5cGVcbiAgICAgICAgPyBjb250YWluZXIuYm9keVxuICAgICAgICA6IFwiSFRNTFwiID09PSBjb250YWluZXIubm9kZU5hbWVcbiAgICAgICAgICA/IGNvbnRhaW5lci5vd25lckRvY3VtZW50LmJvZHlcbiAgICAgICAgICA6IGNvbnRhaW5lclxuICAgICAgKS5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsZWFyU3VzcGVuc2VCb3VuZGFyeShwYXJlbnRJbnN0YW5jZSwgc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgICAgdmFyIG5vZGUgPSBzdXNwZW5zZUluc3RhbmNlLFxuICAgICAgICBwb3NzaWJsZVByZWFtYmxlQ29udHJpYnV0aW9uID0gMCxcbiAgICAgICAgZGVwdGggPSAwO1xuICAgICAgZG8ge1xuICAgICAgICB2YXIgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgICAgaWYgKG5leHROb2RlICYmIDggPT09IG5leHROb2RlLm5vZGVUeXBlKVxuICAgICAgICAgIGlmICgoKG5vZGUgPSBuZXh0Tm9kZS5kYXRhKSwgbm9kZSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIDAgPCBwb3NzaWJsZVByZWFtYmxlQ29udHJpYnV0aW9uICYmXG4gICAgICAgICAgICAgIDggPiBwb3NzaWJsZVByZWFtYmxlQ29udHJpYnV0aW9uXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbm9kZSA9IHBvc3NpYmxlUHJlYW1ibGVDb250cmlidXRpb247XG4gICAgICAgICAgICAgIHZhciBvd25lckRvY3VtZW50ID0gcGFyZW50SW5zdGFuY2Uub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgICAgbm9kZSAmIFBSRUFNQkxFX0NPTlRSSUJVVElPTl9IVE1MICYmXG4gICAgICAgICAgICAgICAgcmVsZWFzZVNpbmdsZXRvbkluc3RhbmNlKG93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgICAgICAgICAgICAgbm9kZSAmIFBSRUFNQkxFX0NPTlRSSUJVVElPTl9CT0RZICYmXG4gICAgICAgICAgICAgICAgcmVsZWFzZVNpbmdsZXRvbkluc3RhbmNlKG93bmVyRG9jdW1lbnQuYm9keSk7XG4gICAgICAgICAgICAgIGlmIChub2RlICYgUFJFQU1CTEVfQ09OVFJJQlVUSU9OX0hFQUQpXG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgIG5vZGUgPSBvd25lckRvY3VtZW50LmhlYWQsXG4gICAgICAgICAgICAgICAgICAgIHJlbGVhc2VTaW5nbGV0b25JbnN0YW5jZShub2RlKSxcbiAgICAgICAgICAgICAgICAgICAgb3duZXJEb2N1bWVudCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQ7XG5cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHZhciBuZXh0Tm9kZSRqc2NvbXAkMCA9IG93bmVyRG9jdW1lbnQubmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVOYW1lID0gb3duZXJEb2N1bWVudC5ub2RlTmFtZTtcbiAgICAgICAgICAgICAgICAgIG93bmVyRG9jdW1lbnRbaW50ZXJuYWxIb2lzdGFibGVNYXJrZXJdIHx8XG4gICAgICAgICAgICAgICAgICAgIFwiU0NSSVBUXCIgPT09IG5vZGVOYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIFwiU1RZTEVcIiA9PT0gbm9kZU5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgKFwiTElOS1wiID09PSBub2RlTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIFwic3R5bGVzaGVldFwiID09PSBvd25lckRvY3VtZW50LnJlbC50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgICAgICAgICAgb3duZXJEb2N1bWVudCA9IG5leHROb2RlJGpzY29tcCQwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgwID09PSBkZXB0aCkge1xuICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChuZXh0Tm9kZSk7XG4gICAgICAgICAgICAgIHJldHJ5SWZCbG9ja2VkT24oc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBub2RlID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIG5vZGUgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEFcbiAgICAgICAgICAgICAgPyBkZXB0aCsrXG4gICAgICAgICAgICAgIDogKHBvc3NpYmxlUHJlYW1ibGVDb250cmlidXRpb24gPSBub2RlLmNoYXJDb2RlQXQoMCkgLSA0OCk7XG4gICAgICAgIGVsc2UgcG9zc2libGVQcmVhbWJsZUNvbnRyaWJ1dGlvbiA9IDA7XG4gICAgICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgICAgIH0gd2hpbGUgKG5vZGUpO1xuICAgICAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGlkZUluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnN0eWxlO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2Uuc2V0UHJvcGVydHlcbiAgICAgICAgPyBpbnN0YW5jZS5zZXRQcm9wZXJ0eShcImRpc3BsYXlcIiwgXCJub25lXCIsIFwiaW1wb3J0YW50XCIpXG4gICAgICAgIDogKGluc3RhbmNlLmRpc3BsYXkgPSBcIm5vbmVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlKSB7XG4gICAgICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5oaWRlSW5zdGFuY2UoaW5zdGFuY2UsIHByb3BzKSB7XG4gICAgICBwcm9wcyA9IHByb3BzW1NUWUxFXTtcbiAgICAgIHByb3BzID1cbiAgICAgICAgdm9pZCAwICE9PSBwcm9wcyAmJiBudWxsICE9PSBwcm9wcyAmJiBwcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlcIilcbiAgICAgICAgICA/IHByb3BzLmRpc3BsYXlcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID1cbiAgICAgICAgbnVsbCA9PSBwcm9wcyB8fCBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHByb3BzID8gXCJcIiA6IChcIlwiICsgcHJvcHMpLnRyaW0oKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5oaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICAgICAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IHRleHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyU3BhcmluZ2x5KGNvbnRhaW5lcikge1xuICAgICAgdmFyIG5leHROb2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICBuZXh0Tm9kZSAmJiAxMCA9PT0gbmV4dE5vZGUubm9kZVR5cGUgJiYgKG5leHROb2RlID0gbmV4dE5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgZm9yICg7IG5leHROb2RlOyApIHtcbiAgICAgICAgdmFyIG5vZGUgPSBuZXh0Tm9kZTtcbiAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgc3dpdGNoIChub2RlLm5vZGVOYW1lKSB7XG4gICAgICAgICAgY2FzZSBcIkhUTUxcIjpcbiAgICAgICAgICBjYXNlIFwiSEVBRFwiOlxuICAgICAgICAgIGNhc2UgXCJCT0RZXCI6XG4gICAgICAgICAgICBjbGVhckNvbnRhaW5lclNwYXJpbmdseShub2RlKTtcbiAgICAgICAgICAgIGRldGFjaERlbGV0ZWRJbnN0YW5jZShub2RlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIGNhc2UgXCJTQ1JJUFRcIjpcbiAgICAgICAgICBjYXNlIFwiU1RZTEVcIjpcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIGNhc2UgXCJMSU5LXCI6XG4gICAgICAgICAgICBpZiAoXCJzdHlsZXNoZWV0XCIgPT09IG5vZGUucmVsLnRvTG93ZXJDYXNlKCkpIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuSHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgICAgIGZvciAoOyAxID09PSBpbnN0YW5jZS5ub2RlVHlwZTsgKSB7XG4gICAgICAgIHZhciBhbnlQcm9wcyA9IHByb3BzO1xuICAgICAgICBpZiAoaW5zdGFuY2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gdHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWluUm9vdE9yU2luZ2xldG9uICYmXG4gICAgICAgICAgICAoXCJJTlBVVFwiICE9PSBpbnN0YW5jZS5ub2RlTmFtZSB8fCBcImhpZGRlblwiICE9PSBpbnN0YW5jZS50eXBlKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKCFpblJvb3RPclNpbmdsZXRvbilcbiAgICAgICAgICBpZiAoXCJpbnB1dFwiID09PSB0eXBlICYmIFwiaGlkZGVuXCIgPT09IGluc3RhbmNlLnR5cGUpIHtcbiAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24oYW55UHJvcHMubmFtZSwgXCJuYW1lXCIpO1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBudWxsID09IGFueVByb3BzLm5hbWUgPyBudWxsIDogXCJcIiArIGFueVByb3BzLm5hbWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwiaGlkZGVuXCIgPT09IGFueVByb3BzLnR5cGUgJiZcbiAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSA9PT0gbmFtZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgfSBlbHNlIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgZWxzZSBpZiAoIWluc3RhbmNlW2ludGVybmFsSG9pc3RhYmxlTWFya2VyXSlcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgICAgICAgIGlmICghaW5zdGFuY2UuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpIGJyZWFrO1xuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgICAgICBuYW1lID0gaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwicmVsXCIpO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IG5hbWUgJiZcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIilcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBuYW1lICE9PSBhbnlQcm9wcy5yZWwgfHxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpICE9PVxuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMuaHJlZiB8fCBcIlwiID09PSBhbnlQcm9wcy5ocmVmXG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IGFueVByb3BzLmhyZWYpIHx8XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikgIT09XG4gICAgICAgICAgICAgICAgICAobnVsbCA9PSBhbnlQcm9wcy5jcm9zc09yaWdpblxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBhbnlQcm9wcy5jcm9zc09yaWdpbikgfHxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKSAhPT1cbiAgICAgICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLnRpdGxlID8gbnVsbCA6IGFueVByb3BzLnRpdGxlKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UuaGFzQXR0cmlidXRlKFwiZGF0YS1wcmVjZWRlbmNlXCIpKSBicmVhaztcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgICAgICBuYW1lID0gaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwic3JjXCIpO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG5hbWUgIT09IChudWxsID09IGFueVByb3BzLnNyYyA/IG51bGwgOiBhbnlQcm9wcy5zcmMpIHx8XG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICE9PVxuICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBhbnlQcm9wcy50eXBlID8gbnVsbCA6IGFueVByb3BzLnR5cGUpIHx8XG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiKSAhPT1cbiAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMuY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICA6IGFueVByb3BzLmNyb3NzT3JpZ2luKSkgJiZcbiAgICAgICAgICAgICAgICBuYW1lICYmXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaGFzQXR0cmlidXRlKFwiYXN5bmNcIikgJiZcbiAgICAgICAgICAgICAgICAhaW5zdGFuY2UuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIilcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKGluc3RhbmNlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgaWYgKG51bGwgPT09IGluc3RhbmNlKSBicmVhaztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKGluc3RhbmNlLCB0ZXh0LCBpblJvb3RPclNpbmdsZXRvbikge1xuICAgICAgaWYgKFwiXCIgPT09IHRleHQpIHJldHVybiBudWxsO1xuICAgICAgZm9yICg7IDMgIT09IGluc3RhbmNlLm5vZGVUeXBlOyApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgxICE9PSBpbnN0YW5jZS5ub2RlVHlwZSB8fFxuICAgICAgICAgICAgXCJJTlBVVFwiICE9PSBpbnN0YW5jZS5ub2RlTmFtZSB8fFxuICAgICAgICAgICAgXCJoaWRkZW5cIiAhPT0gaW5zdGFuY2UudHlwZSkgJiZcbiAgICAgICAgICAhaW5Sb290T3JTaW5nbGV0b25cbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBpbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKGluc3RhbmNlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgaWYgKG51bGwgPT09IGluc3RhbmNlKSByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soaW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgKGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSAmJlxuICAgICAgICAgIGluc3RhbmNlLm93bmVyRG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gRE9DVU1FTlRfUkVBRFlfU1RBVEVfQ09NUExFVEUpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWdpc3RlclN1c3BlbnNlSW5zdGFuY2VSZXRyeShpbnN0YW5jZSwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBvd25lckRvY3VtZW50ID0gaW5zdGFuY2Uub3duZXJEb2N1bWVudDtcbiAgICAgIGlmIChcbiAgICAgICAgaW5zdGFuY2UuZGF0YSAhPT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBIHx8XG4gICAgICAgIG93bmVyRG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gRE9DVU1FTlRfUkVBRFlfU1RBVEVfQ09NUExFVEVcbiAgICAgIClcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICBvd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgb3duZXJEb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBsaXN0ZW5lcik7XG4gICAgICAgIGluc3RhbmNlLl9yZWFjdFJldHJ5ID0gbGlzdGVuZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlKG5vZGUpIHtcbiAgICAgIGZvciAoOyBudWxsICE9IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICAgIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7XG4gICAgICAgIGlmICgxID09PSBub2RlVHlwZSB8fCAzID09PSBub2RlVHlwZSkgYnJlYWs7XG4gICAgICAgIGlmICg4ID09PSBub2RlVHlwZSkge1xuICAgICAgICAgIG5vZGVUeXBlID0gbm9kZS5kYXRhO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlVHlwZSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IEZPUk1fU1RBVEVfSVNfTUFUQ0hJTkcgfHxcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBGT1JNX1NUQVRFX0lTX05PVF9NQVRDSElOR1xuICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVIeWRyYXRhYmxlSW5zdGFuY2VGb3JEZXZXYXJuaW5ncyhpbnN0YW5jZSkge1xuICAgICAgaWYgKDEgPT09IGluc3RhbmNlLm5vZGVUeXBlKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcF9jb25zdCA9IGluc3RhbmNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyA9IHt9LFxuICAgICAgICAgICAgYXR0cmlidXRlcyA9IGluc3RhbmNlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICBpIDwgYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgICAgaSsrXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBhdHRyID0gYXR0cmlidXRlc1tpXTtcbiAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1tnZXRQcm9wTmFtZUZyb21BdHRyaWJ1dGVOYW1lKGF0dHIubmFtZSldID1cbiAgICAgICAgICAgIFwic3R5bGVcIiA9PT0gYXR0ci5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgPyBnZXRTdHlsZXNPYmplY3RGcm9tRWxlbWVudChpbnN0YW5jZSlcbiAgICAgICAgICAgICAgOiBhdHRyLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHR5cGU6IEpTQ29tcGlsZXJfdGVtcF9jb25zdCwgcHJvcHM6IHNlcnZlckRpZmZlcmVuY2VzIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gOCA9PT0gaW5zdGFuY2Uubm9kZVR5cGVcbiAgICAgICAgPyB7IHR5cGU6IFwiU3VzcGVuc2VcIiwgcHJvcHM6IHt9IH1cbiAgICAgICAgOiBpbnN0YW5jZS5ub2RlVmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpZmZIeWRyYXRlZFRleHRGb3JEZXZXYXJuaW5ncyh0ZXh0SW5zdGFuY2UsIHRleHQsIHBhcmVudFByb3BzKSB7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gcGFyZW50UHJvcHMgfHxcbiAgICAgICAgITAgIT09IHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXVxuICAgICAgICA/ICh0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID09PSB0ZXh0XG4gICAgICAgICAgICA/ICh0ZXh0SW5zdGFuY2UgPSBudWxsKVxuICAgICAgICAgICAgOiAoKHRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUodGV4dCkpLFxuICAgICAgICAgICAgICAodGV4dEluc3RhbmNlID1cbiAgICAgICAgICAgICAgICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUodGV4dEluc3RhbmNlLm5vZGVWYWx1ZSkgPT09XG4gICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICA6IHRleHRJbnN0YW5jZS5ub2RlVmFsdWUpKSxcbiAgICAgICAgICB0ZXh0SW5zdGFuY2UpXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAgICBzdXNwZW5zZUluc3RhbmNlID0gc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZztcbiAgICAgIGZvciAodmFyIGRlcHRoID0gMDsgc3VzcGVuc2VJbnN0YW5jZTsgKSB7XG4gICAgICAgIGlmICg4ID09PSBzdXNwZW5zZUluc3RhbmNlLm5vZGVUeXBlKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSBzdXNwZW5zZUluc3RhbmNlLmRhdGE7XG4gICAgICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gZGVwdGgpXG4gICAgICAgICAgICAgIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShzdXNwZW5zZUluc3RhbmNlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAoZGF0YSAhPT0gU1VTUEVOU0VfU1RBUlRfREFUQSAmJlxuICAgICAgICAgICAgICBkYXRhICE9PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBICYmXG4gICAgICAgICAgICAgIGRhdGEgIT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkgfHxcbiAgICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgfVxuICAgICAgICBzdXNwZW5zZUluc3RhbmNlID0gc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldEluc3RhbmNlKSB7XG4gICAgICB0YXJnZXRJbnN0YW5jZSA9IHRhcmdldEluc3RhbmNlLnByZXZpb3VzU2libGluZztcbiAgICAgIGZvciAodmFyIGRlcHRoID0gMDsgdGFyZ2V0SW5zdGFuY2U7ICkge1xuICAgICAgICBpZiAoOCA9PT0gdGFyZ2V0SW5zdGFuY2Uubm9kZVR5cGUpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IHRhcmdldEluc3RhbmNlLmRhdGE7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gZGVwdGgpIHJldHVybiB0YXJnZXRJbnN0YW5jZTtcbiAgICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgICAgfSBlbHNlIGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBICYmIGRlcHRoKys7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0SW5zdGFuY2UgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRDb250YWluZXIoY29udGFpbmVyKSB7XG4gICAgICByZXRyeUlmQmxvY2tlZE9uKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAgICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlU2luZ2xldG9uSW5zdGFuY2UoXG4gICAgICB0eXBlLFxuICAgICAgcHJvcHMsXG4gICAgICByb290Q29udGFpbmVySW5zdGFuY2UsXG4gICAgICBob3N0Q29udGV4dCxcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZ0RldlxuICAgICkge1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nRGV2ICYmXG4gICAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyh0eXBlLCBob3N0Q29udGV4dC5hbmNlc3RvckluZm8pO1xuICAgICAgcHJvcHMgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICAgIHR5cGUgPSBwcm9wcy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgaWYgKCF0eXBlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgZXhwZWN0ZWQgYW4gPGh0bWw+IGVsZW1lbnQgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgdG8gZXhpc3QgaW4gdGhlIERvY3VtZW50IGJ1dCBvbmUgd2FzIG5vdCBmb3VuZC4gUmVhY3QgbmV2ZXIgcmVtb3ZlcyB0aGUgZG9jdW1lbnRFbGVtZW50IGZvciBhbnkgRG9jdW1lbnQgaXQgcmVuZGVycyBpbnRvIHNvIHRoZSBjYXVzZSBpcyBsaWtlbHkgaW4gc29tZSBvdGhlciBzY3JpcHQgcnVubmluZyBvbiB0aGlzIHBhZ2UuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIGNhc2UgXCJoZWFkXCI6XG4gICAgICAgICAgdHlwZSA9IHByb3BzLmhlYWQ7XG4gICAgICAgICAgaWYgKCF0eXBlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgZXhwZWN0ZWQgYSA8aGVhZD4gZWxlbWVudCAoZG9jdW1lbnQuaGVhZCkgdG8gZXhpc3QgaW4gdGhlIERvY3VtZW50IGJ1dCBvbmUgd2FzIG5vdCBmb3VuZC4gUmVhY3QgbmV2ZXIgcmVtb3ZlcyB0aGUgaGVhZCBmb3IgYW55IERvY3VtZW50IGl0IHJlbmRlcnMgaW50byBzbyB0aGUgY2F1c2UgaXMgbGlrZWx5IGluIHNvbWUgb3RoZXIgc2NyaXB0IHJ1bm5pbmcgb24gdGhpcyBwYWdlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICBjYXNlIFwiYm9keVwiOlxuICAgICAgICAgIHR5cGUgPSBwcm9wcy5ib2R5O1xuICAgICAgICAgIGlmICghdHlwZSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0IGV4cGVjdGVkIGEgPGJvZHk+IGVsZW1lbnQgKGRvY3VtZW50LmJvZHkpIHRvIGV4aXN0IGluIHRoZSBEb2N1bWVudCBidXQgb25lIHdhcyBub3QgZm91bmQuIFJlYWN0IG5ldmVyIHJlbW92ZXMgdGhlIGJvZHkgZm9yIGFueSBEb2N1bWVudCBpdCByZW5kZXJzIGludG8gc28gdGhlIGNhdXNlIGlzIGxpa2VseSBpbiBzb21lIG90aGVyIHNjcmlwdCBydW5uaW5nIG9uIHRoaXMgcGFnZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwicmVzb2x2ZVNpbmdsZXRvbkluc3RhbmNlIHdhcyBjYWxsZWQgd2l0aCBhbiBlbGVtZW50IHR5cGUgdGhhdCBpcyBub3Qgc3VwcG9ydGVkLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYWNxdWlyZVNpbmdsZXRvbkluc3RhbmNlKFxuICAgICAgdHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBpbnRlcm5hbEluc3RhbmNlSGFuZGxlXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFpbnN0YW5jZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSAmJlxuICAgICAgICBnZXRJbnN0YW5jZUZyb21Ob2RlKGluc3RhbmNlKVxuICAgICAgKSB7XG4gICAgICAgIHZhciB0YWdOYW1lID0gaW5zdGFuY2UudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiWW91IGFyZSBtb3VudGluZyBhIG5ldyAlcyBjb21wb25lbnQgd2hlbiBhIHByZXZpb3VzIG9uZSBoYXMgbm90IGZpcnN0IHVubW91bnRlZC4gSXQgaXMgYW4gZXJyb3IgdG8gcmVuZGVyIG1vcmUgdGhhbiBvbmUgJXMgY29tcG9uZW50IGF0IGEgdGltZSBhbmQgYXR0cmlidXRlcyBhbmQgY2hpbGRyZW4gb2YgdGhlc2UgY29tcG9uZW50cyB3aWxsIGxpa2VseSBmYWlsIGluIHVucHJlZGljdGFibGUgd2F5cy4gUGxlYXNlIG9ubHkgcmVuZGVyIGEgc2luZ2xlIGluc3RhbmNlIG9mIDwlcz4gYW5kIGlmIHlvdSBuZWVkIHRvIG1vdW50IGEgbmV3IG9uZSwgZW5zdXJlIGFueSBwcmV2aW91cyBvbmVzIGhhdmUgdW5tb3VudGVkIGZpcnN0LlwiLFxuICAgICAgICAgIHRhZ05hbWUsXG4gICAgICAgICAgdGFnTmFtZSxcbiAgICAgICAgICB0YWdOYW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcImh0bWxcIjpcbiAgICAgICAgY2FzZSBcImhlYWRcIjpcbiAgICAgICAgY2FzZSBcImJvZHlcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJhY3F1aXJlU2luZ2xldG9uSW5zdGFuY2Ugd2FzIGNhbGxlZCB3aXRoIGFuIGVsZW1lbnQgdHlwZSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgZm9yICh0YWdOYW1lID0gaW5zdGFuY2UuYXR0cmlidXRlczsgdGFnTmFtZS5sZW5ndGg7IClcbiAgICAgICAgaW5zdGFuY2UucmVtb3ZlQXR0cmlidXRlTm9kZSh0YWdOYW1lWzBdKTtcbiAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcyk7XG4gICAgICBpbnN0YW5jZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGludGVybmFsSW5zdGFuY2VIYW5kbGU7XG4gICAgICBpbnN0YW5jZVtpbnRlcm5hbFByb3BzS2V5XSA9IHByb3BzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxlYXNlU2luZ2xldG9uSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgICAgIGZvciAodmFyIGF0dHJpYnV0ZXMgPSBpbnN0YW5jZS5hdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzLmxlbmd0aDsgKVxuICAgICAgICBpbnN0YW5jZS5yZW1vdmVBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZXNbMF0pO1xuICAgICAgZGV0YWNoRGVsZXRlZEluc3RhbmNlKGluc3RhbmNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SG9pc3RhYmxlUm9vdChjb250YWluZXIpIHtcbiAgICAgIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250YWluZXIuZ2V0Um9vdE5vZGVcbiAgICAgICAgPyBjb250YWluZXIuZ2V0Um9vdE5vZGUoKVxuICAgICAgICA6IDkgPT09IGNvbnRhaW5lci5ub2RlVHlwZVxuICAgICAgICAgID8gY29udGFpbmVyXG4gICAgICAgICAgOiBjb250YWluZXIub3duZXJEb2N1bWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlY29ubmVjdEFzKHJlbCwgaHJlZiwgY3Jvc3NPcmlnaW4pIHtcbiAgICAgIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmKSB7XG4gICAgICAgIHZhciBsaW1pdGVkRXNjYXBlZEhyZWYgPVxuICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoaHJlZik7XG4gICAgICAgIGxpbWl0ZWRFc2NhcGVkSHJlZiA9XG4gICAgICAgICAgJ2xpbmtbcmVsPVwiJyArIHJlbCArICdcIl1baHJlZj1cIicgKyBsaW1pdGVkRXNjYXBlZEhyZWYgKyAnXCJdJztcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGNyb3NzT3JpZ2luICYmXG4gICAgICAgICAgKGxpbWl0ZWRFc2NhcGVkSHJlZiArPSAnW2Nyb3Nzb3JpZ2luPVwiJyArIGNyb3NzT3JpZ2luICsgJ1wiXScpO1xuICAgICAgICBwcmVjb25uZWN0c1NldC5oYXMobGltaXRlZEVzY2FwZWRIcmVmKSB8fFxuICAgICAgICAgIChwcmVjb25uZWN0c1NldC5hZGQobGltaXRlZEVzY2FwZWRIcmVmKSxcbiAgICAgICAgICAocmVsID0geyByZWw6IHJlbCwgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLCBocmVmOiBocmVmIH0pLFxuICAgICAgICAgIG51bGwgPT09IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihsaW1pdGVkRXNjYXBlZEhyZWYpICYmXG4gICAgICAgICAgICAoKGhyZWYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKSxcbiAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGhyZWYsIFwibGlua1wiLCByZWwpLFxuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShocmVmKSxcbiAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChocmVmKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRSZXNvdXJjZSh0eXBlLCBjdXJyZW50UHJvcHMsIHBlbmRpbmdQcm9wcywgY3VycmVudFJlc291cmNlKSB7XG4gICAgICB2YXIgcmVzb3VyY2VSb290ID0gKHJlc291cmNlUm9vdCA9IHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpXG4gICAgICAgID8gZ2V0SG9pc3RhYmxlUm9vdChyZXNvdXJjZVJvb3QpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGlmICghcmVzb3VyY2VSb290KVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnXCJyZXNvdXJjZVJvb3RcIiB3YXMgZXhwZWN0ZWQgdG8gZXhpc3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJ1xuICAgICAgICApO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgIGNhc2UgXCJ0aXRsZVwiOlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcy5wcmVjZWRlbmNlICYmXG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcGVuZGluZ1Byb3BzLmhyZWZcbiAgICAgICAgICAgID8gKChwZW5kaW5nUHJvcHMgPSBnZXRTdHlsZUtleShwZW5kaW5nUHJvcHMuaHJlZikpLFxuICAgICAgICAgICAgICAoY3VycmVudFByb3BzID1cbiAgICAgICAgICAgICAgICBnZXRSZXNvdXJjZXNGcm9tUm9vdChyZXNvdXJjZVJvb3QpLmhvaXN0YWJsZVN0eWxlcyksXG4gICAgICAgICAgICAgIChjdXJyZW50UmVzb3VyY2UgPSBjdXJyZW50UHJvcHMuZ2V0KHBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UgfHxcbiAgICAgICAgICAgICAgICAoKGN1cnJlbnRSZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3R5bGVcIixcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wcy5zZXQocGVuZGluZ1Byb3BzLCBjdXJyZW50UmVzb3VyY2UpKSxcbiAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlKVxuICAgICAgICAgICAgOiB7IHR5cGU6IFwidm9pZFwiLCBpbnN0YW5jZTogbnVsbCwgY291bnQ6IDAsIHN0YXRlOiBudWxsIH07XG4gICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IHBlbmRpbmdQcm9wcy5yZWwgJiZcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwZW5kaW5nUHJvcHMuaHJlZiAmJlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcy5wcmVjZWRlbmNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0eXBlID0gZ2V0U3R5bGVLZXkocGVuZGluZ1Byb3BzLmhyZWYpO1xuICAgICAgICAgICAgdmFyIF9zdHlsZXMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChyZXNvdXJjZVJvb3QpLmhvaXN0YWJsZVN0eWxlcyxcbiAgICAgICAgICAgICAgX3Jlc291cmNlID0gX3N0eWxlcy5nZXQodHlwZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFfcmVzb3VyY2UgJiZcbiAgICAgICAgICAgICAgKChyZXNvdXJjZVJvb3QgPSByZXNvdXJjZVJvb3Qub3duZXJEb2N1bWVudCB8fCByZXNvdXJjZVJvb3QpLFxuICAgICAgICAgICAgICAoX3Jlc291cmNlID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3R5bGVzaGVldFwiLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB7IGxvYWRpbmc6IE5vdExvYWRlZCwgcHJlbG9hZDogbnVsbCB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfc3R5bGVzLnNldCh0eXBlLCBfcmVzb3VyY2UpLFxuICAgICAgICAgICAgICAoX3N0eWxlcyA9IHJlc291cmNlUm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkodHlwZSlcbiAgICAgICAgICAgICAgKSkgJiZcbiAgICAgICAgICAgICAgICAhX3N0eWxlcy5fcCAmJlxuICAgICAgICAgICAgICAgICgoX3Jlc291cmNlLmluc3RhbmNlID0gX3N0eWxlcyksXG4gICAgICAgICAgICAgICAgKF9yZXNvdXJjZS5zdGF0ZS5sb2FkaW5nID0gTG9hZGVkIHwgSW5zZXJ0ZWQpKSxcbiAgICAgICAgICAgICAgIXByZWxvYWRQcm9wc01hcC5oYXModHlwZSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIHByZWxvYWRQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICByZWw6IFwicHJlbG9hZFwiLFxuICAgICAgICAgICAgICAgIGFzOiBcInN0eWxlXCIsXG4gICAgICAgICAgICAgICAgaHJlZjogcGVuZGluZ1Byb3BzLmhyZWYsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHBlbmRpbmdQcm9wcy5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHBlbmRpbmdQcm9wcy5pbnRlZ3JpdHksXG4gICAgICAgICAgICAgICAgbWVkaWE6IHBlbmRpbmdQcm9wcy5tZWRpYSxcbiAgICAgICAgICAgICAgICBocmVmTGFuZzogcGVuZGluZ1Byb3BzLmhyZWZMYW5nLFxuICAgICAgICAgICAgICAgIHJlZmVycmVyUG9saWN5OiBwZW5kaW5nUHJvcHMucmVmZXJyZXJQb2xpY3lcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcHJlbG9hZFByb3BzTWFwLnNldCh0eXBlLCBwcmVsb2FkUHJvcHMpO1xuICAgICAgICAgICAgICBfc3R5bGVzIHx8XG4gICAgICAgICAgICAgICAgcHJlbG9hZFN0eWxlc2hlZXQoXG4gICAgICAgICAgICAgICAgICByZXNvdXJjZVJvb3QsXG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgcHJlbG9hZFByb3BzLFxuICAgICAgICAgICAgICAgICAgX3Jlc291cmNlLnN0YXRlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJyZW50UHJvcHMgJiYgbnVsbCA9PT0gY3VycmVudFJlc291cmNlKVxuICAgICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICAgKChwZW5kaW5nUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgXCJcXG5cXG4gIC0gXCIgK1xuICAgICAgICAgICAgICAgICAgZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihjdXJyZW50UHJvcHMpICtcbiAgICAgICAgICAgICAgICAgIFwiXFxuICArIFwiICtcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlTGlua0ZvclJlc291cmNlRXJyb3JERVYocGVuZGluZ1Byb3BzKSksXG4gICAgICAgICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIDxsaW5rPiBub3QgdG8gdXBkYXRlIHRvIGJlIHVwZGF0ZWQgdG8gYSBzdHlsZXNoZWV0IHdpdGggcHJlY2VkZW5jZS4gQ2hlY2sgdGhlIGByZWxgLCBgaHJlZmAsIGFuZCBgcHJlY2VkZW5jZWAgcHJvcHMgb2YgdGhpcyBjb21wb25lbnQuIEFsdGVybmF0aXZlbHksIGNoZWNrIHdoZXRoZXIgdHdvIGRpZmZlcmVudCA8bGluaz4gY29tcG9uZW50cyByZW5kZXIgaW4gdGhlIHNhbWUgc2xvdCBvciBzaGFyZSB0aGUgc2FtZSBrZXkuXCIgK1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUHJvcHNcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIF9yZXNvdXJjZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnRQcm9wcyAmJiBudWxsICE9PSBjdXJyZW50UmVzb3VyY2UpXG4gICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICgocGVuZGluZ1Byb3BzID1cbiAgICAgICAgICAgICAgICBcIlxcblxcbiAgLSBcIiArXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihjdXJyZW50UHJvcHMpICtcbiAgICAgICAgICAgICAgICBcIlxcbiAgKyBcIiArXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihwZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBzdHlsZXNoZWV0IHdpdGggcHJlY2VkZW5jZSB0byBub3QgYmUgdXBkYXRlZCB0byBhIGRpZmZlcmVudCBraW5kIG9mIDxsaW5rPi4gQ2hlY2sgdGhlIGByZWxgLCBgaHJlZmAsIGFuZCBgcHJlY2VkZW5jZWAgcHJvcHMgb2YgdGhpcyBjb21wb25lbnQuIEFsdGVybmF0aXZlbHksIGNoZWNrIHdoZXRoZXIgdHdvIGRpZmZlcmVudCA8bGluaz4gY29tcG9uZW50cyByZW5kZXIgaW4gdGhlIHNhbWUgc2xvdCBvciBzaGFyZSB0aGUgc2FtZSBrZXkuXCIgK1xuICAgICAgICAgICAgICAgICAgcGVuZGluZ1Byb3BzXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50UHJvcHMgPSBwZW5kaW5nUHJvcHMuYXN5bmMpLFxuICAgICAgICAgICAgKHBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcy5zcmMpLFxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcyAmJlxuICAgICAgICAgICAgY3VycmVudFByb3BzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjdXJyZW50UHJvcHMgJiZcbiAgICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjdXJyZW50UHJvcHNcbiAgICAgICAgICAgICAgPyAoKHBlbmRpbmdQcm9wcyA9IGdldFNjcmlwdEtleShwZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudFByb3BzID1cbiAgICAgICAgICAgICAgICAgIGdldFJlc291cmNlc0Zyb21Sb290KHJlc291cmNlUm9vdCkuaG9pc3RhYmxlU2NyaXB0cyksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRSZXNvdXJjZSA9IGN1cnJlbnRQcm9wcy5nZXQocGVuZGluZ1Byb3BzKSksXG4gICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlIHx8XG4gICAgICAgICAgICAgICAgICAoKGN1cnJlbnRSZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzY3JpcHRcIixcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBjdXJyZW50UHJvcHMuc2V0KHBlbmRpbmdQcm9wcywgY3VycmVudFJlc291cmNlKSksXG4gICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlKVxuICAgICAgICAgICAgICA6IHsgdHlwZTogXCJ2b2lkXCIsIGluc3RhbmNlOiBudWxsLCBjb3VudDogMCwgc3RhdGU6IG51bGwgfVxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAnZ2V0UmVzb3VyY2UgZW5jb3VudGVyZWQgYSB0eXBlIGl0IGRpZCBub3QgZXhwZWN0OiBcIicgK1xuICAgICAgICAgICAgICB0eXBlICtcbiAgICAgICAgICAgICAgJ1wiLiB0aGlzIGlzIGEgYnVnIGluIFJlYWN0LidcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUxpbmtGb3JSZXNvdXJjZUVycm9yREVWKHByb3BzKSB7XG4gICAgICB2YXIgZGVzY3JpYmVkUHJvcHMgPSAwLFxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiPGxpbmtcIjtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5yZWxcbiAgICAgICAgPyAoZGVzY3JpYmVkUHJvcHMrKywgKGRlc2NyaXB0aW9uICs9ICcgcmVsPVwiJyArIHByb3BzLnJlbCArICdcIicpKVxuICAgICAgICA6IGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIFwicmVsXCIpICYmXG4gICAgICAgICAgKGRlc2NyaWJlZFByb3BzKyssXG4gICAgICAgICAgKGRlc2NyaXB0aW9uICs9XG4gICAgICAgICAgICAnIHJlbD1cIicgK1xuICAgICAgICAgICAgKG51bGwgPT09IHByb3BzLnJlbCA/IFwibnVsbFwiIDogXCJpbnZhbGlkIHR5cGUgXCIgKyB0eXBlb2YgcHJvcHMucmVsKSArXG4gICAgICAgICAgICAnXCInKSk7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMuaHJlZlxuICAgICAgICA/IChkZXNjcmliZWRQcm9wcysrLCAoZGVzY3JpcHRpb24gKz0gJyBocmVmPVwiJyArIHByb3BzLmhyZWYgKyAnXCInKSlcbiAgICAgICAgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBcImhyZWZcIikgJiZcbiAgICAgICAgICAoZGVzY3JpYmVkUHJvcHMrKyxcbiAgICAgICAgICAoZGVzY3JpcHRpb24gKz1cbiAgICAgICAgICAgICcgaHJlZj1cIicgK1xuICAgICAgICAgICAgKG51bGwgPT09IHByb3BzLmhyZWZcbiAgICAgICAgICAgICAgPyBcIm51bGxcIlxuICAgICAgICAgICAgICA6IFwiaW52YWxpZCB0eXBlIFwiICsgdHlwZW9mIHByb3BzLmhyZWYpICtcbiAgICAgICAgICAgICdcIicpKTtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5wcmVjZWRlbmNlXG4gICAgICAgID8gKGRlc2NyaWJlZFByb3BzKyssXG4gICAgICAgICAgKGRlc2NyaXB0aW9uICs9ICcgcHJlY2VkZW5jZT1cIicgKyBwcm9wcy5wcmVjZWRlbmNlICsgJ1wiJykpXG4gICAgICAgIDogaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywgXCJwcmVjZWRlbmNlXCIpICYmXG4gICAgICAgICAgKGRlc2NyaWJlZFByb3BzKyssXG4gICAgICAgICAgKGRlc2NyaXB0aW9uICs9XG4gICAgICAgICAgICBcIiBwcmVjZWRlbmNlPXtcIiArXG4gICAgICAgICAgICAobnVsbCA9PT0gcHJvcHMucHJlY2VkZW5jZVxuICAgICAgICAgICAgICA/IFwibnVsbFwiXG4gICAgICAgICAgICAgIDogXCJpbnZhbGlkIHR5cGUgXCIgKyB0eXBlb2YgcHJvcHMucHJlY2VkZW5jZSkgK1xuICAgICAgICAgICAgXCJ9XCIpKTtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3BzKS5sZW5ndGggPiBkZXNjcmliZWRQcm9wcyAmJlxuICAgICAgICAoZGVzY3JpcHRpb24gKz0gXCIgLi4uXCIpO1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uICsgXCIgLz5cIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3R5bGVLZXkoaHJlZikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ2hyZWY9XCInICsgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArICdcIidcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KSB7XG4gICAgICByZXR1cm4gJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXVsnICsga2V5ICsgXCJdXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0eWxlc2hlZXRQcm9wc0Zyb21SYXdQcm9wcyhyYXdQcm9wcykge1xuICAgICAgcmV0dXJuIGFzc2lnbih7fSwgcmF3UHJvcHMsIHtcbiAgICAgICAgXCJkYXRhLXByZWNlZGVuY2VcIjogcmF3UHJvcHMucHJlY2VkZW5jZSxcbiAgICAgICAgcHJlY2VkZW5jZTogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWxvYWRTdHlsZXNoZWV0KG93bmVyRG9jdW1lbnQsIGtleSwgcHJlbG9hZFByb3BzLCBzdGF0ZSkge1xuICAgICAgb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnbGlua1tyZWw9XCJwcmVsb2FkXCJdW2FzPVwic3R5bGVcIl1bJyArIGtleSArIFwiXVwiXG4gICAgICApXG4gICAgICAgID8gKHN0YXRlLmxvYWRpbmcgPSBMb2FkZWQpXG4gICAgICAgIDogKChrZXkgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKSxcbiAgICAgICAgICAoc3RhdGUucHJlbG9hZCA9IGtleSksXG4gICAgICAgICAga2V5LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoc3RhdGUubG9hZGluZyB8PSBMb2FkZWQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGtleS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChzdGF0ZS5sb2FkaW5nIHw9IEVycm9yZWQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGtleSwgXCJsaW5rXCIsIHByZWxvYWRQcm9wcyksXG4gICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShrZXkpLFxuICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChrZXkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U2NyaXB0S2V5KHNyYykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ1tzcmM9XCInICsgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhzcmMpICsgJ1wiXSdcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpIHtcbiAgICAgIHJldHVybiBcInNjcmlwdFthc3luY11cIiArIGtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWNxdWlyZVJlc291cmNlKGhvaXN0YWJsZVJvb3QsIHJlc291cmNlLCBwcm9wcykge1xuICAgICAgcmVzb3VyY2UuY291bnQrKztcbiAgICAgIGlmIChudWxsID09PSByZXNvdXJjZS5pbnN0YW5jZSlcbiAgICAgICAgc3dpdGNoIChyZXNvdXJjZS50eXBlKSB7XG4gICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICdzdHlsZVtkYXRhLWhyZWZ+PVwiJyArXG4gICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3Rlcyhwcm9wcy5ocmVmKSArXG4gICAgICAgICAgICAgICAgJ1wiXSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHJlc291cmNlLmluc3RhbmNlID0gaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YXIgc3R5bGVQcm9wcyA9IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgICAgXCJkYXRhLWhyZWZcIjogcHJvcHMuaHJlZixcbiAgICAgICAgICAgICAgXCJkYXRhLXByZWNlZGVuY2VcIjogcHJvcHMucHJlY2VkZW5jZSxcbiAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgcHJlY2VkZW5jZTogbnVsbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IChcbiAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICkuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhpbnN0YW5jZSwgXCJzdHlsZVwiLCBzdHlsZVByb3BzKTtcbiAgICAgICAgICAgIGluc2VydFN0eWxlc2hlZXQoaW5zdGFuY2UsIHByb3BzLnByZWNlZGVuY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgICAgcmV0dXJuIChyZXNvdXJjZS5pbnN0YW5jZSA9IGluc3RhbmNlKTtcbiAgICAgICAgICBjYXNlIFwic3R5bGVzaGVldFwiOlxuICAgICAgICAgICAgc3R5bGVQcm9wcyA9IGdldFN0eWxlS2V5KHByb3BzLmhyZWYpO1xuICAgICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShzdHlsZVByb3BzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChfaW5zdGFuY2UpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQpLFxuICAgICAgICAgICAgICAgIChyZXNvdXJjZS5pbnN0YW5jZSA9IF9pbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShfaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaW5zdGFuY2UgPSBzdHlsZXNoZWV0UHJvcHNGcm9tUmF3UHJvcHMocHJvcHMpO1xuICAgICAgICAgICAgKHN0eWxlUHJvcHMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KHN0eWxlUHJvcHMpKSAmJlxuICAgICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQoaW5zdGFuY2UsIHN0eWxlUHJvcHMpO1xuICAgICAgICAgICAgX2luc3RhbmNlID0gKFxuICAgICAgICAgICAgICBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgKS5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoX2luc3RhbmNlKTtcbiAgICAgICAgICAgIHZhciBsaW5rSW5zdGFuY2UgPSBfaW5zdGFuY2U7XG4gICAgICAgICAgICBsaW5rSW5zdGFuY2UuX3AgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICBsaW5rSW5zdGFuY2Uub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoX2luc3RhbmNlLCBcImxpbmtcIiwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZDtcbiAgICAgICAgICAgIGluc2VydFN0eWxlc2hlZXQoX2luc3RhbmNlLCBwcm9wcy5wcmVjZWRlbmNlLCBob2lzdGFibGVSb290KTtcbiAgICAgICAgICAgIHJldHVybiAocmVzb3VyY2UuaW5zdGFuY2UgPSBfaW5zdGFuY2UpO1xuICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldFNjcmlwdEtleShwcm9wcy5zcmMpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoc3R5bGVQcm9wcyA9IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICBnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoX2luc3RhbmNlKVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChyZXNvdXJjZS5pbnN0YW5jZSA9IHN0eWxlUHJvcHMpLFxuICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoc3R5bGVQcm9wcyksXG4gICAgICAgICAgICAgICAgc3R5bGVQcm9wc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaW5zdGFuY2UgPSBwcm9wcztcbiAgICAgICAgICAgIGlmICgoc3R5bGVQcm9wcyA9IHByZWxvYWRQcm9wc01hcC5nZXQoX2luc3RhbmNlKSkpXG4gICAgICAgICAgICAgIChpbnN0YW5jZSA9IGFzc2lnbih7fSwgcHJvcHMpKSxcbiAgICAgICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclNjcmlwdChpbnN0YW5jZSwgc3R5bGVQcm9wcyk7XG4gICAgICAgICAgICBob2lzdGFibGVSb290ID0gaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgICBzdHlsZVByb3BzID0gaG9pc3RhYmxlUm9vdC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShzdHlsZVByb3BzKTtcbiAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKHN0eWxlUHJvcHMsIFwibGlua1wiLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICBob2lzdGFibGVSb290LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVQcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gKHJlc291cmNlLmluc3RhbmNlID0gc3R5bGVQcm9wcyk7XG4gICAgICAgICAgY2FzZSBcInZvaWRcIjpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgJ2FjcXVpcmVSZXNvdXJjZSBlbmNvdW50ZXJlZCBhIHJlc291cmNlIHR5cGUgaXQgZGlkIG5vdCBleHBlY3Q6IFwiJyArXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UudHlwZSArXG4gICAgICAgICAgICAgICAgJ1wiLiB0aGlzIGlzIGEgYnVnIGluIFJlYWN0LidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IHJlc291cmNlLnR5cGUgJiZcbiAgICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIEluc2VydGVkKSA9PT0gTm90TG9hZGVkICYmXG4gICAgICAgICAgKChpbnN0YW5jZSA9IHJlc291cmNlLmluc3RhbmNlKSxcbiAgICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZCksXG4gICAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChpbnN0YW5jZSwgcHJvcHMucHJlY2VkZW5jZSwgaG9pc3RhYmxlUm9vdCkpO1xuICAgICAgcmV0dXJuIHJlc291cmNlLmluc3RhbmNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRTdHlsZXNoZWV0KGluc3RhbmNlLCBwcmVjZWRlbmNlLCByb290KSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgbm9kZXMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAnbGlua1tyZWw9XCJzdHlsZXNoZWV0XCJdW2RhdGEtcHJlY2VkZW5jZV0sc3R5bGVbZGF0YS1wcmVjZWRlbmNlXSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhc3QgPSBub2Rlcy5sZW5ndGggPyBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXSA6IG51bGwsXG4gICAgICAgICAgcHJpb3IgPSBsYXN0LFxuICAgICAgICAgIGkgPSAwO1xuICAgICAgICBpIDwgbm9kZXMubGVuZ3RoO1xuICAgICAgICBpKytcbiAgICAgICkge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZiAobm9kZS5kYXRhc2V0LnByZWNlZGVuY2UgPT09IHByZWNlZGVuY2UpIHByaW9yID0gbm9kZTtcbiAgICAgICAgZWxzZSBpZiAocHJpb3IgIT09IGxhc3QpIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJpb3JcbiAgICAgICAgPyBwcmlvci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpbnN0YW5jZSwgcHJpb3IubmV4dFNpYmxpbmcpXG4gICAgICAgIDogKChwcmVjZWRlbmNlID0gOSA9PT0gcm9vdC5ub2RlVHlwZSA/IHJvb3QuaGVhZCA6IHJvb3QpLFxuICAgICAgICAgIHByZWNlZGVuY2UuaW5zZXJ0QmVmb3JlKGluc3RhbmNlLCBwcmVjZWRlbmNlLmZpcnN0Q2hpbGQpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KHN0eWxlc2hlZXRQcm9wcywgcHJlbG9hZFByb3BzKSB7XG4gICAgICBudWxsID09IHN0eWxlc2hlZXRQcm9wcy5jcm9zc09yaWdpbiAmJlxuICAgICAgICAoc3R5bGVzaGVldFByb3BzLmNyb3NzT3JpZ2luID0gcHJlbG9hZFByb3BzLmNyb3NzT3JpZ2luKTtcbiAgICAgIG51bGwgPT0gc3R5bGVzaGVldFByb3BzLnJlZmVycmVyUG9saWN5ICYmXG4gICAgICAgIChzdHlsZXNoZWV0UHJvcHMucmVmZXJyZXJQb2xpY3kgPSBwcmVsb2FkUHJvcHMucmVmZXJyZXJQb2xpY3kpO1xuICAgICAgbnVsbCA9PSBzdHlsZXNoZWV0UHJvcHMudGl0bGUgJiZcbiAgICAgICAgKHN0eWxlc2hlZXRQcm9wcy50aXRsZSA9IHByZWxvYWRQcm9wcy50aXRsZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0KHNjcmlwdFByb3BzLCBwcmVsb2FkUHJvcHMpIHtcbiAgICAgIG51bGwgPT0gc2NyaXB0UHJvcHMuY3Jvc3NPcmlnaW4gJiZcbiAgICAgICAgKHNjcmlwdFByb3BzLmNyb3NzT3JpZ2luID0gcHJlbG9hZFByb3BzLmNyb3NzT3JpZ2luKTtcbiAgICAgIG51bGwgPT0gc2NyaXB0UHJvcHMucmVmZXJyZXJQb2xpY3kgJiZcbiAgICAgICAgKHNjcmlwdFByb3BzLnJlZmVycmVyUG9saWN5ID0gcHJlbG9hZFByb3BzLnJlZmVycmVyUG9saWN5KTtcbiAgICAgIG51bGwgPT0gc2NyaXB0UHJvcHMuaW50ZWdyaXR5ICYmXG4gICAgICAgIChzY3JpcHRQcm9wcy5pbnRlZ3JpdHkgPSBwcmVsb2FkUHJvcHMuaW50ZWdyaXR5KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SHlkcmF0YWJsZUhvaXN0YWJsZUNhY2hlKHR5cGUsIGtleUF0dHJpYnV0ZSwgb3duZXJEb2N1bWVudCkge1xuICAgICAgaWYgKG51bGwgPT09IHRhZ0NhY2hlcykge1xuICAgICAgICB2YXIgY2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhciBjYWNoZXMgPSAodGFnQ2FjaGVzID0gbmV3IE1hcCgpKTtcbiAgICAgICAgY2FjaGVzLnNldChvd25lckRvY3VtZW50LCBjYWNoZSk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKGNhY2hlcyA9IHRhZ0NhY2hlcyksXG4gICAgICAgICAgKGNhY2hlID0gY2FjaGVzLmdldChvd25lckRvY3VtZW50KSksXG4gICAgICAgICAgY2FjaGUgfHwgKChjYWNoZSA9IG5ldyBNYXAoKSksIGNhY2hlcy5zZXQob3duZXJEb2N1bWVudCwgY2FjaGUpKTtcbiAgICAgIGlmIChjYWNoZS5oYXModHlwZSkpIHJldHVybiBjYWNoZTtcbiAgICAgIGNhY2hlLnNldCh0eXBlLCBudWxsKTtcbiAgICAgIG93bmVyRG9jdW1lbnQgPSBvd25lckRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHR5cGUpO1xuICAgICAgZm9yIChjYWNoZXMgPSAwOyBjYWNoZXMgPCBvd25lckRvY3VtZW50Lmxlbmd0aDsgY2FjaGVzKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBvd25lckRvY3VtZW50W2NhY2hlc107XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgbm9kZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gfHxcbiAgICAgICAgICAgIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHxcbiAgICAgICAgICAgIChcImxpbmtcIiA9PT0gdHlwZSAmJiBcInN0eWxlc2hlZXRcIiA9PT0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJyZWxcIikpXG4gICAgICAgICAgKSAmJlxuICAgICAgICAgIG5vZGUubmFtZXNwYWNlVVJJICE9PSBTVkdfTkFNRVNQQUNFXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBub2RlS2V5ID0gbm9kZS5nZXRBdHRyaWJ1dGUoa2V5QXR0cmlidXRlKSB8fCBcIlwiO1xuICAgICAgICAgIG5vZGVLZXkgPSB0eXBlICsgbm9kZUtleTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBjYWNoZS5nZXQobm9kZUtleSk7XG4gICAgICAgICAgZXhpc3RpbmcgPyBleGlzdGluZy5wdXNoKG5vZGUpIDogY2FjaGUuc2V0KG5vZGVLZXksIFtub2RlXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWNoZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRIb2lzdGFibGUoaG9pc3RhYmxlUm9vdCwgdHlwZSwgaW5zdGFuY2UpIHtcbiAgICAgIGhvaXN0YWJsZVJvb3QgPSBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdDtcbiAgICAgIGhvaXN0YWJsZVJvb3QuaGVhZC5pbnNlcnRCZWZvcmUoXG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBcInRpdGxlXCIgPT09IHR5cGUgPyBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXCJoZWFkID4gdGl0bGVcIikgOiBudWxsXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0hvc3RIb2lzdGFibGVUeXBlKHR5cGUsIHByb3BzLCBob3N0Q29udGV4dCkge1xuICAgICAgdmFyIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCA9XG4gICAgICAgICFob3N0Q29udGV4dC5hbmNlc3RvckluZm8uY29udGFpbmVyVGFnSW5TY29wZTtcbiAgICAgIGlmIChcbiAgICAgICAgaG9zdENvbnRleHQuY29udGV4dCA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VTdmcgfHxcbiAgICAgICAgbnVsbCAhPSBwcm9wcy5pdGVtUHJvcFxuICAgICAgKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICFvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgfHxcbiAgICAgICAgICAgIG51bGwgPT0gcHJvcHMuaXRlbVByb3AgfHxcbiAgICAgICAgICAgIChcIm1ldGFcIiAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICBcInRpdGxlXCIgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgXCJzdHlsZVwiICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgIFwibGlua1wiICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgIFwic2NyaXB0XCIgIT09IHR5cGUpIHx8XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkNhbm5vdCByZW5kZXIgYSA8JXM+IG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQgaWYgaXQgaGFzIGFuIGBpdGVtUHJvcGAgcHJvcC4gYGl0ZW1Qcm9wYCBzdWdnZXN0cyB0aGUgdGFnIGJlbG9uZ3MgdG8gYW4gYGl0ZW1TY29wZWAgd2hpY2ggY2FuIGFwcGVhciBhbnl3aGVyZSBpbiB0aGUgRE9NLiBJZiB5b3Ugd2VyZSBpbnRlbmRpbmcgZm9yIFJlYWN0IHRvIGhvaXN0IHRoaXMgPCVzPiByZW1vdmUgdGhlIGBpdGVtUHJvcGAgcHJvcC4gT3RoZXJ3aXNlLCB0cnkgbW92aW5nIHRoaXMgdGFnIGludG8gdGhlIDxoZWFkPiBvciA8Ym9keT4gb2YgdGhlIERvY3VtZW50LlwiLFxuICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgY2FzZSBcInRpdGxlXCI6XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMucHJlY2VkZW5jZSB8fFxuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLmhyZWYgfHxcbiAgICAgICAgICAgIFwiXCIgPT09IHByb3BzLmhyZWZcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdDYW5ub3QgcmVuZGVyIGEgPHN0eWxlPiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQga25vd2luZyBpdHMgcHJlY2VkZW5jZSBhbmQgYSB1bmlxdWUgaHJlZiBrZXkuIFJlYWN0IGNhbiBob2lzdCBhbmQgZGVkdXBsaWNhdGUgPHN0eWxlPiB0YWdzIGlmIHlvdSBwcm92aWRlIGEgYHByZWNlZGVuY2VgIHByb3AgYWxvbmcgd2l0aCBhbiBgaHJlZmAgcHJvcCB0aGF0IGRvZXMgbm90IGNvbmZsaWN0IHdpdGggdGhlIGBocmVmYCB2YWx1ZXMgdXNlZCBpbiBhbnkgb3RoZXIgaG9pc3RlZCA8c3R5bGU+IG9yIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiAuLi4+IHRhZ3MuICBOb3RlIHRoYXQgaG9pc3RpbmcgPHN0eWxlPiB0YWdzIGlzIGNvbnNpZGVyZWQgYW4gYWR2YW5jZWQgZmVhdHVyZSB0aGF0IG1vc3Qgd2lsbCBub3QgdXNlIGRpcmVjdGx5LiBDb25zaWRlciBtb3ZpbmcgdGhlIDxzdHlsZT4gdGFnIHRvIHRoZSA8aGVhZD4gb3IgY29uc2lkZXIgYWRkaW5nIGEgYHByZWNlZGVuY2U9XCJkZWZhdWx0XCJgIGFuZCBgaHJlZj1cInNvbWUgdW5pcXVlIHJlc291cmNlIGlkZW50aWZpZXJcImAuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMucmVsIHx8XG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMuaHJlZiB8fFxuICAgICAgICAgICAgXCJcIiA9PT0gcHJvcHMuaHJlZiB8fFxuICAgICAgICAgICAgcHJvcHMub25Mb2FkIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkVycm9yXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwic3R5bGVzaGVldFwiID09PSBwcm9wcy5yZWwgJiZcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BzLnByZWNlZGVuY2VcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0eXBlID0gcHJvcHMuaHJlZjtcbiAgICAgICAgICAgICAgdmFyIG9uRXJyb3IgPSBwcm9wcy5vbkVycm9yLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQ7XG4gICAgICAgICAgICAgIGhvc3RDb250ZXh0ID0gW107XG4gICAgICAgICAgICAgIHByb3BzLm9uTG9hZCAmJiBob3N0Q29udGV4dC5wdXNoKFwiYG9uTG9hZGBcIik7XG4gICAgICAgICAgICAgIG9uRXJyb3IgJiYgaG9zdENvbnRleHQucHVzaChcImBvbkVycm9yYFwiKTtcbiAgICAgICAgICAgICAgbnVsbCAhPSBkaXNhYmxlZCAmJiBob3N0Q29udGV4dC5wdXNoKFwiYGRpc2FibGVkYFwiKTtcbiAgICAgICAgICAgICAgb25FcnJvciA9IHByb3BOYW1lc0xpc3RKb2luKGhvc3RDb250ZXh0LCBcImFuZFwiKTtcbiAgICAgICAgICAgICAgb25FcnJvciArPSAxID09PSBob3N0Q29udGV4dC5sZW5ndGggPyBcIiBwcm9wXCIgOiBcIiBwcm9wc1wiO1xuICAgICAgICAgICAgICBkaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgMSA9PT0gaG9zdENvbnRleHQubGVuZ3RoID8gXCJhbiBcIiArIG9uRXJyb3IgOiBcInRoZSBcIiArIG9uRXJyb3I7XG4gICAgICAgICAgICAgIGhvc3RDb250ZXh0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAnUmVhY3QgZW5jb3VudGVyZWQgYSA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIiVzXCIgLi4uIC8+IHdpdGggYSBgcHJlY2VkZW5jZWAgcHJvcCB0aGF0IGFsc28gaW5jbHVkZWQgJXMuIFRoZSBwcmVzZW5jZSBvZiBsb2FkaW5nIGFuZCBlcnJvciBoYW5kbGVycyBpbmRpY2F0ZXMgYW4gaW50ZW50IHRvIG1hbmFnZSB0aGUgc3R5bGVzaGVldCBsb2FkaW5nIHN0YXRlIGZyb20geW91ciBmcm9tIHlvdXIgQ29tcG9uZW50IGNvZGUgYW5kIFJlYWN0IHdpbGwgbm90IGhvaXN0IG9yIGRlZHVwbGljYXRlIHRoaXMgc3R5bGVzaGVldC4gSWYgeW91ciBpbnRlbnQgd2FzIHRvIGhhdmUgUmVhY3QgaG9pc3QgYW5kIGRlZHVwbGNpYXRlIHRoaXMgc3R5bGVzaGVldCB1c2luZyB0aGUgYHByZWNlZGVuY2VgIHByb3AgcmVtb3ZlIHRoZSAlcywgb3RoZXJ3aXNlIHJlbW92ZSB0aGUgYHByZWNlZGVuY2VgIHByb3AuJyxcbiAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIG9uRXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0ICYmXG4gICAgICAgICAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMucmVsIHx8XG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5ocmVmIHx8XG4gICAgICAgICAgICAgIFwiXCIgPT09IHByb3BzLmhyZWZcbiAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHJlbmRlciBhIDxsaW5rPiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQgYSBgcmVsYCBhbmQgYGhyZWZgIHByb3AuIFRyeSBhZGRpbmcgYSBgcmVsYCBhbmQvb3IgYGhyZWZgIHByb3AgdG8gdGhpcyA8bGluaz4gb3IgbW92aW5nIHRoZSBsaW5rIGludG8gdGhlIDxoZWFkPiB0YWdcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogKHByb3BzLm9uRXJyb3IgfHwgcHJvcHMub25Mb2FkKSAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIGEgPGxpbms+IHdpdGggb25Mb2FkIG9yIG9uRXJyb3IgbGlzdGVuZXJzIG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQuIFRyeSByZW1vdmluZyBvbkxvYWQ9ey4uLn0gYW5kIG9uRXJyb3I9ey4uLn0gb3IgbW92aW5nIGl0IGludG8gdGhlIHJvb3QgPGhlYWQ+IHRhZyBvciBzb21ld2hlcmUgaW4gdGhlIDxib2R5Pi5cIlxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc3dpdGNoIChwcm9wcy5yZWwpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHlsZXNoZWV0XCI6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHR5cGUgPSBwcm9wcy5wcmVjZWRlbmNlKSxcbiAgICAgICAgICAgICAgICAocHJvcHMgPSBwcm9wcy5kaXNhYmxlZCksXG4gICAgICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCByZW5kZXIgYSA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgLz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGtub3dpbmcgaXRzIHByZWNlZGVuY2UuIENvbnNpZGVyIGFkZGluZyBwcmVjZWRlbmNlPVwiZGVmYXVsdFwiIG9yIG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcuJ1xuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSAmJiBudWxsID09IHByb3BzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgdHlwZSA9XG4gICAgICAgICAgICBwcm9wcy5hc3luYyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcHJvcHMuYXN5bmMgJiZcbiAgICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBwcm9wcy5hc3luYztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdHlwZSB8fFxuICAgICAgICAgICAgcHJvcHMub25Mb2FkIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkVycm9yIHx8XG4gICAgICAgICAgICAhcHJvcHMuc3JjIHx8XG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMuc3JjXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgJiZcbiAgICAgICAgICAgICAgKHR5cGVcbiAgICAgICAgICAgICAgICA/IHByb3BzLm9uTG9hZCB8fCBwcm9wcy5vbkVycm9yXG4gICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIGEgPHNjcmlwdD4gd2l0aCBvbkxvYWQgb3Igb25FcnJvciBsaXN0ZW5lcnMgb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudC4gVHJ5IHJlbW92aW5nIG9uTG9hZD17Li4ufSBhbmQgb25FcnJvcj17Li4ufSBvciBtb3ZpbmcgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnIG9yIHNvbWV3aGVyZSBpbiB0aGUgPGJvZHk+LlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCByZW5kZXIgYSA8c2NyaXB0PiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQgYGFzeW5jPXt0cnVlfWAgYW5kIGEgbm9uLWVtcHR5IGBzcmNgIHByb3AuIEVuc3VyZSB0aGVyZSBpcyBhIHZhbGlkIGBzcmNgIGFuZCBlaXRoZXIgbWFrZSB0aGUgc2NyaXB0IGFzeW5jIG9yIG1vdmUgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnIG9yIHNvbWV3aGVyZSBpbiB0aGUgPGJvZHk+LlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcmVuZGVyIGEgc3luYyBvciBkZWZlciA8c2NyaXB0PiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQga25vd2luZyBpdHMgb3JkZXIuIFRyeSBhZGRpbmcgYXN5bmM9XCJcIiBvciBtb3ZpbmcgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnLidcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcIm5vc2NyaXB0XCI6XG4gICAgICAgIGNhc2UgXCJ0ZW1wbGF0ZVwiOlxuICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIDwlcz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudC4gVHJ5IG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcuXCIsXG4gICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWxvYWRSZXNvdXJjZShyZXNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwic3R5bGVzaGVldFwiID09PSByZXNvdXJjZS50eXBlICYmXG4gICAgICAgIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgU2V0dGxlZCkgPT09IE5vdExvYWRlZFxuICAgICAgICA/ICExXG4gICAgICAgIDogITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIHN1c3BlbmRSZXNvdXJjZShob2lzdGFibGVSb290LCByZXNvdXJjZSwgcHJvcHMpIHtcbiAgICAgIGlmIChudWxsID09PSBzdXNwZW5kZWRTdGF0ZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJJbnRlcm5hbCBSZWFjdCBFcnJvcjogc3VzcGVuZGVkU3RhdGUgbnVsbCB3aGVuIGl0IHdhcyBleHBlY3RlZCB0byBleGlzdHMuIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIFJlYWN0IGJ1Zy5cIlxuICAgICAgICApO1xuICAgICAgdmFyIHN0YXRlID0gc3VzcGVuZGVkU3RhdGU7XG4gICAgICBpZiAoXG4gICAgICAgIFwic3R5bGVzaGVldFwiID09PSByZXNvdXJjZS50eXBlICYmXG4gICAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMubWVkaWEgfHxcbiAgICAgICAgICAhMSAhPT0gbWF0Y2hNZWRpYShwcm9wcy5tZWRpYSkubWF0Y2hlcykgJiZcbiAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBJbnNlcnRlZCkgPT09IE5vdExvYWRlZFxuICAgICAgKSB7XG4gICAgICAgIGlmIChudWxsID09PSByZXNvdXJjZS5pbnN0YW5jZSkge1xuICAgICAgICAgIHZhciBrZXkgPSBnZXRTdHlsZUtleShwcm9wcy5ocmVmKSxcbiAgICAgICAgICAgIGluc3RhbmNlID0gaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICBnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KGtleSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICBob2lzdGFibGVSb290ID0gaW5zdGFuY2UuX3A7XG4gICAgICAgICAgICBudWxsICE9PSBob2lzdGFibGVSb290ICYmXG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBob2lzdGFibGVSb290ICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGhvaXN0YWJsZVJvb3QudGhlbiAmJlxuICAgICAgICAgICAgICAoc3RhdGUuY291bnQrKyxcbiAgICAgICAgICAgICAgKHN0YXRlID0gb25VbnN1c3BlbmQuYmluZChzdGF0ZSkpLFxuICAgICAgICAgICAgICBob2lzdGFibGVSb290LnRoZW4oc3RhdGUsIHN0YXRlKSk7XG4gICAgICAgICAgICByZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkO1xuICAgICAgICAgICAgcmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnN0YW5jZSA9IGhvaXN0YWJsZVJvb3Qub3duZXJEb2N1bWVudCB8fCBob2lzdGFibGVSb290O1xuICAgICAgICAgIHByb3BzID0gc3R5bGVzaGVldFByb3BzRnJvbVJhd1Byb3BzKHByb3BzKTtcbiAgICAgICAgICAoa2V5ID0gcHJlbG9hZFByb3BzTWFwLmdldChrZXkpKSAmJlxuICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KHByb3BzLCBrZXkpO1xuICAgICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG4gICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgICAgdmFyIGxpbmtJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgIGxpbmtJbnN0YW5jZS5fcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgbGlua0luc3RhbmNlLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsIFwibGlua1wiLCBwcm9wcyk7XG4gICAgICAgICAgcmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICBudWxsID09PSBzdGF0ZS5zdHlsZXNoZWV0cyAmJiAoc3RhdGUuc3R5bGVzaGVldHMgPSBuZXcgTWFwKCkpO1xuICAgICAgICBzdGF0ZS5zdHlsZXNoZWV0cy5zZXQocmVzb3VyY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAoaG9pc3RhYmxlUm9vdCA9IHJlc291cmNlLnN0YXRlLnByZWxvYWQpICYmXG4gICAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBTZXR0bGVkKSA9PT0gTm90TG9hZGVkICYmXG4gICAgICAgICAgKHN0YXRlLmNvdW50KyssXG4gICAgICAgICAgKHJlc291cmNlID0gb25VbnN1c3BlbmQuYmluZChzdGF0ZSkpLFxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb3VyY2UpLFxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlc291cmNlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhaXRGb3JDb21taXRUb0JlUmVhZHkoKSB7XG4gICAgICBpZiAobnVsbCA9PT0gc3VzcGVuZGVkU3RhdGUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgRXJyb3I6IHN1c3BlbmRlZFN0YXRlIG51bGwgd2hlbiBpdCB3YXMgZXhwZWN0ZWQgdG8gZXhpc3RzLiBQbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBSZWFjdCBidWcuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBzdGF0ZSA9IHN1c3BlbmRlZFN0YXRlO1xuICAgICAgc3RhdGUuc3R5bGVzaGVldHMgJiZcbiAgICAgICAgMCA9PT0gc3RhdGUuY291bnQgJiZcbiAgICAgICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHMoc3RhdGUsIHN0YXRlLnN0eWxlc2hlZXRzKTtcbiAgICAgIHJldHVybiAwIDwgc3RhdGUuY291bnRcbiAgICAgICAgPyBmdW5jdGlvbiAoY29tbWl0KSB7XG4gICAgICAgICAgICB2YXIgc3R5bGVzaGVldFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnN0eWxlc2hlZXRzICYmXG4gICAgICAgICAgICAgICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHMoc3RhdGUsIHN0YXRlLnN0eWxlc2hlZXRzKTtcbiAgICAgICAgICAgICAgaWYgKHN0YXRlLnVuc3VzcGVuZCkge1xuICAgICAgICAgICAgICAgIHZhciB1bnN1c3BlbmQgPSBzdGF0ZS51bnN1c3BlbmQ7XG4gICAgICAgICAgICAgICAgc3RhdGUudW5zdXNwZW5kID0gbnVsbDtcbiAgICAgICAgICAgICAgICB1bnN1c3BlbmQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgNmU0KTtcbiAgICAgICAgICAgIHN0YXRlLnVuc3VzcGVuZCA9IGNvbW1pdDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnVuc3VzcGVuZCA9IG51bGw7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dChzdHlsZXNoZWV0VGltZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25VbnN1c3BlbmQoKSB7XG4gICAgICB0aGlzLmNvdW50LS07XG4gICAgICBpZiAoMCA9PT0gdGhpcy5jb3VudClcbiAgICAgICAgaWYgKHRoaXMuc3R5bGVzaGVldHMpXG4gICAgICAgICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHModGhpcywgdGhpcy5zdHlsZXNoZWV0cyk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMudW5zdXNwZW5kKSB7XG4gICAgICAgICAgdmFyIHVuc3VzcGVuZCA9IHRoaXMudW5zdXNwZW5kO1xuICAgICAgICAgIHRoaXMudW5zdXNwZW5kID0gbnVsbDtcbiAgICAgICAgICB1bnN1c3BlbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRTdXNwZW5kZWRTdHlsZXNoZWV0cyhzdGF0ZSwgcmVzb3VyY2VzKSB7XG4gICAgICBzdGF0ZS5zdHlsZXNoZWV0cyA9IG51bGw7XG4gICAgICBudWxsICE9PSBzdGF0ZS51bnN1c3BlbmQgJiZcbiAgICAgICAgKHN0YXRlLmNvdW50KyssXG4gICAgICAgIChwcmVjZWRlbmNlc0J5Um9vdCA9IG5ldyBNYXAoKSksXG4gICAgICAgIHJlc291cmNlcy5mb3JFYWNoKGluc2VydFN0eWxlc2hlZXRJbnRvUm9vdCwgc3RhdGUpLFxuICAgICAgICAocHJlY2VkZW5jZXNCeVJvb3QgPSBudWxsKSxcbiAgICAgICAgb25VbnN1c3BlbmQuY2FsbChzdGF0ZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRTdHlsZXNoZWV0SW50b1Jvb3Qocm9vdCwgcmVzb3VyY2UpIHtcbiAgICAgIGlmICghKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBJbnNlcnRlZCkpIHtcbiAgICAgICAgdmFyIHByZWNlZGVuY2VzID0gcHJlY2VkZW5jZXNCeVJvb3QuZ2V0KHJvb3QpO1xuICAgICAgICBpZiAocHJlY2VkZW5jZXMpIHZhciBsYXN0ID0gcHJlY2VkZW5jZXMuZ2V0KExBU1RfUFJFQ0VERU5DRSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHByZWNlZGVuY2VzID0gbmV3IE1hcCgpO1xuICAgICAgICAgIHByZWNlZGVuY2VzQnlSb290LnNldChyb290LCBwcmVjZWRlbmNlcyk7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBub2RlcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICBcImxpbmtbZGF0YS1wcmVjZWRlbmNlXSxzdHlsZVtkYXRhLXByZWNlZGVuY2VdXCJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICBpIDwgbm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgaSsrXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcIkxJTktcIiA9PT0gbm9kZS5ub2RlTmFtZSB8fFxuICAgICAgICAgICAgICBcIm5vdCBhbGxcIiAhPT0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJtZWRpYVwiKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBwcmVjZWRlbmNlcy5zZXQobm9kZS5kYXRhc2V0LnByZWNlZGVuY2UsIG5vZGUpLCAobGFzdCA9IG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0ICYmIHByZWNlZGVuY2VzLnNldChMQVNUX1BSRUNFREVOQ0UsIGxhc3QpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVzID0gcmVzb3VyY2UuaW5zdGFuY2U7XG4gICAgICAgIG5vZGUgPSBub2Rlcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIik7XG4gICAgICAgIGkgPSBwcmVjZWRlbmNlcy5nZXQobm9kZSkgfHwgbGFzdDtcbiAgICAgICAgaSA9PT0gbGFzdCAmJiBwcmVjZWRlbmNlcy5zZXQoTEFTVF9QUkVDRURFTkNFLCBub2Rlcyk7XG4gICAgICAgIHByZWNlZGVuY2VzLnNldChub2RlLCBub2Rlcyk7XG4gICAgICAgIHRoaXMuY291bnQrKztcbiAgICAgICAgbGFzdCA9IG9uVW5zdXNwZW5kLmJpbmQodGhpcyk7XG4gICAgICAgIG5vZGVzLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGxhc3QpO1xuICAgICAgICBub2Rlcy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgbGFzdCk7XG4gICAgICAgIGlcbiAgICAgICAgICA/IGkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZXMsIGkubmV4dFNpYmxpbmcpXG4gICAgICAgICAgOiAoKHJvb3QgPSA5ID09PSByb290Lm5vZGVUeXBlID8gcm9vdC5oZWFkIDogcm9vdCksXG4gICAgICAgICAgICByb290Lmluc2VydEJlZm9yZShub2Rlcywgcm9vdC5maXJzdENoaWxkKSk7XG4gICAgICAgIHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIEZpYmVyUm9vdE5vZGUoXG4gICAgICBjb250YWluZXJJbmZvLFxuICAgICAgdGFnLFxuICAgICAgaHlkcmF0ZSxcbiAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgICBvbkNhdWdodEVycm9yLFxuICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgZm9ybVN0YXRlXG4gICAgKSB7XG4gICAgICB0aGlzLnRhZyA9IDE7XG4gICAgICB0aGlzLmNvbnRhaW5lckluZm8gPSBjb250YWluZXJJbmZvO1xuICAgICAgdGhpcy5waW5nQ2FjaGUgPSB0aGlzLmN1cnJlbnQgPSB0aGlzLnBlbmRpbmdDaGlsZHJlbiA9IG51bGw7XG4gICAgICB0aGlzLnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7XG4gICAgICB0aGlzLmNhbGxiYWNrTm9kZSA9XG4gICAgICAgIHRoaXMubmV4dCA9XG4gICAgICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPVxuICAgICAgICB0aGlzLmNvbnRleHQgPVxuICAgICAgICB0aGlzLmNhbmNlbFBlbmRpbmdDb21taXQgPVxuICAgICAgICAgIG51bGw7XG4gICAgICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSAwO1xuICAgICAgdGhpcy5leHBpcmF0aW9uVGltZXMgPSBjcmVhdGVMYW5lTWFwKC0xKTtcbiAgICAgIHRoaXMuZW50YW5nbGVkTGFuZXMgPVxuICAgICAgICB0aGlzLnNoZWxsU3VzcGVuZENvdW50ZXIgPVxuICAgICAgICB0aGlzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzID1cbiAgICAgICAgdGhpcy5leHBpcmVkTGFuZXMgPVxuICAgICAgICB0aGlzLndhcm1MYW5lcyA9XG4gICAgICAgIHRoaXMucGluZ2VkTGFuZXMgPVxuICAgICAgICB0aGlzLnN1c3BlbmRlZExhbmVzID1cbiAgICAgICAgdGhpcy5wZW5kaW5nTGFuZXMgPVxuICAgICAgICAgIDA7XG4gICAgICB0aGlzLmVudGFuZ2xlbWVudHMgPSBjcmVhdGVMYW5lTWFwKDApO1xuICAgICAgdGhpcy5oaWRkZW5VcGRhdGVzID0gY3JlYXRlTGFuZU1hcChudWxsKTtcbiAgICAgIHRoaXMuaWRlbnRpZmllclByZWZpeCA9IGlkZW50aWZpZXJQcmVmaXg7XG4gICAgICB0aGlzLm9uVW5jYXVnaHRFcnJvciA9IG9uVW5jYXVnaHRFcnJvcjtcbiAgICAgIHRoaXMub25DYXVnaHRFcnJvciA9IG9uQ2F1Z2h0RXJyb3I7XG4gICAgICB0aGlzLm9uUmVjb3ZlcmFibGVFcnJvciA9IG9uUmVjb3ZlcmFibGVFcnJvcjtcbiAgICAgIHRoaXMucG9vbGVkQ2FjaGUgPSBudWxsO1xuICAgICAgdGhpcy5wb29sZWRDYWNoZUxhbmVzID0gMDtcbiAgICAgIHRoaXMuZm9ybVN0YXRlID0gZm9ybVN0YXRlO1xuICAgICAgdGhpcy5pbmNvbXBsZXRlVHJhbnNpdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgICB0aGlzLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IHRoaXMuZWZmZWN0RHVyYXRpb24gPSAtMDtcbiAgICAgIHRoaXMubWVtb2l6ZWRVcGRhdGVycyA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnRhaW5lckluZm8gPSB0aGlzLnBlbmRpbmdVcGRhdGVyc0xhbmVNYXAgPSBbXTtcbiAgICAgIGZvciAodGFnID0gMDsgMzEgPiB0YWc7IHRhZysrKSBjb250YWluZXJJbmZvLnB1c2gobmV3IFNldCgpKTtcbiAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSBoeWRyYXRlID8gXCJoeWRyYXRlUm9vdCgpXCIgOiBcImNyZWF0ZVJvb3QoKVwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlclJvb3QoXG4gICAgICBjb250YWluZXJJbmZvLFxuICAgICAgdGFnLFxuICAgICAgaHlkcmF0ZSxcbiAgICAgIGluaXRpYWxDaGlsZHJlbixcbiAgICAgIGh5ZHJhdGlvbkNhbGxiYWNrcyxcbiAgICAgIGlzU3RyaWN0TW9kZSxcbiAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgICBvbkNhdWdodEVycm9yLFxuICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrcyxcbiAgICAgIGZvcm1TdGF0ZVxuICAgICkge1xuICAgICAgY29udGFpbmVySW5mbyA9IG5ldyBGaWJlclJvb3ROb2RlKFxuICAgICAgICBjb250YWluZXJJbmZvLFxuICAgICAgICB0YWcsXG4gICAgICAgIGh5ZHJhdGUsXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICAgIG9uVW5jYXVnaHRFcnJvcixcbiAgICAgICAgb25DYXVnaHRFcnJvcixcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICBmb3JtU3RhdGVcbiAgICAgICk7XG4gICAgICB0YWcgPSBDb25jdXJyZW50TW9kZTtcbiAgICAgICEwID09PSBpc1N0cmljdE1vZGUgJiYgKHRhZyB8PSBTdHJpY3RMZWdhY3lNb2RlIHwgU3RyaWN0RWZmZWN0c01vZGUpO1xuICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiYgKHRhZyB8PSBQcm9maWxlTW9kZSk7XG4gICAgICBpc1N0cmljdE1vZGUgPSBjcmVhdGVGaWJlcigzLCBudWxsLCBudWxsLCB0YWcpO1xuICAgICAgY29udGFpbmVySW5mby5jdXJyZW50ID0gaXNTdHJpY3RNb2RlO1xuICAgICAgaXNTdHJpY3RNb2RlLnN0YXRlTm9kZSA9IGNvbnRhaW5lckluZm87XG4gICAgICB0YWcgPSBjcmVhdGVDYWNoZSgpO1xuICAgICAgcmV0YWluQ2FjaGUodGFnKTtcbiAgICAgIGNvbnRhaW5lckluZm8ucG9vbGVkQ2FjaGUgPSB0YWc7XG4gICAgICByZXRhaW5DYWNoZSh0YWcpO1xuICAgICAgaXNTdHJpY3RNb2RlLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgIGVsZW1lbnQ6IGluaXRpYWxDaGlsZHJlbixcbiAgICAgICAgaXNEZWh5ZHJhdGVkOiBoeWRyYXRlLFxuICAgICAgICBjYWNoZTogdGFnXG4gICAgICB9O1xuICAgICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGlzU3RyaWN0TW9kZSk7XG4gICAgICByZXR1cm4gY29udGFpbmVySW5mbztcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KSB7XG4gICAgICBpZiAoIXBhcmVudENvbXBvbmVudCkgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgIHBhcmVudENvbXBvbmVudCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgIHJldHVybiBwYXJlbnRDb21wb25lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lckltcGwoXG4gICAgICByb290RmliZXIsXG4gICAgICBsYW5lLFxuICAgICAgZWxlbWVudCxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgIGNhbGxiYWNrXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdFxuICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290KHJlbmRlcmVySUQsIGNvbnRhaW5lciwgZWxlbWVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yIHx8XG4gICAgICAgICAgICAoKGhhc0xvZ2dlZEVycm9yID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsXG4gICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU2NoZWR1bGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclNjaGVkdWxlZChsYW5lKTtcbiAgICAgIHBhcmVudENvbXBvbmVudCA9IGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCk7XG4gICAgICBudWxsID09PSBjb250YWluZXIuY29udGV4dFxuICAgICAgICA/IChjb250YWluZXIuY29udGV4dCA9IHBhcmVudENvbXBvbmVudClcbiAgICAgICAgOiAoY29udGFpbmVyLnBlbmRpbmdDb250ZXh0ID0gcGFyZW50Q29tcG9uZW50KTtcbiAgICAgIGlzUmVuZGVyaW5nICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgIWRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgJiZcbiAgICAgICAgKChkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gITApLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGU7IHRyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzIG5vdCBhbGxvd2VkLiBJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mICVzLlwiLFxuICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY3VycmVudCkgfHwgXCJVbmtub3duXCJcbiAgICAgICAgKSk7XG4gICAgICBjb250YWluZXIgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICBjb250YWluZXIucGF5bG9hZCA9IHsgZWxlbWVudDogZWxlbWVudCB9O1xuICAgICAgY2FsbGJhY2sgPSB2b2lkIDAgPT09IGNhbGxiYWNrID8gbnVsbCA6IGNhbGxiYWNrO1xuICAgICAgbnVsbCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNhbGxiYWNrICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKSxcbiAgICAgICAgKGNvbnRhaW5lci5jYWxsYmFjayA9IGNhbGxiYWNrKSk7XG4gICAgICBlbGVtZW50ID0gZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIGNvbnRhaW5lciwgbGFuZSk7XG4gICAgICBudWxsICE9PSBlbGVtZW50ICYmXG4gICAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZWxlbWVudCwgcm9vdEZpYmVyLCBsYW5lKSxcbiAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhlbGVtZW50LCByb290RmliZXIsIGxhbmUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSkge1xuICAgICAgZmliZXIgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IGZpYmVyICYmIG51bGwgIT09IGZpYmVyLmRlaHlkcmF0ZWQpIHtcbiAgICAgICAgdmFyIGEgPSBmaWJlci5yZXRyeUxhbmU7XG4gICAgICAgIGZpYmVyLnJldHJ5TGFuZSA9IDAgIT09IGEgJiYgYSA8IHJldHJ5TGFuZSA/IGEgOiByZXRyeUxhbmU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgICAgIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpO1xuICAgICAgKGZpYmVyID0gZmliZXIuYWx0ZXJuYXRlKSAmJiBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oZmliZXIpIHtcbiAgICAgIGlmICgxMyA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCA2NzEwODg2NCk7XG4gICAgICAgIG51bGwgIT09IHJvb3QgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCA2NzEwODg2NCk7XG4gICAgICAgIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCA2NzEwODg2NCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzKCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldExhbmVMYWJlbE1hcCgpIHtcbiAgICAgIGZvciAodmFyIG1hcCA9IG5ldyBNYXAoKSwgbGFuZSA9IDEsIGluZGV4ID0gMDsgMzEgPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgbGFiZWwgPSBnZXRMYWJlbEZvckxhbmUobGFuZSk7XG4gICAgICAgIG1hcC5zZXQobGFuZSwgbGFiZWwpO1xuICAgICAgICBsYW5lICo9IDI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaERpc2NyZXRlRXZlbnQoXG4gICAgICBkb21FdmVudE5hbWUsXG4gICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIHRyeSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gRGlzY3JldGVFdmVudFByaW9yaXR5KSxcbiAgICAgICAgICBkaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcHJldlRyYW5zaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaENvbnRpbnVvdXNFdmVudChcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICBjb250YWluZXIsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICkge1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBudWxsO1xuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgdHJ5IHtcbiAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBDb250aW51b3VzRXZlbnRQcmlvcml0eSksXG4gICAgICAgICAgZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICkge1xuICAgICAgaWYgKF9lbmFibGVkKSB7XG4gICAgICAgIHZhciBibG9ja2VkT24gPSBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgaWYgKG51bGwgPT09IGJsb2NrZWRPbilcbiAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oXG4gICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICByZXR1cm5fdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICksXG4gICAgICAgICAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICBxdWV1ZUlmQ29udGludW91c0V2ZW50KFxuICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgbmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIChjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpLFxuICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICAtMSA8IGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cy5pbmRleE9mKGRvbUV2ZW50TmFtZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGZvciAoOyBudWxsICE9PSBibG9ja2VkT247ICkge1xuICAgICAgICAgICAgdmFyIGZpYmVyID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpYmVyKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgIGZpYmVyID0gZmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgaWYgKGZpYmVyLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMoZmliZXIucGVuZGluZ0xhbmVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT09IGxhbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3QgPSBmaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICByb290LnBlbmRpbmdMYW5lcyB8PSAyO1xuICAgICAgICAgICAgICAgICAgICAgIGZvciAocm9vdC5lbnRhbmdsZWRMYW5lcyB8PSAyOyBsYW5lczsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IDEgPDwgKDMxIC0gY2x6MzIobGFuZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuZW50YW5nbGVtZW50c1sxXSB8PSBsYW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChmaWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIE5vQ29udGV4dCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbm93JDEoKSArIFJFTkRFUl9USU1FT1VUX01TKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAocm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMikpLFxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSByb290ICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgMiksXG4gICAgICAgICAgICAgICAgICAgIGZsdXNoU3luY1dvcmskMSgpLFxuICAgICAgICAgICAgICAgICAgICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgMik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpYmVyID0gZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudChuYXRpdmVFdmVudCk7XG4gICAgICAgICAgICBudWxsID09PSBmaWJlciAmJlxuICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oXG4gICAgICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgcmV0dXJuX3RhcmdldEluc3QsXG4gICAgICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZmliZXIgPT09IGJsb2NrZWRPbikgYnJlYWs7XG4gICAgICAgICAgICBibG9ja2VkT24gPSBmaWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbnVsbCAhPT0gYmxvY2tlZE9uICYmIG5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oXG4gICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudChuYXRpdmVFdmVudCkge1xuICAgICAgbmF0aXZlRXZlbnQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gICAgICByZXR1cm4gZmluZEluc3RhbmNlQmxvY2tpbmdUYXJnZXQobmF0aXZlRXZlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kSW5zdGFuY2VCbG9ja2luZ1RhcmdldCh0YXJnZXROb2RlKSB7XG4gICAgICByZXR1cm5fdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB0YXJnZXROb2RlID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0Tm9kZSk7XG4gICAgICBpZiAobnVsbCAhPT0gdGFyZ2V0Tm9kZSkge1xuICAgICAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldE5vZGUpO1xuICAgICAgICBpZiAobnVsbCA9PT0gbmVhcmVzdE1vdW50ZWQpIHRhcmdldE5vZGUgPSBudWxsO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuICAgICAgICAgIGlmICgxMyA9PT0gdGFnKSB7XG4gICAgICAgICAgICB0YXJnZXROb2RlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gdGFyZ2V0Tm9kZSkgcmV0dXJuIHRhcmdldE5vZGU7XG4gICAgICAgICAgICB0YXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKDMgPT09IHRhZykge1xuICAgICAgICAgICAgaWYgKG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKVxuICAgICAgICAgICAgICByZXR1cm4gMyA9PT0gbmVhcmVzdE1vdW50ZWQudGFnXG4gICAgICAgICAgICAgICAgPyBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIHRhcmdldE5vZGUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSBuZWFyZXN0TW91bnRlZCAhPT0gdGFyZ2V0Tm9kZSAmJiAodGFyZ2V0Tm9kZSA9IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm5fdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGU7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RXZlbnRQcmlvcml0eShkb21FdmVudE5hbWUpIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJiZWZvcmV0b2dnbGVcIjpcbiAgICAgICAgY2FzZSBcImNhbmNlbFwiOlxuICAgICAgICBjYXNlIFwiY2xpY2tcIjpcbiAgICAgICAgY2FzZSBcImNsb3NlXCI6XG4gICAgICAgIGNhc2UgXCJjb250ZXh0bWVudVwiOlxuICAgICAgICBjYXNlIFwiY29weVwiOlxuICAgICAgICBjYXNlIFwiY3V0XCI6XG4gICAgICAgIGNhc2UgXCJhdXhjbGlja1wiOlxuICAgICAgICBjYXNlIFwiZGJsY2xpY2tcIjpcbiAgICAgICAgY2FzZSBcImRyYWdlbmRcIjpcbiAgICAgICAgY2FzZSBcImRyYWdzdGFydFwiOlxuICAgICAgICBjYXNlIFwiZHJvcFwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNvdXRcIjpcbiAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgIGNhc2UgXCJpbnZhbGlkXCI6XG4gICAgICAgIGNhc2UgXCJrZXlkb3duXCI6XG4gICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICBjYXNlIFwia2V5dXBcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlZG93blwiOlxuICAgICAgICBjYXNlIFwibW91c2V1cFwiOlxuICAgICAgICBjYXNlIFwicGFzdGVcIjpcbiAgICAgICAgY2FzZSBcInBhdXNlXCI6XG4gICAgICAgIGNhc2UgXCJwbGF5XCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVyY2FuY2VsXCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVyZG93blwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcnVwXCI6XG4gICAgICAgIGNhc2UgXCJyYXRlY2hhbmdlXCI6XG4gICAgICAgIGNhc2UgXCJyZXNldFwiOlxuICAgICAgICBjYXNlIFwicmVzaXplXCI6XG4gICAgICAgIGNhc2UgXCJzZWVrZWRcIjpcbiAgICAgICAgY2FzZSBcInN1Ym1pdFwiOlxuICAgICAgICBjYXNlIFwidG9nZ2xlXCI6XG4gICAgICAgIGNhc2UgXCJ0b3VjaGNhbmNlbFwiOlxuICAgICAgICBjYXNlIFwidG91Y2hlbmRcIjpcbiAgICAgICAgY2FzZSBcInRvdWNoc3RhcnRcIjpcbiAgICAgICAgY2FzZSBcInZvbHVtZWNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwiY2hhbmdlXCI6XG4gICAgICAgIGNhc2UgXCJzZWxlY3Rpb25jaGFuZ2VcIjpcbiAgICAgICAgY2FzZSBcInRleHRJbnB1dFwiOlxuICAgICAgICBjYXNlIFwiY29tcG9zaXRpb25zdGFydFwiOlxuICAgICAgICBjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpcbiAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9udXBkYXRlXCI6XG4gICAgICAgIGNhc2UgXCJiZWZvcmVibHVyXCI6XG4gICAgICAgIGNhc2UgXCJhZnRlcmJsdXJcIjpcbiAgICAgICAgY2FzZSBcImJlZm9yZWlucHV0XCI6XG4gICAgICAgIGNhc2UgXCJibHVyXCI6XG4gICAgICAgIGNhc2UgXCJmdWxsc2NyZWVuY2hhbmdlXCI6XG4gICAgICAgIGNhc2UgXCJmb2N1c1wiOlxuICAgICAgICBjYXNlIFwiaGFzaGNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwicG9wc3RhdGVcIjpcbiAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICBjYXNlIFwic2VsZWN0c3RhcnRcIjpcbiAgICAgICAgICByZXR1cm4gRGlzY3JldGVFdmVudFByaW9yaXR5O1xuICAgICAgICBjYXNlIFwiZHJhZ1wiOlxuICAgICAgICBjYXNlIFwiZHJhZ2VudGVyXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnZXhpdFwiOlxuICAgICAgICBjYXNlIFwiZHJhZ2xlYXZlXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnb3ZlclwiOlxuICAgICAgICBjYXNlIFwibW91c2Vtb3ZlXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZW91dFwiOlxuICAgICAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVybW92ZVwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcm91dFwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcm92ZXJcIjpcbiAgICAgICAgY2FzZSBcInNjcm9sbFwiOlxuICAgICAgICBjYXNlIFwidG91Y2htb3ZlXCI6XG4gICAgICAgIGNhc2UgXCJ3aGVlbFwiOlxuICAgICAgICBjYXNlIFwibW91c2VlbnRlclwiOlxuICAgICAgICBjYXNlIFwibW91c2VsZWF2ZVwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmVudGVyXCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVybGVhdmVcIjpcbiAgICAgICAgICByZXR1cm4gQ29udGludW91c0V2ZW50UHJpb3JpdHk7XG4gICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgc3dpdGNoIChnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpKSB7XG4gICAgICAgICAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgICAgICAgICByZXR1cm4gRGlzY3JldGVFdmVudFByaW9yaXR5O1xuICAgICAgICAgICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVvdXNFdmVudFByaW9yaXR5O1xuICAgICAgICAgICAgY2FzZSBOb3JtYWxQcmlvcml0eSQxOlxuICAgICAgICAgICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRFdmVudFByaW9yaXR5O1xuICAgICAgICAgICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICAgICAgICAgIHJldHVybiBJZGxlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIERlZmF1bHRFdmVudFByaW9yaXR5O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJmb2N1c2luXCI6XG4gICAgICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRyYWdlbnRlclwiOlxuICAgICAgICBjYXNlIFwiZHJhZ2xlYXZlXCI6XG4gICAgICAgICAgcXVldWVkRHJhZyA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtb3VzZW92ZXJcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlb3V0XCI6XG4gICAgICAgICAgcXVldWVkTW91c2UgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicG9pbnRlcm92ZXJcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdXRcIjpcbiAgICAgICAgICBxdWV1ZWRQb2ludGVycy5kZWxldGUobmF0aXZlRXZlbnQucG9pbnRlcklkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpcbiAgICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZGVsZXRlKG5hdGl2ZUV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICBleGlzdGluZ1F1ZXVlZEV2ZW50LFxuICAgICAgYmxvY2tlZE9uLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgPT09IGV4aXN0aW5nUXVldWVkRXZlbnQgfHxcbiAgICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudC5uYXRpdmVFdmVudCAhPT0gbmF0aXZlRXZlbnRcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoZXhpc3RpbmdRdWV1ZWRFdmVudCA9IHtcbiAgICAgICAgICAgIGJsb2NrZWRPbjogYmxvY2tlZE9uLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lOiBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzOiBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyczogW3RhcmdldENvbnRhaW5lcl1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBudWxsICE9PSBibG9ja2VkT24gJiZcbiAgICAgICAgICAgICgoYmxvY2tlZE9uID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pKSxcbiAgICAgICAgICAgIG51bGwgIT09IGJsb2NrZWRPbiAmJiBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihibG9ja2VkT24pKSxcbiAgICAgICAgICBleGlzdGluZ1F1ZXVlZEV2ZW50XG4gICAgICAgICk7XG4gICAgICBleGlzdGluZ1F1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MgfD0gZXZlbnRTeXN0ZW1GbGFncztcbiAgICAgIGJsb2NrZWRPbiA9IGV4aXN0aW5nUXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcbiAgICAgIG51bGwgIT09IHRhcmdldENvbnRhaW5lciAmJlxuICAgICAgICAtMSA9PT0gYmxvY2tlZE9uLmluZGV4T2YodGFyZ2V0Q29udGFpbmVyKSAmJlxuICAgICAgICBibG9ja2VkT24ucHVzaCh0YXJnZXRDb250YWluZXIpO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nUXVldWVkRXZlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoXG4gICAgICBibG9ja2VkT24sXG4gICAgICBkb21FdmVudE5hbWUsXG4gICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJmb2N1c2luXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChxdWV1ZWRGb2N1cyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICAgICAgICAgIHF1ZXVlZEZvY3VzLFxuICAgICAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJkcmFnZW50ZXJcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHF1ZXVlZERyYWcgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgICAgICBxdWV1ZWREcmFnLFxuICAgICAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJtb3VzZW92ZXJcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHF1ZXVlZE1vdXNlID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChcbiAgICAgICAgICAgICAgcXVldWVkTW91c2UsXG4gICAgICAgICAgICAgIGJsb2NrZWRPbixcbiAgICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgICEwXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgICAgICAgdmFyIHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgICBxdWV1ZWRQb2ludGVycy5zZXQoXG4gICAgICAgICAgICBwb2ludGVySWQsXG4gICAgICAgICAgICBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgICAgICBxdWV1ZWRQb2ludGVycy5nZXQocG9pbnRlcklkKSB8fCBudWxsLFxuICAgICAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZCksXG4gICAgICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuc2V0KFxuICAgICAgICAgICAgICBwb2ludGVySWQsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICAgICAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmdldChwb2ludGVySWQpIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQocXVldWVkVGFyZ2V0KSB7XG4gICAgICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHF1ZXVlZFRhcmdldC50YXJnZXQpO1xuICAgICAgaWYgKG51bGwgIT09IHRhcmdldEluc3QpIHtcbiAgICAgICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcbiAgICAgICAgaWYgKG51bGwgIT09IG5lYXJlc3RNb3VudGVkKVxuICAgICAgICAgIGlmICgoKHRhcmdldEluc3QgPSBuZWFyZXN0TW91bnRlZC50YWcpLCAxMyA9PT0gdGFyZ2V0SW5zdCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKCh0YXJnZXRJbnN0ID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCkpLFxuICAgICAgICAgICAgICBudWxsICE9PSB0YXJnZXRJbnN0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSB0YXJnZXRJbnN0O1xuICAgICAgICAgICAgICBydW5XaXRoUHJpb3JpdHkocXVldWVkVGFyZ2V0LnByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKDEzID09PSBuZWFyZXN0TW91bnRlZC50YWcpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgICAgICAgICAgbGFuZSA9IGdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb25CeUxhbmUobGFuZSk7XG4gICAgICAgICAgICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShcbiAgICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWQsXG4gICAgICAgICAgICAgICAgICAgIGxhbmVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSByb290ICYmXG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBuZWFyZXN0TW91bnRlZCwgbGFuZSk7XG4gICAgICAgICAgICAgICAgICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChuZWFyZXN0TW91bnRlZCwgbGFuZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAzID09PSB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9XG4gICAgICAgICAgICAgIDMgPT09IG5lYXJlc3RNb3VudGVkLnRhZ1xuICAgICAgICAgICAgICAgID8gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpIHtcbiAgICAgIGlmIChudWxsICE9PSBxdWV1ZWRFdmVudC5ibG9ja2VkT24pIHJldHVybiAhMTtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciB0YXJnZXRDb250YWluZXJzID0gcXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcbiAgICAgICAgMCA8IHRhcmdldENvbnRhaW5lcnMubGVuZ3RoO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIG5leHRCbG9ja2VkT24gPSBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICAgICAgaWYgKG51bGwgPT09IG5leHRCbG9ja2VkT24pIHtcbiAgICAgICAgICBuZXh0QmxvY2tlZE9uID0gcXVldWVkRXZlbnQubmF0aXZlRXZlbnQ7XG4gICAgICAgICAgdmFyIG5hdGl2ZUV2ZW50Q2xvbmUgPSBuZXcgbmV4dEJsb2NrZWRPbi5jb25zdHJ1Y3RvcihcbiAgICAgICAgICAgICAgbmV4dEJsb2NrZWRPbi50eXBlLFxuICAgICAgICAgICAgICBuZXh0QmxvY2tlZE9uXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZXZlbnQgPSBuYXRpdmVFdmVudENsb25lO1xuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRSZXBsYXlpbmdFdmVudCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCBjdXJyZW50bHkgcmVwbGF5aW5nIGV2ZW50IHRvIGJlIG51bGwuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY3VycmVudFJlcGxheWluZ0V2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgbmV4dEJsb2NrZWRPbi50YXJnZXQuZGlzcGF0Y2hFdmVudChuYXRpdmVFdmVudENsb25lKTtcbiAgICAgICAgICBudWxsID09PSBjdXJyZW50UmVwbGF5aW5nRXZlbnQgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgY3VycmVudGx5IHJlcGxheWluZyBldmVudCB0byBub3QgYmUgbnVsbC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjdXJyZW50UmVwbGF5aW5nRXZlbnQgPSBudWxsO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRhcmdldENvbnRhaW5lcnMgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHRCbG9ja2VkT24pKSxcbiAgICAgICAgICAgIG51bGwgIT09IHRhcmdldENvbnRhaW5lcnMgJiZcbiAgICAgICAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24odGFyZ2V0Q29udGFpbmVycyksXG4gICAgICAgICAgICAocXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbiksXG4gICAgICAgICAgICAhMVxuICAgICAgICAgICk7XG4gICAgICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICAgICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkgJiYgbWFwLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBsYXlVbmJsb2NrZWRFdmVudHMoKSB7XG4gICAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gITE7XG4gICAgICBudWxsICE9PSBxdWV1ZWRGb2N1cyAmJlxuICAgICAgICBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEZvY3VzKSAmJlxuICAgICAgICAocXVldWVkRm9jdXMgPSBudWxsKTtcbiAgICAgIG51bGwgIT09IHF1ZXVlZERyYWcgJiZcbiAgICAgICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWREcmFnKSAmJlxuICAgICAgICAocXVldWVkRHJhZyA9IG51bGwpO1xuICAgICAgbnVsbCAhPT0gcXVldWVkTW91c2UgJiZcbiAgICAgICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkgJiZcbiAgICAgICAgKHF1ZXVlZE1vdXNlID0gbnVsbCk7XG4gICAgICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCkge1xuICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQgJiZcbiAgICAgICAgKChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsKSxcbiAgICAgICAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCB8fFxuICAgICAgICAgICgoaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9ICEwKSxcbiAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhcbiAgICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgICAgICAgICAgIHJlcGxheVVuYmxvY2tlZEV2ZW50c1xuICAgICAgICAgICkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGZvcm1SZXBsYXlpbmdRdWV1ZSkge1xuICAgICAgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlICE9PSBmb3JtUmVwbGF5aW5nUXVldWUgJiZcbiAgICAgICAgKChsYXN0U2NoZWR1bGVkUmVwbGF5UXVldWUgPSBmb3JtUmVwbGF5aW5nUXVldWUpLFxuICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhcbiAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID09PSBmb3JtUmVwbGF5aW5nUXVldWUgJiZcbiAgICAgICAgICAgICAgKGxhc3RTY2hlZHVsZWRSZXBsYXlRdWV1ZSA9IG51bGwpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtUmVwbGF5aW5nUXVldWUubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgICAgdmFyIGZvcm0gPSBmb3JtUmVwbGF5aW5nUXVldWVbaV0sXG4gICAgICAgICAgICAgICAgc3VibWl0dGVyT3JBY3Rpb24gPSBmb3JtUmVwbGF5aW5nUXVldWVbaSArIDFdLFxuICAgICAgICAgICAgICAgIGZvcm1EYXRhID0gZm9ybVJlcGxheWluZ1F1ZXVlW2kgKyAyXTtcbiAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHN1Ym1pdHRlck9yQWN0aW9uKVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KHN1Ym1pdHRlck9yQWN0aW9uIHx8IGZvcm0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgZWxzZSBicmVhaztcbiAgICAgICAgICAgICAgdmFyIGZvcm1JbnN0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShmb3JtKTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gZm9ybUluc3QgJiZcbiAgICAgICAgICAgICAgICAoZm9ybVJlcGxheWluZ1F1ZXVlLnNwbGljZShpLCAzKSxcbiAgICAgICAgICAgICAgICAoaSAtPSAzKSxcbiAgICAgICAgICAgICAgICAoZm9ybSA9IHtcbiAgICAgICAgICAgICAgICAgIHBlbmRpbmc6ICEwLFxuICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBtZXRob2Q6IGZvcm0ubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgYWN0aW9uOiBzdWJtaXR0ZXJPckFjdGlvblxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIE9iamVjdC5mcmVlemUoZm9ybSksXG4gICAgICAgICAgICAgICAgc3RhcnRIb3N0VHJhbnNpdGlvbihcbiAgICAgICAgICAgICAgICAgIGZvcm1JbnN0LFxuICAgICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgZm9ybURhdGFcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXRyeUlmQmxvY2tlZE9uKHVuYmxvY2tlZCkge1xuICAgICAgZnVuY3Rpb24gdW5ibG9jayhxdWV1ZWRFdmVudCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gcXVldWVkRm9jdXMgJiZcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEZvY3VzLCB1bmJsb2NrZWQpO1xuICAgICAgbnVsbCAhPT0gcXVldWVkRHJhZyAmJiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRHJhZywgdW5ibG9ja2VkKTtcbiAgICAgIG51bGwgIT09IHF1ZXVlZE1vdXNlICYmXG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRNb3VzZSwgdW5ibG9ja2VkKTtcbiAgICAgIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaCh1bmJsb2NrKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBxdWV1ZWRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbaV07XG4gICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCAmJiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGwpO1xuICAgICAgfVxuICAgICAgZm9yIChcbiAgICAgICAgO1xuICAgICAgICAwIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCAmJlxuICAgICAgICAoKGkgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbMF0pLCBudWxsID09PSBpLmJsb2NrZWRPbik7XG5cbiAgICAgIClcbiAgICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KGkpLFxuICAgICAgICAgIG51bGwgPT09IGkuYmxvY2tlZE9uICYmIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5zaGlmdCgpO1xuICAgICAgaSA9ICh1bmJsb2NrZWQub3duZXJEb2N1bWVudCB8fCB1bmJsb2NrZWQpLiQkcmVhY3RGb3JtUmVwbGF5O1xuICAgICAgaWYgKG51bGwgIT0gaSlcbiAgICAgICAgZm9yIChxdWV1ZWRUYXJnZXQgPSAwOyBxdWV1ZWRUYXJnZXQgPCBpLmxlbmd0aDsgcXVldWVkVGFyZ2V0ICs9IDMpIHtcbiAgICAgICAgICB2YXIgZm9ybSA9IGlbcXVldWVkVGFyZ2V0XSxcbiAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uID0gaVtxdWV1ZWRUYXJnZXQgKyAxXSxcbiAgICAgICAgICAgIGZvcm1Qcm9wcyA9IGZvcm1baW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygc3VibWl0dGVyT3JBY3Rpb24pXG4gICAgICAgICAgICBmb3JtUHJvcHMgfHwgc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGkpO1xuICAgICAgICAgIGVsc2UgaWYgKGZvcm1Qcm9wcykge1xuICAgICAgICAgICAgdmFyIGFjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uICYmXG4gICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uLmhhc0F0dHJpYnV0ZShcImZvcm1BY3Rpb25cIilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICgoZm9ybSA9IHN1Ym1pdHRlck9yQWN0aW9uKSxcbiAgICAgICAgICAgICAgICAoZm9ybVByb3BzID0gc3VibWl0dGVyT3JBY3Rpb25baW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbCkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBmb3JtUHJvcHMuZm9ybUFjdGlvbjtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KGZvcm0pKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBhY3Rpb24gPSBmb3JtUHJvcHMuYWN0aW9uO1xuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uXG4gICAgICAgICAgICAgID8gKGlbcXVldWVkVGFyZ2V0ICsgMV0gPSBhY3Rpb24pXG4gICAgICAgICAgICAgIDogKGkuc3BsaWNlKHF1ZXVlZFRhcmdldCwgMyksIChxdWV1ZWRUYXJnZXQgLT0gMykpO1xuICAgICAgICAgICAgc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdERPTVJvb3QoaW50ZXJuYWxSb290KSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBpbnRlcm5hbFJvb3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlYWN0RE9NSHlkcmF0aW9uUm9vdChpbnRlcm5hbFJvb3QpIHtcbiAgICAgIHRoaXMuX2ludGVybmFsUm9vdCA9IGludGVybmFsUm9vdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybklmUmVhY3RET01Db250YWluZXJJbkRFVihjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lcltpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSAmJlxuICAgICAgICAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXJcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NQ2xpZW50LmNyZWF0ZVJvb3QoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5IHBhc3NlZCB0byBSZWFjdERPTS5yZW5kZXIoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBhcmUgY2FsbGluZyBSZWFjdERPTUNsaWVudC5jcmVhdGVSb290KCkgb24gYSBjb250YWluZXIgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHBhc3NlZCB0byBjcmVhdGVSb290KCkgYmVmb3JlLiBJbnN0ZWFkLCBjYWxsIHJvb3QucmVuZGVyKCkgb24gdGhlIGV4aXN0aW5nIHJvb3QgaW5zdGVhZCBpZiB5b3Ugd2FudCB0byB1cGRhdGUgaXQuXCJcbiAgICAgICAgICAgICkpO1xuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBTY2hlZHVsZXIgPSByZXF1aXJlKFwic2NoZWR1bGVyXCIpLFxuICAgICAgUmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIiksXG4gICAgICBSZWFjdERPTSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIiksXG4gICAgICBhc3NpZ24gPSBPYmplY3QuYXNzaWduLFxuICAgICAgUkVBQ1RfTEVHQUNZX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICAgIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gICAgICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICAgICAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSxcbiAgICAgIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIiksXG4gICAgICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgICAgIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG4gICAgICBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgICAgIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpO1xuICAgIFN5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTtcbiAgICB2YXIgUkVBQ1RfQUNUSVZJVFlfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5hY3Rpdml0eVwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3QubGVnYWN5X2hpZGRlblwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3QudHJhY2luZ19tYXJrZXJcIik7XG4gICAgdmFyIFJFQUNUX01FTU9fQ0FDSEVfU0VOVElORUwgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3Qudmlld190cmFuc2l0aW9uXCIpO1xuICAgIHZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3IsXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXksXG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscyA9XG4gICAgICAgIFJlYWN0Ll9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3RET00uX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICAgICAgTm90UGVuZGluZyA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICBwZW5kaW5nOiAhMSxcbiAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgbWV0aG9kOiBudWxsLFxuICAgICAgICBhY3Rpb246IG51bGxcbiAgICAgIH0pLFxuICAgICAgdmFsdWVTdGFjayA9IFtdO1xuICAgIHZhciBmaWJlclN0YWNrID0gW107XG4gICAgdmFyIGluZGV4JGpzY29tcCQwID0gLTEsXG4gICAgICBjb250ZXh0U3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gICAgICBjb250ZXh0RmliZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgaG9zdFRyYW5zaXRpb25Qcm92aWRlckN1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgIHNjaGVkdWxlQ2FsbGJhY2skMyA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFxuICAgICAgY2FuY2VsQ2FsbGJhY2skMSA9IFNjaGVkdWxlci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxcbiAgICAgIHNob3VsZFlpZWxkID0gU2NoZWR1bGVyLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFxuICAgICAgcmVxdWVzdFBhaW50ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3JlcXVlc3RQYWludCxcbiAgICAgIG5vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdyxcbiAgICAgIGdldEN1cnJlbnRQcmlvcml0eUxldmVsID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLFxuICAgICAgSW1tZWRpYXRlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksXG4gICAgICBVc2VyQmxvY2tpbmdQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICAgIE5vcm1hbFByaW9yaXR5JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgICBMb3dQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Mb3dQcmlvcml0eSxcbiAgICAgIElkbGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JZGxlUHJpb3JpdHksXG4gICAgICBsb2ckMSA9IFNjaGVkdWxlci5sb2csXG4gICAgICB1bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZSA9IFNjaGVkdWxlci51bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZSxcbiAgICAgIHJlbmRlcmVySUQgPSBudWxsLFxuICAgICAgaW5qZWN0ZWRIb29rID0gbnVsbCxcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MgPSBudWxsLFxuICAgICAgaGFzTG9nZ2VkRXJyb3IgPSAhMSxcbiAgICAgIGlzRGV2VG9vbHNQcmVzZW50ID0gXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyxcbiAgICAgIGNsejMyID0gTWF0aC5jbHozMiA/IE1hdGguY2x6MzIgOiBjbHozMkZhbGxiYWNrLFxuICAgICAgbG9nID0gTWF0aC5sb2csXG4gICAgICBMTjIgPSBNYXRoLkxOMixcbiAgICAgIG5leHRUcmFuc2l0aW9uTGFuZSA9IDI1NixcbiAgICAgIG5leHRSZXRyeUxhbmUgPSA0MTk0MzA0LFxuICAgICAgRGlzY3JldGVFdmVudFByaW9yaXR5ID0gMixcbiAgICAgIENvbnRpbnVvdXNFdmVudFByaW9yaXR5ID0gOCxcbiAgICAgIERlZmF1bHRFdmVudFByaW9yaXR5ID0gMzIsXG4gICAgICBJZGxlRXZlbnRQcmlvcml0eSA9IDI2ODQzNTQ1NixcbiAgICAgIHJhbmRvbUtleSA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZUtleSA9IFwiX19yZWFjdEZpYmVyJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxQcm9wc0tleSA9IFwiX19yZWFjdFByb3BzJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleSA9IFwiX19yZWFjdENvbnRhaW5lciRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsRXZlbnRIYW5kbGVyc0tleSA9IFwiX19yZWFjdEV2ZW50cyRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsRXZlbnRIYW5kbGVyTGlzdGVuZXJzS2V5ID0gXCJfX3JlYWN0TGlzdGVuZXJzJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxFdmVudEhhbmRsZXNTZXRLZXkgPSBcIl9fcmVhY3RIYW5kbGVzJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxSb290Tm9kZVJlc291cmNlc0tleSA9IFwiX19yZWFjdFJlc291cmNlcyRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsSG9pc3RhYmxlTWFya2VyID0gXCJfX3JlYWN0TWFya2VyJFwiICsgcmFuZG9tS2V5LFxuICAgICAgYWxsTmF0aXZlRXZlbnRzID0gbmV3IFNldCgpLFxuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IHt9LFxuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9IHt9LFxuICAgICAgaGFzUmVhZE9ubHlWYWx1ZSA9IHtcbiAgICAgICAgYnV0dG9uOiAhMCxcbiAgICAgICAgY2hlY2tib3g6ICEwLFxuICAgICAgICBpbWFnZTogITAsXG4gICAgICAgIGhpZGRlbjogITAsXG4gICAgICAgIHJhZGlvOiAhMCxcbiAgICAgICAgcmVzZXQ6ICEwLFxuICAgICAgICBzdWJtaXQ6ICEwXG4gICAgICB9LFxuICAgICAgVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVggPSBSZWdFeHAoXG4gICAgICAgIFwiXls6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXVs6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdKiRcIlxuICAgICAgKSxcbiAgICAgIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fSxcbiAgICAgIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9LFxuICAgICAgZGlzYWJsZWREZXB0aCA9IDAsXG4gICAgICBwcmV2TG9nLFxuICAgICAgcHJldkluZm8sXG4gICAgICBwcmV2V2FybixcbiAgICAgIHByZXZFcnJvcixcbiAgICAgIHByZXZHcm91cCxcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCxcbiAgICAgIHByZXZHcm91cEVuZDtcbiAgICBkaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSAhMDtcbiAgICB2YXIgcHJlZml4LFxuICAgICAgc3VmZml4LFxuICAgICAgcmVlbnRyeSA9ICExO1xuICAgIHZhciBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IChcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtNYXAgPyBXZWFrTWFwIDogTWFwXG4gICAgKSgpO1xuICAgIHZhciBjdXJyZW50ID0gbnVsbCxcbiAgICAgIGlzUmVuZGVyaW5nID0gITEsXG4gICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzUmVnZXggPSAvW1xcblwiXFxcXF0vZyxcbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gITEsXG4gICAgICBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gITEsXG4gICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9ICExLFxuICAgICAgZGlkV2FybkludmFsaWRDaGlsZCA9ICExLFxuICAgICAgZGlkV2FybkludmFsaWRJbm5lckhUTUwgPSAhMTtcbiAgICB2YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gITE7XG4gICAgdmFyIHZhbHVlUHJvcE5hbWVzID0gW1widmFsdWVcIiwgXCJkZWZhdWx0VmFsdWVcIl0sXG4gICAgICBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9ICExLFxuICAgICAgbmVlZHNFc2NhcGluZyA9IC9bXCInJjw+XFxuXFx0XXxeXFxzfFxccyQvLFxuICAgICAgc3BlY2lhbFRhZ3MgPVxuICAgICAgICBcImFkZHJlc3MgYXBwbGV0IGFyZWEgYXJ0aWNsZSBhc2lkZSBiYXNlIGJhc2Vmb250IGJnc291bmQgYmxvY2txdW90ZSBib2R5IGJyIGJ1dHRvbiBjYXB0aW9uIGNlbnRlciBjb2wgY29sZ3JvdXAgZGQgZGV0YWlscyBkaXIgZGl2IGRsIGR0IGVtYmVkIGZpZWxkc2V0IGZpZ2NhcHRpb24gZmlndXJlIGZvb3RlciBmb3JtIGZyYW1lIGZyYW1lc2V0IGgxIGgyIGgzIGg0IGg1IGg2IGhlYWQgaGVhZGVyIGhncm91cCBociBodG1sIGlmcmFtZSBpbWcgaW5wdXQgaXNpbmRleCBsaSBsaW5rIGxpc3RpbmcgbWFpbiBtYXJxdWVlIG1lbnUgbWVudWl0ZW0gbWV0YSBuYXYgbm9lbWJlZCBub2ZyYW1lcyBub3NjcmlwdCBvYmplY3Qgb2wgcCBwYXJhbSBwbGFpbnRleHQgcHJlIHNjcmlwdCBzZWN0aW9uIHNlbGVjdCBzb3VyY2Ugc3R5bGUgc3VtbWFyeSB0YWJsZSB0Ym9keSB0ZCB0ZW1wbGF0ZSB0ZXh0YXJlYSB0Zm9vdCB0aCB0aGVhZCB0aXRsZSB0ciB0cmFjayB1bCB3YnIgeG1wXCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgIGluU2NvcGVUYWdzID1cbiAgICAgICAgXCJhcHBsZXQgY2FwdGlvbiBodG1sIHRhYmxlIHRkIHRoIG1hcnF1ZWUgb2JqZWN0IHRlbXBsYXRlIGZvcmVpZ25PYmplY3QgZGVzYyB0aXRsZVwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICBidXR0b25TY29wZVRhZ3MgPSBpblNjb3BlVGFncy5jb25jYXQoW1wiYnV0dG9uXCJdKSxcbiAgICAgIGltcGxpZWRFbmRUYWdzID0gXCJkZCBkdCBsaSBvcHRpb24gb3B0Z3JvdXAgcCBycCBydFwiLnNwbGl0KFwiIFwiKSxcbiAgICAgIGVtcHR5QW5jZXN0b3JJbmZvRGV2ID0ge1xuICAgICAgICBjdXJyZW50OiBudWxsLFxuICAgICAgICBmb3JtVGFnOiBudWxsLFxuICAgICAgICBhVGFnSW5TY29wZTogbnVsbCxcbiAgICAgICAgYnV0dG9uVGFnSW5TY29wZTogbnVsbCxcbiAgICAgICAgbm9iclRhZ0luU2NvcGU6IG51bGwsXG4gICAgICAgIHBUYWdJbkJ1dHRvblNjb3BlOiBudWxsLFxuICAgICAgICBsaXN0SXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsLFxuICAgICAgICBkbEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgICAgICAgY29udGFpbmVyVGFnSW5TY29wZTogbnVsbCxcbiAgICAgICAgaW1wbGljaXRSb290U2NvcGU6ICExXG4gICAgICB9LFxuICAgICAgZGlkV2FybiA9IHt9LFxuICAgICAgc2hvcnRoYW5kVG9Mb25naGFuZCA9IHtcbiAgICAgICAgYW5pbWF0aW9uOlxuICAgICAgICAgIFwiYW5pbWF0aW9uRGVsYXkgYW5pbWF0aW9uRGlyZWN0aW9uIGFuaW1hdGlvbkR1cmF0aW9uIGFuaW1hdGlvbkZpbGxNb2RlIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IGFuaW1hdGlvbk5hbWUgYW5pbWF0aW9uUGxheVN0YXRlIGFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uXCIuc3BsaXQoXG4gICAgICAgICAgICBcIiBcIlxuICAgICAgICAgICksXG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgXCJiYWNrZ3JvdW5kQXR0YWNobWVudCBiYWNrZ3JvdW5kQ2xpcCBiYWNrZ3JvdW5kQ29sb3IgYmFja2dyb3VuZEltYWdlIGJhY2tncm91bmRPcmlnaW4gYmFja2dyb3VuZFBvc2l0aW9uWCBiYWNrZ3JvdW5kUG9zaXRpb25ZIGJhY2tncm91bmRSZXBlYXQgYmFja2dyb3VuZFNpemVcIi5zcGxpdChcbiAgICAgICAgICAgIFwiIFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiBbXCJiYWNrZ3JvdW5kUG9zaXRpb25YXCIsIFwiYmFja2dyb3VuZFBvc2l0aW9uWVwiXSxcbiAgICAgICAgYm9yZGVyOlxuICAgICAgICAgIFwiYm9yZGVyQm90dG9tQ29sb3IgYm9yZGVyQm90dG9tU3R5bGUgYm9yZGVyQm90dG9tV2lkdGggYm9yZGVySW1hZ2VPdXRzZXQgYm9yZGVySW1hZ2VSZXBlYXQgYm9yZGVySW1hZ2VTbGljZSBib3JkZXJJbWFnZVNvdXJjZSBib3JkZXJJbWFnZVdpZHRoIGJvcmRlckxlZnRDb2xvciBib3JkZXJMZWZ0U3R5bGUgYm9yZGVyTGVmdFdpZHRoIGJvcmRlclJpZ2h0Q29sb3IgYm9yZGVyUmlnaHRTdHlsZSBib3JkZXJSaWdodFdpZHRoIGJvcmRlclRvcENvbG9yIGJvcmRlclRvcFN0eWxlIGJvcmRlclRvcFdpZHRoXCIuc3BsaXQoXG4gICAgICAgICAgICBcIiBcIlxuICAgICAgICAgICksXG4gICAgICAgIGJvcmRlckJsb2NrRW5kOiBbXG4gICAgICAgICAgXCJib3JkZXJCbG9ja0VuZENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJCbG9ja0VuZFN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJCbG9ja0VuZFdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyQmxvY2tTdGFydDogW1xuICAgICAgICAgIFwiYm9yZGVyQmxvY2tTdGFydENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJCbG9ja1N0YXJ0U3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlckJsb2NrU3RhcnRXaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlckJvdHRvbTogW1xuICAgICAgICAgIFwiYm9yZGVyQm90dG9tQ29sb3JcIixcbiAgICAgICAgICBcImJvcmRlckJvdHRvbVN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21XaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlckNvbG9yOiBbXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21Db2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVyTGVmdENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJSaWdodENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJUb3BDb2xvclwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlckltYWdlOiBbXG4gICAgICAgICAgXCJib3JkZXJJbWFnZU91dHNldFwiLFxuICAgICAgICAgIFwiYm9yZGVySW1hZ2VSZXBlYXRcIixcbiAgICAgICAgICBcImJvcmRlckltYWdlU2xpY2VcIixcbiAgICAgICAgICBcImJvcmRlckltYWdlU291cmNlXCIsXG4gICAgICAgICAgXCJib3JkZXJJbWFnZVdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVySW5saW5lRW5kOiBbXG4gICAgICAgICAgXCJib3JkZXJJbmxpbmVFbmRDb2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVySW5saW5lRW5kU3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlcklubGluZUVuZFdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVySW5saW5lU3RhcnQ6IFtcbiAgICAgICAgICBcImJvcmRlcklubGluZVN0YXJ0Q29sb3JcIixcbiAgICAgICAgICBcImJvcmRlcklubGluZVN0YXJ0U3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlcklubGluZVN0YXJ0V2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJMZWZ0OiBbXCJib3JkZXJMZWZ0Q29sb3JcIiwgXCJib3JkZXJMZWZ0U3R5bGVcIiwgXCJib3JkZXJMZWZ0V2lkdGhcIl0sXG4gICAgICAgIGJvcmRlclJhZGl1czogW1xuICAgICAgICAgIFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFxuICAgICAgICAgIFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcbiAgICAgICAgICBcImJvcmRlclRvcExlZnRSYWRpdXNcIixcbiAgICAgICAgICBcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyUmlnaHQ6IFtcbiAgICAgICAgICBcImJvcmRlclJpZ2h0Q29sb3JcIixcbiAgICAgICAgICBcImJvcmRlclJpZ2h0U3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlclJpZ2h0V2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJTdHlsZTogW1xuICAgICAgICAgIFwiYm9yZGVyQm90dG9tU3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlckxlZnRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyUmlnaHRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyVG9wU3R5bGVcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJUb3A6IFtcImJvcmRlclRvcENvbG9yXCIsIFwiYm9yZGVyVG9wU3R5bGVcIiwgXCJib3JkZXJUb3BXaWR0aFwiXSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IFtcbiAgICAgICAgICBcImJvcmRlckJvdHRvbVdpZHRoXCIsXG4gICAgICAgICAgXCJib3JkZXJMZWZ0V2lkdGhcIixcbiAgICAgICAgICBcImJvcmRlclJpZ2h0V2lkdGhcIixcbiAgICAgICAgICBcImJvcmRlclRvcFdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgY29sdW1uUnVsZTogW1wiY29sdW1uUnVsZUNvbG9yXCIsIFwiY29sdW1uUnVsZVN0eWxlXCIsIFwiY29sdW1uUnVsZVdpZHRoXCJdLFxuICAgICAgICBjb2x1bW5zOiBbXCJjb2x1bW5Db3VudFwiLCBcImNvbHVtbldpZHRoXCJdLFxuICAgICAgICBmbGV4OiBbXCJmbGV4QmFzaXNcIiwgXCJmbGV4R3Jvd1wiLCBcImZsZXhTaHJpbmtcIl0sXG4gICAgICAgIGZsZXhGbG93OiBbXCJmbGV4RGlyZWN0aW9uXCIsIFwiZmxleFdyYXBcIl0sXG4gICAgICAgIGZvbnQ6IFwiZm9udEZhbWlseSBmb250RmVhdHVyZVNldHRpbmdzIGZvbnRLZXJuaW5nIGZvbnRMYW5ndWFnZU92ZXJyaWRlIGZvbnRTaXplIGZvbnRTaXplQWRqdXN0IGZvbnRTdHJldGNoIGZvbnRTdHlsZSBmb250VmFyaWFudCBmb250VmFyaWFudEFsdGVybmF0ZXMgZm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50RWFzdEFzaWFuIGZvbnRWYXJpYW50TGlnYXR1cmVzIGZvbnRWYXJpYW50TnVtZXJpYyBmb250VmFyaWFudFBvc2l0aW9uIGZvbnRXZWlnaHQgbGluZUhlaWdodFwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICAgIGZvbnRWYXJpYW50OlxuICAgICAgICAgIFwiZm9udFZhcmlhbnRBbHRlcm5hdGVzIGZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudEVhc3RBc2lhbiBmb250VmFyaWFudExpZ2F0dXJlcyBmb250VmFyaWFudE51bWVyaWMgZm9udFZhcmlhbnRQb3NpdGlvblwiLnNwbGl0KFxuICAgICAgICAgICAgXCIgXCJcbiAgICAgICAgICApLFxuICAgICAgICBnYXA6IFtcImNvbHVtbkdhcFwiLCBcInJvd0dhcFwiXSxcbiAgICAgICAgZ3JpZDogXCJncmlkQXV0b0NvbHVtbnMgZ3JpZEF1dG9GbG93IGdyaWRBdXRvUm93cyBncmlkVGVtcGxhdGVBcmVhcyBncmlkVGVtcGxhdGVDb2x1bW5zIGdyaWRUZW1wbGF0ZVJvd3NcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgICBncmlkQXJlYTogW1xuICAgICAgICAgIFwiZ3JpZENvbHVtbkVuZFwiLFxuICAgICAgICAgIFwiZ3JpZENvbHVtblN0YXJ0XCIsXG4gICAgICAgICAgXCJncmlkUm93RW5kXCIsXG4gICAgICAgICAgXCJncmlkUm93U3RhcnRcIlxuICAgICAgICBdLFxuICAgICAgICBncmlkQ29sdW1uOiBbXCJncmlkQ29sdW1uRW5kXCIsIFwiZ3JpZENvbHVtblN0YXJ0XCJdLFxuICAgICAgICBncmlkQ29sdW1uR2FwOiBbXCJjb2x1bW5HYXBcIl0sXG4gICAgICAgIGdyaWRHYXA6IFtcImNvbHVtbkdhcFwiLCBcInJvd0dhcFwiXSxcbiAgICAgICAgZ3JpZFJvdzogW1wiZ3JpZFJvd0VuZFwiLCBcImdyaWRSb3dTdGFydFwiXSxcbiAgICAgICAgZ3JpZFJvd0dhcDogW1wicm93R2FwXCJdLFxuICAgICAgICBncmlkVGVtcGxhdGU6IFtcbiAgICAgICAgICBcImdyaWRUZW1wbGF0ZUFyZWFzXCIsXG4gICAgICAgICAgXCJncmlkVGVtcGxhdGVDb2x1bW5zXCIsXG4gICAgICAgICAgXCJncmlkVGVtcGxhdGVSb3dzXCJcbiAgICAgICAgXSxcbiAgICAgICAgbGlzdFN0eWxlOiBbXCJsaXN0U3R5bGVJbWFnZVwiLCBcImxpc3RTdHlsZVBvc2l0aW9uXCIsIFwibGlzdFN0eWxlVHlwZVwiXSxcbiAgICAgICAgbWFyZ2luOiBbXCJtYXJnaW5Cb3R0b21cIiwgXCJtYXJnaW5MZWZ0XCIsIFwibWFyZ2luUmlnaHRcIiwgXCJtYXJnaW5Ub3BcIl0sXG4gICAgICAgIG1hcmtlcjogW1wibWFya2VyRW5kXCIsIFwibWFya2VyTWlkXCIsIFwibWFya2VyU3RhcnRcIl0sXG4gICAgICAgIG1hc2s6IFwibWFza0NsaXAgbWFza0NvbXBvc2l0ZSBtYXNrSW1hZ2UgbWFza01vZGUgbWFza09yaWdpbiBtYXNrUG9zaXRpb25YIG1hc2tQb3NpdGlvblkgbWFza1JlcGVhdCBtYXNrU2l6ZVwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICAgIG1hc2tQb3NpdGlvbjogW1wibWFza1Bvc2l0aW9uWFwiLCBcIm1hc2tQb3NpdGlvbllcIl0sXG4gICAgICAgIG91dGxpbmU6IFtcIm91dGxpbmVDb2xvclwiLCBcIm91dGxpbmVTdHlsZVwiLCBcIm91dGxpbmVXaWR0aFwiXSxcbiAgICAgICAgb3ZlcmZsb3c6IFtcIm92ZXJmbG93WFwiLCBcIm92ZXJmbG93WVwiXSxcbiAgICAgICAgcGFkZGluZzogW1wicGFkZGluZ0JvdHRvbVwiLCBcInBhZGRpbmdMZWZ0XCIsIFwicGFkZGluZ1JpZ2h0XCIsIFwicGFkZGluZ1RvcFwiXSxcbiAgICAgICAgcGxhY2VDb250ZW50OiBbXCJhbGlnbkNvbnRlbnRcIiwgXCJqdXN0aWZ5Q29udGVudFwiXSxcbiAgICAgICAgcGxhY2VJdGVtczogW1wiYWxpZ25JdGVtc1wiLCBcImp1c3RpZnlJdGVtc1wiXSxcbiAgICAgICAgcGxhY2VTZWxmOiBbXCJhbGlnblNlbGZcIiwgXCJqdXN0aWZ5U2VsZlwiXSxcbiAgICAgICAgdGV4dERlY29yYXRpb246IFtcbiAgICAgICAgICBcInRleHREZWNvcmF0aW9uQ29sb3JcIixcbiAgICAgICAgICBcInRleHREZWNvcmF0aW9uTGluZVwiLFxuICAgICAgICAgIFwidGV4dERlY29yYXRpb25TdHlsZVwiXG4gICAgICAgIF0sXG4gICAgICAgIHRleHRFbXBoYXNpczogW1widGV4dEVtcGhhc2lzQ29sb3JcIiwgXCJ0ZXh0RW1waGFzaXNTdHlsZVwiXSxcbiAgICAgICAgdHJhbnNpdGlvbjogW1xuICAgICAgICAgIFwidHJhbnNpdGlvbkRlbGF5XCIsXG4gICAgICAgICAgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIixcbiAgICAgICAgICBcInRyYW5zaXRpb25Qcm9wZXJ0eVwiLFxuICAgICAgICAgIFwidHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXCJcbiAgICAgICAgXSxcbiAgICAgICAgd29yZFdyYXA6IFtcIm92ZXJmbG93V3JhcFwiXVxuICAgICAgfSxcbiAgICAgIHVwcGVyY2FzZVBhdHRlcm4gPSAvKFtBLVpdKS9nLFxuICAgICAgbXNQYXR0ZXJuJDEgPSAvXm1zLS8sXG4gICAgICBiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4gPSAvXig/OndlYmtpdHxtb3p8bylbQS1aXS8sXG4gICAgICBtc1BhdHRlcm4gPSAvXi1tcy0vLFxuICAgICAgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2csXG4gICAgICBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLyxcbiAgICAgIHdhcm5lZFN0eWxlTmFtZXMgPSB7fSxcbiAgICAgIHdhcm5lZFN0eWxlVmFsdWVzID0ge30sXG4gICAgICB3YXJuZWRGb3JOYU5WYWx1ZSA9ICExLFxuICAgICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9ICExLFxuICAgICAgdW5pdGxlc3NOdW1iZXJzID0gbmV3IFNldChcbiAgICAgICAgXCJhbmltYXRpb25JdGVyYXRpb25Db3VudCBhc3BlY3RSYXRpbyBib3JkZXJJbWFnZU91dHNldCBib3JkZXJJbWFnZVNsaWNlIGJvcmRlckltYWdlV2lkdGggYm94RmxleCBib3hGbGV4R3JvdXAgYm94T3JkaW5hbEdyb3VwIGNvbHVtbkNvdW50IGNvbHVtbnMgZmxleCBmbGV4R3JvdyBmbGV4UG9zaXRpdmUgZmxleFNocmluayBmbGV4TmVnYXRpdmUgZmxleE9yZGVyIGdyaWRBcmVhIGdyaWRSb3cgZ3JpZFJvd0VuZCBncmlkUm93U3BhbiBncmlkUm93U3RhcnQgZ3JpZENvbHVtbiBncmlkQ29sdW1uRW5kIGdyaWRDb2x1bW5TcGFuIGdyaWRDb2x1bW5TdGFydCBmb250V2VpZ2h0IGxpbmVDbGFtcCBsaW5lSGVpZ2h0IG9wYWNpdHkgb3JkZXIgb3JwaGFucyBzY2FsZSB0YWJTaXplIHdpZG93cyB6SW5kZXggem9vbSBmaWxsT3BhY2l0eSBmbG9vZE9wYWNpdHkgc3RvcE9wYWNpdHkgc3Ryb2tlRGFzaGFycmF5IHN0cm9rZURhc2hvZmZzZXQgc3Ryb2tlTWl0ZXJsaW1pdCBzdHJva2VPcGFjaXR5IHN0cm9rZVdpZHRoIE1vekFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IE1vekJveEZsZXggTW96Qm94RmxleEdyb3VwIE1vekxpbmVDbGFtcCBtc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IG1zRmxleCBtc1pvb20gbXNGbGV4R3JvdyBtc0ZsZXhOZWdhdGl2ZSBtc0ZsZXhPcmRlciBtc0ZsZXhQb3NpdGl2ZSBtc0ZsZXhTaHJpbmsgbXNHcmlkQ29sdW1uIG1zR3JpZENvbHVtblNwYW4gbXNHcmlkUm93IG1zR3JpZFJvd1NwYW4gV2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgV2Via2l0Qm94RmxleCBXZWJLaXRCb3hGbGV4R3JvdXAgV2Via2l0Qm94T3JkaW5hbEdyb3VwIFdlYmtpdENvbHVtbkNvdW50IFdlYmtpdENvbHVtbnMgV2Via2l0RmxleCBXZWJraXRGbGV4R3JvdyBXZWJraXRGbGV4UG9zaXRpdmUgV2Via2l0RmxleFNocmluayBXZWJraXRMaW5lQ2xhbXBcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApXG4gICAgICApLFxuICAgICAgTUFUSF9OQU1FU1BBQ0UgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIixcbiAgICAgIFNWR19OQU1FU1BBQ0UgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBhbGlhc2VzID0gbmV3IE1hcChbXG4gICAgICAgIFtcImFjY2VwdENoYXJzZXRcIiwgXCJhY2NlcHQtY2hhcnNldFwiXSxcbiAgICAgICAgW1wiaHRtbEZvclwiLCBcImZvclwiXSxcbiAgICAgICAgW1wiaHR0cEVxdWl2XCIsIFwiaHR0cC1lcXVpdlwiXSxcbiAgICAgICAgW1wiY3Jvc3NPcmlnaW5cIiwgXCJjcm9zc29yaWdpblwiXSxcbiAgICAgICAgW1wiYWNjZW50SGVpZ2h0XCIsIFwiYWNjZW50LWhlaWdodFwiXSxcbiAgICAgICAgW1wiYWxpZ25tZW50QmFzZWxpbmVcIiwgXCJhbGlnbm1lbnQtYmFzZWxpbmVcIl0sXG4gICAgICAgIFtcImFyYWJpY0Zvcm1cIiwgXCJhcmFiaWMtZm9ybVwiXSxcbiAgICAgICAgW1wiYmFzZWxpbmVTaGlmdFwiLCBcImJhc2VsaW5lLXNoaWZ0XCJdLFxuICAgICAgICBbXCJjYXBIZWlnaHRcIiwgXCJjYXAtaGVpZ2h0XCJdLFxuICAgICAgICBbXCJjbGlwUGF0aFwiLCBcImNsaXAtcGF0aFwiXSxcbiAgICAgICAgW1wiY2xpcFJ1bGVcIiwgXCJjbGlwLXJ1bGVcIl0sXG4gICAgICAgIFtcImNvbG9ySW50ZXJwb2xhdGlvblwiLCBcImNvbG9yLWludGVycG9sYXRpb25cIl0sXG4gICAgICAgIFtcImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNcIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIl0sXG4gICAgICAgIFtcImNvbG9yUHJvZmlsZVwiLCBcImNvbG9yLXByb2ZpbGVcIl0sXG4gICAgICAgIFtcImNvbG9yUmVuZGVyaW5nXCIsIFwiY29sb3ItcmVuZGVyaW5nXCJdLFxuICAgICAgICBbXCJkb21pbmFudEJhc2VsaW5lXCIsIFwiZG9taW5hbnQtYmFzZWxpbmVcIl0sXG4gICAgICAgIFtcImVuYWJsZUJhY2tncm91bmRcIiwgXCJlbmFibGUtYmFja2dyb3VuZFwiXSxcbiAgICAgICAgW1wiZmlsbE9wYWNpdHlcIiwgXCJmaWxsLW9wYWNpdHlcIl0sXG4gICAgICAgIFtcImZpbGxSdWxlXCIsIFwiZmlsbC1ydWxlXCJdLFxuICAgICAgICBbXCJmbG9vZENvbG9yXCIsIFwiZmxvb2QtY29sb3JcIl0sXG4gICAgICAgIFtcImZsb29kT3BhY2l0eVwiLCBcImZsb29kLW9wYWNpdHlcIl0sXG4gICAgICAgIFtcImZvbnRGYW1pbHlcIiwgXCJmb250LWZhbWlseVwiXSxcbiAgICAgICAgW1wiZm9udFNpemVcIiwgXCJmb250LXNpemVcIl0sXG4gICAgICAgIFtcImZvbnRTaXplQWRqdXN0XCIsIFwiZm9udC1zaXplLWFkanVzdFwiXSxcbiAgICAgICAgW1wiZm9udFN0cmV0Y2hcIiwgXCJmb250LXN0cmV0Y2hcIl0sXG4gICAgICAgIFtcImZvbnRTdHlsZVwiLCBcImZvbnQtc3R5bGVcIl0sXG4gICAgICAgIFtcImZvbnRWYXJpYW50XCIsIFwiZm9udC12YXJpYW50XCJdLFxuICAgICAgICBbXCJmb250V2VpZ2h0XCIsIFwiZm9udC13ZWlnaHRcIl0sXG4gICAgICAgIFtcImdseXBoTmFtZVwiLCBcImdseXBoLW5hbWVcIl0sXG4gICAgICAgIFtcImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiXSxcbiAgICAgICAgW1wiZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIl0sXG4gICAgICAgIFtcImhvcml6QWR2WFwiLCBcImhvcml6LWFkdi14XCJdLFxuICAgICAgICBbXCJob3Jpek9yaWdpblhcIiwgXCJob3Jpei1vcmlnaW4teFwiXSxcbiAgICAgICAgW1wiaW1hZ2VSZW5kZXJpbmdcIiwgXCJpbWFnZS1yZW5kZXJpbmdcIl0sXG4gICAgICAgIFtcImxldHRlclNwYWNpbmdcIiwgXCJsZXR0ZXItc3BhY2luZ1wiXSxcbiAgICAgICAgW1wibGlnaHRpbmdDb2xvclwiLCBcImxpZ2h0aW5nLWNvbG9yXCJdLFxuICAgICAgICBbXCJtYXJrZXJFbmRcIiwgXCJtYXJrZXItZW5kXCJdLFxuICAgICAgICBbXCJtYXJrZXJNaWRcIiwgXCJtYXJrZXItbWlkXCJdLFxuICAgICAgICBbXCJtYXJrZXJTdGFydFwiLCBcIm1hcmtlci1zdGFydFwiXSxcbiAgICAgICAgW1wib3ZlcmxpbmVQb3NpdGlvblwiLCBcIm92ZXJsaW5lLXBvc2l0aW9uXCJdLFxuICAgICAgICBbXCJvdmVybGluZVRoaWNrbmVzc1wiLCBcIm92ZXJsaW5lLXRoaWNrbmVzc1wiXSxcbiAgICAgICAgW1wicGFpbnRPcmRlclwiLCBcInBhaW50LW9yZGVyXCJdLFxuICAgICAgICBbXCJwYW5vc2UtMVwiLCBcInBhbm9zZS0xXCJdLFxuICAgICAgICBbXCJwb2ludGVyRXZlbnRzXCIsIFwicG9pbnRlci1ldmVudHNcIl0sXG4gICAgICAgIFtcInJlbmRlcmluZ0ludGVudFwiLCBcInJlbmRlcmluZy1pbnRlbnRcIl0sXG4gICAgICAgIFtcInNoYXBlUmVuZGVyaW5nXCIsIFwic2hhcGUtcmVuZGVyaW5nXCJdLFxuICAgICAgICBbXCJzdG9wQ29sb3JcIiwgXCJzdG9wLWNvbG9yXCJdLFxuICAgICAgICBbXCJzdG9wT3BhY2l0eVwiLCBcInN0b3Atb3BhY2l0eVwiXSxcbiAgICAgICAgW1wic3RyaWtldGhyb3VnaFBvc2l0aW9uXCIsIFwic3RyaWtldGhyb3VnaC1wb3NpdGlvblwiXSxcbiAgICAgICAgW1wic3RyaWtldGhyb3VnaFRoaWNrbmVzc1wiLCBcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCJdLFxuICAgICAgICBbXCJzdHJva2VEYXNoYXJyYXlcIiwgXCJzdHJva2UtZGFzaGFycmF5XCJdLFxuICAgICAgICBbXCJzdHJva2VEYXNob2Zmc2V0XCIsIFwic3Ryb2tlLWRhc2hvZmZzZXRcIl0sXG4gICAgICAgIFtcInN0cm9rZUxpbmVjYXBcIiwgXCJzdHJva2UtbGluZWNhcFwiXSxcbiAgICAgICAgW1wic3Ryb2tlTGluZWpvaW5cIiwgXCJzdHJva2UtbGluZWpvaW5cIl0sXG4gICAgICAgIFtcInN0cm9rZU1pdGVybGltaXRcIiwgXCJzdHJva2UtbWl0ZXJsaW1pdFwiXSxcbiAgICAgICAgW1wic3Ryb2tlT3BhY2l0eVwiLCBcInN0cm9rZS1vcGFjaXR5XCJdLFxuICAgICAgICBbXCJzdHJva2VXaWR0aFwiLCBcInN0cm9rZS13aWR0aFwiXSxcbiAgICAgICAgW1widGV4dEFuY2hvclwiLCBcInRleHQtYW5jaG9yXCJdLFxuICAgICAgICBbXCJ0ZXh0RGVjb3JhdGlvblwiLCBcInRleHQtZGVjb3JhdGlvblwiXSxcbiAgICAgICAgW1widGV4dFJlbmRlcmluZ1wiLCBcInRleHQtcmVuZGVyaW5nXCJdLFxuICAgICAgICBbXCJ0cmFuc2Zvcm1PcmlnaW5cIiwgXCJ0cmFuc2Zvcm0tb3JpZ2luXCJdLFxuICAgICAgICBbXCJ1bmRlcmxpbmVQb3NpdGlvblwiLCBcInVuZGVybGluZS1wb3NpdGlvblwiXSxcbiAgICAgICAgW1widW5kZXJsaW5lVGhpY2tuZXNzXCIsIFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiXSxcbiAgICAgICAgW1widW5pY29kZUJpZGlcIiwgXCJ1bmljb2RlLWJpZGlcIl0sXG4gICAgICAgIFtcInVuaWNvZGVSYW5nZVwiLCBcInVuaWNvZGUtcmFuZ2VcIl0sXG4gICAgICAgIFtcInVuaXRzUGVyRW1cIiwgXCJ1bml0cy1wZXItZW1cIl0sXG4gICAgICAgIFtcInZBbHBoYWJldGljXCIsIFwidi1hbHBoYWJldGljXCJdLFxuICAgICAgICBbXCJ2SGFuZ2luZ1wiLCBcInYtaGFuZ2luZ1wiXSxcbiAgICAgICAgW1widklkZW9ncmFwaGljXCIsIFwidi1pZGVvZ3JhcGhpY1wiXSxcbiAgICAgICAgW1widk1hdGhlbWF0aWNhbFwiLCBcInYtbWF0aGVtYXRpY2FsXCJdLFxuICAgICAgICBbXCJ2ZWN0b3JFZmZlY3RcIiwgXCJ2ZWN0b3ItZWZmZWN0XCJdLFxuICAgICAgICBbXCJ2ZXJ0QWR2WVwiLCBcInZlcnQtYWR2LXlcIl0sXG4gICAgICAgIFtcInZlcnRPcmlnaW5YXCIsIFwidmVydC1vcmlnaW4teFwiXSxcbiAgICAgICAgW1widmVydE9yaWdpbllcIiwgXCJ2ZXJ0LW9yaWdpbi15XCJdLFxuICAgICAgICBbXCJ3b3JkU3BhY2luZ1wiLCBcIndvcmQtc3BhY2luZ1wiXSxcbiAgICAgICAgW1wid3JpdGluZ01vZGVcIiwgXCJ3cml0aW5nLW1vZGVcIl0sXG4gICAgICAgIFtcInhtbG5zWGxpbmtcIiwgXCJ4bWxuczp4bGlua1wiXSxcbiAgICAgICAgW1wieEhlaWdodFwiLCBcIngtaGVpZ2h0XCJdXG4gICAgICBdKSxcbiAgICAgIHBvc3NpYmxlU3RhbmRhcmROYW1lcyA9IHtcbiAgICAgICAgYWNjZXB0OiBcImFjY2VwdFwiLFxuICAgICAgICBhY2NlcHRjaGFyc2V0OiBcImFjY2VwdENoYXJzZXRcIixcbiAgICAgICAgXCJhY2NlcHQtY2hhcnNldFwiOiBcImFjY2VwdENoYXJzZXRcIixcbiAgICAgICAgYWNjZXNza2V5OiBcImFjY2Vzc0tleVwiLFxuICAgICAgICBhY3Rpb246IFwiYWN0aW9uXCIsXG4gICAgICAgIGFsbG93ZnVsbHNjcmVlbjogXCJhbGxvd0Z1bGxTY3JlZW5cIixcbiAgICAgICAgYWx0OiBcImFsdFwiLFxuICAgICAgICBhczogXCJhc1wiLFxuICAgICAgICBhc3luYzogXCJhc3luY1wiLFxuICAgICAgICBhdXRvY2FwaXRhbGl6ZTogXCJhdXRvQ2FwaXRhbGl6ZVwiLFxuICAgICAgICBhdXRvY29tcGxldGU6IFwiYXV0b0NvbXBsZXRlXCIsXG4gICAgICAgIGF1dG9jb3JyZWN0OiBcImF1dG9Db3JyZWN0XCIsXG4gICAgICAgIGF1dG9mb2N1czogXCJhdXRvRm9jdXNcIixcbiAgICAgICAgYXV0b3BsYXk6IFwiYXV0b1BsYXlcIixcbiAgICAgICAgYXV0b3NhdmU6IFwiYXV0b1NhdmVcIixcbiAgICAgICAgY2FwdHVyZTogXCJjYXB0dXJlXCIsXG4gICAgICAgIGNlbGxwYWRkaW5nOiBcImNlbGxQYWRkaW5nXCIsXG4gICAgICAgIGNlbGxzcGFjaW5nOiBcImNlbGxTcGFjaW5nXCIsXG4gICAgICAgIGNoYWxsZW5nZTogXCJjaGFsbGVuZ2VcIixcbiAgICAgICAgY2hhcnNldDogXCJjaGFyU2V0XCIsXG4gICAgICAgIGNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgICAgICBjaGlsZHJlbjogXCJjaGlsZHJlblwiLFxuICAgICAgICBjaXRlOiBcImNpdGVcIixcbiAgICAgICAgY2xhc3M6IFwiY2xhc3NOYW1lXCIsXG4gICAgICAgIGNsYXNzaWQ6IFwiY2xhc3NJRFwiLFxuICAgICAgICBjbGFzc25hbWU6IFwiY2xhc3NOYW1lXCIsXG4gICAgICAgIGNvbHM6IFwiY29sc1wiLFxuICAgICAgICBjb2xzcGFuOiBcImNvbFNwYW5cIixcbiAgICAgICAgY29udGVudDogXCJjb250ZW50XCIsXG4gICAgICAgIGNvbnRlbnRlZGl0YWJsZTogXCJjb250ZW50RWRpdGFibGVcIixcbiAgICAgICAgY29udGV4dG1lbnU6IFwiY29udGV4dE1lbnVcIixcbiAgICAgICAgY29udHJvbHM6IFwiY29udHJvbHNcIixcbiAgICAgICAgY29udHJvbHNsaXN0OiBcImNvbnRyb2xzTGlzdFwiLFxuICAgICAgICBjb29yZHM6IFwiY29vcmRzXCIsXG4gICAgICAgIGNyb3Nzb3JpZ2luOiBcImNyb3NzT3JpZ2luXCIsXG4gICAgICAgIGRhbmdlcm91c2x5c2V0aW5uZXJodG1sOiBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCIsXG4gICAgICAgIGRhdGE6IFwiZGF0YVwiLFxuICAgICAgICBkYXRldGltZTogXCJkYXRlVGltZVwiLFxuICAgICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgICAgZGVmYXVsdGNoZWNrZWQ6IFwiZGVmYXVsdENoZWNrZWRcIixcbiAgICAgICAgZGVmYXVsdHZhbHVlOiBcImRlZmF1bHRWYWx1ZVwiLFxuICAgICAgICBkZWZlcjogXCJkZWZlclwiLFxuICAgICAgICBkaXI6IFwiZGlyXCIsXG4gICAgICAgIGRpc2FibGVkOiBcImRpc2FibGVkXCIsXG4gICAgICAgIGRpc2FibGVwaWN0dXJlaW5waWN0dXJlOiBcImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlXCIsXG4gICAgICAgIGRpc2FibGVyZW1vdGVwbGF5YmFjazogXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIixcbiAgICAgICAgZG93bmxvYWQ6IFwiZG93bmxvYWRcIixcbiAgICAgICAgZHJhZ2dhYmxlOiBcImRyYWdnYWJsZVwiLFxuICAgICAgICBlbmN0eXBlOiBcImVuY1R5cGVcIixcbiAgICAgICAgZW50ZXJrZXloaW50OiBcImVudGVyS2V5SGludFwiLFxuICAgICAgICBmZXRjaHByaW9yaXR5OiBcImZldGNoUHJpb3JpdHlcIixcbiAgICAgICAgZm9yOiBcImh0bWxGb3JcIixcbiAgICAgICAgZm9ybTogXCJmb3JtXCIsXG4gICAgICAgIGZvcm1tZXRob2Q6IFwiZm9ybU1ldGhvZFwiLFxuICAgICAgICBmb3JtYWN0aW9uOiBcImZvcm1BY3Rpb25cIixcbiAgICAgICAgZm9ybWVuY3R5cGU6IFwiZm9ybUVuY1R5cGVcIixcbiAgICAgICAgZm9ybW5vdmFsaWRhdGU6IFwiZm9ybU5vVmFsaWRhdGVcIixcbiAgICAgICAgZm9ybXRhcmdldDogXCJmb3JtVGFyZ2V0XCIsXG4gICAgICAgIGZyYW1lYm9yZGVyOiBcImZyYW1lQm9yZGVyXCIsXG4gICAgICAgIGhlYWRlcnM6IFwiaGVhZGVyc1wiLFxuICAgICAgICBoZWlnaHQ6IFwiaGVpZ2h0XCIsXG4gICAgICAgIGhpZGRlbjogXCJoaWRkZW5cIixcbiAgICAgICAgaGlnaDogXCJoaWdoXCIsXG4gICAgICAgIGhyZWY6IFwiaHJlZlwiLFxuICAgICAgICBocmVmbGFuZzogXCJocmVmTGFuZ1wiLFxuICAgICAgICBodG1sZm9yOiBcImh0bWxGb3JcIixcbiAgICAgICAgaHR0cGVxdWl2OiBcImh0dHBFcXVpdlwiLFxuICAgICAgICBcImh0dHAtZXF1aXZcIjogXCJodHRwRXF1aXZcIixcbiAgICAgICAgaWNvbjogXCJpY29uXCIsXG4gICAgICAgIGlkOiBcImlkXCIsXG4gICAgICAgIGltYWdlc2l6ZXM6IFwiaW1hZ2VTaXplc1wiLFxuICAgICAgICBpbWFnZXNyY3NldDogXCJpbWFnZVNyY1NldFwiLFxuICAgICAgICBpbmVydDogXCJpbmVydFwiLFxuICAgICAgICBpbm5lcmh0bWw6IFwiaW5uZXJIVE1MXCIsXG4gICAgICAgIGlucHV0bW9kZTogXCJpbnB1dE1vZGVcIixcbiAgICAgICAgaW50ZWdyaXR5OiBcImludGVncml0eVwiLFxuICAgICAgICBpczogXCJpc1wiLFxuICAgICAgICBpdGVtaWQ6IFwiaXRlbUlEXCIsXG4gICAgICAgIGl0ZW1wcm9wOiBcIml0ZW1Qcm9wXCIsXG4gICAgICAgIGl0ZW1yZWY6IFwiaXRlbVJlZlwiLFxuICAgICAgICBpdGVtc2NvcGU6IFwiaXRlbVNjb3BlXCIsXG4gICAgICAgIGl0ZW10eXBlOiBcIml0ZW1UeXBlXCIsXG4gICAgICAgIGtleXBhcmFtczogXCJrZXlQYXJhbXNcIixcbiAgICAgICAga2V5dHlwZTogXCJrZXlUeXBlXCIsXG4gICAgICAgIGtpbmQ6IFwia2luZFwiLFxuICAgICAgICBsYWJlbDogXCJsYWJlbFwiLFxuICAgICAgICBsYW5nOiBcImxhbmdcIixcbiAgICAgICAgbGlzdDogXCJsaXN0XCIsXG4gICAgICAgIGxvb3A6IFwibG9vcFwiLFxuICAgICAgICBsb3c6IFwibG93XCIsXG4gICAgICAgIG1hbmlmZXN0OiBcIm1hbmlmZXN0XCIsXG4gICAgICAgIG1hcmdpbndpZHRoOiBcIm1hcmdpbldpZHRoXCIsXG4gICAgICAgIG1hcmdpbmhlaWdodDogXCJtYXJnaW5IZWlnaHRcIixcbiAgICAgICAgbWF4OiBcIm1heFwiLFxuICAgICAgICBtYXhsZW5ndGg6IFwibWF4TGVuZ3RoXCIsXG4gICAgICAgIG1lZGlhOiBcIm1lZGlhXCIsXG4gICAgICAgIG1lZGlhZ3JvdXA6IFwibWVkaWFHcm91cFwiLFxuICAgICAgICBtZXRob2Q6IFwibWV0aG9kXCIsXG4gICAgICAgIG1pbjogXCJtaW5cIixcbiAgICAgICAgbWlubGVuZ3RoOiBcIm1pbkxlbmd0aFwiLFxuICAgICAgICBtdWx0aXBsZTogXCJtdWx0aXBsZVwiLFxuICAgICAgICBtdXRlZDogXCJtdXRlZFwiLFxuICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgbm9tb2R1bGU6IFwibm9Nb2R1bGVcIixcbiAgICAgICAgbm9uY2U6IFwibm9uY2VcIixcbiAgICAgICAgbm92YWxpZGF0ZTogXCJub1ZhbGlkYXRlXCIsXG4gICAgICAgIG9wZW46IFwib3BlblwiLFxuICAgICAgICBvcHRpbXVtOiBcIm9wdGltdW1cIixcbiAgICAgICAgcGF0dGVybjogXCJwYXR0ZXJuXCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgIHBsYXlzaW5saW5lOiBcInBsYXlzSW5saW5lXCIsXG4gICAgICAgIHBvc3RlcjogXCJwb3N0ZXJcIixcbiAgICAgICAgcHJlbG9hZDogXCJwcmVsb2FkXCIsXG4gICAgICAgIHByb2ZpbGU6IFwicHJvZmlsZVwiLFxuICAgICAgICByYWRpb2dyb3VwOiBcInJhZGlvR3JvdXBcIixcbiAgICAgICAgcmVhZG9ubHk6IFwicmVhZE9ubHlcIixcbiAgICAgICAgcmVmZXJyZXJwb2xpY3k6IFwicmVmZXJyZXJQb2xpY3lcIixcbiAgICAgICAgcmVsOiBcInJlbFwiLFxuICAgICAgICByZXF1aXJlZDogXCJyZXF1aXJlZFwiLFxuICAgICAgICByZXZlcnNlZDogXCJyZXZlcnNlZFwiLFxuICAgICAgICByb2xlOiBcInJvbGVcIixcbiAgICAgICAgcm93czogXCJyb3dzXCIsXG4gICAgICAgIHJvd3NwYW46IFwicm93U3BhblwiLFxuICAgICAgICBzYW5kYm94OiBcInNhbmRib3hcIixcbiAgICAgICAgc2NvcGU6IFwic2NvcGVcIixcbiAgICAgICAgc2NvcGVkOiBcInNjb3BlZFwiLFxuICAgICAgICBzY3JvbGxpbmc6IFwic2Nyb2xsaW5nXCIsXG4gICAgICAgIHNlYW1sZXNzOiBcInNlYW1sZXNzXCIsXG4gICAgICAgIHNlbGVjdGVkOiBcInNlbGVjdGVkXCIsXG4gICAgICAgIHNoYXBlOiBcInNoYXBlXCIsXG4gICAgICAgIHNpemU6IFwic2l6ZVwiLFxuICAgICAgICBzaXplczogXCJzaXplc1wiLFxuICAgICAgICBzcGFuOiBcInNwYW5cIixcbiAgICAgICAgc3BlbGxjaGVjazogXCJzcGVsbENoZWNrXCIsXG4gICAgICAgIHNyYzogXCJzcmNcIixcbiAgICAgICAgc3JjZG9jOiBcInNyY0RvY1wiLFxuICAgICAgICBzcmNsYW5nOiBcInNyY0xhbmdcIixcbiAgICAgICAgc3Jjc2V0OiBcInNyY1NldFwiLFxuICAgICAgICBzdGFydDogXCJzdGFydFwiLFxuICAgICAgICBzdGVwOiBcInN0ZXBcIixcbiAgICAgICAgc3R5bGU6IFwic3R5bGVcIixcbiAgICAgICAgc3VtbWFyeTogXCJzdW1tYXJ5XCIsXG4gICAgICAgIHRhYmluZGV4OiBcInRhYkluZGV4XCIsXG4gICAgICAgIHRhcmdldDogXCJ0YXJnZXRcIixcbiAgICAgICAgdGl0bGU6IFwidGl0bGVcIixcbiAgICAgICAgdHlwZTogXCJ0eXBlXCIsXG4gICAgICAgIHVzZW1hcDogXCJ1c2VNYXBcIixcbiAgICAgICAgdmFsdWU6IFwidmFsdWVcIixcbiAgICAgICAgd2lkdGg6IFwid2lkdGhcIixcbiAgICAgICAgd21vZGU6IFwid21vZGVcIixcbiAgICAgICAgd3JhcDogXCJ3cmFwXCIsXG4gICAgICAgIGFib3V0OiBcImFib3V0XCIsXG4gICAgICAgIGFjY2VudGhlaWdodDogXCJhY2NlbnRIZWlnaHRcIixcbiAgICAgICAgXCJhY2NlbnQtaGVpZ2h0XCI6IFwiYWNjZW50SGVpZ2h0XCIsXG4gICAgICAgIGFjY3VtdWxhdGU6IFwiYWNjdW11bGF0ZVwiLFxuICAgICAgICBhZGRpdGl2ZTogXCJhZGRpdGl2ZVwiLFxuICAgICAgICBhbGlnbm1lbnRiYXNlbGluZTogXCJhbGlnbm1lbnRCYXNlbGluZVwiLFxuICAgICAgICBcImFsaWdubWVudC1iYXNlbGluZVwiOiBcImFsaWdubWVudEJhc2VsaW5lXCIsXG4gICAgICAgIGFsbG93cmVvcmRlcjogXCJhbGxvd1Jlb3JkZXJcIixcbiAgICAgICAgYWxwaGFiZXRpYzogXCJhbHBoYWJldGljXCIsXG4gICAgICAgIGFtcGxpdHVkZTogXCJhbXBsaXR1ZGVcIixcbiAgICAgICAgYXJhYmljZm9ybTogXCJhcmFiaWNGb3JtXCIsXG4gICAgICAgIFwiYXJhYmljLWZvcm1cIjogXCJhcmFiaWNGb3JtXCIsXG4gICAgICAgIGFzY2VudDogXCJhc2NlbnRcIixcbiAgICAgICAgYXR0cmlidXRlbmFtZTogXCJhdHRyaWJ1dGVOYW1lXCIsXG4gICAgICAgIGF0dHJpYnV0ZXR5cGU6IFwiYXR0cmlidXRlVHlwZVwiLFxuICAgICAgICBhdXRvcmV2ZXJzZTogXCJhdXRvUmV2ZXJzZVwiLFxuICAgICAgICBhemltdXRoOiBcImF6aW11dGhcIixcbiAgICAgICAgYmFzZWZyZXF1ZW5jeTogXCJiYXNlRnJlcXVlbmN5XCIsXG4gICAgICAgIGJhc2VsaW5lc2hpZnQ6IFwiYmFzZWxpbmVTaGlmdFwiLFxuICAgICAgICBcImJhc2VsaW5lLXNoaWZ0XCI6IFwiYmFzZWxpbmVTaGlmdFwiLFxuICAgICAgICBiYXNlcHJvZmlsZTogXCJiYXNlUHJvZmlsZVwiLFxuICAgICAgICBiYm94OiBcImJib3hcIixcbiAgICAgICAgYmVnaW46IFwiYmVnaW5cIixcbiAgICAgICAgYmlhczogXCJiaWFzXCIsXG4gICAgICAgIGJ5OiBcImJ5XCIsXG4gICAgICAgIGNhbGNtb2RlOiBcImNhbGNNb2RlXCIsXG4gICAgICAgIGNhcGhlaWdodDogXCJjYXBIZWlnaHRcIixcbiAgICAgICAgXCJjYXAtaGVpZ2h0XCI6IFwiY2FwSGVpZ2h0XCIsXG4gICAgICAgIGNsaXA6IFwiY2xpcFwiLFxuICAgICAgICBjbGlwcGF0aDogXCJjbGlwUGF0aFwiLFxuICAgICAgICBcImNsaXAtcGF0aFwiOiBcImNsaXBQYXRoXCIsXG4gICAgICAgIGNsaXBwYXRodW5pdHM6IFwiY2xpcFBhdGhVbml0c1wiLFxuICAgICAgICBjbGlwcnVsZTogXCJjbGlwUnVsZVwiLFxuICAgICAgICBcImNsaXAtcnVsZVwiOiBcImNsaXBSdWxlXCIsXG4gICAgICAgIGNvbG9yOiBcImNvbG9yXCIsXG4gICAgICAgIGNvbG9yaW50ZXJwb2xhdGlvbjogXCJjb2xvckludGVycG9sYXRpb25cIixcbiAgICAgICAgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCI6IFwiY29sb3JJbnRlcnBvbGF0aW9uXCIsXG4gICAgICAgIGNvbG9yaW50ZXJwb2xhdGlvbmZpbHRlcnM6IFwiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc1wiLFxuICAgICAgICBcImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc1wiOiBcImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNcIixcbiAgICAgICAgY29sb3Jwcm9maWxlOiBcImNvbG9yUHJvZmlsZVwiLFxuICAgICAgICBcImNvbG9yLXByb2ZpbGVcIjogXCJjb2xvclByb2ZpbGVcIixcbiAgICAgICAgY29sb3JyZW5kZXJpbmc6IFwiY29sb3JSZW5kZXJpbmdcIixcbiAgICAgICAgXCJjb2xvci1yZW5kZXJpbmdcIjogXCJjb2xvclJlbmRlcmluZ1wiLFxuICAgICAgICBjb250ZW50c2NyaXB0dHlwZTogXCJjb250ZW50U2NyaXB0VHlwZVwiLFxuICAgICAgICBjb250ZW50c3R5bGV0eXBlOiBcImNvbnRlbnRTdHlsZVR5cGVcIixcbiAgICAgICAgY3Vyc29yOiBcImN1cnNvclwiLFxuICAgICAgICBjeDogXCJjeFwiLFxuICAgICAgICBjeTogXCJjeVwiLFxuICAgICAgICBkOiBcImRcIixcbiAgICAgICAgZGF0YXR5cGU6IFwiZGF0YXR5cGVcIixcbiAgICAgICAgZGVjZWxlcmF0ZTogXCJkZWNlbGVyYXRlXCIsXG4gICAgICAgIGRlc2NlbnQ6IFwiZGVzY2VudFwiLFxuICAgICAgICBkaWZmdXNlY29uc3RhbnQ6IFwiZGlmZnVzZUNvbnN0YW50XCIsXG4gICAgICAgIGRpcmVjdGlvbjogXCJkaXJlY3Rpb25cIixcbiAgICAgICAgZGlzcGxheTogXCJkaXNwbGF5XCIsXG4gICAgICAgIGRpdmlzb3I6IFwiZGl2aXNvclwiLFxuICAgICAgICBkb21pbmFudGJhc2VsaW5lOiBcImRvbWluYW50QmFzZWxpbmVcIixcbiAgICAgICAgXCJkb21pbmFudC1iYXNlbGluZVwiOiBcImRvbWluYW50QmFzZWxpbmVcIixcbiAgICAgICAgZHVyOiBcImR1clwiLFxuICAgICAgICBkeDogXCJkeFwiLFxuICAgICAgICBkeTogXCJkeVwiLFxuICAgICAgICBlZGdlbW9kZTogXCJlZGdlTW9kZVwiLFxuICAgICAgICBlbGV2YXRpb246IFwiZWxldmF0aW9uXCIsXG4gICAgICAgIGVuYWJsZWJhY2tncm91bmQ6IFwiZW5hYmxlQmFja2dyb3VuZFwiLFxuICAgICAgICBcImVuYWJsZS1iYWNrZ3JvdW5kXCI6IFwiZW5hYmxlQmFja2dyb3VuZFwiLFxuICAgICAgICBlbmQ6IFwiZW5kXCIsXG4gICAgICAgIGV4cG9uZW50OiBcImV4cG9uZW50XCIsXG4gICAgICAgIGV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQ6IFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFxuICAgICAgICBmaWxsOiBcImZpbGxcIixcbiAgICAgICAgZmlsbG9wYWNpdHk6IFwiZmlsbE9wYWNpdHlcIixcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIjogXCJmaWxsT3BhY2l0eVwiLFxuICAgICAgICBmaWxscnVsZTogXCJmaWxsUnVsZVwiLFxuICAgICAgICBcImZpbGwtcnVsZVwiOiBcImZpbGxSdWxlXCIsXG4gICAgICAgIGZpbHRlcjogXCJmaWx0ZXJcIixcbiAgICAgICAgZmlsdGVycmVzOiBcImZpbHRlclJlc1wiLFxuICAgICAgICBmaWx0ZXJ1bml0czogXCJmaWx0ZXJVbml0c1wiLFxuICAgICAgICBmbG9vZG9wYWNpdHk6IFwiZmxvb2RPcGFjaXR5XCIsXG4gICAgICAgIFwiZmxvb2Qtb3BhY2l0eVwiOiBcImZsb29kT3BhY2l0eVwiLFxuICAgICAgICBmbG9vZGNvbG9yOiBcImZsb29kQ29sb3JcIixcbiAgICAgICAgXCJmbG9vZC1jb2xvclwiOiBcImZsb29kQ29sb3JcIixcbiAgICAgICAgZm9jdXNhYmxlOiBcImZvY3VzYWJsZVwiLFxuICAgICAgICBmb250ZmFtaWx5OiBcImZvbnRGYW1pbHlcIixcbiAgICAgICAgXCJmb250LWZhbWlseVwiOiBcImZvbnRGYW1pbHlcIixcbiAgICAgICAgZm9udHNpemU6IFwiZm9udFNpemVcIixcbiAgICAgICAgXCJmb250LXNpemVcIjogXCJmb250U2l6ZVwiLFxuICAgICAgICBmb250c2l6ZWFkanVzdDogXCJmb250U2l6ZUFkanVzdFwiLFxuICAgICAgICBcImZvbnQtc2l6ZS1hZGp1c3RcIjogXCJmb250U2l6ZUFkanVzdFwiLFxuICAgICAgICBmb250c3RyZXRjaDogXCJmb250U3RyZXRjaFwiLFxuICAgICAgICBcImZvbnQtc3RyZXRjaFwiOiBcImZvbnRTdHJldGNoXCIsXG4gICAgICAgIGZvbnRzdHlsZTogXCJmb250U3R5bGVcIixcbiAgICAgICAgXCJmb250LXN0eWxlXCI6IFwiZm9udFN0eWxlXCIsXG4gICAgICAgIGZvbnR2YXJpYW50OiBcImZvbnRWYXJpYW50XCIsXG4gICAgICAgIFwiZm9udC12YXJpYW50XCI6IFwiZm9udFZhcmlhbnRcIixcbiAgICAgICAgZm9udHdlaWdodDogXCJmb250V2VpZ2h0XCIsXG4gICAgICAgIFwiZm9udC13ZWlnaHRcIjogXCJmb250V2VpZ2h0XCIsXG4gICAgICAgIGZvcm1hdDogXCJmb3JtYXRcIixcbiAgICAgICAgZnJvbTogXCJmcm9tXCIsXG4gICAgICAgIGZ4OiBcImZ4XCIsXG4gICAgICAgIGZ5OiBcImZ5XCIsXG4gICAgICAgIGcxOiBcImcxXCIsXG4gICAgICAgIGcyOiBcImcyXCIsXG4gICAgICAgIGdseXBobmFtZTogXCJnbHlwaE5hbWVcIixcbiAgICAgICAgXCJnbHlwaC1uYW1lXCI6IFwiZ2x5cGhOYW1lXCIsXG4gICAgICAgIGdseXBob3JpZW50YXRpb25ob3Jpem9udGFsOiBcImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsXCIsXG4gICAgICAgIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiOiBcImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsXCIsXG4gICAgICAgIGdseXBob3JpZW50YXRpb252ZXJ0aWNhbDogXCJnbHlwaE9yaWVudGF0aW9uVmVydGljYWxcIixcbiAgICAgICAgXCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbFwiOiBcImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbFwiLFxuICAgICAgICBnbHlwaHJlZjogXCJnbHlwaFJlZlwiLFxuICAgICAgICBncmFkaWVudHRyYW5zZm9ybTogXCJncmFkaWVudFRyYW5zZm9ybVwiLFxuICAgICAgICBncmFkaWVudHVuaXRzOiBcImdyYWRpZW50VW5pdHNcIixcbiAgICAgICAgaGFuZ2luZzogXCJoYW5naW5nXCIsXG4gICAgICAgIGhvcml6YWR2eDogXCJob3JpekFkdlhcIixcbiAgICAgICAgXCJob3Jpei1hZHYteFwiOiBcImhvcml6QWR2WFwiLFxuICAgICAgICBob3Jpem9yaWdpbng6IFwiaG9yaXpPcmlnaW5YXCIsXG4gICAgICAgIFwiaG9yaXotb3JpZ2luLXhcIjogXCJob3Jpek9yaWdpblhcIixcbiAgICAgICAgaWRlb2dyYXBoaWM6IFwiaWRlb2dyYXBoaWNcIixcbiAgICAgICAgaW1hZ2VyZW5kZXJpbmc6IFwiaW1hZ2VSZW5kZXJpbmdcIixcbiAgICAgICAgXCJpbWFnZS1yZW5kZXJpbmdcIjogXCJpbWFnZVJlbmRlcmluZ1wiLFxuICAgICAgICBpbjI6IFwiaW4yXCIsXG4gICAgICAgIGluOiBcImluXCIsXG4gICAgICAgIGlubGlzdDogXCJpbmxpc3RcIixcbiAgICAgICAgaW50ZXJjZXB0OiBcImludGVyY2VwdFwiLFxuICAgICAgICBrMTogXCJrMVwiLFxuICAgICAgICBrMjogXCJrMlwiLFxuICAgICAgICBrMzogXCJrM1wiLFxuICAgICAgICBrNDogXCJrNFwiLFxuICAgICAgICBrOiBcImtcIixcbiAgICAgICAga2VybmVsbWF0cml4OiBcImtlcm5lbE1hdHJpeFwiLFxuICAgICAgICBrZXJuZWx1bml0bGVuZ3RoOiBcImtlcm5lbFVuaXRMZW5ndGhcIixcbiAgICAgICAga2VybmluZzogXCJrZXJuaW5nXCIsXG4gICAgICAgIGtleXBvaW50czogXCJrZXlQb2ludHNcIixcbiAgICAgICAga2V5c3BsaW5lczogXCJrZXlTcGxpbmVzXCIsXG4gICAgICAgIGtleXRpbWVzOiBcImtleVRpbWVzXCIsXG4gICAgICAgIGxlbmd0aGFkanVzdDogXCJsZW5ndGhBZGp1c3RcIixcbiAgICAgICAgbGV0dGVyc3BhY2luZzogXCJsZXR0ZXJTcGFjaW5nXCIsXG4gICAgICAgIFwibGV0dGVyLXNwYWNpbmdcIjogXCJsZXR0ZXJTcGFjaW5nXCIsXG4gICAgICAgIGxpZ2h0aW5nY29sb3I6IFwibGlnaHRpbmdDb2xvclwiLFxuICAgICAgICBcImxpZ2h0aW5nLWNvbG9yXCI6IFwibGlnaHRpbmdDb2xvclwiLFxuICAgICAgICBsaW1pdGluZ2NvbmVhbmdsZTogXCJsaW1pdGluZ0NvbmVBbmdsZVwiLFxuICAgICAgICBsb2NhbDogXCJsb2NhbFwiLFxuICAgICAgICBtYXJrZXJlbmQ6IFwibWFya2VyRW5kXCIsXG4gICAgICAgIFwibWFya2VyLWVuZFwiOiBcIm1hcmtlckVuZFwiLFxuICAgICAgICBtYXJrZXJoZWlnaHQ6IFwibWFya2VySGVpZ2h0XCIsXG4gICAgICAgIG1hcmtlcm1pZDogXCJtYXJrZXJNaWRcIixcbiAgICAgICAgXCJtYXJrZXItbWlkXCI6IFwibWFya2VyTWlkXCIsXG4gICAgICAgIG1hcmtlcnN0YXJ0OiBcIm1hcmtlclN0YXJ0XCIsXG4gICAgICAgIFwibWFya2VyLXN0YXJ0XCI6IFwibWFya2VyU3RhcnRcIixcbiAgICAgICAgbWFya2VydW5pdHM6IFwibWFya2VyVW5pdHNcIixcbiAgICAgICAgbWFya2Vyd2lkdGg6IFwibWFya2VyV2lkdGhcIixcbiAgICAgICAgbWFzazogXCJtYXNrXCIsXG4gICAgICAgIG1hc2tjb250ZW50dW5pdHM6IFwibWFza0NvbnRlbnRVbml0c1wiLFxuICAgICAgICBtYXNrdW5pdHM6IFwibWFza1VuaXRzXCIsXG4gICAgICAgIG1hdGhlbWF0aWNhbDogXCJtYXRoZW1hdGljYWxcIixcbiAgICAgICAgbW9kZTogXCJtb2RlXCIsXG4gICAgICAgIG51bW9jdGF2ZXM6IFwibnVtT2N0YXZlc1wiLFxuICAgICAgICBvZmZzZXQ6IFwib2Zmc2V0XCIsXG4gICAgICAgIG9wYWNpdHk6IFwib3BhY2l0eVwiLFxuICAgICAgICBvcGVyYXRvcjogXCJvcGVyYXRvclwiLFxuICAgICAgICBvcmRlcjogXCJvcmRlclwiLFxuICAgICAgICBvcmllbnQ6IFwib3JpZW50XCIsXG4gICAgICAgIG9yaWVudGF0aW9uOiBcIm9yaWVudGF0aW9uXCIsXG4gICAgICAgIG9yaWdpbjogXCJvcmlnaW5cIixcbiAgICAgICAgb3ZlcmZsb3c6IFwib3ZlcmZsb3dcIixcbiAgICAgICAgb3ZlcmxpbmVwb3NpdGlvbjogXCJvdmVybGluZVBvc2l0aW9uXCIsXG4gICAgICAgIFwib3ZlcmxpbmUtcG9zaXRpb25cIjogXCJvdmVybGluZVBvc2l0aW9uXCIsXG4gICAgICAgIG92ZXJsaW5ldGhpY2tuZXNzOiBcIm92ZXJsaW5lVGhpY2tuZXNzXCIsXG4gICAgICAgIFwib3ZlcmxpbmUtdGhpY2tuZXNzXCI6IFwib3ZlcmxpbmVUaGlja25lc3NcIixcbiAgICAgICAgcGFpbnRvcmRlcjogXCJwYWludE9yZGVyXCIsXG4gICAgICAgIFwicGFpbnQtb3JkZXJcIjogXCJwYWludE9yZGVyXCIsXG4gICAgICAgIHBhbm9zZTE6IFwicGFub3NlMVwiLFxuICAgICAgICBcInBhbm9zZS0xXCI6IFwicGFub3NlMVwiLFxuICAgICAgICBwYXRobGVuZ3RoOiBcInBhdGhMZW5ndGhcIixcbiAgICAgICAgcGF0dGVybmNvbnRlbnR1bml0czogXCJwYXR0ZXJuQ29udGVudFVuaXRzXCIsXG4gICAgICAgIHBhdHRlcm50cmFuc2Zvcm06IFwicGF0dGVyblRyYW5zZm9ybVwiLFxuICAgICAgICBwYXR0ZXJudW5pdHM6IFwicGF0dGVyblVuaXRzXCIsXG4gICAgICAgIHBvaW50ZXJldmVudHM6IFwicG9pbnRlckV2ZW50c1wiLFxuICAgICAgICBcInBvaW50ZXItZXZlbnRzXCI6IFwicG9pbnRlckV2ZW50c1wiLFxuICAgICAgICBwb2ludHM6IFwicG9pbnRzXCIsXG4gICAgICAgIHBvaW50c2F0eDogXCJwb2ludHNBdFhcIixcbiAgICAgICAgcG9pbnRzYXR5OiBcInBvaW50c0F0WVwiLFxuICAgICAgICBwb2ludHNhdHo6IFwicG9pbnRzQXRaXCIsXG4gICAgICAgIHBvcG92ZXI6IFwicG9wb3ZlclwiLFxuICAgICAgICBwb3BvdmVydGFyZ2V0OiBcInBvcG92ZXJUYXJnZXRcIixcbiAgICAgICAgcG9wb3ZlcnRhcmdldGFjdGlvbjogXCJwb3BvdmVyVGFyZ2V0QWN0aW9uXCIsXG4gICAgICAgIHByZWZpeDogXCJwcmVmaXhcIixcbiAgICAgICAgcHJlc2VydmVhbHBoYTogXCJwcmVzZXJ2ZUFscGhhXCIsXG4gICAgICAgIHByZXNlcnZlYXNwZWN0cmF0aW86IFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLFxuICAgICAgICBwcmltaXRpdmV1bml0czogXCJwcmltaXRpdmVVbml0c1wiLFxuICAgICAgICBwcm9wZXJ0eTogXCJwcm9wZXJ0eVwiLFxuICAgICAgICByOiBcInJcIixcbiAgICAgICAgcmFkaXVzOiBcInJhZGl1c1wiLFxuICAgICAgICByZWZ4OiBcInJlZlhcIixcbiAgICAgICAgcmVmeTogXCJyZWZZXCIsXG4gICAgICAgIHJlbmRlcmluZ2ludGVudDogXCJyZW5kZXJpbmdJbnRlbnRcIixcbiAgICAgICAgXCJyZW5kZXJpbmctaW50ZW50XCI6IFwicmVuZGVyaW5nSW50ZW50XCIsXG4gICAgICAgIHJlcGVhdGNvdW50OiBcInJlcGVhdENvdW50XCIsXG4gICAgICAgIHJlcGVhdGR1cjogXCJyZXBlYXREdXJcIixcbiAgICAgICAgcmVxdWlyZWRleHRlbnNpb25zOiBcInJlcXVpcmVkRXh0ZW5zaW9uc1wiLFxuICAgICAgICByZXF1aXJlZGZlYXR1cmVzOiBcInJlcXVpcmVkRmVhdHVyZXNcIixcbiAgICAgICAgcmVzb3VyY2U6IFwicmVzb3VyY2VcIixcbiAgICAgICAgcmVzdGFydDogXCJyZXN0YXJ0XCIsXG4gICAgICAgIHJlc3VsdDogXCJyZXN1bHRcIixcbiAgICAgICAgcmVzdWx0czogXCJyZXN1bHRzXCIsXG4gICAgICAgIHJvdGF0ZTogXCJyb3RhdGVcIixcbiAgICAgICAgcng6IFwicnhcIixcbiAgICAgICAgcnk6IFwicnlcIixcbiAgICAgICAgc2NhbGU6IFwic2NhbGVcIixcbiAgICAgICAgc2VjdXJpdHk6IFwic2VjdXJpdHlcIixcbiAgICAgICAgc2VlZDogXCJzZWVkXCIsXG4gICAgICAgIHNoYXBlcmVuZGVyaW5nOiBcInNoYXBlUmVuZGVyaW5nXCIsXG4gICAgICAgIFwic2hhcGUtcmVuZGVyaW5nXCI6IFwic2hhcGVSZW5kZXJpbmdcIixcbiAgICAgICAgc2xvcGU6IFwic2xvcGVcIixcbiAgICAgICAgc3BhY2luZzogXCJzcGFjaW5nXCIsXG4gICAgICAgIHNwZWN1bGFyY29uc3RhbnQ6IFwic3BlY3VsYXJDb25zdGFudFwiLFxuICAgICAgICBzcGVjdWxhcmV4cG9uZW50OiBcInNwZWN1bGFyRXhwb25lbnRcIixcbiAgICAgICAgc3BlZWQ6IFwic3BlZWRcIixcbiAgICAgICAgc3ByZWFkbWV0aG9kOiBcInNwcmVhZE1ldGhvZFwiLFxuICAgICAgICBzdGFydG9mZnNldDogXCJzdGFydE9mZnNldFwiLFxuICAgICAgICBzdGRkZXZpYXRpb246IFwic3RkRGV2aWF0aW9uXCIsXG4gICAgICAgIHN0ZW1oOiBcInN0ZW1oXCIsXG4gICAgICAgIHN0ZW12OiBcInN0ZW12XCIsXG4gICAgICAgIHN0aXRjaHRpbGVzOiBcInN0aXRjaFRpbGVzXCIsXG4gICAgICAgIHN0b3Bjb2xvcjogXCJzdG9wQ29sb3JcIixcbiAgICAgICAgXCJzdG9wLWNvbG9yXCI6IFwic3RvcENvbG9yXCIsXG4gICAgICAgIHN0b3BvcGFjaXR5OiBcInN0b3BPcGFjaXR5XCIsXG4gICAgICAgIFwic3RvcC1vcGFjaXR5XCI6IFwic3RvcE9wYWNpdHlcIixcbiAgICAgICAgc3RyaWtldGhyb3VnaHBvc2l0aW9uOiBcInN0cmlrZXRocm91Z2hQb3NpdGlvblwiLFxuICAgICAgICBcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIjogXCJzdHJpa2V0aHJvdWdoUG9zaXRpb25cIixcbiAgICAgICAgc3RyaWtldGhyb3VnaHRoaWNrbmVzczogXCJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzXCIsXG4gICAgICAgIFwic3RyaWtldGhyb3VnaC10aGlja25lc3NcIjogXCJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzXCIsXG4gICAgICAgIHN0cmluZzogXCJzdHJpbmdcIixcbiAgICAgICAgc3Ryb2tlOiBcInN0cm9rZVwiLFxuICAgICAgICBzdHJva2VkYXNoYXJyYXk6IFwic3Ryb2tlRGFzaGFycmF5XCIsXG4gICAgICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBcInN0cm9rZURhc2hhcnJheVwiLFxuICAgICAgICBzdHJva2VkYXNob2Zmc2V0OiBcInN0cm9rZURhc2hvZmZzZXRcIixcbiAgICAgICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBcInN0cm9rZURhc2hvZmZzZXRcIixcbiAgICAgICAgc3Ryb2tlbGluZWNhcDogXCJzdHJva2VMaW5lY2FwXCIsXG4gICAgICAgIFwic3Ryb2tlLWxpbmVjYXBcIjogXCJzdHJva2VMaW5lY2FwXCIsXG4gICAgICAgIHN0cm9rZWxpbmVqb2luOiBcInN0cm9rZUxpbmVqb2luXCIsXG4gICAgICAgIFwic3Ryb2tlLWxpbmVqb2luXCI6IFwic3Ryb2tlTGluZWpvaW5cIixcbiAgICAgICAgc3Ryb2tlbWl0ZXJsaW1pdDogXCJzdHJva2VNaXRlcmxpbWl0XCIsXG4gICAgICAgIFwic3Ryb2tlLW1pdGVybGltaXRcIjogXCJzdHJva2VNaXRlcmxpbWl0XCIsXG4gICAgICAgIHN0cm9rZXdpZHRoOiBcInN0cm9rZVdpZHRoXCIsXG4gICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IFwic3Ryb2tlV2lkdGhcIixcbiAgICAgICAgc3Ryb2tlb3BhY2l0eTogXCJzdHJva2VPcGFjaXR5XCIsXG4gICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIjogXCJzdHJva2VPcGFjaXR5XCIsXG4gICAgICAgIHN1cHByZXNzY29udGVudGVkaXRhYmxld2FybmluZzogXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIixcbiAgICAgICAgc3VwcHJlc3NoeWRyYXRpb253YXJuaW5nOiBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiLFxuICAgICAgICBzdXJmYWNlc2NhbGU6IFwic3VyZmFjZVNjYWxlXCIsXG4gICAgICAgIHN5c3RlbWxhbmd1YWdlOiBcInN5c3RlbUxhbmd1YWdlXCIsXG4gICAgICAgIHRhYmxldmFsdWVzOiBcInRhYmxlVmFsdWVzXCIsXG4gICAgICAgIHRhcmdldHg6IFwidGFyZ2V0WFwiLFxuICAgICAgICB0YXJnZXR5OiBcInRhcmdldFlcIixcbiAgICAgICAgdGV4dGFuY2hvcjogXCJ0ZXh0QW5jaG9yXCIsXG4gICAgICAgIFwidGV4dC1hbmNob3JcIjogXCJ0ZXh0QW5jaG9yXCIsXG4gICAgICAgIHRleHRkZWNvcmF0aW9uOiBcInRleHREZWNvcmF0aW9uXCIsXG4gICAgICAgIFwidGV4dC1kZWNvcmF0aW9uXCI6IFwidGV4dERlY29yYXRpb25cIixcbiAgICAgICAgdGV4dGxlbmd0aDogXCJ0ZXh0TGVuZ3RoXCIsXG4gICAgICAgIHRleHRyZW5kZXJpbmc6IFwidGV4dFJlbmRlcmluZ1wiLFxuICAgICAgICBcInRleHQtcmVuZGVyaW5nXCI6IFwidGV4dFJlbmRlcmluZ1wiLFxuICAgICAgICB0bzogXCJ0b1wiLFxuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNmb3JtXCIsXG4gICAgICAgIHRyYW5zZm9ybW9yaWdpbjogXCJ0cmFuc2Zvcm1PcmlnaW5cIixcbiAgICAgICAgXCJ0cmFuc2Zvcm0tb3JpZ2luXCI6IFwidHJhbnNmb3JtT3JpZ2luXCIsXG4gICAgICAgIHR5cGVvZjogXCJ0eXBlb2ZcIixcbiAgICAgICAgdTE6IFwidTFcIixcbiAgICAgICAgdTI6IFwidTJcIixcbiAgICAgICAgdW5kZXJsaW5lcG9zaXRpb246IFwidW5kZXJsaW5lUG9zaXRpb25cIixcbiAgICAgICAgXCJ1bmRlcmxpbmUtcG9zaXRpb25cIjogXCJ1bmRlcmxpbmVQb3NpdGlvblwiLFxuICAgICAgICB1bmRlcmxpbmV0aGlja25lc3M6IFwidW5kZXJsaW5lVGhpY2tuZXNzXCIsXG4gICAgICAgIFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiOiBcInVuZGVybGluZVRoaWNrbmVzc1wiLFxuICAgICAgICB1bmljb2RlOiBcInVuaWNvZGVcIixcbiAgICAgICAgdW5pY29kZWJpZGk6IFwidW5pY29kZUJpZGlcIixcbiAgICAgICAgXCJ1bmljb2RlLWJpZGlcIjogXCJ1bmljb2RlQmlkaVwiLFxuICAgICAgICB1bmljb2RlcmFuZ2U6IFwidW5pY29kZVJhbmdlXCIsXG4gICAgICAgIFwidW5pY29kZS1yYW5nZVwiOiBcInVuaWNvZGVSYW5nZVwiLFxuICAgICAgICB1bml0c3BlcmVtOiBcInVuaXRzUGVyRW1cIixcbiAgICAgICAgXCJ1bml0cy1wZXItZW1cIjogXCJ1bml0c1BlckVtXCIsXG4gICAgICAgIHVuc2VsZWN0YWJsZTogXCJ1bnNlbGVjdGFibGVcIixcbiAgICAgICAgdmFscGhhYmV0aWM6IFwidkFscGhhYmV0aWNcIixcbiAgICAgICAgXCJ2LWFscGhhYmV0aWNcIjogXCJ2QWxwaGFiZXRpY1wiLFxuICAgICAgICB2YWx1ZXM6IFwidmFsdWVzXCIsXG4gICAgICAgIHZlY3RvcmVmZmVjdDogXCJ2ZWN0b3JFZmZlY3RcIixcbiAgICAgICAgXCJ2ZWN0b3ItZWZmZWN0XCI6IFwidmVjdG9yRWZmZWN0XCIsXG4gICAgICAgIHZlcnNpb246IFwidmVyc2lvblwiLFxuICAgICAgICB2ZXJ0YWR2eTogXCJ2ZXJ0QWR2WVwiLFxuICAgICAgICBcInZlcnQtYWR2LXlcIjogXCJ2ZXJ0QWR2WVwiLFxuICAgICAgICB2ZXJ0b3JpZ2lueDogXCJ2ZXJ0T3JpZ2luWFwiLFxuICAgICAgICBcInZlcnQtb3JpZ2luLXhcIjogXCJ2ZXJ0T3JpZ2luWFwiLFxuICAgICAgICB2ZXJ0b3JpZ2lueTogXCJ2ZXJ0T3JpZ2luWVwiLFxuICAgICAgICBcInZlcnQtb3JpZ2luLXlcIjogXCJ2ZXJ0T3JpZ2luWVwiLFxuICAgICAgICB2aGFuZ2luZzogXCJ2SGFuZ2luZ1wiLFxuICAgICAgICBcInYtaGFuZ2luZ1wiOiBcInZIYW5naW5nXCIsXG4gICAgICAgIHZpZGVvZ3JhcGhpYzogXCJ2SWRlb2dyYXBoaWNcIixcbiAgICAgICAgXCJ2LWlkZW9ncmFwaGljXCI6IFwidklkZW9ncmFwaGljXCIsXG4gICAgICAgIHZpZXdib3g6IFwidmlld0JveFwiLFxuICAgICAgICB2aWV3dGFyZ2V0OiBcInZpZXdUYXJnZXRcIixcbiAgICAgICAgdmlzaWJpbGl0eTogXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgIHZtYXRoZW1hdGljYWw6IFwidk1hdGhlbWF0aWNhbFwiLFxuICAgICAgICBcInYtbWF0aGVtYXRpY2FsXCI6IFwidk1hdGhlbWF0aWNhbFwiLFxuICAgICAgICB2b2NhYjogXCJ2b2NhYlwiLFxuICAgICAgICB3aWR0aHM6IFwid2lkdGhzXCIsXG4gICAgICAgIHdvcmRzcGFjaW5nOiBcIndvcmRTcGFjaW5nXCIsXG4gICAgICAgIFwid29yZC1zcGFjaW5nXCI6IFwid29yZFNwYWNpbmdcIixcbiAgICAgICAgd3JpdGluZ21vZGU6IFwid3JpdGluZ01vZGVcIixcbiAgICAgICAgXCJ3cml0aW5nLW1vZGVcIjogXCJ3cml0aW5nTW9kZVwiLFxuICAgICAgICB4MTogXCJ4MVwiLFxuICAgICAgICB4MjogXCJ4MlwiLFxuICAgICAgICB4OiBcInhcIixcbiAgICAgICAgeGNoYW5uZWxzZWxlY3RvcjogXCJ4Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIHhoZWlnaHQ6IFwieEhlaWdodFwiLFxuICAgICAgICBcIngtaGVpZ2h0XCI6IFwieEhlaWdodFwiLFxuICAgICAgICB4bGlua2FjdHVhdGU6IFwieGxpbmtBY3R1YXRlXCIsXG4gICAgICAgIFwieGxpbms6YWN0dWF0ZVwiOiBcInhsaW5rQWN0dWF0ZVwiLFxuICAgICAgICB4bGlua2FyY3JvbGU6IFwieGxpbmtBcmNyb2xlXCIsXG4gICAgICAgIFwieGxpbms6YXJjcm9sZVwiOiBcInhsaW5rQXJjcm9sZVwiLFxuICAgICAgICB4bGlua2hyZWY6IFwieGxpbmtIcmVmXCIsXG4gICAgICAgIFwieGxpbms6aHJlZlwiOiBcInhsaW5rSHJlZlwiLFxuICAgICAgICB4bGlua3JvbGU6IFwieGxpbmtSb2xlXCIsXG4gICAgICAgIFwieGxpbms6cm9sZVwiOiBcInhsaW5rUm9sZVwiLFxuICAgICAgICB4bGlua3Nob3c6IFwieGxpbmtTaG93XCIsXG4gICAgICAgIFwieGxpbms6c2hvd1wiOiBcInhsaW5rU2hvd1wiLFxuICAgICAgICB4bGlua3RpdGxlOiBcInhsaW5rVGl0bGVcIixcbiAgICAgICAgXCJ4bGluazp0aXRsZVwiOiBcInhsaW5rVGl0bGVcIixcbiAgICAgICAgeGxpbmt0eXBlOiBcInhsaW5rVHlwZVwiLFxuICAgICAgICBcInhsaW5rOnR5cGVcIjogXCJ4bGlua1R5cGVcIixcbiAgICAgICAgeG1sYmFzZTogXCJ4bWxCYXNlXCIsXG4gICAgICAgIFwieG1sOmJhc2VcIjogXCJ4bWxCYXNlXCIsXG4gICAgICAgIHhtbGxhbmc6IFwieG1sTGFuZ1wiLFxuICAgICAgICBcInhtbDpsYW5nXCI6IFwieG1sTGFuZ1wiLFxuICAgICAgICB4bWxuczogXCJ4bWxuc1wiLFxuICAgICAgICBcInhtbDpzcGFjZVwiOiBcInhtbFNwYWNlXCIsXG4gICAgICAgIHhtbG5zeGxpbms6IFwieG1sbnNYbGlua1wiLFxuICAgICAgICBcInhtbG5zOnhsaW5rXCI6IFwieG1sbnNYbGlua1wiLFxuICAgICAgICB4bWxzcGFjZTogXCJ4bWxTcGFjZVwiLFxuICAgICAgICB5MTogXCJ5MVwiLFxuICAgICAgICB5MjogXCJ5MlwiLFxuICAgICAgICB5OiBcInlcIixcbiAgICAgICAgeWNoYW5uZWxzZWxlY3RvcjogXCJ5Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIHo6IFwielwiLFxuICAgICAgICB6b29tYW5kcGFuOiBcInpvb21BbmRQYW5cIlxuICAgICAgfSxcbiAgICAgIGFyaWFQcm9wZXJ0aWVzID0ge1xuICAgICAgICBcImFyaWEtY3VycmVudFwiOiAwLFxuICAgICAgICBcImFyaWEtZGVzY3JpcHRpb25cIjogMCxcbiAgICAgICAgXCJhcmlhLWRldGFpbHNcIjogMCxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogMCxcbiAgICAgICAgXCJhcmlhLWludmFsaWRcIjogMCxcbiAgICAgICAgXCJhcmlhLWtleXNob3J0Y3V0c1wiOiAwLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogMCxcbiAgICAgICAgXCJhcmlhLXJvbGVkZXNjcmlwdGlvblwiOiAwLFxuICAgICAgICBcImFyaWEtYXV0b2NvbXBsZXRlXCI6IDAsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiAwLFxuICAgICAgICBcImFyaWEtaGFzcG9wdXBcIjogMCxcbiAgICAgICAgXCJhcmlhLWxldmVsXCI6IDAsXG4gICAgICAgIFwiYXJpYS1tb2RhbFwiOiAwLFxuICAgICAgICBcImFyaWEtbXVsdGlsaW5lXCI6IDAsXG4gICAgICAgIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIjogMCxcbiAgICAgICAgXCJhcmlhLW9yaWVudGF0aW9uXCI6IDAsXG4gICAgICAgIFwiYXJpYS1wbGFjZWhvbGRlclwiOiAwLFxuICAgICAgICBcImFyaWEtcHJlc3NlZFwiOiAwLFxuICAgICAgICBcImFyaWEtcmVhZG9ubHlcIjogMCxcbiAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAwLFxuICAgICAgICBcImFyaWEtc29ydFwiOiAwLFxuICAgICAgICBcImFyaWEtdmFsdWVtYXhcIjogMCxcbiAgICAgICAgXCJhcmlhLXZhbHVlbWluXCI6IDAsXG4gICAgICAgIFwiYXJpYS12YWx1ZW5vd1wiOiAwLFxuICAgICAgICBcImFyaWEtdmFsdWV0ZXh0XCI6IDAsXG4gICAgICAgIFwiYXJpYS1hdG9taWNcIjogMCxcbiAgICAgICAgXCJhcmlhLWJ1c3lcIjogMCxcbiAgICAgICAgXCJhcmlhLWxpdmVcIjogMCxcbiAgICAgICAgXCJhcmlhLXJlbGV2YW50XCI6IDAsXG4gICAgICAgIFwiYXJpYS1kcm9wZWZmZWN0XCI6IDAsXG4gICAgICAgIFwiYXJpYS1ncmFiYmVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IDAsXG4gICAgICAgIFwiYXJpYS1jb2xjb3VudFwiOiAwLFxuICAgICAgICBcImFyaWEtY29saW5kZXhcIjogMCxcbiAgICAgICAgXCJhcmlhLWNvbHNwYW5cIjogMCxcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IDAsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiAwLFxuICAgICAgICBcImFyaWEtZXJyb3JtZXNzYWdlXCI6IDAsXG4gICAgICAgIFwiYXJpYS1mbG93dG9cIjogMCxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogMCxcbiAgICAgICAgXCJhcmlhLW93bnNcIjogMCxcbiAgICAgICAgXCJhcmlhLXBvc2luc2V0XCI6IDAsXG4gICAgICAgIFwiYXJpYS1yb3djb3VudFwiOiAwLFxuICAgICAgICBcImFyaWEtcm93aW5kZXhcIjogMCxcbiAgICAgICAgXCJhcmlhLXJvd3NwYW5cIjogMCxcbiAgICAgICAgXCJhcmlhLXNldHNpemVcIjogMFxuICAgICAgfSxcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMSA9IHt9LFxuICAgICAgckFSSUEkMSA9IFJlZ0V4cChcbiAgICAgICAgXCJeKGFyaWEpLVs6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdKiRcIlxuICAgICAgKSxcbiAgICAgIHJBUklBQ2FtZWwkMSA9IFJlZ0V4cChcbiAgICAgICAgXCJeKGFyaWEpW0EtWl1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCJcbiAgICAgICksXG4gICAgICBkaWRXYXJuVmFsdWVOdWxsID0gITEsXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzID0ge30sXG4gICAgICBFVkVOVF9OQU1FX1JFR0VYID0gL15vbi4vLFxuICAgICAgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYID0gL15vblteQS1aXS8sXG4gICAgICByQVJJQSA9IFJlZ0V4cChcbiAgICAgICAgXCJeKGFyaWEpLVs6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdKiRcIlxuICAgICAgKSxcbiAgICAgIHJBUklBQ2FtZWwgPSBSZWdFeHAoXG4gICAgICAgIFwiXihhcmlhKVtBLVpdWzpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MF0qJFwiXG4gICAgICApLFxuICAgICAgaXNKYXZhU2NyaXB0UHJvdG9jb2wgPVxuICAgICAgICAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qOi9pLFxuICAgICAgY3VycmVudFJlcGxheWluZ0V2ZW50ID0gbnVsbCxcbiAgICAgIHJlc3RvcmVUYXJnZXQgPSBudWxsLFxuICAgICAgcmVzdG9yZVF1ZXVlID0gbnVsbCxcbiAgICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITEsXG4gICAgICBjYW5Vc2VET00gPSAhKFxuICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93IHx8XG4gICAgICAgIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgfHxcbiAgICAgICAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgICApLFxuICAgICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSAhMTtcbiAgICBpZiAoY2FuVXNlRE9NKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG9wdGlvbnMkanNjb21wJDAgPSB7fTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbnMkanNjb21wJDAsIFwicGFzc2l2ZVwiLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9ICEwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLCBvcHRpb25zJGpzY29tcCQwLCBvcHRpb25zJGpzY29tcCQwKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsIG9wdGlvbnMkanNjb21wJDAsIG9wdGlvbnMkanNjb21wJDApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9ICExO1xuICAgICAgfVxuICAgIHZhciByb290ID0gbnVsbCxcbiAgICAgIHN0YXJ0VGV4dCA9IG51bGwsXG4gICAgICBmYWxsYmFja1RleHQgPSBudWxsLFxuICAgICAgRXZlbnRJbnRlcmZhY2UgPSB7XG4gICAgICAgIGV2ZW50UGhhc2U6IDAsXG4gICAgICAgIGJ1YmJsZXM6IDAsXG4gICAgICAgIGNhbmNlbGFibGU6IDAsXG4gICAgICAgIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0UHJldmVudGVkOiAwLFxuICAgICAgICBpc1RydXN0ZWQ6IDBcbiAgICAgIH0sXG4gICAgICBTeW50aGV0aWNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIFVJRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7IHZpZXc6IDAsIGRldGFpbDogMCB9KSxcbiAgICAgIFN5bnRoZXRpY1VJRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChVSUV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIGxhc3RNb3ZlbWVudFgsXG4gICAgICBsYXN0TW92ZW1lbnRZLFxuICAgICAgbGFzdE1vdXNlRXZlbnQsXG4gICAgICBNb3VzZUV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIHNjcmVlblg6IDAsXG4gICAgICAgIHNjcmVlblk6IDAsXG4gICAgICAgIGNsaWVudFg6IDAsXG4gICAgICAgIGNsaWVudFk6IDAsXG4gICAgICAgIHBhZ2VYOiAwLFxuICAgICAgICBwYWdlWTogMCxcbiAgICAgICAgY3RybEtleTogMCxcbiAgICAgICAgc2hpZnRLZXk6IDAsXG4gICAgICAgIGFsdEtleTogMCxcbiAgICAgICAgbWV0YUtleTogMCxcbiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAgICAgICBidXR0b246IDAsXG4gICAgICAgIGJ1dHRvbnM6IDAsXG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IGV2ZW50LnJlbGF0ZWRUYXJnZXRcbiAgICAgICAgICAgID8gZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnRcbiAgICAgICAgICAgICAgPyBldmVudC50b0VsZW1lbnRcbiAgICAgICAgICAgICAgOiBldmVudC5mcm9tRWxlbWVudFxuICAgICAgICAgICAgOiBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgICB9LFxuICAgICAgICBtb3ZlbWVudFg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChcIm1vdmVtZW50WFwiIGluIGV2ZW50KSByZXR1cm4gZXZlbnQubW92ZW1lbnRYO1xuICAgICAgICAgIGV2ZW50ICE9PSBsYXN0TW91c2VFdmVudCAmJlxuICAgICAgICAgICAgKGxhc3RNb3VzZUV2ZW50ICYmIFwibW91c2Vtb3ZlXCIgPT09IGV2ZW50LnR5cGVcbiAgICAgICAgICAgICAgPyAoKGxhc3RNb3ZlbWVudFggPSBldmVudC5zY3JlZW5YIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWCksXG4gICAgICAgICAgICAgICAgKGxhc3RNb3ZlbWVudFkgPSBldmVudC5zY3JlZW5ZIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWSkpXG4gICAgICAgICAgICAgIDogKGxhc3RNb3ZlbWVudFkgPSBsYXN0TW92ZW1lbnRYID0gMCksXG4gICAgICAgICAgICAobGFzdE1vdXNlRXZlbnQgPSBldmVudCkpO1xuICAgICAgICAgIHJldHVybiBsYXN0TW92ZW1lbnRYO1xuICAgICAgICB9LFxuICAgICAgICBtb3ZlbWVudFk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcIm1vdmVtZW50WVwiIGluIGV2ZW50ID8gZXZlbnQubW92ZW1lbnRZIDogbGFzdE1vdmVtZW50WTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNNb3VzZUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoTW91c2VFdmVudEludGVyZmFjZSksXG4gICAgICBEcmFnRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHsgZGF0YVRyYW5zZmVyOiAwIH0pLFxuICAgICAgU3ludGhldGljRHJhZ0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRHJhZ0V2ZW50SW50ZXJmYWNlKSxcbiAgICAgIEZvY3VzRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHsgcmVsYXRlZFRhcmdldDogMCB9KSxcbiAgICAgIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChGb2N1c0V2ZW50SW50ZXJmYWNlKSxcbiAgICAgIEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICAgICAgICBhbmltYXRpb25OYW1lOiAwLFxuICAgICAgICBlbGFwc2VkVGltZTogMCxcbiAgICAgICAgcHNldWRvRWxlbWVudDogMFxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNBbmltYXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICAgICAgICBjbGlwYm9hcmREYXRhOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJjbGlwYm9hcmREYXRhXCIgaW4gZXZlbnRcbiAgICAgICAgICAgID8gZXZlbnQuY2xpcGJvYXJkRGF0YVxuICAgICAgICAgICAgOiB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNDbGlwYm9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENsaXBib2FyZEV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7IGRhdGE6IDAgfSksXG4gICAgICBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoXG4gICAgICAgIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2VcbiAgICAgICksXG4gICAgICBTeW50aGV0aWNJbnB1dEV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudCxcbiAgICAgIG5vcm1hbGl6ZUtleSA9IHtcbiAgICAgICAgRXNjOiBcIkVzY2FwZVwiLFxuICAgICAgICBTcGFjZWJhcjogXCIgXCIsXG4gICAgICAgIExlZnQ6IFwiQXJyb3dMZWZ0XCIsXG4gICAgICAgIFVwOiBcIkFycm93VXBcIixcbiAgICAgICAgUmlnaHQ6IFwiQXJyb3dSaWdodFwiLFxuICAgICAgICBEb3duOiBcIkFycm93RG93blwiLFxuICAgICAgICBEZWw6IFwiRGVsZXRlXCIsXG4gICAgICAgIFdpbjogXCJPU1wiLFxuICAgICAgICBNZW51OiBcIkNvbnRleHRNZW51XCIsXG4gICAgICAgIEFwcHM6IFwiQ29udGV4dE1lbnVcIixcbiAgICAgICAgU2Nyb2xsOiBcIlNjcm9sbExvY2tcIixcbiAgICAgICAgTW96UHJpbnRhYmxlS2V5OiBcIlVuaWRlbnRpZmllZFwiXG4gICAgICB9LFxuICAgICAgdHJhbnNsYXRlVG9LZXkgPSB7XG4gICAgICAgIDg6IFwiQmFja3NwYWNlXCIsXG4gICAgICAgIDk6IFwiVGFiXCIsXG4gICAgICAgIDEyOiBcIkNsZWFyXCIsXG4gICAgICAgIDEzOiBcIkVudGVyXCIsXG4gICAgICAgIDE2OiBcIlNoaWZ0XCIsXG4gICAgICAgIDE3OiBcIkNvbnRyb2xcIixcbiAgICAgICAgMTg6IFwiQWx0XCIsXG4gICAgICAgIDE5OiBcIlBhdXNlXCIsXG4gICAgICAgIDIwOiBcIkNhcHNMb2NrXCIsXG4gICAgICAgIDI3OiBcIkVzY2FwZVwiLFxuICAgICAgICAzMjogXCIgXCIsXG4gICAgICAgIDMzOiBcIlBhZ2VVcFwiLFxuICAgICAgICAzNDogXCJQYWdlRG93blwiLFxuICAgICAgICAzNTogXCJFbmRcIixcbiAgICAgICAgMzY6IFwiSG9tZVwiLFxuICAgICAgICAzNzogXCJBcnJvd0xlZnRcIixcbiAgICAgICAgMzg6IFwiQXJyb3dVcFwiLFxuICAgICAgICAzOTogXCJBcnJvd1JpZ2h0XCIsXG4gICAgICAgIDQwOiBcIkFycm93RG93blwiLFxuICAgICAgICA0NTogXCJJbnNlcnRcIixcbiAgICAgICAgNDY6IFwiRGVsZXRlXCIsXG4gICAgICAgIDExMjogXCJGMVwiLFxuICAgICAgICAxMTM6IFwiRjJcIixcbiAgICAgICAgMTE0OiBcIkYzXCIsXG4gICAgICAgIDExNTogXCJGNFwiLFxuICAgICAgICAxMTY6IFwiRjVcIixcbiAgICAgICAgMTE3OiBcIkY2XCIsXG4gICAgICAgIDExODogXCJGN1wiLFxuICAgICAgICAxMTk6IFwiRjhcIixcbiAgICAgICAgMTIwOiBcIkY5XCIsXG4gICAgICAgIDEyMTogXCJGMTBcIixcbiAgICAgICAgMTIyOiBcIkYxMVwiLFxuICAgICAgICAxMjM6IFwiRjEyXCIsXG4gICAgICAgIDE0NDogXCJOdW1Mb2NrXCIsXG4gICAgICAgIDE0NTogXCJTY3JvbGxMb2NrXCIsXG4gICAgICAgIDIyNDogXCJNZXRhXCJcbiAgICAgIH0sXG4gICAgICBtb2RpZmllcktleVRvUHJvcCA9IHtcbiAgICAgICAgQWx0OiBcImFsdEtleVwiLFxuICAgICAgICBDb250cm9sOiBcImN0cmxLZXlcIixcbiAgICAgICAgTWV0YTogXCJtZXRhS2V5XCIsXG4gICAgICAgIFNoaWZ0OiBcInNoaWZ0S2V5XCJcbiAgICAgIH0sXG4gICAgICBLZXlib2FyZEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIGtleTogZnVuY3Rpb24gKG5hdGl2ZUV2ZW50KSB7XG4gICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcbiAgICAgICAgICAgIGlmIChcIlVuaWRlbnRpZmllZFwiICE9PSBrZXkpIHJldHVybiBrZXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcImtleXByZXNzXCIgPT09IG5hdGl2ZUV2ZW50LnR5cGVcbiAgICAgICAgICAgID8gKChuYXRpdmVFdmVudCA9IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpKSxcbiAgICAgICAgICAgICAgMTMgPT09IG5hdGl2ZUV2ZW50ID8gXCJFbnRlclwiIDogU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudCkpXG4gICAgICAgICAgICA6IFwia2V5ZG93blwiID09PSBuYXRpdmVFdmVudC50eXBlIHx8IFwia2V5dXBcIiA9PT0gbmF0aXZlRXZlbnQudHlwZVxuICAgICAgICAgICAgICA/IHRyYW5zbGF0ZVRvS2V5W25hdGl2ZUV2ZW50LmtleUNvZGVdIHx8IFwiVW5pZGVudGlmaWVkXCJcbiAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBjb2RlOiAwLFxuICAgICAgICBsb2NhdGlvbjogMCxcbiAgICAgICAgY3RybEtleTogMCxcbiAgICAgICAgc2hpZnRLZXk6IDAsXG4gICAgICAgIGFsdEtleTogMCxcbiAgICAgICAgbWV0YUtleTogMCxcbiAgICAgICAgcmVwZWF0OiAwLFxuICAgICAgICBsb2NhbGU6IDAsXG4gICAgICAgIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgICAgICAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcImtleXByZXNzXCIgPT09IGV2ZW50LnR5cGUgPyBnZXRFdmVudENoYXJDb2RlKGV2ZW50KSA6IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGtleUNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcImtleWRvd25cIiA9PT0gZXZlbnQudHlwZSB8fCBcImtleXVwXCIgPT09IGV2ZW50LnR5cGVcbiAgICAgICAgICAgID8gZXZlbnQua2V5Q29kZVxuICAgICAgICAgICAgOiAwO1xuICAgICAgICB9LFxuICAgICAgICB3aGljaDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwia2V5cHJlc3NcIiA9PT0gZXZlbnQudHlwZVxuICAgICAgICAgICAgPyBnZXRFdmVudENoYXJDb2RlKGV2ZW50KVxuICAgICAgICAgICAgOiBcImtleWRvd25cIiA9PT0gZXZlbnQudHlwZSB8fCBcImtleXVwXCIgPT09IGV2ZW50LnR5cGVcbiAgICAgICAgICAgICAgPyBldmVudC5rZXlDb2RlXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoS2V5Ym9hcmRFdmVudEludGVyZmFjZSksXG4gICAgICBQb2ludGVyRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgcG9pbnRlcklkOiAwLFxuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBwcmVzc3VyZTogMCxcbiAgICAgICAgdGFuZ2VudGlhbFByZXNzdXJlOiAwLFxuICAgICAgICB0aWx0WDogMCxcbiAgICAgICAgdGlsdFk6IDAsXG4gICAgICAgIHR3aXN0OiAwLFxuICAgICAgICBwb2ludGVyVHlwZTogMCxcbiAgICAgICAgaXNQcmltYXJ5OiAwXG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY1BvaW50ZXJFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFBvaW50ZXJFdmVudEludGVyZmFjZSksXG4gICAgICBUb3VjaEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIHRvdWNoZXM6IDAsXG4gICAgICAgIHRhcmdldFRvdWNoZXM6IDAsXG4gICAgICAgIGNoYW5nZWRUb3VjaGVzOiAwLFxuICAgICAgICBhbHRLZXk6IDAsXG4gICAgICAgIG1ldGFLZXk6IDAsXG4gICAgICAgIGN0cmxLZXk6IDAsXG4gICAgICAgIHNoaWZ0S2V5OiAwLFxuICAgICAgICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IDAsXG4gICAgICAgIGVsYXBzZWRUaW1lOiAwLFxuICAgICAgICBwc2V1ZG9FbGVtZW50OiAwXG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRyYW5zaXRpb25FdmVudEludGVyZmFjZSksXG4gICAgICBXaGVlbEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIGRlbHRhWDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwiZGVsdGFYXCIgaW4gZXZlbnRcbiAgICAgICAgICAgID8gZXZlbnQuZGVsdGFYXG4gICAgICAgICAgICA6IFwid2hlZWxEZWx0YVhcIiBpbiBldmVudFxuICAgICAgICAgICAgICA/IC1ldmVudC53aGVlbERlbHRhWFxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwiZGVsdGFZXCIgaW4gZXZlbnRcbiAgICAgICAgICAgID8gZXZlbnQuZGVsdGFZXG4gICAgICAgICAgICA6IFwid2hlZWxEZWx0YVlcIiBpbiBldmVudFxuICAgICAgICAgICAgICA/IC1ldmVudC53aGVlbERlbHRhWVxuICAgICAgICAgICAgICA6IFwid2hlZWxEZWx0YVwiIGluIGV2ZW50XG4gICAgICAgICAgICAgICAgPyAtZXZlbnQud2hlZWxEZWx0YVxuICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsdGFaOiAwLFxuICAgICAgICBkZWx0YU1vZGU6IDBcbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljV2hlZWxFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFdoZWVsRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgVG9nZ2xlRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIG5ld1N0YXRlOiAwLFxuICAgICAgICBvbGRTdGF0ZTogMFxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNUb2dnbGVFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvZ2dsZUV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIEVORF9LRVlDT0RFUyA9IFs5LCAxMywgMjcsIDMyXSxcbiAgICAgIFNUQVJUX0tFWUNPREUgPSAyMjksXG4gICAgICBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gY2FuVXNlRE9NICYmIFwiQ29tcG9zaXRpb25FdmVudFwiIGluIHdpbmRvdyxcbiAgICAgIGRvY3VtZW50TW9kZSA9IG51bGw7XG4gICAgY2FuVXNlRE9NICYmXG4gICAgICBcImRvY3VtZW50TW9kZVwiIGluIGRvY3VtZW50ICYmXG4gICAgICAoZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTtcbiAgICB2YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPVxuICAgICAgICBjYW5Vc2VET00gJiYgXCJUZXh0RXZlbnRcIiBpbiB3aW5kb3cgJiYgIWRvY3VtZW50TW9kZSxcbiAgICAgIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhID1cbiAgICAgICAgY2FuVXNlRE9NICYmXG4gICAgICAgICghY2FuVXNlQ29tcG9zaXRpb25FdmVudCB8fFxuICAgICAgICAgIChkb2N1bWVudE1vZGUgJiYgOCA8IGRvY3VtZW50TW9kZSAmJiAxMSA+PSBkb2N1bWVudE1vZGUpKSxcbiAgICAgIFNQQUNFQkFSX0NPREUgPSAzMixcbiAgICAgIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNQQUNFQkFSX0NPREUpLFxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9ICExLFxuICAgICAgaXNDb21wb3NpbmcgPSAhMSxcbiAgICAgIHN1cHBvcnRlZElucHV0VHlwZXMgPSB7XG4gICAgICAgIGNvbG9yOiAhMCxcbiAgICAgICAgZGF0ZTogITAsXG4gICAgICAgIGRhdGV0aW1lOiAhMCxcbiAgICAgICAgXCJkYXRldGltZS1sb2NhbFwiOiAhMCxcbiAgICAgICAgZW1haWw6ICEwLFxuICAgICAgICBtb250aDogITAsXG4gICAgICAgIG51bWJlcjogITAsXG4gICAgICAgIHBhc3N3b3JkOiAhMCxcbiAgICAgICAgcmFuZ2U6ICEwLFxuICAgICAgICBzZWFyY2g6ICEwLFxuICAgICAgICB0ZWw6ICEwLFxuICAgICAgICB0ZXh0OiAhMCxcbiAgICAgICAgdGltZTogITAsXG4gICAgICAgIHVybDogITAsXG4gICAgICAgIHdlZWs6ICEwXG4gICAgICB9LFxuICAgICAgYWN0aXZlRWxlbWVudCQxID0gbnVsbCxcbiAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsLFxuICAgICAgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gITE7XG4gICAgY2FuVXNlRE9NICYmXG4gICAgICAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkID1cbiAgICAgICAgaXNFdmVudFN1cHBvcnRlZChcImlucHV0XCIpICYmXG4gICAgICAgICghZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IDkgPCBkb2N1bWVudC5kb2N1bWVudE1vZGUpKTtcbiAgICB2YXIgb2JqZWN0SXMgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBPYmplY3QuaXMgPyBPYmplY3QuaXMgOiBpcyxcbiAgICAgIHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCA9XG4gICAgICAgIGNhblVzZURPTSAmJiBcImRvY3VtZW50TW9kZVwiIGluIGRvY3VtZW50ICYmIDExID49IGRvY3VtZW50LmRvY3VtZW50TW9kZSxcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBudWxsLFxuICAgICAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsLFxuICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGwsXG4gICAgICBtb3VzZURvd24gPSAhMSxcbiAgICAgIHZlbmRvclByZWZpeGVzID0ge1xuICAgICAgICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoXCJBbmltYXRpb25cIiwgXCJBbmltYXRpb25FbmRcIiksXG4gICAgICAgIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcChcIkFuaW1hdGlvblwiLCBcIkFuaW1hdGlvbkl0ZXJhdGlvblwiKSxcbiAgICAgICAgYW5pbWF0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoXCJBbmltYXRpb25cIiwgXCJBbmltYXRpb25TdGFydFwiKSxcbiAgICAgICAgdHJhbnNpdGlvbnJ1bjogbWFrZVByZWZpeE1hcChcIlRyYW5zaXRpb25cIiwgXCJUcmFuc2l0aW9uUnVuXCIpLFxuICAgICAgICB0cmFuc2l0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoXCJUcmFuc2l0aW9uXCIsIFwiVHJhbnNpdGlvblN0YXJ0XCIpLFxuICAgICAgICB0cmFuc2l0aW9uY2FuY2VsOiBtYWtlUHJlZml4TWFwKFwiVHJhbnNpdGlvblwiLCBcIlRyYW5zaXRpb25DYW5jZWxcIiksXG4gICAgICAgIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoXCJUcmFuc2l0aW9uXCIsIFwiVHJhbnNpdGlvbkVuZFwiKVxuICAgICAgfSxcbiAgICAgIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9LFxuICAgICAgc3R5bGUgPSB7fTtcbiAgICBjYW5Vc2VET00gJiZcbiAgICAgICgoc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlKSxcbiAgICAgIFwiQW5pbWF0aW9uRXZlbnRcIiBpbiB3aW5kb3cgfHxcbiAgICAgICAgKGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25lbmQuYW5pbWF0aW9uLFxuICAgICAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixcbiAgICAgICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXG4gICAgICBcIlRyYW5zaXRpb25FdmVudFwiIGluIHdpbmRvdyB8fFxuICAgICAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtcbiAgICB2YXIgQU5JTUFUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwiYW5pbWF0aW9uZW5kXCIpLFxuICAgICAgQU5JTUFUSU9OX0lURVJBVElPTiA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwiYW5pbWF0aW9uaXRlcmF0aW9uXCIpLFxuICAgICAgQU5JTUFUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJhbmltYXRpb25zdGFydFwiKSxcbiAgICAgIFRSQU5TSVRJT05fUlVOID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJ0cmFuc2l0aW9ucnVuXCIpLFxuICAgICAgVFJBTlNJVElPTl9TVEFSVCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwidHJhbnNpdGlvbnN0YXJ0XCIpLFxuICAgICAgVFJBTlNJVElPTl9DQU5DRUwgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShcInRyYW5zaXRpb25jYW5jZWxcIiksXG4gICAgICBUUkFOU0lUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwidHJhbnNpdGlvbmVuZFwiKSxcbiAgICAgIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcCgpLFxuICAgICAgc2ltcGxlRXZlbnRQbHVnaW5FdmVudHMgPVxuICAgICAgICBcImFib3J0IGF1eENsaWNrIGJlZm9yZVRvZ2dsZSBjYW5jZWwgY2FuUGxheSBjYW5QbGF5VGhyb3VnaCBjbGljayBjbG9zZSBjb250ZXh0TWVudSBjb3B5IGN1dCBkcmFnIGRyYWdFbmQgZHJhZ0VudGVyIGRyYWdFeGl0IGRyYWdMZWF2ZSBkcmFnT3ZlciBkcmFnU3RhcnQgZHJvcCBkdXJhdGlvbkNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBnb3RQb2ludGVyQ2FwdHVyZSBpbnB1dCBpbnZhbGlkIGtleURvd24ga2V5UHJlc3Mga2V5VXAgbG9hZCBsb2FkZWREYXRhIGxvYWRlZE1ldGFkYXRhIGxvYWRTdGFydCBsb3N0UG9pbnRlckNhcHR1cmUgbW91c2VEb3duIG1vdXNlTW92ZSBtb3VzZU91dCBtb3VzZU92ZXIgbW91c2VVcCBwYXN0ZSBwYXVzZSBwbGF5IHBsYXlpbmcgcG9pbnRlckNhbmNlbCBwb2ludGVyRG93biBwb2ludGVyTW92ZSBwb2ludGVyT3V0IHBvaW50ZXJPdmVyIHBvaW50ZXJVcCBwcm9ncmVzcyByYXRlQ2hhbmdlIHJlc2V0IHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWVVcGRhdGUgdG91Y2hDYW5jZWwgdG91Y2hFbmQgdG91Y2hTdGFydCB2b2x1bWVDaGFuZ2Ugc2Nyb2xsIHRvZ2dsZSB0b3VjaE1vdmUgd2FpdGluZyB3aGVlbFwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICk7XG4gICAgc2ltcGxlRXZlbnRQbHVnaW5FdmVudHMucHVzaChcInNjcm9sbEVuZFwiKTtcbiAgICB2YXIgQ2FwdHVyZWRTdGFja3MgPSBuZXcgV2Vha01hcCgpLFxuICAgICAgT2Zmc2NyZWVuVmlzaWJsZSA9IDEsXG4gICAgICBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCA9IDIsXG4gICAgICBjb25jdXJyZW50UXVldWVzID0gW10sXG4gICAgICBjb25jdXJyZW50UXVldWVzSW5kZXggPSAwLFxuICAgICAgY29uY3VycmVudGx5VXBkYXRlZExhbmVzID0gMCxcbiAgICAgIGVtcHR5Q29udGV4dE9iamVjdCA9IHt9O1xuICAgIE9iamVjdC5mcmVlemUoZW1wdHlDb250ZXh0T2JqZWN0KTtcbiAgICB2YXIgcmVzb2x2ZUZhbWlseSA9IG51bGwsXG4gICAgICBmYWlsZWRCb3VuZGFyaWVzID0gbnVsbCxcbiAgICAgIE5vTW9kZSA9IDAsXG4gICAgICBDb25jdXJyZW50TW9kZSA9IDEsXG4gICAgICBQcm9maWxlTW9kZSA9IDIsXG4gICAgICBTdHJpY3RMZWdhY3lNb2RlID0gOCxcbiAgICAgIFN0cmljdEVmZmVjdHNNb2RlID0gMTYsXG4gICAgICBOb1N0cmljdFBhc3NpdmVFZmZlY3RzTW9kZSA9IDY0O1xuICAgIHZhciBoYXNCYWRNYXBQb2x5ZmlsbCA9ICExO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSk7XG4gICAgICBuZXcgTWFwKFtbbm9uRXh0ZW5zaWJsZU9iamVjdCwgbnVsbF1dKTtcbiAgICAgIG5ldyBTZXQoW25vbkV4dGVuc2libGVPYmplY3RdKTtcbiAgICB9IGNhdGNoIChlJDMpIHtcbiAgICAgIGhhc0JhZE1hcFBvbHlmaWxsID0gITA7XG4gICAgfVxuICAgIHZhciBmb3JrU3RhY2sgPSBbXSxcbiAgICAgIGZvcmtTdGFja0luZGV4ID0gMCxcbiAgICAgIHRyZWVGb3JrUHJvdmlkZXIgPSBudWxsLFxuICAgICAgdHJlZUZvcmtDb3VudCA9IDAsXG4gICAgICBpZFN0YWNrID0gW10sXG4gICAgICBpZFN0YWNrSW5kZXggPSAwLFxuICAgICAgdHJlZUNvbnRleHRQcm92aWRlciA9IG51bGwsXG4gICAgICB0cmVlQ29udGV4dElkID0gMSxcbiAgICAgIHRyZWVDb250ZXh0T3ZlcmZsb3cgPSBcIlwiLFxuICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsLFxuICAgICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGwsXG4gICAgICBpc0h5ZHJhdGluZyA9ICExLFxuICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMSxcbiAgICAgIGh5ZHJhdGlvbkRpZmZSb290REVWID0gbnVsbCxcbiAgICAgIGh5ZHJhdGlvbkVycm9ycyA9IG51bGwsXG4gICAgICByb290T3JTaW5nbGV0b25Db250ZXh0ID0gITEsXG4gICAgICBIeWRyYXRpb25NaXNtYXRjaEV4Y2VwdGlvbiA9IEVycm9yKFxuICAgICAgICBcIkh5ZHJhdGlvbiBNaXNtYXRjaCBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciwgYW5kIHNob3VsZCBub3QgbGVhayBpbnRvIHVzZXJzcGFjZS4gSWYgeW91J3JlIHNlZWluZyB0aGlzLCBpdCdzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKSxcbiAgICAgIGxhc3RSZXNldFRpbWUgPSAwO1xuICAgIGlmIChcbiAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBwZXJmb3JtYW5jZSAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcGVyZm9ybWFuY2Uubm93XG4gICAgKSB7XG4gICAgICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuICAgICAgdmFyIGdldEN1cnJlbnRUaW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxQZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsb2NhbERhdGUgPSBEYXRlO1xuICAgICAgZ2V0Q3VycmVudFRpbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBsb2NhbERhdGUubm93KCk7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG4gICAgdmFyIHJlbmRlcmVyQ3Vyc29yREVWID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuICAgIHZhciByZW5kZXJlclNpZ2lsID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsLFxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbCxcbiAgICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSAhMSxcbiAgICAgIEFib3J0Q29udHJvbGxlckxvY2FsID1cbiAgICAgICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIEFib3J0Q29udHJvbGxlclxuICAgICAgICAgID8gQWJvcnRDb250cm9sbGVyXG4gICAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXSxcbiAgICAgICAgICAgICAgICBzaWduYWwgPSAodGhpcy5zaWduYWwgPSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydGVkOiAhMSxcbiAgICAgICAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2lnbmFsLmFib3J0ZWQgPSAhMDtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgIHNjaGVkdWxlQ2FsbGJhY2skMiA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFxuICAgICAgTm9ybWFsUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgICBDYWNoZUNvbnRleHQgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICAgIENvbnN1bWVyOiBudWxsLFxuICAgICAgICBQcm92aWRlcjogbnVsbCxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTogbnVsbCxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTI6IG51bGwsXG4gICAgICAgIF90aHJlYWRDb3VudDogMCxcbiAgICAgICAgX2N1cnJlbnRSZW5kZXJlcjogbnVsbCxcbiAgICAgICAgX2N1cnJlbnRSZW5kZXJlcjI6IG51bGxcbiAgICAgIH0sXG4gICAgICBub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93LFxuICAgICAgcmVuZGVyU3RhcnRUaW1lID0gLTAsXG4gICAgICBjb21taXRTdGFydFRpbWUgPSAtMCxcbiAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTEuMSxcbiAgICAgIHByb2ZpbGVyRWZmZWN0RHVyYXRpb24gPSAtMCxcbiAgICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9ICExLFxuICAgICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gITEsXG4gICAgICBjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzID0gbnVsbCxcbiAgICAgIGN1cnJlbnRFbnRhbmdsZWRQZW5kaW5nQ291bnQgPSAwLFxuICAgICAgY3VycmVudEVudGFuZ2xlZExhbmUgPSAwLFxuICAgICAgY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0gbnVsbCxcbiAgICAgIHByZXZPblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlM7XG4gICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuUyA9IGZ1bmN0aW9uICh0cmFuc2l0aW9uLCByZXR1cm5WYWx1ZSkge1xuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlICYmXG4gICAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlLnRoZW4gJiZcbiAgICAgICAgZW50YW5nbGVBc3luY0FjdGlvbih0cmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICBudWxsICE9PSBwcmV2T25TdGFydFRyYW5zaXRpb25GaW5pc2ggJiZcbiAgICAgICAgcHJldk9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKHRyYW5zaXRpb24sIHJldHVyblZhbHVlKTtcbiAgICB9O1xuICAgIHZhciByZXN1bWVkQ2FjaGUgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncyA9IHtcbiAgICAgICAgcmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgICBmbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKCkge30sXG4gICAgICAgIHJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKCkge30sXG4gICAgICAgIGRpc2NhcmRQZW5kaW5nV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9XG4gICAgICB9LFxuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW10sXG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW10sXG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW10sXG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdLFxuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdLFxuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXSxcbiAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoXG4gICAgICBmaWJlcixcbiAgICAgIGluc3RhbmNlXG4gICAgKSB7XG4gICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSB8fFxuICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgITAgIT09IGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICYmXG4gICAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpLFxuICAgICAgICBmaWJlci5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpLFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgITAgIT09XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgJiZcbiAgICAgICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpLFxuICAgICAgICBmaWJlci5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlciksXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICAhMCAhPT0gaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICYmXG4gICAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKSxcbiAgICAgICAgZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpKTtcbiAgICB9O1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgMCA8IHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICB9KSxcbiAgICAgICAgKHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdKSk7XG4gICAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgMCA8IHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoICYmXG4gICAgICAgIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICB9KSxcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXSkpO1xuICAgICAgdmFyIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW10pKTtcbiAgICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgMCA8IHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChcbiAgICAgICAgICBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXSkpO1xuICAgICAgdmFyIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIChwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW10pKTtcbiAgICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgMCA8IHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICB9KSxcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW10pKTtcbiAgICAgIGlmICgwIDwgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUpIHtcbiAgICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoXG4gICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzXCIsXG4gICAgICAgICAgc29ydGVkTmFtZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIDAgPCBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgJiZcbiAgICAgICAgKChzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXNcbiAgICAgICAgKSksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbiogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4qIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvZGVyaXZlZC1zdGF0ZVxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICkpO1xuICAgICAgMCA8IFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSAmJlxuICAgICAgICAoKHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoXG4gICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lc1xuICAgICAgICApKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlVzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICkpO1xuICAgICAgMCA8IGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgJiZcbiAgICAgICAgKChzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKSksXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcImNvbXBvbmVudFdpbGxNb3VudCBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4qIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4qIFJlbmFtZSBjb21wb25lbnRXaWxsTW91bnQgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCB0byBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiBUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuIGBucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICkpO1xuICAgICAgMCA8IGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplICYmXG4gICAgICAgICgoc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhcbiAgICAgICAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXNcbiAgICAgICAgKSksXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgcmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9kZXJpdmVkLXN0YXRlXFxuKiBSZW5hbWUgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiBUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuIGBucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICkpO1xuICAgICAgMCA8IGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplICYmXG4gICAgICAgICgoc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpKSxcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiY29tcG9uZW50V2lsbFVwZGF0ZSBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4qIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuKiBSZW5hbWUgY29tcG9uZW50V2lsbFVwZGF0ZSB0byBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSB0byBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiBUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuIGBucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICkpO1xuICAgIH07XG4gICAgdmFyIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKSxcbiAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQgPSBuZXcgU2V0KCk7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoXG4gICAgICBmaWJlcixcbiAgICAgIGluc3RhbmNlXG4gICAgKSB7XG4gICAgICB2YXIgc3RyaWN0Um9vdCA9IG51bGw7XG4gICAgICBmb3IgKHZhciBub2RlID0gZmliZXI7IG51bGwgIT09IG5vZGU7IClcbiAgICAgICAgbm9kZS5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJiAoc3RyaWN0Um9vdCA9IG5vZGUpLFxuICAgICAgICAgIChub2RlID0gbm9kZS5yZXR1cm4pO1xuICAgICAgbnVsbCA9PT0gc3RyaWN0Um9vdFxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgYSBTdHJpY3RNb2RlIGNvbXBvbmVudCBpbiBhIHN0cmljdCBtb2RlIHRyZWUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApXG4gICAgICAgIDogIWRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuaGFzKGZpYmVyLnR5cGUpICYmXG4gICAgICAgICAgKChub2RlID0gcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmdldChzdHJpY3RSb290KSksXG4gICAgICAgICAgbnVsbCAhPSBmaWJlci50eXBlLmNvbnRleHRUeXBlcyB8fFxuICAgICAgICAgICAgbnVsbCAhPSBmaWJlci50eXBlLmNoaWxkQ29udGV4dFR5cGVzIHx8XG4gICAgICAgICAgICAobnVsbCAhPT0gaW5zdGFuY2UgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KSkgJiZcbiAgICAgICAgICAodm9pZCAwID09PSBub2RlICYmXG4gICAgICAgICAgICAoKG5vZGUgPSBbXSksIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5zZXQoc3RyaWN0Um9vdCwgbm9kZSkpLFxuICAgICAgICAgIG5vZGUucHVzaChmaWJlcikpO1xuICAgIH07XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlckFycmF5KSB7XG4gICAgICAgIGlmICgwICE9PSBmaWJlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXSxcbiAgICAgICAgICAgIHVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgICAgIGZpYmVyQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgIHVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiKTtcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKHVuaXF1ZU5hbWVzKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaXJzdEZpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkxlZ2FjeSBjb250ZXh0IEFQSSBoYXMgYmVlbiBkZXRlY3RlZCB3aXRoaW4gYSBzdHJpY3QtbW9kZSB0cmVlLlxcblxcblRoZSBvbGQgQVBJIHdpbGwgYmUgc3VwcG9ydGVkIGluIGFsbCAxNi54IHJlbGVhc2VzLCBidXQgYXBwbGljYXRpb25zIHVzaW5nIGl0IHNob3VsZCBtaWdyYXRlIHRvIHRoZSBuZXcgdmVyc2lvbi5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcXG5cXG5MZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOiBodHRwczovL3JlYWN0LmRldi9saW5rL2xlZ2FjeS1jb250ZXh0XCIsXG4gICAgICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpO1xuICAgIH07XG4gICAgdmFyIFN1c3BlbnNlRXhjZXB0aW9uID0gRXJyb3IoXG4gICAgICAgIFwiU3VzcGVuc2UgRXhjZXB0aW9uOiBUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IhIEl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIGB1c2VgIHRvIGludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIuIFlvdSBtdXN0IGVpdGhlciByZXRocm93IGl0IGltbWVkaWF0ZWx5LCBvciBtb3ZlIHRoZSBgdXNlYCBjYWxsIG91dHNpZGUgb2YgdGhlIGB0cnkvY2F0Y2hgIGJsb2NrLiBDYXB0dXJpbmcgd2l0aG91dCByZXRocm93aW5nIHdpbGwgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yLlxcblxcblRvIGhhbmRsZSBhc3luYyBlcnJvcnMsIHdyYXAgeW91ciBjb21wb25lbnQgaW4gYW4gZXJyb3IgYm91bmRhcnksIG9yIGNhbGwgdGhlIHByb21pc2UncyBgLmNhdGNoYCBtZXRob2QgYW5kIHBhc3MgdGhlIHJlc3VsdCB0byBgdXNlYC5cIlxuICAgICAgKSxcbiAgICAgIFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvbiA9IEVycm9yKFxuICAgICAgICBcIlN1c3BlbnNlIEV4Y2VwdGlvbjogVGhpcyBpcyBub3QgYSByZWFsIGVycm9yLCBhbmQgc2hvdWxkIG5vdCBsZWFrIGludG8gdXNlcnNwYWNlLiBJZiB5b3UncmUgc2VlaW5nIHRoaXMsIGl0J3MgbGlrZWx5IGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICApLFxuICAgICAgU3VzcGVuc2VBY3Rpb25FeGNlcHRpb24gPSBFcnJvcihcbiAgICAgICAgXCJTdXNwZW5zZSBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciEgSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgYHVzZUFjdGlvblN0YXRlYCB0byBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgcmVuZGVyLiBZb3UgbXVzdCBlaXRoZXIgcmV0aHJvdyBpdCBpbW1lZGlhdGVseSwgb3IgbW92ZSB0aGUgYHVzZUFjdGlvblN0YXRlYCBjYWxsIG91dHNpZGUgb2YgdGhlIGB0cnkvY2F0Y2hgIGJsb2NrLiBDYXB0dXJpbmcgd2l0aG91dCByZXRocm93aW5nIHdpbGwgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yLlxcblxcblRvIGhhbmRsZSBhc3luYyBlcnJvcnMsIHdyYXAgeW91ciBjb21wb25lbnQgaW4gYW4gZXJyb3IgYm91bmRhcnkuXCJcbiAgICAgICksXG4gICAgICBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUgPSB7XG4gICAgICAgIHRoZW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ0ludGVybmFsIFJlYWN0IGVycm9yOiBBIGxpc3RlbmVyIHdhcyB1bmV4cGVjdGVkbHkgYXR0YWNoZWQgdG8gYSBcIm5vb3BcIiB0aGVuYWJsZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzdXNwZW5kZWRUaGVuYWJsZSA9IG51bGwsXG4gICAgICBuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9ICExLFxuICAgICAgTm9GbGFncyA9IDAsXG4gICAgICBIYXNFZmZlY3QgPSAxLFxuICAgICAgSW5zZXJ0aW9uID0gMixcbiAgICAgIExheW91dCA9IDQsXG4gICAgICBQYXNzaXZlID0gOCxcbiAgICAgIFVwZGF0ZVN0YXRlID0gMCxcbiAgICAgIFJlcGxhY2VTdGF0ZSA9IDEsXG4gICAgICBGb3JjZVVwZGF0ZSA9IDIsXG4gICAgICBDYXB0dXJlVXBkYXRlID0gMyxcbiAgICAgIGhhc0ZvcmNlVXBkYXRlID0gITE7XG4gICAgdmFyIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSAhMTtcbiAgICB2YXIgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbiAgICB2YXIgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICExLFxuICAgICAgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcigwKSxcbiAgICAgIGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90O1xuICAgIHZhciBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVzZVdyYXBwZWRJblRyeUNhdGNoID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0VXNlRm9ybVN0YXRlID0gbmV3IFNldCgpO1xuICAgIHZhciByZW5kZXJMYW5lcyA9IDAsXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGwsXG4gICAgICBjdXJyZW50SG9vayA9IG51bGwsXG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsLFxuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9ICExLFxuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gITEsXG4gICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViA9ICExLFxuICAgICAgbG9jYWxJZENvdW50ZXIgPSAwLFxuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDAsXG4gICAgICB0aGVuYWJsZVN0YXRlJDEgPSBudWxsLFxuICAgICAgZ2xvYmFsQ2xpZW50SWRDb3VudGVyID0gMCxcbiAgICAgIFJFX1JFTkRFUl9MSU1JVCA9IDI1LFxuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsLFxuICAgICAgaG9va1R5cGVzRGV2ID0gbnVsbCxcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTEsXG4gICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9ICExLFxuICAgICAgQ29udGV4dE9ubHlEaXNwYXRjaGVyID0ge1xuICAgICAgICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gICAgICAgIHVzZTogdXNlLFxuICAgICAgICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlTWVtbzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VSZWR1Y2VyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZVJlZjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VTdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VEZWJ1Z1ZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZURlZmVycmVkVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlVHJhbnNpdGlvbjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VJZDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VGb3JtU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlQWN0aW9uU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlT3B0aW1pc3RpYzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VNZW1vQ2FjaGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlQ2FjaGVSZWZyZXNoOiB0aHJvd0ludmFsaWRIb29rRXJyb3JcbiAgICAgIH0sXG4gICAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsLFxuICAgICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IG51bGwsXG4gICAgICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbCxcbiAgICAgIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGwsXG4gICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbCxcbiAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbCxcbiAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGNyZWF0ZURlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihjcmVhdGVEZXBzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgY3JlYXRlRGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgbW91bnRFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50U3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICB9LFxuICAgICAgdXNlRm9ybVN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICB3YXJuT25Vc2VGb3JtU3RhdGVJbkRldigpO1xuICAgICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgICB9LFxuICAgICAgdXNlQWN0aW9uU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUpO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRPcHRpbWlzdGljKHBhc3N0aHJvdWdoKTtcbiAgICAgIH0sXG4gICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMsXG4gICAgICB1c2VNZW1vQ2FjaGU6IHVzZU1lbW9DYWNoZSxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZTogdXNlLFxuICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgY3JlYXRlRGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBjcmVhdGVEZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICBtb3VudEVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWJ1Z1ZhbHVlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50U3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRJZCgpO1xuICAgICAgfSxcbiAgICAgIHVzZUFjdGlvblN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgICB9LFxuICAgICAgdXNlRm9ybVN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgd2Fybk9uVXNlRm9ybVN0YXRlSW5EZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUpO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50T3B0aW1pc3RpYyhwYXNzdGhyb3VnaCk7XG4gICAgICB9LFxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzLFxuICAgICAgdXNlTWVtb0NhY2hlOiB1c2VNZW1vQ2FjaGUsXG4gICAgICB1c2VDYWNoZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhY2hlUmVmcmVzaFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgY3JlYXRlRGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB1cGRhdGVFZmZlY3RJbXBsKDIwNDgsIFBhc3NpdmUsIGNyZWF0ZSwgY3JlYXRlRGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWJ1Z1ZhbHVlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VGb3JtU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgd2Fybk9uVXNlRm9ybVN0YXRlSW5EZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgICB9LFxuICAgICAgdXNlQWN0aW9uU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VPcHRpbWlzdGljOiBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICAgIH0sXG4gICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMsXG4gICAgICB1c2VNZW1vQ2FjaGU6IHVzZU1lbW9DYWNoZSxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgY3JlYXRlRGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB1cGRhdGVFZmZlY3RJbXBsKDIwNDgsIFBhc3NpdmUsIGNyZWF0ZSwgY3JlYXRlRGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIH0sXG4gICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVmZXJyZWRWYWx1ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZUZvcm1TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB3YXJuT25Vc2VGb3JtU3RhdGVJbkRldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZUFjdGlvblN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VPcHRpbWlzdGljOiBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlck9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgICAgfSxcbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOiB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cyxcbiAgICAgIHVzZU1lbW9DYWNoZTogdXNlTWVtb0NhY2hlLFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH07XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZTogZnVuY3Rpb24gKHVzYWJsZSkge1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHVzZSh1c2FibGUpO1xuICAgICAgfSxcbiAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGNyZWF0ZURlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgY3JlYXRlRGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgbW91bnRFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIH0sXG4gICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVmZXJyZWRWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50SWQoKTtcbiAgICAgIH0sXG4gICAgICB1c2VGb3JtU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgICB9LFxuICAgICAgdXNlQWN0aW9uU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0sXG4gICAgICB1c2VPcHRpbWlzdGljOiBmdW5jdGlvbiAocGFzc3Rocm91Z2gpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudE9wdGltaXN0aWMocGFzc3Rocm91Z2gpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW9DYWNoZTogZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2VNZW1vQ2FjaGUoc2l6ZSk7XG4gICAgICB9LFxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzLFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IGZ1bmN0aW9uICh1c2FibGUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICAgIH0sXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBjcmVhdGVEZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB1cGRhdGVFZmZlY3RJbXBsKDIwNDgsIFBhc3NpdmUsIGNyZWF0ZSwgY3JlYXRlRGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VGb3JtU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZUFjdGlvblN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vQ2FjaGU6IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICByZXR1cm4gdXNlTWVtb0NhY2hlKHNpemUpO1xuICAgICAgfSxcbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOiB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cyxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IGZ1bmN0aW9uICh1c2FibGUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICAgIH0sXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBjcmVhdGVEZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB1cGRhdGVFZmZlY3RJbXBsKDIwNDgsIFBhc3NpdmUsIGNyZWF0ZSwgY3JlYXRlRGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZUZvcm1TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VBY3Rpb25TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlck9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW9DYWNoZTogZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2VNZW1vQ2FjaGUoc2l6ZSk7XG4gICAgICB9LFxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzLFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGNhbGxDb21wb25lbnQgPSB7XG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCI6IGZ1bmN0aW9uIChDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpIHtcbiAgICAgICAgICB2YXIgd2FzUmVuZGVyaW5nID0gaXNSZW5kZXJpbmc7XG4gICAgICAgICAgaXNSZW5kZXJpbmcgPSAhMDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaXNSZW5kZXJpbmcgPSB3YXNSZW5kZXJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudEluREVWID1cbiAgICAgICAgY2FsbENvbXBvbmVudFtcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiXS5iaW5kKGNhbGxDb21wb25lbnQpLFxuICAgICAgY2FsbFJlbmRlciA9IHtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgdmFyIHdhc1JlbmRlcmluZyA9IGlzUmVuZGVyaW5nO1xuICAgICAgICAgIGlzUmVuZGVyaW5nID0gITA7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXIoKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaXNSZW5kZXJpbmcgPSB3YXNSZW5kZXJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbFJlbmRlckluREVWID0gY2FsbFJlbmRlcltcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiXS5iaW5kKGNhbGxSZW5kZXIpLFxuICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50ID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoZmluaXNoZWRXb3JrLCBpbnN0YW5jZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsQ29tcG9uZW50RGlkTW91bnRJbkRFViA9IGNhbGxDb21wb25lbnREaWRNb3VudFtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIlxuICAgICAgXS5iaW5kKGNhbGxDb21wb25lbnREaWRNb3VudCksXG4gICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgICBwcmV2U3RhdGUsXG4gICAgICAgICAgc25hcHNob3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlSW5ERVYgPSBjYWxsQ29tcG9uZW50RGlkVXBkYXRlW1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiXG4gICAgICBdLmJpbmQoY2FsbENvbXBvbmVudERpZFVwZGF0ZSksXG4gICAgICBjYWxsQ29tcG9uZW50RGlkQ2F0Y2ggPSB7XG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCI6IGZ1bmN0aW9uIChpbnN0YW5jZSwgZXJyb3JJbmZvKSB7XG4gICAgICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoKGVycm9ySW5mby52YWx1ZSwge1xuICAgICAgICAgICAgY29tcG9uZW50U3RhY2s6IG51bGwgIT09IHN0YWNrID8gc3RhY2sgOiBcIlwiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsQ29tcG9uZW50RGlkQ2F0Y2hJbkRFViA9IGNhbGxDb21wb25lbnREaWRDYXRjaFtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIlxuICAgICAgXS5iaW5kKGNhbGxDb21wb25lbnREaWRDYXRjaCksXG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFVubW91bnQgPSB7XG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCI6IGZ1bmN0aW9uIChcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRJbkRFViA9IGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIlxuICAgICAgXS5iaW5kKGNhbGxDb21wb25lbnRXaWxsVW5tb3VudCksXG4gICAgICBjYWxsQ3JlYXRlID0ge1xuICAgICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoZWZmZWN0KSB7XG4gICAgICAgICAgbnVsbCAhPSBlZmZlY3QucmVzb3VyY2VLaW5kICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkIG9ubHkgU2ltcGxlRWZmZWN0cyB3aGVuIGVuYWJsZVVzZUVmZmVjdENSVURPdmVybG9hZCBpcyBkaXNhYmxlZCwgZ290ICVzXCIsXG4gICAgICAgICAgICAgIGVmZmVjdC5yZXNvdXJjZUtpbmRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lmluc3Q7XG4gICAgICAgICAgY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgICAgICAgcmV0dXJuIChlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsQ3JlYXRlSW5ERVYgPSBjYWxsQ3JlYXRlW1wicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJdLmJpbmQoY2FsbENyZWF0ZSksXG4gICAgICBjYWxsRGVzdHJveSA9IHtcbiAgICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICBkZXN0cm95XG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZXN0cm95KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsRGVzdHJveUluREVWID1cbiAgICAgICAgY2FsbERlc3Ryb3lbXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIl0uYmluZChjYWxsRGVzdHJveSksXG4gICAgICBjYWxsTGF6eUluaXQgPSB7XG4gICAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCI6IGZ1bmN0aW9uIChsYXp5KSB7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Ll9pbml0O1xuICAgICAgICAgIHJldHVybiBpbml0KGxhenkuX3BheWxvYWQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbExhenlJbml0SW5ERVYgPVxuICAgICAgICBjYWxsTGF6eUluaXRbXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIl0uYmluZChjYWxsTGF6eUluaXQpLFxuICAgICAgdGhlbmFibGVTdGF0ZSA9IG51bGwsXG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciA9IDAsXG4gICAgICBjdXJyZW50RGVidWdJbmZvID0gbnVsbCxcbiAgICAgIGRpZFdhcm5BYm91dE1hcHM7XG4gICAgdmFyIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSAoZGlkV2FybkFib3V0TWFwcyA9ICExKTtcbiAgICB2YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4gICAgdmFyIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZyA9IHt9O1xuICAgIHZhciBvd25lckhhc1N5bWJvbFR5cGVXYXJuaW5nID0ge307XG4gICAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAocmV0dXJuRmliZXIsIHdvcmtJblByb2dyZXNzLCBjaGlsZCkge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBjaGlsZCAmJlxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgY2hpbGQgJiZcbiAgICAgICAgY2hpbGQuX3N0b3JlICYmXG4gICAgICAgICgoIWNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgJiYgbnVsbCA9PSBjaGlsZC5rZXkpIHx8XG4gICAgICAgICAgMiA9PT0gY2hpbGQuX3N0b3JlLnZhbGlkYXRlZClcbiAgICAgICkge1xuICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGNoaWxkLl9zdG9yZSlcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3QgQ29tcG9uZW50IGluIHdhcm5Gb3JNaXNzaW5nS2V5IHNob3VsZCBoYXZlIGEgX3N0b3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCA9IDE7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlciksXG4gICAgICAgICAgY29tcG9uZW50S2V5ID0gY29tcG9uZW50TmFtZSB8fCBcIm51bGxcIjtcbiAgICAgICAgaWYgKCFvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50S2V5XSkge1xuICAgICAgICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnRLZXldID0gITA7XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5fb3duZXI7XG4gICAgICAgICAgcmV0dXJuRmliZXIgPSByZXR1cm5GaWJlci5fZGVidWdPd25lcjtcbiAgICAgICAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IFwiXCI7XG4gICAgICAgICAgcmV0dXJuRmliZXIgJiZcbiAgICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiByZXR1cm5GaWJlci50YWcgJiZcbiAgICAgICAgICAgIChjb21wb25lbnRLZXkgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSkgJiZcbiAgICAgICAgICAgIChjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID1cbiAgICAgICAgICAgICAgXCJcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgXCIgKyBjb21wb25lbnRLZXkgKyBcImAuXCIpO1xuICAgICAgICAgIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gfHxcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lICYmXG4gICAgICAgICAgICAgIChjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID1cbiAgICAgICAgICAgICAgICBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICtcbiAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lICtcbiAgICAgICAgICAgICAgICBcIj4uXCIpKTtcbiAgICAgICAgICB2YXIgY2hpbGRPd25lckFwcGVuZGl4ID0gXCJcIjtcbiAgICAgICAgICBudWxsICE9IGNoaWxkICYmXG4gICAgICAgICAgICByZXR1cm5GaWJlciAhPT0gY2hpbGQgJiZcbiAgICAgICAgICAgICgoY29tcG9uZW50TmFtZSA9IG51bGwpLFxuICAgICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIGNoaWxkLnRhZ1xuICAgICAgICAgICAgICA/IChjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihjaGlsZCkpXG4gICAgICAgICAgICAgIDogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGNoaWxkLm5hbWUgJiYgKGNvbXBvbmVudE5hbWUgPSBjaGlsZC5uYW1lKSxcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgKGNoaWxkT3duZXJBcHBlbmRpeCA9XG4gICAgICAgICAgICAgICAgXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBjb21wb25lbnROYW1lICsgXCIuXCIpKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVih3b3JrSW5Qcm9ncmVzcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4lcyVzIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLFxuICAgICAgICAgICAgICBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLFxuICAgICAgICAgICAgICBjaGlsZE93bmVyQXBwZW5kaXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciByZWNvbmNpbGVDaGlsZEZpYmVycyA9IGNyZWF0ZUNoaWxkUmVjb25jaWxlcighMCksXG4gICAgICBtb3VudENoaWxkRmliZXJzID0gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKCExKSxcbiAgICAgIHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgc2hlbGxCb3VuZGFyeSA9IG51bGwsXG4gICAgICBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDEsXG4gICAgICBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgPSAyLFxuICAgICAgc3VzcGVuc2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcigwKSxcbiAgICAgIGZha2VJbnRlcm5hbEluc3RhbmNlID0ge307XG4gICAgdmFyIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlcyQxID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRDaGlsZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBuZXcgU2V0KCk7XG4gICAgT2JqZWN0LmZyZWV6ZShmYWtlSW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgdmFyIGNsYXNzQ29tcG9uZW50VXBkYXRlciA9IHtcbiAgICAgICAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICAgICAgICBpbnN0ID0gaW5zdC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShpbnN0KSxcbiAgICAgICAgICAgIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICAgICAgdm9pZCAwICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgICh3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2spLCAodXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2spKTtcbiAgICAgICAgICBwYXlsb2FkID0gZW5xdWV1ZVVwZGF0ZShpbnN0LCB1cGRhdGUsIGxhbmUpO1xuICAgICAgICAgIG51bGwgIT09IHBheWxvYWQgJiZcbiAgICAgICAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF5bG9hZCwgaW5zdCwgbGFuZSksXG4gICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHBheWxvYWQsIGluc3QsIGxhbmUpKTtcbiAgICAgICAgICBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoaW5zdCwgbGFuZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgICAgICAgIGluc3QgPSBpbnN0Ll9yZWFjdEludGVybmFscztcbiAgICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGluc3QpLFxuICAgICAgICAgICAgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgICAgIHVwZGF0ZS50YWcgPSBSZXBsYWNlU3RhdGU7XG4gICAgICAgICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgICAgIHZvaWQgMCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICAod2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrKSwgKHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrKSk7XG4gICAgICAgICAgcGF5bG9hZCA9IGVucXVldWVVcGRhdGUoaW5zdCwgdXBkYXRlLCBsYW5lKTtcbiAgICAgICAgICBudWxsICE9PSBwYXlsb2FkICYmXG4gICAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBheWxvYWQsIGluc3QsIGxhbmUpLFxuICAgICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhwYXlsb2FkLCBpbnN0LCBsYW5lKSk7XG4gICAgICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGluc3QsIGxhbmUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChpbnN0LCBjYWxsYmFjaykge1xuICAgICAgICAgIGluc3QgPSBpbnN0Ll9yZWFjdEludGVybmFscztcbiAgICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGluc3QpLFxuICAgICAgICAgICAgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcbiAgICAgICAgICB2b2lkIDAgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICBudWxsICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgKHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjayksICh1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaykpO1xuICAgICAgICAgIGNhbGxiYWNrID0gZW5xdWV1ZVVwZGF0ZShpbnN0LCB1cGRhdGUsIGxhbmUpO1xuICAgICAgICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGNhbGxiYWNrLCBpbnN0LCBsYW5lKSxcbiAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMoY2FsbGJhY2ssIGluc3QsIGxhbmUpKTtcbiAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtGb3JjZVVwZGF0ZVNjaGVkdWxlZCAmJlxuICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrRm9yY2VVcGRhdGVTY2hlZHVsZWQoaW5zdCwgbGFuZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXBvcnRHbG9iYWxFcnJvciA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlcG9ydEVycm9yXG4gICAgICAgICAgPyByZXBvcnRFcnJvclxuICAgICAgICAgIDogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygd2luZG93ICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygd2luZG93LkVycm9yRXZlbnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gbmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIiwge1xuICAgICAgICAgICAgICAgICAgYnViYmxlczogITAsXG4gICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCkpIHJldHVybjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByb2Nlc3MuZW1pdFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoXCJ1bmNhdWdodEV4Y2VwdGlvblwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSxcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBudWxsLFxuICAgICAgZXJyb3JCb3VuZGFyeU5hbWUgPSBudWxsLFxuICAgICAgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uID0gRXJyb3IoXG4gICAgICAgIFwiVGhpcyBpcyBub3QgYSByZWFsIGVycm9yLiBJdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBSZWFjdCdzIHNlbGVjdGl2ZSBoeWRyYXRpb24gZmVhdHVyZS4gSWYgdGhpcyBsZWFrcyBpbnRvIHVzZXJzcGFjZSwgaXQncyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICksXG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gITE7XG4gICAgdmFyIGRpZFdhcm5BYm91dEJhZENsYXNzID0ge307XG4gICAgdmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZXMgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gITE7XG4gICAgdmFyIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyID0ge307XG4gICAgdmFyIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG4gICAgdmFyIFNVU1BFTkRFRF9NQVJLRVIgPSB7XG4gICAgICAgIGRlaHlkcmF0ZWQ6IG51bGwsXG4gICAgICAgIHRyZWVDb250ZXh0OiBudWxsLFxuICAgICAgICByZXRyeUxhbmU6IDAsXG4gICAgICAgIGh5ZHJhdGlvbkVycm9yczogbnVsbFxuICAgICAgfSxcbiAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gITEsXG4gICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG4gICAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9ICExLFxuICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9ICExLFxuICAgICAgbmVlZHNGb3JtUmVzZXQgPSAhMSxcbiAgICAgIFBvc3NpYmx5V2Vha1NldCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtTZXQgPyBXZWFrU2V0IDogU2V0LFxuICAgICAgbmV4dEVmZmVjdCA9IG51bGwsXG4gICAgICBpblByb2dyZXNzTGFuZXMgPSBudWxsLFxuICAgICAgaW5Qcm9ncmVzc1Jvb3QgPSBudWxsLFxuICAgICAgaG9zdFBhcmVudCA9IG51bGwsXG4gICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMSxcbiAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gbnVsbCxcbiAgICAgIHN1c3BlbnNleUNvbW1pdEZsYWcgPSA4MTkyLFxuICAgICAgRGVmYXVsdEFzeW5jRGlzcGF0Y2hlciA9IHtcbiAgICAgICAgZ2V0Q2FjaGVGb3JUeXBlOiBmdW5jdGlvbiAocmVzb3VyY2VUeXBlKSB7XG4gICAgICAgICAgdmFyIGNhY2hlID0gcmVhZENvbnRleHQoQ2FjaGVDb250ZXh0KSxcbiAgICAgICAgICAgIGNhY2hlRm9yVHlwZSA9IGNhY2hlLmRhdGEuZ2V0KHJlc291cmNlVHlwZSk7XG4gICAgICAgICAgdm9pZCAwID09PSBjYWNoZUZvclR5cGUgJiZcbiAgICAgICAgICAgICgoY2FjaGVGb3JUeXBlID0gcmVzb3VyY2VUeXBlKCkpLFxuICAgICAgICAgICAgY2FjaGUuZGF0YS5zZXQocmVzb3VyY2VUeXBlLCBjYWNoZUZvclR5cGUpKTtcbiAgICAgICAgICByZXR1cm4gY2FjaGVGb3JUeXBlO1xuICAgICAgICB9LFxuICAgICAgICBnZXRPd25lcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTeW1ib2wgJiYgU3ltYm9sLmZvcikge1xuICAgICAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci5jb21wb25lbnRcIik7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci5oYXNfcHNldWRvX2NsYXNzXCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3Iucm9sZVwiKTtcbiAgICAgIHN5bWJvbEZvcihcInNlbGVjdG9yLnRlc3RfaWRcIik7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci50ZXh0XCIpO1xuICAgIH1cbiAgICB2YXIgY29tbWl0SG9va3MgPSBbXSxcbiAgICAgIFBvc3NpYmx5V2Vha01hcCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtNYXAgPyBXZWFrTWFwIDogTWFwLFxuICAgICAgTm9Db250ZXh0ID0gMCxcbiAgICAgIFJlbmRlckNvbnRleHQgPSAyLFxuICAgICAgQ29tbWl0Q29udGV4dCA9IDQsXG4gICAgICBSb290SW5Qcm9ncmVzcyA9IDAsXG4gICAgICBSb290RmF0YWxFcnJvcmVkID0gMSxcbiAgICAgIFJvb3RFcnJvcmVkID0gMixcbiAgICAgIFJvb3RTdXNwZW5kZWQgPSAzLFxuICAgICAgUm9vdFN1c3BlbmRlZFdpdGhEZWxheSA9IDQsXG4gICAgICBSb290U3VzcGVuZGVkQXRUaGVTaGVsbCA9IDYsXG4gICAgICBSb290Q29tcGxldGVkID0gNSxcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBOb0NvbnRleHQsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSAwLFxuICAgICAgTm90U3VzcGVuZGVkID0gMCxcbiAgICAgIFN1c3BlbmRlZE9uRXJyb3IgPSAxLFxuICAgICAgU3VzcGVuZGVkT25EYXRhID0gMixcbiAgICAgIFN1c3BlbmRlZE9uSW1tZWRpYXRlID0gMyxcbiAgICAgIFN1c3BlbmRlZE9uSW5zdGFuY2UgPSA0LFxuICAgICAgU3VzcGVuZGVkT25JbnN0YW5jZUFuZFJlYWR5VG9Db250aW51ZSA9IDUsXG4gICAgICBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2UgPSA2LFxuICAgICAgU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlID0gNyxcbiAgICAgIFN1c3BlbmRlZE9uSHlkcmF0aW9uID0gOCxcbiAgICAgIFN1c3BlbmRlZE9uQWN0aW9uID0gOSxcbiAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkLFxuICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MgPSAhMSxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nID0gITEsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgPSAhMSxcbiAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gMCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5Qcm9ncmVzcyxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9IG51bGwsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IG51bGwsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRJbmNsdWRlUmVjdXJzaXZlUmVuZGVyVXBkYXRlID0gITEsXG4gICAgICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMCxcbiAgICAgIEZBTExCQUNLX1RIUk9UVExFX01TID0gMzAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IEluZmluaXR5LFxuICAgICAgUkVOREVSX1RJTUVPVVRfTVMgPSA1MDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gbnVsbCxcbiAgICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbCxcbiAgICAgIElNTUVESUFURV9DT01NSVQgPSAwLFxuICAgICAgU1VTUEVOREVEX0NPTU1JVCA9IDEsXG4gICAgICBUSFJPVFRMRURfQ09NTUlUID0gMixcbiAgICAgIE5PX1BFTkRJTkdfRUZGRUNUUyA9IDAsXG4gICAgICBQRU5ESU5HX01VVEFUSU9OX1BIQVNFID0gMSxcbiAgICAgIFBFTkRJTkdfTEFZT1VUX1BIQVNFID0gMixcbiAgICAgIFBFTkRJTkdfQUZURVJfTVVUQVRJT05fUEhBU0UgPSAzLFxuICAgICAgUEVORElOR19TUEFXTkVEX1dPUksgPSA0LFxuICAgICAgUEVORElOR19QQVNTSVZFX1BIQVNFID0gNSxcbiAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gMCxcbiAgICAgIHBlbmRpbmdFZmZlY3RzUm9vdCA9IG51bGwsXG4gICAgICBwZW5kaW5nRmluaXNoZWRXb3JrID0gbnVsbCxcbiAgICAgIHBlbmRpbmdFZmZlY3RzTGFuZXMgPSAwLFxuICAgICAgcGVuZGluZ0VmZmVjdHNSZW1haW5pbmdMYW5lcyA9IDAsXG4gICAgICBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zID0gbnVsbCxcbiAgICAgIHBlbmRpbmdSZWNvdmVyYWJsZUVycm9ycyA9IG51bGwsXG4gICAgICBORVNURURfVVBEQVRFX0xJTUlUID0gNTAsXG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDAsXG4gICAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsLFxuICAgICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gITEsXG4gICAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gITEsXG4gICAgICBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQgPSA1MCxcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDAsXG4gICAgICByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gbnVsbCxcbiAgICAgIGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9ICExLFxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG51bGwsXG4gICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9ICExO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGZha2VBY3RDYWxsYmFja05vZGUkMSA9IHt9LFxuICAgICAgZmlyc3RTY2hlZHVsZWRSb290ID0gbnVsbCxcbiAgICAgIGxhc3RTY2hlZHVsZWRSb290ID0gbnVsbCxcbiAgICAgIGRpZFNjaGVkdWxlTWljcm90YXNrID0gITEsXG4gICAgICBkaWRTY2hlZHVsZU1pY3JvdGFza19hY3QgPSAhMSxcbiAgICAgIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9ICExLFxuICAgICAgaXNGbHVzaGluZ1dvcmsgPSAhMSxcbiAgICAgIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gMCxcbiAgICAgIGZha2VBY3RDYWxsYmFja05vZGUgPSB7fTtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaW1wbGVFdmVudFBsdWdpbkV2ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXZlbnROYW1lID0gc2ltcGxlRXZlbnRQbHVnaW5FdmVudHNbaV0sXG4gICAgICAgICAgZG9tRXZlbnROYW1lID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZVswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnROYW1lLnNsaWNlKDEpO1xuICAgICAgICByZWdpc3RlclNpbXBsZUV2ZW50KGRvbUV2ZW50TmFtZSwgXCJvblwiICsgZXZlbnROYW1lKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX0VORCwgXCJvbkFuaW1hdGlvbkVuZFwiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX0lURVJBVElPTiwgXCJvbkFuaW1hdGlvbkl0ZXJhdGlvblwiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX1NUQVJULCBcIm9uQW5pbWF0aW9uU3RhcnRcIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KFwiZGJsY2xpY2tcIiwgXCJvbkRvdWJsZUNsaWNrXCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChcImZvY3VzaW5cIiwgXCJvbkZvY3VzXCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChcImZvY3Vzb3V0XCIsIFwib25CbHVyXCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX1JVTiwgXCJvblRyYW5zaXRpb25SdW5cIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KFRSQU5TSVRJT05fU1RBUlQsIFwib25UcmFuc2l0aW9uU3RhcnRcIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KFRSQU5TSVRJT05fQ0FOQ0VMLCBcIm9uVHJhbnNpdGlvbkNhbmNlbFwiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoVFJBTlNJVElPTl9FTkQsIFwib25UcmFuc2l0aW9uRW5kXCIpO1xuICAgIH0pKCk7XG4gICAgcmVnaXN0ZXJEaXJlY3RFdmVudChcIm9uTW91c2VFbnRlclwiLCBbXCJtb3VzZW91dFwiLCBcIm1vdXNlb3ZlclwiXSk7XG4gICAgcmVnaXN0ZXJEaXJlY3RFdmVudChcIm9uTW91c2VMZWF2ZVwiLCBbXCJtb3VzZW91dFwiLCBcIm1vdXNlb3ZlclwiXSk7XG4gICAgcmVnaXN0ZXJEaXJlY3RFdmVudChcIm9uUG9pbnRlckVudGVyXCIsIFtcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVyb3ZlclwiXSk7XG4gICAgcmVnaXN0ZXJEaXJlY3RFdmVudChcIm9uUG9pbnRlckxlYXZlXCIsIFtcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVyb3ZlclwiXSk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KFxuICAgICAgXCJvbkNoYW5nZVwiLFxuICAgICAgXCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFxuICAgICAgICBcIiBcIlxuICAgICAgKVxuICAgICk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KFxuICAgICAgXCJvblNlbGVjdFwiLFxuICAgICAgXCJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcbiAgICAgICAgXCIgXCJcbiAgICAgIClcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcIm9uQmVmb3JlSW5wdXRcIiwgW1xuICAgICAgXCJjb21wb3NpdGlvbmVuZFwiLFxuICAgICAgXCJrZXlwcmVzc1wiLFxuICAgICAgXCJ0ZXh0SW5wdXRcIixcbiAgICAgIFwicGFzdGVcIlxuICAgIF0pO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25Db21wb3NpdGlvbkVuZFwiLFxuICAgICAgXCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKVxuICAgICk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KFxuICAgICAgXCJvbkNvbXBvc2l0aW9uU3RhcnRcIixcbiAgICAgIFwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKVxuICAgICk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KFxuICAgICAgXCJvbkNvbXBvc2l0aW9uVXBkYXRlXCIsXG4gICAgICBcImNvbXBvc2l0aW9udXBkYXRlIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpXG4gICAgKTtcbiAgICB2YXIgbWVkaWFFdmVudFR5cGVzID1cbiAgICAgICAgXCJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZ1wiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICBub25EZWxlZ2F0ZWRFdmVudHMgPSBuZXcgU2V0KFxuICAgICAgICBcImJlZm9yZXRvZ2dsZSBjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCBzY3JvbGxlbmQgdG9nZ2xlXCJcbiAgICAgICAgICAuc3BsaXQoXCIgXCIpXG4gICAgICAgICAgLmNvbmNhdChtZWRpYUV2ZW50VHlwZXMpXG4gICAgICApLFxuICAgICAgbGlzdGVuaW5nTWFya2VyID0gXCJfcmVhY3RMaXN0ZW5pbmdcIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLFxuICAgICAgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9ICExLFxuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9ICExLFxuICAgICAgZGlkV2FybkZvcm1BY3Rpb25UeXBlID0gITEsXG4gICAgICBkaWRXYXJuRm9ybUFjdGlvbk5hbWUgPSAhMSxcbiAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVGFyZ2V0ID0gITEsXG4gICAgICBkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCA9ICExLFxuICAgICAgZGlkV2FyblBvcG92ZXJUYXJnZXRPYmplY3QgPSAhMTtcbiAgICB2YXIgZGlkV2FybkZvck5ld0Jvb2xlYW5Qcm9wc1dpdGhFbXB0eVZhbHVlID0ge307XG4gICAgdmFyIE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCA9IC9cXHJcXG4/L2csXG4gICAgICBOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVggPSAvXFx1MDAwMHxcXHVGRkZEL2csXG4gICAgICB4bGlua05hbWVzcGFjZSA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgICAgeG1sTmFtZXNwYWNlID0gXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgICAgIEVYUEVDVEVEX0ZPUk1fQUNUSU9OX1VSTCA9XG4gICAgICAgIFwiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0IGZvcm0gdW5leHBlY3RlZGx5IHN1Ym1pdHRlZC4nKVwiLFxuICAgICAgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgPSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiLFxuICAgICAgU1VTUEVOU0VfU1RBUlRfREFUQSA9IFwiJFwiLFxuICAgICAgU1VTUEVOU0VfRU5EX0RBVEEgPSBcIi8kXCIsXG4gICAgICBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgPSBcIiQ/XCIsXG4gICAgICBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBID0gXCIkIVwiLFxuICAgICAgUFJFQU1CTEVfQ09OVFJJQlVUSU9OX0hUTUwgPSAxLFxuICAgICAgUFJFQU1CTEVfQ09OVFJJQlVUSU9OX0JPRFkgPSAyLFxuICAgICAgUFJFQU1CTEVfQ09OVFJJQlVUSU9OX0hFQUQgPSA0LFxuICAgICAgRk9STV9TVEFURV9JU19NQVRDSElORyA9IFwiRiFcIixcbiAgICAgIEZPUk1fU1RBVEVfSVNfTk9UX01BVENISU5HID0gXCJGXCIsXG4gICAgICBET0NVTUVOVF9SRUFEWV9TVEFURV9DT01QTEVURSA9IFwiY29tcGxldGVcIixcbiAgICAgIFNUWUxFID0gXCJzdHlsZVwiLFxuICAgICAgSG9zdENvbnRleHROYW1lc3BhY2VOb25lID0gMCxcbiAgICAgIEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnID0gMSxcbiAgICAgIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aCA9IDIsXG4gICAgICBldmVudHNFbmFibGVkID0gbnVsbCxcbiAgICAgIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbCxcbiAgICAgIHdhcm5lZFVua25vd25UYWdzID0geyBkaWFsb2c6ICEwLCB3ZWJ2aWV3OiAhMCB9LFxuICAgICAgY3VycmVudFBvcHN0YXRlVHJhbnNpdGlvbkV2ZW50ID0gbnVsbCxcbiAgICAgIHNjaGVkdWxlVGltZW91dCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHNldFRpbWVvdXQgPyBzZXRUaW1lb3V0IDogdm9pZCAwLFxuICAgICAgY2FuY2VsVGltZW91dCA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNsZWFyVGltZW91dCA/IGNsZWFyVGltZW91dCA6IHZvaWQgMCxcbiAgICAgIG5vVGltZW91dCA9IC0xLFxuICAgICAgbG9jYWxQcm9taXNlID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgUHJvbWlzZSA/IFByb21pc2UgOiB2b2lkIDAsXG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHF1ZXVlTWljcm90YXNrXG4gICAgICAgICAgPyBxdWV1ZU1pY3JvdGFza1xuICAgICAgICAgIDogXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGxvY2FsUHJvbWlzZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxQcm9taXNlXG4gICAgICAgICAgICAgICAgICAucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oY2FsbGJhY2spXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goaGFuZGxlRXJyb3JJbk5leHRUaWNrKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBzY2hlZHVsZVRpbWVvdXQsXG4gICAgICBwcmV2aW91c0h5ZHJhdGFibGVPbkVudGVyaW5nU2NvcGVkU2luZ2xldG9uID0gbnVsbCxcbiAgICAgIE5vdExvYWRlZCA9IDAsXG4gICAgICBMb2FkZWQgPSAxLFxuICAgICAgRXJyb3JlZCA9IDIsXG4gICAgICBTZXR0bGVkID0gMyxcbiAgICAgIEluc2VydGVkID0gNCxcbiAgICAgIHByZWxvYWRQcm9wc01hcCA9IG5ldyBNYXAoKSxcbiAgICAgIHByZWNvbm5lY3RzU2V0ID0gbmV3IFNldCgpLFxuICAgICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMuZDtcbiAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5kID0ge1xuICAgICAgZjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJldmlvdXNXYXNSZW5kZXJpbmcgPSBwcmV2aW91c0Rpc3BhdGNoZXIuZigpLFxuICAgICAgICAgIHdhc1JlbmRlcmluZyA9IGZsdXNoU3luY1dvcmskMSgpO1xuICAgICAgICByZXR1cm4gcHJldmlvdXNXYXNSZW5kZXJpbmcgfHwgd2FzUmVuZGVyaW5nO1xuICAgICAgfSxcbiAgICAgIHI6IGZ1bmN0aW9uIChmb3JtKSB7XG4gICAgICAgIHZhciBmb3JtSW5zdCA9IGdldEluc3RhbmNlRnJvbU5vZGUoZm9ybSk7XG4gICAgICAgIG51bGwgIT09IGZvcm1JbnN0ICYmIDUgPT09IGZvcm1JbnN0LnRhZyAmJiBcImZvcm1cIiA9PT0gZm9ybUluc3QudHlwZVxuICAgICAgICAgID8gcmVxdWVzdEZvcm1SZXNldCQxKGZvcm1JbnN0KVxuICAgICAgICAgIDogcHJldmlvdXNEaXNwYXRjaGVyLnIoZm9ybSk7XG4gICAgICB9LFxuICAgICAgRDogZnVuY3Rpb24gKGhyZWYpIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLkQoaHJlZik7XG4gICAgICAgIHByZWNvbm5lY3RBcyhcImRucy1wcmVmZXRjaFwiLCBocmVmLCBudWxsKTtcbiAgICAgIH0sXG4gICAgICBDOiBmdW5jdGlvbiAoaHJlZiwgY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLkMoaHJlZiwgY3Jvc3NPcmlnaW4pO1xuICAgICAgICBwcmVjb25uZWN0QXMoXCJwcmVjb25uZWN0XCIsIGhyZWYsIGNyb3NzT3JpZ2luKTtcbiAgICAgIH0sXG4gICAgICBMOiBmdW5jdGlvbiAoaHJlZiwgYXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLkwoaHJlZiwgYXMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBocmVmICYmIGFzKSB7XG4gICAgICAgICAgdmFyIHByZWxvYWRTZWxlY3RvciA9XG4gICAgICAgICAgICAnbGlua1tyZWw9XCJwcmVsb2FkXCJdW2FzPVwiJyArXG4gICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGFzKSArXG4gICAgICAgICAgICAnXCJdJztcbiAgICAgICAgICBcImltYWdlXCIgPT09IGFzXG4gICAgICAgICAgICA/IG9wdGlvbnMgJiYgb3B0aW9ucy5pbWFnZVNyY1NldFxuICAgICAgICAgICAgICA/ICgocHJlbG9hZFNlbGVjdG9yICs9XG4gICAgICAgICAgICAgICAgICAnW2ltYWdlc3Jjc2V0PVwiJyArXG4gICAgICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmltYWdlU3JjU2V0XG4gICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICdcIl0nKSxcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbWFnZVNpemVzICYmXG4gICAgICAgICAgICAgICAgICAocHJlbG9hZFNlbGVjdG9yICs9XG4gICAgICAgICAgICAgICAgICAgICdbaW1hZ2VzaXplcz1cIicgK1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKFxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW1hZ2VTaXplc1xuICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgJ1wiXScpKVxuICAgICAgICAgICAgICA6IChwcmVsb2FkU2VsZWN0b3IgKz1cbiAgICAgICAgICAgICAgICAgICdbaHJlZj1cIicgK1xuICAgICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArXG4gICAgICAgICAgICAgICAgICAnXCJdJylcbiAgICAgICAgICAgIDogKHByZWxvYWRTZWxlY3RvciArPVxuICAgICAgICAgICAgICAgICdbaHJlZj1cIicgK1xuICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoaHJlZikgK1xuICAgICAgICAgICAgICAgICdcIl0nKTtcbiAgICAgICAgICB2YXIga2V5ID0gcHJlbG9hZFNlbGVjdG9yO1xuICAgICAgICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgICAgICBrZXkgPSBnZXRTdHlsZUtleShocmVmKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgICAgIGtleSA9IGdldFNjcmlwdEtleShocmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJlbG9hZFByb3BzTWFwLmhhcyhrZXkpIHx8XG4gICAgICAgICAgICAoKGhyZWYgPSBhc3NpZ24oXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZWw6IFwicHJlbG9hZFwiLFxuICAgICAgICAgICAgICAgIGhyZWY6XG4gICAgICAgICAgICAgICAgICBcImltYWdlXCIgPT09IGFzICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5pbWFnZVNyY1NldFxuICAgICAgICAgICAgICAgICAgICA/IHZvaWQgMFxuICAgICAgICAgICAgICAgICAgICA6IGhyZWYsXG4gICAgICAgICAgICAgICAgYXM6IGFzXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgcHJlbG9hZFByb3BzTWFwLnNldChrZXksIGhyZWYpLFxuICAgICAgICAgICAgbnVsbCAhPT0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKHByZWxvYWRTZWxlY3RvcikgfHxcbiAgICAgICAgICAgICAgKFwic3R5bGVcIiA9PT0gYXMgJiZcbiAgICAgICAgICAgICAgICBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICBnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KGtleSlcbiAgICAgICAgICAgICAgICApKSB8fFxuICAgICAgICAgICAgICAoXCJzY3JpcHRcIiA9PT0gYXMgJiZcbiAgICAgICAgICAgICAgICBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSkpKSB8fFxuICAgICAgICAgICAgICAoKGFzID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSksXG4gICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGFzLCBcImxpbmtcIiwgaHJlZiksXG4gICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoYXMpLFxuICAgICAgICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYXMpKSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBtOiBmdW5jdGlvbiAoaHJlZiwgb3B0aW9ucykge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIubShocmVmLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQgJiYgaHJlZikge1xuICAgICAgICAgIHZhciBhcyA9XG4gICAgICAgICAgICAgIG9wdGlvbnMgJiYgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXMgPyBvcHRpb25zLmFzIDogXCJzY3JpcHRcIixcbiAgICAgICAgICAgIHByZWxvYWRTZWxlY3RvciA9XG4gICAgICAgICAgICAgICdsaW5rW3JlbD1cIm1vZHVsZXByZWxvYWRcIl1bYXM9XCInICtcbiAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhhcykgK1xuICAgICAgICAgICAgICAnXCJdW2hyZWY9XCInICtcbiAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArXG4gICAgICAgICAgICAgICdcIl0nLFxuICAgICAgICAgICAga2V5ID0gcHJlbG9hZFNlbGVjdG9yO1xuICAgICAgICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhdWRpb3dvcmtsZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwYWludHdvcmtsZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzZXJ2aWNld29ya2VyXCI6XG4gICAgICAgICAgICBjYXNlIFwic2hhcmVkd29ya2VyXCI6XG4gICAgICAgICAgICBjYXNlIFwid29ya2VyXCI6XG4gICAgICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgICAgIGtleSA9IGdldFNjcmlwdEtleShocmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXByZWxvYWRQcm9wc01hcC5oYXMoa2V5KSAmJlxuICAgICAgICAgICAgKChocmVmID0gYXNzaWduKHsgcmVsOiBcIm1vZHVsZXByZWxvYWRcIiwgaHJlZjogaHJlZiB9LCBvcHRpb25zKSksXG4gICAgICAgICAgICBwcmVsb2FkUHJvcHNNYXAuc2V0KGtleSwgaHJlZiksXG4gICAgICAgICAgICBudWxsID09PSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocHJlbG9hZFNlbGVjdG9yKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgICAgICAgICAgY2FzZSBcImF1ZGlvd29ya2xldFwiOlxuICAgICAgICAgICAgICBjYXNlIFwicGFpbnR3b3JrbGV0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzZXJ2aWNld29ya2VyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzaGFyZWR3b3JrZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIndvcmtlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoa2V5KSkpXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcyA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG4gICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhhcywgXCJsaW5rXCIsIGhyZWYpO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShhcyk7XG4gICAgICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFg6IGZ1bmN0aW9uIChzcmMsIG9wdGlvbnMpIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLlgoc3JjLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQgJiYgc3JjKSB7XG4gICAgICAgICAgdmFyIHNjcmlwdHMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChvd25lckRvY3VtZW50KS5ob2lzdGFibGVTY3JpcHRzLFxuICAgICAgICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KHNyYyksXG4gICAgICAgICAgICByZXNvdXJjZSA9IHNjcmlwdHMuZ2V0KGtleSk7XG4gICAgICAgICAgcmVzb3VyY2UgfHxcbiAgICAgICAgICAgICgocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgIGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHJlc291cmNlIHx8XG4gICAgICAgICAgICAgICgoc3JjID0gYXNzaWduKHsgc3JjOiBzcmMsIGFzeW5jOiAhMCB9LCBvcHRpb25zKSksXG4gICAgICAgICAgICAgIChvcHRpb25zID0gcHJlbG9hZFByb3BzTWFwLmdldChrZXkpKSAmJlxuICAgICAgICAgICAgICAgIGFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0KHNyYywgb3B0aW9ucyksXG4gICAgICAgICAgICAgIChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSksXG4gICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUocmVzb3VyY2UpLFxuICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhyZXNvdXJjZSwgXCJsaW5rXCIsIHNyYyksXG4gICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyZXNvdXJjZSkpLFxuICAgICAgICAgICAgKHJlc291cmNlID0ge1xuICAgICAgICAgICAgICB0eXBlOiBcInNjcmlwdFwiLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogcmVzb3VyY2UsXG4gICAgICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzY3JpcHRzLnNldChrZXksIHJlc291cmNlKSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBTOiBmdW5jdGlvbiAoaHJlZiwgcHJlY2VkZW5jZSwgb3B0aW9ucykge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuUyhocmVmLCBwcmVjZWRlbmNlLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQgJiYgaHJlZikge1xuICAgICAgICAgIHZhciBzdHlsZXMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChvd25lckRvY3VtZW50KS5ob2lzdGFibGVTdHlsZXMsXG4gICAgICAgICAgICBrZXkgPSBnZXRTdHlsZUtleShocmVmKTtcbiAgICAgICAgICBwcmVjZWRlbmNlID0gcHJlY2VkZW5jZSB8fCBcImRlZmF1bHRcIjtcbiAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBzdHlsZXMuZ2V0KGtleSk7XG4gICAgICAgICAgaWYgKCFyZXNvdXJjZSkge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0geyBsb2FkaW5nOiBOb3RMb2FkZWQsIHByZWxvYWQ6IG51bGwgfTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzdGF0ZS5sb2FkaW5nID0gTG9hZGVkIHwgSW5zZXJ0ZWQ7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaHJlZiA9IGFzc2lnbihcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByZWw6IFwic3R5bGVzaGVldFwiLFxuICAgICAgICAgICAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgICAgICAgICAgIFwiZGF0YS1wcmVjZWRlbmNlXCI6IHByZWNlZGVuY2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgKG9wdGlvbnMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSkpICYmXG4gICAgICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KGhyZWYsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB2YXIgbGluayA9IChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIikpO1xuICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGxpbmspO1xuICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhsaW5rLCBcImxpbmtcIiwgaHJlZik7XG4gICAgICAgICAgICAgIGxpbmsuX3AgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgbGluay5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgIGxpbmsub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmxvYWRpbmcgfD0gTG9hZGVkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmxvYWRpbmcgfD0gRXJyb3JlZDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQ7XG4gICAgICAgICAgICAgIGluc2VydFN0eWxlc2hlZXQocmVzb3VyY2UsIHByZWNlZGVuY2UsIG93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb3VyY2UgPSB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3R5bGVzaGVldFwiLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogcmVzb3VyY2UsXG4gICAgICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzdHlsZXMuc2V0KGtleSwgcmVzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIE06IGZ1bmN0aW9uIChzcmMsIG9wdGlvbnMpIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLk0oc3JjLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQgJiYgc3JjKSB7XG4gICAgICAgICAgdmFyIHNjcmlwdHMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChvd25lckRvY3VtZW50KS5ob2lzdGFibGVTY3JpcHRzLFxuICAgICAgICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KHNyYyksXG4gICAgICAgICAgICByZXNvdXJjZSA9IHNjcmlwdHMuZ2V0KGtleSk7XG4gICAgICAgICAgcmVzb3VyY2UgfHxcbiAgICAgICAgICAgICgocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgIGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHJlc291cmNlIHx8XG4gICAgICAgICAgICAgICgoc3JjID0gYXNzaWduKHsgc3JjOiBzcmMsIGFzeW5jOiAhMCwgdHlwZTogXCJtb2R1bGVcIiB9LCBvcHRpb25zKSksXG4gICAgICAgICAgICAgIChvcHRpb25zID0gcHJlbG9hZFByb3BzTWFwLmdldChrZXkpKSAmJlxuICAgICAgICAgICAgICAgIGFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0KHNyYywgb3B0aW9ucyksXG4gICAgICAgICAgICAgIChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSksXG4gICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUocmVzb3VyY2UpLFxuICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhyZXNvdXJjZSwgXCJsaW5rXCIsIHNyYyksXG4gICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyZXNvdXJjZSkpLFxuICAgICAgICAgICAgKHJlc291cmNlID0ge1xuICAgICAgICAgICAgICB0eXBlOiBcInNjcmlwdFwiLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogcmVzb3VyY2UsXG4gICAgICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzY3JpcHRzLnNldChrZXksIHJlc291cmNlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBnbG9iYWxEb2N1bWVudCA9IFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiBkb2N1bWVudCA/IG51bGwgOiBkb2N1bWVudCxcbiAgICAgIHRhZ0NhY2hlcyA9IG51bGwsXG4gICAgICBzdXNwZW5kZWRTdGF0ZSA9IG51bGwsXG4gICAgICBMQVNUX1BSRUNFREVOQ0UgPSBudWxsLFxuICAgICAgcHJlY2VkZW5jZXNCeVJvb3QgPSBudWxsLFxuICAgICAgTm90UGVuZGluZ1RyYW5zaXRpb24gPSBOb3RQZW5kaW5nLFxuICAgICAgSG9zdFRyYW5zaXRpb25Db250ZXh0ID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgICAgICBQcm92aWRlcjogbnVsbCxcbiAgICAgICAgQ29uc3VtZXI6IG51bGwsXG4gICAgICAgIF9jdXJyZW50VmFsdWU6IE5vdFBlbmRpbmdUcmFuc2l0aW9uLFxuICAgICAgICBfY3VycmVudFZhbHVlMjogTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICAgIF90aHJlYWRDb3VudDogMFxuICAgICAgfSxcbiAgICAgIGJhZGdlRm9ybWF0ID0gXCIlYyVzJWMgXCIsXG4gICAgICBiYWRnZVN0eWxlID1cbiAgICAgICAgXCJiYWNrZ3JvdW5kOiAjZTZlNmU2O2JhY2tncm91bmQ6IGxpZ2h0LWRhcmsocmdiYSgwLDAsMCwwLjEpLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjUpKTtjb2xvcjogIzAwMDAwMDtjb2xvcjogbGlnaHQtZGFyaygjMDAwMDAwLCAjZmZmZmZmKTtib3JkZXItcmFkaXVzOiAycHhcIixcbiAgICAgIHJlc2V0U3R5bGUgPSBcIlwiLFxuICAgICAgcGFkID0gXCIgXCIsXG4gICAgICBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG4gICAgdmFyIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSAhMTtcbiAgICB2YXIgb3ZlcnJpZGVIb29rU3RhdGUgPSBudWxsLFxuICAgICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gbnVsbCxcbiAgICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IG51bGwsXG4gICAgICBvdmVycmlkZVByb3BzID0gbnVsbCxcbiAgICAgIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gbnVsbCxcbiAgICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gbnVsbCxcbiAgICAgIHNjaGVkdWxlVXBkYXRlID0gbnVsbCxcbiAgICAgIHNldEVycm9ySGFuZGxlciA9IG51bGwsXG4gICAgICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBudWxsO1xuICAgIG92ZXJyaWRlSG9va1N0YXRlID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCwgdmFsdWUpIHtcbiAgICAgIGlkID0gZmluZEhvb2soZmliZXIsIGlkKTtcbiAgICAgIG51bGwgIT09IGlkICYmXG4gICAgICAgICgocGF0aCA9IGNvcHlXaXRoU2V0SW1wbChpZC5tZW1vaXplZFN0YXRlLCBwYXRoLCAwLCB2YWx1ZSkpLFxuICAgICAgICAoaWQubWVtb2l6ZWRTdGF0ZSA9IHBhdGgpLFxuICAgICAgICAoaWQuYmFzZVN0YXRlID0gcGF0aCksXG4gICAgICAgIChmaWJlci5tZW1vaXplZFByb3BzID0gYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKSksXG4gICAgICAgIChwYXRoID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKSksXG4gICAgICAgIG51bGwgIT09IHBhdGggJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBhdGgsIGZpYmVyLCAyKSk7XG4gICAgfTtcbiAgICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoKSB7XG4gICAgICBpZCA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG4gICAgICBudWxsICE9PSBpZCAmJlxuICAgICAgICAoKHBhdGggPSBjb3B5V2l0aERlbGV0ZUltcGwoaWQubWVtb2l6ZWRTdGF0ZSwgcGF0aCwgMCkpLFxuICAgICAgICAoaWQubWVtb2l6ZWRTdGF0ZSA9IHBhdGgpLFxuICAgICAgICAoaWQuYmFzZVN0YXRlID0gcGF0aCksXG4gICAgICAgIChmaWJlci5tZW1vaXplZFByb3BzID0gYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKSksXG4gICAgICAgIChwYXRoID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKSksXG4gICAgICAgIG51bGwgIT09IHBhdGggJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBhdGgsIGZpYmVyLCAyKSk7XG4gICAgfTtcbiAgICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgICBpZCA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG4gICAgICBudWxsICE9PSBpZCAmJlxuICAgICAgICAoKG9sZFBhdGggPSBjb3B5V2l0aFJlbmFtZShpZC5tZW1vaXplZFN0YXRlLCBvbGRQYXRoLCBuZXdQYXRoKSksXG4gICAgICAgIChpZC5tZW1vaXplZFN0YXRlID0gb2xkUGF0aCksXG4gICAgICAgIChpZC5iYXNlU3RhdGUgPSBvbGRQYXRoKSxcbiAgICAgICAgKGZpYmVyLm1lbW9pemVkUHJvcHMgPSBhc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpKSxcbiAgICAgICAgKG9sZFBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgbnVsbCAhPT0gb2xkUGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIob2xkUGF0aCwgZmliZXIsIDIpKTtcbiAgICB9O1xuICAgIG92ZXJyaWRlUHJvcHMgPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgsIHZhbHVlKSB7XG4gICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFNldEltcGwoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgMCwgdmFsdWUpO1xuICAgICAgZmliZXIuYWx0ZXJuYXRlICYmIChmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzKTtcbiAgICAgIHBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpO1xuICAgICAgbnVsbCAhPT0gcGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF0aCwgZmliZXIsIDIpO1xuICAgIH07XG4gICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgpIHtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoRGVsZXRlSW1wbChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCAwKTtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZSAmJiAoZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcyk7XG4gICAgICBwYXRoID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IHBhdGggJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBhdGgsIGZpYmVyLCAyKTtcbiAgICB9O1xuICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFJlbmFtZShcbiAgICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgb2xkUGF0aCxcbiAgICAgICAgbmV3UGF0aFxuICAgICAgKTtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZSAmJiAoZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcyk7XG4gICAgICBvbGRQYXRoID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IG9sZFBhdGggJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKG9sZFBhdGgsIGZpYmVyLCAyKTtcbiAgICB9O1xuICAgIHNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gICAgICBudWxsICE9PSByb290ICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgMik7XG4gICAgfTtcbiAgICBzZXRFcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkRXJyb3JJbXBsKSB7XG4gICAgICBzaG91bGRFcnJvckltcGwgPSBuZXdTaG91bGRFcnJvckltcGw7XG4gICAgfTtcbiAgICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkU3VzcGVuZEltcGwpIHtcbiAgICAgIHNob3VsZFN1c3BlbmRJbXBsID0gbmV3U2hvdWxkU3VzcGVuZEltcGw7XG4gICAgfTtcbiAgICB2YXIgX2VuYWJsZWQgPSAhMCxcbiAgICAgIHJldHVybl90YXJnZXRJbnN0ID0gbnVsbCxcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSAhMSxcbiAgICAgIHF1ZXVlZEZvY3VzID0gbnVsbCxcbiAgICAgIHF1ZXVlZERyYWcgPSBudWxsLFxuICAgICAgcXVldWVkTW91c2UgPSBudWxsLFxuICAgICAgcXVldWVkUG9pbnRlcnMgPSBuZXcgTWFwKCksXG4gICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMgPSBuZXcgTWFwKCksXG4gICAgICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMgPSBbXSxcbiAgICAgIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cyA9XG4gICAgICAgIFwibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0XCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgIGxhc3RTY2hlZHVsZWRSZXBsYXlRdWV1ZSA9IG51bGw7XG4gICAgUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS5yZW5kZXIgPSBSZWFjdERPTVJvb3QucHJvdG90eXBlLnJlbmRlciA9XG4gICAgICBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG4gICAgICAgIGlmIChudWxsID09PSByb290KSB0aHJvdyBFcnJvcihcIkNhbm5vdCB1cGRhdGUgYW4gdW5tb3VudGVkIHJvb3QuXCIpO1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXJnc1sxXVxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBpc1ZhbGlkQ29udGFpbmVyKGFyZ3NbMV0pXG4gICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJZb3UgcGFzc2VkIGEgY29udGFpbmVyIHRvIHRoZSBzZWNvbmQgYXJndW1lbnQgb2Ygcm9vdC5yZW5kZXIoLi4uKS4gWW91IGRvbid0IG5lZWQgdG8gcGFzcyBpdCBhZ2FpbiBzaW5jZSB5b3UgYWxyZWFkeSBwYXNzZWQgaXQgdG8gY3JlYXRlIHRoZSByb290LlwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGFyZ3NbMV0gJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIllvdSBwYXNzZWQgYSBzZWNvbmQgYXJndW1lbnQgdG8gcm9vdC5yZW5kZXIoLi4uKSBidXQgaXQgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICBhcmdzID0gY2hpbGRyZW47XG4gICAgICAgIHZhciBjdXJyZW50ID0gcm9vdC5jdXJyZW50LFxuICAgICAgICAgIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShjdXJyZW50KTtcbiAgICAgICAgdXBkYXRlQ29udGFpbmVySW1wbChjdXJyZW50LCBsYW5lLCBhcmdzLCByb290LCBudWxsLCBudWxsKTtcbiAgICAgIH07XG4gICAgUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS51bm1vdW50ID0gUmVhY3RET01Sb290LnByb3RvdHlwZS51bm1vdW50ID1cbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFyZ3NbMF0gJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJkb2VzIG5vdCBzdXBwb3J0IGEgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgYXJncyA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgICAgICAgaWYgKG51bGwgIT09IGFyZ3MpIHtcbiAgICAgICAgICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBudWxsO1xuICAgICAgICAgIHZhciBjb250YWluZXIgPSBhcmdzLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0ICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkF0dGVtcHRlZCB0byBzeW5jaHJvbm91c2x5IHVubW91bnQgYSByb290IHdoaWxlIFJlYWN0IHdhcyBhbHJlYWR5IHJlbmRlcmluZy4gUmVhY3QgY2Fubm90IGZpbmlzaCB1bm1vdW50aW5nIHRoZSByb290IHVudGlsIHRoZSBjdXJyZW50IHJlbmRlciBoYXMgY29tcGxldGVkLCB3aGljaCBtYXkgbGVhZCB0byBhIHJhY2UgY29uZGl0aW9uLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHVwZGF0ZUNvbnRhaW5lckltcGwoYXJncy5jdXJyZW50LCAyLCBudWxsLCBhcmdzLCBudWxsLCBudWxsKTtcbiAgICAgICAgICBmbHVzaFN5bmNXb3JrJDEoKTtcbiAgICAgICAgICBjb250YWluZXJbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIFJlYWN0RE9NSHlkcmF0aW9uUm9vdC5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb24gPSBmdW5jdGlvbiAoXG4gICAgICB0YXJnZXRcbiAgICApIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdmFyIHVwZGF0ZVByaW9yaXR5ID0gcmVzb2x2ZVVwZGF0ZVByaW9yaXR5KCk7XG4gICAgICAgIHRhcmdldCA9IHsgYmxvY2tlZE9uOiBudWxsLCB0YXJnZXQ6IHRhcmdldCwgcHJpb3JpdHk6IHVwZGF0ZVByaW9yaXR5IH07XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgIGkgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoICYmXG4gICAgICAgICAgMCAhPT0gdXBkYXRlUHJpb3JpdHkgJiZcbiAgICAgICAgICB1cGRhdGVQcmlvcml0eSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tpXS5wcmlvcml0eTtcbiAgICAgICAgICBpKytcbiAgICAgICAgKTtcbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNwbGljZShpLCAwLCB0YXJnZXQpO1xuICAgICAgICAwID09PSBpICYmIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldCh0YXJnZXQpO1xuICAgICAgfVxuICAgIH07XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBpc29tb3JwaGljUmVhY3RQYWNrYWdlVmVyc2lvbiA9IFJlYWN0LnZlcnNpb247XG4gICAgICBpZiAoXCIxOS4xLjBcIiAhPT0gaXNvbW9ycGhpY1JlYWN0UGFja2FnZVZlcnNpb24pXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdJbmNvbXBhdGlibGUgUmVhY3QgdmVyc2lvbnM6IFRoZSBcInJlYWN0XCIgYW5kIFwicmVhY3QtZG9tXCIgcGFja2FnZXMgbXVzdCBoYXZlIHRoZSBleGFjdCBzYW1lIHZlcnNpb24uIEluc3RlYWQgZ290OlxcbiAgLSByZWFjdDogICAgICAnICtcbiAgICAgICAgICAgIChpc29tb3JwaGljUmVhY3RQYWNrYWdlVmVyc2lvbiArXG4gICAgICAgICAgICAgIFwiXFxuICAtIHJlYWN0LWRvbTogIDE5LjEuMFxcbkxlYXJuIG1vcmU6IGh0dHBzOi8vcmVhY3QuZGV2L3dhcm5pbmdzL3ZlcnNpb24tbWlzbWF0Y2hcIilcbiAgICAgICAgKTtcbiAgICB9KSgpO1xuICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBNYXAgJiZcbiAgICAgIG51bGwgIT0gTWFwLnByb3RvdHlwZSAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgTWFwLnByb3RvdHlwZS5mb3JFYWNoICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQgJiZcbiAgICAgIG51bGwgIT0gU2V0LnByb3RvdHlwZSAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU2V0LnByb3RvdHlwZS5jbGVhciAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU2V0LnByb3RvdHlwZS5mb3JFYWNoKSB8fFxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJSZWFjdCBkZXBlbmRzIG9uIE1hcCBhbmQgU2V0IGJ1aWx0LWluIHR5cGVzLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0LmRldi9saW5rL3JlYWN0LXBvbHlmaWxsc1wiXG4gICAgICApO1xuICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLmZpbmRET01Ob2RlID0gZnVuY3Rpb24gKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICAgICAgdmFyIGZpYmVyID0gY29tcG9uZW50T3JFbGVtZW50Ll9yZWFjdEludGVybmFscztcbiAgICAgIGlmICh2b2lkIDAgPT09IGZpYmVyKSB7XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb21wb25lbnRPckVsZW1lbnQucmVuZGVyKVxuICAgICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICAgICAgY29tcG9uZW50T3JFbGVtZW50ID0gT2JqZWN0LmtleXMoY29tcG9uZW50T3JFbGVtZW50KS5qb2luKFwiLFwiKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiBcIiArXG4gICAgICAgICAgICBjb21wb25lbnRPckVsZW1lbnRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbXBvbmVudE9yRWxlbWVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKTtcbiAgICAgIGNvbXBvbmVudE9yRWxlbWVudCA9XG4gICAgICAgIG51bGwgIT09IGNvbXBvbmVudE9yRWxlbWVudFxuICAgICAgICAgID8gZmluZEN1cnJlbnRIb3N0RmliZXJJbXBsKGNvbXBvbmVudE9yRWxlbWVudClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBjb21wb25lbnRPckVsZW1lbnQgPVxuICAgICAgICBudWxsID09PSBjb21wb25lbnRPckVsZW1lbnQgPyBudWxsIDogY29tcG9uZW50T3JFbGVtZW50LnN0YXRlTm9kZTtcbiAgICAgIHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gICAgfTtcbiAgICBpZiAoXG4gICAgICAhKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGludGVybmFscyA9IHtcbiAgICAgICAgICBidW5kbGVUeXBlOiAxLFxuICAgICAgICAgIHZlcnNpb246IFwiMTkuMS4wXCIsXG4gICAgICAgICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogXCJyZWFjdC1kb21cIixcbiAgICAgICAgICBjdXJyZW50RGlzcGF0Y2hlclJlZjogUmVhY3RTaGFyZWRJbnRlcm5hbHMsXG4gICAgICAgICAgcmVjb25jaWxlclZlcnNpb246IFwiMTkuMS4wXCJcbiAgICAgICAgfTtcbiAgICAgICAgaW50ZXJuYWxzLm92ZXJyaWRlSG9va1N0YXRlID0gb3ZlcnJpZGVIb29rU3RhdGU7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZVByb3BzID0gb3ZlcnJpZGVQcm9wcztcbiAgICAgICAgaW50ZXJuYWxzLm92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoO1xuICAgICAgICBpbnRlcm5hbHMuc2NoZWR1bGVVcGRhdGUgPSBzY2hlZHVsZVVwZGF0ZTtcbiAgICAgICAgaW50ZXJuYWxzLnNldEVycm9ySGFuZGxlciA9IHNldEVycm9ySGFuZGxlcjtcbiAgICAgICAgaW50ZXJuYWxzLnNldFN1c3BlbnNlSGFuZGxlciA9IHNldFN1c3BlbnNlSGFuZGxlcjtcbiAgICAgICAgaW50ZXJuYWxzLnNjaGVkdWxlUmVmcmVzaCA9IHNjaGVkdWxlUmVmcmVzaDtcbiAgICAgICAgaW50ZXJuYWxzLnNjaGVkdWxlUm9vdCA9IHNjaGVkdWxlUm9vdDtcbiAgICAgICAgaW50ZXJuYWxzLnNldFJlZnJlc2hIYW5kbGVyID0gc2V0UmVmcmVzaEhhbmRsZXI7XG4gICAgICAgIGludGVybmFscy5nZXRDdXJyZW50RmliZXIgPSBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scztcbiAgICAgICAgaW50ZXJuYWxzLmdldExhbmVMYWJlbE1hcCA9IGdldExhbmVMYWJlbE1hcDtcbiAgICAgICAgaW50ZXJuYWxzLmluamVjdFByb2ZpbGluZ0hvb2tzID0gaW5qZWN0UHJvZmlsaW5nSG9va3M7XG4gICAgICAgIHJldHVybiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKTtcbiAgICAgIH0pKCkgJiZcbiAgICAgIGNhblVzZURPTSAmJlxuICAgICAgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYgJiZcbiAgICAgICgoLTEgPCBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJDaHJvbWVcIikgJiZcbiAgICAgICAgLTEgPT09IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIkVkZ2VcIikpIHx8XG4gICAgICAgIC0xIDwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiRmlyZWZveFwiKSlcbiAgICApIHtcbiAgICAgIHZhciBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbDtcbiAgICAgIC9eKGh0dHBzP3xmaWxlKTokLy50ZXN0KHByb3RvY29sKSAmJlxuICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgXCIlY0Rvd25sb2FkIHRoZSBSZWFjdCBEZXZUb29scyBmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9yZWFjdC1kZXZ0b29sc1wiICtcbiAgICAgICAgICAgIChcImZpbGU6XCIgPT09IHByb3RvY29sXG4gICAgICAgICAgICAgID8gXCJcXG5Zb3UgbWlnaHQgbmVlZCB0byB1c2UgYSBsb2NhbCBIVFRQIHNlcnZlciAoaW5zdGVhZCBvZiBmaWxlOi8vKTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9yZWFjdC1kZXZ0b29scy1mYXFcIlxuICAgICAgICAgICAgICA6IFwiXCIpLFxuICAgICAgICAgIFwiZm9udC13ZWlnaHQ6Ym9sZFwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGV4cG9ydHMuY3JlYXRlUm9vdCA9IGZ1bmN0aW9uIChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgICAgIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKVxuICAgICAgICB0aHJvdyBFcnJvcihcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIpO1xuICAgICAgd2FybklmUmVhY3RET01Db250YWluZXJJbkRFVihjb250YWluZXIpO1xuICAgICAgdmFyIGlzU3RyaWN0TW9kZSA9ICExLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4ID0gXCJcIixcbiAgICAgICAgb25VbmNhdWdodEVycm9yID0gZGVmYXVsdE9uVW5jYXVnaHRFcnJvcixcbiAgICAgICAgb25DYXVnaHRFcnJvciA9IGRlZmF1bHRPbkNhdWdodEVycm9yLFxuICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IgPSBkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICB0cmFuc2l0aW9uQ2FsbGJhY2tzID0gbnVsbDtcbiAgICAgIG51bGwgIT09IG9wdGlvbnMgJiZcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zICYmXG4gICAgICAgIChvcHRpb25zLmh5ZHJhdGVcbiAgICAgICAgICA/IGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgXCJoeWRyYXRlIHRocm91Z2ggY3JlYXRlUm9vdCBpcyBkZXByZWNhdGVkLiBVc2UgUmVhY3RET01DbGllbnQuaHlkcmF0ZVJvb3QoY29udGFpbmVyLCA8QXBwIC8+KSBpbnN0ZWFkLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gb3B0aW9ucyAmJlxuICAgICAgICAgICAgb3B0aW9ucy4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBwYXNzZWQgYSBKU1ggZWxlbWVudCB0byBjcmVhdGVSb290LiBZb3UgcHJvYmFibHkgbWVhbnQgdG8gY2FsbCByb290LnJlbmRlciBpbnN0ZWFkLiBFeGFtcGxlIHVzYWdlOlxcblxcbiAgbGV0IHJvb3QgPSBjcmVhdGVSb290KGRvbUNvbnRhaW5lcik7XFxuICByb290LnJlbmRlcig8QXBwIC8+KTtcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgITAgPT09IG9wdGlvbnMudW5zdGFibGVfc3RyaWN0TW9kZSAmJiAoaXNTdHJpY3RNb2RlID0gITApLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMuaWRlbnRpZmllclByZWZpeCAmJlxuICAgICAgICAgIChpZGVudGlmaWVyUHJlZml4ID0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4KSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciAmJlxuICAgICAgICAgIChvblVuY2F1Z2h0RXJyb3IgPSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5vbkNhdWdodEVycm9yICYmXG4gICAgICAgICAgKG9uQ2F1Z2h0RXJyb3IgPSBvcHRpb25zLm9uQ2F1Z2h0RXJyb3IpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yICYmXG4gICAgICAgICAgKG9uUmVjb3ZlcmFibGVFcnJvciA9IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MgJiZcbiAgICAgICAgICAodHJhbnNpdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMudW5zdGFibGVfdHJhbnNpdGlvbkNhbGxiYWNrcykpO1xuICAgICAgb3B0aW9ucyA9IGNyZWF0ZUZpYmVyUm9vdChcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAxLFxuICAgICAgICAhMSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgaXNTdHJpY3RNb2RlLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrcyxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICAgIGNvbnRhaW5lcltpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IG9wdGlvbnMuY3VycmVudDtcbiAgICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKGNvbnRhaW5lcik7XG4gICAgICByZXR1cm4gbmV3IFJlYWN0RE9NUm9vdChvcHRpb25zKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaHlkcmF0ZVJvb3QgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBpbml0aWFsQ2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgICAgIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKVxuICAgICAgICB0aHJvdyBFcnJvcihcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIpO1xuICAgICAgd2FybklmUmVhY3RET01Db250YWluZXJJbkRFVihjb250YWluZXIpO1xuICAgICAgdm9pZCAwID09PSBpbml0aWFsQ2hpbGRyZW4gJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIk11c3QgcHJvdmlkZSBpbml0aWFsIGNoaWxkcmVuIGFzIHNlY29uZCBhcmd1bWVudCB0byBoeWRyYXRlUm9vdC4gRXhhbXBsZSB1c2FnZTogaHlkcmF0ZVJvb3QoZG9tQ29udGFpbmVyLCA8QXBwIC8+KVwiXG4gICAgICAgICk7XG4gICAgICB2YXIgaXNTdHJpY3RNb2RlID0gITEsXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXggPSBcIlwiLFxuICAgICAgICBvblVuY2F1Z2h0RXJyb3IgPSBkZWZhdWx0T25VbmNhdWdodEVycm9yLFxuICAgICAgICBvbkNhdWdodEVycm9yID0gZGVmYXVsdE9uQ2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uUmVjb3ZlcmFibGVFcnJvciA9IGRlZmF1bHRPblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICAgIHRyYW5zaXRpb25DYWxsYmFja3MgPSBudWxsLFxuICAgICAgICBmb3JtU3RhdGUgPSBudWxsO1xuICAgICAgbnVsbCAhPT0gb3B0aW9ucyAmJlxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMgJiZcbiAgICAgICAgKCEwID09PSBvcHRpb25zLnVuc3RhYmxlX3N0cmljdE1vZGUgJiYgKGlzU3RyaWN0TW9kZSA9ICEwKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLmlkZW50aWZpZXJQcmVmaXggJiZcbiAgICAgICAgICAoaWRlbnRpZmllclByZWZpeCA9IG9wdGlvbnMuaWRlbnRpZmllclByZWZpeCksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5vblVuY2F1Z2h0RXJyb3IgJiZcbiAgICAgICAgICAob25VbmNhdWdodEVycm9yID0gb3B0aW9ucy5vblVuY2F1Z2h0RXJyb3IpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMub25DYXVnaHRFcnJvciAmJlxuICAgICAgICAgIChvbkNhdWdodEVycm9yID0gb3B0aW9ucy5vbkNhdWdodEVycm9yKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLm9uUmVjb3ZlcmFibGVFcnJvciAmJlxuICAgICAgICAgIChvblJlY292ZXJhYmxlRXJyb3IgPSBvcHRpb25zLm9uUmVjb3ZlcmFibGVFcnJvciksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy51bnN0YWJsZV90cmFuc2l0aW9uQ2FsbGJhY2tzICYmXG4gICAgICAgICAgKHRyYW5zaXRpb25DYWxsYmFja3MgPSBvcHRpb25zLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMuZm9ybVN0YXRlICYmIChmb3JtU3RhdGUgPSBvcHRpb25zLmZvcm1TdGF0ZSkpO1xuICAgICAgaW5pdGlhbENoaWxkcmVuID0gY3JlYXRlRmliZXJSb290KFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIDEsXG4gICAgICAgICEwLFxuICAgICAgICBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICAgIG51bGwgIT0gb3B0aW9ucyA/IG9wdGlvbnMgOiBudWxsLFxuICAgICAgICBpc1N0cmljdE1vZGUsXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICAgIG9uVW5jYXVnaHRFcnJvcixcbiAgICAgICAgb25DYXVnaHRFcnJvcixcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICB0cmFuc2l0aW9uQ2FsbGJhY2tzLFxuICAgICAgICBmb3JtU3RhdGVcbiAgICAgICk7XG4gICAgICBpbml0aWFsQ2hpbGRyZW4uY29udGV4dCA9IGdldENvbnRleHRGb3JTdWJ0cmVlKG51bGwpO1xuICAgICAgb3B0aW9ucyA9IGluaXRpYWxDaGlsZHJlbi5jdXJyZW50O1xuICAgICAgaXNTdHJpY3RNb2RlID0gcmVxdWVzdFVwZGF0ZUxhbmUob3B0aW9ucyk7XG4gICAgICBpc1N0cmljdE1vZGUgPSBnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uQnlMYW5lKGlzU3RyaWN0TW9kZSk7XG4gICAgICBpZGVudGlmaWVyUHJlZml4ID0gY3JlYXRlVXBkYXRlKGlzU3RyaWN0TW9kZSk7XG4gICAgICBpZGVudGlmaWVyUHJlZml4LmNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGVucXVldWVVcGRhdGUob3B0aW9ucywgaWRlbnRpZmllclByZWZpeCwgaXNTdHJpY3RNb2RlKTtcbiAgICAgIG9wdGlvbnMgPSBpc1N0cmljdE1vZGU7XG4gICAgICBpbml0aWFsQ2hpbGRyZW4uY3VycmVudC5sYW5lcyA9IG9wdGlvbnM7XG4gICAgICBtYXJrUm9vdFVwZGF0ZWQkMShpbml0aWFsQ2hpbGRyZW4sIG9wdGlvbnMpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKGluaXRpYWxDaGlsZHJlbik7XG4gICAgICBjb250YWluZXJbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBpbml0aWFsQ2hpbGRyZW4uY3VycmVudDtcbiAgICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKGNvbnRhaW5lcik7XG4gICAgICByZXR1cm4gbmV3IFJlYWN0RE9NSHlkcmF0aW9uUm9vdChpbml0aWFsQ2hpbGRyZW4pO1xuICAgIH07XG4gICAgZXhwb3J0cy52ZXJzaW9uID0gXCIxOS4xLjBcIjtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/react-dom/cjs/react-dom-client.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/react-dom/cjs/react-dom.development.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/react-dom/cjs/react-dom.development.js ***!
|
||
\*************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-dom.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\n true &&\n (function () {\n function noop() {}\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n try {\n testStringCoercion(key);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n JSCompiler_inline_result &&\n (console.error(\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n key[Symbol.toStringTag]) ||\n key.constructor.name ||\n \"Object\"\n ),\n testStringCoercion(key));\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n }\n function getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n }\n function getValueDescriptorExpectingObjectForWarning(thing) {\n return null === thing\n ? \"`null`\"\n : void 0 === thing\n ? \"`undefined`\"\n : \"\" === thing\n ? \"an empty string\"\n : 'something with type \"' + typeof thing + '\"';\n }\n function getValueDescriptorExpectingEnumForWarning(thing) {\n return null === thing\n ? \"`null`\"\n : void 0 === thing\n ? \"`undefined`\"\n : \"\" === thing\n ? \"an empty string\"\n : \"string\" === typeof thing\n ? JSON.stringify(thing)\n : \"number\" === typeof thing\n ? \"`\" + thing + \"`\"\n : 'something with type \"' + typeof thing + '\"';\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"),\n Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(\n \"Invalid form element. requestFormReset must be passed a form that was rendered by React.\"\n );\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n (\"function\" === typeof Map &&\n null != Map.prototype &&\n \"function\" === typeof Map.prototype.forEach &&\n \"function\" === typeof Set &&\n null != Set.prototype &&\n \"function\" === typeof Set.prototype.clear &&\n \"function\" === typeof Set.prototype.forEach) ||\n console.error(\n \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\"\n );\n exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\n exports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(\"Target container is not a DOM element.\");\n return createPortal$1(children, container, null, key);\n };\n exports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn))\n return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f() &&\n console.error(\n \"flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\"\n );\n }\n };\n exports.preconnect = function (href, options) {\n \"string\" === typeof href && href\n ? null != options && \"object\" !== typeof options\n ? console.error(\n \"ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : null != options &&\n \"string\" !== typeof options.crossOrigin &&\n console.error(\n \"ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.\",\n getValueDescriptorExpectingObjectForWarning(options.crossOrigin)\n )\n : console.error(\n \"ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n };\n exports.prefetchDNS = function (href) {\n if (\"string\" !== typeof href || !href)\n console.error(\n \"ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n else if (1 < arguments.length) {\n var options = arguments[1];\n \"object\" === typeof options && options.hasOwnProperty(\"crossOrigin\")\n ? console.error(\n \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : console.error(\n \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n getValueDescriptorExpectingEnumForWarning(options)\n );\n }\n \"string\" === typeof href && Internals.d.D(href);\n };\n exports.preinit = function (href, options) {\n \"string\" === typeof href && href\n ? null == options || \"object\" !== typeof options\n ? console.error(\n \"ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : \"style\" !== options.as &&\n \"script\" !== options.as &&\n console.error(\n 'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are \"style\" and \"script\".',\n getValueDescriptorExpectingEnumForWarning(options.as)\n )\n : console.error(\n \"ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n if (\n \"string\" === typeof href &&\n options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence\n ? options.precedence\n : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n };\n exports.preinitModule = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n void 0 !== options && \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : options &&\n \"as\" in options &&\n \"script\" !== options.as &&\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingEnumForWarning(options.as) +\n \".\");\n if (encountered)\n console.error(\n \"ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s\",\n encountered\n );\n else\n switch (\n ((encountered =\n options && \"string\" === typeof options.as ? options.as : \"script\"),\n encountered)\n ) {\n case \"script\":\n break;\n default:\n (encountered =\n getValueDescriptorExpectingEnumForWarning(encountered)),\n console.error(\n 'ReactDOM.preinitModule(): Currently the only supported \"as\" type for this function is \"script\" but received \"%s\" instead. This warning was generated for `href` \"%s\". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',\n encountered,\n href\n );\n }\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as)\n (encountered = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n )),\n Internals.d.M(href, {\n crossOrigin: encountered,\n integrity:\n \"string\" === typeof options.integrity\n ? options.integrity\n : void 0,\n nonce:\n \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n } else null == options && Internals.d.M(href);\n };\n exports.preload = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n null == options || \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : (\"string\" === typeof options.as && options.as) ||\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options.as) +\n \".\");\n encountered &&\n console.error(\n 'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel=\"preload\" as=\"...\" />` tag.%s',\n encountered\n );\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n encountered = options.as;\n var crossOrigin = getCrossOriginStringAs(\n encountered,\n options.crossOrigin\n );\n Internals.d.L(href, encountered, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet\n ? options.imageSrcSet\n : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes\n ? options.imageSizes\n : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n };\n exports.preloadModule = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n void 0 !== options && \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : options &&\n \"as\" in options &&\n \"string\" !== typeof options.as &&\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options.as) +\n \".\");\n encountered &&\n console.error(\n 'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel=\"modulepreload\" as=\"...\" />` tag.%s',\n encountered\n );\n \"string\" === typeof href &&\n (options\n ? ((encountered = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n )),\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: encountered,\n integrity:\n \"string\" === typeof options.integrity\n ? options.integrity\n : void 0\n }))\n : Internals.d.m(href));\n };\n exports.requestFormReset = function (form) {\n Internals.d.r(form);\n };\n exports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n };\n exports.useFormState = function (action, initialState, permalink) {\n return resolveDispatcher().useFormState(action, initialState, permalink);\n };\n exports.useFormStatus = function () {\n return resolveDispatcher().useHostTransitionStatus();\n };\n exports.version = \"19.1.0\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvRUFBb0U7QUFDeEU7QUFDQSxJQUFJLG9CQUFvQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxpQkFBaUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxrQkFBa0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG1CQUFtQjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZUFBZTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixVQUFVO0FBQ1Y7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBLElBQUksK0JBQStCO0FBQ25DO0FBQ0E7QUFDQSxJQUFJLG9CQUFvQjtBQUN4QjtBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekI7QUFDQTtBQUNBLElBQUksZUFBZTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUciLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xccmVhY3QtZG9tXFxjanNcXHJlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1kb20uZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVySW5mbywgaW1wbGVtZW50YXRpb24pIHtcbiAgICAgIHZhciBrZXkgPVxuICAgICAgICAzIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1szXSA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24oa2V5KTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMDtcbiAgICAgIH1cbiAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCAmJlxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlRoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgICBrZXlbU3ltYm9sLnRvU3RyaW5nVGFnXSkgfHxcbiAgICAgICAgICAgIGtleS5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgICAgICAgICBcIk9iamVjdFwiXG4gICAgICAgICksXG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbihrZXkpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9QT1JUQUxfVFlQRSxcbiAgICAgICAga2V5OiBudWxsID09IGtleSA/IG51bGwgOiBcIlwiICsga2V5LFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgICAgIGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvblxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhhcywgaW5wdXQpIHtcbiAgICAgIGlmIChcImZvbnRcIiA9PT0gYXMpIHJldHVybiBcIlwiO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBpbnB1dClcbiAgICAgICAgcmV0dXJuIFwidXNlLWNyZWRlbnRpYWxzXCIgPT09IGlucHV0ID8gaW5wdXQgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKHRoaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gdGhpbmdcbiAgICAgICAgPyBcImBudWxsYFwiXG4gICAgICAgIDogdm9pZCAwID09PSB0aGluZ1xuICAgICAgICAgID8gXCJgdW5kZWZpbmVkYFwiXG4gICAgICAgICAgOiBcIlwiID09PSB0aGluZ1xuICAgICAgICAgICAgPyBcImFuIGVtcHR5IHN0cmluZ1wiXG4gICAgICAgICAgICA6ICdzb21ldGhpbmcgd2l0aCB0eXBlIFwiJyArIHR5cGVvZiB0aGluZyArICdcIic7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKHRoaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gdGhpbmdcbiAgICAgICAgPyBcImBudWxsYFwiXG4gICAgICAgIDogdm9pZCAwID09PSB0aGluZ1xuICAgICAgICAgID8gXCJgdW5kZWZpbmVkYFwiXG4gICAgICAgICAgOiBcIlwiID09PSB0aGluZ1xuICAgICAgICAgICAgPyBcImFuIGVtcHR5IHN0cmluZ1wiXG4gICAgICAgICAgICA6IFwic3RyaW5nXCIgPT09IHR5cGVvZiB0aGluZ1xuICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHRoaW5nKVxuICAgICAgICAgICAgICA6IFwibnVtYmVyXCIgPT09IHR5cGVvZiB0aGluZ1xuICAgICAgICAgICAgICAgID8gXCJgXCIgKyB0aGluZyArIFwiYFwiXG4gICAgICAgICAgICAgICAgOiAnc29tZXRoaW5nIHdpdGggdHlwZSBcIicgKyB0eXBlb2YgdGhpbmcgKyAnXCInO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlRGlzcGF0Y2hlcigpIHtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgIG51bGwgPT09IGRpc3BhdGNoZXIgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIGRpc3BhdGNoZXI7XG4gICAgfVxuICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQoRXJyb3IoKSk7XG4gICAgdmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpLFxuICAgICAgSW50ZXJuYWxzID0ge1xuICAgICAgICBkOiB7XG4gICAgICAgICAgZjogbm9vcCxcbiAgICAgICAgICByOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJJbnZhbGlkIGZvcm0gZWxlbWVudC4gcmVxdWVzdEZvcm1SZXNldCBtdXN0IGJlIHBhc3NlZCBhIGZvcm0gdGhhdCB3YXMgcmVuZGVyZWQgYnkgUmVhY3QuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBEOiBub29wLFxuICAgICAgICAgIEM6IG5vb3AsXG4gICAgICAgICAgTDogbm9vcCxcbiAgICAgICAgICBtOiBub29wLFxuICAgICAgICAgIFg6IG5vb3AsXG4gICAgICAgICAgUzogbm9vcCxcbiAgICAgICAgICBNOiBub29wXG4gICAgICAgIH0sXG4gICAgICAgIHA6IDAsXG4gICAgICAgIGZpbmRET01Ob2RlOiBudWxsXG4gICAgICB9LFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICAgICAgICBSZWFjdC5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU7XG4gICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE1hcCAmJlxuICAgICAgbnVsbCAhPSBNYXAucHJvdG90eXBlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBNYXAucHJvdG90eXBlLmZvckVhY2ggJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFNldCAmJlxuICAgICAgbnVsbCAhPSBTZXQucHJvdG90eXBlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2gpIHx8XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIlJlYWN0IGRlcGVuZHMgb24gTWFwIGFuZCBTZXQgYnVpbHQtaW4gdHlwZXMuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHNcIlxuICAgICAgKTtcbiAgICBleHBvcnRzLl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSA9XG4gICAgICBJbnRlcm5hbHM7XG4gICAgZXhwb3J0cy5jcmVhdGVQb3J0YWwgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICAgICAgdmFyIGtleSA9XG4gICAgICAgIDIgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdID8gYXJndW1lbnRzWzJdIDogbnVsbDtcbiAgICAgIGlmIChcbiAgICAgICAgIWNvbnRhaW5lciB8fFxuICAgICAgICAoMSAhPT0gY29udGFpbmVyLm5vZGVUeXBlICYmXG4gICAgICAgICAgOSAhPT0gY29udGFpbmVyLm5vZGVUeXBlICYmXG4gICAgICAgICAgMTEgIT09IGNvbnRhaW5lci5ub2RlVHlwZSlcbiAgICAgIClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiKTtcbiAgICAgIHJldHVybiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyLCBudWxsLCBrZXkpO1xuICAgIH07XG4gICAgZXhwb3J0cy5mbHVzaFN5bmMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHZhciBwcmV2aW91c1RyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5ULFxuICAgICAgICBwcmV2aW91c1VwZGF0ZVByaW9yaXR5ID0gSW50ZXJuYWxzLnA7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoKChSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbCksIChJbnRlcm5hbHMucCA9IDIpLCBmbikpXG4gICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZpb3VzVHJhbnNpdGlvbiksXG4gICAgICAgICAgKEludGVybmFscy5wID0gcHJldmlvdXNVcGRhdGVQcmlvcml0eSksXG4gICAgICAgICAgSW50ZXJuYWxzLmQuZigpICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImZsdXNoU3luYyB3YXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgbGlmZWN5Y2xlIG1ldGhvZC4gUmVhY3QgY2Fubm90IGZsdXNoIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuIENvbnNpZGVyIG1vdmluZyB0aGlzIGNhbGwgdG8gYSBzY2hlZHVsZXIgdGFzayBvciBtaWNybyB0YXNrLlwiXG4gICAgICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy5wcmVjb25uZWN0ID0gZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWZcbiAgICAgICAgPyBudWxsICE9IG9wdGlvbnMgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3RET00ucHJlY29ubmVjdCgpOiBFeHBlY3RlZCB0aGUgYG9wdGlvbnNgIGFyZ3VtZW50IChzZWNvbmQpIHRvIGJlIGFuIG9iamVjdCBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC4gVGhlIG9ubHkgc3VwcG9ydGVkIG9wdGlvbiBhdCB0aGlzIHRpbWUgaXMgYGNyb3NzT3JpZ2luYCB3aGljaCBhY2NlcHRzIGEgc3RyaW5nLlwiLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogbnVsbCAhPSBvcHRpb25zICYmXG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2Ygb3B0aW9ucy5jcm9zc09yaWdpbiAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVjb25uZWN0KCk6IEV4cGVjdGVkIHRoZSBgY3Jvc3NPcmlnaW5gIG9wdGlvbiAoc2Vjb25kIGFyZ3VtZW50KSB0byBiZSBhIHN0cmluZyBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC4gVHJ5IHJlbW92aW5nIHRoaXMgb3B0aW9uIG9yIHBhc3NpbmcgYSBzdHJpbmcgdmFsdWUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zLmNyb3NzT3JpZ2luKVxuICAgICAgICAgICAgKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0RE9NLnByZWNvbm5lY3QoKTogRXhwZWN0ZWQgdGhlIGBocmVmYCBhcmd1bWVudCAoZmlyc3QpIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZyBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZilcbiAgICAgICAgICApO1xuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiZcbiAgICAgICAgKG9wdGlvbnNcbiAgICAgICAgICA/ICgob3B0aW9ucyA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4pLFxuICAgICAgICAgICAgKG9wdGlvbnMgPVxuICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9uc1xuICAgICAgICAgICAgICAgID8gXCJ1c2UtY3JlZGVudGlhbHNcIiA9PT0gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgPyBvcHRpb25zXG4gICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICA6IHZvaWQgMCkpXG4gICAgICAgICAgOiAob3B0aW9ucyA9IG51bGwpLFxuICAgICAgICBJbnRlcm5hbHMuZC5DKGhyZWYsIG9wdGlvbnMpKTtcbiAgICB9O1xuICAgIGV4cG9ydHMucHJlZmV0Y2hETlMgPSBmdW5jdGlvbiAoaHJlZikge1xuICAgICAgaWYgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBocmVmIHx8ICFocmVmKVxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiUmVhY3RET00ucHJlZmV0Y2hETlMoKTogRXhwZWN0ZWQgdGhlIGBocmVmYCBhcmd1bWVudCAoZmlyc3QpIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZyBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC5cIixcbiAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpXG4gICAgICAgICk7XG4gICAgICBlbHNlIGlmICgxIDwgYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcImNyb3NzT3JpZ2luXCIpXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0RE9NLnByZWZldGNoRE5TKCk6IEV4cGVjdGVkIG9ubHkgb25lIGFyZ3VtZW50LCBgaHJlZmAsIGJ1dCBlbmNvdW50ZXJlZCAlcyBhcyBhIHNlY29uZCBhcmd1bWVudCBpbnN0ZWFkLiBUaGlzIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgb3B0aW9ucyBhbmQgaXMgY3VycmVudGx5IGRpc2FsbG93ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBzZXQgYSBjcm9zc09yaWdpbiBwcm9wZXJ0eSBmb3IgdGhpcyBETlMgbG9va3VwIGhpbnQuIEJyb3dzZXJzIGRvIG5vdCBwZXJmb3JtIEROUyBxdWVyaWVzIHVzaW5nIENPUlMgYW5kIHNldHRpbmcgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIHJlc291cmNlIGhpbnQgaGFzIG5vIGVmZmVjdC4gVHJ5IGNhbGxpbmcgUmVhY3RET00ucHJlZmV0Y2hETlMoKSB3aXRoIGp1c3QgYSBzaW5nbGUgc3RyaW5nIGFyZ3VtZW50LCBgaHJlZmAuXCIsXG4gICAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0RE9NLnByZWZldGNoRE5TKCk6IEV4cGVjdGVkIG9ubHkgb25lIGFyZ3VtZW50LCBgaHJlZmAsIGJ1dCBlbmNvdW50ZXJlZCAlcyBhcyBhIHNlY29uZCBhcmd1bWVudCBpbnN0ZWFkLiBUaGlzIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgb3B0aW9ucyBhbmQgaXMgY3VycmVudGx5IGRpc2FsbG93ZWQuIFRyeSBjYWxsaW5nIFJlYWN0RE9NLnByZWZldGNoRE5TKCkgd2l0aCBqdXN0IGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgYGhyZWZgLlwiLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zKVxuICAgICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIEludGVybmFscy5kLkQoaHJlZik7XG4gICAgfTtcbiAgICBleHBvcnRzLnByZWluaXQgPSBmdW5jdGlvbiAoaHJlZiwgb3B0aW9ucykge1xuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiYgaHJlZlxuICAgICAgICA/IG51bGwgPT0gb3B0aW9ucyB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb3B0aW9uc1xuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVpbml0KCk6IEV4cGVjdGVkIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgKHNlY29uZCkgdG8gYmUgYW4gb2JqZWN0IHdpdGggYW4gYGFzYCBwcm9wZXJ0eSBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIHJlc291cmNlIHRvIGJlIHByZWluaXRpYWxpemVkIGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogXCJzdHlsZVwiICE9PSBvcHRpb25zLmFzICYmXG4gICAgICAgICAgICBcInNjcmlwdFwiICE9PSBvcHRpb25zLmFzICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnUmVhY3RET00ucHJlaW5pdCgpOiBFeHBlY3RlZCB0aGUgYGFzYCBwcm9wZXJ0eSBpbiB0aGUgYG9wdGlvbnNgIGFyZ3VtZW50IChzZWNvbmQpIHRvIGNvbnRhaW4gYSB2YWxpZCB2YWx1ZSBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIHJlc291cmNlIHRvIGJlIHByZWluaXRpYWxpemVkIGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLiBWYWxpZCB2YWx1ZXMgZm9yIGBhc2AgYXJlIFwic3R5bGVcIiBhbmQgXCJzY3JpcHRcIi4nLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zLmFzKVxuICAgICAgICAgICAgKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0RE9NLnByZWluaXQoKTogRXhwZWN0ZWQgdGhlIGBocmVmYCBhcmd1bWVudCAoZmlyc3QpIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZyBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZilcbiAgICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJlxuICAgICAgICBvcHRpb25zICYmXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzXG4gICAgICApIHtcbiAgICAgICAgdmFyIGFzID0gb3B0aW9ucy5hcyxcbiAgICAgICAgICBjcm9zc09yaWdpbiA9IGdldENyb3NzT3JpZ2luU3RyaW5nQXMoYXMsIG9wdGlvbnMuY3Jvc3NPcmlnaW4pLFxuICAgICAgICAgIGludGVncml0eSA9XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHkgPyBvcHRpb25zLmludGVncml0eSA6IHZvaWQgMCxcbiAgICAgICAgICBmZXRjaFByaW9yaXR5ID1cbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmZldGNoUHJpb3JpdHlcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZldGNoUHJpb3JpdHlcbiAgICAgICAgICAgICAgOiB2b2lkIDA7XG4gICAgICAgIFwic3R5bGVcIiA9PT0gYXNcbiAgICAgICAgICA/IEludGVybmFscy5kLlMoXG4gICAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLnByZWNlZGVuY2VcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucHJlY2VkZW5jZVxuICAgICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGludGVncml0eTogaW50ZWdyaXR5LFxuICAgICAgICAgICAgICAgIGZldGNoUHJpb3JpdHk6IGZldGNoUHJpb3JpdHlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogXCJzY3JpcHRcIiA9PT0gYXMgJiZcbiAgICAgICAgICAgIEludGVybmFscy5kLlgoaHJlZiwge1xuICAgICAgICAgICAgICBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgIGludGVncml0eTogaW50ZWdyaXR5LFxuICAgICAgICAgICAgICBmZXRjaFByaW9yaXR5OiBmZXRjaFByaW9yaXR5LFxuICAgICAgICAgICAgICBub25jZTogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMubm9uY2UgPyBvcHRpb25zLm5vbmNlIDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4cG9ydHMucHJlaW5pdE1vZHVsZSA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZW5jb3VudGVyZWQgPSBcIlwiO1xuICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWYpIHx8XG4gICAgICAgIChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgIFwiIFRoZSBgaHJlZmAgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpICtcbiAgICAgICAgICBcIi5cIik7XG4gICAgICB2b2lkIDAgIT09IG9wdGlvbnMgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgPyAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgb3B0aW9uc2AgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucykgK1xuICAgICAgICAgICAgXCIuXCIpXG4gICAgICAgIDogb3B0aW9ucyAmJlxuICAgICAgICAgIFwiYXNcIiBpbiBvcHRpb25zICYmXG4gICAgICAgICAgXCJzY3JpcHRcIiAhPT0gb3B0aW9ucy5hcyAmJlxuICAgICAgICAgIChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgICAgXCIgVGhlIGBhc2Agb3B0aW9uIGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zLmFzKSArXG4gICAgICAgICAgICBcIi5cIik7XG4gICAgICBpZiAoZW5jb3VudGVyZWQpXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJSZWFjdERPTS5wcmVpbml0TW9kdWxlKCk6IEV4cGVjdGVkIHVwIHRvIHR3byBhcmd1bWVudHMsIGEgbm9uLWVtcHR5IGBocmVmYCBzdHJpbmcgYW5kLCBvcHRpb25hbGx5LCBhbiBgb3B0aW9uc2Agb2JqZWN0IHdpdGggYSB2YWxpZCBgYXNgIHByb3BlcnR5LiVzXCIsXG4gICAgICAgICAgZW5jb3VudGVyZWRcbiAgICAgICAgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoKGVuY291bnRlcmVkID1cbiAgICAgICAgICAgIG9wdGlvbnMgJiYgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXMgPyBvcHRpb25zLmFzIDogXCJzY3JpcHRcIiksXG4gICAgICAgICAgZW5jb3VudGVyZWQpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAoZW5jb3VudGVyZWQgPVxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhlbmNvdW50ZXJlZCkpLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdSZWFjdERPTS5wcmVpbml0TW9kdWxlKCk6IEN1cnJlbnRseSB0aGUgb25seSBzdXBwb3J0ZWQgXCJhc1wiIHR5cGUgZm9yIHRoaXMgZnVuY3Rpb24gaXMgXCJzY3JpcHRcIiBidXQgcmVjZWl2ZWQgXCIlc1wiIGluc3RlYWQuIFRoaXMgd2FybmluZyB3YXMgZ2VuZXJhdGVkIGZvciBgaHJlZmAgXCIlc1wiLiBJbiB0aGUgZnV0dXJlIG90aGVyIG1vZHVsZSB0eXBlcyB3aWxsIGJlIHN1cHBvcnRlZCwgYWxpZ25pbmcgd2l0aCB0aGUgaW1wb3J0LWF0dHJpYnV0ZXMgcHJvcG9zYWwuIExlYXJuIG1vcmUgaGVyZTogKGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWltcG9ydC1hdHRyaWJ1dGVzKScsXG4gICAgICAgICAgICAgICAgZW5jb3VudGVyZWQsXG4gICAgICAgICAgICAgICAgaHJlZlxuICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYpXG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJiBudWxsICE9PSBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT0gb3B0aW9ucy5hcyB8fCBcInNjcmlwdFwiID09PSBvcHRpb25zLmFzKVxuICAgICAgICAgICAgKGVuY291bnRlcmVkID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhcbiAgICAgICAgICAgICAgb3B0aW9ucy5hcyxcbiAgICAgICAgICAgICAgb3B0aW9ucy5jcm9zc09yaWdpblxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIEludGVybmFscy5kLk0oaHJlZiwge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBlbmNvdW50ZXJlZCxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6XG4gICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHlcbiAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmludGVncml0eVxuICAgICAgICAgICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICBub25jZTpcbiAgICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLm5vbmNlID8gb3B0aW9ucy5ub25jZSA6IHZvaWQgMFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIG51bGwgPT0gb3B0aW9ucyAmJiBJbnRlcm5hbHMuZC5NKGhyZWYpO1xuICAgIH07XG4gICAgZXhwb3J0cy5wcmVsb2FkID0gZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBlbmNvdW50ZXJlZCA9IFwiXCI7XG4gICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiYgaHJlZikgfHxcbiAgICAgICAgKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgXCIgVGhlIGBocmVmYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZikgK1xuICAgICAgICAgIFwiLlwiKTtcbiAgICAgIG51bGwgPT0gb3B0aW9ucyB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb3B0aW9uc1xuICAgICAgICA/IChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgICAgXCIgVGhlIGBvcHRpb25zYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zKSArXG4gICAgICAgICAgICBcIi5cIilcbiAgICAgICAgOiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXMgJiYgb3B0aW9ucy5hcykgfHxcbiAgICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgYXNgIG9wdGlvbiBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zLmFzKSArXG4gICAgICAgICAgICBcIi5cIik7XG4gICAgICBlbmNvdW50ZXJlZCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdSZWFjdERPTS5wcmVsb2FkKCk6IEV4cGVjdGVkIHR3byBhcmd1bWVudHMsIGEgbm9uLWVtcHR5IGBocmVmYCBzdHJpbmcgYW5kIGFuIGBvcHRpb25zYCBvYmplY3Qgd2l0aCBhbiBgYXNgIHByb3BlcnR5IHZhbGlkIGZvciBhIGA8bGluayByZWw9XCJwcmVsb2FkXCIgYXM9XCIuLi5cIiAvPmAgdGFnLiVzJyxcbiAgICAgICAgICBlbmNvdW50ZXJlZFxuICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJlxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJlxuICAgICAgICBudWxsICE9PSBvcHRpb25zICYmXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzXG4gICAgICApIHtcbiAgICAgICAgZW5jb3VudGVyZWQgPSBvcHRpb25zLmFzO1xuICAgICAgICB2YXIgY3Jvc3NPcmlnaW4gPSBnZXRDcm9zc09yaWdpblN0cmluZ0FzKFxuICAgICAgICAgIGVuY291bnRlcmVkLFxuICAgICAgICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5cbiAgICAgICAgKTtcbiAgICAgICAgSW50ZXJuYWxzLmQuTChocmVmLCBlbmNvdW50ZXJlZCwge1xuICAgICAgICAgIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbixcbiAgICAgICAgICBpbnRlZ3JpdHk6XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHkgPyBvcHRpb25zLmludGVncml0eSA6IHZvaWQgMCxcbiAgICAgICAgICBub25jZTogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMubm9uY2UgPyBvcHRpb25zLm5vbmNlIDogdm9pZCAwLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLnR5cGUgPyBvcHRpb25zLnR5cGUgOiB2b2lkIDAsXG4gICAgICAgICAgZmV0Y2hQcmlvcml0eTpcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmZldGNoUHJpb3JpdHlcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZldGNoUHJpb3JpdHlcbiAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgcmVmZXJyZXJQb2xpY3k6XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5yZWZlcnJlclBvbGljeVxuICAgICAgICAgICAgICA/IG9wdGlvbnMucmVmZXJyZXJQb2xpY3lcbiAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgaW1hZ2VTcmNTZXQ6XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbWFnZVNyY1NldFxuICAgICAgICAgICAgICA/IG9wdGlvbnMuaW1hZ2VTcmNTZXRcbiAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgaW1hZ2VTaXplczpcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmltYWdlU2l6ZXNcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmltYWdlU2l6ZXNcbiAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgbWVkaWE6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLm1lZGlhID8gb3B0aW9ucy5tZWRpYSA6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4cG9ydHMucHJlbG9hZE1vZHVsZSA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZW5jb3VudGVyZWQgPSBcIlwiO1xuICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWYpIHx8XG4gICAgICAgIChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgIFwiIFRoZSBgaHJlZmAgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpICtcbiAgICAgICAgICBcIi5cIik7XG4gICAgICB2b2lkIDAgIT09IG9wdGlvbnMgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgPyAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgb3B0aW9uc2AgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucykgK1xuICAgICAgICAgICAgXCIuXCIpXG4gICAgICAgIDogb3B0aW9ucyAmJlxuICAgICAgICAgIFwiYXNcIiBpbiBvcHRpb25zICYmXG4gICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIG9wdGlvbnMuYXMgJiZcbiAgICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgYXNgIG9wdGlvbiBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zLmFzKSArXG4gICAgICAgICAgICBcIi5cIik7XG4gICAgICBlbmNvdW50ZXJlZCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdSZWFjdERPTS5wcmVsb2FkTW9kdWxlKCk6IEV4cGVjdGVkIHR3byBhcmd1bWVudHMsIGEgbm9uLWVtcHR5IGBocmVmYCBzdHJpbmcgYW5kLCBvcHRpb25hbGx5LCBhbiBgb3B0aW9uc2Agb2JqZWN0IHdpdGggYW4gYGFzYCBwcm9wZXJ0eSB2YWxpZCBmb3IgYSBgPGxpbmsgcmVsPVwibW9kdWxlcHJlbG9hZFwiIGFzPVwiLi4uXCIgLz5gIHRhZy4lcycsXG4gICAgICAgICAgZW5jb3VudGVyZWRcbiAgICAgICAgKTtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmXG4gICAgICAgIChvcHRpb25zXG4gICAgICAgICAgPyAoKGVuY291bnRlcmVkID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhcbiAgICAgICAgICAgICAgb3B0aW9ucy5hcyxcbiAgICAgICAgICAgICAgb3B0aW9ucy5jcm9zc09yaWdpblxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBJbnRlcm5hbHMuZC5tKGhyZWYsIHtcbiAgICAgICAgICAgICAgYXM6XG4gICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXMgJiYgXCJzY3JpcHRcIiAhPT0gb3B0aW9ucy5hc1xuICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmFzXG4gICAgICAgICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IGVuY291bnRlcmVkLFxuICAgICAgICAgICAgICBpbnRlZ3JpdHk6XG4gICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW50ZWdyaXR5XG4gICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuaW50ZWdyaXR5XG4gICAgICAgICAgICAgICAgICA6IHZvaWQgMFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgOiBJbnRlcm5hbHMuZC5tKGhyZWYpKTtcbiAgICB9O1xuICAgIGV4cG9ydHMucmVxdWVzdEZvcm1SZXNldCA9IGZ1bmN0aW9uIChmb3JtKSB7XG4gICAgICBJbnRlcm5hbHMuZC5yKGZvcm0pO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IGZ1bmN0aW9uIChmbiwgYSkge1xuICAgICAgcmV0dXJuIGZuKGEpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VGb3JtU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluaykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlRm9ybVN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlLCBwZXJtYWxpbmspO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VGb3JtU3RhdHVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMoKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudmVyc2lvbiA9IFwiMTkuMS4wXCI7XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AoRXJyb3IoKSk7XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/react-dom/cjs/react-dom.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/react-dom/client.js":
|
||
/*!******************************************!*\
|
||
!*** ./node_modules/react-dom/client.js ***!
|
||
\******************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom-client.development.js */ \"(pages-dir-browser)/./node_modules/react-dom/cjs/react-dom-client.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2xpZW50LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksS0FBcUMsRUFBRSxFQUsxQyxDQUFDO0FBQ0YsRUFBRSxxS0FBaUU7QUFDbkUiLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xccmVhY3QtZG9tXFxjbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLWNsaWVudC5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS1jbGllbnQuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/react-dom/client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/react-dom/index.js":
|
||
/*!*****************************************!*\
|
||
!*** ./node_modules/react-dom/index.js ***!
|
||
\*****************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"(pages-dir-browser)/./node_modules/react-dom/cjs/react-dom.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxLQUFxQyxFQUFFLEVBSzFDLENBQUM7QUFDRixFQUFFLHVKQUEwRDtBQUM1RCIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxyZWFjdC1kb21cXGluZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/react-dom/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/react/cjs/react-jsx-runtime.development.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/react/cjs/react-jsx-runtime.development.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\n true &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = __webpack_require__(/*! react */ \"(pages-dir-browser)/./node_modules/react/index.js\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React[\"react-stack-bottom-frame\"].bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsK0NBQStDLDZCQUE2QjtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGdCQUFnQixnREFBZ0Q7QUFDaEUsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBLGdDQUFnQyxrQ0FBa0MsT0FBTztBQUN6RTtBQUNBLGdHQUFnRyxTQUFTLFVBQVUsc0ZBQXNGLGFBQWEsVUFBVSxVQUFVO0FBQzFPO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsZ0VBQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQixJQUFJLFdBQVc7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFlBQVk7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxyZWFjdFxcY2pzXFxyZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgcmV0dXJuIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0VcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgICBjYXNlIFJFQUNUX0FDVElWSVRZX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiQWN0aXZpdHlcIjtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHR5cGUudGFnICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgdHlwZS4kJHR5cGVvZilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLlByb3ZpZGVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLkNvbnN1bWVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgdmFyIGlubmVyVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0eXBlIHx8XG4gICAgICAgICAgICAgICgodHlwZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCBcIlwiKSxcbiAgICAgICAgICAgICAgKHR5cGUgPSBcIlwiICE9PSB0eXBlID8gXCJGb3J3YXJkUmVmKFwiICsgdHlwZSArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGlubmVyVHlwZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgID8gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIk1lbW9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIGlubmVyVHlwZSA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZShpbm5lclR5cGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITA7XG4gICAgICB9XG4gICAgICBpZiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGNvbnNvbGU7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuZXJyb3I7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAgPVxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTeW1ib2wgJiZcbiAgICAgICAgICAgIFN5bWJvbC50b1N0cmluZ1RhZyAmJlxuICAgICAgICAgICAgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkgfHxcbiAgICAgICAgICB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgICAgICAgXCJPYmplY3RcIjtcbiAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0LmNhbGwoXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LFxuICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhc2tOYW1lKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSByZXR1cm4gXCI8PlwiO1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRVxuICAgICAgKVxuICAgICAgICByZXR1cm4gXCI8Li4uPlwiO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICAgIHJldHVybiBuYW1lID8gXCI8XCIgKyBuYW1lICsgXCI+XCIgOiBcIjwuLi4+XCI7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHJldHVybiBcIjwuLi4+XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bmVyKCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5BO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGRpc3BhdGNoZXIgPyBudWxsIDogZGlzcGF0Y2hlci5nZXRPd25lcigpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBVbmtub3duT3duZXIoKSB7XG4gICAgICByZXR1cm4gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcImtleVwiKSkge1xuICAgICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsIFwia2V5XCIpLmdldDtcbiAgICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbmZpZy5rZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICAgICAgZnVuY3Rpb24gd2FybkFib3V0QWNjZXNzaW5nS2V5KCkge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biB8fFxuICAgICAgICAgICgoc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSAhMCksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSB2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50IHByb3AuIChodHRwczovL3JlYWN0LmRldi9saW5rL3NwZWNpYWwtcHJvcHMpXCIsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZVxuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gITA7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsIFwia2V5XCIsIHtcbiAgICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZygpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHRoaXMudHlwZSk7XG4gICAgICBkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdIHx8XG4gICAgICAgICgoZGlkV2FybkFib3V0RWxlbWVudFJlZltjb21wb25lbnROYW1lXSA9ICEwKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkFjY2Vzc2luZyBlbGVtZW50LnJlZiB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gcmVmIGlzIG5vdyBhIHJlZ3VsYXIgcHJvcC4gSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIEpTWCBFbGVtZW50IHR5cGUgaW4gYSBmdXR1cmUgcmVsZWFzZS5cIlxuICAgICAgICApKTtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSB0aGlzLnByb3BzLnJlZjtcbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbXBvbmVudE5hbWUgPyBjb21wb25lbnROYW1lIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gUmVhY3RFbGVtZW50KFxuICAgICAgdHlwZSxcbiAgICAgIGtleSxcbiAgICAgIHNlbGYsXG4gICAgICBzb3VyY2UsXG4gICAgICBvd25lcixcbiAgICAgIHByb3BzLFxuICAgICAgZGVidWdTdGFjayxcbiAgICAgIGRlYnVnVGFza1xuICAgICkge1xuICAgICAgc2VsZiA9IHByb3BzLnJlZjtcbiAgICAgIHR5cGUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgIF9vd25lcjogb3duZXJcbiAgICAgIH07XG4gICAgICBudWxsICE9PSAodm9pZCAwICE9PSBzZWxmID8gc2VsZiA6IG51bGwpXG4gICAgICAgID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgZ2V0OiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgIH0pXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHsgZW51bWVyYWJsZTogITEsIHZhbHVlOiBudWxsIH0pO1xuICAgICAgdHlwZS5fc3RvcmUgPSB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLl9zdG9yZSwgXCJ2YWxpZGF0ZWRcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogMFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnU3RhY2tcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogZGVidWdTdGFja1xuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdUYXNrXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IGRlYnVnVGFza1xuICAgICAgfSk7XG4gICAgICBPYmplY3QuZnJlZXplICYmIChPYmplY3QuZnJlZXplKHR5cGUucHJvcHMpLCBPYmplY3QuZnJlZXplKHR5cGUpKTtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBqc3hERVZJbXBsKFxuICAgICAgdHlwZSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIG1heWJlS2V5LFxuICAgICAgaXNTdGF0aWNDaGlsZHJlbixcbiAgICAgIHNvdXJjZSxcbiAgICAgIHNlbGYsXG4gICAgICBkZWJ1Z1N0YWNrLFxuICAgICAgZGVidWdUYXNrXG4gICAgKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBjb25maWcuY2hpbGRyZW47XG4gICAgICBpZiAodm9pZCAwICE9PSBjaGlsZHJlbilcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pXG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbiA9IDA7XG4gICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPCBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4rK1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpc1N0YXRpY0NoaWxkcmVuXSk7XG4gICAgICAgICAgICBPYmplY3QuZnJlZXplICYmIE9iamVjdC5mcmVlemUoY2hpbGRyZW4pO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdC5qc3g6IFN0YXRpYyBjaGlsZHJlbiBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LiBZb3UgYXJlIGxpa2VseSBleHBsaWNpdGx5IGNhbGxpbmcgUmVhY3QuanN4cyBvciBSZWFjdC5qc3hERVYuIFVzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIGVsc2UgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4pO1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcImtleVwiKSkge1xuICAgICAgICBjaGlsZHJlbiA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICAgIHJldHVybiBcImtleVwiICE9PSBrO1xuICAgICAgICB9KTtcbiAgICAgICAgaXNTdGF0aWNDaGlsZHJlbiA9XG4gICAgICAgICAgMCA8IGtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IFwie2tleTogc29tZUtleSwgXCIgKyBrZXlzLmpvaW4oXCI6IC4uLiwgXCIpICsgXCI6IC4uLn1cIlxuICAgICAgICAgICAgOiBcIntrZXk6IHNvbWVLZXl9XCI7XG4gICAgICAgIGRpZFdhcm5BYm91dEtleVNwcmVhZFtjaGlsZHJlbiArIGlzU3RhdGljQ2hpbGRyZW5dIHx8XG4gICAgICAgICAgKChrZXlzID1cbiAgICAgICAgICAgIDAgPCBrZXlzLmxlbmd0aCA/IFwie1wiICsga2V5cy5qb2luKFwiOiAuLi4sIFwiKSArIFwiOiAuLi59XCIgOiBcInt9XCIpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnQSBwcm9wcyBvYmplY3QgY29udGFpbmluZyBhIFwia2V5XCIgcHJvcCBpcyBiZWluZyBzcHJlYWQgaW50byBKU1g6XFxuICBsZXQgcHJvcHMgPSAlcztcXG4gIDwlcyB7Li4ucHJvcHN9IC8+XFxuUmVhY3Qga2V5cyBtdXN0IGJlIHBhc3NlZCBkaXJlY3RseSB0byBKU1ggd2l0aG91dCB1c2luZyBzcHJlYWQ6XFxuICBsZXQgcHJvcHMgPSAlcztcXG4gIDwlcyBrZXk9e3NvbWVLZXl9IHsuLi5wcm9wc30gLz4nLFxuICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbixcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FybkFib3V0S2V5U3ByZWFkW2NoaWxkcmVuICsgaXNTdGF0aWNDaGlsZHJlbl0gPSAhMCkpO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4gPSBudWxsO1xuICAgICAgdm9pZCAwICE9PSBtYXliZUtleSAmJlxuICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihtYXliZUtleSksIChjaGlsZHJlbiA9IFwiXCIgKyBtYXliZUtleSkpO1xuICAgICAgaGFzVmFsaWRLZXkoY29uZmlnKSAmJlxuICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKGNoaWxkcmVuID0gXCJcIiArIGNvbmZpZy5rZXkpKTtcbiAgICAgIGlmIChcImtleVwiIGluIGNvbmZpZykge1xuICAgICAgICBtYXliZUtleSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBjb25maWcpXG4gICAgICAgICAgXCJrZXlcIiAhPT0gcHJvcE5hbWUgJiYgKG1heWJlS2V5W3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV0pO1xuICAgICAgfSBlbHNlIG1heWJlS2V5ID0gY29uZmlnO1xuICAgICAgY2hpbGRyZW4gJiZcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIoXG4gICAgICAgICAgbWF5YmVLZXksXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZVxuICAgICAgICAgICAgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBcIlVua25vd25cIlxuICAgICAgICAgICAgOiB0eXBlXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50KFxuICAgICAgICB0eXBlLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgc2VsZixcbiAgICAgICAgc291cmNlLFxuICAgICAgICBnZXRPd25lcigpLFxuICAgICAgICBtYXliZUtleSxcbiAgICAgICAgZGVidWdTdGFjayxcbiAgICAgICAgZGVidWdUYXNrXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlKSB7XG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygbm9kZSAmJlxuICAgICAgICBudWxsICE9PSBub2RlICYmXG4gICAgICAgIG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSAmJlxuICAgICAgICBub2RlLl9zdG9yZSAmJlxuICAgICAgICAobm9kZS5fc3RvcmUudmFsaWRhdGVkID0gMSk7XG4gICAgfVxuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgICAgIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcbiAgICAgIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgICAgIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gICAgICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICAgICAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik7XG4gICAgdmFyIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIiksXG4gICAgICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgICAgIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG4gICAgICBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgICAgIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLFxuICAgICAgUkVBQ1RfQUNUSVZJVFlfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5hY3Rpdml0eVwiKSxcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3QuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5LFxuICAgICAgY3JlYXRlVGFzayA9IGNvbnNvbGUuY3JlYXRlVGFza1xuICAgICAgICA/IGNvbnNvbGUuY3JlYXRlVGFza1xuICAgICAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH07XG4gICAgUmVhY3QgPSB7XG4gICAgICBcInJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZVwiOiBmdW5jdGlvbiAoY2FsbFN0YWNrRm9yRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxTdGFja0ZvckVycm9yKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd247XG4gICAgdmFyIGRpZFdhcm5BYm91dEVsZW1lbnRSZWYgPSB7fTtcbiAgICB2YXIgdW5rbm93bk93bmVyRGVidWdTdGFjayA9IFJlYWN0W1wicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJdLmJpbmQoXG4gICAgICBSZWFjdCxcbiAgICAgIFVua25vd25Pd25lclxuICAgICkoKTtcbiAgICB2YXIgdW5rbm93bk93bmVyRGVidWdUYXNrID0gY3JlYXRlVGFzayhnZXRUYXNrTmFtZShVbmtub3duT3duZXIpKTtcbiAgICB2YXIgZGlkV2FybkFib3V0S2V5U3ByZWFkID0ge307XG4gICAgZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgZXhwb3J0cy5qc3ggPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBtYXliZUtleSwgc291cmNlLCBzZWxmKSB7XG4gICAgICB2YXIgdHJhY2tBY3R1YWxPd25lciA9XG4gICAgICAgIDFlNCA+IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnJlY2VudGx5Q3JlYXRlZE93bmVyU3RhY2tzKys7XG4gICAgICByZXR1cm4ganN4REVWSW1wbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBtYXliZUtleSxcbiAgICAgICAgITEsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc2VsZixcbiAgICAgICAgdHJhY2tBY3R1YWxPd25lclxuICAgICAgICAgID8gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIilcbiAgICAgICAgICA6IHVua25vd25Pd25lckRlYnVnU3RhY2ssXG4gICAgICAgIHRyYWNrQWN0dWFsT3duZXIgPyBjcmVhdGVUYXNrKGdldFRhc2tOYW1lKHR5cGUpKSA6IHVua25vd25Pd25lckRlYnVnVGFza1xuICAgICAgKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuanN4cyA9IGZ1bmN0aW9uICh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBzb3VyY2UsIHNlbGYpIHtcbiAgICAgIHZhciB0cmFja0FjdHVhbE93bmVyID1cbiAgICAgICAgMWU0ID4gUmVhY3RTaGFyZWRJbnRlcm5hbHMucmVjZW50bHlDcmVhdGVkT3duZXJTdGFja3MrKztcbiAgICAgIHJldHVybiBqc3hERVZJbXBsKFxuICAgICAgICB0eXBlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIG1heWJlS2V5LFxuICAgICAgICAhMCxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzZWxmLFxuICAgICAgICB0cmFja0FjdHVhbE93bmVyXG4gICAgICAgICAgPyBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKVxuICAgICAgICAgIDogdW5rbm93bk93bmVyRGVidWdTdGFjayxcbiAgICAgICAgdHJhY2tBY3R1YWxPd25lciA/IGNyZWF0ZVRhc2soZ2V0VGFza05hbWUodHlwZSkpIDogdW5rbm93bk93bmVyRGVidWdUYXNrXG4gICAgICApO1xuICAgIH07XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/react/cjs/react-jsx-runtime.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/react/cjs/react.development.js":
|
||
/*!*****************************************************!*\
|
||
!*** ./node_modules/react/cjs/react.development.js ***!
|
||
\*****************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* module decorator */ module = __webpack_require__.nmd(module);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(pages-dir-browser)/./node_modules/process/browser.js\");\n/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\n true &&\n (function () {\n function defineDeprecationWarning(methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n console.warn(\n \"%s(...) is deprecated in plain JavaScript React classes. %s\",\n info[0],\n info[1]\n );\n }\n });\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function warnNoop(publicInstance, callerName) {\n publicInstance =\n ((publicInstance = publicInstance.constructor) &&\n (publicInstance.displayName || publicInstance.name)) ||\n \"ReactClass\";\n var warningKey = publicInstance + \".\" + callerName;\n didWarnStateUpdateForUnmountedComponent[warningKey] ||\n (console.error(\n \"Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.\",\n callerName,\n publicInstance\n ),\n (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));\n }\n function Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function ComponentDummy() {}\n function PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function cloneAndReplaceKey(oldElement, newKey) {\n newKey = ReactElement(\n oldElement.type,\n newKey,\n void 0,\n void 0,\n oldElement._owner,\n oldElement.props,\n oldElement._debugStack,\n oldElement._debugTask\n );\n oldElement._store &&\n (newKey._store.validated = oldElement._store.validated);\n return newKey;\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n }\n function getElementKey(element, index) {\n return \"object\" === typeof element &&\n null !== element &&\n null != element.key\n ? (checkKeyStringCoercion(element.key), escape(\"\" + element.key))\n : index.toString(36);\n }\n function noop$1() {}\n function resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop$1, noop$1)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"),\n (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n }\n function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback) {\n invokeCallback = children;\n callback = callback(invokeCallback);\n var childKey =\n \"\" === nameSoFar ? \".\" + getElementKey(invokeCallback, 0) : nameSoFar;\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != childKey &&\n (escapedPrefix =\n childKey.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (null != callback.key &&\n ((invokeCallback && invokeCallback.key === callback.key) ||\n checkKeyStringCoercion(callback.key)),\n (escapedPrefix = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (invokeCallback && invokeCallback.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n childKey\n )),\n \"\" !== nameSoFar &&\n null != invokeCallback &&\n isValidElement(invokeCallback) &&\n null == invokeCallback.key &&\n invokeCallback._store &&\n !invokeCallback._store.validated &&\n (escapedPrefix._store.validated = 2),\n (callback = escapedPrefix)),\n array.push(callback));\n return 1;\n }\n invokeCallback = 0;\n childKey = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = childKey + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n i === children.entries &&\n (didWarnAboutMaps ||\n console.warn(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0)),\n children = i.call(children),\n i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = childKey + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n }\n function mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n }\n function lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status)\n return (\n (ctor = payload._result),\n void 0 === ctor &&\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\\n\\nDid you accidentally put curly braces around the import?\",\n ctor\n ),\n \"default\" in ctor ||\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\",\n ctor\n ),\n ctor.default\n );\n throw payload._result;\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n function noop() {}\n function enqueueTask(task) {\n if (null === enqueueTaskImpl)\n try {\n var requireString = (\"require\" + Math.random()).slice(0, 7);\n enqueueTaskImpl = (module && module[requireString]).call(\n module,\n \"timers\"\n ).setImmediate;\n } catch (_err) {\n enqueueTaskImpl = function (callback) {\n !1 === didWarnAboutMessageChannel &&\n ((didWarnAboutMessageChannel = !0),\n \"undefined\" === typeof MessageChannel &&\n console.error(\n \"This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.\"\n ));\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(void 0);\n };\n }\n return enqueueTaskImpl(task);\n }\n function aggregateErrors(errors) {\n return 1 < errors.length && \"function\" === typeof AggregateError\n ? new AggregateError(errors)\n : errors[0];\n }\n function popActScope(prevActQueue, prevActScopeDepth) {\n prevActScopeDepth !== actScopeDepth - 1 &&\n console.error(\n \"You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. \"\n );\n actScopeDepth = prevActScopeDepth;\n }\n function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n var queue = ReactSharedInternals.actQueue;\n if (null !== queue)\n if (0 !== queue.length)\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n });\n return;\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n else ReactSharedInternals.actQueue = null;\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(queue))\n : resolve(returnValue);\n }\n function flushActQueue(queue) {\n if (!isFlushing) {\n isFlushing = !0;\n var i = 0;\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n do {\n ReactSharedInternals.didUsePromise = !1;\n var continuation = callback(!1);\n if (null !== continuation) {\n if (ReactSharedInternals.didUsePromise) {\n queue[i] = callback;\n queue.splice(0, i);\n return;\n }\n callback = continuation;\n } else break;\n } while (1);\n }\n queue.length = 0;\n } catch (error) {\n queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);\n } finally {\n isFlushing = !1;\n }\n }\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n didWarnStateUpdateForUnmountedComponent = {},\n ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, \"forceUpdate\");\n },\n enqueueReplaceState: function (publicInstance) {\n warnNoop(publicInstance, \"replaceState\");\n },\n enqueueSetState: function (publicInstance) {\n warnNoop(publicInstance, \"setState\");\n }\n },\n assign = Object.assign,\n emptyObject = {};\n Object.freeze(emptyObject);\n Component.prototype.isReactComponent = {};\n Component.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n };\n Component.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n };\n var deprecatedAPIs = {\n isMounted: [\n \"isMounted\",\n \"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.\"\n ],\n replaceState: [\n \"replaceState\",\n \"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236).\"\n ]\n },\n fnName;\n for (fnName in deprecatedAPIs)\n deprecatedAPIs.hasOwnProperty(fnName) &&\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n ComponentDummy.prototype = Component.prototype;\n deprecatedAPIs = PureComponent.prototype = new ComponentDummy();\n deprecatedAPIs.constructor = PureComponent;\n assign(deprecatedAPIs, Component.prototype);\n deprecatedAPIs.isPureReactComponent = !0;\n var isArrayImpl = Array.isArray,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals = {\n H: null,\n A: null,\n T: null,\n S: null,\n V: null,\n actQueue: null,\n isBatchingLegacy: !1,\n didScheduleLegacyUpdate: !1,\n didUsePromise: !1,\n thrownErrors: [],\n getCurrentStack: null,\n recentlyCreatedOwnerStacks: 0\n },\n hasOwnProperty = Object.prototype.hasOwnProperty,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n deprecatedAPIs = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = deprecatedAPIs[\n \"react-stack-bottom-frame\"\n ].bind(deprecatedAPIs, UnknownOwner)();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutMaps = !1,\n userProvidedKeyEscapeRegex = /\\/+/g,\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n didWarnAboutMessageChannel = !1,\n enqueueTaskImpl = null,\n actScopeDepth = 0,\n didWarnNoAwaitAct = !1,\n isFlushing = !1,\n queueSeveralMicrotasks =\n \"function\" === typeof queueMicrotask\n ? function (callback) {\n queueMicrotask(function () {\n return queueMicrotask(callback);\n });\n }\n : enqueueTask;\n deprecatedAPIs = Object.freeze({\n __proto__: null,\n c: function (size) {\n return resolveDispatcher().useMemoCache(size);\n }\n });\n exports.Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\n exports.Component = Component;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.PureComponent = PureComponent;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\n exports.__COMPILER_RUNTIME = deprecatedAPIs;\n exports.act = function (callback) {\n var prevActQueue = ReactSharedInternals.actQueue,\n prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n var queue = (ReactSharedInternals.actQueue =\n null !== prevActQueue ? prevActQueue : []),\n didAwaitActCall = !1;\n try {\n var result = callback();\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n (popActScope(prevActQueue, prevActScopeDepth),\n (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n if (\n null !== result &&\n \"object\" === typeof result &&\n \"function\" === typeof result.then\n ) {\n var thenable = result;\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);\"\n ));\n });\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n thenable.then(\n function (returnValue) {\n popActScope(prevActQueue, prevActScopeDepth);\n if (0 === prevActScopeDepth) {\n try {\n flushActQueue(queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue,\n resolve,\n reject\n );\n });\n } catch (error$0) {\n ReactSharedInternals.thrownErrors.push(error$0);\n }\n if (0 < ReactSharedInternals.thrownErrors.length) {\n var _thrownError = aggregateErrors(\n ReactSharedInternals.thrownErrors\n );\n ReactSharedInternals.thrownErrors.length = 0;\n reject(_thrownError);\n }\n } else resolve(returnValue);\n },\n function (error) {\n popActScope(prevActQueue, prevActScopeDepth);\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((error = aggregateErrors(\n ReactSharedInternals.thrownErrors\n )),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(error))\n : reject(error);\n }\n );\n }\n };\n }\n var returnValue$jscomp$0 = result;\n popActScope(prevActQueue, prevActScopeDepth);\n 0 === prevActScopeDepth &&\n (flushActQueue(queue),\n 0 !== queue.length &&\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\\n\\nawait act(() => ...)\"\n ));\n }),\n (ReactSharedInternals.actQueue = null));\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n 0 === prevActScopeDepth\n ? ((ReactSharedInternals.actQueue = queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue$jscomp$0,\n resolve,\n reject\n );\n }))\n : resolve(returnValue$jscomp$0);\n }\n };\n };\n exports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n };\n exports.captureOwnerStack = function () {\n var getCurrentStack = ReactSharedInternals.getCurrentStack;\n return null === getCurrentStack ? null : getCurrentStack();\n };\n exports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" +\n element +\n \".\"\n );\n var props = assign({}, element.props),\n key = element.key,\n owner = element._owner;\n if (null != config) {\n var JSCompiler_inline_result;\n a: {\n if (\n hasOwnProperty.call(config, \"ref\") &&\n (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(\n config,\n \"ref\"\n ).get) &&\n JSCompiler_inline_result.isReactWarning\n ) {\n JSCompiler_inline_result = !1;\n break a;\n }\n JSCompiler_inline_result = void 0 !== config.ref;\n }\n JSCompiler_inline_result && (owner = getOwner());\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key));\n for (propName in config)\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n }\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n JSCompiler_inline_result = Array(propName);\n for (var i = 0; i < propName; i++)\n JSCompiler_inline_result[i] = arguments[i + 2];\n props.children = JSCompiler_inline_result;\n }\n props = ReactElement(\n element.type,\n key,\n void 0,\n void 0,\n owner,\n props,\n element._debugStack,\n element._debugTask\n );\n for (key = 2; key < arguments.length; key++)\n (owner = arguments[key]),\n isValidElement(owner) && owner._store && (owner._store.validated = 1);\n return props;\n };\n exports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n defaultValue._currentRenderer = null;\n defaultValue._currentRenderer2 = null;\n return defaultValue;\n };\n exports.createElement = function (type, config, children) {\n for (var i = 2; i < arguments.length; i++) {\n var node = arguments[i];\n isValidElement(node) && node._store && (node._store.validated = 1);\n }\n i = {};\n node = null;\n if (null != config)\n for (propName in (didWarnAboutOldJSXRuntime ||\n !(\"__self\" in config) ||\n \"key\" in config ||\n ((didWarnAboutOldJSXRuntime = !0),\n console.warn(\n \"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\"\n )),\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (node = \"\" + config.key)),\n config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (i[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) i.children = children;\n else if (1 < childrenLength) {\n for (\n var childArray = Array(childrenLength), _i = 0;\n _i < childrenLength;\n _i++\n )\n childArray[_i] = arguments[_i + 2];\n Object.freeze && Object.freeze(childArray);\n i.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === i[propName] && (i[propName] = childrenLength[propName]);\n node &&\n defineKeyPropWarningGetter(\n i,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return ReactElement(\n type,\n node,\n void 0,\n void 0,\n getOwner(),\n i,\n propName ? Error(\"react-stack-top-frame\") : unknownOwnerDebugStack,\n propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.createRef = function () {\n var refObject = { current: null };\n Object.seal(refObject);\n return refObject;\n };\n exports.forwardRef = function (render) {\n null != render && render.$$typeof === REACT_MEMO_TYPE\n ? console.error(\n \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).\"\n )\n : \"function\" !== typeof render\n ? console.error(\n \"forwardRef requires a render function but was given %s.\",\n null === render ? \"null\" : typeof render\n )\n : 0 !== render.length &&\n 2 !== render.length &&\n console.error(\n \"forwardRef render functions accept exactly two parameters: props and ref. %s\",\n 1 === render.length\n ? \"Did you forget to use the ref parameter?\"\n : \"Any additional parameter will be undefined.\"\n );\n null != render &&\n null != render.defaultProps &&\n console.error(\n \"forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?\"\n );\n var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },\n ownName;\n Object.defineProperty(elementType, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n render.name ||\n render.displayName ||\n (Object.defineProperty(render, \"name\", { value: name }),\n (render.displayName = name));\n }\n });\n return elementType;\n };\n exports.isValidElement = isValidElement;\n exports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n };\n exports.memo = function (type, compare) {\n null == type &&\n console.error(\n \"memo: The first argument must be a component. Instead received: %s\",\n null === type ? \"null\" : typeof type\n );\n compare = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n var ownName;\n Object.defineProperty(compare, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n type.name ||\n type.displayName ||\n (Object.defineProperty(type, \"name\", { value: name }),\n (type.displayName = name));\n }\n });\n return compare;\n };\n exports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n currentTransition._updatedFibers = new Set();\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((scope = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < scope &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n )),\n (ReactSharedInternals.T = prevTransition);\n }\n };\n exports.unstable_useCacheRefresh = function () {\n return resolveDispatcher().useCacheRefresh();\n };\n exports.use = function (usable) {\n return resolveDispatcher().use(usable);\n };\n exports.useActionState = function (action, initialState, permalink) {\n return resolveDispatcher().useActionState(\n action,\n initialState,\n permalink\n );\n };\n exports.useCallback = function (callback, deps) {\n return resolveDispatcher().useCallback(callback, deps);\n };\n exports.useContext = function (Context) {\n var dispatcher = resolveDispatcher();\n Context.$$typeof === REACT_CONSUMER_TYPE &&\n console.error(\n \"Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?\"\n );\n return dispatcher.useContext(Context);\n };\n exports.useDebugValue = function (value, formatterFn) {\n return resolveDispatcher().useDebugValue(value, formatterFn);\n };\n exports.useDeferredValue = function (value, initialValue) {\n return resolveDispatcher().useDeferredValue(value, initialValue);\n };\n exports.useEffect = function (create, createDeps, update) {\n null == create &&\n console.warn(\n \"React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n var dispatcher = resolveDispatcher();\n if (\"function\" === typeof update)\n throw Error(\n \"useEffect CRUD overload is not enabled in this build of React.\"\n );\n return dispatcher.useEffect(create, createDeps);\n };\n exports.useId = function () {\n return resolveDispatcher().useId();\n };\n exports.useImperativeHandle = function (ref, create, deps) {\n return resolveDispatcher().useImperativeHandle(ref, create, deps);\n };\n exports.useInsertionEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useInsertionEffect(create, deps);\n };\n exports.useLayoutEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useLayoutEffect(create, deps);\n };\n exports.useMemo = function (create, deps) {\n return resolveDispatcher().useMemo(create, deps);\n };\n exports.useOptimistic = function (passthrough, reducer) {\n return resolveDispatcher().useOptimistic(passthrough, reducer);\n };\n exports.useReducer = function (reducer, initialArg, init) {\n return resolveDispatcher().useReducer(reducer, initialArg, init);\n };\n exports.useRef = function (initialValue) {\n return resolveDispatcher().useRef(initialValue);\n };\n exports.useState = function (initialState) {\n return resolveDispatcher().useState(initialState);\n };\n exports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n return resolveDispatcher().useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n };\n exports.useTransition = function () {\n return resolveDispatcher().useTransition();\n };\n exports.version = \"19.1.0\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb01BQW9NO0FBQ3BNO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCwrQ0FBK0MsNkJBQTZCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHlDQUF5QztBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LGdCQUFnQjtBQUNwQjtBQUNBO0FBQ0EsSUFBSSw0QkFBNEI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxyZWFjdFxcY2pzXFxyZWFjdC5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcobWV0aG9kTmFtZSwgaW5mbykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbXBvbmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCIlcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlc1wiLFxuICAgICAgICAgICAgaW5mb1swXSxcbiAgICAgICAgICAgIGluZm9bMV1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gbWF5YmVJdGVyYWJsZSB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBtYXliZUl0ZXJhYmxlID1cbiAgICAgICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgICAgIG1heWJlSXRlcmFibGVbXCJAQGl0ZXJhdG9yXCJdO1xuICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1heWJlSXRlcmFibGUgPyBtYXliZUl0ZXJhYmxlIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAgICAgIHB1YmxpY0luc3RhbmNlID1cbiAgICAgICAgKChwdWJsaWNJbnN0YW5jZSA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yKSAmJlxuICAgICAgICAgIChwdWJsaWNJbnN0YW5jZS5kaXNwbGF5TmFtZSB8fCBwdWJsaWNJbnN0YW5jZS5uYW1lKSkgfHxcbiAgICAgICAgXCJSZWFjdENsYXNzXCI7XG4gICAgICB2YXIgd2FybmluZ0tleSA9IHB1YmxpY0luc3RhbmNlICsgXCIuXCIgKyBjYWxsZXJOYW1lO1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldIHx8XG4gICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ2FuJ3QgY2FsbCAlcyBvbiBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCB5ZXQgbW91bnRlZC4gVGhpcyBpcyBhIG5vLW9wLCBidXQgaXQgbWlnaHQgaW5kaWNhdGUgYSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gSW5zdGVhZCwgYXNzaWduIHRvIGB0aGlzLnN0YXRlYCBkaXJlY3RseSBvciBkZWZpbmUgYSBgc3RhdGUgPSB7fTtgIGNsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC5cIixcbiAgICAgICAgICBjYWxsZXJOYW1lLFxuICAgICAgICAgIHB1YmxpY0luc3RhbmNlXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gPSAhMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgICAgIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cbiAgICBmdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gICAgICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITA7XG4gICAgICB9XG4gICAgICBpZiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGNvbnNvbGU7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuZXJyb3I7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAgPVxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTeW1ib2wgJiZcbiAgICAgICAgICAgIFN5bWJvbC50b1N0cmluZ1RhZyAmJlxuICAgICAgICAgICAgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkgfHxcbiAgICAgICAgICB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgICAgICAgXCJPYmplY3RcIjtcbiAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0LmNhbGwoXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LFxuICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PSB0eXBlKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICByZXR1cm4gdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJQcm9maWxlclwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3RyaWN0TW9kZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfQUNUSVZJVFlfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJBY3Rpdml0eVwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZS50YWcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlLiQkdHlwZW9mKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIFwiUG9ydGFsXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuUHJvdmlkZXJcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlNVTUVSX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUuX2NvbnRleHQuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICB2YXIgaW5uZXJUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIHR5cGUgfHxcbiAgICAgICAgICAgICAgKCh0eXBlID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8IFwiXCIpLFxuICAgICAgICAgICAgICAodHlwZSA9IFwiXCIgIT09IHR5cGUgPyBcIkZvcndhcmRSZWYoXCIgKyB0eXBlICsgXCIpXCIgOiBcIkZvcndhcmRSZWZcIikpO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoaW5uZXJUeXBlID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgPyBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiTWVtb1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgaW5uZXJUeXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLl9pbml0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKGlubmVyVHlwZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhc2tOYW1lKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSByZXR1cm4gXCI8PlwiO1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRVxuICAgICAgKVxuICAgICAgICByZXR1cm4gXCI8Li4uPlwiO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICAgIHJldHVybiBuYW1lID8gXCI8XCIgKyBuYW1lICsgXCI+XCIgOiBcIjwuLi4+XCI7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHJldHVybiBcIjwuLi4+XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bmVyKCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5BO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGRpc3BhdGNoZXIgPyBudWxsIDogZGlzcGF0Y2hlci5nZXRPd25lcigpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBVbmtub3duT3duZXIoKSB7XG4gICAgICByZXR1cm4gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcImtleVwiKSkge1xuICAgICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsIFwia2V5XCIpLmdldDtcbiAgICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbmZpZy5rZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICAgICAgZnVuY3Rpb24gd2FybkFib3V0QWNjZXNzaW5nS2V5KCkge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biB8fFxuICAgICAgICAgICgoc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSAhMCksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSB2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50IHByb3AuIChodHRwczovL3JlYWN0LmRldi9saW5rL3NwZWNpYWwtcHJvcHMpXCIsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZVxuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gITA7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsIFwia2V5XCIsIHtcbiAgICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZygpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHRoaXMudHlwZSk7XG4gICAgICBkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdIHx8XG4gICAgICAgICgoZGlkV2FybkFib3V0RWxlbWVudFJlZltjb21wb25lbnROYW1lXSA9ICEwKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkFjY2Vzc2luZyBlbGVtZW50LnJlZiB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gcmVmIGlzIG5vdyBhIHJlZ3VsYXIgcHJvcC4gSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIEpTWCBFbGVtZW50IHR5cGUgaW4gYSBmdXR1cmUgcmVsZWFzZS5cIlxuICAgICAgICApKTtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSB0aGlzLnByb3BzLnJlZjtcbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbXBvbmVudE5hbWUgPyBjb21wb25lbnROYW1lIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gUmVhY3RFbGVtZW50KFxuICAgICAgdHlwZSxcbiAgICAgIGtleSxcbiAgICAgIHNlbGYsXG4gICAgICBzb3VyY2UsXG4gICAgICBvd25lcixcbiAgICAgIHByb3BzLFxuICAgICAgZGVidWdTdGFjayxcbiAgICAgIGRlYnVnVGFza1xuICAgICkge1xuICAgICAgc2VsZiA9IHByb3BzLnJlZjtcbiAgICAgIHR5cGUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgIF9vd25lcjogb3duZXJcbiAgICAgIH07XG4gICAgICBudWxsICE9PSAodm9pZCAwICE9PSBzZWxmID8gc2VsZiA6IG51bGwpXG4gICAgICAgID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgZ2V0OiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgIH0pXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHsgZW51bWVyYWJsZTogITEsIHZhbHVlOiBudWxsIH0pO1xuICAgICAgdHlwZS5fc3RvcmUgPSB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLl9zdG9yZSwgXCJ2YWxpZGF0ZWRcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogMFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnU3RhY2tcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogZGVidWdTdGFja1xuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdUYXNrXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IGRlYnVnVGFza1xuICAgICAgfSk7XG4gICAgICBPYmplY3QuZnJlZXplICYmIChPYmplY3QuZnJlZXplKHR5cGUucHJvcHMpLCBPYmplY3QuZnJlZXplKHR5cGUpKTtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9uZUFuZFJlcGxhY2VLZXkob2xkRWxlbWVudCwgbmV3S2V5KSB7XG4gICAgICBuZXdLZXkgPSBSZWFjdEVsZW1lbnQoXG4gICAgICAgIG9sZEVsZW1lbnQudHlwZSxcbiAgICAgICAgbmV3S2V5LFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgb2xkRWxlbWVudC5fb3duZXIsXG4gICAgICAgIG9sZEVsZW1lbnQucHJvcHMsXG4gICAgICAgIG9sZEVsZW1lbnQuX2RlYnVnU3RhY2ssXG4gICAgICAgIG9sZEVsZW1lbnQuX2RlYnVnVGFza1xuICAgICAgKTtcbiAgICAgIG9sZEVsZW1lbnQuX3N0b3JlICYmXG4gICAgICAgIChuZXdLZXkuX3N0b3JlLnZhbGlkYXRlZCA9IG9sZEVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCk7XG4gICAgICByZXR1cm4gbmV3S2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcbiAgICAgICAgbnVsbCAhPT0gb2JqZWN0ICYmXG4gICAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gICAgICB2YXIgZXNjYXBlckxvb2t1cCA9IHsgXCI9XCI6IFwiPTBcIiwgXCI6XCI6IFwiPTJcIiB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCIkXCIgK1xuICAgICAgICBrZXkucmVwbGFjZSgvWz06XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFbGVtZW50S2V5KGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVsZW1lbnQgJiZcbiAgICAgICAgbnVsbCAhPT0gZWxlbWVudCAmJlxuICAgICAgICBudWxsICE9IGVsZW1lbnQua2V5XG4gICAgICAgID8gKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oZWxlbWVudC5rZXkpLCBlc2NhcGUoXCJcIiArIGVsZW1lbnQua2V5KSlcbiAgICAgICAgOiBpbmRleC50b1N0cmluZygzNik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AkMSgpIHt9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgdGhlbmFibGUuc3RhdHVzXG4gICAgICAgICAgICAgID8gdGhlbmFibGUudGhlbihub29wJDEsIG5vb3AkMSlcbiAgICAgICAgICAgICAgOiAoKHRoZW5hYmxlLnN0YXR1cyA9IFwicGVuZGluZ1wiKSxcbiAgICAgICAgICAgICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGZ1bGZpbGxlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICh0aGVuYWJsZS52YWx1ZSA9IGZ1bGZpbGxlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgKHRoZW5hYmxlLnJlYXNvbiA9IGVycm9yKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB0aGVuYWJsZS5zdGF0dXMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgICAgIHJldHVybiB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgdGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcEludG9BcnJheShjaGlsZHJlbiwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5hbWVTb0ZhciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGUgfHwgXCJib29sZWFuXCIgPT09IHR5cGUpIGNoaWxkcmVuID0gbnVsbDtcbiAgICAgIHZhciBpbnZva2VDYWxsYmFjayA9ICExO1xuICAgICAgaWYgKG51bGwgPT09IGNoaWxkcmVuKSBpbnZva2VDYWxsYmFjayA9ICEwO1xuICAgICAgZWxzZVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgPSBjaGlsZHJlbi5faW5pdCksXG4gICAgICAgICAgICAgICAgICBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrKGNoaWxkcmVuLl9wYXlsb2FkKSxcbiAgICAgICAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSBjaGlsZHJlbjtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayhpbnZva2VDYWxsYmFjayk7XG4gICAgICAgIHZhciBjaGlsZEtleSA9XG4gICAgICAgICAgXCJcIiA9PT0gbmFtZVNvRmFyID8gXCIuXCIgKyBnZXRFbGVtZW50S2V5KGludm9rZUNhbGxiYWNrLCAwKSA6IG5hbWVTb0ZhcjtcbiAgICAgICAgaXNBcnJheUltcGwoY2FsbGJhY2spXG4gICAgICAgICAgPyAoKGVzY2FwZWRQcmVmaXggPSBcIlwiKSxcbiAgICAgICAgICAgIG51bGwgIT0gY2hpbGRLZXkgJiZcbiAgICAgICAgICAgICAgKGVzY2FwZWRQcmVmaXggPVxuICAgICAgICAgICAgICAgIGNoaWxkS2V5LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsIFwiJCYvXCIpICsgXCIvXCIpLFxuICAgICAgICAgICAgbWFwSW50b0FycmF5KGNhbGxiYWNrLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgXCJcIiwgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6IG51bGwgIT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIChpc1ZhbGlkRWxlbWVudChjYWxsYmFjaykgJiZcbiAgICAgICAgICAgICAgKG51bGwgIT0gY2FsbGJhY2sua2V5ICYmXG4gICAgICAgICAgICAgICAgKChpbnZva2VDYWxsYmFjayAmJiBpbnZva2VDYWxsYmFjay5rZXkgPT09IGNhbGxiYWNrLmtleSkgfHxcbiAgICAgICAgICAgICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY2FsbGJhY2sua2V5KSksXG4gICAgICAgICAgICAgIChlc2NhcGVkUHJlZml4ID0gY2xvbmVBbmRSZXBsYWNlS2V5KFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXggK1xuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY2FsbGJhY2sua2V5IHx8XG4gICAgICAgICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgJiYgaW52b2tlQ2FsbGJhY2sua2V5ID09PSBjYWxsYmFjay5rZXkpXG4gICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICA6IChcIlwiICsgY2FsbGJhY2sua2V5KS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiQmL1wiXG4gICAgICAgICAgICAgICAgICAgICAgKSArIFwiL1wiKSArXG4gICAgICAgICAgICAgICAgICBjaGlsZEtleVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgXCJcIiAhPT0gbmFtZVNvRmFyICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBpbnZva2VDYWxsYmFjayAmJlxuICAgICAgICAgICAgICAgIGlzVmFsaWRFbGVtZW50KGludm9rZUNhbGxiYWNrKSAmJlxuICAgICAgICAgICAgICAgIG51bGwgPT0gaW52b2tlQ2FsbGJhY2sua2V5ICYmXG4gICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2suX3N0b3JlICYmXG4gICAgICAgICAgICAgICAgIWludm9rZUNhbGxiYWNrLl9zdG9yZS52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoZXNjYXBlZFByZWZpeC5fc3RvcmUudmFsaWRhdGVkID0gMiksXG4gICAgICAgICAgICAgIChjYWxsYmFjayA9IGVzY2FwZWRQcmVmaXgpKSxcbiAgICAgICAgICAgIGFycmF5LnB1c2goY2FsbGJhY2spKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBpbnZva2VDYWxsYmFjayA9IDA7XG4gICAgICBjaGlsZEtleSA9IFwiXCIgPT09IG5hbWVTb0ZhciA/IFwiLlwiIDogbmFtZVNvRmFyICsgXCI6XCI7XG4gICAgICBpZiAoaXNBcnJheUltcGwoY2hpbGRyZW4pKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIChuYW1lU29GYXIgPSBjaGlsZHJlbltpXSksXG4gICAgICAgICAgICAodHlwZSA9IGNoaWxkS2V5ICsgZ2V0RWxlbWVudEtleShuYW1lU29GYXIsIGkpKSxcbiAgICAgICAgICAgIChpbnZva2VDYWxsYmFjayArPSBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICApKTtcbiAgICAgIGVsc2UgaWYgKCgoaSA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pKSwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaSkpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgaSA9PT0gY2hpbGRyZW4uZW50cmllcyAmJlxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dE1hcHMgfHxcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIFwiVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLlwiXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZGlkV2FybkFib3V0TWFwcyA9ICEwKSksXG4gICAgICAgICAgICBjaGlsZHJlbiA9IGkuY2FsbChjaGlsZHJlbiksXG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAhKG5hbWVTb0ZhciA9IGNoaWxkcmVuLm5leHQoKSkuZG9uZTtcblxuICAgICAgICApXG4gICAgICAgICAgKG5hbWVTb0ZhciA9IG5hbWVTb0Zhci52YWx1ZSksXG4gICAgICAgICAgICAodHlwZSA9IGNoaWxkS2V5ICsgZ2V0RWxlbWVudEtleShuYW1lU29GYXIsIGkrKykpLFxuICAgICAgICAgICAgKGludm9rZUNhbGxiYWNrICs9IG1hcEludG9BcnJheShcbiAgICAgICAgICAgICAgbmFtZVNvRmFyLFxuICAgICAgICAgICAgICBhcnJheSxcbiAgICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICkpO1xuICAgICAgZWxzZSBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZSkge1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY2hpbGRyZW4udGhlbilcbiAgICAgICAgICByZXR1cm4gbWFwSW50b0FycmF5KFxuICAgICAgICAgICAgcmVzb2x2ZVRoZW5hYmxlKGNoaWxkcmVuKSxcbiAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKTtcbiAgICAgICAgYXJyYXkgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgK1xuICAgICAgICAgICAgKFwiW29iamVjdCBPYmplY3RdXCIgPT09IGFycmF5XG4gICAgICAgICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICAgICAgICA6IGFycmF5KSArXG4gICAgICAgICAgICBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkge1xuICAgICAgaWYgKG51bGwgPT0gY2hpbGRyZW4pIHJldHVybiBjaGlsZHJlbjtcbiAgICAgIHZhciByZXN1bHQgPSBbXSxcbiAgICAgICAgY291bnQgPSAwO1xuICAgICAgbWFwSW50b0FycmF5KGNoaWxkcmVuLCByZXN1bHQsIFwiXCIsIFwiXCIsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGF6eUluaXRpYWxpemVyKHBheWxvYWQpIHtcbiAgICAgIGlmICgtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKSB7XG4gICAgICAgIHZhciBjdG9yID0gcGF5bG9hZC5fcmVzdWx0O1xuICAgICAgICBjdG9yID0gY3RvcigpO1xuICAgICAgICBjdG9yLnRoZW4oXG4gICAgICAgICAgZnVuY3Rpb24gKG1vZHVsZU9iamVjdCkge1xuICAgICAgICAgICAgaWYgKDAgPT09IHBheWxvYWQuX3N0YXR1cyB8fCAtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKVxuICAgICAgICAgICAgICAocGF5bG9hZC5fc3RhdHVzID0gMSksIChwYXlsb2FkLl9yZXN1bHQgPSBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gcGF5bG9hZC5fc3RhdHVzIHx8IC0xID09PSBwYXlsb2FkLl9zdGF0dXMpXG4gICAgICAgICAgICAgIChwYXlsb2FkLl9zdGF0dXMgPSAyKSwgKHBheWxvYWQuX3Jlc3VsdCA9IGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIC0xID09PSBwYXlsb2FkLl9zdGF0dXMgJiZcbiAgICAgICAgICAoKHBheWxvYWQuX3N0YXR1cyA9IDApLCAocGF5bG9hZC5fcmVzdWx0ID0gY3RvcikpO1xuICAgICAgfVxuICAgICAgaWYgKDEgPT09IHBheWxvYWQuX3N0YXR1cylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoY3RvciA9IHBheWxvYWQuX3Jlc3VsdCksXG4gICAgICAgICAgdm9pZCAwID09PSBjdG9yICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImxhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcG9ydCgnLi9NeUNvbXBvbmVudCcpKVxcblxcbkRpZCB5b3UgYWNjaWRlbnRhbGx5IHB1dCBjdXJseSBicmFjZXMgYXJvdW5kIHRoZSBpbXBvcnQ/XCIsXG4gICAgICAgICAgICAgIGN0b3JcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXCJkZWZhdWx0XCIgaW4gY3RvciB8fFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiBJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gIGNvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4vTXlDb21wb25lbnQnKSlcIixcbiAgICAgICAgICAgICAgY3RvclxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBjdG9yLmRlZmF1bHRcbiAgICAgICAgKTtcbiAgICAgIHRocm93IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICBudWxsID09PSBkaXNwYXRjaGVyICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wKCkge31cbiAgICBmdW5jdGlvbiBlbnF1ZXVlVGFzayh0YXNrKSB7XG4gICAgICBpZiAobnVsbCA9PT0gZW5xdWV1ZVRhc2tJbXBsKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciByZXF1aXJlU3RyaW5nID0gKFwicmVxdWlyZVwiICsgTWF0aC5yYW5kb20oKSkuc2xpY2UoMCwgNyk7XG4gICAgICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gKG1vZHVsZSAmJiBtb2R1bGVbcmVxdWlyZVN0cmluZ10pLmNhbGwoXG4gICAgICAgICAgICBtb2R1bGUsXG4gICAgICAgICAgICBcInRpbWVyc1wiXG4gICAgICAgICAgKS5zZXRJbW1lZGlhdGU7XG4gICAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgICBlbnF1ZXVlVGFza0ltcGwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICExID09PSBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCAmJlxuICAgICAgICAgICAgICAoKGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gITApLFxuICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJUaGlzIGJyb3dzZXIgZG9lcyBub3QgaGF2ZSBhIE1lc3NhZ2VDaGFubmVsIGltcGxlbWVudGF0aW9uLCBzbyBlbnF1ZXVpbmcgdGFza3MgdmlhIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pIHdpbGwgZmFpbC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3VlcyBpZiB5b3UgZW5jb3VudGVyIHRoaXMgd2FybmluZy5cIlxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gY2FsbGJhY2s7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKHZvaWQgMCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIGVucXVldWVUYXNrSW1wbCh0YXNrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWdncmVnYXRlRXJyb3JzKGVycm9ycykge1xuICAgICAgcmV0dXJuIDEgPCBlcnJvcnMubGVuZ3RoICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yXG4gICAgICAgID8gbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycylcbiAgICAgICAgOiBlcnJvcnNbMF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpIHtcbiAgICAgIHByZXZBY3RTY29wZURlcHRoICE9PSBhY3RTY29wZURlcHRoIC0gMSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiWW91IHNlZW0gdG8gaGF2ZSBvdmVybGFwcGluZyBhY3QoKSBjYWxscywgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBCZSBzdXJlIHRvIGF3YWl0IHByZXZpb3VzIGFjdCgpIGNhbGxzIGJlZm9yZSBtYWtpbmcgYSBuZXcgb25lLiBcIlxuICAgICAgICApO1xuICAgICAgYWN0U2NvcGVEZXB0aCA9IHByZXZBY3RTY29wZURlcHRoO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBxdWV1ZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlO1xuICAgICAgaWYgKG51bGwgIT09IHF1ZXVlKVxuICAgICAgICBpZiAoMCAhPT0gcXVldWUubGVuZ3RoKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbHVzaEFjdFF1ZXVlKHF1ZXVlKTtcbiAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9IG51bGw7XG4gICAgICAwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aFxuICAgICAgICA/ICgocXVldWUgPSBhZ2dyZWdhdGVFcnJvcnMoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICByZWplY3QocXVldWUpKVxuICAgICAgICA6IHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaEFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgICBpZiAoIWlzRmx1c2hpbmcpIHtcbiAgICAgICAgaXNGbHVzaGluZyA9ICEwO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICg7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmRpZFVzZVByb21pc2UgPSAhMTtcbiAgICAgICAgICAgICAgdmFyIGNvbnRpbnVhdGlvbiA9IGNhbGxiYWNrKCExKTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGNvbnRpbnVhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdFNoYXJlZEludGVybmFscy5kaWRVc2VQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICBxdWV1ZVtpXSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgcXVldWUuc3BsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGNvbnRpbnVhdGlvbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrO1xuICAgICAgICAgICAgfSB3aGlsZSAoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcXVldWUuc3BsaWNlKDAsIGkgKyAxKSwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlzRmx1c2hpbmcgPSAhMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICAgICAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICAgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpO1xuICAgIHZhciBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICAgICAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgICAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxcbiAgICAgIFJFQUNUX0FDVElWSVRZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuYWN0aXZpdHlcIiksXG4gICAgICBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3IsXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSB7fSxcbiAgICAgIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0ge1xuICAgICAgICBpc01vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIFwiZm9yY2VVcGRhdGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgICAgICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBcInJlcGxhY2VTdGF0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICAgICAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgXCJzZXRTdGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzc2lnbiA9IE9iamVjdC5hc3NpZ24sXG4gICAgICBlbXB0eU9iamVjdCA9IHt9O1xuICAgIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xuICAgIENvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuICAgIENvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiICE9PSB0eXBlb2YgcGFydGlhbFN0YXRlICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHBhcnRpYWxTdGF0ZSAmJlxuICAgICAgICBudWxsICE9IHBhcnRpYWxTdGF0ZVxuICAgICAgKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcInRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiXG4gICAgICAgICk7XG4gICAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssIFwic2V0U3RhdGVcIik7XG4gICAgfTtcbiAgICBDb21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCBcImZvcmNlVXBkYXRlXCIpO1xuICAgIH07XG4gICAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgICAgICBpc01vdW50ZWQ6IFtcbiAgICAgICAgICBcImlzTW91bnRlZFwiLFxuICAgICAgICAgIFwiSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gY29tcG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuXCJcbiAgICAgICAgXSxcbiAgICAgICAgcmVwbGFjZVN0YXRlOiBbXG4gICAgICAgICAgXCJyZXBsYWNlU3RhdGVcIixcbiAgICAgICAgICBcIlJlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuXCJcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGZuTmFtZTtcbiAgICBmb3IgKGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcylcbiAgICAgIGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkgJiZcbiAgICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgICBkZXByZWNhdGVkQVBJcyA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG4gICAgZGVwcmVjYXRlZEFQSXMuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50O1xuICAgIGFzc2lnbihkZXByZWNhdGVkQVBJcywgQ29tcG9uZW50LnByb3RvdHlwZSk7XG4gICAgZGVwcmVjYXRlZEFQSXMuaXNQdXJlUmVhY3RDb21wb25lbnQgPSAhMDtcbiAgICB2YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5LFxuICAgICAgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gICAgICAgIEg6IG51bGwsXG4gICAgICAgIEE6IG51bGwsXG4gICAgICAgIFQ6IG51bGwsXG4gICAgICAgIFM6IG51bGwsXG4gICAgICAgIFY6IG51bGwsXG4gICAgICAgIGFjdFF1ZXVlOiBudWxsLFxuICAgICAgICBpc0JhdGNoaW5nTGVnYWN5OiAhMSxcbiAgICAgICAgZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGU6ICExLFxuICAgICAgICBkaWRVc2VQcm9taXNlOiAhMSxcbiAgICAgICAgdGhyb3duRXJyb3JzOiBbXSxcbiAgICAgICAgZ2V0Q3VycmVudFN0YWNrOiBudWxsLFxuICAgICAgICByZWNlbnRseUNyZWF0ZWRPd25lclN0YWNrczogMFxuICAgICAgfSxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgIGNyZWF0ZVRhc2sgPSBjb25zb2xlLmNyZWF0ZVRhc2tcbiAgICAgICAgPyBjb25zb2xlLmNyZWF0ZVRhc2tcbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9O1xuICAgIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgICAgXCJyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVcIjogZnVuY3Rpb24gKGNhbGxTdGFja0ZvckVycm9yKSB7XG4gICAgICAgIHJldHVybiBjYWxsU3RhY2tGb3JFcnJvcigpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBkaWRXYXJuQWJvdXRPbGRKU1hSdW50aW1lO1xuICAgIHZhciBkaWRXYXJuQWJvdXRFbGVtZW50UmVmID0ge307XG4gICAgdmFyIHVua25vd25Pd25lckRlYnVnU3RhY2sgPSBkZXByZWNhdGVkQVBJc1tcbiAgICAgIFwicmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lXCJcbiAgICBdLmJpbmQoZGVwcmVjYXRlZEFQSXMsIFVua25vd25Pd25lcikoKTtcbiAgICB2YXIgdW5rbm93bk93bmVyRGVidWdUYXNrID0gY3JlYXRlVGFzayhnZXRUYXNrTmFtZShVbmtub3duT3duZXIpKTtcbiAgICB2YXIgZGlkV2FybkFib3V0TWFwcyA9ICExLFxuICAgICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nLFxuICAgICAgcmVwb3J0R2xvYmFsRXJyb3IgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXBvcnRFcnJvclxuICAgICAgICAgID8gcmVwb3J0RXJyb3JcbiAgICAgICAgICA6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHdpbmRvdyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHdpbmRvdy5FcnJvckV2ZW50XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBldmVudCA9IG5ldyB3aW5kb3cuRXJyb3JFdmVudChcImVycm9yXCIsIHtcbiAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6ICEwLFxuICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogITAsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhlcnJvci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpKSByZXR1cm47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb2Nlc3MgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcm9jZXNzLmVtaXRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0sXG4gICAgICBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCA9ICExLFxuICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gbnVsbCxcbiAgICAgIGFjdFNjb3BlRGVwdGggPSAwLFxuICAgICAgZGlkV2Fybk5vQXdhaXRBY3QgPSAhMSxcbiAgICAgIGlzRmx1c2hpbmcgPSAhMSxcbiAgICAgIHF1ZXVlU2V2ZXJhbE1pY3JvdGFza3MgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBxdWV1ZU1pY3JvdGFza1xuICAgICAgICAgID8gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IGVucXVldWVUYXNrO1xuICAgIGRlcHJlY2F0ZWRBUElzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICBjOiBmdW5jdGlvbiAoc2l6ZSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VNZW1vQ2FjaGUoc2l6ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZXhwb3J0cy5DaGlsZHJlbiA9IHtcbiAgICAgIG1hcDogbWFwQ2hpbGRyZW4sXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiAoY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICAgICAgICBtYXBDaGlsZHJlbihcbiAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9yRWFjaENvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjb3VudDogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBuKys7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH0sXG4gICAgICB0b0FycmF5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgfSkgfHwgW11cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvbmx5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG4gICAgZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgZXhwb3J0cy5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gICAgZXhwb3J0cy5QdXJlQ29tcG9uZW50ID0gUHVyZUNvbXBvbmVudDtcbiAgICBleHBvcnRzLlN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuICAgIGV4cG9ydHMuU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICAgIGV4cG9ydHMuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFID1cbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuICAgIGV4cG9ydHMuX19DT01QSUxFUl9SVU5USU1FID0gZGVwcmVjYXRlZEFQSXM7XG4gICAgZXhwb3J0cy5hY3QgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHZhciBwcmV2QWN0UXVldWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSxcbiAgICAgICAgcHJldkFjdFNjb3BlRGVwdGggPSBhY3RTY29wZURlcHRoO1xuICAgICAgYWN0U2NvcGVEZXB0aCsrO1xuICAgICAgdmFyIHF1ZXVlID0gKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlID1cbiAgICAgICAgICBudWxsICE9PSBwcmV2QWN0UXVldWUgPyBwcmV2QWN0UXVldWUgOiBbXSksXG4gICAgICAgIGRpZEF3YWl0QWN0Q2FsbCA9ICExO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB9XG4gICAgICBpZiAoMCA8IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGgpXG4gICAgICAgIHRocm93IChcbiAgICAgICAgICAocG9wQWN0U2NvcGUocHJldkFjdFF1ZXVlLCBwcmV2QWN0U2NvcGVEZXB0aCksXG4gICAgICAgICAgKGNhbGxiYWNrID0gYWdncmVnYXRlRXJyb3JzKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycykpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoID0gMCksXG4gICAgICAgICAgY2FsbGJhY2spXG4gICAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHJlc3VsdCAmJlxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcmVzdWx0ICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlc3VsdC50aGVuXG4gICAgICApIHtcbiAgICAgICAgdmFyIHRoZW5hYmxlID0gcmVzdWx0O1xuICAgICAgICBxdWV1ZVNldmVyYWxNaWNyb3Rhc2tzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgfHxcbiAgICAgICAgICAgIGRpZFdhcm5Ob0F3YWl0QWN0IHx8XG4gICAgICAgICAgICAoKGRpZFdhcm5Ob0F3YWl0QWN0ID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJZb3UgY2FsbGVkIGFjdChhc3luYyAoKSA9PiAuLi4pIHdpdGhvdXQgYXdhaXQuIFRoaXMgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIHRlc3RpbmcgYmVoYXZpb3VyLCBpbnRlcmxlYXZpbmcgbXVsdGlwbGUgYWN0IGNhbGxzIGFuZCBtaXhpbmcgdGhlaXIgc2NvcGVzLiBZb3Ugc2hvdWxkIC0gYXdhaXQgYWN0KGFzeW5jICgpID0+IC4uLik7XCJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgPSAhMDtcbiAgICAgICAgICAgIHRoZW5hYmxlLnRoZW4oXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChyZXR1cm5WYWx1ZSkge1xuICAgICAgICAgICAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgICAgICAgICAgIGlmICgwID09PSBwcmV2QWN0U2NvcGVEZXB0aCkge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZmx1c2hBY3RRdWV1ZShxdWV1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvciQwKSB7XG4gICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5wdXNoKGVycm9yJDApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGhyb3duRXJyb3IgPSBhZ2dyZWdhdGVFcnJvcnMoXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoX3Rocm93bkVycm9yKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgICAgICAgICAgIDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICA/ICgoZXJyb3IgPSBhZ2dyZWdhdGVFcnJvcnMoXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDApLFxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpKVxuICAgICAgICAgICAgICAgICAgOiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciByZXR1cm5WYWx1ZSRqc2NvbXAkMCA9IHJlc3VsdDtcbiAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgMCA9PT0gcHJldkFjdFNjb3BlRGVwdGggJiZcbiAgICAgICAgKGZsdXNoQWN0UXVldWUocXVldWUpLFxuICAgICAgICAwICE9PSBxdWV1ZS5sZW5ndGggJiZcbiAgICAgICAgICBxdWV1ZVNldmVyYWxNaWNyb3Rhc2tzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRpZEF3YWl0QWN0Q2FsbCB8fFxuICAgICAgICAgICAgICBkaWRXYXJuTm9Bd2FpdEFjdCB8fFxuICAgICAgICAgICAgICAoKGRpZFdhcm5Ob0F3YWl0QWN0ID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiQSBjb21wb25lbnQgc3VzcGVuZGVkIGluc2lkZSBhbiBgYWN0YCBzY29wZSwgYnV0IHRoZSBgYWN0YCBjYWxsIHdhcyBub3QgYXdhaXRlZC4gV2hlbiB0ZXN0aW5nIFJlYWN0IGNvbXBvbmVudHMgdGhhdCBkZXBlbmQgb24gYXN5bmNocm9ub3VzIGRhdGEsIHlvdSBtdXN0IGF3YWl0IHRoZSByZXN1bHQ6XFxuXFxuYXdhaXQgYWN0KCgpID0+IC4uLilcIlxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlID0gbnVsbCkpO1xuICAgICAgaWYgKDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoKVxuICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgKChjYWxsYmFjayA9IGFnZ3JlZ2F0ZUVycm9ycyhSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMpKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDApLFxuICAgICAgICAgIGNhbGxiYWNrKVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGRpZEF3YWl0QWN0Q2FsbCA9ICEwO1xuICAgICAgICAgIDAgPT09IHByZXZBY3RTY29wZURlcHRoXG4gICAgICAgICAgICA/ICgoUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgPSBxdWV1ZSksXG4gICAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhcbiAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiByZXNvbHZlKHJldHVyblZhbHVlJGpzY29tcCQwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY2FjaGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY2FwdHVyZU93bmVyU3RhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZ2V0Q3VycmVudFN0YWNrID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGdldEN1cnJlbnRTdGFjayA/IG51bGwgOiBnZXRDdXJyZW50U3RhY2soKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY2xvbmVFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChudWxsID09PSBlbGVtZW50IHx8IHZvaWQgMCA9PT0gZWxlbWVudClcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiICtcbiAgICAgICAgICAgIGVsZW1lbnQgK1xuICAgICAgICAgICAgXCIuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcyksXG4gICAgICAgIGtleSA9IGVsZW1lbnQua2V5LFxuICAgICAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgaWYgKG51bGwgIT0gY29uZmlnKSB7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICAgIGE6IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgXCJyZWZcIikgJiZcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIFwicmVmXCJcbiAgICAgICAgICAgICkuZ2V0KSAmJlxuICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LmlzUmVhY3RXYXJuaW5nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHZvaWQgMCAhPT0gY29uZmlnLnJlZjtcbiAgICAgICAgfVxuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgJiYgKG93bmVyID0gZ2V0T3duZXIoKSk7XG4gICAgICAgIGhhc1ZhbGlkS2V5KGNvbmZpZykgJiZcbiAgICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKGtleSA9IFwiXCIgKyBjb25maWcua2V5KSk7XG4gICAgICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKVxuICAgICAgICAgICFoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpIHx8XG4gICAgICAgICAgICBcImtleVwiID09PSBwcm9wTmFtZSB8fFxuICAgICAgICAgICAgXCJfX3NlbGZcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgICAgIFwiX19zb3VyY2VcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgICAgIChcInJlZlwiID09PSBwcm9wTmFtZSAmJiB2b2lkIDAgPT09IGNvbmZpZy5yZWYpIHx8XG4gICAgICAgICAgICAocHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXSk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcE5hbWUgPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICAgIGlmICgxID09PSBwcm9wTmFtZSkgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIGVsc2UgaWYgKDEgPCBwcm9wTmFtZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBBcnJheShwcm9wTmFtZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcE5hbWU7IGkrKylcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgICAgICBwcm9wcy5jaGlsZHJlbiA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICAgIH1cbiAgICAgIHByb3BzID0gUmVhY3RFbGVtZW50KFxuICAgICAgICBlbGVtZW50LnR5cGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIG93bmVyLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgZWxlbWVudC5fZGVidWdTdGFjayxcbiAgICAgICAgZWxlbWVudC5fZGVidWdUYXNrXG4gICAgICApO1xuICAgICAgZm9yIChrZXkgPSAyOyBrZXkgPCBhcmd1bWVudHMubGVuZ3RoOyBrZXkrKylcbiAgICAgICAgKG93bmVyID0gYXJndW1lbnRzW2tleV0pLFxuICAgICAgICAgIGlzVmFsaWRFbGVtZW50KG93bmVyKSAmJiBvd25lci5fc3RvcmUgJiYgKG93bmVyLl9zdG9yZS52YWxpZGF0ZWQgPSAxKTtcbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IGZ1bmN0aW9uIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICBfY3VycmVudFZhbHVlMjogZGVmYXVsdFZhbHVlLFxuICAgICAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgICAgIFByb3ZpZGVyOiBudWxsLFxuICAgICAgICBDb25zdW1lcjogbnVsbFxuICAgICAgfTtcbiAgICAgIGRlZmF1bHRWYWx1ZS5Qcm92aWRlciA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGRlZmF1bHRWYWx1ZS5Db25zdW1lciA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlNVTUVSX1RZUEUsXG4gICAgICAgIF9jb250ZXh0OiBkZWZhdWx0VmFsdWVcbiAgICAgIH07XG4gICAgICBkZWZhdWx0VmFsdWUuX2N1cnJlbnRSZW5kZXJlciA9IG51bGw7XG4gICAgICBkZWZhdWx0VmFsdWUuX2N1cnJlbnRSZW5kZXJlcjIgPSBudWxsO1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaXNWYWxpZEVsZW1lbnQobm9kZSkgJiYgbm9kZS5fc3RvcmUgJiYgKG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgICAgfVxuICAgICAgaSA9IHt9O1xuICAgICAgbm9kZSA9IG51bGw7XG4gICAgICBpZiAobnVsbCAhPSBjb25maWcpXG4gICAgICAgIGZvciAocHJvcE5hbWUgaW4gKGRpZFdhcm5BYm91dE9sZEpTWFJ1bnRpbWUgfHxcbiAgICAgICAgICAhKFwiX19zZWxmXCIgaW4gY29uZmlnKSB8fFxuICAgICAgICAgIFwia2V5XCIgaW4gY29uZmlnIHx8XG4gICAgICAgICAgKChkaWRXYXJuQWJvdXRPbGRKU1hSdW50aW1lID0gITApLFxuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiWW91ciBhcHAgKG9yIG9uZSBvZiBpdHMgZGVwZW5kZW5jaWVzKSBpcyB1c2luZyBhbiBvdXRkYXRlZCBKU1ggdHJhbnNmb3JtLiBVcGRhdGUgdG8gdGhlIG1vZGVybiBKU1ggdHJhbnNmb3JtIGZvciBmYXN0ZXIgcGVyZm9ybWFuY2U6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvbmV3LWpzeC10cmFuc2Zvcm1cIlxuICAgICAgICAgICkpLFxuICAgICAgICBoYXNWYWxpZEtleShjb25maWcpICYmXG4gICAgICAgICAgKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSksIChub2RlID0gXCJcIiArIGNvbmZpZy5rZXkpKSxcbiAgICAgICAgY29uZmlnKSlcbiAgICAgICAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmXG4gICAgICAgICAgICBcImtleVwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgXCJfX3NlbGZcIiAhPT0gcHJvcE5hbWUgJiZcbiAgICAgICAgICAgIFwiX19zb3VyY2VcIiAhPT0gcHJvcE5hbWUgJiZcbiAgICAgICAgICAgIChpW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV0pO1xuICAgICAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gICAgICBpZiAoMSA9PT0gY2hpbGRyZW5MZW5ndGgpIGkuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIGVsc2UgaWYgKDEgPCBjaGlsZHJlbkxlbmd0aCkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpLCBfaSA9IDA7XG4gICAgICAgICAgX2kgPCBjaGlsZHJlbkxlbmd0aDtcbiAgICAgICAgICBfaSsrXG4gICAgICAgIClcbiAgICAgICAgICBjaGlsZEFycmF5W19pXSA9IGFyZ3VtZW50c1tfaSArIDJdO1xuICAgICAgICBPYmplY3QuZnJlZXplICYmIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICAgIGkuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpXG4gICAgICAgIGZvciAocHJvcE5hbWUgaW4gKChjaGlsZHJlbkxlbmd0aCA9IHR5cGUuZGVmYXVsdFByb3BzKSwgY2hpbGRyZW5MZW5ndGgpKVxuICAgICAgICAgIHZvaWQgMCA9PT0gaVtwcm9wTmFtZV0gJiYgKGlbcHJvcE5hbWVdID0gY2hpbGRyZW5MZW5ndGhbcHJvcE5hbWVdKTtcbiAgICAgIG5vZGUgJiZcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIoXG4gICAgICAgICAgaSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlXG4gICAgICAgICAgICA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IFwiVW5rbm93blwiXG4gICAgICAgICAgICA6IHR5cGVcbiAgICAgICAgKTtcbiAgICAgIHZhciBwcm9wTmFtZSA9IDFlNCA+IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnJlY2VudGx5Q3JlYXRlZE93bmVyU3RhY2tzKys7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50KFxuICAgICAgICB0eXBlLFxuICAgICAgICBub2RlLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgZ2V0T3duZXIoKSxcbiAgICAgICAgaSxcbiAgICAgICAgcHJvcE5hbWUgPyBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKSA6IHVua25vd25Pd25lckRlYnVnU3RhY2ssXG4gICAgICAgIHByb3BOYW1lID8gY3JlYXRlVGFzayhnZXRUYXNrTmFtZSh0eXBlKSkgOiB1bmtub3duT3duZXJEZWJ1Z1Rhc2tcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZVJlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZWZPYmplY3QgPSB7IGN1cnJlbnQ6IG51bGwgfTtcbiAgICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gICAgICByZXR1cm4gcmVmT2JqZWN0O1xuICAgIH07XG4gICAgZXhwb3J0cy5mb3J3YXJkUmVmID0gZnVuY3Rpb24gKHJlbmRlcikge1xuICAgICAgbnVsbCAhPSByZW5kZXIgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEVcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCBjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgbWVtbyhmb3J3YXJkUmVmKC4uLikpLlwiXG4gICAgICAgICAgKVxuICAgICAgICA6IFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHJlbmRlclxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuXCIsXG4gICAgICAgICAgICAgIG51bGwgPT09IHJlbmRlciA/IFwibnVsbFwiIDogdHlwZW9mIHJlbmRlclxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogMCAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgMiAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzXCIsXG4gICAgICAgICAgICAgIDEgPT09IHJlbmRlci5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IFwiRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyP1wiXG4gICAgICAgICAgICAgICAgOiBcIkFueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgIG51bGwgIT0gcmVuZGVyICYmXG4gICAgICAgIG51bGwgIT0gcmVuZGVyLmRlZmF1bHRQcm9wcyAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IGRlZmF1bHRQcm9wcy4gRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD9cIlxuICAgICAgICApO1xuICAgICAgdmFyIGVsZW1lbnRUeXBlID0geyAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSwgcmVuZGVyOiByZW5kZXIgfSxcbiAgICAgICAgb3duTmFtZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHJlbmRlci5uYW1lIHx8XG4gICAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICAgIChPYmplY3QuZGVmaW5lUHJvcGVydHkocmVuZGVyLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgIChyZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVsZW1lbnRUeXBlO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuICAgIGV4cG9ydHMubGF6eSA9IGZ1bmN0aW9uIChjdG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgICAgICBfcGF5bG9hZDogeyBfc3RhdHVzOiAtMSwgX3Jlc3VsdDogY3RvciB9LFxuICAgICAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gICAgICB9O1xuICAgIH07XG4gICAgZXhwb3J0cy5tZW1vID0gZnVuY3Rpb24gKHR5cGUsIGNvbXBhcmUpIHtcbiAgICAgIG51bGwgPT0gdHlwZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwibWVtbzogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb21wb25lbnQuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXCIsXG4gICAgICAgICAgbnVsbCA9PT0gdHlwZSA/IFwibnVsbFwiIDogdHlwZW9mIHR5cGVcbiAgICAgICAgKTtcbiAgICAgIGNvbXBhcmUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGNvbXBhcmU6IHZvaWQgMCA9PT0gY29tcGFyZSA/IG51bGwgOiBjb21wYXJlXG4gICAgICB9O1xuICAgICAgdmFyIG93bk5hbWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29tcGFyZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHR5cGUubmFtZSB8fFxuICAgICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgICh0eXBlLmRpc3BsYXlOYW1lID0gbmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb21wYXJlO1xuICAgIH07XG4gICAgZXhwb3J0cy5zdGFydFRyYW5zaXRpb24gPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uID0ge307XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gY3VycmVudFRyYW5zaXRpb247XG4gICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IHNjb3BlKCksXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgICAgICBudWxsICE9PSBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUudGhlbiAmJlxuICAgICAgICAgIHJldHVyblZhbHVlLnRoZW4obm9vcCwgcmVwb3J0R2xvYmFsRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbnVsbCA9PT0gcHJldlRyYW5zaXRpb24gJiZcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyAmJlxuICAgICAgICAgICgoc2NvcGUgPSBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5zaXplKSxcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpLFxuICAgICAgICAgIDEwIDwgc2NvcGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgXCJEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uIElmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIE90aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS5cIlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUNhY2hlUmVmcmVzaCgpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2UgPSBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2UodXNhYmxlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluaykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlQWN0aW9uU3RhdGUoXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICBwZXJtYWxpbmtcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNvbnRleHQgPSBmdW5jdGlvbiAoQ29udGV4dCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgICAgQ29udGV4dC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgYnVncy4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkP1wiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUVmZmVjdCA9IGZ1bmN0aW9uIChjcmVhdGUsIGNyZWF0ZURlcHMsIHVwZGF0ZSkge1xuICAgICAgbnVsbCA9PSBjcmVhdGUgJiZcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiUmVhY3QgSG9vayB1c2VFZmZlY3QgcmVxdWlyZXMgYW4gZWZmZWN0IGNhbGxiYWNrLiBEaWQgeW91IGZvcmdldCB0byBwYXNzIGEgY2FsbGJhY2sgdG8gdGhlIGhvb2s/XCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB1cGRhdGUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwidXNlRWZmZWN0IENSVUQgb3ZlcmxvYWQgaXMgbm90IGVuYWJsZWQgaW4gdGhpcyBidWlsZCBvZiBSZWFjdC5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRWZmZWN0KGNyZWF0ZSwgY3JlYXRlRGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUlkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlSWQoKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZSA9IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUluc2VydGlvbkVmZmVjdCA9IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIG51bGwgPT0gY3JlYXRlICYmXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIlJlYWN0IEhvb2sgdXNlSW5zZXJ0aW9uRWZmZWN0IHJlcXVpcmVzIGFuIGVmZmVjdCBjYWxsYmFjay4gRGlkIHlvdSBmb3JnZXQgdG8gcGFzcyBhIGNhbGxiYWNrIHRvIHRoZSBob29rP1wiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgbnVsbCA9PSBjcmVhdGUgJiZcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiUmVhY3QgSG9vayB1c2VMYXlvdXRFZmZlY3QgcmVxdWlyZXMgYW4gZWZmZWN0IGNhbGxiYWNrLiBEaWQgeW91IGZvcmdldCB0byBwYXNzIGEgY2FsbGJhY2sgdG8gdGhlIGhvb2s/XCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VNZW1vID0gZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VPcHRpbWlzdGljID0gZnVuY3Rpb24gKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlUmVkdWNlciA9IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VSZWYgPSBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlU3RhdGUgPSBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IGZ1bmN0aW9uIChcbiAgICAgIHN1YnNjcmliZSxcbiAgICAgIGdldFNuYXBzaG90LFxuICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICApIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVRyYW5zaXRpb24oKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudmVyc2lvbiA9IFwiMTkuMS4wXCI7XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AoRXJyb3IoKSk7XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/react/cjs/react.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/react/index.js":
|
||
/*!*************************************!*\
|
||
!*** ./node_modules/react/index.js ***!
|
||
\*************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"(pages-dir-browser)/./node_modules/react/cjs/react.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsMklBQXNEO0FBQ3hEIiwic291cmNlcyI6WyJEOlxcZG9uZ3l1bi1wcm9qZWN0c1xcdHdvXFxub2RlX21vZHVsZXNcXHJlYWN0XFxpbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/react/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/react/jsx-runtime.js":
|
||
/*!*******************************************!*\
|
||
!*** ./node_modules/react/jsx-runtime.js ***!
|
||
\*******************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ \"(pages-dir-browser)/./node_modules/react/cjs/react-jsx-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWFjdC9qc3gtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsbUtBQWtFO0FBQ3BFIiwic291cmNlcyI6WyJEOlxcZG9uZ3l1bi1wcm9qZWN0c1xcdHdvXFxub2RlX21vZHVsZXNcXHJlYWN0XFxqc3gtcnVudGltZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/react/jsx-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/scheduler/cjs/scheduler.development.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/scheduler/cjs/scheduler.development.js ***!
|
||
\*************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * scheduler.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and 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\n true &&\n (function () {\n function performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime &&\n shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n }\n function push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node),\n (heap[index] = parent),\n (index = parentIndex);\n else break a;\n }\n }\n function peek(heap) {\n return 0 === heap.length ? null : heap[0];\n }\n function pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex);\n else break a;\n }\n }\n return first;\n }\n function compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n }\n function advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n }\n function handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n }\n }\n function shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n }\n function requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n exports.unstable_now = void 0;\n if (\n \"object\" === typeof performance &&\n \"function\" === typeof performance.now\n ) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n } else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n }\n var taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout =\n \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate =\n \"undefined\" !== typeof setImmediate ? setImmediate : null,\n isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\n if (\"function\" === typeof localSetImmediate)\n var schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\n else if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n } else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\n exports.unstable_IdlePriority = 5;\n exports.unstable_ImmediatePriority = 1;\n exports.unstable_LowPriority = 4;\n exports.unstable_NormalPriority = 3;\n exports.unstable_Profiling = null;\n exports.unstable_UserBlockingPriority = 2;\n exports.unstable_cancelCallback = function (task) {\n task.callback = null;\n };\n exports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n };\n exports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n };\n exports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n exports.unstable_requestPaint = function () {\n needsPaint = !0;\n };\n exports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n exports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n ) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0),\n schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n };\n exports.unstable_shouldYield = shouldYieldToHost;\n exports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxnQkFBZ0I7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG9CQUFvQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxvQkFBb0I7QUFDMUI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTSxvQkFBb0I7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJLDZCQUE2QjtBQUNqQyxJQUFJLGtDQUFrQztBQUN0QyxJQUFJLDRCQUE0QjtBQUNoQyxJQUFJLCtCQUErQjtBQUNuQyxJQUFJLDBCQUEwQjtBQUM5QixJQUFJLHFDQUFxQztBQUN6QyxJQUFJLCtCQUErQjtBQUNuQztBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3Q0FBd0M7QUFDNUM7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLElBQUksNkJBQTZCO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLGdDQUFnQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLElBQUksaUNBQWlDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDRCQUE0QjtBQUNoQyxJQUFJLDZCQUE2QjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUciLCJzb3VyY2VzIjpbIkQ6XFxkb25neXVuLXByb2plY3RzXFx0d29cXG5vZGVfbW9kdWxlc1xcc2NoZWR1bGVyXFxjanNcXHNjaGVkdWxlci5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiBzY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKCkge1xuICAgICAgbmVlZHNQYWludCA9ICExO1xuICAgICAgaWYgKGlzTWVzc2FnZUxvb3BSdW5uaW5nKSB7XG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgICB2YXIgaGFzTW9yZVdvcmsgPSAhMDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICExO1xuICAgICAgICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCAmJlxuICAgICAgICAgICAgICAoKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSAhMSksXG4gICAgICAgICAgICAgIGxvY2FsQ2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpLFxuICAgICAgICAgICAgICAodGFza1RpbWVvdXRJRCA9IC0xKSk7XG4gICAgICAgICAgICBpc1BlcmZvcm1pbmdXb3JrID0gITA7XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudFRhc2sgJiZcbiAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lID4gY3VycmVudFRpbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkWWllbGRUb0hvc3QoKVxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gY3VycmVudFRhc2suY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRUYXNrLnByaW9yaXR5TGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250aW51YXRpb25DYWxsYmFjayA9IGNhbGxiYWNrKFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBjb250aW51YXRpb25DYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNNb3JlV29yayA9ICEwO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2sgPT09IHBlZWsodGFza1F1ZXVlKSAmJiBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRUYXNrKSBoYXNNb3JlV29yayA9ICEwO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZmlyc3RUaW1lciAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgICBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBoYXNNb3JlV29yayA9ICExO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgKGN1cnJlbnRUYXNrID0gbnVsbCksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsKSxcbiAgICAgICAgICAgICAgICAoaXNQZXJmb3JtaW5nV29yayA9ICExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhc01vcmVXb3JrID0gdm9pZCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBoYXNNb3JlV29ya1xuICAgICAgICAgICAgPyBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSgpXG4gICAgICAgICAgICA6IChpc01lc3NhZ2VMb29wUnVubmluZyA9ICExKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoKGhlYXAsIG5vZGUpIHtcbiAgICAgIHZhciBpbmRleCA9IGhlYXAubGVuZ3RoO1xuICAgICAgaGVhcC5wdXNoKG5vZGUpO1xuICAgICAgYTogZm9yICg7IDAgPCBpbmRleDsgKSB7XG4gICAgICAgIHZhciBwYXJlbnRJbmRleCA9IChpbmRleCAtIDEpID4+PiAxLFxuICAgICAgICAgIHBhcmVudCA9IGhlYXBbcGFyZW50SW5kZXhdO1xuICAgICAgICBpZiAoMCA8IGNvbXBhcmUocGFyZW50LCBub2RlKSlcbiAgICAgICAgICAoaGVhcFtwYXJlbnRJbmRleF0gPSBub2RlKSxcbiAgICAgICAgICAgIChoZWFwW2luZGV4XSA9IHBhcmVudCksXG4gICAgICAgICAgICAoaW5kZXggPSBwYXJlbnRJbmRleCk7XG4gICAgICAgIGVsc2UgYnJlYWsgYTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcGVlayhoZWFwKSB7XG4gICAgICByZXR1cm4gMCA9PT0gaGVhcC5sZW5ndGggPyBudWxsIDogaGVhcFswXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wKGhlYXApIHtcbiAgICAgIGlmICgwID09PSBoZWFwLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgZmlyc3QgPSBoZWFwWzBdLFxuICAgICAgICBsYXN0ID0gaGVhcC5wb3AoKTtcbiAgICAgIGlmIChsYXN0ICE9PSBmaXJzdCkge1xuICAgICAgICBoZWFwWzBdID0gbGFzdDtcbiAgICAgICAgYTogZm9yIChcbiAgICAgICAgICB2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBoZWFwLmxlbmd0aCwgaGFsZkxlbmd0aCA9IGxlbmd0aCA+Pj4gMTtcbiAgICAgICAgICBpbmRleCA8IGhhbGZMZW5ndGg7XG5cbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGxlZnRJbmRleCA9IDIgKiAoaW5kZXggKyAxKSAtIDEsXG4gICAgICAgICAgICBsZWZ0ID0gaGVhcFtsZWZ0SW5kZXhdLFxuICAgICAgICAgICAgcmlnaHRJbmRleCA9IGxlZnRJbmRleCArIDEsXG4gICAgICAgICAgICByaWdodCA9IGhlYXBbcmlnaHRJbmRleF07XG4gICAgICAgICAgaWYgKDAgPiBjb21wYXJlKGxlZnQsIGxhc3QpKVxuICAgICAgICAgICAgcmlnaHRJbmRleCA8IGxlbmd0aCAmJiAwID4gY29tcGFyZShyaWdodCwgbGVmdClcbiAgICAgICAgICAgICAgPyAoKGhlYXBbaW5kZXhdID0gcmlnaHQpLFxuICAgICAgICAgICAgICAgIChoZWFwW3JpZ2h0SW5kZXhdID0gbGFzdCksXG4gICAgICAgICAgICAgICAgKGluZGV4ID0gcmlnaHRJbmRleCkpXG4gICAgICAgICAgICAgIDogKChoZWFwW2luZGV4XSA9IGxlZnQpLFxuICAgICAgICAgICAgICAgIChoZWFwW2xlZnRJbmRleF0gPSBsYXN0KSxcbiAgICAgICAgICAgICAgICAoaW5kZXggPSBsZWZ0SW5kZXgpKTtcbiAgICAgICAgICBlbHNlIGlmIChyaWdodEluZGV4IDwgbGVuZ3RoICYmIDAgPiBjb21wYXJlKHJpZ2h0LCBsYXN0KSlcbiAgICAgICAgICAgIChoZWFwW2luZGV4XSA9IHJpZ2h0KSxcbiAgICAgICAgICAgICAgKGhlYXBbcmlnaHRJbmRleF0gPSBsYXN0KSxcbiAgICAgICAgICAgICAgKGluZGV4ID0gcmlnaHRJbmRleCk7XG4gICAgICAgICAgZWxzZSBicmVhayBhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAgICAgdmFyIGRpZmYgPSBhLnNvcnRJbmRleCAtIGIuc29ydEluZGV4O1xuICAgICAgcmV0dXJuIDAgIT09IGRpZmYgPyBkaWZmIDogYS5pZCAtIGIuaWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpIHtcbiAgICAgIGZvciAodmFyIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTsgbnVsbCAhPT0gdGltZXI7ICkge1xuICAgICAgICBpZiAobnVsbCA9PT0gdGltZXIuY2FsbGJhY2spIHBvcCh0aW1lclF1ZXVlKTtcbiAgICAgICAgZWxzZSBpZiAodGltZXIuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lKVxuICAgICAgICAgIHBvcCh0aW1lclF1ZXVlKSxcbiAgICAgICAgICAgICh0aW1lci5zb3J0SW5kZXggPSB0aW1lci5leHBpcmF0aW9uVGltZSksXG4gICAgICAgICAgICBwdXNoKHRhc2tRdWV1ZSwgdGltZXIpO1xuICAgICAgICBlbHNlIGJyZWFrO1xuICAgICAgICB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoY3VycmVudFRpbWUpIHtcbiAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSAhMTtcbiAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgICAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZClcbiAgICAgICAgaWYgKG51bGwgIT09IHBlZWsodGFza1F1ZXVlKSlcbiAgICAgICAgICAoaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSAhMCksXG4gICAgICAgICAgICBpc01lc3NhZ2VMb29wUnVubmluZyB8fFxuICAgICAgICAgICAgICAoKGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gITApLCBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSgpKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICAgICAgICAgIG51bGwgIT09IGZpcnN0VGltZXIgJiZcbiAgICAgICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChcbiAgICAgICAgICAgICAgaGFuZGxlVGltZW91dCxcbiAgICAgICAgICAgICAgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRZaWVsZFRvSG9zdCgpIHtcbiAgICAgIHJldHVybiBuZWVkc1BhaW50XG4gICAgICAgID8gITBcbiAgICAgICAgOiBleHBvcnRzLnVuc3RhYmxlX25vdygpIC0gc3RhcnRUaW1lIDwgZnJhbWVJbnRlcnZhbFxuICAgICAgICAgID8gITFcbiAgICAgICAgICA6ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1ZXN0SG9zdFRpbWVvdXQoY2FsbGJhY2ssIG1zKSB7XG4gICAgICB0YXNrVGltZW91dElEID0gbG9jYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2soZXhwb3J0cy51bnN0YWJsZV9ub3coKSk7XG4gICAgICB9LCBtcyk7XG4gICAgfVxuICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQoRXJyb3IoKSk7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSB2b2lkIDA7XG4gICAgaWYgKFxuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHBlcmZvcm1hbmNlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwZXJmb3JtYW5jZS5ub3dcbiAgICApIHtcbiAgICAgIHZhciBsb2NhbFBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2U7XG4gICAgICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsUGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbG9jYWxEYXRlID0gRGF0ZSxcbiAgICAgICAgaW5pdGlhbFRpbWUgPSBsb2NhbERhdGUubm93KCk7XG4gICAgICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsRGF0ZS5ub3coKSAtIGluaXRpYWxUaW1lO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHRhc2tRdWV1ZSA9IFtdLFxuICAgICAgdGltZXJRdWV1ZSA9IFtdLFxuICAgICAgdGFza0lkQ291bnRlciA9IDEsXG4gICAgICBjdXJyZW50VGFzayA9IG51bGwsXG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IDMsXG4gICAgICBpc1BlcmZvcm1pbmdXb3JrID0gITEsXG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICExLFxuICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICExLFxuICAgICAgbmVlZHNQYWludCA9ICExLFxuICAgICAgbG9jYWxTZXRUaW1lb3V0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygc2V0VGltZW91dCA/IHNldFRpbWVvdXQgOiBudWxsLFxuICAgICAgbG9jYWxDbGVhclRpbWVvdXQgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjbGVhclRpbWVvdXQgPyBjbGVhclRpbWVvdXQgOiBudWxsLFxuICAgICAgbG9jYWxTZXRJbW1lZGlhdGUgPVxuICAgICAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2Ygc2V0SW1tZWRpYXRlID8gc2V0SW1tZWRpYXRlIDogbnVsbCxcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gITEsXG4gICAgICB0YXNrVGltZW91dElEID0gLTEsXG4gICAgICBmcmFtZUludGVydmFsID0gNSxcbiAgICAgIHN0YXJ0VGltZSA9IC0xO1xuICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBsb2NhbFNldEltbWVkaWF0ZSlcbiAgICAgIHZhciBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9jYWxTZXRJbW1lZGlhdGUocGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKTtcbiAgICAgIH07XG4gICAgZWxzZSBpZiAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpLFxuICAgICAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lO1xuICAgICAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICB9O1xuICAgIH0gZWxzZVxuICAgICAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvY2FsU2V0VGltZW91dChwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUsIDApO1xuICAgICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eSA9IDU7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSA9IDE7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eSA9IDQ7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSA9IDM7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmcgPSBudWxsO1xuICAgIGV4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSAyO1xuICAgIGV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSBmdW5jdGlvbiAodGFzaykge1xuICAgICAgdGFzay5jYWxsYmFjayA9IG51bGw7XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZnVuY3Rpb24gKGZwcykge1xuICAgICAgMCA+IGZwcyB8fCAxMjUgPCBmcHNcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWRcIlxuICAgICAgICAgIClcbiAgICAgICAgOiAoZnJhbWVJbnRlcnZhbCA9IDAgPCBmcHMgPyBNYXRoLmZsb29yKDFlMyAvIGZwcykgOiA1KTtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX25leHQgPSBmdW5jdGlvbiAoZXZlbnRIYW5kbGVyKSB7XG4gICAgICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdmFyIHByaW9yaXR5TGV2ZWwgPSAzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBuZWVkc1BhaW50ID0gITA7XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSA9IGZ1bmN0aW9uIChwcmlvcml0eUxldmVsLCBldmVudEhhbmRsZXIpIHtcbiAgICAgIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBwcmlvcml0eUxldmVsID0gMztcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrID0gZnVuY3Rpb24gKFxuICAgICAgcHJpb3JpdHlMZXZlbCxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgb3B0aW9uc1xuICAgICkge1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvcHRpb25zICYmIG51bGwgIT09IG9wdGlvbnNcbiAgICAgICAgPyAoKG9wdGlvbnMgPSBvcHRpb25zLmRlbGF5KSxcbiAgICAgICAgICAob3B0aW9ucyA9XG4gICAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJiAwIDwgb3B0aW9uc1xuICAgICAgICAgICAgICA/IGN1cnJlbnRUaW1lICsgb3B0aW9uc1xuICAgICAgICAgICAgICA6IGN1cnJlbnRUaW1lKSlcbiAgICAgICAgOiAob3B0aW9ucyA9IGN1cnJlbnRUaW1lKTtcbiAgICAgIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgdmFyIHRpbWVvdXQgPSAtMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRpbWVvdXQgPSAyNTA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICB0aW1lb3V0ID0gMTA3Mzc0MTgyMztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHRpbWVvdXQgPSAxZTQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGltZW91dCA9IDVlMztcbiAgICAgIH1cbiAgICAgIHRpbWVvdXQgPSBvcHRpb25zICsgdGltZW91dDtcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSB7XG4gICAgICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICAgICAgcHJpb3JpdHlMZXZlbDogcHJpb3JpdHlMZXZlbCxcbiAgICAgICAgc3RhcnRUaW1lOiBvcHRpb25zLFxuICAgICAgICBleHBpcmF0aW9uVGltZTogdGltZW91dCxcbiAgICAgICAgc29ydEluZGV4OiAtMVxuICAgICAgfTtcbiAgICAgIG9wdGlvbnMgPiBjdXJyZW50VGltZVxuICAgICAgICA/ICgocHJpb3JpdHlMZXZlbC5zb3J0SW5kZXggPSBvcHRpb25zKSxcbiAgICAgICAgICBwdXNoKHRpbWVyUXVldWUsIHByaW9yaXR5TGV2ZWwpLFxuICAgICAgICAgIG51bGwgPT09IHBlZWsodGFza1F1ZXVlKSAmJlxuICAgICAgICAgICAgcHJpb3JpdHlMZXZlbCA9PT0gcGVlayh0aW1lclF1ZXVlKSAmJlxuICAgICAgICAgICAgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWRcbiAgICAgICAgICAgICAgPyAobG9jYWxDbGVhclRpbWVvdXQodGFza1RpbWVvdXRJRCksICh0YXNrVGltZW91dElEID0gLTEpKVxuICAgICAgICAgICAgICA6IChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gITApLFxuICAgICAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIG9wdGlvbnMgLSBjdXJyZW50VGltZSkpKVxuICAgICAgICA6ICgocHJpb3JpdHlMZXZlbC5zb3J0SW5kZXggPSB0aW1lb3V0KSxcbiAgICAgICAgICBwdXNoKHRhc2tRdWV1ZSwgcHJpb3JpdHlMZXZlbCksXG4gICAgICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgfHxcbiAgICAgICAgICAgIGlzUGVyZm9ybWluZ1dvcmsgfHxcbiAgICAgICAgICAgICgoaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSAhMCksXG4gICAgICAgICAgICBpc01lc3NhZ2VMb29wUnVubmluZyB8fFxuICAgICAgICAgICAgICAoKGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gITApLFxuICAgICAgICAgICAgICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSgpKSkpO1xuICAgICAgcmV0dXJuIHByaW9yaXR5TGV2ZWw7XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gc2hvdWxkWWllbGRUb0hvc3Q7XG4gICAgZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHZhciBwYXJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcGFyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wKEVycm9yKCkpO1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/scheduler/cjs/scheduler.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(pages-dir-browser)/./node_modules/scheduler/index.js":
|
||
/*!*****************************************!*\
|
||
!*** ./node_modules/scheduler/index.js ***!
|
||
\*****************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"(pages-dir-browser)/./node_modules/scheduler/cjs/scheduler.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHBhZ2VzLWRpci1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLHVKQUEwRDtBQUM1RCIsInNvdXJjZXMiOlsiRDpcXGRvbmd5dW4tcHJvamVjdHNcXHR3b1xcbm9kZV9tb2R1bGVzXFxzY2hlZHVsZXJcXGluZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(pages-dir-browser)/./node_modules/scheduler/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "?608e":
|
||
/*!*****************************************************!*\
|
||
!*** private-next-instrumentation-client (ignored) ***!
|
||
\*****************************************************/
|
||
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ })
|
||
|
||
},
|
||
/******/ __webpack_require__ => { // webpackRuntimeModules
|
||
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
||
/******/ var __webpack_exports__ = (__webpack_exec__("(pages-dir-browser)/./node_modules/next/dist/client/next-dev.js"));
|
||
/******/ _N_E = __webpack_exports__;
|
||
/******/ }
|
||
]); |